Robot
Line Follower merupakan robot yang dapat bergerak mengikuti garis
secara otomatis. Robot Line Follower merupakan robot yang sederhana
bahkan sekarang anak SMA dan SMP sudah bisa membuatnya selain dalam
membuatnya tidak terlalu sulit atau dapat dikatakan mudah selain itu
juga komponen yang dibutuhkan dalam membuatnya cukup mudah kita dapatkan
serta buku ataupun tutorial yang ada di internet sudah banyak sekali
yang membahas cara membuat line follower baik itu tanpa mikrokontroler
ataupun dengan mikrokontroler.
Gambar Robot Line Follower
Untuk
membaca garis, robot dilengkapi dengan sensor proximity yang dapat
membedakan antara garis hitam dengan lantai putih. Sensor proximity ini
dapat kalibrasi untuk menyesuaikan pembacaan sensor terhadap kondisi
pencahayaan ruangan. Sehingga pembacaan sensor selalu akurat. Sensor
proximity bisa kita buat sendiri. Prinsip kerjanya sederhana, hanya
memanfaatkan sifat cahaya yang akan dipantulkan jika mengenai benda
berwarna terang dan akan diserap jika mengenai benda berwarna gelap.
Sebagai sumber cahaya kita gunakan LED (Light Emiting Diode)yang
akan memancarkan cahaya merah. Dan untuk menangkap pantulan cahaya LED,
kita gunakan photodiode. Jika sensor berada diatas garis hitam maka
photodioda akan menerima sedikit sekali cahaya pantulan. Tetapi jika
sensor berada diatas garis putih maka photodioda akan menerima banyak
cahaya pantulan. Berikut adalah ilustrasinya :
Pada robot line follower, sensor robot yang dapat digunakan ada 3 jenis, yaitu LDR (Light Dependent Resistor), Photo Dioda atau Photo Transistor.
Baca Juga postingan saya mengenai Membuat Program Line Follower Dengan Fuzzy Logic
Berikut program robot line follower :
#define s1 PINA.0 //Pendekalrasian sensor 1 di pinA.0
#define s2 PINA.1 //Pendekalrasian sensor 2 di pinA.1
#define s3 PINA.2 //Pendekalrasian sensor 3 di pinA.2
#define s4 PINA.3 //Pendekalrasian sensor 4 di pinA.3
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=0xFF;
// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// 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: 12000,000 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x09;
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;
// Tambahkan kode program dibawah u/mengatur Kecepatan motor Dc(pwm=50)
OCR1AL=50;
OCR1BL=50;
while (1)
{
/*posisi sensor
s1 s2 s3 s4
kiri kanan
*/
if (s1==0&&s2==1&&s3==1&&s4==0) //Sensor 2 & 3 yang mendeteksi line(inp>=3 volt)
{
PORTC.0=1;
PORTC.1=0;
PORTC.2=1;
PORTC.3=0; //Motor maju semua
}
if(s1==1&&s2==1&&s3==0&&s4==0) //Sensor 1 & 2 yang mendeteksi line
{
PORTC.0=1;
PORTC.1=1;
PORTC.2=1;
PORTC.3=0; //Motor 1 stop motor 2 maju
}
if(s1==1&&s2==1&&s3==1&&s4==0) //Sensor 1, 2 & 3 yang mendeteksi line
{
PORTC.0=0;
PORTC.1=1;
PORTC.2=1;
PORTC.3=0; //Motor 1 Mundur motor 2 maju
}
if(s1==1&&s2==0&&s3==0&&s4==0) //Hanya Sensor 1 yang mendeteksi line
{
PORTC.0=1;
PORTC.1=1;
PORTC.2=1;
PORTC.3=0; //Motor 1 Stop motor 2 maju
}
if(s1==0&&s2==1&&s3==0&&s4==0) //Hanya Sensor 2 yang mendeteksi line
{
PORTC.0=1;
PORTC.1=1;
PORTC.2=1;
PORTC.3=0; //Motor 1 Stop motor 2 maju
}
if(s1==0&&s2==0&&s3==1&&s4==1) //Sensor 3 & 4 yang mendeteksi line
{
PORTC.0=1;
PORTC.1=0;
PORTC.2=1;
PORTC.3=1; //Motor 1 maju motor 2 stop
}
if(s1==0&&s2==1&&s3==1&&s4==1) //Sensor 2, 3 & 4 yang mendeteksi line
{
PORTC.0=1;
PORTC.1=0;
PORTC.2=0;
PORTC.3=1; //Motor 1 maju motor 2 mundur
}
if (s1==0&&s2==0&&s3==0&&s4==1) //Hanya Sensor 4 yang mendeteksi line
{
PORTC.0=1;
PORTC.1=0;
PORTC.2=1;
PORTC.3=1; //Motor 1 maju motor 2 stop
}
if (s1==0&&s2==0&&s3==1&&s4==0) //Hanya Sensor 3 yang mendeteksi line
{
PORTC.0=1;
PORTC.1=0;
PORTC.2=1;
PORTC.3=1; //Motor 1 maju motor 2 stop
}
if(s1==0&&s2==0&&s3==0&&s4==0) //Tidak ada sensor yang mendeteksi line
{
PORTC.0=1;
PORTC.1=0;
PORTC.2=1;
PORTC.3=0; //Motor 1 maju motor 2 maju
}
if (s1==1&&s2==1&&s3==1&&s4==1) //Semua sensor mendeteksi line
{
PORTC.0=1;
PORTC.1=0;
PORTC.2=1;
PORTC.3=0; //Motor 1 maju motor 2 maju
}
};
}
BalasHapusAssalamualaikum bang
bisa buatin program untuk 8 sensor dan pake atmega16 gak bang ? tlong bang kirim ke email saya ya sumas.rendi@gmail.com