Aplikasi 006. Robot Pencari Cahaya (Seri Robotika [II])

Abstrak:

Pada aplikasi kali ini, dibuat robot yang bergerak menuju kepada cahaya yang paling terang yang mengenai permukaan rangka robot. Sensor yang digunakan untuk mengukur level kecerahan cahaya adalah LDR, light dependent resistor, yang terpasang di tiga titik rangka robot (lihat disain mekanik). Metode yang digunakan adalah membandingkan nilai tegangan keluaran dari rangkaian LDR yang adalah representasi dari level kecerahan cahaya, kemudian robot akan menuju ke titik sensor LDR yang menerima level kecerahan cahaya terbesar.

Modul-Modul Depok Instruments yang Mendukung:

Blok Diagram:

Disain Mekanik:

Cara Kerja Robot:

  1. Zona deteksi robot dibagi menjadi 4 bagian: sisi depan, sisi kanan, sisi belakang, dan sisi kiri.
  2. Tiap zona dibagi lagi menjadi 3 segmen pemantauan sesuai dengan jumlah sensor.
  3. Robot akan mencari cahaya sampai robot mencapai titik yang memiliki tingkat kecerahan yang lebih dari atau sama dengan batas kecerahan yang telah ditetapkan di program sebelumnya.
  4. Robot akan berhenti pula jika tidak mendapatkan perbedaan tingkat kecerahan cahaya di 4 zona deteksi di mana di tiap zona tingkat kecerahan berada di bawah batas gelap.
  5. Jika dari 3 segmen dalam satu zona deteksi memiliki kecerahan yang sama, maka robot akan bergerak ke arah depan, dengan skala prioritas; depan-kanan-kiri.

Flowchart:

Skrip Program:

1. BASCOM:

$regfile = “m8535.dat”
$crystal = 11059200
Config Adc = Single , Prescaler = Auto
Start Adc
Dim Adc_kanan As Word
Dim Adc_kiri As Word
Dim Adc_tengah As Word
Chanel_kanan Alias 0
Chanel_kiri Alias 1
Chanel_tengah Alias 2
Motor_kanan Alias Portc.0
Motor_kiri Alias Portc.1

Config Motor_kanan = Output
Config Motor_kiri = Output

Do
Adc_kanan = Getadc(chanel_kanan)
Adc_kiri = Getadc(chanel_kiri)
Adc_tengah = Getadc(chanel_tengah)

If Adc_tengah < Adc_kiri And Adc_tengah < Adc_kanan Then
‘maju 1 step
Motor_kanan = 1
Motor_kiri = 1
Waitms 2000

Elseif Adc_kanan < Adc_kiri And Adc_kanan < Adc_tengah Then
‘belok kanan 30 derajat
Motor_kiri = 1
Motor_kanan = 0
Waitms 500

Elseif Adc_kiri < Adc_kanan And Adc_kiri < Adc_tengah Then
‘belok kiri  30 derajat
Motor_kiri = 0
Motor_kanan = 1
Waitms 500
End If

Motor_kanan = 0
Motor_kiri = 0
Waitms 100

Loop
End

2. Code Vision AVR (C):

/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 28/04/2011
Author  :
Company :
Comments:

Chip type           : ATmega8535
Program type        : Application
Clock frequency     : 11,059200 MHz
Memory model        : Small
External RAM size   : 0
Data Stack size     : 128
*****************************************************/

#include <mega8535.h>

#include <delay.h>
#define chanel_ldr_kanan 0
#define chanel_ldr_kiri 1
#define chanel_ldr_tengah 2

#define motor_kanan PORTC.0
#define motor_kiri PORTC.1

#define ddr_motor_kanan DDRC.0
#define ddr_motor_kiri DDRC.1

#define ADC_VREF_TYPE 0x00

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here

void main(void)
{
unsigned int adc_kanan, adc_tengah, adc_kiri;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 691,200 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;

ddr_motor_kanan=1;
ddr_motor_kiri=1;

while (1)
{
// Place your code here
adc_kanan=read_adc(chanel_ldr_kanan);
adc_kiri=read_adc(chanel_ldr_kiri);
adc_tengah=read_adc(chanel_ldr_tengah);

if (adc_tengah<adc_kiri && adc_tengah<adc_kanan){
//maju 1 step
motor_kanan=1;
motor_kiri=1;
delay_ms(2000);
}
else if (adc_kanan<adc_kiri && adc_kanan<adc_tengah){
//belok kanan 30 derajat
motor_kanan=0;
motor_kiri=1;
delay_ms(500);
}
else if(adc_kiri<adc_kanan && adc_kiri<adc_tengah){
//belok kiri 30 derajat
motor_kanan=1;
motor_kiri=0;
delay_ms(500);
}

motor_kanan=0;
motor_kiri=0;

};
}

Iklan

2 thoughts on “Aplikasi 006. Robot Pencari Cahaya (Seri Robotika [II])

Tinggalkan Balasan

Please log in using one of these methods to post your comment:

Logo WordPress.com

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

Gambar Twitter

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

Foto Facebook

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

Foto Google+

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

Connecting to %s