Modul 4



MODUL 4
"SMART WATERING UNTUK BIBIT TANAMAN CABAI"
1. Prosedur
[Kembali]

        1. Menentukan judul dan ide 
        2. Membuat simulasi menggunakan proteus dari ide yang telah ditentukan
        3. Membuat kodingan arduino ide 
        4. Jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi\
        5. Mewujudkan simulasi dari proteus ke bentuk asli berupa prototype
        5. Selesai

2. Hardware dan diagram blok [Kembali]
      a. Hardware


Alat: 
1. Sensor :
Sensor DHT11
Sensor Rain
Sensor Soil Moisture
Sensor Touch
LDR (Light dependent resistor)
2. Arduino Uno
3. LCD I2C 16x2 
4. Driver L29N
5. Motor DC (Dinamo motor)
6. Pompa air
7. LED
8. Resistor

Komponen: 
1. Baterai 3.7v
2. Adaptor 9v

            b. Digram Blok

Gambar 1. Diagram Blok

3. Rangkaian Simulasi dan Prinsip kerja [Kembali]

A. Gambar Rangkaian

Software: 
Gambar 2. Rangkaian Simulasi
               
B. PRINSIP KERJA
    Prototype smart watering untuk bibit tanaman cabai ini menggunakan dua arduino yang terhubung dengan komunikasi UART (universal asynchronous receiver transmitter). Komunikasi UART ini ditandai dengan pin Rx dan Tx antara arduino master (yang terhubung dengan input) dengan pin Rx dan Tx arduino slave (yang terhubung dengan output). 
    Pada arduino master, dihubungkan dengan inputan berupa sensor dan juga LCD I2C 16x2. Diantara sensor yang digunakan ialah sensor soil moisture yang dihubungkan ke pin A0, sensor rain dihubungkan ke pin A1, sensor DHT11 dihubungkan ke pin A2,  LDR sensor dihubungkan ke pin 4, dan sensor touch ihubungkan ke pin 2. Pada hubungan sensor ini dapat dilihat bahwa sensor soil moisture, sensor DHT11, dan sensor rain merupakan sensor analog sehingga dihubungkan dengan pin analog arduino master. Sedangkan sensor  LDR outputannya dijadikan digital dan sensor touch merupakan sensor digital yang masing-masing keluarannya dihubungkan ke pin digital arduino master.  Sedangkan LCD I2C 16x2  outputannya dihubungkan ke pin SDA dan Pin SCL arduino master.
    Sedangkan pada arduino slave yang merupakan tempat terhubungnya outputan. Dimana pada outputan dihubungkan menggunakan dua driver L29N. Driver pertama yaitu IN3 dan IN4 secara berturut-turut dihubungkan ke pin 6 dan 7, dan outputannya dihubungkan dengan pompa air yang tujuannya untuk penyiram tanaman. Sedangkan driver kedua, IN1 dan IN2 nya secara berurut dihubungkan dengan pin 10 dan 8 dan outputnya terhubung dengan motor DC dinamo yang fungsinya sebagai pembuka dan penutup atap. IN3 dan IN4 secara berturut-turut terhubung ke pin 5 dan 3 yang outputnya dihubungkan ke pompa yang tujuannya untuk menyiramkan pupuk cair untuk bibit tanaman. 
Untuk kerja dari prototype ini ialah ketika soil moisture mendeteksi nilai >700 dari tanah maka pada LCD akan ditampilkan kondisi kering, sedangkan jika <700 maka LCD ditampilkan kondisi basah.  Selain itu, ketika tanah kering maka juga akan dipeintahkan ke pompa penyiram tanaman untuk hidup sampai kondisi kembali basah. Dan baris kedua dari LCD menampilkan nilai temperatur yang diperoleh dari DHT11. 
    Ketika sensor rain mendeteksi hujan, maka outputnya ialah akan menutup atap dan begitupun sebaliknya ketika sensor rain mendeteksi tidak hujan maka atap akan terbuka. Sensor berikutnya yang ikut bekerja ialah sensor touch. Yang fungsinya secara langsung untuk mengaktifkan pompa penyiram pupuk ketika touch bernilai 1 atau ketika disentuh. Sensor teeakhir ialah LDR yang ketika mendeteksi gelap akan menghidupkan lampu untuk penerangan di luar ruangan


4. FlowChart [Kembali]

a. Listing Program 
        1. MASTER

//MASTER A
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>

#define SOIL A0
#define DHTPIN A2
#define DHTTYPE DHT11
#define RAIN A1    //mendefinisikan pin pin analog dan digital
#define TOUCH 2
#define LDR 4
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27,20,4);  // menginisialisasi objek lcd dari kelas LiquidCrystal_I2
                                   // 0x27 adalah alamat I2C dari layar LCD. 
                                   // 20 adalah jumlah kolom pada layar LCD.
                                   // 4 adalah jumlah baris pada layar LCD.
void setup()                                    //Semua kode dalam fungsi ini dieksekusi sekali
{
   Serial.begin(9600);
  Wire.begin();
  dht.begin();
  lcd.init();
  lcd.backlight();                      //Deklarasi pin A0 -A3 dan pin 8 sebagai INPUT
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(LDR, INPUT);
  pinMode(2, INPUT);
  lcd.begin(16, 2);                             //Dimensi LCD yang digunakan
                            //Set baud rate 9600 (baud rate standar)
}
void loop()   //Semua kode dalam fungsi ini dieksekusi berulang
{

  
int nilaiRAIN;
int nilaiSOIL;
int nilaiDHT;  //mendeklarasikan variabel bertipe integer yang
int nilaiTOUCH;  //untuk menyimpan nilai yang dibaca sensor
int nilaiLDR;

   delay(2000);
  float temperature = dht.readTemperature();
  if (isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
    Wire.beginTransmission(0); // Alamat slave Arduino
  Wire.write((byte*)&temperature, sizeof(temperature));
  Wire.endTransmission();
  lcd.setCursor(0, 1);
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.print(" C");
   nilaiSOIL = analogRead(SOIL); //membaca nilai analog dari sensor soil
    if (nilaiSOIL > 700) {
      Serial.write("2");                       //mengirim kondisi 1 melalui komunikasi bahwa tanah kering
      delay(100);
      //lcd.clear();
      lcd.setCursor(0, 0);                     //Menentukan posisi kursor pada awal penulisan
      lcd.print("Kondisi : Kering");           //Menampilkan text pada LCD
    }
    if(nilaiSOIL<=700) {
      Serial.write("3");                       //mengirim kondisi 3 melalui komunikasi bahwa tanah basah
       delay(100);
      //lcd.clear();
      lcd.setCursor(0, 0);                     //Menentukan posisi kursor pada awal penulisan
      lcd.print("Kondisi : Basah.");           //Menampilkan text pada LCD
  }
      delay(200);
   //RAIN
    nilaiRAIN = analogRead(RAIN);  //membaca nilai analog dari sensor rain
    if(nilaiRAIN <550) {
    Serial.write("4"); // mengirim kondisi 2 melalui komunikasi bahwa keadaan ada hujan
    delay(100);
    }
    else if(nilaiRAIN >550) {
    Serial.write("5"); //mengirim kondisi 6 melalui komunikasi bahwa keadaan tidak ada hujan
    delay(100);
    }
    nilaiTOUCH = digitalRead(TOUCH);  //membaca nilai digital dari sensor touch
    if (digitalRead(TOUCH) == HIGH) { //mengecek apakah sensor high atau low
    Serial.write("7"); // Mengirimkan sinyal ke Slave Arduino kondisi 7 bahwa Touch Sensor aktif
    delay(100);
    }
    if (digitalRead(TOUCH) == LOW) { //mengecek apakah sensor high atau low
    Serial.write("8"); // Mengirimkan sinyal ke Slave Arduino kondisi 7 bahwa Touch Sensor aktif
    delay(100);
    }
   nilaiLDR = digitalRead(LDR); //membaca nilai analog dari sensor LDR
    if (digitalRead(LDR) == HIGH) { //mengecek apakah sensor high atau low
    Serial.write("9"); // Mengirimkan sinyal ke Slave Arduino kondisi 8 bahwa LDR Sensor aktif untuk menutup atap
    delay(100);
  }
     if (digitalRead(LDR) == LOW) { //mengecek apakah sensor high atau low
    Serial.write("#"); // Mengirimkan sinyal ke Slave Arduino kondisi 8 bahwa LDR Sensor aktif untuk menutup atap
    delay(100);
  }
    delay(100);
}


        B. SLAVE
//SLAVE ARDUINO

//#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>//memasukkan library pada program

LiquidCrystal_I2C lcd(0x27, 16, 2);

//Servo servosoil;  //mendeklarasikan objek servo tutup atap
//Servo servopupuk;  //sda mengeluarkan air

//untuk motor DC
#define in1 2 // Deklarasi pin 2 sebagai input 1
#define in2 4 // Deklarasi pin 3 sebagai input 2
#define in3 6 // Deklarasi pin 2 sebagai input 1 //Atap
#define in4 7 // Deklarasi pin 3 sebagai input 2
#define in5 10 // Deklarasi pin 2 sebagai input 1 //Pompa
#define in6 8 // Deklarasi pin 3 sebagai input 2
#define in7 5 // Deklarasi pin 2 sebagai input 1 //pupuk
#define in8 3 // Deklarasi pin 3 sebagai input 2
#define led 11
#define duration 2000 // Deklarasi durasi 2000 ms lama waktu motor dc berputar

int data; //mendeklarasikan variabel integer data, untuk menyimpan data yang dibaca sensor

void setup() // Semua kode dalam fungsi ini dieksekusi sekali
{

   
 // servopupuk.attach(3); //menginisiasi servo dan menghubungkan ke pin 10
  //servosoil.attach(5);  //menginisiasi servo dan menghubungkan ke pin 9
  pinMode(in1, OUTPUT); // Deklarasi in1 sebagai OUTPUT
  pinMode(in2, OUTPUT); // Deklarasi in2 sebagai OUTPUT
  pinMode(in3, OUTPUT); // Deklarasi in1 sebagai OUTPUT
  pinMode(in4, OUTPUT); 
  pinMode(in5, OUTPUT); // pompa
  pinMode(in6, OUTPUT); // Deklarasi in2 sebagai OUTPUT
  pinMode(in7, OUTPUT); // atap
  pinMode(in8, OUTPUT);
  pinMode(led, OUTPUT);

  Wire.begin(0); // Alamat slave Arduino
 
  lcd.init();
  lcd.backlight();
  
  Serial.begin(9600); // Set baud rate 9600
}

void loop() // Semua program dalam fungsi ini dieksekusi berulang
{

   if (Serial.available() > 0) {
    char receivedByte = Serial.read();
    if (receivedByte == '1') {
      digitalWrite(led, HIGH); // Nyalakan lampu jika menerima byte '1'
    } else if (receivedByte == '0') {
      digitalWrite(led, LOW); // Matikan lampu jika menerima byte '0'
    }
  }

  if (Serial.available() > 0) //memeriksa apakah ada data diterima dari master
  {
    data = Serial.read();
     if (data == '2') 
    {
      digitalWrite(in3, HIGH); //pompa hidup
      digitalWrite(in4, LOW); 
    }
    else if (data == '3') 
    {
      digitalWrite(in3, LOW); 
      digitalWrite(in4, LOW);
 
    }
    else if (data == '4') 
    { 
      
      digitalWrite(in5, HIGH); 
      digitalWrite(in6, LOW);
      
 
      
    }
    else if (data == '5') { 
       digitalWrite(in5, LOW); 
      digitalWrite(in6, HIGH); 
      
    }
    
    else if (data == '7') 
    {
     digitalWrite(in7, HIGH); 
      digitalWrite(in8, LOW); 
    }
    else if (data == '8') 
    {
      digitalWrite(in7, LOW); 
      digitalWrite(in8, LOW); 
    }
    else if (data == '9') 
    {
      digitalWrite(led, HIGH); 
      delay(100); // 
    }
    else if (data == '#') 
    {
      digitalWrite(led, LOW); 
      delay(100); // 
    }
  }
 
}

 void receiveEvent(int byteCount) {
  while (Wire.available()) {
    float temperature = Wire.read();
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    lcd.print(temperature);
    lcd.print(" C");
  }
}
b. Flowchart
MASTER

Gambar3. Flowchart Master
SLAVE

Gambar 4. Flowchart Slave



5. Video Demo [Kembali]


Video Simulasi




6. Download File [Kembali]

Download HMTL klik di sini
Download Video Demo Klik di sini
Download Datasheet ARDUINO UNO klik di sini
Download Datasheet Touch sensor klik di sini
Download Datasheet Rain sensor klik disiniklik disini
Download Datasheet Soil moisture sensor klik disiniklik disini
Download Datasheet DHT11 sensor klik disini klik disini
Download Datasheet LDR sensor klik disiniklik disini
Download Datasheet LCD I2C 16x2 klik disini klik disini
Download Datasheet Waterpump klik disiniklik disini
Download Datasheet dinamo motor DC klik disiniklik disini
Download Datasheet Driver L298N klik disiniklik disini
Download Datasheet LED klik disiniklik disini
Datasheet resistor klik di sini



Komentar

Postingan populer dari blog ini

MODUL 1 PRAKTIKUM up&uc

HPF +20dB/dec

TUGAS BESAR SISDIG