Anda di halaman 1dari 40

DATA KARYA INOVASI DAN TEKONOLOGI TEPAT GUNA

1. Membuat Alat Pendeteksi Hujan Berbasis Arduino dan


Rain Sensor
(https://nofgipiston.wordpress.com/2016/12/19/membuat-alat-
pendeteksi-hujan-berbasis-arduino-dan-rain-sensor/)

Cara kerja :
Alat ini bertugas untuk mengingatkan kita kala hujan mulai turun. Jadi semisal hujan mulai turun
berupa gerimis rintik-rintik, maka air akan mengenai permukaan sensor dan alarm berupa buzzer pun
akan berbunyi sebagai pengingatnya.

Komponen yang perlu kita persiapkan yakni :


1. 1 buah Arduino (bisa UNO, MINI, NANO, MEGA, dll)
2. 1 buah LCD 16×2
3. 1 buah Potensio 10K
4. 1 buah Rain Sensor/Sensor Hujan
5. Software Arduino IDE
6. Library LiquidCrystal.h
7. 1 buah Buzzer
8. Kabel jumper secukupnya
Lalu silahkan dirangkai sesuai dengan skema berikut ini :

Keterangan Rangkaian :
 Bisa Menggunakan Segala Jenis Arduino (UNO, NANO, MEGA, MINI, dll)
 Kaki RS LCD ===> pin 2 Arduino
 Kaki E LCD ===> pin 3 Arduino
 Kaki D1 LCD ===> pin 4 Arduino
 Kaki D2 LCD ===> pin 5 Arduino
 Kaki D3 LCD ===> pin 6 Arduino
 Kaki D4 LCD ===> pin 7 Arduino
 Kaki RW LCD ===> GND (Ground)
 Kaki VO LCD ===> Output Potensio
 Pin Outpun Rain Sensor ===> Pin A5 Arduino
 Pin Positif Buzzer ===> Pin 8 Arduino

/* -------------- ALAT PENDETEKSI HUJAN ----------------- */


/* ----------- Dibuat oleh : TIM ROBOTIC */

//Pemanggilan librai LCD


#include <LiquidCrystal.h>

//Inialisasi pin lcd


LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
//Inialisasi pin sensor hujan
const int pinHujan = A5;
//Inialisasi pin buzzer
const int pinBuzzer = 8;
//Deklarasi variable data pembacaan sensor hujan
int data;

void setup()
{
//Inialisasi jumlah baris dan kolom lcd
lcd.begin(16, 2);
//Inialisasi status I/O
pinMode(pinHujan, INPUT);
pinMode(pinBuzzer, OUTPUT);
//Menghapus tulisan lcd
lcd.clear();
//Menuliskan kata pada lcd
lcd.setCursor(0, 0);
lcd.print("Alat Pendeteksi");
lcd.setCursor(0, 1);
lcd.print("Hujan .....");
delay(3000);
}

void loop()
{
//Variabel data adalah hasil pembacaan pin sensor hujan
data = analogRead(pinHujan);

//Range output sensor berkisar 0 sampai 1023


//Hujan terdeteksi
//Saat output sensor berniali <= 500
if (data <= 500)
{
//Alarm dibunyikan
digitalWrite(pinBuzzer, HIGH);
delay(500);
digitalWrite(pinBuzzer, LOW);
delay(500);

//Menulis pada lcd bahwa hujan telah turun


lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Waspada");
lcd.setCursor(0, 1);
lcd.print("Hujan Turun ... !");
}

//Jika hujan tidak terdeteksi atau nilai data di atas 500


else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hujan");
lcd.setCursor(0, 1);
lcd.print("Belum Turun ...");
delay(300);
}
}

Sedikit penjelasan dari program di atas yakni :


//Range output sensor berkisar 0 sampai 1023
//Hujan terdeteksi
//Saat output sensor berniali <= 500
if (data <= 500)
{
//Alarm dibunyikan
digitalWrite(pinBuzzer, HIGH);
delay(500);
digitalWrite(pinBuzzer, LOW);
delay(500);
//Menulis pada lcd bahwa hujan telah turun
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Waspada");
lcd.setCursor(0, 1);
lcd.print("Hujan Turun ... !");
}
//Jika hujan tidak terdeteksi atau nilai data di atas 500
else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hujan");
lcd.setCursor(0, 1);
lcd.print("Belum Turun ...");
delay(300);
}
}

2. Membuat Alat Pendeteksi Ketinggian Air Berbasis Arduino

Water level sensor adalah suatu sensor yang mampu mendeteksi air maupun ketinggian air menurut
panjang alat tersebut. Alat ini mampu mengeluarkan output analog yang akan dicacah Arduino menjadi
1024 bagian pada ADC nya (Analog to Digital Converter). 1024 itu terdiri dari angka 0 samapi dengan
1023. Jadi semakin tinggi air yang menyentuh sensor, maka nilai outputnya semakin besar pula.

Program di atas, di atur agar alarm berbunyi saat output water level sensor bernilai 400 ke atas. Jadi saat
air menyentuh bagian bawah sensor, maka alarm berupa buzzer pun berbunyi. Nilai ini bisa diatur sesuai
dengan kebutuhan.

Manfaat bagi masyarakat


masyarakat yang bermukim di sekitar Daerah Aliran Sungai (DAS) dapat memantau ketinggian
air sungai tersebut untuk mengetahui lebih awal jika terjadinya bencana

Komponen yang perlu kita persiapkan yakni :


1) 1 buah Arduino (bisa UNO, MINI, NANO, MEGA, dll)
2) 1 buah LCD 16×2
3) 1 buah Potensio 10K
4) 1 buah Water Level Sensor
5) Software Arduino IDE
6) Library LiquidCrystal.h
7) 1 buah Buzzer
8) Kabel Jumper Secukupnya
Lalu silahkan dirangkai sesuai dengan skema berikut ini :

Keterangan Rangkaian :
 Bisa Menggunakan Segala Jenis Arduino (UNO, NANO, MEGA, MINI, dll)
 Kaki RS LCD ===> pin 2 Arduino
 Kaki E LCD ===> pin 3 Arduino
 Kaki D1 LCD ===> pin 4 Arduino
 Kaki D2 LCD ===> pin 5 Arduino
 Kaki D3 LCD ===> pin 6 Arduino
 Kaki D4 LCD ===> pin 7 Arduino
 Kaki RW LCD ===> GND (Ground)
 Kaki VO LCD ===> Output Potensio
 Pin Outpun Water Level Sensor ===> Pin A5 Arduino
 Pin Positif Buzzer ===> Pin 8 Arduino

Script Program
/* ---------- ALAT PENDETEKSI KETINGGIAN AIR ----------- */
/* ----------- Dibuat oleh Tim Creator------------ */

//Pemanggilan librai LCD


#include<LiquidCrystal.h>

//Inialisasi pin lcd


LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
//Inialisasi pin sensor air
const int pinAir = A5;
//Inialisasi pin buzzer
const int pinBuzzer = 8;
//Deklarasi variable data pembacaan sensor air
int data;

void setup()
{
//Inialisasi jumlah baris dan kolom lcd
lcd.begin(16, 2);
//Inialisasi status I/O
pinMode(pinAir, INPUT);
pinMode(pinBuzzer, OUTPUT);
//Menghapus tulisan lcd
lcd.clear();
//Menuliskan kata pada lcd
lcd.setCursor(0, 0);
lcd.print("Alateteksi");
lcd.setCursor(0, 1);
lcd.print("Ketinggian);
delay(3000);
}

void loop()
{
//Variabel data adalah hasil pembacaan pin sensor air
data = analogRead(pinAir);

//Range output sensor berkisar 0 sampai 1023


//Air terdeteksi
//Saat output sensor berniali >= 400
if (data >= 400)
{
//Alarm dibunyikan
digitalWrite(pinBuzzer, HIGH);
delay(500);
digitalWrite(pinBuzzer, LOW);
delay(500);

//Menulis pada lcd bahwa air telah penuh


lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Airh");
lcd.setCursor(0, 1);
lcd.print("Penuh);
}

//Jika air tidak terdeteksi atau nilai data di bawah 400


else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Airm");
lcd.setCursor(0, 1);
lcd.print("Penuh);
delay(300);
}
}
MEMBUAT TULISAN BERJALAN DI LCD I2C DENGAN ARDUINO

Note :
void.setup () “digunakan untuk sekali program berjalan”
void.loop () “digunakan untuk mengulang ulang program”

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

LiquidCrystal_I2C lcd(0x27,20,4); // atur alamat LCD ke 0x27 untuk tampilan 16 karakter dan 2 baris

void setup()
{
lcd.init(); // inisialisasi lcd
lcd.backlight(); // untuk menampilkan pencahayaan pada lcd
}
void loop()
{
lcd.setCursor(0,0); // untuk menampilkan karakter dari kolom 0 dan baris 0
lcd.print("Hello, world!"); // untuk menampilkan tulisan ke lcd
lcd.scrollDisplayRight (); // untuk menampilkan tulisan berjalan dari arah kanan
delay (100); // delay saat tulisan berjalan
lcd.clear ();

lcd.setCursor(0,1); // untuk menampilkan karakter dari kolom 0 dan baris 1


lcd.print("CIAT PROJECT"); // untuk menampilkan tulisan di lcd
lcd.scrollDisplayRight (); // untuk menampilkan tulisan berjalan dari arah kanan
delay (100); // delay saat tulisan berjalan
lcd.clear ();

Sketch I2C ADDRESS :

#include <Wire.h>;

void setup(){
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println("cari alamat I2C");
}

void loop(){
byte error, address;
int nDevices;
Serial.println("Scanning...");

nDevices = 0;
for(address = 1; address < 127; address++ ){
Wire.beginTransmission(address);
error = Wire.endTransmission();

if (error == 0){
Serial.print("..................... 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");

nDevices++;
}
else if (error==4){
Serial.print("Tidak menemukan 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("tidak menemukan I2C");
else
Serial.println("Finished");

delay(4000);
}

Sketch menampilkan teks pada LCD


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

LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
lcd.init();
lcd.backlight();
}

void loop()
{

lcd.clear();
lcd.setCursor(0,0);
lcd.print("INSERT YOUR TEXT");
lcd.setCursor(0,1);
lcd.print("----- HERE -----");
delay(3000);

lcd.clear();
lcd.setCursor(0,0);
lcd.print("YOU");
delay(700);

lcd.setCursor(5,0);
lcd.print("CAN");
delay(700);

lcd.setCursor(10,0);
lcd.print("DO");
delay(700);

lcd.setCursor(14,0);
lcd.print("IT");
delay(3000);

lcd.clear();
lcd.setCursor(3,0);
lcd.print("THANK YOU");
lcd.setCursor(3,1);
lcd.print("---------");
delay(3000);

3. Alat Pendektsi Anti Maling


Sistem kerja alat :
Sensor ultrasonik dipasang dibagian yang kira2 dilewati orang. Bisa dipagar atau depan pintu. Jika ada
orang lewat maka akan memotong jarak ukur sensor dan dideteksi sebagai pencuri. Alarm yang berupa
buzzer akan aktif. Atur posisi dengan jarak antara sensor dengan tembok atau penghalang 2,5 m. bisa juga
disimulasi
Kebutuhan Hardware :
1) Sensor Ultrasonik HC-SR04
2) Modul LCD 2x16
3) Buzzer
4) Modul Arduino UNO
5) Power supply +9 Volt

Rangkaian Alat

Sumber lainnya : https://www.nyebarilmu.com/cara-membuat-tempat-sampah-pintar-ala-nyebarilmu/

4. Kotak Sampah Otomatis Berbasis Arduino


Berikut ini komponen dan software yang perlu dipersiapkan :
1) 1 buah Arduino UNO. Atau bisa juga menggunakan Arduino tipe lain, tapi paling mudah bagi pemula jika
pakai Arduino UNO saja (bisa diperoleh Di Sini)
2) 1 buah sensor Ultrasonic HC-SR04 (bisa diperoleh Di Sini)
3) 1 Servo, bisa Tower Pro SG90, MG, MG995, atau MG996R. Di tutorial kali ini menggunakan servo
MG996R karena servo ini yang paling kuat dan sesuai bagi saya (Bisa diperoleh Di Sini)
4) Breadboard/Projectboard untuk memparalel kabel (Bisa diperoleh Di Sini)
5) Kabel jumper secukupnya, usahakan menyiapkan semua jenis, Male-Male, Female-Female, dan
Male-Female (Bisa diperoleh Di Sini)

// Sensor Ultrasonic HC-SR04 dan Servo


// Dibuat oleh : TIM ROBOTIK
// www.nofgipiston.wordpress.com

// menambahkan lubrary Servo


#include <Servo.h>

// inialisasi variabel untuk servo


Servo servo1;
// inialisasi pin ultrasonic
const int pinTRIGGER = 8;
const int pinECHO = 9;

// inialisasi variabel pembacaan sensor ultrasonic


// gunakan "float" untuk angka dengan koma
// atau gunakan "int" untuk angka tanpa koma
float durasi, jarak;

// ======================= program pengaturan awal ====================== //


void setup()
{
// inialisasi baud rate serial monitor
Serial.begin(9600);

// inialisasi pin servo


servo1.attach(10);

// menulis derajat awal servo (menutup)


servo1.write(0);

// inialisasi stauts I/O pin


pinMode(pinTRIGGER, OUTPUT);
pinMode(pinECHO, INPUT);

delay(1000);
}

// ============================== program utama ============================= //


void loop()
{
//pembacaan sesnor ulrasonic
//Mengaktifak pin Trigger selama 10mikrodetik
//Lalu dia non aktif
digitalWrite(pinTRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(pinTRIGGER, LOW);

//Mengaktifkan pin Echo yang menerima pantulan gelombang ultrasonik


//pulseIn = Lama durasi pin Echo menerima pantulan gelombang
//Menghitung rumus jarak(Lama durasi dibagi dua)
durasi = pulseIn(pinECHO, HIGH);
jarak = ((durasi * 0.034) / 2);

// menulis data pembacaan ultrasonic pada serial monitor


// jadi kita tahu jarak obejak yang terbaca
Serial.print("Jarak
Serial.println(jarak);

// program buka tutup servo otomatis


// jika jarak objek terbaca <= 7 cm
// ubah dan sesuaikan jarak objek saat buka di sini, satuan cm
if (jarak <= 7)
{
// servo membuka, mnuju derajat 90
// ubah dan asesuaikan derajat buka di sini
servo1.write(90);

// delay membuka servo


// di sini disetting 3 detik membukanya
// ubah durasi buka di sini
delay(3000);

// servo menutup kembali, menuju derajat 0


// ubah dan sesuaikan derajat tutup di sini
servo1.write(0);
}

// jika jarak objek terbaca lebih dari pernyataan di atas


else
{
// servo menutup, menuju derajat 0
// ubah dan sesuaikan derajat tutup di sini
servo1.write(0);
}

// delay program
delay(100);

Kotak sampah cerdas versi 2

Cara kerja
Sensor Jarak yang berfungsi sebagai sensor adanya benda didepannya. Hal itu akan disalurkan ke mikrokontroler
pada kasus ini digunakan Arduino Nano yang akan mengolah sinyal trigger tersebut untuk menggerakan servo.
Fungsi utama dari servo yaitu membuka dan menutup tempat sampah berdasarkan adanya trigger sinyal sensor dan
waktu. Pada saat kondisi terbuka dan tidak ada benda yang menghalangi sensor, maka akan didelay selama 3 detik
untuk proses penutupan tempat sampah. Setelah proses penutupan cek kondisi didalam ruangan tempat sampah, cek
apakah kondisi sudah dalam kondisi penuh atau belum. Jika sudah penuh maka buzzer dibunyikan dan terdapat
notifikasi di layar LCD 16×2

Skema rangkaian :
Komponenen yang dibutuhkan antara lain :
1) Arduino Nano
2) Driver LCD PCF8574
3) LCD 16×2
4) Ultrasonic HC-SR04 2 pcs
5) Servo
6) LM2596
7) Adaptor 12v 2A
8) Sensor Proximity
9) Buzzer
10) Tempat / box pcb
11) Tempat sampah
12) dan alat pendukung lainnya

Script program :
1  
2  
3 //www.nyebarilmu.com
4  
5 #include <Servo.h>
6 #include <Wire.h>
7 #include <LiquidCrystal_PCF8574.h>
8  
9 #define echoPin2 4
10 #define trigPin2 5
11 #define buzzer 6
12 #define echoPin 7
13 #define trigPin 8
14 #define LEDPin 13
15  
16 LiquidCrystal_PCF8574 lcd(0x38); //dapat dicek menggunakan i2c finder
17  
18 Servo myservo;
19  
20 int maximumRange = 30;
21 int minimumRange = 00;
22 unsigned long mulai, selesai, over, duration, distance, duration2, distance2;
23 float detik;
24 boolean a=0;
25
26 void setup() {
27     Serial.begin (9600);
28     lcd.begin(16,2);
29     lcd.setBacklight(255);
30   
31     lcd.setCursor(00,00);
32     lcd.print(" nyebarilmu.com ");
33     lcd.setCursor(00,1);
34     lcd.print(" sampah pintar");
35     delay(2000);
36     lcd.clear();
37     
38     pinMode(trigPin, OUTPUT);
39     pinMode(echoPin, INPUT);
40     pinMode(LEDPin, OUTPUT);
41     pinMode(buzzer, OUTPUT);
42   
43     pinMode(trigPin2, OUTPUT);
44     pinMode(echoPin2, INPUT);
45 //    digitalWrite(buzzer, LOW);
46     digitalWrite(LEDPin, LOW);
47     
48     myservo.attach(9);
49     mulai=0;
50 }
51  
52 void tim(){
53       over = (mulai-selesai) % 3600000;
54       detik = int(over / 1000);
55 }
56  
57 void cek_jarak(){
58     digitalWrite(trigPin, LOW); delayMicroseconds(2);
59     digitalWrite(trigPin, HIGH); delayMicroseconds(10);
60     digitalWrite(trigPin, LOW);
61     duration = pulseIn(echoPin, HIGH);
62     
63     //perhitungan untuk dijadikan jarak
64     distance = duration/58.2;
65  
66     digitalWrite(trigPin2, LOW); delayMicroseconds(2);
67     digitalWrite(trigPin2, HIGH); delayMicroseconds(10);
68     digitalWrite(trigPin2, LOW);
69     duration2 = pulseIn(echoPin2, HIGH);
70     
71     //perhitungan untuk dijadikan jarak
72     distance2 = duration2/58.2;
73 }
74  
75 void cek_kondisi(){
76       lcd.clear();
77         while(1){  
78          cek_jarak();
79       digitalWrite(buzzer, HIGH);
80       lcd.setCursor(00,00);
81       lcd.print("Tempat sampah");
82       lcd.setCursor(00,1);
83       lcd.print("  -Full-     ");
84     if(distance2 > 10){break; lcd.clear();
85       }
86 }}
87
88 void loop() {
89     cek_jarak();
90     
91     if (distance < 30 && a==0) {
92       lcd.clear(); a=1;
93        while(1){
94         cek_jarak();
95         lcd.setCursor(00,00);
96         lcd.print("Jarak:");
97         lcd.print(distance);
98           myservo.write(180); //90 derajat
99           mulai = millis();
100           tim();
101           lcd.setCursor(00,1);
102           lcd.print("Timer:");
103           if (detik <= 9) {lcd.print("0");}
104           lcd.print(detik,0);
105           if(detik==5) {digitalWrite(LEDPin, HIGH); }
106           if ((detik>5) && distance>30) { break;  lcd.clear();}
107           if ((detik>=3) && distance>30) { break;  lcd.clear();}
108           if ((detik>=8) && distance<30 && a==1) { break;  lcd.clear();}
109         }
110     }
111  
112     if (distance < 30 && a==1) {
113       lcd.clear();
114     while(1){
115      cek_jarak();
116       
117         myservo.write(90); //0 derajat
118     
119         lcd.setCursor(00,00);
120         lcd.print("1:");
121         lcd.print(distance);
122         lcd.setCursor(9,00);
123         lcd.print("2:");
124         lcd.print(distance2);
125         lcd.setCursor(00,1);
126         lcd.print("Stand-By - 1");
127     
128         cek_kondisi();
129         if (distance>30) { break;  lcd.clear();}
130         }
131     }
132         
133     if (distance > 30) {
134       selesai= millis();
135       detik = 0;
136     digitalWrite(LEDPin, LOW);
137     myservo.write(90); //0 derajat
138     a=0;
139  
140      lcd.setCursor(00,00);
141      lcd.print("1:");
142      lcd.print(distance);
143      lcd.print("   ");
144      lcd.setCursor(9,00);
145      lcd.print("2:");
146      lcd.print(distance2);
147      lcd.print("   ");
148      lcd.setCursor(00,1);
149      lcd.print("Stand-By");
150         }
151  
152       if(distance2 <= 10){  cek_kondisi();}
153     
154     delay(50);
155 }
156  

Penjelasan program
a. Penjelasan Kode program pertama

if (distance < 30 && a==0) {


lcd.clear(); a=1;
while(1){
cek_jarak();
lcd.setCursor(00,00);
lcd.print("Jarak:");
lcd.print(distance);
myservo.write(180); //90 derajat
mulai = millis(); //timer menggunakan timer internal arduino
tim();
lcd.setCursor(00,1);
lcd.print("Timer:");
if (detik <= 9) {lcd.print("0");}
lcd.print(detik,0);
if(detik==5) {digitalWrite(LEDPin, HIGH); }
if ((detik>5) && distance>30) { break; lcd.clear();}
if ((detik>=3) && distance>30) { break; lcd.clear();}
if ((detik>=8) && distance<30 && a==1) { break; lcd.clear();}
}
}

Note program diatas :

1) Pada program diatas menggunakan timer sebagai waktu limit untuk pembukaan tutup secara otomatis
2) Jarak sensing benda untuk membukanya tempat sampah yaitu kurang dari 30 cm
3) Timer setting untuk penutupan secara otomatis yaitu 3 detik dengan kondisi jarak sensing dari
pembacaan sensor lebih dari 30 cm
4) Misal saat 3 detik masih terdeteksi jarak sensing kurang dari 30 cm, maka terdapat pengondisian detik
ke-8 akan tertutup otomatis

b. Penjelasan kode program kedua

if(distance2 <= 10){ cek_kondisi();}


void cek_kondisi(){
lcd.clear();
while(1){
cek_jarak();
digitalWrite(buzzer, HIGH);
lcd.setCursor(00,00);
lcd.print("Tempat sampah");
lcd.setCursor(00,1);
lcd.print(" -Full- ");
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
delay(500);
if(distance2 > 10){break; lcd.clear();

Note program diatas :


1) Pada saat kondisi tertutup secara otomatis maka sensor ultrasonik kedua akan bekerja untuk deteksi tingkat
kepenuhan sampah
2) Jika terdeteksi jarak sebesar dibawah 10 cm maka di lcd akan terdisplay “tempah sampah – Full”, dan
buzzer akan berbunyi
3) Pertanda sampah didalam harus dibuang dahulu untuk mengembalikan kondisi ke “Standby”

5. Alat pendeteksi gas LPG dan kebakaran menggunakan Arduino + MQ2( or MQ9) + LCD
SCREEN +I2C module + buzzer / Led

Manfaat :
Sensor MQ-2 adalah sensor yang digunakan untuk mendeteksi konsentrasi gas yang mudah terbakar di udara serta
asap dan keluaran membaca sebagai tegangan analog. Sensor gas asap MQ-2 dapat langsung diatur sensitifitasnya
dengan memutar trimpotnya. Gas yang dapat dideteksi diantaranya : LPG, i-butane, propane, methane , alcohol,
Hydrogen, smoke. Sensor MQ-2 berfungsi mendeteksi adanya asap yang diakibatkan karena kebakaran.

Cara kerja :
Sistem dapat bekerja apabila saklar ON/OFF ditekan. Saat saklar ON maka sensor gas MQ2 mulai membaca ada
atau tidaknya kadar gas di sekitar sensor. Apabila terjadi kebocoran, setelah LCD menunjukkan angka 500ppm
untuk kadar gas maka relai akan nyala sehingga kipas berputar. Nyalanya relai diikuti dengan bekerjanya modul
GSM SIM800L untuk mengirim pesan singkat atau telepon sesuai dengan yang telah diatur.

Skema Rangkaian
Circuit Connection
LCD display to i2c display : simply connect LcD dispaly to i2c display module with parallel i2c to
arduino
------------------------------------------
i2c to Arduino
VCC to 5V
GND to GND
SDA TO A4
SCL TO A5
------------------------------------------
Arduino to Gas sensor
GND to GND
VCC to 5V
A0 to A0
--------------------------------------------
BUZZER&LED TO ARDUINO
+VE TO I/O13
-VE TO GND
----------------------------------------------
Add i2c library to Arduino library

Source code:

// inialisasi pin sensor dan alarm/buzzer


const int pinApi = 8;
const int pinAlarm = 9;
const int redLED = 10;
const int smokeA0 = A5;
// inialisasi variabel data
int data;
int dataAsap;
//Nilai threshold
int sensorThres = 100;

// ----------- program default/setting awal ----------- //


void setup()
{
// inialisasi status I/O pin
pinMode(pinApi, INPUT); // pin sebagai input
pinMode(smokeA0, INPUT); // pin sebagai input
pinMode(pinAlarm, OUTPUT); // pin sebagai output
pinMode(redLED, OUTPUT);
Serial.begin(9600);
}

// ----- program utama, looping/berulang terus-menerus ----- //


void loop()
{
// variabel data adalah hasil dari pembacaan sensor
// berupa logic LOW/HIGH
data = digitalRead(pinApi);
int analogSensor = analogRead(smokeA0);

Serial.print("Pin A0: ");


Serial.println(analogSensor);

// jika data pada sensor API bernilai logic LOW


if (data == LOW)
{
// alarm dinyalakan
digitalWrite(pinAlarm, HIGH);
digitalWrite(redLED, HIGH);
delay(100);
}

// jika data Analog pada sensor Asap lebih besar dari batas
else if (analogSensor > sensorThres)
{
digitalWrite(redLED, HIGH);
tone(pinAlarm, 1000, 200);
delay(100);

// jika data tidak bernilai logic LOW


else
{
//Lampu Dimatikan
digitalWrite(redLED, LOW);
// alarm dimatikan
digitalWrite(pinAlarm, LOW);
delay(100);
}
}

6. Sistem smart Home dengan android

Sistem Kerja Alat:


Arduino UNO sebagai pengontrol ON/OFF relay dengan Android via Bluetooth. Ada banyak teknik
kontrol secara wireless, salah satunya dengan Bluetooth. Perangkat bluetooth ini mudah dijumpai pada
perangkat handphone masa kini (smartphone). Hampir semua HP berbasis Android memilikinya. Sistem
komunikasi bluetooth pada HP Android dapat kita manfaatkan untuk sistem “remote control”. Sedangkan
Arduino sebagai pengolah sinyal kontrolnya dan Relay sebagai alat yang dikontrol.
Kebutuhan Hardware :
 Modul Bluetooth HC-05
 4 Relay +5V
 Modul Arduino UNO
 Power supply +9Volt

Manfaat :
Mengendalikan sistem smart home dengan praktis dengan smartphone digenggaman tanpa mencari saklar
dan dapat mengurangi pemakaian listrik yang berlebih

Source Code/Sketch :
/*************************************
* Program : Project 57. Kontrol 4 lampu via android
* Input : Module Bluetooth HC-05
* Output : 4 Relay
* 125 Proyek Arduino Inkubatek
* www.tokotronik.com

* ***********************************/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(9, 8); // RX, TX
byte in_serial,str;
void setup(){
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
delay(1000);
mySerial.begin(9600);
}

void loop(){
str=mySerial.read();
switch(str){
case 'A': //RELAY 1 ON
digitalWrite(2,1);break;
case 'a': //RELAY 1 OFF
digitalWrite(2,0);break;
case 'B': //RELAY 2 ON
digitalWrite(3,1);break;
case 'b': //RELAY 2 OFF
digitalWrite(3,0);break;
case 'C': //RELAY 3 ON
digitalWrite(4,1);break;
case 'c': //RELAY 3 OFF
digitalWrite(4,0);break;
case 'D': //RELAY 4 ON
digitalWrite(5,1);break;
case 'd': //RELAY 4 OFF
digitalWrite(5,0);break;
}
}

Jalannya Alat :
1. Rangkai hardware Arduino dengan relay dan modul bluetooth seperti rangkaian (lihat skematik).
2. Upload program di atas.
3. Pasang power supply sistem : 9 Vdc. Pastikan lampu indikator (merah) nyala dan lampu modul
bluetooth (biru/merah) berkedip
4. Pastikan aplikasi “Bluetooth SPP Pro” sudah Anda instal, jika belum instal dulu aplikasinya Anda
bisa copy filenya di CD atau Anda juga bisa instal lewat Play store.

7. Membuat Kipas Pemadam Api Otomatis Menggunakan Arduino dan Sensor Api
Kebakaran merupakan bencana yang sering dikarenakan kelalaian manusia. Kebakaran dapat dicegah
dengan memadamkan api sebelum terlanjur meluas. cara kerja dari kipas ini yakni kipas otomatis
menyala saat sensor mendeteksi adanya api. Juga disertai dengan buzzer dan LCD sebagai
pelengkapnya .

Berikut ini komponen dan software yang harus dipersiapkan :

1) 1 buah Arduino (bisa UNO, MINI, NANO, MEGA, dll, bisa didapat Di Sini)
2) 1 buah LCD 16×2 (Bisa didapat Di Sini)
3) 1 set Pin Header Male untuk LCD (Opsional, Bisa didapat Di Sini)
4) 1 buah Potensio 10K (Bisa didapat Di Sini)
5) 1 buah Buzzer (Bisa didapat Di Sini)
6) 1 buah Sensor Api/Flame Sensor (Bisa didapat Di Sini)
7) Breadboard/Projectboard jika diperlukan (Bisa diperoleh Di Sini)
8) Kabel jumper secukupnya (Bisa diperoleh Di Sini)
9) Library LiquidCrystal.h (Jika belum punya, bisa download Di Sini)

Keterangan Rangkaian :
Bisa Menggunakan Segala Jenis Arduino (UNO, NANO, MEGA, MINI, dll), karena penomoran pinnya
sama. Tinggal cocokkan Saja nomor Pin-Pin nya.
Kaki RS LCD ===> pin 2 Arduino
Kaki E LCD ===> pin 3 Arduino
Kaki D4 LCD ===> pin 4 Arduino
Kaki D5 LCD ===> pin 5 Arduino
Kaki D6 LCD ===> pin 6 Arduino
Kaki D7 LCD ===> pin 7 Arduino
Kaki RW LCD ===> GND (Ground)
Kaki VO LCD ===> Output Potensio
Kaki DO (Digital Output) Sensor ===> pin 8 Arduino
Salah satu kaki Buzzer ===> pin 9 Arduino
Kaki push Buzzer yang lain ===> pin 5V
Pin IN3 pada driver motor L298N ===> pin 10 Arduino
Pin IN4 pada driver motor L298N ===> pin 11 Arduino
Pin OUT3 pada driver motor L298N ===> salah satu pin motor/kipas
Pin OUT4 pada driver motor L298N ===> pin motor/kipas yang lain
Pin 12V pada driver L298N ===> sumber power (di sini menggunakan baterai 9V)
Pin Ground (GND) pada driver motor L298N ===> terhubung ke ground Arduino
Kaki vcc pada masing-masing komponen hubungkan ke sumber power positif 5v (bisa dari 5v Arduino)
Kaki gnd/ground pada masing-masing komponen hubungkan ke sumber negatif power (dihubungkan ke
pin gnd Arduino)

Script Program
// ---------- Project Kipas Pemadam Api Otomatis ------------ //
// ------------ Berbasis Arduino dan Sensor Api ------------- //
// ------------- Dibuat oleh :Tim Robotik -------------- //

// memanggil library lcd


#include <LiquidCrystal.h>

// inialisasi pin lcd


LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

// inialisasi pin sensor dan buzzer


const int pinApi = 8;
const int pinBuzzer = 9;

// inialisasi pin motor/kipas


const int pinMotor1 = 10;
const int pinMotor2 = 11;

// inialisasi variabel data pembacaan sensor


int dataSensor;

// **************** PROGRAM DEFAULT/SETTING AWAL ************************** //


void setup()
{
// inialisasi status I/O masing-masing pin
pinMode(pinApi, INPUT);
pinMode(pinBuzzer, OUTPUT);

pinMode(pinMotor1, OUTPUT);
pinMode(pinMotor2, OUTPUT);

// inialisasi status awal buzzer dan motor


// mati dan berhenti di awal
digitalWrite(pinBuzzer, HIGH);
digitalWrite(pinMotor1, LOW);
digitalWrite(pinMotor2, LOW);

// inialisasi jumlah baris & kolom lcd


lcd.begin(16, 2);

// menulis penulisan awal pada lcd


lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kipasdam");
lcd.setCursor(0, 1);
lcd.print("Apiatis");
delay(1000);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ready);
delay(1000);
}

// ******************************* PROGRAM UTAMA ***************************** //


void loop()
{
// inialisasi data pembacaan sensor
dataSensor = digitalRead(pinApi);

// jika data sensor berupa logic LOW atau tidak ada api
if (dataSensor == LOW)
{
// kipas & buzzer mati
digitalWrite(pinBuzzer, HIGH);
digitalWrite(pinMotor1, LOW);
digitalWrite(pinMotor2, LOW);

// menulis pada lcd


lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kipasdam");
lcd.setCursor(0, 1);
lcd.print("MATI)");
delay(200);
}

// jika data sensor berupa logic HIGH atau ada api


else if (dataSensor == HIGH)
{
// buzzer dan kipas menyala
digitalWrite(pinBuzzer, LOW);
digitalWrite(pinMotor1, HIGH);
digitalWrite(pinMotor2, LOW);

// menulis pada lcd


lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kipasdam");
lcd.setCursor(0, 1);
lcd.print("HIDUP");
delay(200);
}
}
8. KONTROL GERBANG DENGAN ANDROID
Pengontrol gerbang menggunakan smartphone dengan bantuan bluetooth modul untuk
mengkoneksikannya dengan arduino sebagai mikrokontrolernya

Sumber : http://legionberbagi.blogspot.com/

Kompone yang butuhkan antara lain:

a. arduino uno r3
b. mini servo
c. led
d. bluetooth hc06 atau 05
e. sterofoam atau gabus atau apa aja yang bisa dibuat rumah rumahan (kalau perlu)
f. lcd 2 x16
g. potensiometer
h. resistor 100 ohm
i. protoboard, atau projectboard
j. sensor ultrasonic
k. jumper seperlunya
l. dan sebuah smartphone android

nah kita perlu juga menggunakan library servonya, kalau belum punya bisa ambil disini
penghubungan pinnya sebagai berikut:
LCD ke ARDUINO
VSS = GND
VDD = 5V
V0 = POTENSIO (KAKI TENGAH POTENSIO)
RS = 12
E = 11
RW = GND
D4 = 5
D5 = 4
D6 = 3
D7 = 2

SENSOR ULTRASONIC KE ARDUINO


TRIG = 7
ECHO = 6

BUZZER = 8
LED BIRU = A4
LED HIJAU = A3

SERVO = 9

PROGRAM

#define echoPin 6
#define trigPin 7
#define ledbiru A4
#define ledhijau A3
int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance
int state = 0;
int flag = 0;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <Servo.h>
Servo myservo;

void setup() {
pinMode(8, OUTPUT);
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledbiru, OUTPUT);
pinMode(ledhijau, OUTPUT);

digitalWrite(ledhijau, LOW);
lcd.begin(16, 2);
myservo.attach(9);
lcd.setCursor(0,1);
lcd.print("--PORTAL TUTUP--");
digitalWrite(ledhijau,LOW);
}

void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);

digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration/58.2;
Serial.println(distance);
delay(100);

if (distance<=10){

lcd.setCursor(0,0);
lcd.print("----ADA TAMU----");
digitalWrite(ledbiru,HIGH);

}
if (distance<=10){
digitalWrite(8,HIGH);
delay(100);
digitalWrite(8,LOW);
delay(300);
}
else{
digitalWrite(ledbiru,LOW);
digitalWrite(8,LOW);
lcd.setCursor(0,0);
lcd.print("-TIDAK ADA TAMU-");
}
if (Serial.available() > 0){
state = Serial.read();
flag=0;
}
if (state=='1'){
if (flag ==0){
digitalWrite(ledhijau,HIGH);
lcd.setCursor(0,1);
lcd.print("-PORTAL TERBUKA-");
myservo.write(180);
delay(3000);
myservo.write(90);
lcd.setCursor(0,1);
lcd.print("--PORTAL TUTUP--");
digitalWrite(ledhijau,LOW);
flag = 1;
}

}
}
9. system parkir cerdas

Skema rangkaian :

Script program :
/*ParkingL02.pde
Arduining.com 08 JUL 2012
Code used in the production of the Youtube material.
*/

#include <Servo.h>
Servo myservo; // create servo object to control a servo

#define ServoM 12 //Connected to the servo motor.


#define Bright 11 //servo library disable PWM on pins 9 and 10.
#define Exit 9 //Pin connected to the EXIT button.
#define In 8 //Pin connected to the IN button.

#define BarLow 177 //Low position of the barrier.


#define BarUp 95 //Up position of the barrier.
#define CAPACITY 8 //Capacity of the parking lot.
#define INTEN 80 //Display intensity %

//Pins conections to segments (cathodes).


#define segA 0
#define segB 1
#define segC 2
#define segD 3
#define segE 4
#define segF 5
#define segG 6

//Array with the segments to represent the decimal numbers (0-9).


byte segments[10] = {
// pgfedcba <--- segments
B00111111, // number 0
B00000110, // number 1
B01011011, // number 2
B01001111, // number 3
B01100110, // number 4
B01101101, // number 5
B01111101, // number 6
B00000111, // number 7
B01111111, // number 8
B01101111 // number 9
};

void setup(){
myservo.attach(ServoM); // attaches the servo.

pinMode(Exit, INPUT); // set "EXIT" button pin to input


pinMode(In, INPUT); // set "IN" button pin to input
digitalWrite(Exit, HIGH); // Connect Pull-Up resistor.
digitalWrite(In, HIGH); // Connect Pull-Up resistor.
pinMode(segA,OUTPUT);
pinMode(segB,OUTPUT);
pinMode(segC,OUTPUT);
pinMode(segD,OUTPUT);
pinMode(segE,OUTPUT);
pinMode(segF,OUTPUT);
pinMode(segG,OUTPUT);
pinMode(Bright,OUTPUT);
analogWrite(Bright,255*INTEN/100);
myservo.write(BarLow); //Barrier in the low position
// delay(1000);
}

int Available= 9; // Number of places available.

//================================================================
void loop(){
Display(Available);
if(digitalRead(In)==0)
{
if(Available != 0){
Available--;
myservo.write(BarUp);
delay(3000);
myservo.write(BarLow);
}
}
if(digitalRead(Exit)==0)
{
if(Available != CAPACITY){
Available++;
myservo.write(BarUp);
delay(3000);
myservo.write(BarLow);
}
}
}

/*-------------------------------------------------------------------
Put the segments according to the number.
--------------------------------------------------------------------*/
void Display(int number){
byte segs = ~segments[number]; //"~" is used for commom anode.

digitalWrite(segA, bitRead(segs, 0) );
digitalWrite(segB, bitRead(segs, 1) );
digitalWrite(segC, bitRead(segs, 2) );
digitalWrite(segD, bitRead(segs, 3) );
digitalWrite(segE, bitRead(segs, 4) );
digitalWrite(segF, bitRead(segs, 5) );
digitalWrite(segG, bitRead(segs, 6) );
}
10. traffic light berdasarkan kerapatan kendaraan

Pengerjaan proyek dibagi menjadi tiga langkah

1) Jika ada lalu lintas di semua sinyal, maka sistem akan bekerja secara normal dengan mengendalikan
sinyal satu per satu.
2) Jika tidak ada lalu lintas di dekat sinyal, maka sistem akan melewati sinyal ini dan akan beralih ke
yang berikutnya. Misalnya, jika tidak ada kendaraan pada sinyal 2, 3 dan saat ini sistem
memungkinkan kendaraan pada sinyal 1 untuk lewat. Kemudian setelah sinyal 1, sistem akan beralih
ke sinyal 4 melewatkan sinyal 2 dan 3.
3) Jika tidak ada lalu lintas sama sekali dari 4 sinyal, sistem akan berhenti pada sinyal saat ini dan hanya
akan bergerak pada sinyal berikutnya jika akan ada lalu lintas di sinyal lain

Cara kerja :
Empat sensor ultrasonik dihubungkan dengan Arduino. Arduino akan membaca dari sensor-sensor ini dan
akan menghitung jarak. Sensor ini dapat mengukur dari 2 hingga 400 cm.

Sensor ultrasonik pada dasarnya memancarkan gelombang ultrasonik dari pelatuk dan diterima oleh gema
setelah membelokkan objek. Untuk menghasilkan gelombang, kita harus mengatur pemicu pada tinggi
untuk 10 kita yang akan mengirimkan ledakan sonik 8 siklus pada 40 KHz yang akan mengenai objek dan
setelah memukul objek, gelombang akan diterima oleh gema. Gema kemudian akan memberi tahu kami
waktu gelombang telah berjalan di dalam kita (mikro detik). Kami kemudian akan mengubah waktu ini
menjadi jarak yang ditempuh dengan menggunakan S = v * t.

LED terhubung ke Arduino melalui resistor 220 ohm. Perlunya menggunakan resistor dengan LED.
Resistor membatasi arus yang mengalir melalui LED. Jika Anda tidak akan menggunakannya maka LED
akan segera terbakar. Anda dapat menggunakan nilai resistor dari 100 ohm hingga 10k ohm dengan LED.
Semakin besar nilai LED, semakin sedikit arus yang akan berlalu.

Komponen yang dibutuhkan :


1) Arduino Mega 2560
2) 4 X HC-SR04 ultrasonic sensors
3) 4 X Red LEDs
4) 4 X Green LEDs
5) 4 X Yellow LEDs
6) 12 X 220 ohm resistors
7) Jumper cables
8) Breadboards
Script Program :
#include<TimerOne.h>
int signal1[ ] = {23, 25, 27};
int signal2[ ] = {46, 48, 50};
int signal3[ ] = {13, 12, 11};
int signal4[ ] = {10, 9, 8};
int redDelay = 5000;
int yellowDelay = 2000;
volatile int triggerpin1 = 31;
volatile int echopin1 = 29;
volatile int triggerpin2 = 44;
volatile int echopin2 = 42;
volatile int triggerpin3 = 7;
volatile int echopin3 = 6;
volatile int triggerpin4 = 5;
volatile int echopin4 = 4;
volatile long time; // Variable for storing the time traveled
volatile int S1, S2, S3, S4; // Variables for storing the distance covered
int t = 5; // distance under which it will look for vehicles.
void setup(){
Serial.begin(115200);
Timer1.initialize(100000); //Begin using the timer. This function must be called first. "microseconds" is
the period of time the timer takes.
Timer1.attachInterrupt(softInterr); //Run a function each time the timer period finishes.
// Declaring LED pins as output
for(int i=0; i<3; i++){
pinMode(signal1[i], OUTPUT);
pinMode(signal2[i], OUTPUT);
pinMode(signal3[i], OUTPUT);
pinMode(signal4[i], OUTPUT);
}
// Declaring ultrasonic sensor pins as output
pinMode(triggerpin1, OUTPUT);
pinMode(echopin1, INPUT);
pinMode(triggerpin2, OUTPUT);
pinMode(echopin2, INPUT);
pinMode(triggerpin3, OUTPUT);
pinMode(echopin3, INPUT);
pinMode(triggerpin4, OUTPUT);
pinMode(echopin4, INPUT);
}
void loop()
{
// If there are vehicles at signal 1
if(S1<t)
{
signal1Function();
}
// If there are vehicles at signal 2
if(S2<t)
{
signal2Function();
}
// If there are vehicles at signal 3
if(S3<t)
{
signal3Function();
}
// If there are vehicles at signal 4
if(S4<t)
{
signal4Function();
}
}
// This is interrupt function and it will run each time the timer period finishes. The timer period is set at
100 milli seconds.
void softInterr()
{
// Reading from first ultrasonic sensor
digitalWrite(triggerpin1, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin1, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin1, LOW);
time = pulseIn(echopin1, HIGH);
S1= time*0.034/2;
// Reading from second ultrasonic sensor
digitalWrite(triggerpin2, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin2, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin2, LOW);
time = pulseIn(echopin2, HIGH);
S2= time*0.034/2;
// Reading from third ultrasonic sensor
digitalWrite(triggerpin3, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin3, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin3, LOW);
time = pulseIn(echopin3, HIGH);
S3= time*0.034/2;
// Reading from fourth ultrasonic sensor
digitalWrite(triggerpin4, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin4, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin4, LOW);
time = pulseIn(echopin4, HIGH);
S4= time*0.034/2;
// Print distance values on serial monitor for debugging
Serial.print("S1: ");
Serial.print(S1);
Serial.print(" S2: ");
Serial.print(S2);
Serial.print(" S3: ");
Serial.print(S3);
Serial.print(" S4: ");
Serial.println(S4);
}
void signal1Function()
{
Serial.println("1");
low();
// Make RED LED LOW and make Green HIGH for 5 seconds
digitalWrite(signal1[0], LOW);
digitalWrite(signal1[2], HIGH);
delay(redDelay);
// if there are vehicels at other signals
if(S2<t || S3<t || S4<t)
{
// Make Green LED LOW and make yellow LED HIGH for 2 seconds
digitalWrite(signal1[2], LOW);
digitalWrite(signal1[1], HIGH);
delay(yellowDelay);
}
}
void signal2Function()
{
Serial.println("2");
low();
digitalWrite(signal2[0], LOW);
digitalWrite(signal2[2], HIGH);
delay(redDelay);

if(S1<t || S3<t || S4<t)


{
digitalWrite(signal2[2], LOW);
digitalWrite(signal2[1], HIGH);
delay(yellowDelay);
}
}
void signal3Function()
{
Serial.println("3");
low();
digitalWrite(signal3[0], LOW);
digitalWrite(signal3[2], HIGH);
delay(redDelay);
if(S1<t || S2<t || S4<t)
{
digitalWrite(signal3[2], LOW);
digitalWrite(signal3[1], HIGH);
delay(yellowDelay);
}
}
void signal4Function()
{
Serial.println("4");
low();
digitalWrite(signal4[0], LOW);
digitalWrite(signal4[2], HIGH);
delay(redDelay);
if(S1<t || S2<t || S3<t)
{
digitalWrite(signal4[2], LOW);
digitalWrite(signal4[1], HIGH);
delay(yellowDelay);
}
}
// Function to make all LED's LOW except RED one's.
void low()
{
for(int i=1; i<3; i++)
{
digitalWrite(signal1[i], LOW);
digitalWrite(signal2[i], LOW);
digitalWrite(signal3[i], LOW);
digitalWrite(signal4[i], LOW);
}
for(int i=0; i<1; i++)
{
digitalWrite(signal1[i], HIGH);
digitalWrite(signal2[i], HIGH);
digitalWrite(signal3[i], HIGH);
digitalWrite(signal4[i], HIGH);
}
}

Scrip program 2 :

Kita akan memperbarui sistem ini dengan ketika kendaraan mencoba untuk bergerak bahkan
selama sinyal merah itu akan menyalakan alarm untuk memperingatkan pengemudi kendaraan
dan akan mengirimkan peringatan ke sipir lalu lintas dengan gambar.

#include<TimerOne.h>

int signal1[] = {23, 25, 27};


int signal2[] = {46, 48, 50};
int signal3[] = {13, 12, 11};
int signal4[] = {10, 9, 8};

int redDelay = 5000;


int yellowDelay = 2000;

volatile int triggerpin1 = 31;


volatile int echopin1 = 29;
volatile int triggerpin2 = 44;
volatile int echopin2 = 42;
volatile int triggerpin3 = 7;
volatile int echopin3 = 6;
volatile int triggerpin4 = 5;
volatile int echopin4 = 4;

volatile long time; // Variable for storing the time traveled


volatile int S1, S2, S3, S4; // Variables for storing the distance covered

int t = 5; // distance under which it will look for vehicles.

void setup(){
Serial.begin(115200);
Timer1.initialize(100000); //Begin using the timer. This function must be called first. "microseconds" is
the period of time the timer takes.
Timer1.attachInterrupt(softInterr); //Run a function each time the timer period finishes.

// Declaring LED pins as output


for(int i=0; i<3; i++){
pinMode(signal1[i], OUTPUT);
pinMode(signal2[i], OUTPUT);
pinMode(signal3[i], OUTPUT);
pinMode(signal4[i], OUTPUT);
}

// Declaring ultrasonic sensor pins as output


pinMode(triggerpin1, OUTPUT);
pinMode(echopin1, INPUT);
pinMode(triggerpin2, OUTPUT);
pinMode(echopin2, INPUT);
pinMode(triggerpin3, OUTPUT);
pinMode(echopin3, INPUT);
pinMode(triggerpin4, OUTPUT);
pinMode(echopin4, INPUT);
}

void loop()
{
// If there are vehicles at signal 1
if(S1<t)
{
signal1Function();
}

// If there are vehicles at signal 2


if(S2<t)
{
signal2Function();
}

// If there are vehicles at signal 3


if(S3<t)
{
signal3Function();
}

// If there are vehicles at signal 4


if(S4<t)
{
signal4Function();
}
}

// This is interrupt function and it will run each time the timer period finishes. The timer period is set at
100 milli seconds.
void softInterr()
{
// Reading from first ultrasonic sensor
digitalWrite(triggerpin1, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin1, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin1, LOW);
time = pulseIn(echopin1, HIGH);
S1= time*0.034/2;

// Reading from second ultrasonic sensor


digitalWrite(triggerpin2, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin2, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin2, LOW);
time = pulseIn(echopin2, HIGH);
S2= time*0.034/2;

// Reading from third ultrasonic sensor


digitalWrite(triggerpin3, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin3, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin3, LOW);
time = pulseIn(echopin3, HIGH);
S3= time*0.034/2;

// Reading from fourth ultrasonic sensor


digitalWrite(triggerpin4, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin4, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin4, LOW);
time = pulseIn(echopin4, HIGH);
S4= time*0.034/2;

// Print distance values on serial monitor for debugging


Serial.print("S1: ");
Serial.print(S1);
Serial.print(" S2: ");
Serial.print(S2);
Serial.print(" S3: ");
Serial.print(S3);
Serial.print(" S4: ");
Serial.println(S4);
}

void signal1Function()
{
Serial.println("1");
low();
// Make RED LED LOW and make Green HIGH for 5 seconds
digitalWrite(signal1[0], LOW);
digitalWrite(signal1[2], HIGH);
delay(redDelay);

// if there are vehicels at other signals


if(S2<t || S3<t || S4<t)
{
// Make Green LED LOW and make yellow LED HIGH for 2 seconds
digitalWrite(signal1[2], LOW);
digitalWrite(signal1[1], HIGH);
delay(yellowDelay);
}
}

void signal2Function()
{
Serial.println("2");
low();
digitalWrite(signal2[0], LOW);
digitalWrite(signal2[2], HIGH);
delay(redDelay);

if(S1<t || S3<t || S4<t)


{
digitalWrite(signal2[2], LOW);
digitalWrite(signal2[1], HIGH);
delay(yellowDelay);
}
}

void signal3Function()
{
Serial.println("3");
low();
digitalWrite(signal3[0], LOW);
digitalWrite(signal3[2], HIGH);
delay(redDelay);

if(S1<t || S2<t || S4<t)


{
digitalWrite(signal3[2], LOW);
digitalWrite(signal3[1], HIGH);
delay(yellowDelay);
}
}

void signal4Function()
{
Serial.println("4");
low();
digitalWrite(signal4[0], LOW);
digitalWrite(signal4[2], HIGH);
delay(redDelay);

if(S1<t || S2<t || S3<t)


{
digitalWrite(signal4[2], LOW);
digitalWrite(signal4[1], HIGH);
delay(yellowDelay);
}
}

// Function to make all LED's LOW except RED one's.


void low()
{
for(int i=1; i<3; i++)
{
digitalWrite(signal1[i], LOW);
digitalWrite(signal2[i], LOW);
digitalWrite(signal3[i], LOW);
digitalWrite(signal4[i], LOW);
}
for(int i=0; i<1; i++)
{
digitalWrite(signal1[i], HIGH);
digitalWrite(signal2[i], HIGH);
digitalWrite(signal3[i], HIGH);
digitalWrite(signal4[i], HIGH);
}
}

Sistem Kontrol Sinyal Lalu Lintas Berbasis Jalan 4 Arah Menggunakan Sensor Arduino dan IR

Komponen yang dibutuhkan :

1) Arduino Nano
2) IR Transmitter Sensor
3) IR Receiver Sensor
4) 10k Resistor
5) 220ohm resistor
6) 100ohm resistor
7) Led (Red, Green, Yellow).
8) Veroboard
9) Some Jumper wire
11. Pengisian Lampu dengan Tenaga surya

Anda mungkin juga menyukai