Membuat Alat Pemantau Kebocoran Gas LPG dengan Arduino & Sensor MQ-2

Membuat Alat Pemantau Kebocoran Gas LPG dengan Arduino & Sensor MQ-2

Assalamualaikum, Selamat datang bagi para pembaca website ini.

Salah satu sumber kecelakaan di lingkungan rumah tangga adalah kebocoran gas LPG yang tidak langsung terdeteksi. kebocoran gas ini seringkali menjadi sumber kebakaran di rumah-rumah yang menggunakan gas LPG sebagai sumber bahan bakar untuk memasak.

Pada tulisan ini, kita akan mempelajari cara membuat sebuah sistem pemantau kebocoran gas LPG dengan menggunakan Arduino dan sensor gas MQ-2. Untuk output nya kita akan menggunakan speaker piezo buzzer dan LCD 16×2. Alat ini akan bekerja secara terus menerus memantau kondisi udara dan akan langsung mengeluarkan bunyi pertanda adanya kebocoran gas LPG di sekitar alat.

Yuk, langsung saja kita masuk ke menu utama…

Alat dan Bahan

Nama Kebutuhan
Arduino UNO1 Buah
Sensor MQ-21 buah
Buzzer1 buah
LCD 16×2 I2C1 buah
Breadboard1 buah
Kabel jumpersecukupnya

Gambar Rangkaian

Instalasi Library LCD 16×2 I2C

untuk bisa mengendalikan sensor LCD 16×2 dengan mudah, kita perlu menginstal library untuk kedua modul tersebut dengan mengikuti langkah-langkah berikut ini:

Bukalah aplikasi Arduino IDE, lalu buka library manager yang terdapat disebelah kiri layar

Library yang akan kita instal adalah library LiquidCrystal_I2C. Gunakan kotak pencarian untuk mempermudah pencarian library yang dimaksud. Lewati langkah ini jika library sudah pernah diinstal sebelumnya.

Setelah library berhasil terinstal, maka kita bisa lanjut ke proses penulisan code program. yukk lanjut…

Coding / Sketch

#define MQ2 8
int nilaiSensor;

#define buzz 9

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(9600);
  Serial.println("Please Wait");
  lcd.init();
  lcd.backlight();
  lcd.setCursor(2, 0);
  lcd.print("Please Wait");
  lcd.setCursor(0, 1);
  for (int a = 16; a >= 0; a--) {
    Serial.println(a);
    lcd.print(">");
    delay(1000);
  }
  lcd.clear();
  Serial.print("Sensor Aktif");
  lcd.setCursor(2, 0);
  lcd.print("Sensor Aktif");
  delay(2000);
  lcd.clear();
  pinMode(buzz, OUTPUT);
}

void loop() {
  nilaiSensor = digitalRead(MQ2);
  if (nilaiSensor) {
    Serial.println("AMAN");
    lcd.setCursor(0, 0);
    lcd.print("Status Kebocoran");
    lcd.setCursor(0, 1);
    lcd.print("-----AMAN-----");
  } else {
    Serial.println("Ada Kebocoran Gas");
    lcd.setCursor(5, 0);
    lcd.print("BAHAYA");
    lcd.setCursor(0, 1);
    lcd.print("!!!Gas BOCOR !!!");
    tone(buzz, 1000);
    lcd.noBacklight();
    delay(500);
    lcd.backlight();
    noTone(buzz);
  }
  delay(1000);
  lcd.clear();
}

Upload kode diatas, cek dahulu pastikan tidak ada yang error. Setelah upload berhasil, kita bisa langsung uji coba dengan menggunakan gas dari mancis atau dengan menggunakan gas lainnya.

Versi video dari tulisan ini bisa dilihat di channel youtube dibawah ini

Baiklah, sampai disini dulu tulisan ini saya buat, selamat mencoba

Membuat alat pengukur suhu ruangan dengan menggunakan sensor DHT-11 & Arduino

Membuat alat pengukur suhu ruangan dengan menggunakan sensor DHT-11 & Arduino

Assalamu’alaikum.

Pada tulisan ini, saya akan membagikan sebuah tutorial project sederhana berbasis Arduino. Kita akan membuat sebuah alat pengukur suhu ruangan dengan menggunakan sensor DHT-11 dan hasil pembacaan sensornya akan tertampil pada layar LCD 16×2.

Project ini cocok diaplikasikan untuk memonitoring suhu & kelembaban ruangan-ruangan tertentu yang harus sering di awasi suhu & kelembabannya, misalnya ruangan penetas telur dan ruangan-ruangan sejenis.

Kamu juga dapat melihat versi video dari tutorial ini di bawah ini:

Ok, kita lanjutkan tulisannya dulu ya…

Alat & Bahan

AlatKebutuhan
Arduino UNO1 buah
Sensor DHT 111 buah
LCD 16×2 I2C1 buah
Kabel secukupnya
breadboard1 buah

Gambar Rangkaian

Instalasi Library DHT-11 dan LCD 16×2 I2C

untuk bisa mengendalikan sensor DHT 11 dan LCD 16×2 dengan mudah, kita perlu menginstal library untuk kedua modul tersebut dengan mengikuti langkah-langkah berikut ini:

Bukalah aplikasi Arduino IDE, lalu buka library manager yang terdapat disebelah kiri layar

Carilah dan instal masing-masing library dibawah ini. Gunakan kotak pencarian agar library gampang ditemukan

DHT Sensor Library by Adafruit

LiquidCrystal_I2C by Frank de Barabander

Coding /sketch

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
  lcd.init();
  lcd.backlight();
}
void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Gagal Membaca Sensor"));
    return;
  }
  Serial.print("Suhu Ruangan: ");
  Serial.print(t);
  Serial.print(" Celcius, Kelembaban: ");
  Serial.print(h);
  Serial.println(" %");
  lcd.setCursor(0, 0);
  lcd.print("Suhu: ");
  Led.print(t);
  lcd.print(" C");
  lcd.setCursor(0, 1);
  lcd.print("Kelembaban");
  lcd.print(h);
  lcd.print(" %");
}

Setelah rangkaian & Coding dibuat dengan benar, langkah berikutnya adalah mengupload coding yang telah kita ketik sebelumnya ke microcontroler Arduino kita lalu dilanjutkan dengan pengujian.

keseluruhan proses pembuatan alat ini bisa kita lihat pada video dibawah ini.

Demikian tulisan saya kali ini, semoga bermanfaat, dan jangan lupa di subscribe akun youtube nya supaya makin semangat bikin konten berikutnya.

Robot halang lintang bootcamp

#include <AFMotor.h>

const int trigPin = A2;
const int echoPin  = A3;
long duration;
int distance;


AF_DCMotor  motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR12_1KHZ);

 

void setup() {
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT);

  Serial.begin(9600);
  
  motor2.setSpeed(250);
  motor3.setSpeed(250);
  
}

void loop() 
{
  
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin,  HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin,  HIGH);
distance= duration*0.034/2;
Serial.print("Distance: ");
Serial.println(distance);

if(distance  < 75)
{   
 
 backward();
    delay(1000);
  
     
    movestop();
    delay(1000);
    
    lookright();
    delay(200);
}
else
{
  forward();
  delay(1000); 

}


}


void movestop()
{
  motor2.run(RELEASE);
  motor3.run(RELEASE);
 
}

void  forward()
{
 
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor2.setSpeed(200);
  motor3.setSpeed(200);
  
 
}

void backward()
{
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor2.setSpeed(200);
  motor3.setSpeed(200);
 
}
    
void  lookright()
{
  motor2.run(FORWARD);
  motor3.run(BACKWARD);
  motor2.setSpeed(200);
  motor3.setSpeed(200);
 
}

void lookleft()
{
  motor2.run(BACKWARD);
  motor3.run(FORWARD);
  motor2.setSpeed(200);
  motor3.setSpeed(200);
 
}

Code line Follower untuk bootcamp

#include <AFMotor.h>

//defining pins and variables
#define left A0
#define right A1

//defining motors
AF_DCMotor M1(2);
AF_DCMotor M4(3);

int S_maju = 100;
int S_belok = 150;


void setup() {
  //declaring pin types
  pinMode(left, INPUT);
  pinMode(right, INPUT);
  //begin serial communication
  Serial.begin(9600);
}

void loop() {
  //printing values of the sensors to the serial monitor
  Serial.println(digitalRead(left));
  Serial.println(digitalRead(right));

  //line detected by both
  if (digitalRead(left) == 0 && digitalRead(right) == 0) {
    //Forward
    M1.run(FORWARD);
    M1.setSpeed(S_maju);
    M4.run(FORWARD);
    M4.setSpeed(S_maju);

  }
  //line detected by left sensor
  else if (digitalRead(left) == 0 && !analogRead(right) == 0) {
    //turn left
    M1.run(FORWARD);
    M1.setSpeed(S_belok);
    M4.run(BACKWARD);
    M4.setSpeed(S_belok);


  }
  //line detected by right sensor
  else if (!digitalRead(left) == 0 && digitalRead(right) == 0) {
    //turn right
    M1.run(BACKWARD);
    M1.setSpeed(S_belok);
    M4.run(FORWARD);
    M4.setSpeed(S_belok);


  }
  //line detected by none
  else if (!digitalRead(left) == 0 && !digitalRead(right) == 0) {
    //stop
    M1.run(RELEASE);
    M1.setSpeed(0);
    M4.run(RELEASE);
    M4.setSpeed(0);
  }
}

Menampilkan output dari Arduino dengan LCD 1602 I2C

Menampilkan output dari Arduino dengan LCD 1602 I2C

Sebelumnya kita sudah mempelajari bagaimana membaca kondisi suhu dan kelembaban lingkungan sekitar dengan menggunakan sensor DHT 11 – https://helmydx.my.id/2024/02/09/antarmuka-sensor-dht-11-dengan-menggunakan-arduino. Pada artikel tersebut, hasil pembacaan sensor DHT 11 hanya ditampilkan lewat serial monitor saja sehingga Arduino harus selalu terhubung ke komputer atau laptop kita.

Tutorial ini akan membahas bagaimana cara menampilkan output berupa teks dari Arduino ke LCD 1602 dan diakhir tutorial ini, kita akan mampu menggunakan LCD 1602 sebagai output dan menggunakannya untuk project kita selanjutnya.

LCD 1602 I2C

LCD 1602 I2C adalah sejenis LCD (liquid Crystal Display) yang dapat menampilkan karakter berupa angka dan huruf. LCD ini terdiri dari 16 baris dan 2 kolom sehingga disebut dengan LCD 1602. Untuk koneksi ke Arduino, LCD ini sudah dilengkapi dengan modul I2C (Inter Integrated Circuit) yang hanya membutuhkan 2 pin untuk komunikasi dan 2 pin power saja sehingga menghemat penggunaan pin pada Arduino.

Inter Integrated Circuit (I2C)

Inter Integrated Circuit atau biasa disingkat I2C adalah standar komunikasi serial 2 arah untuk mengirimkan dan menerima data dengan menggunakan 2 saluran khusus. Sistem I2C terdiri dari 2 saluran yaitu SDA (Serial Data) dan SCL (Serial Clock). SDA berfungsi untuk mengirimkan dan menerima data sedangkan SCL berfungsi sebagai clock untuk mengatur aliran data dari dan ke microcontroller. Salah satu pengaplikasian sistem I2C ini sering kita temui pada modul LCD 1602, modul RTC (Real Time Clock) dan beberapa jenis modul lainnya.

Pinout pada LCD 1602 I2C

Seperti dijelaskan sebelumnya, pinout pada LCD 1602 I2C hanya terdiri dari 2 pin untuk komunikasi yaitu pin SDA dan SCL dan 2 pin power VCC dan GND.

Rangkaian Modul LCD 1602 dengan menggunakan Arduino

Merakit modul LCD 1602 dengan Arduino relatif mudah karena modul LCD nya hanya terdiri dari 4 buah pin saja.

LCD 1602 I2CArduino
VCC5V
GNDGND
SCLpin SCL atau pin A5
SDApin SDA atau pin A4

Atau bisa juga seperti skema dibawah ini

Library LCD I2C

pemrograman LCD 1602 I2C membutuhkan library tambahan untuk mempermudah penulisan dan kontrol terhadap perangkat LCD, untuk menginstal library nya ikuti langkah-langkah sesuai gambar berikut.

Pastikan output pada Arduino IDE sudah seperti ini:

Program / Sketch

Setelah rangkaian dan library terinstal, maka langkah selanjutnya adalah memprogram Arduino agar dapat menampilkan tulisan di layar LCD. Ketikkan program dibawah ini pada halaman kerja Arduino IDE.

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

void setup() {
  lcd.init();
  lcd.clear();         
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("MAN 1 LANGKAT");
  lcd.setCursor(0,1);
  lcd.print("Tutorial LCD");
}

void loop() {
}

Upload program ke dalam Arduino dan perhatikan hasilnya.

Penjelasan Program

#include <LiquidCrystal_I2C.h>

Menambahan / include library LCD I2C yang sebelumnya kita instal ke dalam program

LiquidCrystal_I2C lcd(0x27,16,2);

menentukan object lcd dengan parameter (0x27, 16, 2). Dimana 0x27 adalah alamat I2C pada LCD (jika alamat ini tidak berfungsi, coba gunakan alamat 0x3F), 16 adalah jumlah baris pada LCD dan 2 adalah jumlah kolom LCD.

lcd.init();

lcd.init() berfungsi untuk mengaktifkan kontrol LCD

lcd.clear();

lcd.clear() berfungsi untuk mengosongkan tampilan pada layar LCD agar teks tidak saling timpa antara teks sebelumnya dengan teks yang akan tampil

lcd.backlight();

lcd.bcaklight() akan mengaktifkan lampu layar pada LCD, jika fungsi ini tidak dimasukkan, maka LCD akan menjadi gelap

lcd.setCursor(0,0);

lcd.setCursor(0, 0) berfungsi untuk mengatur tata letak huruf yang akan tampil pada layar. fungsi ini memiliki 2 parameter dengan syntax lcd.setCursor(nomor_baris, nomor_kolom). nomor_baris digunakan untuk mengatur posisi awal huruf pertama dari teks yang akan kita buat. Penomoran susunan baris pada LCD 1602 dimulai dari angka 0. Supaya huruf tampil agak ketengah, kita tuliskan lcd.setCursor (2, 0) atau lcd.setCursor (3, 0) sesuai tata letak yang kita inginkan.

Sedangkan parameter nomor_kolom digunakan untuk menentukan posisi teks berada diatas atau dibawah layar. Seperti yang telah kita ketahui, LCD 1602 memiliki 2 kolom dimana kolom yang atas diberi notasi 0 dan kolom yang bawah diberi notasi 1. jadi jika kita ingin menampilkan suatu teks di kolom bagian atas, maka kita ketikkan lcd.setCursor(0, 0); sedangkan jika ingin teks tampil dibagian bawah LCD maka ketikkan lcd.setCursor(0, 1);

lcd.print("MAN 1 LKT");

lcd.print() berfungsi untuk menampilkan tulisan pada layar. Tulisan yang akan ditampilkan adalah teks atau nilai variabel yang berada didalam kurung. Pada baris program diatas, lcd.print() akan menampilkan teks bertuliskan MAN 1 LKT pada layar. Posisi teks sudah diatur pada baris program diatasnya yaitu teks ada dibagian kiri atas layar LCD karena fungsi lcd.setCursor(0, 0).

Selanjutnya, silahkan mengekplorasi lebih jauh tentang penggunaan LCD ini dengan cara memanipulasi perintah-perintah yang sudah dijelaskan diatas. Sampai disini dulu tutorial nya sampai jumpa di tutorial berikutnya.

Selamat belajar.

Variabel dan tipe data nya

Untuk beberapa sesi kedepan, kita akan mempelajari dasar-dasar pemrograman agar nantinya dapat dengan mudah diaplikasikan ketika membuat proyek dengan menggunakan Arduino.

Segmen pemrograman ini kita mulai dengan mempelajari tentang variabel dan tipe data nya.

Variabel

Istilah variabel adalah istilah yang sering kita gunakan di pelajaran matematika dan fisika. Biasanya variabel dilambangkan dengan simbol huruf lalu diikuti oleh tanda sama dengan (=) dan berisi data berupa angka. Misalnya : X = 5 atau Z = 10. Variabel dalam pemrograman komputer juga mempunyai fungsi yang sama dengan variabel yang kita kenal di matematika dan fisika.

Secara sederhana, variabel dapat kita artikan sebagai tempat penyimpanan data, dimana data tersebut dapat kita gunakan pada baris-baris program dengan cara memanggil nama variabelnya saja. Data yang ada didalam sebuah variabel juga dapat diolah sedemikian rupa sehingga isi nya bisa berubah.

variabel dalam pemrograman Arduino biasanya dituliskan seperti ini :

int x = 0;

Dimana:

  • int adalah tipe data (data type) dari sebuah variabel.
  • x adalah nama dari sebuah variabel.
  • Tanda “=” adalah tanda assignment yang bisa dimaknai sebagai “adalah”
  • nilai 0 adalah nilai atau data default/awal yang terdapat didalam variabel

Tipe data variabel

pada contoh variabel diatas, kita telah mengenal salah satu tipe data yang biasa digunakan dalam pemrograman Arduino yaitu tipe data int. int adalah singkatan dari “integer”. tipe data integer adalah tipe data untuk variabel yang memiliki data berbentuk bilangan bulat. Selain int, terdapat pula tipe data lainnya misalnya “float” yang datanya berupa bilangan desimal. Berikut ini adalah daftar lengkap tipe data variabel yang biasa digunakan dalam pemrograman Arduino.

Tipe dataPenjelasancontoh penulisan
inttipe data angka biasa / bilangan bulatint x = 12;
int A = 300;
int kecepatan = 100;
floattipe bilangan desimalfloat pi = 3.14;
float setengah = 0.5;
bytetipe data angka dengan nilai antara 0 – 255byte x = 20;
byte y = 254;
booleantipe data dengan nilai true/false. Tipe data ini hanya menghasilkan 2 nilai saja yaitu True atau Falsebool x = 1;
bool x = 0;

Penamaan variabel

Pemberian nama variabel dalam pemrograman Arduino harus mengikuti beberapa kaidah penulisan dibawah ini:

Nama variabel bisa menggunakan huruf besar dari A sampai Z dan huruf kecil dari a sampai z. misalnya:

int C = 100;
int c = 150;

Nama variabel tidak boleh memiliki spasi misalnya “nama variabel”, namun boleh menggunakan underscore misalnya “nama_variabel” atau menggunakan metode penulisan camelCase misalnya “namaVariabel” atau “NamaVariabel “. Contohnya:

int suhu_udara = 30;
int SuhuUdara = 30;
int suhuUdara = 30;

Tidak boleh dimulai dengan angka namun bisa ditambahkan angka diakhir. Contoh:

//benar:
int ledPin1 = 3;
// Salah :
int 3ledpin = 5;

Pemanggilan variabel didalam pemrograman

Perhatikan contoh dibawah ini:

int x = 20;
int y = 10;

void setup () {
	Serial.begin(9600);
	Serial.print("Nilai dari variabel x adalah: ");
	Serial.println(x);
	Serial.print("Nilai dari variabel y adalah: ");
	Serial.println(y);
}

void loop (){

}

Pada program diatas, terdapat 2 buah variabel dengan nilai masing-masing x=20 dan y = 10.

Di baris ke 5, terdapat fungsi Serial.begin dengan baud rate 9600. Fungsi Serial ini berguna untuk menampilkan output secara langsung pada menu serial monitor.

Pada baris ke-6, kita menggunakan Serial.print untuk mencetak atau menampilkan teks dilayar monitor komputer /laptop kita.

Pada ke-7, kita menampilkan nilai dari variabel x di layar dan memindahkan teks setelahnya ke baris berikutnya dengan fungsi Serial.println.

Jika kita mengupload program diatas ke dalam Arduino, maka pada serial monitor akan terlihat hasil seperti dibawah ini:

Nilai dari variabel x adalah : 20
Nilai dari variabel y adalah : 10

Operator Aritmatika

Data pada variabel dapat kita manipulasi dengan menggunakan operator aritmatika. kita bisa menjumlahkan, mengurangkan, membagi dan mengalikan nilai suatu variabel. Perhatikan contoh dibawah ini:

int x = 20;
int y = 10;

void setup () {
	Serial.begin(9600);
	Serial.print("Nilai dari variabel x adalah: ");
	Serial.println(x);
	Serial.print("Nilai dari variabel y adalah: ");
	Serial.println(y);
	int A = x + y;
	Serial.println("Penjumlahan");
	Serial.print("x ditambah y = ");
	Serial.println(A);
	int B = x - y;
	Serial.println("pengurangan");
	Serial.print("x dikurang y = ");
	Serial.println(B);
}

void loop (){

}

Kalau kita perhatikan program diatas, kita akan menemukan dua variabel baru yaitu variabel A dan B. Nilai variabel A adalah nilai x + y sedangkan Nilai variabel adalah nilai x – y. Apabila program dijalankan maka serial monitor akan menampilkan hasil penjumlahan dan pengurangan antara x dan y

Antarmuka sensor DHT-11 dengan menggunakan Arduino

Antarmuka sensor DHT-11 dengan menggunakan Arduino

DHT 11

DHT 11 adalah sejenis sensor yang memiliki kemampuan untuk mengukur suhu dan kelembaban ruangan. Sensor ini sangat mudah digunakan bersama Arduino dan memiliki kemampuan membaca suhu antara 0 s/d 50 derajat Celcius. Berikut ini adalah spesifikasi lengkap dari sensor ini:

Tegangan kerja3-5 Volt DC
Arus maksimal2.5 mA
rentang pengukuran suhu0-50 °C toleransi +- 2 °C
Rentang pengukuran kelembaban20-80% toleransi 5%

Pinout pada DHT 11

Modul DHT 11 terdiri dari 3 pin yaitu seperti gambar dibawah ini:

pin VCC digunakan untuk memberi supply listrik untuk sensor. Sesuai spesifikasi sensor, DHT 11 dapat disupply dengan menggunakan tegangan antara 3.3 – 5 volt. pemberian supply bisa langsung dari pin 5V pada Arduino atau menggunakan sumber tenaga lain seperti baterai dan powerbank.

pin OUT digunakan untuk mengirimkan sinyal ke Arduino. Sinyal dari pin ini akan diproses oleh Arduino yang outputnya berupa pembacaan suhu dan kelembaban ruangan.

pin GND adalah pin ground

Rangkaian Sensor DHT 11 dengan Arduino

Untuk dapat membaca suhu dan kelembaban, maka sensor DHT 11 harus dihubungkan ke microcontroller Arduino. Rangkaian sensor ini dengan DHT 11 relatif sangat mudah, perhatikan tabel dan gambar dibawah ini

DHT 11Arduino
pin VCCpin 5V
pin OUTpin 8
pin GNDpin GND

Menginstal Library DHT

Untuk dapat mengendalikan sensor DHT 11 dengan baik, kita perlu menginstal library DHT kedalam aplikasi Arduino IDE. Penggunaan library ini akan mempermudah kita dalam memprogram sensor DHT 11.

Langkah-langkat instalasi library DHT ikuti langkah-langkah berikut:

Program / Sketch

Setelah library berhasil diinstal, langkah berikutnya adalah menulis dan mengupload program ke dalam Arduino. Program dibawah ini akan menampikan hasil pembacaan sensor pada serial monitor. S

#include "DHT.h"

#define DHTPIN 8
#define DHTTYPE DHT11


DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("Antarmuka DHT 11"));

  dht.begin();
}

void loop() {
  delay(2000);

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);

  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Gagal membaca sensor"));
    return;
  }

  Serial.print("kelembaban: ");
  Serial.print(h);
  Serial.print("%  Temperatur: ");
  Serial.print(t);
  Serial.print("°C ");
  Serial.print(f);
  Serial.println("°F ");
}

Setelah program selesai ditulis, hubungkan Arduino dengan PC atau laptop, pastikan board dan port sudah disetting dengan benar sebelum mengupload. Bukalah Serial monitor dan perhatikan hasil pembacaan sensor. Jika pada layar serial monitor tampil tulisan “Gagal membaca sensor”, Periksalah kembali sambungan kabel antara Arduino dengan sensor DHT 11.

Penjelasan program

#include "DHT.h"

menambahkan (include) library DHT yang kita instal sebelumnya

#define DHTPIN 8
#define DHTTYPE DHT11

#define DHTPIN 8 : mendefinisikan pin 8 Arduino sebagai pin yang terhubung dengan DHT 11

#define DHTTYPE DHT11 : mendefinisikan jenis sensor DHT yang dipakai, dalam hal ini kita menggunakan DHT 11. Apabila sensor yang digunakan adalah sensor DHT22, maka diganti menjadi #define DHTTYPE DHT22.

dht.begin()

mengaktifkan sensor DHT11

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);

mendeklarasikan variabel dengan tipe data float (desimal) untuk menyimpan data pembacaan sensor. variabel h akan menyimpan hasil pembacaan kelembaban, t akan menyimpan data suhu dalam Celcius, f akan menyimpan data suhu dalam Fahrenheit.

if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Gagal membaca sensor"));
    return;
  }

Arduino akan menjalalankan fungsi if dengan logika jika hasil pembacaan sensor yang tersimpan di salah satu variabel h, t atau f bukan berupa angka (isnan = is not a number) maka Arduino akan menampilkan teks “Gagal membaca sensor” di layar serial monitor.

  Serial.print("kelembaban: ");
  Serial.print(h);
  Serial.print("%  Temperatur: ");
  Serial.print(t);
  Serial.print("°C ");
  Serial.print(f);
  Serial.println("°F ");

Menampilkan hasil pembacaan sensor ke layar serial monitor. Hasil pembacaan sensor yang tampil di layar adalah kelembaban, suhu dalam celcius, dan suhu dalam Fahrenheit.

kode line follower 3

#include <NewPing.h>
#include <Servo.h>
#include <AFMotor.h>

//hc-sr04 sensor
#define TRIGGER_PIN A2
#define ECHO_PIN A3
#define max_distance 50

int waktu1 = 500;
int waktu2 = 700;
int waktu3 = 500;


//jika pergerakan robot terbalik antara kiri dan kanan, tukar A1 dan A0 
#define irLeft A1
#define irRight A0

//speed 4 motor gerak maju
int speedMaju = 100;
//speed 2 motor gerak gerak maju saat belok (motor akan bergerak maju di sisi yang satu dan mundur di sisi yang lain)
int speedBelokMaju = 100; 
//speed 2 motor gerak mundur saat belok (motor akan bergerak maju di sisi yang satu dan mundur di sisi yang lain)
int speedBelokMundur = 80;


//motor
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 20

Servo servo;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, max_distance);

AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);


int distance = 0;
int leftDistance;
int rightDistance;
boolean object;

void setup() {
  Serial.begin(9600);
  pinMode(irLeft, INPUT);
  pinMode(irRight, INPUT);
  servo.attach(10);
  servo.write(90);

}

void loop() {
  if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    //forword
  }
  else if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 1 ) {
    objectAvoid();
    Serial.println("TL");
    //leftturn
    Stop();
    delay(20);
    moveLeft();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    Serial.println("TR");
    //rightturn
    Stop();
    delay(20);
    moveRight();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 1 ) {
    //Stop
    Stop();
  }
}

void objectAvoid() {
  distance = getDistance();
  if (distance <= 15) {
    //stop
    Stop();
    delay(100);
  }
  else {
    //forword
    Serial.println("moveforword");
    moveForward();
  }
}

int getDistance() {
  delay(50);
  int cm = sonar.ping_cm();
  if (cm == 0) {
    cm = 100;
  }
  return cm;
}

int lookLeft () {
  //lock left
  servo.write(150);
  delay(500);
  leftDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("Left:");
  Serial.print(leftDistance);
  return leftDistance;
  delay(100);
}

int lookRight() {
  //lock right
  servo.write(30);
  delay(500);
  rightDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("   ");
  Serial.print("Right:");
  Serial.println(rightDistance);
  return rightDistance;
  delay(100);
}
void Stop() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}
void moveForward() {
  motor1.run(FORWARD);
  motor1.setSpeed(speedMaju);
  motor2.run(FORWARD);
  motor2.setSpeed(speedMaju);
  motor3.run(FORWARD);
  motor3.setSpeed(speedMaju);
  motor4.run(FORWARD);
  motor4.setSpeed(speedMaju);
}
void moveBackward() {
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);

}
void turn() {
  if (object == false) {
    Serial.println("turn Right");
    moveLeft();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveRight();
    delay(waktu3);
    if (digitalRead(irRight) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
  else {
    Serial.println("turn left");
    moveRight();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveLeft();
    delay(waktu3);
    if (digitalRead(irLeft) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
}
void moveRight() {
  motor1.run(BACKWARD);
  motor1.setSpeed(speedBelokMundur);
  motor2.run(FORWARD);
  motor2.setSpeed(speedBelokMaju);
  motor3.run(FORWARD);
  motor3.setSpeed(speedBelokMaju);
  motor4.run(BACKWARD);
  motor4.setSpeed(speedBelokMundur);
  
}
void moveLeft() {
  motor1.run(FORWARD);
  motor1.setSpeed(speedBelokMaju);
  motor2.run(BACKWARD);
  motor2.setSpeed(speedBelokMundur);
  motor3.run(BACKWARD);
  motor3.setSpeed(speedBelokMundur);
  motor4.run(FORWARD);
  motor4.setSpeed(speedBelokMaju);
}

Kode line follower 2

#include <NewPing.h>
#include <Servo.h>
#include <AFMotor.h>

//hc-sr04 sensor
#define TRIGGER_PIN A2
#define ECHO_PIN A3
#define max_distance 50

int waktu1 = 500;
int waktu2 = 700;
int waktu3 = 500;


//jika pergerakan robot terbalik antara kiri dan kanan, tukar A1 dan A0 
#define irLeft A1
#define irRight A0

//speed 4 motor gerak maju
int speedMaju = 100;
//speed 2 motor gerak gerak maju saat belok (motor akan bergerak maju di sisi yang satu dan mundur di sisi yang lain)
int speedBelokMaju = 100; 
//speed 2 motor gerak mundur saat belok (motor akan bergerak maju di sisi yang satu dan mundur di sisi yang lain)
int speedBelokMundur = 80;


//motor
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 20

Servo servo;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, max_distance);

AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);


int distance = 0;
int leftDistance;
int rightDistance;
boolean object;

void setup() {
  Serial.begin(9600);
  pinMode(irLeft, INPUT);
  pinMode(irRight, INPUT);
  servo.attach(10);
  servo.write(90);

}

void loop() {
  if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    //forword
  }
  else if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 1 ) {
    objectAvoid();
    Serial.println("TL");
    //leftturn
    Stop();
    delay(20);
    moveLeft();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    Serial.println("TR");
    //rightturn
    Stop();
    delay(20);
    moveRight();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 1 ) {
    //Stop
    Stop();
  }
}

void objectAvoid() {
  distance = getDistance();
  if (distance <= 15) {
    //stop
    Stop();
    Serial.println("Stop");
    delay(100);
    if (rightDistance <= leftDistance) {
      //left
      object = true;
      turn();
      Serial.println("moveLeft");
    } else {
      //right
      object = false;
      turn();
      Serial.println("moveRight");
    }
    delay(100);
  }
  else {
    //forword
    Serial.println("moveforword");
    moveForward();
  }
}

int getDistance() {
  delay(50);
  int cm = sonar.ping_cm();
  if (cm == 0) {
    cm = 100;
  }
  return cm;
}

int lookLeft () {
  //lock left
  servo.write(150);
  delay(500);
  leftDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("Left:");
  Serial.print(leftDistance);
  return leftDistance;
  delay(100);
}

int lookRight() {
  //lock right
  servo.write(30);
  delay(500);
  rightDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("   ");
  Serial.print("Right:");
  Serial.println(rightDistance);
  return rightDistance;
  delay(100);
}
void Stop() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}
void moveForward() {
  motor1.run(FORWARD);
  motor1.setSpeed(speedMaju);
  motor2.run(FORWARD);
  motor2.setSpeed(speedMaju);
  motor3.run(FORWARD);
  motor3.setSpeed(speedMaju);
  motor4.run(FORWARD);
  motor4.setSpeed(speedMaju);
}
void moveBackward() {
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);

}
void turn() {
  if (object == false) {
    Serial.println("turn Right");
    moveLeft();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveRight();
    delay(waktu3);
    if (digitalRead(irRight) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
  else {
    Serial.println("turn left");
    moveRight();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveLeft();
    delay(waktu3);
    if (digitalRead(irLeft) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
}
void moveRight() {
  motor1.run(BACKWARD);
  motor1.setSpeed(speedBelokMundur);
  motor2.run(FORWARD);
  motor2.setSpeed(speedBelokMaju);
  motor3.run(FORWARD);
  motor3.setSpeed(speedBelokMaju);
  motor4.run(BACKWARD);
  motor4.setSpeed(speedBelokMundur);
  
}
void moveLeft() {
  motor1.run(FORWARD);
  motor1.setSpeed(speedBelokMaju);
  motor2.run(BACKWARD);
  motor2.setSpeed(speedBelokMundur);
  motor3.run(BACKWARD);
  motor3.setSpeed(speedBelokMundur);
  motor4.run(FORWARD);
  motor4.setSpeed(speedBelokMaju);
}

kode line follower

#include <NewPing.h>
#include <Servo.h>
#include <AFMotor.h>

//hc-sr04 sensor
#define TRIGGER_PIN A2
#define ECHO_PIN A3
#define max_distance 50

int waktu1 = 500;
int waktu2 = 700;
int waktu3 = 500;

//ir sensor
#define irLeft A0
#define irRight A1

//motor
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 20

Servo servo;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, max_distance);

AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);


int distance = 0;
int leftDistance;
int rightDistance;
boolean object;

void setup() {
  Serial.begin(9600);
  pinMode(irLeft, INPUT);
  pinMode(irRight, INPUT);
  servo.attach(10);
  servo.write(90);

  motor1.setSpeed(120);
  motor2.setSpeed(120);
  motor3.setSpeed(120);
  motor4.setSpeed(120);
}

void loop() {
  if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    //forword
  }
  else if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 1 ) {
    objectAvoid();
    Serial.println("TL");
    //leftturn
    moveLeft();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 0 ) {
    objectAvoid();
    Serial.println("TR");
    //rightturn
    moveRight();
  }
  else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 1 ) {
    //Stop
    Stop();
  }
}

void objectAvoid() {
  distance = getDistance();
  if (distance <= 15) {
    //stop
    Stop();
    Serial.println("Stop");

    lookLeft();
    lookRight();
    delay(100);
    if (rightDistance <= leftDistance) {
      //left
      object = true;
      turn();
      Serial.println("moveLeft");
    } else {
      //right
      object = false;
      turn();
      Serial.println("moveRight");
    }
    delay(100);
  }
  else {
    //forword
    Serial.println("moveforword");
    moveForward();
  }
}

int getDistance() {
  delay(50);
  int cm = sonar.ping_cm();
  if (cm == 0) {
    cm = 100;
  }
  return cm;
}

int lookLeft () {
  //lock left
  servo.write(150);
  delay(500);
  leftDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("Left:");
  Serial.print(leftDistance);
  return leftDistance;
  delay(100);
}

int lookRight() {
  //lock right
  servo.write(30);
  delay(500);
  rightDistance = getDistance();
  delay(100);
  servo.write(90);
  Serial.print("   ");
  Serial.print("Right:");
  Serial.println(rightDistance);
  return rightDistance;
  delay(100);
}
void Stop() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}
void moveForward() {
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}
void moveBackward() {
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);

}
void turn() {
  if (object == false) {
    Serial.println("turn Right");
    moveLeft();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveRight();
    delay(waktu3);
    if (digitalRead(irRight) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
  else {
    Serial.println("turn left");
    moveRight();
    delay(waktu1);
    moveForward();
    delay(waktu2);
    moveLeft();
    delay(waktu3);
    if (digitalRead(irLeft) == 1) {
      loop();
    } else {
      moveForward();
    }
  }
}
void moveRight() {
  motor1.run(BACKWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(BACKWARD);
}
void moveLeft() {
  motor1.run(FORWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(FORWARD);
}