Professional Documents
Culture Documents
Laporan 1
Laporan 1
130534608422
130534608
130534608
130534608364
130534608
PORTD.2
PORTD.3
PORTD.4
PORTD.5
0
1
2
0
1
2
3
pwmKa(speed);
dir1Ka = 0;
dir2Ka = 1;
}
else if (arah==stop) {
dir1Ka = 0;
dir2Ka = 0;
pwmKa(1023);
}
}
#define ADC_VREF_TYPE 0xE0
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void main(void){
#pragma optsizeCLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTB=0x20;
DDRB=0x07;
PORTC=0x00;
DDRC=0x00;
DDRD=0b00111100;
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
TCCR1A=0xA3;
TCCR1B=0x03;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x00;
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
EICRA=0x00;
EIMSK=0x00;
PCICR=0x00;
TIMSK0=0x00;
TIMSK1=0x00;
TIMSK2=0x00;
UCSR0A=0x02;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x0B;
ADCSRB=0x00;
DIDR0=0x30;
ADCSRA=0x84;
SPCR=0x00;
TWCR=0x00;
while (1){
// Place your code here
motorKanan(0,100);
}}
PORTD.2
PORTD.3
PORTD.4
PORTD.5
0
1
2
0
1
2
3
}
}
void motorKanan(unsigned char arah,unsigned int speed) {
if (arah==maju) {
pwmKa(speed);
dir1Ka = 1;
dir2Ka = 0;
}
else if (arah==mundur) {
pwmKa(speed);
dir1Ka = 0;
dir2Ka = 1;
}
else if (arah==stop) {
dir1Ka = 0;
dir2Ka = 0;
pwmKa(1023);
}
}
#define ADC_VREF_TYPE 0xE0
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void main(void){
#pragma optsizeCLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTB=0x20;
DDRB=0x07;
PORTC=0x00;
DDRC=0x00;
DDRD=0b00111100;
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
TCCR1A=0xA3;
TCCR1B=0x03;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x00;
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
EICRA=0x00;
EIMSK=0x00;
PCICR=0x00;
TIMSK0=0x00;
TIMSK1=0x00;
TIMSK2=0x00;
UCSR0A=0x02;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x0B;
ADCSRB=0x00;
DIDR0=0x30;
ADCSRA=0x84;
SPCR=0x00;
TWCR=0x00;
while (1){
// Place your code here
motorKiri(1,100);
}}
=
=
=
=
read_adc(4);
read_adc(5);
read_adc(6);
read_adc(7);
xsensor = sensor;
sensor = 0;
// Jika nilai DATA lebih besar dari BATAS, maka sensor berada di
atas permukaan terang
if (data1>batas) sensor |= 0x01;
if (data2>batas) sensor |= 0x02;
if (data3>batas) sensor |= 0x04;
if (data4>batas) sensor |= 0x08;
// Invert nilai sensor untuk jalur terang di atas permukaan gelap
if (trackWarnaPutih) {
sensor = sensor ^ 0x0F;
}
lcd_putInt(data3,3);
locate(0,5);
lcd_putInt(data4,3);
TUGAS
1. Hal-hal yang perlu diperhatikan dalam pembuatan dan pengkodean Robot LF
Pembuatan:
-
sensor, dll)
Penentuan posisi penempatan sensor / desain (setengah lingkaran, persegi,
dll)
Penentuan driver motor
Penentuan Motor
Penentuan daya yang digunakan
Ban/ roda
dll
Pengkodean:
-
atau putaih.
Mengetahui pergerakan motor LF
Kecepatan pada tiap-tiap motor dapat ditentukan dari PWM yang
saja.
Penulisan listing program untuk pengendalian motor dengan
data1 = read_adc(4);
data2 = read_adc(5);
data3 = read_adc(6);
data4 = read_adc(7);
xsensor = sensor;
sensor = 0;
// Jika nilai DATA lebih besar dari BATAS, maka sensor berada di atas
permukaan terang
if (data1>batas) sensor |= 0x01;
if (data2>batas) sensor |= 0x02;
if (data3>batas) sensor |= 0x04;
if (data4>batas) sensor |= 0x08;
// Invert nilai sensor untuk jalur terang di atas permukaan gelap
if (trackWarnaPutih) {
sensor = sensor ^ 0x0F;
}
Tabel Kalibrasi ADC Sensor
Port ADC
ADC.0
ADC.1
ADC.2
ADC.3
ADC.4
ADC.5
ADC.6
ADC.7
Nilai ADC
pada kertas
putih
822
800
780
800
810
812
811
811
Nilai ADC
pada kertas
hitam
1022
1000
1020
1020
1021
1024
1023
1012
Nilai
tengah
922
900
890
989
960
994
989
967
Script:
void buttonCheck(void) {
if (!tombol1) {
counterT2 = 0;
if (displayMode==ready) {
if (start==0) {
start = 1;
sensor = 0xFF;
putlcd(lcdCmd,displayclear);
locate(0,2);lcd_putsf("START!");
locate(1,1);lcd_putsf("TRACKING");
if (batas!=batasEE) {
batasEE = batas;delay_ms(10);
}
if (trackWarnaPutih!=trackMode) {
trackMode = trackWarnaPutih;delay_ms(10);
}
}
}
else if (displayMode==rawSensorData) {
}
else if (displayMode==thresholdSet) {
if (!tombol2)
batas--;
else
batas++;
}
else if (displayMode==trackSet) {
trackWarnaPutih ^= 0x01;
delay_ms(100);
}
}
else {
counterT1 = 0;
}
if (!tombol2) {
counterT1 = 0;
if (displayMode==ready) {
if (start==1) {
putlcd(lcdCmd,displayclear);
start = 0;
lastStat = 0;
}
}
else if (displayMode==rawSensorData) {
}
else if (displayMode==thresholdSet) {
}
else if (displayMode==trackSet) {
}
counterT2++;
if (counterT2>10) {
putlcd(lcdCmd,displayclear);
displayMode++;
counterT2 = 0;
}
if (displayMode>trackSet) displayMode=ready;
}
else {
}
counterT2 = 0;
ANALISA
1. Pendefinisian variabel dilakukan untuk mempermudah dalam pengkodean.
Hasil dari klasifikasi pin untuk memudahkan dalam pengkodean dapat
dilakukan pendefinisian variabel sehingga saat menuliskan listing program
cukup memanggil variabelnya saja.
2. Pengendalian Motor dilakukan dengan menggunakan function
motorKanan dan motorKiri dengan mengeset arah motor (0 untuk maju, 1
untuk mundur dan 2 untuk stop) dan PWM untuk mengatur kecepatan
motor. Besarnya PWM yang di set pada function motorKanan dan
motorKiri mempengaruhi arah gerak motor. Misalnya untuk belok kanan
maka perlu diset PWM kanan lebih kecil dibanding PWM kiri, untuk
belok kiri perlu di set PWM kiri lebih kecil dari PWM kanan, dan untuk
maju maka PWM kanan dan kiri diset dengan besar yang sama
3. Pembacaan Sensor dilakukan menggunakan ADC, hasil pembacaan sensor
ditampilkan pada LCD menggunakan perintah
KESIMPULAN