Modul 4_LA_uP dan uC 2022

Modul IV Mikroprosesor & Mikrokontroler

Kontrol Kolam Ikan Otomatis




1. Tujuan [Kembali]

a. Dapat membuat alat kontrol kolam ikan otomatis menggunakan mikrokontroler arduino UNO

b. Mengimplementasikan komunikasi SPI pada alat kontrol kolam ikan otomatis.

c. Mengetahui dan memahami prinsip kerja dari sensor dan komponen yang digunakan pada rangkaian.

2. Alat dan bahan[Kembali]

  • Alat


  • Bahan

3. Dasar Teori[Kembali]

 1) Pulse Width Modulation (PWM) 

Gambar duty cycle 

PWM (Pulse Width Modulation) adalah salah satu teknik modulasi dengan mengubah lebar pulsa (duty cylce) dengan nilai amplitudo dan frekuensi yang tetap. Satu siklus pulsa merupakan kondisi high kemudian berada di zona transisi ke kondisi low. Lebar pulsa PWM berbanding lurus dengan amplitudo sinyal asli yang belum termodulasi. Duty Cycle adalah perbandingan antara waktu ON (lebar pulsa High) dengan perioda. Duty Cycle biasanya dinyatakan dalam bentuk persen (%).

· Duty Cycle = tON / ttotal

· tON = Waktu ON atau Waktu dimana tegangan keluaran berada pada posisi tinggi (highatau 1)

· tOFF = Waktu OFF atau Waktu dimana tegangan keluaran berada pada posisi rendah(low atau 0)

· ttotal = Waktu satu siklus atau penjumlahan antara tON dengan tOFF atau disebut jugadengan “periode satu gelombang”. 

Pada board Arduino Uno, pin yang bisa dimanfaatkan untuk PWM adalah pin yang diberi tanda tilde (~), yaitu pin 3, 5, 6, 9, 10, dan pin 11. Pin-pin tersebut merupakan pin yang bisa difungsikan untuk input analog atau output analog. Oleh sebab itu, jika akan menggunakan PWM pada pin ini, bisa dilakukan dengan perintah analogWrite(); PWM pada arduino bekerja pada frekuensi 500Hz, artinya 500 siklus/ketukan dalam satu detik. Untuk setiap siklus, kita bisa memberi nilai dari 0 hingga 255. Ketika kita memberikan angka 0, berarti pada pin tersebut tidak akan pernah bernilai 5 volt (pin selalu bernilai 0 volt). Sedangkan jika kita memberikan nilai 255, maka sepanjang siklus akan bernilai 5 volt (tidak pernah 0 volt). Jika kita memberikan nilai 127 (kita anggap setengah dari 0 hingga 255, atau 50% dari 255), maka setengah siklus akan bernilai 5 volt, dan setengah siklus lagi akan bernilai 0 volt. Sedangkan jika jika memberikan 25% dari 255 (1/4 * 255 atau 64), maka 1/4 siklus akan bernilai 5 volt, dan 3/4 sisanya akan bernilai 0 volt, dan ini akan terjadi 500 kali dalam 1 detik.

2) Arduino UNO

Arduino adalah kit elektronik atau papan rangkaian elektronik open source yang di dalamnya terdapat komponen utama yaitu sebuah chip mikrokontroler dengan jenis AVR dari perusahaan Atmel. Arduino yang kita gunakan dalam praktikum ini adalah Arduino Uno yang menggunakan chip AVR ATmega 328P. Dalam memprogram Arduino, kita bisa menggunakan komunikasi serial agar Arduino dapat berhubungan dengan komputer ataupun perangkat lain.

Adapun spesifikasi dari Arduino Uno ini adalah sebagai berikut :

Microcontroller   

ATmega328P

Operating Voltage

     5 V

Input Voltage (recommended)

    7 – 12 V

Input Voltage (limit) Digital I/O Pins 14 (of which 6 provide PWM output)

    6 – 20 V

PWM Digital I/O Pins                                

    6

Analog Input Pins                                       

    6

DC Current per I/O Pin                              

    20 mA

DC Current for 3.3V Pin                            

    50 mA

Flash Memory                                            

    32 KB of which 0.5 KB used by bootloader

SRAM                                                        

    2 KB

EEPROM                                                   

    1 KB

Clock Speed

    16 Hz

Bagian-bagian arduino uno:

1. Power Usb, digunakan untuk menghubungkan Papan Arduino dengan komputer lewat koneksi USB.

2. Power Jack, Supply atau sumber listrik untuk Arduino dengan tipe Jack. Input DC 5 - 12 V.

3. Crystal Oscillator, Kristal ini digunakan sebagai layaknya detak jantung pada Arduino. Jumlah cetak menunjukkan 16000 atau 16000 kHz, atau 16 MHz.

4. Reset, Digunakan untuk mengulang program Arduino dari awal atau Reset.

5. Digital Pins I / O, Papan Arduino UNO memiliki 14 Digital Pin. Berfungsi untuk memberikan nilai logika ( 0 atau 1 ). Pin berlabel " ~ " adalah pin-pin PWM (Pulse Width Modulation) yang dapat digunakan untuk menghasilkan PWM. 

6. Analog Pins, Papan Arduino UNO memiliki 6 pin analog A0 sampai A5. Digunakan untuk membaca sinyal atau sensor analog seperti sensor jarak, suhu dsb, dan mengubahnya menjadi nilai digital.

7. LED Power Indicator, Lampu ini akan menyala dan menandakan Papan Arduino mendapatkan supply listrik dengan baik.

 

3) Ultrasonic Sensor (HC-SR04)

Sensor ultrasonik adalah sebuah sensor yang berfungsi untuk mengubah besaran fisis (bunyi) menjadi besaran listrik dan sebaliknya. Cara kerja sensor ini didasarkan pada prinsip dari pantulan suatu gelombang suara sehingga dapat dipakai untuk menafsirkan eksistensi (jarak) suatu benda dengan frekuensi tertentu. Disebut sebagai sensor ultrasonik karena sensor ini menggunakan gelombang ultrasonik (bunyi ultrasonik).

Cara Kerja Sensor Ultrasonik:

Pada sensor ultrasonik, gelombang ultrasonik dibangkitkan melalui sebuah alat yang disebut dengan piezoelektrik dengan frekuensi tertentu. Piezoelektrik ini akan menghasilkan gelombang ultrasonik (umumnya berfrekuensi 40kHz) ketika sebuah osilator diterapkan pada benda tersebut. Secara umum, alat ini akan menembakkan gelombang ultrasonik menuju suatu area atau suatu target. Setelah gelombang menyentuh permukaan target, maka target akan memantulkan kembali gelombang tersebut. Gelombang pantulan dari target akan ditangkap oleh sensor, kemudian sensor menghitung selisih antara waktu pengiriman gelombang dan waktu gelombang pantul diterima.

 

Grafik sensor:

 

Berdasarkan grafik di atas dapat disimpulkan bahwa bahwa sensor ultrasonik memiliki kinerja rendah dalam pengukuranpada jarak yang rendah. Kinerja sensor memiliki hasil yang akurat untuk pengukuran jarak jauh.

Secara detail, cara kerja sensor ultrasonik adalah sebagai berikut:

· Sinyal dipancarkan oleh pemancar ultrasonik dengan frekuensi tertentu dan dengan durasi waktu tertentu. Sinyal tersebut berfrekuensi diatas 20kHz. Untuk mengukur jarak benda (sensor jarak), frekuensi yang umum digunakan adalah 40kHz.

· Sinyal yang dipancarkan akan merambat sebagai gelombang bunyi dengan kecepatan sekitar 340 m/s. Ketika menumbuk suatu benda, maka sinyal tersebut akan dipantulkan oleh benda tersebut.

· Setelah gelombang pantulan sampai di alat penerima, maka sinyal tersebut akan diproses untuk menghitung jarak benda tersebut. Jarak benda dihitung berdasarkan rumus :

S = 340.t/2

dimana S merupakan jarak antara sensor ultrasonik dengan benda (bidang pantul), dan t     adalah selisih antara waktu pemancaran gelombang oleh transmitter dan waktu ketika     gelombang pantul diterima receiver.

 

4) DS18B20

 

Sensor Suhu DS18B20 adalah sensor Suhu yang menggunakan interface one wire, sehingga hanya menggunakan kabel yang sedikit dalam instalasi nya. Unik nya sensor ini bisa di jadikan paralel dengan satu input. Arti nya kita bisa menggunakan sensor DS18B20 lebih dari satu namun output sensor nya hanya di hubungkan ke satu PIN Arduino. Alasan ini membuat sensor ini banyak di gunakan, apalagi sensor ini memiliki tipe waterprof, sehingga sensor ini bisa kita buat sebagai alat ukur dan kontrol pemanas air.

Spesifikasi:

· Unique 1 wire interface dengan output satu pin

· Range Suhu yang di ukur dari -55C – 125C (-67F – 257F)

· Akurasi pada suhu -10C sampai +85C adalah 0.5C

· Resolusi sensor 12bit

· Voltage 3v – 5.5V

· Pull up voltage 3v – 5.5v

 

Pada mode Normal power, pin akan terhubung sesuai dengan namanya yaitu VCC ke sumber tegangan (+5V), GND akan terhubung ke ground, dan Data akan terhubung ke pin digital arduino. Namun diantara pin data dan VCC diberi resistor pull-up sebesar +- 4K7 Ohm. Fungsi resistor pull-up ini untuk mengatasi kondisi mengambang (diantara Low dan High) yang terjadi pada rangkaian sensor agar keluaran dapat terdefinisi antara HIGH atau LOW.

Pada Parasite Power, perbedaannya pada pin GND dan VCC disatukan dan terhubung dengan Ground. Sedangkan Data tetap akan terhubung ke pin arduino dengan juga tetap menggunakan resistor pull-up. Pada mode ini daya sensor berasal dari jalur Data.

 

5) LDR Sensor

 

Light Dependent Resistor atau disingkat dengan LDR adalah jenis Resistor yang nilai hambatan atau nilai resistansinya tergantung pada intensitas cahaya yang diterimanya. Nilai Hambatan LDR akan menurun pada saat cahaya terang dan nilai Hambatannya akan menjadi tinggi jika dalam kondisi gelap. Dengan kata lain, fungsi LDR (Light Dependent Resistor) adalah untuk menghantarkan arus listrik jika menerima sejumlah intensitas cahaya (Kondisi Terang) dan menghambat arus listrik dalam kondisi gelap.

Prinsip kerja LDR sangat sederhana tak jauh berbeda dengan variable resistor pada umumnya. LDR dipasang pada berbagai macam rangkaian elektronika dan dapat memutus dan menyambungkan aliran listrik berdasarkan cahaya. Semakin banyak cahaya yang mengenai LDR maka nilai resistansinya akan menurun, dan sebaliknya semakin sedikit cahaya yang mengenai LDR maka nilai hambatannya akan semakin membesar. Naik turunnya nilai Hambatan akan sebanding dengan jumlah cahaya yang diterimanya. Pada umumnya, Nilai Hambatan LDR akan mencapai 200 Kilo Ohm (kΩ) pada kondisi gelap dan menurun menjadi 500 Ohm (Ω) pada Kondisi Cahaya Terang.

LDR (Light Dependent Resistor) yang merupakan Komponen Elektronika peka cahaya ini sering digunakan atau diaplikasikan dalam Rangkaian Elektronika sebagai sensor pada Lampu Penerang Jalan, Lampu Kamar Tidur, Rangkaian Anti Maling, Shutter Kamera, Alarm dan lain sebagainya.

Bagian-bagian LDR:

Grafik respon LDR:

 

Dari grafik tersebut dapat disimpulkan bahwa besarnya hambatan atau resistansi dari sensor ldr dipengaruhi oleh intensitas cahaya yang diberikan, dan dapat dilihat bahwa semakin besar intensitas cahaya maka nilai resistansinya akan semakin kecil dan begitu sebaliknya.


6) Touch Sensor

 

Touch Sensor atau Sensor Sentuh adalah sensor elektronik yang dapat mendeteksi sentuhan. Sensor Sentuh ini pada dasarnya beroperasi sebagai sakelar apabila disentuh, seperti sakelar pada lampu, layar sentuh ponsel dan lain sebagainya. Sensor Sentuh ini dikenal juga sebagai Sensor Taktil (Tactile Sensor). Seiring dengan perkembangan teknologi, sensor sentuh ini semakin banyak digunakan dan telah menggeser peranan sakelar mekanik pada perangkat-perangkat elektronik.

Cara kerja sensor sentuh adalah active low, karena rangkaian ini mengggunakan resistor, resistor pulp up dan pulp down, rangkaian pulp up berisfat active low mengeluarkan sinyal 1 kecuali saat saklar aktif, namun sebaliknya resistor pulp down akan akrif jika mengeluarkan sinyal 0 kecuali saat saklar tidak aktif.

Jika rangkaian mengeluarkan sinyal 1 saat tombol tidak ditekan, namun jika sungut tertekan maka sinyal output akan menjadi 0 karena dihubungkan dengan ground.

 

Grafik Touch Sensor

 

7) RTC DS1307

 

RTC (Real Time Clock) merupakan jenis timer yang bekerja berdasarkan waktu nyata, atau dengan kata lain berdasarkan waktu sesaui waktu kita. Agar dapat berfungsi, pewaktu ini membutuhkan dua parameter utama yang harus ditentukan, yaitu pada saat mulai (start) dan pada saat berhenti (stop).

RTC dilengkapi dengan baterai sebagai supply pada chip sehingga jam akan up to date. Pada RTC dinilai cukup akurat sebagai pewaktu (timer) karena  menggunakan osilator Kristal pada rangkaiannya.

Fungsi pin-pin yang terdapat pada RTC :

· Pin VCC : sebagai power supply  dan memiliki tegangan kerja 5V

· Pin GND : dihubungkan ke ground

· Pin SCL : sebagai saluran clock untuk komunikasi data antara mikroontroler dengan RTC

· Pin SDA : sebagai saluran data untuk komunikasi data antara mikrokontroler dan RTC

· X1 dan X2 : untuk saluran clock yang bersumber dari crustal external

· Vbat : sebagai saluran energi listrik dari battery external

DS1307 merupakan salah satu tipe IC RTC yang dapat bekerja dalam daya listrik rendah, yang juga sering kita jumpai dalam PC/hanphone. Waktu jam dan kalender memberikan informasi detik, menit, jam, hari, tanggal, bulan, dan tahun. Untuk bagian jam dapat berformat 24 jam atau 12 jam. Pendeteksi sumber listrik juga disediakan untuk mendeteksi kegagalan sumber listrik dan langsung mengalihkannya ke sumber baterai.

Komunikasi yang digukan untuk RTC mengacu I2C-Bus atau Inter-Integrated Circuit Bus, merupakan bus serial yang dikembangkan oleh Phillips. I2C Bus digunakan untuk menghubungkan berbagai macam IC yang dikontrol oleh sistem microprocessor atau microcontroller (intelligent control application).

 

8) Baterai

 

Baterai (Battery) adalah sebuah alat yang dapat merubah energi kimia yang disimpannya menjadi energi Listrik yang dapat digunakan oleh suatu perangkat Elektronik. Hampir semua perangkat elektronik yang portabel seperti Handphone, Laptop, Senter, ataupun Remote Control menggunakan Baterai sebagai sumber listriknya. Dalam kehidupan kita sehari-hari, kita dapat menemui dua jenis Batersai yaitu Baterai yang hanya dapat dipakai sekali saja (Single Use) dan Baterai yang dapat di isi ulang (Rechargeable).

Baterai Primer (Baterai Sekali Pakai/Single Use)

Baterai Primer atau Baterai sekali pakai ini merupakan baterai yang paling sering ditemukan di pasaran, hampir semua toko dan supermarket menjualnya. Hal ini dikarenakan penggunaannya yang luas dengan harga yang lebih terjangkau. Baterai jenis ini pada umumnya memberikan tegangan 1,5 Volt dan terdiri dari berbagai jenis ukuran seperti AAA (sangat kecil), AA (kecil) dan C (medium) dan D (besar). Disamping itu, terdapat juga Baterai Primer (sekali pakai) yang berbentuk kotak dengan tegangan 6 Volt ataupun 9 Volt.

 

Baterai Sekunder (Baterai Isi Ulang/Rechargeable)

Baterai Sekunder adalah jenis baterai yang dapat di isi ulang atau Rechargeable Battery. Pada prinsipnya, cara Baterai Sekunder menghasilkan arus listrik adalah sama dengan Baterai Primer. Hanya saja, Reaksi Kimia pada Baterai Sekunder ini dapat berbalik (Reversible). Pada saat Baterai digunakan dengan menghubungkan beban pada terminal Baterai (discharge), Elektron akan mengalir dari Negatif ke Positif. Sedangkan pada saat Sumber Energi Luar (Charger) dihubungkan ke Baterai Sekunder, elektron akan mengalir dari Positif ke Negatif sehingga terjadi pengisian muatan pada baterai. Jenis-jenis Baterai yang dapat di isi ulang (rechargeable Battery) yang sering kita temukan antara lain seperti Baterai Ni-cd (Nickel-Cadmium), Ni-MH (Nickel-Metal Hydride) dan Li-Ion (Lithium-Ion).

9) Relay

Relay adalah Saklar (Switch) yang dioperasikan secara listrik dan merupakan komponen Electromechanical (Elektromekanikal) yang terdiri dari 2 bagian utama yakni Elektromagnet (Coil) dan Mekanikal (seperangkat Kontak Saklar/Switch). Relay menggunakan Prinsip Elektromagnetik untuk menggerakkan Kontak Saklar sehingga dengan arus listrik yang kecil (low power) dapat menghantarkan listrik yang bertegangan lebih tinggi.

Konfigurasi pin:

Nomor PIN

Nama Pin

Deskripsi

1

Coil End 1

Digunakan untuk memicu (On / Off) Relay, Biasanya satu ujung terhubung ke 12V dan ujung lainnya ke ground

2

Coil End 2

Digunakan untuk memicu (On / Off) Relay, Biasanya satu ujung terhubung ke 12V dan ujung lainnya ke ground

3

Common (COM)

Common terhubung ke salah satu Ujung Beban yang akan dikontrol

4

Normally Close (NC)

Ujung lain dari beban terhubung ke NO atau NC. Jika terhubung ke NC beban tetap terhubung sebelum pemicu

5

Normally Open (NO)

Ujung lain dari beban terhubung ke NO atau NC. Jika terhubung ke NO, beban tetap terputus sebelum pemicu

Spesifikasi:

· Trigger Voltage (Voltage across coil) : 5V DC

· Trigger Current (Nominal current) : 70mA

·  Maximum AC load current: 10A @ 250/125V AC

· Maximum DC load current: 10A @ 30/28V DC

· Compact 5-pin configuration with plastic moulding

· Operating time: 10msec Release time: 5msec

· Maximum switching: 300 operating/minute (mechanically)

 

10) Resistor

Resistor merupakan komponen penting dan sering dijumpai dalam sirkuit Elektronik. Boleh dikatakan hampir setiap sirkuit Elektronik pasti ada Resistor. Tetapi banyak diantara kita yang bekerja di perusahaan perakitan Elektronik maupun yang menggunakan peralatan Elektronik tersebut tidak mengetahui cara membaca kode warna ataupun kode angka yang ada ditubuh Resistor itu sendiri.

Seperti yang dikatakan sebelumnya, nilai Resistor yang berbentuk Axial adalah diwakili oleh Warna-warna yang terdapat di tubuh (body) Resistor itu sendiri dalam bentuk Gelang. Umumnya terdapat 4 Gelang di tubuh Resistor, tetapi ada juga yang 5 Gelang.

Gelang warna Emas dan Perak biasanya terletak agak jauh dari gelang warna lainnya sebagai tanda gelang terakhir. Gelang Terakhirnya ini juga merupakan nilai toleransi pada nilai Resistor yang bersangkutan.

Tabel dibawah ini adalah warna-warna yang terdapat di Tubuh Resistor :

 

Perhitungan untuk Resistor dengan 4 Gelang warna :

Cara menghitung Toleransi :
2.200 Ohm dengan Toleransi 5% =
2200 – 5% = 2.090
2200 + 5% = 2.310
ini artinya nilai Resistor tersebut akan berkisar antara 2.090 Ohm ~ 2.310 Ohm.

 

11) Transistor NPN 2N22

 

Transistor adalah sebuah komponen di dalam elektronika yang diciptakan dari bahan-bahan semikonduktor dan memiliki tiga buah kaki. Masing-masing kaki disebut sebagai basis, kolektor, dan emitor.

· Emitor (E) memiliki fungsi untuk menghasilkan elektron atau muatan negatif.

· Kolektor (C) berperan sebagai saluran bagi muatan negatif untuk keluar dari dalam transistor.

· Basis (B) berguna untuk mengatur arah gerak muatan negatif yang keluar dari transistor melalui kolektor.

Fungsi dari transistor sendiri adalah memperkuat arus listrik yang masuk ke dalam rangkaian. Seperti yang telah disebutkan, transistor terdiri dari dua jenis yaitu NPN dan PNP. Transistor NPN akan aktif ketika kaki basis diberi arus listrik bermuatan negatif. Sebaliknya, transistor PNP akan aktif apabila kaki basis mendapatkan tegangan listrik positif. Pada transistor NPN, kaki basis memiliki kutub positif dan bersinggungan langsung dengan sumber listrik atau baterai. Sedangkan kaki emitor memiliki kutub negatif karena berhubungan langsung dengan massa. Kutub negatif juga ditemukan pada kaki kolektor yang menghubungkan massa di rangkaian listrik.

Cara kerja transistor:

Apabila saklar dalam posisi tertutup atau terhubung arus listrik akan mengalir dari kutub baterai positif melewati beban (dalam hal ini lampu) kemudian menuju kaki kolektor dan berhenti di sana. Arus berhenti dikarenakan transistor masih belum mendapatkan pemicu sehingga posisinya tidak aktif. Hal ini menyebabkan lampu masih tetap mati. Pada waktu yang bersamaan, arus pemicu yang ukurannya lebih kecil dibandingkan arus listrik utama mengalir dari sumber listrik menuju ke resistor kemudian ke saklar, melewati kaki basis transistor lanjut ke emitor, dan berlanjut menuju massa. Karena lampu mendapatkan masa listrik, beban tersebut pun akan menyala.

 

12) LED

 

  LED merupakan sebuah komponen elektromagnetik yang dapat memancarkan cahaya monokromatik melalui tegangan maju. LED terbuat dari bahan semikonduktor yang merupakan keluarga dioda. LED dapat memancarkan berbagai warna, tergantung dari bahan semikonduktor yang digunakan

Spesifikasi LED:

 

Grafik:

Cara kerja LED (Light Emitting Diode)

LED atau Light Emitting Diode yang memancarkan cahaya ketika dialiri tegangan maju ini juga dapat digolongkan sebagai Transduser yang dapat mengubah energi listrik menjadi energi cahaya.

 

13) Motor Servo (SG90)

 

Motor servo adalah sebuah perangkat listrik yang dapat mendorong atau memutar objek dengan presisi tinggi. Jika kamu ingin memutar sebuah objek pada beberapa sudut atau jarak tertentu, maka kamu bisa menggunakan motor servo.

Pada dasarnya motor servo hanyalah sebuah motor listrik yang dijalankan melalui mekanisme servo. Apabila motor yang digunakan menggunakan tenaga DC maka disebut motor servo DC dan sebaliknya apabila menggunakan tenaga AC maka disebut motor servo AC.

Nilai motor servo berupa kg/cm, contohnya motor servo ada yang 3 kg/cm, 6 kg/cm maupun 12 kg/cm atau sesuai dengan kebutuhan pemakaian. Kg/cm menandakan berapa besar bobot/berat sebuah benda yang dapat diangkat motor servo pada jarak tertentu.

Bagian motor servo

 

Pada motor servo kontrol, motor terpasang oleh roda gigi ke roda kontrol. Saat motor berputar, resistansi potensiometer akan berubah, sehingga rangkaian kontrol dapat dengan tepat mengatur seberapa banyak gerakan yang ada dan ke arah mana.

Ketika poros motor berada pada posisi yang diinginkan, daya yang disuplai ke motor dihentikan. Jika tidak, motor diputar ke arah yang sesuai. Posisi yang diinginkan dikirim melalui pulsa listrik melalui kabel sinyal. Kecepatan motor sebanding dengan perbedaan antara posisi aktual dan posisi yang diinginkan. Jadi jika motor berada di dekat posisi yang diinginkan, ia akan berputar perlahan, jika tidak maka akan berputar cepat, ini disebut sebagai kontrol proporsional.

Prinsip kerja:

Servo dikontrol dengan mengirimkan pulsa listrik dengan lebar variabel, atau biasa disebut Pulse Width Modulation (PWM) melalui kabel kontrol. Ada pulsa minimum, pulsa maksimum, dan tingkat pengulangan.

Motor servo biasanya hanya bisa berputar 90° ke arah mana pun dengan total gerakan 180°. Posisi netral motor didefinisikan sebagai posisi di mana servo memiliki jumlah putaran potensial yang sama di kedua arah searah jarum jam atau berlawanan arah jarum jam.

PWM yang dikirim ke motor akan menentukan posisi poros, dan berdasarkan pada durasi pulsa yang dikirim melalui kabel kontrol maka rotor akan berputar ke posisi yang diinginkan. Motor servo diharuskan agar mampu melihat pulsa setiap 20 milidetik (ms), dimana panjang pulsa tersebut akan menentukan seberapa jauh motor berputar.

 

14) LCD (LM016L)

 

LCD (Liquid Crystal Display) 16x2 adalah jenis media tampilan  atau Display dari bahan cairan kristal sebagai penampil utama.LCD 16x2 dapat menampilkan sebanyak 32 karakter yang terdiri dari 2 baris dengan tiap baris menampilkan 16 karakter.

Bagian-bagian LCD atau Liquid Crystal Display diantaranya adalah:

· Lapisan Terpolarisasi 1 (Polarizing Film 1)

· Elektroda Positif (Positive Electrode)

· Lapisan Kristal Cair (Liquid Cristal Layer)

· Elektroda Negatif (Negative Electrode)

· Lapisan Terpolarisasi 2 (Polarizing film 2)

· Backlight atau Cermin (Backlight or Mirror)

Dibawah ini adalah gambar struktur dasar sebuah LCD:

Pin out diagram LCD 16X2:

 

· Pin1 (Ground / Source Pin): Ini adalah pin tampilan GND, digunakan untuk menghubungkan terminal GND unit mikrokontroler atau sumber daya

· Pin2 (VCC / Source Pin): Ini adalah pin catu tegangan pada layar, digunakan untuk menghubungkan pin catu daya dari sumber listrik

· Pin3 (V0 / VEE / Control Pin): Pin ini mengatur perbedaan tampilan, yang digunakan untuk menghubungkan POT yang dapat diubah yang dapat memasok 0 hingga 5V.

· Pin4 (Register Select / Control Pin): Pin ini berganti-ganti antara perintah atau data register, digunakan untuk menghubungkan pin unit mikrokontroler dan mendapatkan 0 atau 1 (0 = mode data, dan 1 = mode perintah).

· Pin5 (Pin Baca / Tulis / Kontrol): Pin ini mengaktifkan tampilan di antara operasi baca atau tulis, dan terhubung ke pin unit mikrokontroler untuk mendapatkan 0 atau 1 (0 = Operasi Tulis, dan 1 = Operasi Baca).

· Pin 6 (Mengaktifkan / Mengontrol Pin): Pin ini harus dipegang tinggi untuk menjalankan proses Baca / Tulis, dan terhubung ke unit mikrokontroler & terus-menerus dipegang tinggi.

· Pin 7-14 (Pin Data): Pin ini digunakan untuk mengirim data ke layar. Pin ini terhubung dalam mode dua-kawat seperti mode 4-kawat dan mode 8-kawat. Dalam mode 4-kawat, hanya empat pin yang terhubung ke unit mikrokontroler seperti 0 hingga 3, sedangkan dalam mode 8-kawat, 8-pin terhubung ke unit mikrokontroler seperti 0 hingga 7

· Pin15 (+ve pin LED): Pin ini terhubung ke +5V

· Pin 16 (-ve pin LED): Pin ini terhubung ke GND.

 

15) Buzzer

 

  Buzzer listrik adalah sebuah komponen elektronika yang dapat mengubah sinyal listrik menjadi getaran suara.

Buzzer dapat bekerja dengan baik dalam menghasilkan frekuensi kisaran 1-5 KHz hingga 100 KHz untuk aplikasi ultrasound. Tegangan operasional buzzer yang umumnya berkisar 3-12 V.

Spesifikasi:

 

Cara Kerja Buzzer

    Tegangabn Listrik yang mengalir ke buzzer akan menyebabkan gerakan mekanis, gerakan tersebut akan diubah menjadi suara atau bunyi yang dapat didengar oleh manusia.

 

16) Papan Breadboard

 

Breadboard merupakan sebuah board atau papan yang berfungsi untuk merancang sebuah rangkaian elektronik sederhana. Breadboard tersebut nantinya akan dilakukan prototipe atau uji coba tanpa harus melakukan solder.

Umumnya breadboard terbuat dari bahan plastik yang juga sudah terdapat berbagai lubang. Lubang tersebut sudah diatur sebelumnya sehingga membentuk pola yang didasarkan pada pola jaringan di dalamnya. Selain itu, breadboard yang bisa ditemukan di pasaran umumnya dibagi menjadi 3 ukuran. Pertama dinamakan sebagai mini breadboard, kedua disebut medium breadboard, dan yang terakhir dinamakan sebagai large breadboard. Untuk mini breadboard, ia memiliki kurang lebih 170 titik.

Sementara untuk medium breadboard sudah dilengkapi dengan kurang lebih 400 titik. Large breadboard memiliki lubang kurang lebih 830. Seperti gambar yang sudah ada di atas, bahwa mini breadboard memiliki 200 titik hubung. Di bagian kanan sudah bisa dilihat pola layout yang digambarkan dengan garis biru. Di sini bisa dilihat beberapa tulisan mulai dari A sampai dengan J.

Setelah itu masih ada angka 1,5, 10, 15, maupun 20. Perpaduan antara huruf dan juga angka tersebut merupakan sebuah koordinat. Misalnya, A1, B1, sampai dengan E1 saling terkoneksi berdasarkan pola koneksinya (Bisa dilihat pada gambar berwarna biru). Sementara untuk A2 sampai dengan E2, A3 sampai dengan E3, F1 sampai dengan J1, dan seterusnya. Dengan memahami pola tersebut, maka kita nanti bisa membuat sebuah prototipe sehingga kita tidak bingung ketika harus menempatkan komponen-komponen elektronik tersebut sesuai dengan tempatnya masing-masing.


17) Kabel Jumper

Jumper adalah kabel elektrik yang memiliki pin konektor di setiap ujungnya dan memungkinkanmu untuk menghubungkan dua komponen yang melibatkan Arduino tanpa memerlukan solder.

Intinya kegunaan kabel jumper ini adalah sebagai konduktor listrik untuk menyambungkan rangkaian listrik.

Jenis jenis kabel jumper yang paling umum adalah sebagai berikut:

· Kabel Jumper Male to Male

Jenis yang pertama adalah kabel jumper male male. Kabel jumper male to male adalah adalah jenis yang sangat yang sangat cocok untuk kamu yang mau membuat rangkaian elektronik di breadboard.

· Kabel Jumper Male to Female

Kabel jumper male female memiliki ujung konektor yang berbeda pada tiap ujungnya, yaitu male dan female. Biasanya kabel ini digunakan untuk menghubungkan komponen elektronika selain Arduino ke breadboard.

· Kabel Jumper Female to Female

 

Jenis kabel jumper yang terakhir adalah kabel female to female. Kabel ini sangat cocok untuk menghubungkan antar komponen yang memiliki  header male. contohnya seperti sensor ultrasonik HC-SR04, sensor suhu DHT, dan masih banyak lagi.

 

18) Komunikasi yang digunakan

Serial Peripheral Interface (SPI)

Serial Peripheral Interface ( SPI ) merupakan salah satu mode komunikasi serial synchrounous kecepatan tinggi yang dimiliki oleh ATmega 328. Komunikasi SPI membutuhkan 3 jalur yaitu MOSI, MISO, dan SCK. Melalui komunikasi ini data dapat saling dikirimkan baik antara mikrokontroller maupun antara mikrokontroller dengan peripheral lain di luar mikrokontroler.

· MOSI : Master Output Slave Input Artinya jika dikonfigurasi sebagai master maka pin MOSI sebagai output tetapi jika dikonfigurasi sebagai slave maka pin MOSI sebagai input.

· MISO : Master Input Slave Output Artinya jika dikonfigurasi sebagai master maka pin MISO sebagai input tetapi jika dikonfigurasi sebagai slave maka pin MISO sebagai output.

· SCLK : Clock Jika dikonfigurasi sebagai master maka pin CLK berlaku sebagai output tetapi jika dikonfigurasi sebagai slave maka pin CLK berlaku sebagai input.

· SS/CS : Slave Select/ Chip Select adalah jalur master memilih slave mana yang akan dikirimkan data.

 

Cara kerja komunikasi SPI

Sinyal clock dialirkan dari master ke slave yang berfungsi untuk sinkronisasi. Master dapat memilih slave mana yang akan dikirimkan data melalui slave select, kemudian data dikirimkan dari master ke slave melalui MOSI. Jika master butuh respon data maka slave akan mentransfer data ke master melalui MISO.


4. Percobaan[Kembali]
a. Hardware[Kembali]

 

b. Rangkaian simulasi[Kembali]


 

c. Flowchart[Kembali]

Flowchart master


Flowchart slave

d. Listing Program[Kembali]

Program master

//SPI MASTER (ARDUINO)

//SPI COMMUNICATION BETWEEN TWO ARDUINO 

//CIRCUIT DIGEST

#include <SPI.h>                             //Library for SPI 

#include <Wire.h>

#include <OneWire.h>

#include <DallasTemperature.h>

//-----------------------------------------------------------------------------------------------------------------

const int pingPin = 4; // Trigger Pin of Ultrasonic Sensor

const int echoPin = 5; // Echo Pin of Ultrasonic Sensor

float distance;

const int PinSS = 10;

SPISettings settingsA(2000000, MSBFIRST, SPI_MODE1);

const int PinMOSI = 11;

const int PinMISO = 12;

const int PinSCK = 13;

//-----------------------------------------------------------------------------------------------------------------

#define touch 3

#define LED 8

int lastState = LOW;

int currentState;

int sentuh;

#define ldr A0

byte nilaiLDR; 

float nilaiSuhu;

//-----------------------------------------------------------------------------------------------------------------

// Data wire is plugged into digital pin 2 on the Arduino

#define ONE_WIRE_BUS 2


// Setup a oneWire instance to communicate with any OneWire device

OneWire oneWire(ONE_WIRE_BUS);


// Pass oneWire reference to DallasTemperature library

DallasTemperature sensors(&oneWire);

//-----------------------------------------------------------------------------------------------------------------

void setup (void)

{

  sensors.begin(); // Start up the library

  pinMode(LED,OUTPUT);

  Serial.begin(115200);

  pinMode(PinMISO, INPUT);

  pinMode(PinSCK,OUTPUT);

  pinMode(PinSS, OUTPUT); // set the SS pin as an output  

  digitalWrite(PinSS, HIGH); // disable Slave Select  

  SPI.begin();                            //Begins the SPI commnuication

  SPI.setClockDivider(SPI_CLOCK_DIV8);    //Sets clock for SPI communication at 8 (16/8=2Mhz)

  pinMode(touch, INPUT);

  

}

//-------------------------------------------------------------------------------------------------------------------------------

void loop(void)

{

  digitalWrite(LED,HIGH);

  LDR();

  delay(7000);

  TOUCH();

  delay(7000);  

  ultrasonic();

  delay(7000);

  ds18b20();

  delay(7000);

}


int TOUCH(){

  currentState = digitalRead(touch);

  SPI.beginTransaction(settingsA);

  digitalWrite(PinSS, LOW); // Enable Slave Select

  int Mastersend,Mastereceive;

  if (lastState == LOW && currentState == HIGH){

     Serial.println("Sensor sedang disentuh");

     Mastersend = 1; 

     Serial.println(Mastersend);                           

     SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave

     delay(50);  

  }else{

      sentuh = 0;

        } 

  digitalWrite(PinSS, HIGH); // Disable Slave Select  

  SPI.endTransaction();

   return sentuh;     

}


int LDR(){

  nilaiLDR = analogRead(ldr);

  Serial.print("nilaiLDR : ");

  Serial.println(nilaiLDR);

  delay (10);

 

  SPI.beginTransaction(settingsA);

  digitalWrite(PinSS, LOW); // Enable Slave Select

  int Mastersend,Mastereceive;

  if(nilaiLDR < 100 )

  {

    Mastersend = 2;  

    Serial.println(Mastersend);                          

    SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave

    delay(50);

  }

  digitalWrite(PinSS, HIGH); // Disable Slave Select  

  SPI.endTransaction();

  return nilaiLDR;

}

//------------------------------------------------------------------------------------------------------------------------------


//-------------------------------------------------------------------------------------------------------------------------------

long ultrasonic(){

  long duration, inches, cm;

  pinMode(pingPin, OUTPUT);

  digitalWrite(pingPin, LOW);

  delayMicroseconds(5);

  digitalWrite(pingPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(pingPin, LOW);


  pinMode(echoPin, INPUT);  

  duration = pulseIn(echoPin, HIGH);

  inches = microsecondsToInches(duration);

  cm = microsecondsToCentimeters(duration);

  // Calculating the distance

  distance= duration*0.034/2;

  

      

  // Prints the distance on the Serial Monitor

  Serial.print("Distance : ");

  Serial.print(distance);

  Serial.print(", inch : ");

  Serial.print(inches);

  Serial.print(",cm : ");

  Serial.print(cm);

  Serial.println();


  delay(100);

  

  

  SPI.beginTransaction(settingsA);

  digitalWrite(PinSS, LOW); // Enable Slave Select

  int Mastersend,Mastereceive;          

  if(distance > 15)                //Logic for Setting x value (To be sent to slave) depending upon input from pin 2

  {

    Mastersend = 3; 

    Serial.println(Mastersend);                               

    SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave

    delay(50);

  }

  digitalWrite(PinSS, HIGH); // Enable Slave Select

  SPI.endTransaction();

}


long microsecondsToInches(long microseconds)

{

return microseconds / 74 / 2;

}


long microsecondsToCentimeters(long microseconds)

{

return microseconds / 29 / 2;

}

//-------------------------------------------------------------------------------------------------------------------------------


//--------------------------------------------------------------------------------------------

int ds18b20(){

  // Send the command to get temperatures

  sensors.requestTemperatures(); 

  

  nilaiSuhu = sensors.getTempCByIndex(0); //Mencari nilai Suhu

  

  delay(100);                                  //Waktu delay 100 ms setelah dieksekusi

  Serial.print("Suhu = ");

  Serial.print(nilaiSuhu); 

  Serial.println(" Derajat Celcius"); 

  delay(500);


  SPI.beginTransaction(settingsA);

  digitalWrite(PinSS, LOW); // Enable Slave Select

  int Mastersend,Mastereceive;

  if(nilaiSuhu > 30 & nilaiSuhu < 41 )

  {

    Mastersend = nilaiSuhu; 

    Serial.println(Mastersend);                             

    SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave

    delay(50);

  }

  digitalWrite(PinSS, HIGH); // Enable Slave Select

  SPI.endTransaction();

  return nilaiSuhu;

}


Program Slave

//SPI SLAVE (ARDUINO)

//SPI COMMUNICATION BETWEEN TWO ARDUINO

 

#include <LiquidCrystal.h> //Deklarasi libary LCD

#include <SPI.h>

#include <Servo.h>

#include <virtuabotixRTC.h>

//-----------------------------------------------------------------------------------------------------

#define servoPin 3

Servo myservo;

LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);

 

volatile boolean received;

volatile byte Slavereceived,Slavesend;

int buttonvalue;

// Create a variable to store the servo position:

int angle = 0;

 

#define buzzer 9

#define pompa 4 //Deklarasi pin 10 sebagai pompa

//-----------------------------------------------------------------------------

/*

int RSpin = A0;

int RSvalue = 205;

 

int kontraspin = 2;

int kontrasvalue = 135;

*/

const int PinSS = 10;

const int PinMISO = 12;

const int PinSCK = 13;

 

//setting Alarmnya

int jam = 13;

int menit = 47;

int detik = 50;

 

//Inisialisasi pin (CLK, DAT, RST)

virtuabotixRTC myRTC(6,7,8);

 

//-----------------------------------------------------------------------------

void setup()

{

  myRTC.setDS1302Time(00, 46, 13, 5, 5, 1, 2023); //detik, menit, jam, hari dalam seminggu, tanggal, bulan, tahun

  

  lcd.begin(16,2);

  Serial.begin(115200);

  pinMode(buzzer,OUTPUT);

  pinMode(MISO,OUTPUT);                   //Sets MISO as OUTPUT (Have to Send data to Master IN

 

  pinMode(pompa, OUTPUT); //Deklarasi pompa sebagai OUTPUT

// Turn off motors - Initial state

digitalWrite(pompa, HIGH);

  

  SPCR |= _BV(SPE);                       //Turn on SPI in Slave Mode

  Slavereceived = 0;

  received = false;

  SPI.attachInterrupt();                  //Interuupt ON is set for SPI commnucation

  // Attach the Servo variable to a pin:

  myservo.attach(servoPin);

  /*

  pinMode(RSpin, OUTPUT);

  pinMode(kontraspin, OUTPUT);

  analogWrite(RSpin, RSvalue);

  analogWrite(kontraspin, kontrasvalue);

  */

  }

 

ISR (SPI_STC_vect) // SPI interrupt routine

{

  Slavereceived = SPDR;         // Value received from master if store in variable slavereceived

  received = true;                        //Sets received as True

}

 

void setRTC(){

myRTC.updateTime();

lcd.setCursor(0,0);

lcd.print("Tanggal:");

lcd.print(myRTC.dayofmonth);

lcd.print("/");

lcd.print(myRTC.month);

lcd.print("/");

lcd.print(myRTC.year);

lcd.print(" ");

lcd.setCursor(0,1);

lcd.print("Waktu:");

lcd.print(myRTC.hours);

lcd.print(":");

lcd.print(myRTC.minutes);

lcd.print(":");

lcd.println(myRTC.seconds);

 

Serial.print("Tanggal/Waktu:");

Serial.print(myRTC.dayofmonth);

Serial.print("/");

Serial.print(myRTC.month);

Serial.print("/");

Serial.print(myRTC.year);

Serial.print(" ");

Serial.print(myRTC.hours);

Serial.print(":");

Serial.print(myRTC.minutes);

Serial.print(":");

Serial.println(myRTC.seconds);

 

  if(myRTC.hours == jam & myRTC.minutes == menit & myRTC.seconds < detik )                //Logic for Setting x value (To be sent to slave) depending upon input from pin 2

  {

    lcd.clear();

    lcd.setCursor(0,0);

    lcd.print("ini saatnya");

    lcd.setCursor(0,1);

    lcd.print("beri makan");

    Serial.println("beri makan");

    Servo_pakan();

    delay (1000);

  }

}

 

void loop(){

  setRTC();

  delay(2000);

  if(received)                            //Logic to SET LED ON OR OFF depending upon the value recerived from master

   {

     

     Serial.println (Slavereceived); //print the array on serial monitor

      if (Slavereceived == 3)       //ULTRASONIC

      {

        lcd.clear();

        lcd.setCursor(0,0);

        lcd.print("Pakan sedikit");

        Serial.println("Pakan sedikit");

        lcd.setCursor(0,1);

        lcd.print("Ayok isi !!");

        digitalWrite(buzzer,HIGH);

        delay(500);

        digitalWrite(buzzer,LOW);

        delay (500);

      }

      else if (Slavereceived > 30 & Slavereceived < 41  )

      {

        lcd.clear();

        lcd.setCursor(0,0);

        lcd.print("suhu tinggi!!");

        Serial.println("suhu tinggi!!");

        lcd.setCursor(0,1);

        lcd.print(Slavereceived);

        delay (1000);

      }

      else if (Slavereceived == 2)      //LDR

      {

        lcd.clear();

        lcd.setCursor(0,0);

        lcd.print("air kotor");

        Serial.println("air kotor");

        lcd.setCursor(0,1);

        lcd.print("ayok ganti!");

        digitalWrite(buzzer,HIGH);

        delay (500);

        digitalWrite(buzzer,LOW);

        delay (500);

      }

      else if (Slavereceived==1)       //TOUCH

      {

        lcd.clear();

        lcd.setCursor(0,0);

        lcd.print("air kotor!!");

        lcd.setCursor(0,1);

        lcd.print("lagi dikeluarkan");

        Serial.println("lagi dikeluarkan");

        digitalWrite(pompa, LOW);        

        delay (1000);

      }

      digitalWrite(buzzer,LOW);

      delay(3000);

    }

    lcd.clear();

    received = false; //reset the process

    digitalWrite(pompa, HIGH);  //pompa

    delay(1000);

}

 

void Servo_pakan(){

  // Tell the servo to go to a particular angle:

  myservo.write(0);

  delay(1000);

  myservo.write(90);

  delay(1000);

  myservo.write(0);

  delay(1000);

}

e. Prinsip kerja[Kembali]

Pada rangkaian ini, ada 2 arduino yang digunakan sebagai master (kiri) dan slave (kanan). Pada Master ada 4 sensor yang akan digunakan yaitu Ultrasonic, LDR, LM35 dan Touch sensor. Pertama TOUCH, digunakan untuk mengeluarkan air di kolam. Saat sensor touch disentuh maka nilai “1” akan dikirimkan ke slave melalui komunikasi SPI. Kedua LDR, digunakan untuk mendeteksi kekeruhan air. Jika terdeteksi keruh (gelap dan intensitas cahaya berkurang) maka nilai “2” akan dikirimkan ke slave melalui komunikasi SPI. Ketiga Ultrasonic, digunakan untuk mendeteksi pakan ikan. Jika jarak yang terbaca sudah melebihi 15cm (pakan sedikit) maka nilai “3” akan dikirimkan ke slave melalui komunikasi SPI. Keempat LM35, digunakan untuk mendeteksi suhu dari kolam. Jika suhu yang terbaca lebih dari 30°C (suhu kurang optimum bagi pertumbuhan ikan) maka nilai “4” akan dikirimkan melalui komunikasi SPI ke slave.

Pada slave terdapat RTC yang digunakan untuk menunjukkan jam, dimana jam ini nantinya akan digunakan untuk penanda waktu-waktu tertentu untuk pemberian pakan ikan. Saat slave menerima nilai “1” maka pompa akan hidup dan mengeluarkan air yang ada di kolam. Kemudian, saat slave menerima nilai “2” maka LCD akan menampilkan kata “Air kotor, ayo ganti!”. Selanjutnya, saat slave menerima nilai “3” maka motor servo akan aktif dan membuka katup untuk memberi makan ikan. Selain itu, pada LCD juga akan tampil tulisan “saatnya memberi makan”. Lalu, saat slave menerima nilai “4”, maka akan tampil tulisan “Suhu tinggi” pada LCD. 

 f. Kesimpulan[Kembali]

Dari Modul 4 Praktikum Mikroprosesor dan Mikrokontroler yang telah dilakukan, dapat dismpulkan bahwa dalam pembuatan project yang berjudul “Kontrol kolam ikan otomatis” digunakan 4 sensor, yaitu sensor untraasonik, sensor touch, LDR, dan LM35 yang mana outputnya adalah LCD, motor servo, dan buzzer. Pada project ini digunakan komuniksi SPI yang menggunakan pin MISO, MOSI, dan SCK. Komunikasi SPI memiliki  kecepatan transfer data yang lebih tinggi daripada komunikasi UART dan I2C.

g. Video[Kembali]

VIDEO DEMO PROJECT 

 VIDEO DEMO PROTEUS

       
5. Download[Kembali]
Download HTML 
Download video demo
Download datasheet arduino klik disini
Download datasheet sensor ultrasonik sini
Download datasheet sensor touch
Download datasheet sensor DS18B20
Download datasheet sensor LDR klik disini
Downlaod datasheet LCD klik disini
Download datasheet buzzer klik disini
Download datasheet motor servo klik disini
Download datasheet LED  klik disini
Download library arduino klik disini
Download library sensor ultrasonik sini
Download library touch sensor [klik]

Tidak ada komentar:

Posting Komentar

Muhammad Sukry

Bahan Presenstasi Ini dibuat untuk  Mata Kuliah Mikroprocessor dan Mikrocontroller Semester Ganjil 2022-2023 Oleh : Muhammad Sukry 201095104...