Selasa, 18 Oktober 2011
Line Follower Robot
adapun source code nya adalah sebagai berikut:
org 0h
mov p0,#0
loop: mov a,p0
cjne a,#00000000b,kanan
mov p2,#00011110b ; maju
call delay
sjmp loop
kanan: mov a,p0
cjne a,#00001000b,kiri
mov p2,#01101110b ; kanan
call delay
sjmp loop
kiri: mov a,p0
cjne a,#00000100b,mundur
mov p2,#10011101b ;kiri
call delay
sjmp loop
mundur: mov p2,#11101101b ; mundur
call delay
sjmp loop
delay: mov R1,#100
del1: mov R2,#100
del2: djnz R2,del2
djnz R1,del1
ret
end
Senin, 17 Oktober 2011
Senin, 13 Juni 2011
Meterran digital dengan Ultra sonic
- Tentang Ping))) Parallax
Ultrasonik, sebutan untuk jenis suara diatas batas suara yang bisa didengar manusia. Seperti diketahui, telinga manusia hanya bisa mendengar suara dengan frekuensi 20 Hz sampai 20KHz. Lebih dari itu hanya beberapa jenis binatang yang mampu mendengarnya, seperti kelelawar dan lumba-lumba. Lumba-lumba bahkan memanfaatkan ultrasonik untuk mengindera benda-benda di laut. Prinsip ini kemudian ditiru oleh sistem pengindera kapal selam. Dengan cara mengirimkan sebuah suara dan mengitung lamanya pantulan suara tersebut maka dapat diketahui jarak kapal selam dengan benda tersebut. Mula-mula suara dibunyikan, kemudian dihitung lama waktu sampai terdengar suara pantulan. Jarak dapat dihitung dengan mengalikan kecepatan suara dengan waktu pantulan. Kemudian hasilnya dibagi 2. Misalnya lama waktu pantulan adalah 1 detik, maka jaraknya adalah (344,424m/detik x 1 detik)/2 = 172m.
Ping))) Ultrasonic Range Finder, adalah modul pengukur jarak dengan ultrasonic buatan Parallax Inc. yang didesain khusus untuk teknologi robotika. Dengan ukurannya yang cukup kecil (2,1cm x 4,5cm), sensor seharga 300 ribu rupiah ini dapat mengukur jarak antara 3 cm sampai 300 cm. Keluaran dari Ping))) berupa pulsa yang lebarnya merepresentasikan jarak. Lebar pulsanya bervariasi dari 115 uS sampai 18,5 mS.
Pada dasarnya, Ping))) terdiri dari sebuah chip pembangkit sinyal 40KHz, sebuah speaker ultrasonik dan sebuah mikropon ultrasonik. Speaker ultrasonik mengubah sinyal 40 KHz menjadi suara sementara mikropon ultrasonik berfungsi untuk mendeteksi pantulan suaranya. Pada modul Ping))) terdapat 3 pin yang digunakan untuk jalur power supply (+5V), ground dan signal. Pin signal dapat langsung dihubungkan dengan mikrokontroler tanpa tambahan komponen apapun. Ping))) mendeteksi objek dengan cara mengirimkan suara ultrasonik dan kemudian “mendengarkan” pantulan suara tersebut. Ping))) hanya akan mengirimkan suara ultrasonik ketika ada pulsa trigger dari mikrokontroler (Pulsa high selama 5uS). Suara ultrasonik dengan frekuensi sebesar 40KHz akan dipancarkan selama 200uS. Suara ini akan merambat di udara dengan kecepatan 344.424m/detik (atau 1cm setiap 29.034uS), mengenai objek untuk kemudian terpantul kembali ke Ping))). Selama menunggu pantulan, Ping))) akan menghasilkan sebuah pulsa. Pulsa ini akan berhenti (low) ketika suara pantulan terdeteksi oleh Ping))). Oleh karena itulah lebar pulsa tersebut dapat merepresentasikan jarak antara Ping))) dengan objek. Selanjutnya mikrokontroler cukup mengukur lebar pulsa tersebut dan mengkonversinya dalam bentuk jarak dengan perhitungan sebagai berikut
Jarak = (Lebar Pulsa/29.034uS) /2 (dalam cm)
atau
Jarak = (Lebar Pulsa x 0.034442) /2 (dalam cm)
Karena 1/29.034 = 0.34442
Satu hal yang perlu diperhatikan adalah bahwa Ping))) tidak dapat mengukur objek yang permukaannya dapat menyerap suara, seperti busa atau sound damper lainnya. Pengukuran jarak juga akan kacau jika permukaan objek bergerigi dengan sudut tajam (meruncing).
- Contoh Aplikasi Pengukur Jarak
Pada aplikasi ini mikrokontroler akan membaca lebar pulsa dari Ping))), dihitung kemudian
ditampilkan ke LCD. Pastikan !!! : pin Signal (SIG) terhubung ke PINB.0 Tanpa resistor pullup.
PORTB.0untuk Ping
Arus
No Berikut adalah langkah percobaannya :
- Buka Aplikasi CodeVisionAVR C Compiler
- Klik File -> New muncul seperti gambar di bawah ini
- Pilih project
- Klik Yes
- Klik Generate,Save and Exit”
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.4 Standard
Automatic Program Generator
© Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail: office@hpinfotech.comThis e-mail address is being protected from spambots. You need JavaScript enabled to view it
Project : Ping))) Parallax Ultrasonic Range Finder
Version : v1.0.0
Date : 28/02/2009
Author : Didox MPX 2
Company : Mechanical MPX 2
Comments : Tutor AVR
Chip type : ATmega8535
Program type : Application
Clock frequency : 4,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega8535.h>
#include delay.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
// Declare your global variables here
#define SigOut PORTB.0
#define SigIn PINB.0
#define DirSig DDRB.0
unsigned int counter;
float distance;
unsigned char Baris1[16];
unsigned char Baris2[16];
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
While (1) {
// Place your code here
counter=0; //Initial value
DirSig=1; //Set as output
SigOut=1;
delay_us(5);
SigOut=0;
DirSig=0; //Set as input
delay_us(5);
SigOut=0;
DirSig=0; //Set as input
SigOut=1; //Pullup activated
while (SigIn==0)
{}
while (SigIn==1)
while (SigIn==1)
{counter++;}
// V=344.424m/s
// V=344.424m/s
distance=(counter*0.034442); //Untuk clock 4,0000 Mhz
//distance=(counter*0.034442)/2; //Untuk clock 11,0592 Mhz
sprintf(Baris1,"Counter=%5d uS",counter); //%5d ->area 5 kolom LCD
sprintf(Baris2,"Jarak: %3.2f cm",distance); //%3,2f->2angk_decimal
lcd_gotoxy(0,0);lcd_puts(Baris1);
lcd_gotoxy(0,1);lcd_puts(Baris2);
delay_ms(200);
lcd_clear();
};
lcd_gotoxy(0,1);lcd_puts(Baris2);
delay_ms(200);
lcd_clear();
};
}
Langganan:
Postingan (Atom)