Kamis, 03 September 2015

ULTRASONIK HC SR04







Pin TRIG pada sensor dihubungkan pada pin PORTC.4 pada mikrokontroler, sedangkan pin OUT dihubungkan pada pin PORTC.5 pada mikrokontroler. Pin TRIG digunakan untuk memberikan sinyal trigger agar gelombang ultrasonik dapat dipancarkan, sedangkan pin ECHO merupakan pin keluaran yang akan mengeluarkan pulsa yang mempresentasikan jarak sensor dengan benda. LCD digunakan untuk menampilkan besaran pulsa dan jarak yang terukur oleh sensor tersebut.
Untuk memulai membuat program, seperti biasa buat project baru dengan bantuan code wizard. Kali ini kita membutuhkan sebuah timer untuk menghitung lebarnya pulsa yang keluar dari pin ECHO. Oleh karena itu kita setting dahulu pengaturan timer. Kali ini yang akan kita gunakan adalah Timer 1 dengan mode sebagai timer biasa. Kali ini besarnya nilai clock untuk timer yang digunakan adalah 2MHz. Selain itu kita juga harus mengaktifkan mode overflow interrupt pada timer. Untuk lebih jelasnya pengaturan dari Timer1 dapat 


Setelah mengkonfigurasi Timer1, selanjutnya kita konfigurasi pin untuk interface ke LCD dan sensor. Kali ini kita gunakan PORTD untuk jalur data ke LCD, sedangkan sensor nantinya terhubung pada PORTC.4 dan PORTC.5. Pengaturan lebih jelasnya dapat dilihat pada gambar di bawah ini.


Algoritma untuk pembacaan sensor ultrasonik dapat dijelaskan seperti berukut ini.
1. Keluarkan pulsa 10us pada pin PORTC.4 (TRIG sensor)
2. Hitung lebar pulsa high pada pin PORT.5 (ECHO)
3. Konversi lebar pulsa ke satuan jarak(cm)
4. Tampilkan ke LCD
Untuk lebih jelasnya dapat dilihat pada source code di bawah ini.
#include (mega8.h)
#include (delay.h)
#include (stdio.h)   
// Alphanumeric LCD Module functions
#include
#define TRIGGER   PORTC.4
#define ECHO      PINC.5
unsigned char baris_1[16], baris_2[16];
long timer = 0, xTimer = 0;
float pulsa, jarak;
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
   xTimer++;
}
void bacaJarak() {
   TRIGGER = 1;         // Memberikan pulsa high selama 10 microseconds
   delay_us(10);
   TRIGGER = 0;
   while(ECHO == 0);    // Tunggu pulsa high dari sensor
   TCNT1 = 0;           // Nolkan timer
   xTimer = 0;          // Nolkan variabel xTimer
   while(ECHO == 1);    // Tunggu pulsa low dari sensor
   timer = TCNT1;       // Ambil data dari timer
   pulsa = (float)xTimer * 65535 * 0.5 + (float)timer * 0.5;   // Menghitung pulsa yang masuk dalam satuan microseconds
   jarak = pulsa / 29.034 / 2;   // Menghitung jarak dalam satuan centimeter
   lcd_clear();
   sprintf(baris_1, “Pulsa = %5.2f “, pulsa);
   sprintf(baris_2, “Jarak = %3.2f “, jarak);
   lcd_gotoxy(0, 0);
   lcd_puts(baris_1);
   lcd_gotoxy(0, 1);
   lcd_puts(baris_2);
   delay_us(300);
}
// Declare your global variables here
void main(void)
{
// Port C initialization
// Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=In
// State6=T State5=P State4=0 State3=T State2=T State1=T State0=T
PORTC=0×20;
DDRC=0×10;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 2000.000 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×02;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×04;
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS – PORTD Bit 0
// RD – PORTD Bit 1
// EN – PORTD Bit 2
// D4 – PORTD Bit 4
// D5 – PORTD Bit 5
// D6 – PORTD Bit 6
// D7 – PORTD Bit 7
// Characters/line: 16
lcd_init(16);
lcd_clear();
// Global enable interrupts
#asm(“sei”)
while (1)
      {
      // Place your code here
      bacaJarak();
      delay_ms(100);
      }
}
Pada program diatas dapat dilihat bahwa pada saat terjadi interrupt timer maka variabel xTimer akan increment. Variabel ini yang nantinya digunakan untuk perhitungan timer bersama dengan isi register TCNT1. Pada fungsi bacaJarak perhitungan lebar pulsa high berada pada baris berikut.
pulsa = (float)xTimer * 65535 * 0.5 + (float)timer * 0.5;   // Menghitung pulsa yang masuk dalam satuan microseconds
Karena kita menggunakan frekuensi clock 2MHz untuk clock timernya, maka dapat dihitung setiap 1 pulsa memiliki periode 0.5 microseconds. Sehingga untuk menghitung total pulsa high dapat mengalikan nilai xTimer * 65535 (karena 16 bit) * 0.5 + TCNT1 * 0.5. Setelah besar lebar pulsa kita ketahui kita dapat mengkonversi ke dalam satuan jarak(cm) dengan rumus perhitungan
jarak = pulsa / 29.034 / 2;   // Menghitung jarak dalam satuan centimeter
Nilai 29.034 tersebut adalah konstanta untuk kecepatan gelombang ultrasonik. Karena terjadi pemantulan gelombang, maka jarak yg ditempuh oleh gelombang tersebut adalah 2 kali dari jarak sensor ke benda. Oleh karena itu kita harus membagi lagi dengan 2, sehingga besarnya nilai jarak sama dengan jarak sensor dengan benda pemantul. Karena pada program kita nantinya akan menampilkan bilangan berkoma (float) pada lcd, maka kita harus mengatur terlebih dahulu pada bagian compiler. Klik Project => Configure, kemudian pilih pada bagian berikut. Ganti bagian (s)printf Features menjadi float, width, precision.

 Sensor ultrasonik dapat di aplikasikan untuk alat pengukur tinggi badan



vidionya ada di sini

Selasa, 01 September 2015

SIMUALASI VISUAL BASIC UNTUK ON/OFF LED


Bagi temen-temen yang butuh reverensi komunikasi serial menggunakan vb, biar cepet lngsung ja ke tkp
video tutorialnya bias di download disini dan disina