9. Proyek Lingkungan dengan Microcontroller Arduino

9. PROYEK LINGKUNGAN DENGAN MICROCONTROLLER ARDUINO

Pada bagian ini akan dibahas beberapa proyek yang berhubungan dengan kondisi lingkungan alam, antara lain mendeteksi adanya air hujan, mengukur kelembaban udara, kelembaban tanah serta mendeteksi adanya gas atau asap.

9.1 Deteksi Air Hujan (Raindrop Sensor)

Sensor air hujan (raindrop sensor) pada dasarnya adalah papan yang dilapisi bahan nikel dengan jalur garis-garis berdekatan. Sesuai dengan rumus V = IR, maka ketika air mengenai papan sensor akan mengurangi nilai resistansi (R) dan tegangan menjadi naik (V) karena air berfungsi sebagai konduktor kelistrikan dan keberadaan air menghubungkan garis-garis nikel secara paralel sehingga mengurangi nilai resistensi dan mengurangi drop tegangan di atasnya. Bentuk sensor beserta modul comparator LM393 tampak pada Gambar 9.1

Gambar 9.1 Sensor Raindrop + Papan Nikel

Output LED

Gambar 9.2 Pinout Modul Comparator LM393

Pada modul comparator terdapat pin AO dan DO. Jika AO yang dihubungkan ke Arduino maka akan didapatkan rentang nilai 0 — 1023, dimana rentang nilai tersebut menunjukkan intensitas air yang menempel pada sensor raindrop. Jika pin DO yang dihubungkan ke Arduino maka hanya ada dua kemungkinan nilai, yaitu HIGH atau LOW yang menunjukkan sensor raindrop terkena air atau tidak.

Proyek kali ini kita akan mendeteksi status hujan atau tidak hujan berdasarkan air yang menempel pada sensor raindrop melalui pembacaan digitalRead (kondisi HIGH/LOW), sekaligus menampilkan tingkat kebasahan air yang diperoleh dari nilai pembacaan readAnalog (bernilai 0-1023) yang akan dimap nilainya, kemudian ditransformasi menjadi bar-cursor pada layar LCD. Nilai 0 mengindikasikan papan nickel sensor raindrop sangat basah dan nilai 1023 menandakan kering atau tidak terkena air.

Kebutuhan Bahan

Kode Program

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

int pinHujanAnalog = A0;

int pinHujanDigital = 2;

boolean apakahHujan = false;

// Atur alamat LC pada 0x27 untuk tampilan LCD 16 karakter 2 baris LiquidCrystal_I2C lcd(0x27, 16, 2);

// Pembangkitan custom character, kunjungi https://maxpromer.github.io/ LCD-Character-Creator/

byte kotak[]={

B11111,

B11111,

B11111,

B11111,

B11111,

B11111,

B11111,

B11111 };

void setup(){

pinMode(pinHujanAnalog, INPUT);

pinMode(pinHujanDigital, INPUT);

lcd.init(); // Inisialisasi LCD

lcd. createChar(0, kotak);

lcd.backlight(); // Menghidupkan backlight

lcd.setCursor(0,0);

lcd.print(“Deteksi Hujan &”);

lcd.setCursor(0, 1);

lcd.print(“Level Hujan”);

delay(1000);

}

void loop() {

//membaca input signal analog

unsigned int nilaiPembacaanSensor = analogRead(pinHujanAnalog);

//membaca input signal digital, status HIGH atau LOW apakahHujan = !(digitalRead(pinHujanDigital));

//mapping 1023(kering) ke 0 dan 0 (level kebasahan) ke 100 persen byte persen = map(nilaiPembacaanSensor, 1023, 0, 0, 100);

//mapping 0-100% ke jumlah karakter 1-16

byte progressBar = map(persen, 0, 100, 1, 16);

lcd.clear();

lcd.setCursor(0, 0);

if (apakahHujan) {

//sensor terkena air

//prosentase kebasahan

lcd.print(“Hujan Level:” + String(persen)+“%”);

for (byte i = 0; i < progressBar – 1; i++)

{

//cetak custom character kotak

lcd.setCursor(i,1);

lcd.write(0);

}

} else{

//sensor tidak terkena air

lcd.print(“Tidak Hujan”);

}

delay(1000);

}

Untuk memudahkan pembuatan custom charater silahkan kunjungi website character generator berikut ini https•.//maxpromer.github.io/LCD-CharacterC-eatorL seperti tampak pada Gambar 9.3.

Adapun hasil pengujian proyek tampak seperti pada Gambar 9.4.

Gambar 9.4 Deteksi Hujan Dengan Level 66%

9.2 Deteksi Kelembaban Udara Dengan Sensor DHTII /DHT22

Dalam Tutorial Arduino ini kita akan belajar bagaimana menggunakan DHTII/ DHT22 untuk mengukur suhu dan kelembaban. Sensor ini sangat populer untuk penggemar elektronik karena harganya murah tetapi tetap memberikan kinerja yang baik.

Dari Sisi harga DHT22 lebih mahal daripada DHTI 1 dan DHT22 memiliki spesifikasi yang lebih baik. Rentang pengukuran suhu mulai dari -40 0C hingga +125 0C dengan derajat akurasi ±0,5, sedangkan rentang temperatur DHTI 1 adalah 00C hingga 500C dengan derajat akurasi ±2. Sensor DHT22 memiliki rentang pengukuran kelembaban yang lebih baik, mulai dari 0% hingga 100% dengan akurasi 2-5%, sementara rentang kelembaban DHTI 1 adalah 20% hingga 80% dengan akurasi 5%.

Ada dua spesifikasi di mana DHTII lebih baik daripada DHT22, yaitu laju pengambilan sampel datanya, untuk DHTII adalah I Hz atau satu bacaan set ia P detik, sedangkan tingkat sampling DHT22 adalah 0,5 Hz atau satu bacaan setiaP dua detik dan juga DHTII memiliki ukuran tubuh yang Iebih kecil. Tegangan operasi kedua sensor adalah 3V hingga 5V, sedangkan arus maksimal yang digunakan saat mengukur adalah 2,5mA.

Sensor DHT11 Sensor DHT22

DHTII dan DHT22 terdiri dari komponen penginderaan kelembaban, sensor suhu NTC (atau termistor) dan IC di Sisi belakang sensor, seperti tampak pada Gambar 9.7.

Untuk mengukur kelembaban, sensor DHT menggunakan komponen Penginderaan kelembaban yang memiliki dua elektroda dengan substrat menahan kelembaban diantara dua Sisi tersebut. Ketika kelembaban berubah, konduktivitas substrat berubah, atau resistensi antara elektroda-elektroda ini berubah. Perubahan resistansi ini diukur dan diproses oleh IC yang membuatnya siap dibaca oleh mikrokontroler.

Di Sisi lain, untuk mengukur suhu, sensor ini menggunakan sensor suhu NTC atau termistor. Termistor adalah resistor variabel yang mengubah ketahanannya dengan perubahan suhu. Sensor ini dibuat dengan sintering (proses pemanasan material) bahan semikonduktif seperti keramik atau polimer untuk memberikan perubahan yang lebih besar pada hambatan hanya dengan perubahan suhu yang kecil. Istilah “NTC” negative Temperature Coeffesient berarti “Koefisien Suhu Negatif”, yang berarti bahwa resistensi menurun dengan peningkatan suhu.

Proyek yang akan dibuat cupu sederhana, yaitu mengakusisi data kelembaban dan suhu yang ditangkap oleh sensor DHT11/DHT22 kemudian menampilkan nilainya pada layar LCD.

Kebutuhan Bahan

Diagram Sketch

Sensor DHT11/DHT22 memiliki empat pin antara lain VCC, GND, Data dan pin yang tidak terhubung karena tidak digunakan. Ada pula model sensor DHT yang telah disertai dengan breakout, terdiri dari 3 pin dan telah disertai dengan resistor pull-up untuk menjaga data tetap HIGH, seperti tampak pada Gambar 9.9.

Gambar 9.9 DHTII Dengan Breakout 3 Pin

Untuk kemudahan program, proyek ini memerlukan library SimpleDHT.h yang dapat di-download di https://github.com/winlinvip/SimpleDHT, bisa pula didownload dari library manager Arduino seperti tampak pada Gambar 9.10.

Kode Program DHT11

#include <SimpleDHT.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#define pinDHT 2

// Atur alamat LC pada 0x27 untuk tampilan LCD 16 karakter 2 baris

LiquidCrystal_I2C lcd(0x27, 16, 2);

SimpleDHT11 dht11(pinDHT);

byte derajat [ ]={

B01110,

B10001,

B10001,

B10001,

B01110,

B00000,

800000,

B00000 };

void setup() {

Serial.begin(9600);

lcd.init(); // Inisialisasi LCD

lcd.createChar(0, derajat);

lcd.backlight(); // Menghidupkan backlight

lcd.setCursor(0, 0);

lcd.print(“ Deteksi “);

{

lcd.setCursor(0,1); lcd.print(“ Kelembaban “);

delay(1000);

}

void loop() {

byte temperature =0;

byte humidity=0;

int err = SimpleDHTErrSuccess;

if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSucce

{

Serial.print(“Read DHT11 failed, err=”);

Serial.println(err); delay(1000);

return;

}

Serial.print(“Sample OK: “);

Serial.print((int)temperature);

Serial.print(“ *C, “);

Serial.print((int)humidity);

Serial.print1n(“ H”);

lcd.clear();

lcd.setCursor(0,0);

lcd.print(“Temperatur: “ + String((int)temperature));

lcd.write(0);

lcd.print(“C”);

lcd.setCursor(0,1);

lcd.print(“Kelembaban: “ + String((int)humidity) +“H”);

//DHT11 sampling rate 1HZ.

delay(1500);

}

Kode Program DHT22

#include <SimpleDHT.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#define pinDHT 2

// Atur alamat LC pada 0x27 untuk tampilan LCD 16 karakter 2 baris

LiquidCrystal_I2C lcd(0x27, 16, 2);

SimpleDHT22 dht22(pinDHT22);

byte derajat [ ]={

B01110,

B10001,

B10001,

B10001,

B01110,

B00000,

800000,

B00000 };

void setup() {

Serial.begin(9600);

lcd.init(); // Inisialisasi LCD

lcd.createChar(0, derajat);

lcd.backlight(); // Menghidupkan backlight

lcd.setCursor(0, 0);

lcd. print(“ Deteksi “);

{

lcd.setCursor(0,1); lcd.print(“ Kelembaban “);

delay(1000);

}

void loop() {

byte temperature =0;

byte humidity=0;

int err = SimpleDHTErrSuccess;

if ((err = dht22.read(&temperature, &humidity, NULL)) != SimpleDHTErrSucce

{

Serial.print(“Read DHT22 failed, err=”);

Serial.println(err); delay(1000);

return;

}

Serial.print(“Sample OK: “);

Serial.print((int)temperature);

Serial.print(“ *C, “);

Serial.print((int)humidity);

Serial.print1n(“ H”);

lcd.clear();

lcd.setCursor(0,0);

lcd.print(“Temperatur: “ + String((int)temperature));

lcd.write(0);

lcd.print(“C”);

lcd.setCursor(0,1);

lcd.print(“Kelembaban: “ + String((int)humidity) +“H”);

//DHT22 sampling rate 0.5HZ.

delay(2500);

}

Bila hasil pengukuran temperatur dan kelembaban melalui serial monitor akan tampak seperti pada Gambar 9.11

Adapun hasil akhir proyek pengukuran temperatur dan kelembaban dengan sensor DHTII tampak seperti pada gambar 9.12

Gambar 9.12 Hasil Proyek Pengukuran Temperatur & Kelembaban

9.3 Pendeteksi Kelembaban Tanah Dengan Sensor Soil Moisture Untuk Memicu Kran Elektrik (Solenoid Valve)

Pertanian cerdas atau smart farming saat ini menjadi populer karena bermanfaat dari segi kesehatan tanaman dan hasil panen, sehingga banyak orang tertarik pada otomatisasi pertanian cerdas. Itulah sebabnya kita perlu belajar bagaimana penggunaan sensor kelembaban tanah untuk menentukan kadar air dalam tanah. Sedangkan maksud dari kelembaban tanah adalah berapa jumlah air yang terkandung di ruang antara partikel tanah. Ini adalah faktor yang sangat penting yang menentukan pertumbuhan tanaman dan kesehatannya.

Anda dapat mengembangkannya dengan menambahkan LED sebagai indikator jika tanah kurang lembab, kemudian membuka kran air untuk menyiram tanaman tersebut. Contoh kran air elektrik seperti tampak pada Gambar 9.13.

Gambar 9.13 Kran Air Elektrik (Solenoid Valve)

Sensor kelembaban tanah (soil moisture sensor) menggunakan hambatan listrik tanah untuk menentukan kelembaban tanah. Hambatan listrik tanah berkurang seiring bertambahnya jumlah air di dalam tanah, dan sebaliknya hambatan listrik di dalam tanah akan meningkat seiring dengan pengurangan jumlah air di dalam tanah.

Sensor terdiri dari probe dan komparator dengan potensiometer yang dapat disesuaikan yang dapat digunakan untuk mengatur sensitivitas sensor, sepertl tampak pada gambar 9.14

Gambar 9.14 Sensor Soil Moisture

Kebutuhan Bahan

Bahan Jumlah Nilai Keterangan
Sensor Kelembaban Tanah

(Soil Moisture) + Modul

Comparator

1 pcs
Modul LCD 1 pcs
LED 5MM 1 pcs
Diode 1 Amper 1 pcs 1 N4007
Resitor % Watt 1 pcs 10K Ohm
Resitor 1/4 Watt 1 pcs 330 Ohm
Transistor 1 pcs TIPI 20/TlP142
Selenoid Valve (Kran Elektrik) 1 pcs

Diagram Sketch

Pada modul comparator terdapat 2 output yang dapat dimanfaatkan yaitu pin DO (Digital Out) yang dihubungkan dengan pin digital D2 Arduino dan pin AO (Analog Out) yang dihubungkan dengan pin analog AO Arduino. Input digital bertujuan untuk menentukan dua kondisi antara “tanah lembab” atau “tanah kering” karena hanya bernilai HIGH atau LOW. Kemudian untuk menentuka .n tingkat kelembaban tanah digunakan inputan analog dengan rentang 1023 (kering) – 0 (sangat lembab), kemudian nilai yang didapatkan di-map atau ditransformasi menjadi nilai 0-100%

Kode Program

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#define pinLED 4

#defne pinKran 3

#define pinDigitalkelembabanDe 2 // sesuaikan dengan board komparator

#define pinAnalogkelembabanA0 A0// sesuaikan dengan board komparator

// Atur alamat LC pada 0x27 untuk tampilan LCD 16 karakter 2 baris

LiquidCrystal_I2C lcd(0x27,16,2);

boolean apakahLembab =false;

1/ Pembangkitan custom character,kunjungi https://maxpromer.github.io/ LCD-Character-Creator/

byte kotak[ ]={

B11111,

B11111,

B11111,

B11111,

B11111,

B11111,

B11111,

B11111

};

void setup(){

pinMode(pinLED, OUTPUT);

pinMode(pinKran, OUTPUT);

pinMode(pinDigitalKelembabanD0, INPUT);

pinMode(pinAnalogKelembabanA0, INPUT);

lcd.init();// Inisialisasi LCD

lcd.createChar(0, kotak);

lcd.backlight(); // Menghidupkan backlight

lcd. setCursor(0, 0);

lcd.print(“ Smart Farming“);

lcd.setCursor(0, 1);

lcd.print(“ Kelembaban”);

delay(3000);

}

void loop() {

//membaca input signal analog

unsigned int nilaiPembacaansensor = analogRead(pinAnalogKeIembabanA0);

//membaca input signal digital, status HIGH atau Low

apakahLembab =!(digitalRead(pinAnalogkelembabanA0));

//mapping 1023 (kering) ke 0 dan 0 (lembab) ke 100 persen

byte persen = map(nilaiPembacaanSensor, 1023, 0,8,100);

//mapping 0-100% ke jumlah karakter 1-16

byte progressBar = map(persen, 0,100,1,16);

lcd.clear();

lcd.setCursor(0,0);

if (apakahLembab) {

//LED mati ketika tanah lembab

digitalwrite(pinLED, LOW);

//sensor terkena air

//prosentase kelembaban

lcd.print(“Kelembaban:” + String(persen) +“%”);

for(byte i=0; i < progressBar – 1; i++)

{

//cetak custom character kotak

lcd.setCursor(i, 1);

lcd.write(0);

}

//Tutup kran elektrik (valve solenoid)

//Ketika tingkat kelembaban lebih dari sama dengan 60%

if (persen >=60){

digitalwrite(pinKran, LOW);

delay(1000); //tunda 1 detik

}

} else {

//LED hidup ketika tanah kering

digitalwrite(pinLED, HIGH);

//sensor tidak terkena air

lcd.print(“Tanah Kering”);

if(persen < 60) {

//Buka kran elektrik (valve solenoid)

//Ketika tingkat kelembaban kurang dari 60%

digitalwrite(pinLED, HIGH);

delay(1000); //tunda 1 detik

}

}

delay(1000);

}

Pada kode program di atas sudah termasuk kontrol terhadap saklar eletrik (valve solenoid), meskipun proyek tidak disertai alat sesungguhnya. Valve solenoid akan terbuka dengan sendirinya ketika tingkat kelembaban tanah kurang dari 60% dan akan menutup sendiri ketika tingkat kelembaban tanah lebih dari 60%. Gambar 9.15 dan gambar 9.16 adalah ilustrasi hasil akhir proyek yang sudah dibuat.

9.4 Pendeteksi Asap Dengan Sensor Gas MQ-2

Terdapat beberapa jenis sensor gas yang bisa digunakan pada Arduino. JeniS sensor gas tergantung dari unsur kimia gas yang akan dideteksi, antara seri MQ2, MQ-3, MQ-4, MQ-5, MQ-6 dan MQ-7. Berikut ringkasan kekhususan setiap seri sensor:

Seri MO Sensitifitas Terhadap Gas
MQQ Sensitif untuk Metana, Butana, LPG, asap. Sensor ini sensitif terhadap gas yang mudah terbakar. Pemanas menggunakan 5V.
MQ-3 Sensitif untuk Alkohol, Etanol, asap. Pemanas menggunakan 5V
MQ-4 Sensitif untuk Metana, CNG Gas. Pemanas menggunakan 5V.
MQ-5 Sensitif untuk gas alam, LPG. Pemanas menggunakan 5V.
MQ-6 Sensitif untuk LPG, gas butana. Pemanas menggunakan 5V.
MQ-7 Sensitif untuk Karbon Monoksida. Pemanas menggunakan tegangan alternatif 5V dan 1 .4V.
MQÒ(XX Masih banyak lagi jenis gas yang bisa ditangani oleh sensor

MQ. Silahkan cek di situs https://playground.Arduino.cc/Main/

MQGasSensors.

Gambar 9.17 Sensor Gas MQ 3 Pin & 4 Pin

Terkadang sensor MQ terdiri dari 3 pin atau 4 pin antara Iain VCC, GND DO (Digital Output) dan AO (Analog Output) seperti tampak pada Gambar 9.17.

Proyek kali ini akan membuat alat pendeteksi gas metana, butana, LPG dan asap dengan sensor gas MQ-2. Arduino akan membaca nilai sensor MQ-2 melalui pin analog read AO dengan rentang nilai antara 0 sampai 1023,dimana semakin besar nilainya berarti udara semakin terpolusi. Kemudian dari pembacaan pin AO akan di-mapping menjadi skala prosentase 0% sampai 100%. Jika nilai prosentase lebih dari atau sama dengan 30% maka indikator LED akan menyala serta speaker buzzer akan berbunyi, begitu pula sebaliknya.

Kebutuhan Bahan

Diagram Sketch

Kode Program

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#define pinAnalog A0

#define pinLED 3

#define pinBuzzer 4

// Inisialisasi library

// Atur alamat LC pada 0x27 untuk tampilan LCD 16 karakter 2 baris

LiquidCrystal_I2C lcd(0x27, 16, 2);

// Pembangkitan custom character, kunjungi https://maxpromer.github.io/ LCD-Character-Creator/

byte kotak[]={

B11111,

B11111,

B11111,

B11111,

B11111,

B11111,

B11111,

B11111

};

void setup(){

pinMode(pinAnalog, INPUT);

pinMode(pinLED, OUTPUT);

lcd.init(); // Inisialisasi LCD

lcd.createChar(0, kotak);

lcd.backlight(); // Menghidupkan backlight

lcd. setCursor(0, 0);

lcd.print( Deteksi “);

lcd.setCursor(0, 1);

lcd.print(“Asap LPG Alkohol”);

delay(3000);

Serial.begin(9600);

}

void loop(){

//membaca input signal analog

unsigned int nilaiPembacaansensor = analogRead(pinAnalog);

//mapping 1023 (kering) ke e dan θ (level kebasahan) ke 100 persen byte persen = map(nilaiPembacaanSensor, 0, 1023, 0, 100);

//mapping 0-100% ke jumlah karakter 1-16

byte progressBar = map(persen, 0, 100,1,16);

Serial.println(“Baca Analog: “ + String(nilaiPembacaanSensor) +“,“+ String(persen) +“%”);

lcd.clear();

lcd.setCursor(0,0);

lcd.print(“Polusi Level:” + String(persen) + “%”);

for (byte i=0; i < progressBar – 1; i++)

{

//cetak custom character kotak

lcd.setCursor(i,1);

lcd.write(0);

}

if(persen>=30) {

//jika kadar gas, asap, co,LPG, Hidrogen lebih dari sama dengan 30%

//maka indikator LED menyala dan terdengar speaker Buzzer

digitalwrite(pinLED,HIGH);

tone(pinBuzzer,200, 200);

}else{

//jika kadar gas, asap, co,LPG,Hidrogen kurang dari 30%

//maka LED indikator mati dan speaker buzzer diam

digitalwrite(pinLED,LOW);

noTone(pinBuzzer);

}

delay(2500);

}

Adapun hasil akhir proyek tampak seperti pada Gambar 9.18

 

Tinggalkan Komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.