Kelompok B10 :
Ilham Lilo Juliansyah 3.32.20.1.14
Rizkia Fernanda Berliana 3.32.20.1.22
Wiroso 3.32.20.1.26
Latar Belakang
Indonesia merupakan negara agraris dengan mayoritas penduduknya bermata pencaharian di bidang pertanian. Kebutuhan pangan yang terus meningkat membuat pertanian di Indonesia harus menerapkan sistem pertanian yang efektif dan menerapkan teknologi berbasis IoT yang menggunakan beberapa sensor untuk memudahkan petani dalam sistem pertanian yang efektif dan efisien tersebut. Dengan menerapkan sistem IoT, memungkinkan komunikasi yang dilakukan dari petani ke lahan pertanian bisa lebih fleksibel dan dapat dengan mudah untuk melakukannya.
Komponen Masukan
- Sensor DHT 11
Modul sensor yang berfungsi untuk mendeteksi suhu dan kelembaban udara yang memiliki output tegangan analog yang dapat diolah lebih lanjut menggunakan mikrokontroler. Sensor DHT11 pada umumya memiliki pembacaan nilai suhu dan kelembaban udara yang cukup akurat.
- Capasitive soil moisture sensor
Soil Moisture Sensor merupakan module untuk mendeteksi kelembaban tanah, yang dapat diakses menggunakan microcontroller seperti arduino. Sensor kelembaban tanah ini dapat dimanfaatkan pada sistem pertanian, perkebunan, maupun sistem hidroponik menggunakan hidroton.
- Sensor FR-04
Rain sensor atau sensor hujan adalah jenis sensor yang berfungsi mendeteksi terjadinya hujan atau tidak. Pada sensor ini, terdapat integrated circuit atau IC (komponen dasar yang terdiri dari resistor, transistor, dan lain-lain) komparator yang berfungsi memberikan sinyal berupa logika 'on' dan 'off'.
Komponen Pemroses
- NodeMCU ESP8266
NodeMCU adalah sebuah platform IoT yang bersifat opensource. Terdiri dari perangkat keras berupa System On Chip ESP8266 dari ESP8266 buatan Esperessif System. NodeMCU bisa dianalogikan sebagai board arduino yang terkoneksi dengan ESP8622.
Komponen Luaran
- Relay
Relay merupakan suatu alat/komponen elektro mekanik yang digunakan untuk mengoperasikan seperangkat kontak saklar, dengan memanfaatkan tenaga listrik sebagai sumber energinya. Dengan memanfaatkan lilitan atau coil (koil) berintikan besi yang dialiri arus listrik, tentunya akan menghasilkan medan magnet pada ujung inti besi apa bila koil dialiri arus listrik.
- Water Pump
Water pump adalah sebuah pompa air yang memiliki tegangan sumber 12v yang akan memompa air keluar menuju katup/selang yang dipasang dalam rangkaian. Fungsi dari pompa air ini adalah sebagai pengganti Solenoid Valve karena tidak didukungnya menggunakan gravitasi air seperti halnya pada sistem yang umum dipakai dalam prototipe Smart Farming .
Diagram Blok
Sensor-sensor yang digunakan ( seperti FC-28 Soil Moisture Sensor, DHT-11 Humidity Sensor, FR-04 Rain Drop Sensor) mendeteksi keadaan di sekitar lahan pertanian. Lalu pembacaan tersebut diteruskan ke NodeMCU untuk di proses, karena aplikasi BLYNK harus tersambung internet, pastikan sambungan jaringan internet handphone dan rangkaian tersambung dengan baik. Seluruh sensor akan mendeteksi keadaan sekitar dan mengirimkan notifikasi ke handphone pengguna. Jika kelembaban tanah kurang dari 30% berarti tanah terebut dalam keadaan kering dan tanah membutuhkan air, maka pompa air akan menyala menyiram tanaman. Data hasil pengukuran sensor selalu update dengan pada BLYNK lewat NodeMCU ESP8266 yang terkoneksi internet, jadi sangat mudah untuk membaca keadaan yang ada di lahan tersebut.
Program
/* =================================================================================
Pemrogram : Kelompok EK-3B /10
1. 14-Ilham Lilo Juliansyah NIM:3.32.20.1.14
2. 22-Rizkia Fernanda Berliana NIM:3.32.20.1.22
3. 25-Wiroso NIM:3.32.20.1.26
Tgl.Praktikum : Rabu, 14 Desember 2022
====================================================================================
SISTEM MONITORING PERTANIAN BERBASIS IOT
------------------------------------------------------------------------------------
Komponen masukan:
- Sensor DHT11
- Capasitive Soil Moisture Sensor
- Sensor FR-04
Komponen pemroses:
- NodeMCU ESP8266
Komponen Luaran :
- Relay
- Water Pump
================================================================================= */
#define BLYNK_PRINT Serial //Mendeklarasikan serial print pada Blnyk
#define BLYNK_TEMPLATE_ID "TMPLhgzd35BS" //Template ID dari Blynk
#define BLYNK_DEVICE_NAME "SMART FARM" //Nama device pada Blynk
#define BLYNK_AUTH_TOKEN "ysFFFfP5JRUG8x-dHwyvKquQZ-Hhza_3" //Kode Autentikasi dari Blynk
#include <ESP8266WiFi.h> //Menginisiasi library ESP8266
#include <BlynkSimpleEsp8266.h>
#include <SPI.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
char auth[] = "ysFFFfP5JRUG8x-dHwyvKquQZ-Hhza_3"; //Kode Autentifikasi dari Blynk
char ssid[] = "123"; //SSID WiFi
char pass[] = "987654321"; //Password WiFi
#define SCREEN_WIDTH 128 // Lebar OLED
#define SCREEN_HEIGHT 64 // Panjang OLED
#define OLED_RESET -1 // Reset pin #
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define DHTPIN D4 //pin dht 11
DHT dhtA(DHTPIN, DHT11);
#define ONE_WIRE_BUS D6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define buzzer D5 //Mendeklarasikan pin buzzer
#define rainPin D7 //Mendeklarasikan pin Rain Sensor
int rainState = 0; //Menyimpan nilai sensor hujan
int lastRainState = 0;
const int AirValue = 590;
const int WaterValue = 300;
const int SensorPin = A0; //Pin Soil Moisture sensor
int soilMoistureValue = 0;
int soilmoisturepercent = 0;
int relay = D0; //Pin data relay
#define pirPin D3
int pirValue;
int pinValue;
BLYNK_WRITE(V0) //Membaca Blynk
{
pinValue = param.asInt();
}
void setup()
{
Serial.begin(9600);
delay(100);
Blynk.begin(auth, ssid, pass);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64)
display.clearDisplay();
pinMode(relay, OUTPUT);
pinMode(buzzer, OUTPUT);
sensors.begin(); // temperatur dallas
dhtA.begin();
}
void getPirValue(void) //Mendapatkan data PIR
{
pirValue = digitalRead(pirPin);
if (pirValue)
{
Serial.println("Gerakan Terdeteksi");
Blynk.notify("Gerakan Terdeteksi di Pertanianmu") ;
}
}
void loop() {
Blynk.run();
byte h = dhtA.readHumidity();
byte t = dhtA.readTemperature();
sensors.requestTemperatures();
float temp = sensors.getTempCByIndex(0);
Serial.print("Suhu Udara: ");
Serial.println(t);
Serial.print("Kelembapan: ");
Serial.println(h);
Blynk.virtualWrite(V3, t); //V3 untuk suhu udara
Blynk.virtualWrite(V4, h); //V4 untuk kelembapan udara
soilMoistureValue = analogRead(SensorPin);
Serial.println(soilMoistureValue);
soilmoisturepercent = map(soilMoistureValue, AirValue, WaterValue, 0, 100);
Blynk.virtualWrite(V1, soilmoisturepercent); //sensor kelembapan tanah
if (soilmoisturepercent > 100)
{
Serial.println("100 %");
delay(1500);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 5);
display.print("RH Tnh: "); // menampilkan kelembapan tanah
display.print("100");
display.print(" %");
display.setCursor(0, 35);
display.print("RT Udr: "); //menampilkan suhu udara
display.print(t);
display.print(" ");
display.cp437(true);
display.write(167);
display.print("C");
display.setCursor(0, 50);
display.print("RH Udr: "); //menampilkan kelembapan udara
display.print(h);
display.print(" %");
display.display();
delay(1500);
}
else if (soilmoisturepercent < 0)
{
Serial.println("0 %");
delay(1500);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 5);
display.print("RH of Soil: "); //menampilkan Soil temperature
display.print("0");
display.print(" %");
display.setCursor(0, 20);
display.print("Soil Temp: "); //menampilkan Air temperature
display.print(temp);
display.print(" ");
display.cp437(true);
display.write(167);
display.print("C");
display.setCursor(0, 35);
display.print("Air Temp: "); //menampilkan relative humidity of Soil
display.print(t);
display.print(" ");
display.cp437(true);
display.write(167);
display.print("C");
display.setCursor(0, 50);
display.print("RH of Air: "); //menampilkan relative humidity of Air
display.print(h);
display.print(" %");
display.display();
delay(1500);
}
else if (soilmoisturepercent >= 0 && soilmoisturepercent <= 100)
{
Serial.print(soilmoisturepercent);
Serial.println("%");
delay(1500);
display.clearDisplay();
// display Soil temperature
display.setTextSize(1);
display.setCursor(0, 5);
display.print("RH of Soil: ");
display.print(soilmoisturepercent);
display.print(" %");
display.display();
delay(2000);
}
if (soilmoisturepercent <= 30)
{
Serial.println("Membutuhkan air, Mengirim notifikasi");
//send notification
Blynk.notify("Tanaman membutuhkan air, Pompa aktif") ;
digitalWrite(relay, LOW);
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
delay(500);
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
}
Serial.println("Pompa menyala");
delay(1000);
}
else if (soilmoisturepercent > 30 && soilmoisturepercent <= 100)
{
Serial.println("Kelembaban tanah baik...");
digitalWrite(relay, HIGH);
digitalWrite(buzzer, LOW);
Serial.println("Pompa mati");
WidgetLED PumpLed(V5);
PumpLed.off();
delay(1000);
}
rainState = digitalRead(rainPin);
Serial.println(rainState);
if (rainState == 0 && lastRainState == 0) {
Serial.println("Terjadi hujan diluar!");
Blynk.notify("Terjadi hujan diluar!") ;
lastRainState = 1;
WidgetLED RainLed(V6);
RainLed.on();
delay(1000);
//Mengirimkan noifikasi
}
else if (rainState == 0 && lastRainState == 1) {
delay(1000);
}
else {
Serial.println("Tidak terjadi hujan, cuaca baik");
lastRainState = 0;
WidgetLED RainLed(V6);
RainLed.off();
delay(1000);
}
if (pinValue == HIGH)
{
getPirValue();
}
delay(100);
}
Video Demonstrasi Alat
Komentar
Posting Komentar