Tutorial simulasi traffic light

17 Mar

lampu lalu lintasSekarang ini, banyak sekali kita jumpai lampu lalu lintas dilengkapi penghitung waktu mundur. Semakin hari, ternyata tanpa kita sadarikita  bergantung pada fasilitas penghitung waktu ini.

Sedikit menengok di belakang traffic light, ternyata cukup mudah membuat aplikasi ini. Kesempatan ini, kita akan belajar membuat simulasi traffic light menggunakan software simulasi proteus v7.1 dan codevisionAVR untuk membuat programnya menggunakan bahasa C. Di dalam proteus, sudah tersedia komponen untuk  traffic light.

Simulasi menggunakan AVR ATMEGA 32, 4 buah seven segment , dan  transistor BC 107.   Rangkaian dibagi menjadi 5 bagian yaitu counter1, counter2, traffic light1, traffic light2, dan AVR. Hubungan antar bagian dengan AVR seperti berikut

  • Counter 1 dihubungkan dengan PORTB.0 dan PORTB.1
  • Counter 2 dihubungkan dengan PORTA.6 dan PORTA.7
  • Traffict light 2
    • Merah  dihubungkan dengan  PORTA.3
    • Kuning dihubungkan dengan PORTA. 4
    • Hijau dihubungkan dengan PORTA. 5
    • Traffift light 1
      • Merah dihubungkan dengan PORTA.0
      • Kuning dihubungkan dengan PORTA.1
      • Hijau dihubungkan dengan PORTA.2

OKs.. sekarang, kita masuk ke programnya. Silakan dibuka codevisionAVR nya,kemudian masukkan listing dibawah ini. Untuk cara menggunakan codevisionAVR, silakan baca disini


#include<mega32.h> /*menggunakan ATmega32*/

#include<delay.h>

#define merah_lampu1 PORTA.0

#define kuning_lampu1 PORTA.1

#define hijau_lampu1 PORTA.2

#define merah_lampu2 PORTA.3

#define kuning_lampu2 PORTA.4

#define hijau_lampu2 PORTA.5

#define hijauCounter1 PORTA.6

#define merahCounter1 PORTA.7

#define hijauCounter2 PORTB.0

#define merahCounter2 PORTB.1

unsigned char a,b;

unsigned char segment(unsigned char input){

switch (input){

case 1:{return 0x06;break;}  /* 00000110 | tampilan karakter 1  pada 7segment*/

case 2:{return 0x5B;break;}  /* 01011011 | tampilan karakter 2  pada 7segment*/

case 3:{return 0x4F;break;}  /* 01001111 | tampilan karakter 3  pada 7segment*/

case 4:{return 0x66;break;}  /* 01100110 | tampilan karakter 4  pada 7segment*/

case 5:{return 0x6D;break;}  /* 01101101 | tampilan karakter 5  pada 7segment*/

case 6:{return 0x7D;break;}  /* 01111101 | tampilan karakter 6  pada 7segment*/

case 7:{return 0x07;break;}  /* 00000111 | tampilan karakter 7  pada 7segment*/

case 8:{return 0x7F;break;}  /* 01111111 | tampilan karakter 8  pada 7segment*/

case 9:{return 0x6F;break;}  /* 01101111 | tampilan karakter 9  pada 7segment*/

case 0:{return 0x3F;break;}  /* 00111111 | tampilan karakter 0  pada 7segment*/

}

}

/*sub program counter yang dieksekusi ketika lampu menyala hijau */

void delay_hijau(void){

merahCounter1=0 ;

hijauCounter2=0 ;

a=9;

b=0;

while(b!=10){

delay_ms(1000);

b++;

PORTC=segment(a) ;

hijauCounter1=1;

merahCounter2=1;

a–;

}

a=9;

}

/*sub program counter yang dieksekusi ketika lampu menyala merah */

void delay_merah(void){

hijauCounter1=0;

merahCounter1=0;

a=9;

b=0;

while(b!=0){

delay_ms(1000);

b++;

PORTC=segment(a);

merahCounter1=1;

hijauCounter2=1;

a–;

}

}

void main (void){

PORTA=0x00;

DDRA=0xFF;   /*port a sebagai output*/

PORTB=0x00;

DDRB=0x03;  /*00000011 , PORTB.0 dan PORTB.1 sebagai output*/

PORTC=0x00;

DDRC=0xFF; /*port c sebagai output*/

PORTD=0x00;

DDRD=0xFF;

while (1) {

merah_lampu1=0;/*lampu merah pada traffict 1 padam*/

merah_lampu2=1;/*lampu merah pada traffict 2 hidup*/

hijau_lampu1=1;/*lampu hijau pada traffict 1 hidup*/

delay_hijau(); /*memanggil subprogram delay_hijau*/

hijau_lampu1=0;/*lampu hijau pada traffict 1 padam*/

kuning_lampu1=1;/*lampu kuning pada traffict 1 hidup*/

delay_ms(1500);

kuning_lampu1=0; /*lampu kuning pada traffict 1 padam*/

merah_lampu1=1; /*lampu merah pada traffict 1 hidup*/

merah_lampu2=0; /*lampu merah pada traffict 2 padam*/

hijau_lampu2=1;  /*lampu hijau pada traffict 2 hidup*/

delay_merah();   /*memanggil subprogram delay_hijau*/

kuning_lampu2=1; /*lampu kuning pada traffict 2 hidup*/

hijau_lampu2=0;  /*lampu hijau pada traffict 2 padam*/

delay_ms(1500);

kuning_lampu2=0; /*lampu kuning pada traffict 2 padam*/

merah_lampu1=1;  /*lampu merah pada traffict 1 hidup*/

};

}

18 Tanggapan to “Tutorial simulasi traffic light”

  1. AvaLoN Maret 17, 2010 pada 3:05 pm #

    waduh… Sungguh berat dan membuat kepala saya pusing….

    • akbarulhuda Maret 17, 2010 pada 7:47 pm #

      biasa wae bos… jangan merendah,,, situ lebih hebat,,,

  2. YANATO Maret 31, 2010 pada 5:14 pm #

    tanks banget nh,menarik jg.dcoba ah..nar kalo da masalah tolong ks solusi y…heheheheee

    • akbarulhuda April 1, 2010 pada 3:44 am #

      ok. monggo… insya allah kita carikan solusinya. thx

  3. rera April 10, 2010 pada 6:37 pm #

    menarik sekali..

  4. nato Mei 23, 2010 pada 6:18 pm #

    Mas toldong ksh pencerahan,sy bingung penggunaan increment/decrement(++1 atau –1),misalnya aplikasinya buat bikin scoring board,.kalo bisa langsung aj coding(bahasaC) ky gmn hehe….dtunggu banget ya,.sukses sll y,maksh

  5. zoelkarnain Mei 27, 2010 pada 3:06 pm #

    saya pemula sekali untuk micro contrl saya bisa tapi pake bahasa asembler
    tolong mas akbar dirakit hingga jadi nantik saya ganti sertakan software downloadernya dan cara menggunakan soft ware downloadernya list programnya untuk traner saya bahan ngajar di smk

    trimakasih
    zulkarnain
    guru smkn 2 surabaya
    jl.simo gunung kramat timur 54A/surabaya
    08819534371

  6. zulkarnain Mei 27, 2010 pada 3:19 pm #

    saya tertarik untuk bahan ngajaar sya tapi belum pernah pake bahs C
    pak dibuat aja rangk jadi nantik saya ganti

  7. azizah Juni 22, 2010 pada 8:51 pm #

    mmm,,menarik sekali,,

    apakah anda bisa memberi tahu saya cara membuat simulasi ini dengan menggunakan software NI multisim 11???

    mohon bantuannya. .

    • akbarulhuda September 11, 2010 pada 1:16 pm #

      maaf, jujur saya tidak terbiasa menggunakan multisim.
      karena kelengkapan librarynya jauh dari proteus

  8. boocex Oktober 31, 2010 pada 3:42 pm #

    Menarik… tapi bisa kasih link softwarenya tidak…. maklum newbi 🙂

  9. nebak November 8, 2010 pada 10:42 pm #

    itu rangkaianya yang di pakai apa aja ya gan? mohon pencerahan…thanks

    • akbarulhuda Desember 6, 2010 pada 11:32 pm #

      rangkainnya ya itu.. kelihatan di gambarkan? hihi

  10. Irfan Suhaeman Desember 5, 2010 pada 6:08 pm #

    Wah,, menarik,,, sekali,,,
    mas,, tolong dong,, kasih pencerahannya dengan menggunakan bahasa assembley,,, (masih kasus yang sama spt diatas,,,)

  11. mansur Mei 15, 2012 pada 10:29 pm #

    Agan, apa ga ada langsung file downloadnya???kaya bentuk rar gitu??

  12. el aziz November 5, 2012 pada 10:48 am #

    kalau pakai atmega 16 bisa ndak..???

  13. ardhin Mei 14, 2016 pada 12:53 am #

    mas mau nanya untuk settingan atmega 32nya gimana ya

Tinggalkan komentar