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*/

};

}

About these ads

17 Tanggapan to “Tutorial simulasi traffic light”

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

    waduh… Sungguh berat dan membuat kepala saya pusing….

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

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

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

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

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

      ok. monggo… insya allah kita carikan solusinya. thx

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

    menarik sekali..

  4. nato Mei 23, 2010 at 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 at 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 at 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 at 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 at 1:16 pm #

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

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

    Menarik… tapi bisa kasih link softwarenya tidak…. maklum newbi :)

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

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

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

      rangkainnya ya itu.. kelihatan di gambarkan? hihi

  10. Irfan Suhaeman Desember 5, 2010 at 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 at 10:29 pm #

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

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

    kalau pakai atmega 16 bisa ndak..???

Berikan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

%d blogger menyukai ini: