Kontrol Motor DC dengan ADC Mikrokontroler
Aplikasi mikrokontroler AVR ATmega8535 kali ini adalah mengontrol putaran motor DC dengan ADC (Analog to Digital Converter) yang dimiliki Mikrokontroler (internal ADC).
Blok diagram kontrol motor DC dengan Mikrokontroler terlihat pada gambar berikut.
Teman – teman dapat mengganti Mikrokontroler ATmega8535 dengan tipe yang lain seperti ATmega16 atau ATmega8. Driver motor DC juga tidak harus memakai transistor. Dapat juga kita pakai driver seperti L298 atau tipe yang lain. Skematiknya seperti gambar berikut :
Motor DC kita kontrol dengan nilai ADC yang dibaca dari sebuah potensiometer yang dibuat menjadi voltage devider. Kontrol motor DC kita buat dengan mekanisme sebagai berikut :
- Saat tegangan potensiometer 0 V, motor DC berhenti berputar.
- Saat tegangan potensiometer 0 < Vpot < 2 V motor DC berputar ke kanan (searah jarum jam).
- Saat tegangan potensiometer 2 V < Vpot < 3 V motor DC berhenti berputar.
- Saat tegangan potensiometer 3 < Vpot < 5 V motor DC berputar ke kiri (berlawanan arah jarum jam).
Program kontrol motor DC kita buat dengan 2 bahasa : C dengan CVAVR & BASCOM-AVR. Perhatikan, disini kita memakai crystal 1 Mhz (internal clock). Jika teman – teman memakai nilai crystal yang berbeda maka silakan disesuaikan programnya.
Program mikrokontroler yang pertama kita buat dengan bahasa C (CVAVR) :
/*****************************************
* Kontrol Motor DC dg input VR
www.inkubator-teknologi.com
www.tokotronik.com
*****************************************/
#include <mega8535.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x40
unsigned int D,V;
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void motor_stop(){
PORTD.4=0;
PORTD.5=0;
}
void motor_right(){
PORTD.4=0;
PORTD.5=1;
}
void motor_left(){
PORTD.4=1;
PORTD.5=0;
}
//========================================
void main(void)
{
DDRD=255;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x87;
SFIOR&=0xEF;
while(1){
D=read_adc(0);
V = D * 5;
if(V==0)
motor_stop();
else if((V>0)&&(V<2000))
motor_right();
else if((V>2000)&&(V<3000))
motor_stop();
else if((V>3000)&&(V<5000))
motor_left();
}
}
Program mikrokontroler berikutnya untuk BASCOM-AVR :
‘—————————————————–
‘ Kontrol Motor DC dg input VR
‘
‘ www.inkubator-teknologi.com
‘ www.tokotronik.com
‘—————————————————–
$regfile = “m8535.dat”
$crystal = 16000000
Declare Sub Motor_stop()
Declare Sub Motor_right()
Declare Sub Motor_left()
Dim D As Word , V As Word
Config Portd = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
D = Getadc(0) ‘baca potensio (ADC)
V = D * 5 ‘konversi ke tegangan (mV)
If V = 0 Then ‘jk teg=0 maka
Motor_stop ‘motor berhenti
Elseif V > 0 And V < 2000 Then ‘jk teg>0 dan teg<2V (2000mv) maka
Motor_right ‘motor putar kanan
Elseif V > 2000 And V < 3000 Then ‘jk teg>2V dan teg<3V maka
Motor_stop ‘motor berhenti
Elseif V > 3000 And V < 5000 Then ‘jk teg>3V dan teg<5V maka
Motor_left ‘motor putar kanan
End If
Loop
End
Sub Motor_stop
Portd.4 = 0
Portd.5 = 0
End Sub
Sub Motor_right
Portd.4 = 0
Portd.5 = 1
End Sub
Sub Motor_left
Portd.4 = 1
Portd.5 = 0
End Sub
Silakan anda pilih salah satu diantara ke-2 program tadi. Bagi teman – teman yang terbiasa memakai bahasa C silakan pakai CVAVR (CodeVision AVR) atau mau mencoba dengan BASCOM-AVR juga silakan.
Selamat mencoba !
yang pake program arduino ada g mas..
soale lagi belajar arduino jg…
Insya Allah kapan2 kita posting mas, trims
Good.
Trims mas Sahrir sudah mampir
Mas coba tambahin klo misalkan menggunakan imputan sensor pir prosesnya mikrokontrolwe outputnya motor dc, programnya juga ya mas
Maksudnya jika terdeteksi PIR maka motor berputar ? Atau bagaimana ?
Mantap..
Boleh shere?
Silakan mas