1. Memahami dasar dasar mikrokontroler, khususnya Arduino, sebagai inti proyek.
2. Menentukan sensor pH, rain sensor, sensor UV, kelembaban tanah, dan suhu LM35 untuk memantau kondisi greenhouse.
3. Menghubungkan dan mengintegrasikan sensor sensor ke dalam mikrokontroler Arduino.
4. Menulis kode Arduino untuk membaca data sensor dan mengambil keputusan kontrol.
5. Merancang antarmuka pengguna sederhana untuk memantau kondisi greenhouse.
6. Mengembangkan logika otomatisasi untuk mengatur penyiraman, ventilasi, dan sistem lainnya.
a. Alat
- Power Supply
b. Bahan
- Arduino UNO
- Transistor
- UV sensor
Spesifikasi :
- Catu Daya : 3.3V/5V
- Sensor : LTR390-UV-01
- Communication Bus : I2C (Constant Address: 0x53)
- Response Spectrum : 280 - 430nm
- Mounting Hole Size : 2mm
- Dimensi : 27 x 20mm
- Rain Sensor
- Pin1 (VCC): Ini adalah pin 5V DC
- Pin2 (GND): ini adalah pin GND (ground).
- Pin3 (DO): Ini adalah pin keluaran rendah/tinggi
- Pin4 (AO): Ini adalah pin keluaran analog
Spesifikasi
Spesifikasi sensor hujan antara lain sebagai berikut.
- Modul sensor ini menggunakan bahan dua sisi berkualitas baik.
- Anti-konduktivitas & oksidasi dengan penggunaan jangka panjang
- Luas sensor ini berukuran 5cm x 4cm dan dapat dibuat dengan pelat nikel di bagian sampingnya
- Sensitivitasnya dapat diatur dengan potensiometer
- Tegangan yang dibutuhkan adalah 5V
- Ukuran PCB kecil adalah 3,2cm x 1,4cm
- Untuk memudahkan pemasangan, menggunakan lubang baut
- Ia menggunakan komparator LM393 dengan tegangan lebar
- Output dari komparator adalah bentuk gelombang bersih dan kapasitas penggerak di atas 15mA
- PH meter
- Soil Moisture Sensor
- Heater
- Modul PCF8574
- Antarmuka I2C, modul ekspansi I / O, dua skalabilitas I / O 8 I / O (hingga 8 penggunaan simultan
- PCF8574 diperluas menjadi 64 I / O)
Fitur paling penting:
1. Mendukung dua jenis antarmuka papan target akses: Pin atau kursi baris,
2. Mendukung kaskade bus I2C (dengan metode docking pin header row seat dapat digunakan secara bersamaan beberapa modul I2C)
3. Aplikasi umum: I / O kekurangan sumber daya Ekspansi I / O MCU
4. Sumber daya utama: antarmuka PCF8574 I2C, paralel 8-bit
- Ground
Ground Berfungsi sebagai untuk meniadakan beda potensial dengan mengalirkan arus sisa dari kebocoran tegangan atau arus pada rangkaian
- Ground
- Sistem Kontrol
- Greenhouse
- Tanaman Sawi
- Arduino UNO
- Mikrokontroler: Ini adalah otak utama dari Arduino yang melakukan semua operasi pengolahan data dan kontrol. Arduino menggunakan mikrokontroler sebagai pusat kendali, yang berfungsi untuk membaca input, menjalankan kode program, dan mengontrol output. Beberapa varian Arduino menggunakan mikrokontroler dari berbagai produsen, seperti ATmega yang diproduksi oleh Microchip Technology.
- Pin I/O: Arduino memiliki sejumlah pin input/output (I/O) yang digunakan untuk menghubungkan sensor, aktuator, dan komponen lainnya. Pin ini bisa berfungsi sebagai input untuk membaca data dari sensor atau output untuk mengontrol aktuator. Ada pin digital dan pin analog. Pin digital dapat berupa input atau output dengan nilai logika 0 (LOW) atau 1 (HIGH), sementara pin analog digunakan untuk membaca nilai analog seperti sensor suhu atau cahaya.
- Papan Sirkuit: Papan Arduino adalah substrat fisik tempat semua komponen terhubung. Papan ini biasanya terbuat dari bahan tahan lama dan dilengkapi dengan jalur tembaga yang menghubungkan komponen-komponen elektronik.
- Konektor USB: Banyak varian Arduino dilengkapi dengan konektor USB. Ini memungkinkan Anda untuk menghubungkan papan Arduino ke komputer, sehingga Anda dapat mengunggah kode program ke mikrokontroler dan berkomunikasi dengan papan melalui koneksi serial.
- Catu Daya: Arduino memerlukan catu daya untuk beroperasi. Ini bisa berasal dari komputer melalui kabel USB atau dari sumber daya eksternal seperti baterai atau adaptor listrik. Beberapa papan Arduino memiliki regulator tegangan yang memungkinkan papan menerima berbagai tingkat tegangan masukan.
- Konektor Listrik: Arduino umumnya memiliki pin header atau konektor yang memungkinkan Anda untuk menghubungkan kabel atau kawat ke pin I/O. Ini memudahkan Anda dalam menghubungkan sensor, aktuator, dan komponen lainnya ke papan Arduino.
- Kristal Osilator: Kristal osilator digunakan untuk menghasilkan sinyal osilasi yang diperlukan oleh mikrokontroler untuk menjalankan perhitungan waktu dan operasi lainnya.
- Tombol Reset: Tombol reset memungkinkan Anda untuk mengulang proses booting papan Arduino atau menghentikan eksekusi program yang sedang berjalan.
- Indikator LED: Beberapa varian Arduino memiliki indikator LED yang terhubung ke pin tertentu. LED ini dapat diatur dalam kode program untuk memberi tahu status atau kondisi papan, seperti aktif atau dalam mode tidur.
- Cara Menghubungkan dua arduino
- Komunikasi Serial Asinkron
- Komunikasi Serial I2C / TWI (Two Wire Interface)
- Komunikasi SPI (Serial Peripheral Interface)
- Cara menampilkan 2 LCD dengan 1 arduino
- Arduino UNO (2)
- LCD Display 16×2 (2)
- Backpack I2C module LCD (2)
- Breadboard
- Kabel konektor
- Sensor Suhu LM35
- LM35, LM35A -> range pengukuran temperature -55ºC hingga +150ºC.
- LM35C, LM35CA -> range pengukuran temperature -40ºC hingga +110ºC.
- LM35D -> range pengukuran temperature 0ºC hingga +100ºC.
- Rentang suhu yang jauh, antara -55 sampai +150ºC
- Low self-heating, sebesar 0.08 ºC
- Beroperasi pada tegangan 4 sampai 30 V
- Tidak memerlukan pengkondisian sinyal
- Membutuhkan tegangan untuk beroperasi.
- Resistor
- Transistor
- Sensor UV
Arduino adalah platform perangkat keras (hardware) yang dirancang untuk memudahkan pengembangan dan prototyping proyek-proyek elektronik. Ini terdiri dari papan sirkuit cetak berukuran kecil yang dilengkapi dengan mikrokontroler dan sejumlah pin input/output yang dapat digunakan untuk menghubungkan sensor, aktuator, dan komponen elektronik lainnya.
Mikrokontroler pada papan Arduino adalah otak utama yang mengontrol berbagai komponen yang terhubung dengannya. Papan Arduino biasanya dilengkapi dengan berbagai macam varian mikrokontroler dari berbagai produsen, seperti ATmega yang diproduksi oleh Microchip Technology. Meskipun demikian, Arduino lebih sering dikaitkan dengan platform open-source yang dikelola oleh Arduino.cc.
Arduino memiliki beberapa komponen utama yang membentuk papan sirkuit mikrokontroler. Berikut adalah penjelasan tentang komponen-komponen utama Arduino:
Semua komponen ini bekerja bersama-sama untuk menciptakan platform Arduino yang kuat dan serbaguna untuk mengembangkan berbagai proyek elektronik dan pemrograman.
Pin (5V, 3.3V, GND, Analog, Digital, PWM, AREF)
Pin pada Arduino adalah tempat dimana untuk menyambungkan kabel anatara pin Arduino dengan perangkat-perangkat input/output (biasanya menghubungkan dengan rangkaian project pada breadboard). Pin Arduino biasanya berupa female header sehingga untuk mendapatkan koneksi dari pin Arduino hanya cukup colokan kabel ke dalam lubang pin header tersebut. Terdapat beberapa pin pada Arduino dengan fungsi yang berbeda-beda, masing-masing pin diberi label sesuai nama dan fungsinya pada PCB.
GND : Kependekan dari ‘Ground’. Terdapat beberapa pin ground dan semuanya dapat digunakan.
5V & 3.3V: 5V pin memberikan supply tegangan 5 volt, dan 3.3V pin memberikan supply tegangan 3.3 volt. Kebanyakan yang digunakan dengan Arduino bekerja pada tegangan 5 atau 3.3 volt.
Analog: Pin yang berada di bawah tulisan ‘Analog In’ (A0 sampai A5 pada Arduino UNO) adalah pin Analog Input. Pin ini dapat membaca sinyal dari sensor analog (seperti sensor suhu) dan mengkonversinya kedalam nilai digital yang dapat kita baca.
Digital: Terletak disisi lain dari analog pin terdapat pin digital (0 sampai 13 pada UNO). Pin ini dapat difungsikan sebagai digital input (seperti memberitahukan apabila button dipencet) dan digital output (seperti menyalakan sebuah LED).
PWM: Kamu bisa melihat simbol (~) pada beberapa pin digital (3, 5, 6, 7, 9, 10, dan 11 pada UNO). Pin ini berfungsi sebagai pin digital biasanya, tapi bisa digunakan untuk Pulse-Width Modulation (PWM), sederhananya pin ini dapat mengeluarkan keluaran tegangan Analog.
AREF: Singkatan dari Analog Reference. Pin ini digunakan untuk mengatur tegangan referensi external (antara 0 dan 5 volt) sebagai batas untuk pin analog input.
Tombol Reset
Seperti komputer pada umumnya, Arduino mempunyai tombol reset (10). Menekan tombol ini akan menghubungkan pin reset dengan ground dan merestart semua kode program yang ada di dalam Arduino. Reset ini akan sangat membantu jika kode tidak berjalan berulang-ulang, tapi kamu ingin menjalankannya beberapa kali.
Power LED Indicator
Tepat di bawah dan di sebelah kanan kata “UNO” di board Arduino, ada LED kecil di samping kata ‘ON’ (11). LED ini harus menyala setiap kali Anda memasukkan Arduino Anda ke sumber tegangan. Jika lampu ini tidak menyala, ada kemungkinan ada sesuatu yang salah.
TX RX LED
TX adalah singkatan dari transmit, RX adalah singkatan dari receive. Kata ini cukup familiar dalam istilah elektronik untuk menunjukkan pin sebagai komunikasi serial. Dalam board Arduino terdapat dua tempat tulisan TX dan RX – pertama pada pin digital 0 dan 1, dan yang kedua di samping indikator LED TX dan RX (12). LED ini akan memberi kita beberapa indikasi visual setiap kali Arduino menerima atau mentransmisikan data (seperti saat kita memasukan program baru ke board Arduino).
IC Utama
Berwarna hitam terdapat banyak kaki logam disampingnya adalah IC, atau Integrated Circuit (13). Anggap saja itu sebagai otaknya Arduino. IC utama pada Arduino UNO berbeda dengan jenis board Arduino lainnya tapi biasanya merupakan IC keluarga ATmega yang diproduksi oleh perusahaan ATMEL. Untuk mengetahui jenis IC yang dipakai bisa ditemukan secara tertulis disisi atas IC. Jika Anda ingin tahu lebih banyak tentang perbedaan antara IC tersebut, dapat dilihat pada datasheet.
Voltage Regulator
Regulator tegangan berfungsi untuk membatasi jumlah tegangan yang masuk ke board Arduino. Anggap saja itu sebagai semacam gatekeeper; ini akan menghilangkan tegangan lebih yang mungkin membahayakan sirkuit. Tentu saja, ini memiliki batas, jadijangan menghubungkan Arduino Anda dengan yang lebih besar dari 20 volt.
Pin (5V, 3.3V, GND, Analog, Digital, PWM, AREF)
Pin pada Arduino adalah tempat dimana untuk menyambungkan kabel anatara pin Arduino dengan perangkat-perangkat input/output (biasanya menghubungkan dengan rangkaian project pada breadboard). Pin Arduino biasanya berupa female header sehingga untuk mendapatkan koneksi dari pin Arduino hanya cukup colokan kabel ke dalam lubang pin header tersebut. Terdapat beberapa pin pada Arduino dengan fungsi yang berbeda-beda, masing-masing pin diberi label sesuai nama dan fungsinya pada PCB.
GND : Kependekan dari ‘Ground’. Terdapat beberapa pin ground dan semuanya dapat digunakan.
5V & 3.3V: 5V pin memberikan supply tegangan 5 volt, dan 3.3V pin memberikan supply tegangan 3.3 volt. Kebanyakan yang digunakan dengan Arduino bekerja pada tegangan 5 atau 3.3 volt.
Analog: Pin yang berada di bawah tulisan ‘Analog In’ (A0 sampai A5 pada Arduino UNO) adalah pin Analog Input. Pin ini dapat membaca sinyal dari sensor analog (seperti sensor suhu) dan mengkonversinya kedalam nilai digital yang dapat kita baca.
Digital: Terletak disisi lain dari analog pin terdapat pin digital (0 sampai 13 pada UNO). Pin ini dapat difungsikan sebagai digital input (seperti memberitahukan apabila button dipencet) dan digital output (seperti menyalakan sebuah LED).
PWM: Kamu bisa melihat simbol (~) pada beberapa pin digital (3, 5, 6, 7, 9, 10, dan 11 pada UNO). Pin ini berfungsi sebagai pin digital biasanya, tapi bisa digunakan untuk Pulse-Width Modulation (PWM), sederhananya pin ini dapat mengeluarkan keluaran tegangan Analog.
AREF: Singkatan dari Analog Reference. Pin ini digunakan untuk mengatur tegangan referensi external (antara 0 dan 5 volt) sebagai batas untuk pin analog input.
Tombol Reset
Seperti komputer pada umumnya, Arduino mempunyai tombol reset (10). Menekan tombol ini akan menghubungkan pin reset dengan ground dan merestart semua kode program yang ada di dalam Arduino. Reset ini akan sangat membantu jika kode tidak berjalan berulang-ulang, tapi kamu ingin menjalankannya beberapa kali.
Power LED Indicator
Tepat di bawah dan di sebelah kanan kata “UNO” di board Arduino, ada LED kecil di samping kata ‘ON’ (11). LED ini harus menyala setiap kali Anda memasukkan Arduino Anda ke sumber tegangan. Jika lampu ini tidak menyala, ada kemungkinan ada sesuatu yang salah.
TX RX LED
TX adalah singkatan dari transmit, RX adalah singkatan dari receive. Kata ini cukup familiar dalam istilah elektronik untuk menunjukkan pin sebagai komunikasi serial. Dalam board Arduino terdapat dua tempat tulisan TX dan RX – pertama pada pin digital 0 dan 1, dan yang kedua di samping indikator LED TX dan RX (12). LED ini akan memberi kita beberapa indikasi visual setiap kali Arduino menerima atau mentransmisikan data (seperti saat kita memasukan program baru ke board Arduino).
IC Utama
Berwarna hitam terdapat banyak kaki logam disampingnya adalah IC, atau Integrated Circuit (13). Anggap saja itu sebagai otaknya Arduino. IC utama pada Arduino UNO berbeda dengan jenis board Arduino lainnya tapi biasanya merupakan IC keluarga ATmega yang diproduksi oleh perusahaan ATMEL. Untuk mengetahui jenis IC yang dipakai bisa ditemukan secara tertulis disisi atas IC. Jika Anda ingin tahu lebih banyak tentang perbedaan antara IC tersebut, dapat dilihat pada datasheet.
Voltage Regulator
Regulator tegangan berfungsi untuk membatasi jumlah tegangan yang masuk ke board Arduino. Anggap saja itu sebagai semacam gatekeeper; ini akan menghilangkan tegangan lebih yang mungkin membahayakan sirkuit. Tentu saja, ini memiliki batas, jadijangan menghubungkan Arduino Anda dengan yang lebih besar dari 20 volt.
Dua buah board Arduino UNO/Nano dapat dihubungkan dengan komunikasi serial, sehingga keduanya dapat berkomunikasi.
Alternatif komunikasi serial yang dapat dipakai adalah sebagai berikut:
Dua buah board Arduino UNO/Nano dapat dihubungkan dengan komunikasi serial, sehingga keduanya dapat berkomunikasi.
Alternatif komunikasi serial yang dapat dipakai adalah sebagai berikut:
Komunikasi Serial Asinkron
Pada komunkasi serial asinkron, port yang dipakai adalah port komunikasi serial TX & RX, atau pin D0 dan D1 pada Arduino. Cara menghubungkannya adalah silang, yaitu TX dihubungkan ke RX , RX dihubungkan ke TX. Pengiriman data dilakukan dengan menggunakan library Serial pada Arduino. Pada komunikasi ini hanya dapat dihubungkan 2 buah board Arduino.
Komunikasi asinkron pada Arduino dapat menggunakan hardware dan software. Secara hardware, komunikasi asinkron terhubung ke pin D0 dan D1. Jika perlu tambahan komunikasi serial, dapat menggunakan library SoftwareSerial.
Jika menggunakan library SoftwareSerial, port yang digunakan bebas.
Berikut ini skema menghubungkan Arduino dengan komunikasi sinkron, menggunakan port asinkron bawaan aslinya. Pin TX di Arduino pertama dihubungkan ke RX di Arduino kedua. Pin RX di Arduino pertama dihubungkan ke TX di Arduino kedua.
Pada komunkasi serial asinkron, port yang dipakai adalah port komunikasi serial TX & RX, atau pin D0 dan D1 pada Arduino. Cara menghubungkannya adalah silang, yaitu TX dihubungkan ke RX , RX dihubungkan ke TX. Pengiriman data dilakukan dengan menggunakan library Serial pada Arduino. Pada komunikasi ini hanya dapat dihubungkan 2 buah board Arduino.
Komunikasi asinkron pada Arduino dapat menggunakan hardware dan software. Secara hardware, komunikasi asinkron terhubung ke pin D0 dan D1. Jika perlu tambahan komunikasi serial, dapat menggunakan library SoftwareSerial.
Jika menggunakan library SoftwareSerial, port yang digunakan bebas.
Berikut ini skema menghubungkan Arduino dengan komunikasi sinkron, menggunakan port asinkron bawaan aslinya. Pin TX di Arduino pertama dihubungkan ke RX di Arduino kedua. Pin RX di Arduino pertama dihubungkan ke TX di Arduino kedua.
Komunikasi Serial I2C/TWI
Pada komunikasi ini digunakan protokol TWI (Two Wire Interface). Pin yang dipakai adalah SDA (ADC4) dan SCL (ADC5).
Berikut ilustrasi port pada Arduino:
Pada protokol TWI/I2C, 1 prosesor menjadi master, sedangkan lainnya adalah slave. Pengalamatan pada I2C adalah 7 bit, jadi jumlah node maksimum yang dapat dihubungkan pada bus I2C adalah 128 buah prosesor.
Berikut ini contoh cara menghubungkan 2 buah Arduino dengan protokol I2C.
Pada komunikasi ini digunakan protokol TWI (Two Wire Interface). Pin yang dipakai adalah SDA (ADC4) dan SCL (ADC5).
Berikut ilustrasi port pada Arduino:
Pada protokol TWI/I2C, 1 prosesor menjadi master, sedangkan lainnya adalah slave. Pengalamatan pada I2C adalah 7 bit, jadi jumlah node maksimum yang dapat dihubungkan pada bus I2C adalah 128 buah prosesor.
Berikut ini contoh cara menghubungkan 2 buah Arduino dengan protokol I2C.
Komunikasi SPI (Serial Peripheral Interface)
Pada komunikasi ini digunakan protokol SPI. Pin yang dipakai adalah SCK, MOSI, MISO dan SS.
Daftar pin yang dipakai untuk SPI pada Arduino adalah sebagai berikut:
Jalur SPI
Pin Arduino Pin ATmega328
MOSI 11 or ICSP-4 PB3 MISO 12 or ICSP-1 PB4 SCK 13 or ICSP-3 PB5 SS 10 PB2
Berikut cara menghubungkan 2 perangkat yang menggunakan protokol SPI
Perlu diperhatikan lagi mengenai modul I2C LCD adalah tentang addressing atau pengalamatan. Pada modul I2C LCD terdapat jumper A2, A1 dan A0 yang dapat dibuat menjadi sebuah alamat. Pada kondisi default (A0, A1, A2 tidak ter-jumper) maka alamatnya adalah 0x27. Konfigurasi bit A2, A1, A0 akan dapat membuat 8 alamat LCD. Jika A0, A1, A2 tidak di-jumper maka logikanya adalah “1” sehingga konfigurasi bit-nya dalam biner = 0010 0111. Berikut table konfigurasi A0, A1, A2.
Selanjutnya langsung saja kita buat aplikasinya : 2 LCD I2C Arduino. Siapkan kebutuhan kompoenennya :
Satu modul LCD I2C biarkan saja apa adanya, berarti alamatnya 0x27. Satu lagi kita buat dengan alamat 0x21, berarti A2 = 0, A1 = 0, A0 =1. Logika “0” berarti di-jumper alias disambung antara titik A2 ke titik diatasnya (disambung).
Pasang konektor 16 pin di masing – masing modul I2C ke pin LCD Display kemudian solder, jika sudah koneksikan dengan Arduino UNO seperti pada rangkaian berikut ini :
Pin SDA dan SCL di Arduino silakan cek label-nya di balik (bagian bawah) Arduino. Bisa juga koneksi ke pin A4 untuk SDA dan pin A5 untuk SCL. Cara menyambung 2 LCD I2C dengan Arduino cukup jadikan 1 antara masing – masing pin. Pin SDA modul 1 terhubung dengan pin SDA modul 2 kemudian dihubungkan dengan pin SDA Arduino (A4), demikian juga untuk pin SCL, Gnd dan VCC.
Pada komunikasi ini digunakan protokol SPI. Pin yang dipakai adalah SCK, MOSI, MISO dan SS.
Daftar pin yang dipakai untuk SPI pada Arduino adalah sebagai berikut:
Jalur SPI | Pin Arduino | Pin ATmega328 |
MOSI | 11 or ICSP-4 | PB3 |
MISO | 12 or ICSP-1 | PB4 |
SCK | 13 or ICSP-3 | PB5 |
SS | 10 | PB2 |
Berikut cara menghubungkan 2 perangkat yang menggunakan protokol SPI
Perlu diperhatikan lagi mengenai modul I2C LCD adalah tentang addressing atau pengalamatan. Pada modul I2C LCD terdapat jumper A2, A1 dan A0 yang dapat dibuat menjadi sebuah alamat. Pada kondisi default (A0, A1, A2 tidak ter-jumper) maka alamatnya adalah 0x27. Konfigurasi bit A2, A1, A0 akan dapat membuat 8 alamat LCD. Jika A0, A1, A2 tidak di-jumper maka logikanya adalah “1” sehingga konfigurasi bit-nya dalam biner = 0010 0111. Berikut table konfigurasi A0, A1, A2.
Selanjutnya langsung saja kita buat aplikasinya : 2 LCD I2C Arduino. Siapkan kebutuhan kompoenennya :
Satu modul LCD I2C biarkan saja apa adanya, berarti alamatnya 0x27. Satu lagi kita buat dengan alamat 0x21, berarti A2 = 0, A1 = 0, A0 =1. Logika “0” berarti di-jumper alias disambung antara titik A2 ke titik diatasnya (disambung).
Pasang konektor 16 pin di masing – masing modul I2C ke pin LCD Display kemudian solder, jika sudah koneksikan dengan Arduino UNO seperti pada rangkaian berikut ini :
Pin SDA dan SCL di Arduino silakan cek label-nya di balik (bagian bawah) Arduino. Bisa juga koneksi ke pin A4 untuk SDA dan pin A5 untuk SCL. Cara menyambung 2 LCD I2C dengan Arduino cukup jadikan 1 antara masing – masing pin. Pin SDA modul 1 terhubung dengan pin SDA modul 2 kemudian dihubungkan dengan pin SDA Arduino (A4), demikian juga untuk pin SCL, Gnd dan VCC.
IC LM 35 ini tidak memerlukan pengkalibrasian atau penyetelan dari luar karena ketelitiannya sampai lebih kurang seperempat derajat celcius pada temperature ruang. Jangka sensor mulai dari – 55°C sampai dengan 150°C, IC LM35 penggunaannya sangat mudah, difungsikan sebagai kontrol dari indicator tampilan catu daya terbelah. IC LM 35 dapat dialiri arus 60 μ A dari supplay sehingga panas yang ditimbulkan sendiri sangat rendah kurang dari 0 ° C di dalam suhu ruangan. Untuk mendeteksi suhu digunakan sebuah sensor suhu LM35 yang dapat dikalibrasikan langsung dalam C (celcius), LM35 ini difungsikan sebagai basic temperature sensor.
hFE = iC/iB
dimana, iC = perubahan arus kolektor
iB = perubahan arus basis
hFE = arus yang dicapai
Radiasi UV dapat dibagi menjadi hampir UV (panjang gelombang: 380–200 nm) dan UV vakum (200–10 nm). Dalam pembicaraan mengenai pengaruh radiasi UV terhadap kesehatan manusia dan lingkungan, jarak panjang gelombang sering dibagi lagi kepada UVA (380–315 nm), yang juga disebut "Gelombang Panjang" atau "blacklight"; UVB (315–280 nm), yang juga disebut "Gelombang Medium" (Medium Wave); dan UVC (280-10 nm), juga disebut "Gelombang Pendek" (Short Wave).
Radiasi UV dapat dibagi menjadi hampir UV (panjang gelombang: 380–200 nm) dan UV vakum (200–10 nm). Dalam pembicaraan mengenai pengaruh radiasi UV terhadap kesehatan manusia dan lingkungan, jarak panjang gelombang sering dibagi lagi kepada UVA (380–315 nm), yang juga disebut "Gelombang Panjang" atau "blacklight"; UVB (315–280 nm), yang juga disebut "Gelombang Medium" (Medium Wave); dan UVC (280-10 nm), juga disebut "Gelombang Pendek" (Short Wave).
Sensor api UV-Tron adalah sebuah sensor yang mendeteksi adanya nyala api yang memancarkan sinar ultraviolet. Pancaran cahaya ultraviolet dari sebuah nyala lilin berjarak 5 meter dapat dideteksi oleh sensor ini. Sensor api UV-Tron adalah sebuah sensor yang mendeteksi adanya nyala api yang memancarkan sinar ultraviolet. Pancaran cahaya ultraviolet dari sebuah nyala lilin berjarak 5 meter dapat dideteksi oleh sensor ini. Sensor UV-Tron akan mengeluarkan logika high (1) jika ia mendeteksi keberadaan api dan sebaliknya sensor UV-Tron akan mengeluarkan logika low (0) jika ia tidak mendeteksi api. Sensor UV-Tron dapat membaca panjang gelombang dari 185nm sampai 260nm.
- Soil Moisture Sensor
- Rain Sensor
- Sensor PH
pH atau derajat keasaman digunakan untuk menyatakan tingkat keasaaman atau basa yang dimiliki oleh suatu zat, larutan atau benda. pH normal memiliki nilai 7 sementara bila nilai pH > 7 menunjukkan zat tersebut memiliki sifat basa sedangkan nilai pH< 7 menunjukkan keasaman. pH 0 menunjukkan derajat keasaman yang tinggi, dan pH 14 menunjukkan derajat kebasaan tertinggi.
Pada prinsipnya pengukuran suatu pH adalah didasarkan pada potensial elektro kimia yang terjadi antara larutan yang terdapat didalam elektroda gelas (membran gelas) yang telah diketahui dengan larutan yang terdapat diluar elektroda gelas yang tidak diketahui. Hal ini dikarenakan lapisan tipis dari gelembung kaca akan berinteraksi dengan ion hidrogen yang ukurannya relatif kecil dan aktif, elektroda gelas tersebut akan mengukur potensial elektro kimia dari ion hidrogen. Untuk melengkapi sirkuit elektrik dibutuhkan elektroda pembanding. Sebagai catatan alat tersebut tidak mengukur arus tetapi hanya mengukur tegangan.
- HeaterHeater, dalam konteks umum, merujuk pada perangkat yang dirancang untuk menghasilkan panas dan meningkatkan suhu dalam suatu ruangan atau sistem tertentu. Biasanya menggunakan elemen pemanas, seperti kawat pemanas atau elemen pemanas keramik, heater mengubah energi listrik menjadi panas yang dipancarkan ke sekitarnya. Penggunaan heater dapat bervariasi dari pemanas ruangan untuk kenyamanan termal di rumah atau kantor hingga aplikasi industri yang memerlukan kontrol suhu yang ketat. Selain itu, heater juga dapat menjadi bagian dari berbagai perangkat, termasuk peralatan laboratorium, mesin, atau alat elektronik yang memerlukan suhu tertentu untuk beroperasi secara optimal.Prinsip KerjaPrinsip kerja heater didasarkan pada konsep transformasi energi listrik menjadi panas. Biasanya, heater dilengkapi dengan elemen pemanas, seperti kawat pemanas atau elemen pemanas keramik, yang memiliki resistansi listrik tinggi. Ketika arus listrik mengalir melalui elemen pemanas ini, resistansi menyebabkan pemanasan, dan energi listrik diubah menjadi panas. Panas yang dihasilkan kemudian dipancarkan ke lingkungan sekitarnya, meningkatkan suhu di sekitar heater. Prinsip ini digunakan baik dalam pemanas ruangan konvensional maupun dalam berbagai aplikasi industri di mana kontrol suhu adalah faktor kritis. Beberapa heater juga dilengkapi dengan sensor suhu atau termostat untuk memantau dan mengatur suhu, memastikan kenyamanan atau kestabilan suhu yang diinginkan sesuai dengan kebutuhan pengguna atau spesifikasi aplikasi.
- Springkler
- Baterai
- LCD 20x4
- Modul PCF8574Merupakan modul expansion board untuk mengatur hingga 8 pin I/O. menggunakan komunikasi secara I2C, artinya dengan 2 pin (SDA/SCL) maka kita dapat mengatur hingga 8 pin yg dapat dijadikan input output. modul ini juga dapat di cascade, hingga 8 modul atau hingga 64 pin input output.
- Ground
1) Download library yang diperlukan (dapat dilihat pada bagian download dalam blog) 2) Buka proteus yang sudah diinstal untuk membuat rangkaian.3) Tambahkan komponen seperti Arduino, sensor, dan perangkat lainnya lalu susun menjadi rangkaian.4) Buka Arduino IDE yang sudah diinstal.5) Di Arduino IDE, pergi ke menu "File" > "Preferences".6) Pastikan opsi "Show verbose during compile" dicentang untuk mendapatkan informasi detail saat kompilasi.7) Salin kode program Arduino pada blog kemudian tempelkan program tadi ke Arduino IDE.8) Kompilasikan kode dengan menekan tombol "Verify" di Arduino IDE.9) Cari dan salin path file HEX yang dihasilkan selama proses kompilasi.10) Kembali ke Proteus dan pilih Arduino yang telah Anda tambahkan di rangkaian.11) Buka opsi "Program File" dan tempelkan path HEX yang telah Anda salin dari Arduino IDE.l2) Jalankan simulasi di Proteus
Prinsip Kerja
Program ini dirancang untuk mengendalikan dan memantau lingkungan dalam sebuah greenhouse menggunakan Arduino dan berbagai sensor. Sensor yang digunakan meliputi sensor suhu, sensor intensitas cahaya (lux), sensor hujan, sensor pH tanah, dan sensor kelembaban tanah. Program ini juga memiliki kemampuan mengendalikan beberapa perangkat seperti pemanas, pendingin, motor penutup bak, lampu, LED, dan sprinkler berdasarkan kondisi lingkungan yang terukur.
Pada tahap inisialisasi, program menetapkan pin dan menginisialisasi objek yang terhubung ke sensor dan perangkat, termasuk LCD untuk tampilan informasi. Selanjutnya, pada tahap setup, program menetapkan mode pin untuk sensor dan perangkat, membaca kondisi awal sensor, dan menetapkan kondisi awal untuk perangkat. Setelah tahap setup selesai, program memasuki loop utama.
Dalam setiap iterasi loop, program membaca nilai dari sensor suhu, cahaya, hujan, pH, dan kelembaban tanah. Nilai-nilai ini kemudian dikonversi ke dalam format yang dapat diinterpretasikan. Berdasarkan data yang terukur, program mengambil keputusan untuk mengendalikan perangkat-perangkat seperti pemanas, pendingin, motor, lampu, LED, dan sprinkler. Misalnya, pemanas akan dihidupkan jika suhu di dalam greenhouse rendah, atau lampu akan menyala saat intensitas cahaya rendah, dan sebagainya.
Program ini juga memberikan output yang jelas melalui dua layar LCD yang menampilkan informasi tentang kondisi lingkungan dan status perangkat. Dengan demikian, program ini menyediakan solusi otomatis untuk menciptakan lingkungan yang optimal di dalam greenhouse sesuai dengan kebutuhan tanaman yang ditanam.
a). Flowchart
PENGIRIM
PENERIMA
b). Listing Program
PENGIRIM
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int suhuPin = A0; // Pin sensor suhu (analog)
const int apdsPin = A1; // Pin sensor APDS-9002 (analog)
const int hujanPin = 2; // Pin sensor hujan (digital)
const int phPin = A2; // Pin sensor pH (analog)
const int soilMoisturePin = A3; // Pin sensor kelembaban tanah (analog)
LiquidCrystal_I2C lcd1(0x3F, 20, 4);
LiquidCrystal_I2C lcd2(0x3B, 20, 4);
void setup() {
Serial.begin(9600); // Inisialisasi port serial
lcd1.begin(20, 4); // Inisialisasi LCD 1
lcd2.begin(20, 4); // Inisialisasi LCD 2
pinMode(suhuPin, INPUT);
pinMode(apdsPin, INPUT);
pinMode(hujanPin, INPUT);
pinMode(phPin, INPUT);
pinMode(soilMoisturePin, INPUT);
}
void loop() {
// Baca nilai sensor
int suhuValue = analogRead(suhuPin);
int apdsValue = analogRead(apdsPin);
int hujanValue = digitalRead(hujanPin);
int phValue = analogRead(phPin);
int soilMoistureValue = analogRead(soilMoisturePin);
// Konversi nilai analog ke nilai fisik
float suhuMv = (suhuValue / 1023.0) * 5000; // Konversi ke mV
float suhuCelsius = suhuMv / 10; // Konversi ke derajat Celsius
float apdsVoltage = apdsValue * (5.0 / 1023.0); // Konversi ke volt
float apdsMv = apdsVoltage * 1000; // Konversi ke milivolt
float phVoltage = phValue * (5.0 / 1023.0); // Konversi ke volt
float phLevel = phVoltage * 3.5; // Konversi ke tingkat pH (contoh)
// Tentukan kondisi waktu berdasarkan nilai APDS-9002
String kondisiWaktu;
if (apdsMv < 5) {
kondisiWaktu = "Malam";
} else if (apdsMv >= 5 && apdsMv <= 650) {
kondisiWaktu = "Pagi";
} else {
kondisiWaktu = "Siang";
}
// Kirim data melalui port serial
Serial.print("Suhu=");
Serial.print(suhuCelsius);
Serial.print("°C;Lux=");
Serial.print(apdsMv);
Serial.print(" mV;Hujan=");
Serial.print(hujanValue);
Serial.print(";Waktu=");
Serial.print(kondisiWaktu);
Serial.print(";pH=");
Serial.print(phLevel);
Serial.print(";KelembabanTanah=");
Serial.println(soilMoistureValue);
// Tampilkan data di LCD 1
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("Suhu: ");
lcd1.print(suhuCelsius);
lcd1.print("C");
lcd1.setCursor(0, 1);
lcd1.print("Lux: ");
lcd1.print(apdsMv);
lcd1.print("mV");
lcd1.setCursor(0, 2);
lcd1.print("Hujan: ");
lcd1.print(hujanValue == 1 ? "Ya" : "Tidak");
lcd1.setCursor(0, 3);
lcd1.print("Waktu: ");
lcd1.print(kondisiWaktu);
// Tampilkan data di LCD 2
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("pH: ");
lcd2.print(phLevel);
lcd2.setCursor(0, 1);
lcd2.print("Kelembaban Tanah: ");
lcd2.print(soilMoistureValue);
delay(1000); // Tunda selama 1 detik
}
PENERIMA
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int penghangatPin = 8; // Pin penghangat
int pendinginPin = 9; // Pin pendingin
int motorPin = 10; // Pin motor penutup bak
int lampuPin = 11; // Pin lampu
int led1Pin = 12; // Pin LED 1
int led2Pin = 13; // Pin LED 2
int sprinklerPin = 7; // Pin sprinkler
LiquidCrystal_I2C lcd1(0x3F, 20, 4);
LiquidCrystal_I2C lcd2(0x3B, 20, 4);
void setup() {
Serial.begin(9600); // Inisialisasi port serial
lcd1.begin(20, 4); // Inisialisasi LCD 1
lcd2.begin(20, 4); // Inisialisasi LCD 2
pinMode(penghangatPin, OUTPUT);
pinMode(pendinginPin, OUTPUT);
pinMode(motorPin, OUTPUT);
pinMode(lampuPin, OUTPUT);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(sprinklerPin, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
// Baca data dari port serial
String data = Serial.readStringUntil('\n');
// Pisahkan data menjadi tiga bagian: Suhu, Lux, dan Hujan
int suhuStart = data.indexOf("Suhu=") + 5;
int suhuEnd = data.indexOf("°C;");
String suhuData = data.substring(suhuStart, suhuEnd);
int luxStart = data.indexOf("Lux=") + 4;
int luxEnd = data.indexOf(" mV;");
String luxData = data.substring(luxStart, luxEnd);
String hujanData = data.substring(data.indexOf("Hujan=") + 6);
String waktuData = data.substring(data.indexOf("Waktu=") + 6);
int phStart = data.indexOf("pH=") + 3;
int phEnd = data.indexOf(";KelembabanTanah=");
String phData = data.substring(phStart, phEnd);
String soilMoistureData = data.substring(data.indexOf("KelembabanTanah=") + 16);
// Konversi data menjadi nilai float dan integer
float suhuValue = suhuData.toFloat();
float luxValue = luxData.toFloat();
int hujanValue = hujanData.toInt();
float phValue = phData.toFloat();
int soilMoistureValue = soilMoistureData.toInt();
// Kontrol perangkat berdasarkan kondisi suhu
if (suhuValue < 18) {
digitalWrite(penghangatPin, HIGH); // Penghangat hidup
digitalWrite(pendinginPin, LOW); // Pendingin mati
} else if (suhuValue > 25) {
digitalWrite(penghangatPin, LOW); // Penghangat mati
digitalWrite(pendinginPin, HIGH); // Pendingin hidup
} else {
digitalWrite(penghangatPin, LOW); // Penghangat mati
digitalWrite(pendinginPin, LOW); // Pendingin mati
}
// Kontrol motor berdasarkan hujan
if (hujanValue == 1) {
digitalWrite(motorPin, HIGH); // Buka penutup bak jika hujan
} else {
digitalWrite(motorPin, LOW); // Tutup penutup bak jika tidak hujan
}
// Kontrol lampu berdasarkan waktu (misalnya, deteksi malam)
// Kamu perlu menyesuaikan kode berdasarkan logika waktu yang sesuai dengan kondisi malam dan pagi
// Dalam contoh ini, lampu menyala jika nilai Lux rendah (mendekati gelap)
if (luxValue < 5) {
digitalWrite(lampuPin, HIGH); // Lampu menyala pada malam hari
} else {
digitalWrite(lampuPin, LOW); // Lampu mati pada pagi hari
}
// Kontrol LED berdasarkan pH
if (phValue < 6) {
digitalWrite(led1Pin, HIGH); // LED 1 menyala jika pH < 6
} else {
digitalWrite(led1Pin, LOW);
}
if (phValue > 7) {
digitalWrite(led2Pin, HIGH); // LED 2 menyala jika pH > 7
} else {
digitalWrite(led2Pin, LOW);
}
// Kontrol sprinkler berdasarkan kelembaban tanah
if (soilMoistureValue < 60) {
digitalWrite(sprinklerPin, HIGH); // Sprinkler menyala jika kelembaban tanah < 60%
} else {
digitalWrite(sprinklerPin, LOW);
}
// Tampilkan data di LCD 1
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("Penghangat: ");
lcd1.print(digitalRead(penghangatPin) == HIGH ? "Hidup" : "Mati");
lcd1.setCursor(0, 1);
lcd1.print("Pendingin: ");
lcd1.print(digitalRead(pendinginPin) == HIGH ? "Hidup" : "Mati");
lcd1.setCursor(0, 2);
lcd1.print("Penutup: ");
lcd1.print(digitalRead(motorPin) == HIGH ? "Terbuka" : "Tertutup");
lcd1.setCursor(0, 3);
lcd1.print("Lampu: ");
lcd1.print(digitalRead(lampuPin) == HIGH ? "Hidup" : "Mati");
// Tampilkan data di LCD 2
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("LED 1: ");
lcd2.print(digitalRead(led1Pin) == HIGH ? "Hidup" : "Mati");
lcd2.setCursor(0, 1);
lcd2.print("LED 2: ");
lcd2.print(digitalRead(led2Pin) == HIGH ? "Hidup" : "Mati");
lcd2.setCursor(0, 2);
lcd2.print("Sprinkler: ");
lcd2.print(digitalRead(sprinklerPin) == HIGH ? "Hidup" : "Mati");
delay(1000); // Tunda selama 1 detik
}
}
PENJELASAN PROGRAM
PENGIRIM
Mengimpor pustaka Wire dan LiquidCrystal_I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
Mendefinisikan pin yang terhubung dengan sensor suhu, APDS-9002, sensor hujan, sensor pH, dan sensor kelembaban tanah.
const int suhuPin = A0; // Pin sensor suhu (analog)
const int apdsPin = A1; // Pin sensor APDS-9002 (analog)
const int hujanPin = 2; // Pin sensor hujan (digital)
const int phPin = A2; // Pin sensor pH (analog)
const int soilMoisturePin = A3; // Pin sensor kelembaban tanah (analog)
Membuat dua objek LCD dari kelas LiquidCrystal_I2C.
LiquidCrystal_I2C lcd1(0x3F, 20, 4);
LiquidCrystal_I2C lcd2(0x3B, 20, 4);
Inisialisasi port serial, LCD, dan mode pin sebagai INPUT.
void setup() {
Serial.begin(9600); // Inisialisasi port serial
lcd1.begin(20, 4); // Inisialisasi LCD 1
lcd2.begin(20, 4); // Inisialisasi LCD 2
pinMode(suhuPin, INPUT);
pinMode(apdsPin, INPUT);
pinMode(hujanPin, INPUT);
pinMode(phPin, INPUT);
pinMode(soilMoisturePin, INPUT);
}
Membaca nilai sensor.
void loop() {
// Baca nilai sensor
int suhuValue = analogRead(suhuPin);
int apdsValue = analogRead(apdsPin);
int hujanValue = digitalRead(hujanPin);
int phValue = analogRead(phPin);
int soilMoistureValue = analogRead(soilMoisturePin);
Konversi nilai analog dari sensor suhu ke dalam nilai suhu dalam derajat Celsius.
// Konversi nilai analog ke nilai fisik
float suhuMv = (suhuValue / 1023.0) * 5000; // Konversi ke mV
float suhuCelsius = suhuMv / 10; // Konversi ke derajat Celsius
Konversi nilai analog dari sensor APDS-9002 ke dalam nilai milivolt (mV).
float apdsVoltage = apdsValue * (5.0 / 1023.0); // Konversi ke volt
float apdsMv = apdsVoltage * 1000; // Konversi ke milivolt
Konversi nilai analog dari sensor pH ke dalam nilai tingkat pH (contoh).
float phVoltage = phValue * (5.0 / 1023.0); // Konversi ke volt
float phLevel = phVoltage * 3.5; // Konversi ke tingkat pH (contoh)
Menentukan kondisi waktu berdasarkan nilai sensor APDS-9002.
// Tentukan kondisi waktu berdasarkan nilai APDS-9002
String kondisiWaktu;
if (apdsMv < 5) {
kondisiWaktu = "Malam";
} else if (apdsMv >= 5 && apdsMv <= 650) {
kondisiWaktu = "Pagi";
} else {
kondisiWaktu = "Siang";
}
Mengirim data sensor melalui port serial.
// Kirim data melalui port serial
Serial.print("Suhu=");
Serial.print(suhuCelsius);
Serial.print("°C;Lux=");
Serial.print(apdsMv);
Serial.print(" mV;Hujan=");
Serial.print(hujanValue);
Serial.print(";Waktu=");
Serial.print(kondisiWaktu);
Serial.print(";pH=");
Serial.print(phLevel);
Serial.print(";KelembabanTanah=");
Serial.println(soilMoistureValue);
Menampilkan data suhu, lux, hujan, dan waktu pada LCD 1.
// Tampilkan data di LCD 1
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("Suhu: ");
lcd1.print(suhuCelsius);
lcd1.print("C");
lcd1.setCursor(0, 1);
lcd1.print("Lux: ");
lcd1.print(apdsMv);
lcd1.print("mV");
lcd1.setCursor(0, 2);
lcd1.print("Hujan: ");
lcd1.print(hujanValue == 1 ? "Ya" : "Tidak");
lcd1.setCursor(0, 3);
lcd1.print("Waktu: ");
lcd1.print(kondisiWaktu);
Menampilkan data pH dan kelembaban tanah pada LCD 2. // Tampilkan data di LCD 2
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("pH: ");
lcd2.print(phLevel);
lcd2.setCursor(0, 1);
lcd2.print("Kelembaban Tanah: ");
lcd2.print(soilMoistureValue);
Memberikan jeda selama 1 detik sebelum loop() dijalankan lagi.
delay(1000); // Tunda selama 1 detik
}
PENERIMA
#include <Wire.h>
Mengimpor pustaka Wire, digunakan untuk komunikasi I2C.
#include <LiquidCrystal_I2C.h>
Mengimpor pustaka LiquidCrystal_I2C, yang menyediakan fungsi untuk mengendalikan LCD menggunakan protokol I2C.
int penghangatPin = 8; // Pin penghangat
int pendinginPin = 9; // Pin pendingin
int motorPin = 10; // Pin motor penutup bak
int lampuPin = 11; // Pin lampu
int led1Pin = 12; // Pin LED 1
int led2Pin = 13; // Pin LED 2
int sprinklerPin = 7; // Pin sprinkler
Mendefinisikan variabel untuk menyimpan nomor pin Arduino yang terhubung ke perangkat seperti pemanas, pendingin, motor penutup bak, lampu, LED 1, LED 2, dan sprinkler.
LiquidCrystal_I2C lcd1(0x3F, 20, 4);
LiquidCrystal_I2C lcd2(0x3B, 20, 4);
Membuat dua objek LCD dari kelas LiquidCrystal_I2C dengan alamat I2C yang sesuai (0x3F dan 0x3B), serta ukuran 20 kolom dan 4 baris.
void setup() {
Serial.begin(9600); // Inisialisasi port serial
lcd1.begin(20, 4); // Inisialisasi LCD 1
lcd2.begin(20, 4); // Inisialisasi LCD 2
pinMode(penghangatPin, OUTPUT);
pinMode(pendinginPin, OUTPUT);
pinMode(motorPin, OUTPUT);
pinMode(lampuPin, OUTPUT);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(sprinklerPin, OUTPUT);
}
Setup() dijalankan sekali pada awal program. Menginisialisasi port serial, menginisialisasi LCD 1 dan LCD 2, serta menetapkan mode pin sebagai OUTPUT untuk mengendalikan perangkat.
void loop() {
if (Serial.available() > 0) {
String data = Serial.readStringUntil('\n');
Loop() berisi logika utama program dan berulang terus-menerus. Mengecek apakah ada data yang tersedia di port serial, dan jika ada, membaca data hingga karakter newline ('\n').
int suhuStart = data.indexOf("Suhu=") + 5;
int suhuEnd = data.indexOf("°C;");
String suhuData = data.substring(suhuStart, suhuEnd);
int luxStart = data.indexOf("Lux=") + 4;
int luxEnd = data.indexOf(" mV;");
String luxData = data.substring(luxStart, luxEnd);
String hujanData = data.substring(data.indexOf("Hujan=") + 6);
String waktuData = data.substring(data.indexOf("Waktu=") + 6);
int phStart = data.indexOf("pH=") + 3;
int phEnd = data.indexOf(";KelembabanTanah=");
String phData = data.substring(phStart, phEnd);
String soilMoistureData = data.substring(data.indexOf("KelembabanTanah=") + 16);
Mengolah data yang diterima dari port serial. Data dipisahkan menjadi beberapa bagian seperti suhu, lux, hujan, waktu, pH, dan kelembaban tanah.
float suhuValue = suhuData.toFloat();
float luxValue = luxData.toFloat();
int hujanValue = hujanData.toInt();
float phValue = phData.toFloat();
int soilMoistureValue = soilMoistureData.toInt();
Mengonversi data yang telah dipisahkan ke dalam bentuk nilai numerik (float atau int) untuk digunakan dalam logika kendali.
if (suhuValue < 18) {
digitalWrite(penghangatPin, HIGH); // Penghangat hidup
digitalWrite(pendinginPin, LOW); // Pendingin mati
} else if (suhuValue > 25) {
digitalWrite(penghangatPin, LOW); // Penghangat mati
digitalWrite(pendinginPin, HIGH); // Pendingin hidup
} else {
digitalWrite(penghangatPin, LOW); // Penghangat mati
digitalWrite(pendinginPin, LOW); // Pendingin mati
}
Kontrol perangkat berdasarkan kondisi suhu. Menggunakan pemanas jika suhu rendah, menggunakan pendingin jika suhu tinggi, dan mematikan keduanya jika suhu dalam rentang normal.
if (hujanValue == 1) {
digitalWrite(motorPin, HIGH); // Buka penutup bak jika hujan
} else {
digitalWrite(motorPin, LOW); // Tutup penutup bak jika tidak hujan
}
Kontrol motor berdasarkan kondisi hujan. Membuka penutup bak jika terdeteksi hujan dan menutupnya jika tidak hujan.
if (luxValue < 5) {
digitalWrite(lampuPin, HIGH); // Lampu menyala pada malam hari
} else {
digitalWrite(lampuPin, LOW); // Lampu mati pada pagi hari
}
Kontrol lampu berdasarkan nilai lux. Menyala pada malam hari (nilai lux rendah) dan mati pada pagi hari (nilai lux tinggi).
if (phValue < 6) {
digitalWrite(led1Pin, HIGH); // LED 1 menyala jika pH < 6
} else {
digitalWrite(led1Pin, LOW);
}
if (phValue > 7) {
digitalWrite(led2Pin, HIGH); // LED 2 menyala jika pH > 7
} else {
digitalWrite(led2Pin, LOW);
}
Kontrol LED berdasarkan nilai pH. Menyalakan LED 1 jika pH kurang dari 6, dan LED 2 jika pH lebih dari 7.
if (soilMoistureValue < 60) {
digitalWrite(sprinklerPin, HIGH); // Sprinkler menyala jika kelembaban tanah < 60%
} else {
digitalWrite(sprinklerPin, LOW);
}
Kontrol sprinkler berdasarkan kelembaban tanah. Menyalakan sprinkler jika kelembaban tanah kurang dari 60%, dan mematikannya jika kelembaban sudah mencukupi.
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("Penghangat: ");
lcd1.print(digitalRead(penghangatPin) == HIGH ? "Hidup" : "Mati");
lcd1.setCursor(0, 1);
lcd1.print("Pendingin: ");
lcd1.print(digitalRead(pendinginPin) == HIGH ? "Hidup" : "Mati");
lcd1.setCursor(0, 2);
lcd1.print("Penutup: ");
lcd1.print(digitalRead(motorPin) == HIGH ? "Terbuka" : "Tertutup");
lcd1.setCursor(0, 3);
lcd1.print("Lampu: ");
lcd1.print(digitalRead(lampuPin) == HIGH ? "Hidup" : "Mati");
Menampilkan status perangkat pada LCD 1, termasuk penghangat, pendingin, motor penutup bak, dan lampu.
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("LED 1: ");
lcd2.print(digitalRead(led1Pin) == HIGH ? "Hidup" : "Mati");
lcd2.setCursor(0, 1);
lcd2.print("LED 2: ");
lcd2.print(digitalRead(led2Pin) == HIGH ? "Hidup" : "Mati");
lcd2.setCursor(0, 2);
lcd2.print("Sprinkler: ");
lcd2.print(digitalRead(sprinklerPin) == HIGH ? "Hidup" : "Mati");
Menampilkan status LED 1, LED 2, dan sprinkler pada LCD 2.
delay(1000); // Tunda selama 1 detik
}
}
Memberikan jeda selama 1 detik sebelum memulai kembali loop untuk membaca data dari port serial.
Dalam greenhouse, beberapa kondisi lingkungan yang mungkin terjadi dapat mempengaruhi pertumbuhan dan kesehatan tanaman.
1. Suhu Rendah:
- Kondisi: Sensor suhu mendeteksi bahwa suhu di dalam greenhouse rendah (di bawah 18°C).
- Tanggapan Alat: Penghangat dihidupkan untuk meningkatkan suhu dan memberikan kondisi yang lebih optimal untuk tanaman.
2. Suhu Tinggi:
- Kondisi: Sensor suhu mendeteksi bahwa suhu di dalam greenhouse tinggi (di atas 25°C).
- Tanggapan Alat: Pendingin dihidupkan untuk menurunkan suhu dan mencegah overheating tanaman.
3. Hujan:
- Kondisi: Sensor hujan mendeteksi adanya hujan.
- Tanggapan Alat: Motor penutup bak diaktifkan untuk menutup bak dan melindungi tanaman dari hujan berlebih.
4. Intensitas Cahaya Rendah:
- Kondisi: Sensor cahaya (lux) mendeteksi bahwa intensitas cahaya rendah (kurang dari 5 mV).
- Tanggapan Alat: Lampu diaktifkan untuk memberikan pencahayaan tambahan saat malam hari atau kondisi gelap.
5. Kondisi Malam, Pagi, atau Siang (lanjutan):
- Kondisi: Sensor cahaya (APDS-9002) mendeteksi tingkat cahaya dan menentukan kondisi waktu (malam, pagi, atau siang).
- Tanggapan Alat: Program memberikan tanggapan berbeda berdasarkan kondisi waktu, seperti mengatur waktu penyalaan atau pemadaman lampu berdasarkan kebutuhan tanaman pada setiap periode.
6. Kadar pH Tanah:
- Kondisi: Sensor pH tanah mendeteksi tingkat keasaman tanah di sekitar akar tanaman.
- Tanggapan Alat: LED 1 atau LED 2 dihidupkan sesuai dengan tingkat pH tanah. Misalnya, LED 1 menyala jika pH kurang dari 6 dan LED 2 menyala jika pH lebih dari 7. Hal ini membantu petani untuk memonitor dan mengatur kondisi tanah sesuai kebutuhan tanaman.
7. Kelembaban Tanah Rendah:
- Kondisi: Sensor kelembaban tanah mendeteksi bahwa kelembaban tanah di bawah 60%.
- Tanggapan Alat: Sprinkler diaktifkan untuk menyiram tanaman dan menjaga kelembaban tanah agar tetap optimal.
Singkatnya, Greenhouse dalam program ini diatur berdasarkan beberapa parameter sensor yang diukur.
Suhu lingkungan direpresentasikan oleh nilai sensor suhu (suhuValue), dengan batasan antara 18 dan 25 derajat Celsius. Jika suhu kurang dari 18 derajat Celsius, penghangat (penghangatPin) diaktifkan; jika suhu melebihi 25 derajat Celsius, pendingin (pendinginPin) diaktifkan. Penutup bak (motorPin) akan terbuka jika sensor hujan (hujanValue) mendeteksi hujan (nilai 1), dan penutup bak akan tertutup jika tidak hujan (nilai 0).Lampu (lampuPin) akan menyala saat kondisi malam, diindikasikan oleh nilai rendah pada sensor cahaya (luxValue). LED 1 (led1Pin) akan menyala jika nilai pH (phValue) kurang dari 6, dan LED 2 (led2Pin) akan menyala jika nilai pH lebih dari 7. Sprinkler (sprinklerPin) akan menyala jika kelembaban tanah (soilMoistureValue) kurang dari 60%. Program secara dinamis menyesuaikan kondisi greenhouse berdasarkan nilai-nilai sensor yang terus dipantau.
- Cara Menanam Sawi Yang Baik dan Benar
- Sistem Cara Menyiram Sawi dengan Benar
- Cara Menanam Sawi Yang Baik dan Benar
- Sistem Cara Menyiram Sawi dengan Benar
- Download File HTML klik disini
- Download Rangkaian klik disini.
- Download Video Simulasi klik disini
- Download File Library Semua Sensor yang digunakan klik disini.
- Download File Library SoilMoisture sensor klik disini
- Download File Library pH sensor klik disini
- Download File Library Rain sensor klik disini
- Download Data Sheet Arduino : klik disini
- Download Data Sheet Resistor klik disini.
- Download Data Sheet Dioda klik disini.
- Download Data Sheet Transistor NPN BC547 klik disini.
- Download Data Sheet Relay klik disini.
- Download Data Sheet PCF8574 klik disini.
- Download Data Sheet LED klik disini.
- Download Data Sheet Motor DC klik disini
- Download Data Sheet UV Sensor klik disini.
- Download Data Sheet pH Sensor : klik disini
- Download Data Sheet Rain Sensor klik disini.
- Download Data Sheet Sensor Suhu LM35 klik disini.
- Download Data Sheet LCD klik disini.
- Download Program Arduino klik disini.