project 4 lampu lalu lintas dengan safety cross

10
Project 3 – Lampu lalu lintas dengan Safety cross Lampu lalu lintas dengan tombol penyebrangan semakin banyak digunakan dalam lalu lintas dengan penduduk yang padat seperti Jepang dan Singapura. Pada dasarnya algoritma yang digunakan dalam desain lampu lalu lintas ini sama dengan lampu lalu lintas klasik yang pernah didesain pada proyek sebelumnya. Jika proyek sebelumnya telah dipahami dengan baik, maka desain pada proyek ini akan sangat gampang dan menyenangkan. Disini ditambahkan 2 LED untuk penyebrang(pedestrian) dan 1 tombol/ switch untuk menyeberang. Bahan Setup Sketch 2 - 5mm LED 2v 35mA 1 - Tactile switch/sejenisnya 1 - 10KΩ Pull down resistor* 2 - Resistor 100 ohm - Selanjutnya, listing bahan yang dituliskan hanyalah tambahan dari project sebelumnya.

Upload: imade-wiratha-nungrat

Post on 05-Aug-2015

101 views

Category:

Documents


10 download

DESCRIPTION

Arduino, Advance Traffic lights, Lampu lalu lintas Arduino

TRANSCRIPT

Page 1: Project 4 Lampu Lalu lintas dengan safety cross

Project 3 – Lampu lalu lintas dengan Safety cross

Lampu lalu lintas dengan tombol penyebrangan semakin banyak digunakan dalam lalu lintas dengan penduduk yang padat seperti Jepang dan Singapura. Pada dasarnya algoritma yang digunakan dalam desain lampu lalu lintas ini sama dengan lampu lalu lintas klasik yang pernah didesain pada proyek sebelumnya. Jika proyek sebelumnya telah dipahami dengan baik, maka desain pada proyek ini akan sangat gampang dan menyenangkan. Disini ditambahkan 2 LED untuk penyebrang(pedestrian) dan 1 tombol/ switch untuk menyeberang.

Bahan

Setup

Sketch

2 - 5mm LED 2v 35mA1 - Tactile switch/sejenisnya1 - 10KΩ Pull down resistor*2 - Resistor 100 ohm

- Selanjutnya, listing bahan yang dituliskan hanyalah tambahan dari project sebelumnya.

Gambar 4.1 Rangkaian dalam breadboard

Listing sketch yang telah didesain ini masih mungkin untuk dioptimasi agar menghemat ruang memory microcontroller dan mempercepat eksekusi.

//Project 3 - Lampu lalu lintas dengan safety cross

//variabelint mobMerah = 0;int mobKuning = 1;int mobHijau = 2;

Page 2: Project 4 Lampu Lalu lintas dengan safety cross

int pedMerah = 4;int pedPutih = 5;int butPed = 3;int tSebrang = 15000;

Sketch overview

unsigned long waktuTunggu;

void gantiLampu() digitalWrite(mobHijau, LOW); digitalWrite(mobKuning, HIGH); delay(2000);

digitalWrite(mobKuning, LOW); digitalWrite(mobMerah, HIGH); delay(2000); digitalWrite(pedMerah, LOW); digitalWrite(pedPutih, HIGH); delay(tSebrang); for(int x=0; x<10; x++)

digitalWrite(pedPutih, HIGH); delay(250); digitalWrite(pedPutih, LOW); delay(250);

digitalWrite(pedMerah, HIGH); delay(100); digitalWrite(mobKuning, HIGH); digitalWrite(mobMerah,LOW); delay(2000); digitalWrite(mobHijau, HIGH); digitalWrite(mobKuning, LOW); waktuTunggu = millis();

void setup() pinMode(mobMerah, OUTPUT); pinMode(mobKuning, OUTPUT); pinMode(mobHijau, OUTPUT); pinMode(pedMerah, OUTPUT); pinMode(pedPutih, OUTPUT); pinMode(butPed, INPUT); digitalWrite(mobHijau, HIGH); digitalWrite(pedMerah, HIGH);

void loop() boolean state = digitalRead(butPed); if (state == HIGH && (millis() - waktuTunggu) > 5000)

gantiLampu();

Page 3: Project 4 Lampu Lalu lintas dengan safety cross

Sketch diatas, terlihat bahwa terdapat fungsi tambahan gantiLampu. Fungsi ini bisa diibaratkan sebuah blok program atau unit program yang independen, agar program terlihat sederhana. Jika fungsi gantiLampu dianggap seperti suatu unit, maka program

Akan terlihat sangat sederhana dan hampir seperti project sebelumnya, yang mengandung variable, setup dan loop. Fungsi gantiLampu mengandung perintah untuk mengganti state jika switch ditekan dan waktu lampu hijau telah menyala setidaknya 5 detik, if(state == HIGH && (millis() – waktuTunggu) > 5000. Jika keadan ini tidak terpenuhi maka eksekusi program hanya akan sampai pada bagian setup, yaitu lampu hijau menyala, lampu penyeberangan merah. Sedangkan jika terenuhi, maka fungsi gantiLampu akan dipanggil dan dieksekusi secara bertahap, lalu kembali kekeadaan sebelumnya.

Pada pendefinisian variable, variable waktuTunggu di set bertipe unsigned long, hal ini dilakukan karena waktuTunggu merupakan waktu diam, jika tombol tidak ditekan sama sekali. Jadi variable ini akan terus berhitung dari 0 sampai 232 bit yaitu 4,294,967,295 ms, atau sekitar 49 hari. Jadi secara logika tidak mungkin jika tidak ada orang yang akan menyeberang sama sekali selama 49 hari, sehingga counter akan kehabisan alokasi memori atau overflow. Sayangnya penggunaan jenis variable bertipe seperti long, double, float dsb menggunakan space memori yang besar, sekitar 2 hingga 4 byte yang memboroskan memori untuk ukuran microcontroller seperti Atmega 328P yang hanya 2000 byte. Jadi disiplin dalam menggunakan tipe data atau variable akan sangat berimbas pada kecepatan eksekusi dan penghematan memori. Untuk lebih jelasnya mengenai daftar tipe data dan kebutuhan memori, dapat dilihat pada buku pemrograman bahasa C.

Selenjutnya pada potongan sketch :

pinMode(butPed, INPUT);

potongan diatas menjelaskan kepada board Duino bahwa variable butPed yang berlokasi di pin 3 digunakan sebagai input digital berupa level tegangan 0 atau LOW dan 5 V atau HIGH.

Page 4: Project 4 Lampu Lalu lintas dengan safety cross

Kemudian

boolean state = digitalRead(butPed);

Bagian ini menjelaskan bahwa hasil pembacaan level tegangan pada butPed (pin 3) digitalRead disimpan pada variable temp state yang bertipe Boolean. Tipe data Boolean adalah tipe data yang nilainya hanya ada dua yaitu 0 dan 1, LOW dan HIGH, ON dan OFF atau 0 dan 5 V. Sebenarnya variable state bisa bertipe integer int karena jumlah byte yang digunakan sama sebesar 1 byte atau 8 bit, hanya saja program terlihat lebih bersih menggunakan tipe data yang tepat.

Logika dari lampu lalu lintas otomatis ini adalah saat tidak ada penyeberang jalan, maka lampu hijau untuk kendaraan terus menyala sedangkan lampu merah untuk penyeberang. Saat ada penyeberang jalan, maka tomblol penyebrangan ditekan, lalu lampu kuning untuk kendaraan menyala, menandakan pengemudi untuk berhati-hati dan menurunkan kecepatan. Sesaat kemudian,lampu merah untuk kendaraan dan lampu hijau untuk penyeberang, saat durasi penyeberangan telah usai,maka lampu hijau untuk penyeberang akan berkedip menandakan si penyeberang untuk segera melintas, setelah itu lampu kendaraan kembali hijau dan penyeberangan merah. Algoritma ini ditulis dalam suatu fungsi independen gantiLampu() yang

Page 5: Project 4 Lampu Lalu lintas dengan safety cross

isinya bisa dilihat pada sketch diatas.

Untuk menghindari penekanan tombol penyeberangan secara terus menerus berakibat kemacetan, maka tombol penyeberangan hanya bisa ditekan setelah durasi minimum tertentu setelah penyeberangan sebelumnya. Dalam hal ini 5 detik. Potongan sketch nya adalah:

if (state == HIGH && (millis() - waktuTunggu) > 5000)

gantiLampu();

Terlihat bahwa ada fungsi baru yang digunakan yaitu “if”. Fungsi ini memiliki satu parameter, jika benar maka lakukan sesuatu, jika salah lakukan sesuatu lainnya. Pada contoh ini fingsi if memberi kondisi agar tombol tidak aktif untuk jumlah minimum waktu 5 detik.

Yang dilakukan pada potongan sketch diatas adalah jika kedua kondisi state == HIGH dan millis() – waktuTunggu > 5000, maka fungsi gantuLampu akan

dipanggil. Jika tombol ditekan maka butPed akan bernilai HIGH, lalu state akan bernilai 1 atau HIGH, kemudian syarat kedua millis() – waktuTunggu > 5000. Millis adalah jumlah waktu yang direkam saat board Duino telah menjalankan program, sementara waktuTunggu akan berjalan saat gantiLampu terakhir telah usai, sehingga dengan mengurangi millis dan waktuTunggu, akan didapatkan durasi setelah penyeberang terakhir telahh lewat. Jika dipenuhi minimal 5 detik maka tombol penyeberangan dapat digunakan kembali.

Operator logika yang digunakan adalah (==) dalam state == HIGH. Operator (==) artinya sama dengan, jika (=) artinya mendefinisikan suatu variable. Operator logika lainnya ada:

&& - artinya DAN || - artinya ATAU ! - artunya NOT

Operator logika ini digunakan untuk memeriksa 2 pernyataan. Berikut table kebenaran dari operator logika diatas:

Page 6: Project 4 Lampu Lalu lintas dengan safety cross

Hardware Overview

Tabel 4.1 Tabel KebenaranFung

sipernyataanx y

DAN

Benar BenarBenar SalahSalah BenarSalah Salah

ATAU

Benar BenarBenar SalahSalah BenarSalah Salah

TIDAKBenarSalah

Pada operator TIDAK atau ! maka pernyataan yang diolah hanya ada 1. Contoh penggunaan dari operator logika ini misalnya:

If (x==2 && y == 6) …………

Jika x sama dengan 2 dan y sama dengan 6, maka program dalam

kurung kurawal akan dieksekusi, selain kondisi ini maka program tidak akan dieksekusi, seperti table kebenaran diatas. Begitu juga untuk operator ATAU dan TIDAK. Pada fungsi if juga dimungkinkan menggunakan lebih dari 2 pernyataan logika, misalnya

If (x==1 && (y == 2 || z == 3)) .………….

Dalam hal ini,pernyataan yang berada didalam kurung akan dieksekusi terlebih (y dan z) dahulu dan dijadika satu pernyataan, kemudian dibandingkan lagi dengan pernyataan diluar tanda kurung. Sehingga hasilnya akan tetap membandingkan 2 penyataan.

Pada project ini hardware baru yang digunakan adalah tactile switch, konsep baru yang diperkenalkan adalah tentang logika digital, pull up dan pull down. Tactile switch adalah sebuah switch dengan empat kaki yang biasa digunkan sebagai button dalam berbagai rangkaian elektronika. Memiliki empat kaki, sehingga 2 rangkaian terpisah dapat dihubungkan.

Gambar 4.2 Tactile Switch dan simbolnya.

Rangkaian logika adalah rangkaian listrik yang didesain agar outputnya hanya level tegangan LOW dan HIGH, 0 atau 5 v dsb, 0 atau 1 dalam bilangan. Level LOW atau 0 biasanya direpresentasikan dengan tegangan 0, dan level HIGH atau 1 direresetasikan dengan tegangan yang lebih tinggi biasanya mendekati tegangan supply. Ketika switch dalam

Page 7: Project 4 Lampu Lalu lintas dengan safety cross

keadaan terbuka, maka tidak ada arus yang mengalir dan tidak ada tegangan yang terukur, sebaliknya jika switch dalam keadaan tertutup, maka ada arus yang mengalir dan ada tegangan yang bisa diukur. Terbuka dan tertutupnya switch ini juga bisa merepresentasikan logika 0 dan 1. Dalam

rangkaian digital, level tegangan HIGH misal 5 v diusahakan agar output tegangan benar-benar mendekati 5 v, dan saat level 0 atau LOW benar-benar mendekati level tegangan 0 v. jika keadaan ini tidak terpenuhi maka dalam rangkaian akan terjadi floating atau level logika yang tidak pasti. Floating ini biasa dikenal dengan gangguan noise, tentunya keadaan ini tidak diinginkan karena akan menggangu kerja system. Maka digunakanlah rangkaian pull up dan pull down resistor. Maksud dari rangkaian pull adalah memaksa atau memastikan agar level logika benar-benar 0 atau 1.

Rangkaian pull down resistor

Gambar 4.3 Rangkaian Pull Down resistor

Dari skematik diatas dapat dilihat rangkaian pull down sedang digunakan untuk pin 7 board Duino. Ketika switch ditekan maka arus dengan tegangan 5 v akan mengalir melalui resistor 100 ohm(resistor pull internal pin microcontroller) sehingga level HIGH dicapai, sedangkan saat switch dibuka maka pin 7 terhubung dengan ground melalui resistor 10k ohm. Jadi pada rangkaian diatas dipastikan bahwa saat switch terbuka,maka pin 7 akan bernilai 0 volt dan saat switch ditutup maka pin7 akan bernilai 5 volt. Jika rangkaian pull tidak digunakan maka pin 7 tidak tehubung dengan apapun saat switch dibuka sehingga level logika pin 7 tidak pasti dan menyebabkan error.

Rangkaian pull up resistor

Gambar 4.4 Rangkaian pull up resistor

Rangkaian diatas adalah pull up resistor, hanya dengan menukar posisi resistor dan switch. Saat switch dalam keadaan terbuka maka pin 7 dipastikan akan benilai HIGH atau 5 volt, sedangkan saat switch tertututp

Page 8: Project 4 Lampu Lalu lintas dengan safety cross

maka tegangan pin 7 adalah 0 volt. Cara kerja yang berkebalikan dengan pull down.Sebenarnya tanpa rangkaian pull up atau pull down system masih dapat berjalan selama level tegangan yang tampak masih berada pada batas aman atau noise margin. Biasanya untuk level logika 0, jangkauan tengangan yang masih diterjemahkan menjadi logika 0 antara 0- 2 volt dan level logika 1 berada pada jangkauan 4-5 volt.