• Tidak ada hasil yang ditemukan

BAB 4 HASIL DAN PEMBAHASAN

5.2 Saran

1. Dibutuhkan penelitian dan pengembangan lebih lanjut agar rancang bangun pengontrol suhu dan kelembapan pada tanaman palawija berbasis nodemcu dengan aplikasi telegram ini dapat diaplikasikan pada budidaya tanaman palawija dalam skala besar.

2. Dibutuhkan wifi atau jaringan yang stabil agar saat pengiriman data dan pengontrolan dengan apalikasi telegram berjalan dengan baik.

3. Rancang bangun pengontrol suhu dan kelembapan pada tanaman palawija berbasis nodemcu dengan aplikasi telegram ini pengontrolan suhu dan kelembapan yang diambil sebagai parameter utama dalam sistem pemantauan tanaman pada rumah tanaman ini. Untuk kedepannya akan lebih baik jika

parameter dan kinerja alat tidak hanya suhu dan kelembaban tanah melainkan ada penambahan pada PH air, serta sensor sensor lain yang dapat menoptimalkan kinerja sistem dan pengambilan data dapat menyeluruh.

DAFTAR PUSTAKA

Budiharto, W., & Jefri, T. (12). Proyek Sistem Akuisisi Data. PT Elex Media Komputindo, Jakarta.

Engel, V. J. L., Angela, D., Suakanto, S., & Hutagalung, M. (2016). Model inferensi konteks internet of things pada sistem pertanian cerdas. Jurnal Telematika, 11(2), 6.

Kurniawan, R., & Wijaya Kurniawan, R. M. (2019). Prototype Rancang Bangun Sistem Cerdas Pengatur Otomasi Suhu, Kelembaban, dan Sirkulasi Udara Pada Greenhouse Menggunakan Metode Fuzzy logic. Jurnal Pengembangan Teknologi Informasi dan Ilmu Komputer e-ISSN, 2548, 964X

Nur, H. C., Hafsah, H., & Adhika, N. (2011). Sistem Humidifier Dan Temperaturizer Digunakan Dalam Penyiraman Otomatis Tanaman. Telematika, (18).

Priyono, N. (2017). Sistem Peringatan Dini Banjir Berbasis Protocol MQTT Menggunakan NodeMCU ESP8266 (Doctoral dissertation, STMIK AKAKOM Yogyakarta).

Prayitno, W. A., Muttaqin, A., & Syauqy, D. (2017). Sistem Monitoring Suhu, Kelembaban, dan Pengendali Penyiraman Tanaman Hidroponik menggunakan Blynk Android. Jurnal Pengembangan Teknologi Informasi dan Ilmu

Komputer e-ISSN, 2548, 964X.

Rachman, F. Z. (2015, May). Prototype development of monitoring system in patient infusion with wireless sensor network. In 2015 International Seminar on Intelligent Technology and Its Applications (ISITIA) (pp. 397-402). IEEE Samsugi, S., & Burlian, A. (2019). Sistem penjadwalan pompa air otomatis pada

aquaponik menggunakan mikrokontrol Arduino UNO R3. PROSIDING SEMNASTEK 2019, 1(1).

Sastrawangsa, G. (2017). Pemanfaatan Telegram Bot Untuk Automatisasi Layanan Dan Informasi Mahasiswa Dalam Konsep Smart Campus. E-Proceedings KNS&I STIKOM Bali, 772-776.

S. Wahono, S. Sugiyanto, and E. Yohana. 2014. "Eksperimen Pengaturan Suhu Dan Kelembaban Pada Rumah Tanaman (Greenhouse) Dengan Sistem Humidifikasi," Jurnal Teknik Mesin.

Setyawan, A. B. (2018). Sistem Monitoring Kelembaban Tanah, Kelembaban Udara Dan Suhu Pada Lahan Pertanian Menggunakan Protokol MQTT (Doctoral dissertation, Universitas Brawijaya).

Sumarno, I. 2015, Cara Tekno, Tersedia dalam:

https://www.caratekno.com/2015/07/pengertianarduino-uno- mikrokontroler.html diakses 22 febuari 2020

Syahban, R. 2011, Mikrokontroler ATMEL AVR (ISIS Proteus dan CodeVisionAVR) + CD ,Penerbit : INFORMATIKA, Jakarta.

Zakaria, A.K. 2016. Kebijakan Antisipatif dan Strategi Penggalangan Petani Menuju Swasembada Jagung Nasional. Analisis Kebijakan Pertanian.

LAMPIRAN

Kode program dengan CV AVR versi 3.27

#include <io.h>

void Request() /* Microcontroller send start pulse/request */

{

DDRC |= (1<<DHT11_PIN);

PORTC &= ~(1<<DHT11_PIN); /* set to low pin */

delay_ms(20); /* wait for 20ms */

PORTC |= (1<<DHT11_PIN); /* set to high pin */

}

void Response() /* receive response from DHT11 */

{

unsigned int Receive_data() /* receive data */

{int q;

for (q=0;q<8;q++) {

while((PINC & (1<<DHT11_PIN)) == 0); /* check received bit 0 or 1 */

delay_us(30);

if(PINC & (1<<DHT11_PIN))/* if high pulse is greater than 30ms */

c = (c<<1)|(0x01); /* then its logic HIGH */

Response(); /* receive response */

I_RH=Receive_data()/366; /* store first eight bit in I_RH */

D_RH=Receive_data()/366; /* store next eight bit in D_RH */

I_Temp=Receive_data(); /* store next eight bit in I_Temp */

D_Temp=Receive_data()/100; /* store next eight bit in D_Temp */

CheckSum=Receive_data();/* store next eight bit in CheckSum */

}

void main(void) {

// Input/Output Ports initialization // Port A initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization

// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out

DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);

// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0

PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (1<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization

// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=In Bit0=In

DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (0<<DDD1) | (0<<DDD0);

// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=T Bit0=T

PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// USART initialization // USART Baud Rate: 9600

UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);

UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);

UBRRH=0x00;

UBRRL=0x47;

// Bit-Banged I2C Bus initialization i2c_init();

// Alphanumeric LCD initialization lcd_init(16);

lcd_puts(buf);

lcd_putchar('.');

sprintf(buf,"%i",D_Temp);

lcd_puts(buf);

if (M == 0) {

if (I_Temp <= 28){Lampu=1;}

if (I_Temp >= 31){Lampu=0;}

if (I_RH <= 60 || I_Temp >= 31 ){Pompa=1;delay_ms(2000);Pompa=0;}

if (I_RH <= 60 && S==0){Hum=0;delay_ms(300);Hum=1;S=1;}

if (I_RH >= 70 && S==1){Hum=0;delay_ms(300);Hum=1;S=0;}

}

if ((UCSRA & (1<<RXC))){Data = UDR;lcd_init(16);

if (Data ==

if (Data == 'P'){Pompa=1;lcd_clear();lcd_putsf(" IoT PUMP ON");

delay_ms(1000);}

if (Data == 'p'){Pompa=0;lcd_clear();lcd_putsf(" IoT PUMP OFF");

delay_ms(1000);}

i

f (Data == 'L'){Lampu=1;lcd_clear();lcd_putsf(" IoT LAMP ON"); delay_ms(1000);}

if (Data == 'l'){Lampu=0;lcd_clear();lcd_putsf(" IoT LAMP OFF");

delay_ms(1000);}

if (Data == 'M'){M=1;lcd_clear();lcd_putsf(" MANUAL MODE");

delay_ms(1000);}

if (Data == 'm'){M=0;lcd_clear();lcd_putsf(" AUTO MODE");

delay_ms(1000);}

Data=0;

} delay_ms(2000);

} }

KODE PROGRAM DENGAN ARDUINO IDE VERSI 1.8.13.

char ssid[] = "IoT";

char password[] = "12345678";

#defineBOTtoken "1872624928:AAFsd4A3Ug8kuPB1Kdtm_wBZbLV5p3AwDtE";

int Bot_mtbs = 100; //mean time between scan messages long Bot_lasttime; //last time messages' scan has been done bool St;

String chat_id ;

String text = bot.messages[i].text;

String Operator = " ";

void handleNewMessages(int numNewMessages) { for (int i=0; i<numNewMessages; i++) {

String chat_id = String(bot.messages[i].chat_id);

Operator = chat_id;

String text = bot.messages[i].text;

Serial.print("Chat received");

if (text == "/cek_sensor") {Cek_sensor();}

if (text == "/pompa_on") {MySerial.print('P');bot.sendMessage(Operator, "Pompa telah aktif ", "");}

if (text == "/pompa_off") {MySerial.print('p');bot.sendMessage(Operator, "Pompa telah non aktif ", "");}

if (text == "/moisture_on") {MySerial.print('H');bot.sendMessage(Operator,

"Moisture telah aktif ", "");}

if (text == "/moisture_off") {MySerial.print('h');bot.sendMessage(Operator,

"Moisture telah non aktif ", "");}

if (text == "/lampu_on") {MySerial.print('L');bot.sendMessage(Operator, "Pemanas telah aktif ", "");}

if (text == "/lampu_off") {MySerial.print('l');bot.sendMessage(Operator, "Pemanas telah non aktif ", "");}

if (text == "/manual_mode") {MySerial.print('M');bot.sendMessage(Operator,

"Mode manual aktif ", "");}

if (text == "/auto_mode") {MySerial.print('m');bot.sendMessage(Operator, "Mode otomatis aktif ", "");}

} }

void Cek_sensor() {

if(I_RH < 60& I_Temp < 28){

Data = "Kelembaban ruang : ";

Data += I_RH;

int Integer_value(){

while (WiFi.status() != WL_CONNECTED) { Serial.print(".");

bot.sendMessage(Operator, "System Online", "");

}

void loop() {

if (WiFi.status() != WL_CONNECTED) { delay(1);

if (millis() > Bot_lasttime + Bot_mtbs) {

int numNewMessages = bot.getUpdates(bot.last_message_received + 1);

//delay(100);

while(numNewMessages) { Serial.println("got response");

handleNewMessages(numNewMessages);

numNewMessages = bot.getUpdates(bot.last_message_received + 1);

}

if(I_RH <= 60){ bot.sendMessage(Operator, "Terdeteksi Kelembaban terlalu rendah", "");delay(2500);Cek_sensor();}

if(I_RH > 70 && I_RH < 100){ bot.sendMessage(Operator, "Terdeteksi Kelembaban terlalu tinggi", ""); delay(2500);Cek_sensor();}

if(I_Temp <= 28 ){ bot.sendMessage(Operator, "Terdeteksi Temperatur terlalu rendah", "");delay(2500);Cek_sensor();}

if(I_Temp > 31 &){ bot.sendMessage(Operator, "Terdeteksi Temperatur terlalu tinggi", ""); delay(2500);Cek_sensor();}

Bot_lasttime = millis();

}

while (MySerial.available()) {ID = MySerial.read();

if( ID == 'H')

{

I_RH = Integer_value();

D_RH = Integer_value();

if (I_RH > 70{I_RH = 60;}

I_Temp = Integer_value();

D_Temp = Integer_value();

if (I_Temp > 31{I_Temp = 31;}

Serial.print(I_RH);Serial.print(" "); Serial.print(D_RH);S erial.print(" ");

Serial.print(I_Temp); Serial.print(" "); Serial.println(D_Temp);

counter++;

if(counter >= 31){Cek_sensor();counter=0;Serial.print("sending...");}

} }

Lampiran 2: Gambar

1. Rangkaian Lengkap

2. Gambar Alat

- Gambar Alat Keseluruhan

2GND VSS VDD VEERS RWE D0 D1D2D3 D4D5 D6D7

- Gambar Alat Keseluruhan Tampak Depan

Dokumen terkait