Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2

Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2 - Hallo sahabat pawang bisnis, Pada sharing INFO TEKNIK berjudul Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2, saya telah menulis sebuah artikel. mudah-mudahan isi postingan dapat bermanfaat dan mudah anda pahami. okelah, ini dia isi contennya.

Artikel : Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2
Judul : Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2


Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2

Artikel Tugas Kuliah,
        Assalamu'alaikum Wr. Wb. Di postingan kali ini saya akan memberikan tutorial membuat rangkaian simulasi sensor kecepatan menggunakan dua buah sensor ultrasonik dengan kontroler ATmega 16. Pada simulasi ini sensor ultrasonik pertama (sensor jarak 1) digunakan untuk mendeteksi objek/benda yang melewatinya. Sedangkan sensor ultrasonik kedua (sensor jarak 2) yang diletakan sejauh 1 m dengan sensor jarak 1 dari arah datangnya objek yang melewati sensor jarak 1 menuju sensor jarak 2 dengan arah yang sejajar secara horizontal terhadap kedua sensor tersebut. Sehingga jika sensor jarak 2 sudah mendeteksi adanya objek setelah melewati sensor jarak 1, maka dapat diketahui nilai kecepatannya berdasarkan rumus v = s/t (kecepatan (v), jarak (s), waktu (t)).
        Untuk jarak antara kedua sensornya sebenarnya dapat diatur sesuai kebutuhan namun pada tutorial ini jaraknya sebesar 1 m. Semakin dekat jarak antar kedua sensornya maka kecepatan yang dideteksi semakin cepat, namun untuk kecepatan rata-rata jarak antara kedua sensornya semakin jauh semakin akurat hasilnya.
        Pada simulasi sensor kecepatan ini juga dapat diatur jarak pendeteksian objeknya. Hal tersebut untuk mencegah terdeteksinya suatu objek yang lebih jauh dari jarak objek yang ingin dihitung kecepatannya saat melewati kedua sensor jarak tersebut.
        Dalam tutorial Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2 ini menggunakan CV AVR untuk membuat programnya dalam bahasa C dan menggunakan ISIS Proteus untuk perancangan desain rangkaian dan simulasinya. Berikut langkah-langkah pembuatannya.
  1. Buka software CV AVR-nya kemudian klik New file → Project maka akan muncul tampilan pop up window CodeWizard AVR. Atur jenis mikrokontroler dan clock speed-nya di tab "Chip".
  2. Klik tab "Timers" kemudian atur pada Timer0 seperti pada gambar di bawah.
  3. Klik tab menu "Alphanumeric LCD" dan konfigurasikan seperti pada tampilan ini.
  4. Buka tab menu "ADC" untuk mengaktifkan ADC. pengaktifan ADC ini hanya digunakan untuk mengatur jarak maksimal antar sensor jarak 1 dan sensor jarak 2 dengan objek yang di deteksi dan simulasi pendeteksian jarak pada masing-masing kedua sensor jarak tersebut.
  5. Setelah itu klik menu File → Generate Save and Exit, kemudian simpan nama ketiga filenya (disarankan sama semua agar tidak bingung), maka akan tampil seperti ini.
  6. Selanjutnya lengkapi sourcecode programnya seperti berikut.
    1. /*****************************************************
    2. This program was produced by the
    3. CodeWizardAVR V2.05.3 Standard
    4. Automatic Program Generator
    5. © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    6. http://www.hpinfotech.com

    7. Project : Sensor Kecepatan Berbasis Ultrasonik
    8. Version : 1.3
    9. Date    : 19/12/2018
    10. Author  : Vidi Fitriansyah Hidarlan
    11. Company : Personal
    12. Comments: 


    13. Chip type               : ATmega16
    14. Program type            : Application
    15. AVR Core Clock frequency: 8,000000 MHz
    16. Memory model            : Small
    17. External RAM size       : 0
    18. Data Stack size         : 256
    19. *****************************************************/

    20. #include <mega16.h>
    21. #include <stdio.h>
    22. #include <stdlib.h>
    23. #include <delay.h>

    24. // Alphanumeric LCD functions
    25. #include <alcd.h>
    26.     long timer,count,hitung,detik,menit,indeks,waktu,objek_maks,baca_adc,sensor1,sensor2;
    27.     float jarak,kecepatan_mps,kecepatan_kph;
    28.     char data1[16];
    29.     char data2[16];
    30.     char data3[16];
    31.     char data4[16];
    32.     char data5[16];
    33.     char data6[16];
    34.     char data7[16];
    35. // Timer 0 overflow interrupt service routine
    36. interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    37. {
    38. // Reinitialize Timer 0 value
    39. TCNT0=0xB2;
    40. // Place your code here
    41.  timer++;
    42. }

    43. #define ADC_VREF_TYPE 0x00

    44. // Read the AD conversion result
    45. unsigned int read_adc(unsigned char adc_input)
    46. {
    47. ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    48. // Delay needed for the stabilization of the ADC input voltage
    49. delay_us(10);
    50. // Start the AD conversion
    51. ADCSRA|=0x40;
    52. // Wait for the AD conversion to complete
    53. while ((ADCSRA & 0x10)==0);
    54. ADCSRA|=0x10;
    55. return ADCW;
    56. }

    57. // Declare your global variables here
    58. void hitung_waktu()
    59. {
    60. if (timer>99)
    61.     { 
    62.         lcd_clear();
    63.         detik++;
    64.         timer=0;
    65.     }
    66. else if (detik>59)
    67.     {
    68.         menit++;
    69.         detik=0;
    70.     }
    71. }   
    72. void deteksi_sensor()
    73. {
    74.     if ((PINC.6==0)&&(PINC.7==1)&&(indeks==0))
    75.     {
    76.         TIMSK=0x00;
    77.         indeks=3;
    78.         lcd_clear();   
    79.     }
    80.     else if ((PINC.7==0)&&(indeks==3))
    81.     {
    82.         indeks=0;
    83.         TIMSK=0x00;
    84.         timer=0;
    85.         detik=0;
    86.         menit=0;
    87.         baca_adc=read_adc(7);
    88.         objek_maks=baca_adc*3/10;   
    89.     }
    90.     else if (PINC.5==0 && indeks==2)//reset timer
    91.     {   
    92.         indeks=0;//semua data direset
    93.         timer=0;
    94.         detik=0;
    95.         menit=0;   
    96.         lcd_clear();
    97.     }
    98.     else if ((sensor1>objek_maks)&& (sensor2>objek_maks)&&(indeks==0))
    99.     {
    100.         TIMSK=0x00;
    101.         timer=0;
    102.         detik=0;
    103.         menit=0;
    104.         baca_adc=read_adc(7);
    105.         objek_maks=baca_adc*3/10;
    106.     }
    107.     else if ((sensor1<2)&& (sensor2<2)&&(indeks==0))
    108.     {
    109.         TIMSK=0x00;
    110.         timer=0;
    111.         detik=0;
    112.         menit=0;
    113.         baca_adc=read_adc(7);
    114.         objek_maks=baca_adc*3/10;
    115.     }    
    116.     else if (sensor1>=2&&sensor1<=objek_maks&&(indeks==0 || indeks==2))
    117.     {
    118.         indeks=1;
    119.         TIMSK=0x01;//memulai timer
    120.         lcd_clear();
    121.     }
    122.     else if (sensor2>=2&&sensor2<=objek_maks && indeks==1)
    123.     {
    124.         indeks=2;
    125.         TIMSK=0x00;//menstop timer
    126.         lcd_clear();
    127.     }
    128.     else
    129.     {
    130.         PINC.2=PINC.1=PINC.4=1;
    131.     }
    132. }
    133. void ultrasonik1()
    134. {
    135.     hitung = 0;
    136.     PORTC.0 = 1;
    137.     delay_us(10);
    138.     PORTC.0 = 0;
    139.     delay_us(1);
    140.     while (PINC.1 == 0)
    141.     {}
    142.     while (PINC.1 == 1)
    143.     {
    144.         hitung++;     
    145.     }
    146.     sensor1 = hitung*0.0825/2;
    147. }
    148. void ultrasonik2()
    149. {
    150.     hitung = 0;
    151.     PORTC.2 = 1;
    152.     delay_us(10);
    153.     PORTC.2 = 0;
    154.     delay_us(1);
    155.     while (PINC.3 == 0)
    156.     {}
    157.     while (PINC.3 == 1)
    158.     {
    159.         hitung++;     
    160.     }
    161.     sensor2 = hitung*0.0825/2;
    162. }
    163. void kecepatan()
    164. {
    165.     if (TIMSK==0x00)
    166.     {
    167.         jarak=1;
    168.         count=menit*6000+detik*100+timer;
    169.         waktu=count*10;
    170.         kecepatan_mps=jarak*1000/waktu;
    171.         kecepatan_kph=kecepatan_mps*3.6;
    172.   }  
    173. }
    174. void indikator()
    175. {
    176.     if (TIMSK==0x01)
    177.     {
    178.         PORTC.4=1;
    179.         PORTD.7=1;
    180.     }
    181.     else
    182.     {
    183.         PORTC.4=0;
    184.         PORTD.7=0;
    185.     }
    186. }
    187. void tampil_lcd()
    188. {
    189.     if (indeks==0)
    190.     {
    191.         lcd_clear();
    192.         lcd_gotoxy(0,0);
    193.         lcd_putsf("Sensor Kecepatan");//tampilkan waktu di LCD baris pertama
    194.         lcd_gotoxy(0,1);
    195.         lcd_putsf("Objek Maks:   cm");
    196.         ftoa(objek_maks,0,data5);
    197.         lcd_gotoxy(11,1);
    198.         lcd_puts(data5);
    199.         delay_ms(10);
    200.     }           
    201.     else if (indeks==1)
    202.     {
    203.         lcd_gotoxy(0,0);
    204.         sprintf(data1,"Waktu: %d:%d:%d",menit,detik,timer);
    205.         lcd_puts(data1);//tampilkan waktu di LCD baris pertama 
    206.         lcd_gotoxy(0,1); //meletakkan kursor pada x=0 dan y=1
    207.         lcd_putsf("Menghitung...");
    208.     }    
    209.     else if (indeks==2)
    210.     {
    211.         lcd_gotoxy(0,0);
    212.         lcd_putsf("Waktu:        ms");
    213.         ftoa(waktu,0,data4);
    214.         lcd_gotoxy(8,0);
    215.         lcd_puts(data4);
    216.         lcd_gotoxy(0,1);
    217.         lcd_putsf("Kec:    m =    k");
    218.         ftoa(kecepatan_mps,2,data2);//float to array, mengubah tipedata float k tipe data array yg kan ditampilkan di LCD
    219.         lcd_gotoxy(4,1);  
    220.         lcd_puts(data2);
    221.         ftoa(kecepatan_kph,1,data3);//float to array, mengubah tipedata float k tipe data array yg kan ditampilkan di LCD
    222.         lcd_gotoxy(11,1);  
    223.         lcd_puts(data3);
    224.     }
    225.     else if (indeks==3)
    226.     {
    227.         lcd_gotoxy(0,0);
    228.         lcd_putsf("Sensor1:     cm");
    229.         ftoa(sensor1,0,data6);
    230.         lcd_gotoxy(9,0);
    231.         lcd_puts(data6);
    232.         lcd_gotoxy(0,1);
    233.         lcd_putsf("Sensor2:     cm");
    234.         ftoa(sensor2,0,data7);
    235.         lcd_gotoxy(9,1);
    236.         lcd_puts(data7);
    237.         delay_ms(10);
    238.     }  
    239. }
    240. void main(void)
    241. {
    242. // Declare your local variables here

    243. // Input/Output Ports initialization
    244. // Port A initialization
    245. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    246. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    247. PORTA=0x00;
    248. DDRA=0x00;

    249. // Port B initialization
    250. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    251. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    252. PORTB=0x00;
    253. DDRB=0x00;

    254. // Port C initialization
    255. // Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=Out Func1=In Func0=Out 
    256. // State7=P State6=P State5=P State4=0 State3=P State2=0 State1=P State0=0 
    257. PORTC=0xEA;
    258. DDRC=0x15;

    259. // Port D initialization
    260. // Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    261. // State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    262. PORTD=0x00;
    263. DDRD=0x80;

    264. // Timer/Counter 0 initialization
    265. // Clock source: System Clock
    266. // Clock value: 7,813 kHz
    267. // Mode: Normal top=0xFF
    268. // OC0 output: Disconnected
    269. TCCR0=0x05;
    270. TCNT0=0xB2;
    271. OCR0=0x00;

    272. // Timer/Counter 1 initialization
    273. // Clock source: System Clock
    274. // Clock value: Timer1 Stopped
    275. // Mode: Normal top=0xFFFF
    276. // OC1A output: Discon.
    277. // OC1B output: Discon.
    278. // Noise Canceler: Off
    279. // Input Capture on Falling Edge
    280. // Timer1 Overflow Interrupt: Off
    281. // Input Capture Interrupt: Off
    282. // Compare A Match Interrupt: Off
    283. // Compare B Match Interrupt: Off
    284. TCCR1A=0x00;
    285. TCCR1B=0x00;
    286. TCNT1H=0x00;
    287. TCNT1L=0x00;
    288. ICR1H=0x00;
    289. ICR1L=0x00;
    290. OCR1AH=0x00;
    291. OCR1AL=0x00;
    292. OCR1BH=0x00;
    293. OCR1BL=0x00;

    294. // Timer/Counter 2 initialization
    295. // Clock source: System Clock
    296. // Clock value: Timer2 Stopped
    297. // Mode: Normal top=0xFF
    298. // OC2 output: Disconnected
    299. ASSR=0x00;
    300. TCCR2=0x00;
    301. TCNT2=0x00;
    302. OCR2=0x00;

    303. // External Interrupt(s) initialization
    304. // INT0: Off
    305. // INT1: Off
    306. // INT2: Off
    307. MCUCR=0x00;
    308. MCUCSR=0x00;

    309. // Timer(s)/Counter(s) Interrupt(s) initialization
    310. TIMSK=0x01;

    311. // USART initialization
    312. // USART disabled
    313. UCSRB=0x00;

    314. // Analog Comparator initialization
    315. // Analog Comparator: Off
    316. // Analog Comparator Input Capture by Timer/Counter 1: Off
    317. ACSR=0x80;
    318. SFIOR=0x00;

    319. // ADC initialization
    320. // ADC Clock frequency: 1000,000 kHz
    321. // ADC Voltage Reference: AREF pin
    322. // ADC Auto Trigger Source: ADC Stopped
    323. ADMUX=ADC_VREF_TYPE & 0xff;
    324. ADCSRA=0x83;

    325. // SPI initialization
    326. // SPI disabled
    327. SPCR=0x00;

    328. // TWI initialization
    329. // TWI disabled
    330. TWCR=0x00;

    331. // Alphanumeric LCD initialization
    332. // Connections are specified in the
    333. // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    334. // RS - PORTD Bit 0
    335. // RD - PORTD Bit 1
    336. // EN - PORTD Bit 2
    337. // D4 - PORTD Bit 3
    338. // D5 - PORTD Bit 4
    339. // D6 - PORTD Bit 5
    340. // D7 - PORTD Bit 6
    341. // Characters/line: 16
    342. lcd_init(16);

    343. // Global enable interrupts
    344. #asm("sei")

    345. while (1)
    346.       {
    347.       // Place your code here
    348.         ultrasonik1();
    349.         ultrasonik2();
    350.         deteksi_sensor();
    351.         hitung_waktu();
    352.         kecepatan();
    353.         indikator();
    354.         tampil_lcd();
    355.       }
    356. }
  7. Untuk rumus timer-nya dapat dihitung dengan menggunakan cara di bawah ini. Pada program ini timer0 diatur counter-nya tiap 0,01 detik atau 100 milidetik, sehingga untuk menghasilkan waktu 1 detik timer diulang-ulang selama 100 kali. Selain itu juga Bit maksimal yang digunakan pada timer0 sebesar 256.
  8. Selanjutnya buat desain rangkaiannya pada Proteus, jika Anda belum memasang atau belum ada library dari sensor ultrasoniknya, maka ikuti langkah 9 sampai dengan 11. Jika Anda sudah pernah atau sudah ada library sensor ultrasoniknya maka lewati saja langkah 9-11.
  9. Unduh terlebih dahulu file library sensor ultrasoniknya di sini kemudian ekstak file-nya.
  10. Buka folder hasil ekstraknya, salin kedua file yang berformat *.IDX dan *.C.
  11. Kemudian tempelkan di direktori berkas default "C:\Program Files (x86)\Labcenter Electronics\Proteus 7 Professional\LIBRARY" jika Windows Anda 64 bit atau "C:\Program Files\Labcenter Electronics\Proteus 7 Professional\LIBRARY" jika Windows Anda 32 bit.
  12. Sesudah itu buka ISIS Proteus-nya kemudian klik "Pick from Libraries".
  13. Pada jendela pop up "Pick Devices" ketik "ultrasonic" pada pencarian kata kunci, jika sudah ditemukan Device "ULTRASONIC SENSOR" maka sudah berhasil terpasang library-nya.
  14. Buat desain rangkaiannya seperti gambar berikut.
  15. Berikut penjelasan fungsi dari masing-masing potensio dan tombol yang digunakan.
  16. Untuk simulasi pendeteksian objek/benda cukup mengatur potensionya sesuai dengan jarak maksimum yang diatur dan dideteksi oleh kedua sensor ultrasonik tersebut.
  17. Untuk memasuki objek yang melewati sensor jarak 2, maka ikuti langkah pada gambar ini.
  18. Untuk menghitung kecepatan objek selanjutnya tekan tombol reset dan kembalikan potensionya kembali pada nilai di atas deteksi sensor jarak yang ditentukan.
  19. Selanjutnya klik ganda pada komponen ATmega16 kemudian atur seperti berikut.
  20. Selain itu juga masukan program "UltrasonicTEP.hex"-nya dari yang satu folder hasil ekstrakan yang sudah di-download tadi dengan cara double click pada masing-masing sensor jaraknya.
  21. Selanjutnya pilih file "UltrasonicTEP.hex"-nya, kemudian klik "Open".
  22. Selesai dehh !!
Hasil Simulasinya dapat dilihat pada video di bawah ini.

    Selamat mencoba, dan semoga bermanfaat.


      Demikianlah Artikel Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2

      Sekian Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2, mudah-mudahan bisa memberi manfaat untuk anda semua.

      Anda sedang membaca artikel Simulasi Sensor Kecepatan menggunakan Dua Buah Sensor Ultrasonik dengan Tampilan LCD Karakter 16x2 dan artikel ini url permalinknya adalah https://pawang-bisnis.blogspot.com/2019/09/simulasi-sensor-kecepatan-menggunakan.html Semoga artikel ini bisa bermanfaat.

      Tag : ,