Dear All, sebelumnya jangan dulu percaya sama judul :D, tapi yang pasti ini memang terinspirasi sama robot penjelajah mars. sebenarnya kali ini saya akan berbagi cerita tentang membuat robot sederhana pendeteksi suhu berbasis Microcontroller Atmega32 yang dikendalikan menggunakan komputer.
Adapun Komponen yang Disimulasikan pada ISIS Proteus terdiri dari
-Power
-Ground
-Atmega32
-LM35
-Motor-DC
-COMPIM/RS232 DB9
-L293D (Driver Motor)
-Led-Red
-LM16L(LCD 16x2)
-Resistor 10K
-Led Merah
-Crystal
-Capasitor
-Virtual Terminal
Adapun Rangkaian schematic di ISIS Proteusnya tertera seperti gambar dibawah ini,
*Click gambarnya memperbesar tampilan.
KERJA ALAT
Uji coba simulasi robot kontrol PC menggunakan Proteus, pada saat robot dalam keadaan hidup maka sensor suhu LM35 dalam keadaan stand by, kemudian untuk menggerakan robot (motor DC), dapat dilakukan dengan kendali dari computer yaitu input perintah pada Hyper Terminal, dengan cara menekan :
‘a’ pada keyboard, robot bergerak ke kiri,
‘d’ pada keyboard, robot bergerak ke kanan,
‘s’ pada keyboard, robot berhenti bergerak,
‘w’ pada keyboard, robot bergerak ke depan (maju),
‘x’ pada keyboard, robot bergerak ke belakang (mundur).
Pada pergerakan robot motor penggeraknya dilengkapi dengan lampu led sebagai indicator, Adapun untuk pendeteksian suhu sekitar dilakukan oleh sensor lm35 mengikuti kemanapun robot bergerak.
Untuk Source Code di Code Vision tertera seperti text dibawah ini,
/**********************************
Project : Robot Pendeteksi Suhu ATmega32 Kendali By PC
Author : GeForce
Company : GeForce
***********************************/
//Header Library
#include <mega32.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#include <stdlib.h>
#define ADC_VREF_TYPE 0x00
//Deklarasi variabel
int flag;
int SUHU;
char temp[8];
float suhu_celcius;
// Membaca Konversi Hasil AD
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;
}
void main(void)
{
//Pengkondisian I/O pada Ports
PORTA=0x00;
DDRA=0x00;
PORTB=0xFF;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
// Inisialisasi USART
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// Inisialisasi Analog Comparator
ACSR=0x80;
SFIOR=0x00;
// Inisilisasi ADC
ADMUX=ADC_VREF_TYPE & 0xff;
ADCRA=0x84;
//Deklarasi Kondisi Awal
PORTB.6=0;
PORTB.7=0;
//Tampilan Awal LCD
lcd_init(16); //Inisialisasi modul LCD
lcd_clear();
lcd_gotoxy(1,0);
lcd_putsf("PC Car");
lcd_gotoxy(0,1);
lcd_putsf("By. GeForce");
delay_ms(1000);
while(1)
{
//Membaca Data Analog (suhu)
SUHU = read_adc(0);
suhu_celcius = (float)SUHU*500/1023;
//Robot Deteksi Suhu Bergerak Belok Kanan
if (getchar()=='a')
{
flag=0;
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTB.6=0;
PORTB.7=1;
lcd_clear ();
ftoa(suhu_celcius,1,temp);
lcd_gotoxy(0,0);
lcd_puts(temp);
lcd_gotoxy(5,0);
lcd_putchar(0xdf);
lcd_putsf("C (Suhu)");
lcd_gotoxy(0,1);
lcd_putsf("BELOK KANAN");
}
//Robot Deteksi Suhu Bergerak Belok Kiri
else if (getchar()=='d')
{
flag=0;
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
PORTB.6=1;
PORTB.7=0;
lcd_clear();
ftoa(suhu_celcius,1,temp);
lcd_gotoxy(0,0);
lcd_puts(temp);
lcd_gotoxy(5,0);
lcd_putchar(0xdf);
lcd_putsf("C (Suhu)");
lcd_gotoxy(0,1);
lcd_putsf("BELOK KIRI");
delay_ms(100);
}
//Robot Deteksi Suhu Berhenti Bergerak
else if (getchar()=='s')
{
flag=0;
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTB.6=0;
PORTB.7=0;
lcd_clear ();
ftoa(suhu_celcius,1,temp);
lcd_gotoxy(0,0);
lcd_puts(temp);
lcd_gotoxy(5,0);
lcd_putchar(0xdf);
lcd_putsf("C (Suhu)");
lcd_gotoxy(0,1);
lcd_putsf("MATI");
delay_ms(100);
}
//Robot Deteksi Suhu Bergerak Maju
else if (getchar()=='w')
{
flag=0;
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
PORTB.6=1;
PORTB.7=1;
lcd_clear();
ftoa(suhu_celcius,1,temp);
lcd_gotoxy(0,0);
lcd_puts(temp);
lcd_gotoxy(5,0);
lcd_putchar(0xdf);
lcd_putsf("C (Suhu)");
lcd_gotoxy(0,1);
lcd_putsf("MAJU");
delay_ms(100);
}
//Robot Deteksi Suhu Bergerak Mundur
else if (getchar()=='x')
{
flag=0;
PORTB.0=1;
PORTB.1=0;
PORTB.2=1;
PORTB.3=0;
PORTB.6=1;
PORTB.7=1;
lcd_clear();
ftoa(suhu_celcius,1,temp);
lcd_gotoxy(0,0);
lcd_puts(temp);
lcd_gotoxy(5,0);
lcd_putchar(0xdf);
lcd_putsf("C (Suhu)");
lcd_gotoxy(0,1);
lcd_putsf("MUNDUR");
delay_ms(100);
}
};
}
Ket :
ftoa : mengubah tipe data float ke tipe data array yg akan ditampilkan di LCD
lcd_clear : menghapus tampilan LCD
lcd_putsf : menampilkan string
lcd_putchar : menampilkan karakter
(0xdf) : symbol derajat pada LCD
Jika semuanya telah selesai silahkan coba di Jalankan di simulasi ISIS Proteusnya.
Semoga Bermanfaat,
Regards,
Iqbal