Bu yazımda sizlere Arduino milis fonksiyonu ve L293D motor sürücü kullanarak potansiyometre (PWM) ile hızı, buton ile yönü ayarlanabilen devre yapımını göstereceğim.
Malzemeler
- Arduino UNO
- Breadboard
- L293D motor sürücü entegresi
- 1 kΩ direnç
- 10 kΩ potansiyometre
- 1 adet buton
- 9V DC motor
- Kablo
- 9V DC adaptör veya 9V pil
DC Motor Nedir?
Elektrik enerjisini, mekanik enerjiye çeviren elektrik makinasına doğru akım motoru denir. Doğru akım motorlarına DC motor da denilmektedir.
Breadboard Nedir?
Devreleri tak çıkar mantığı ile oluşturmamıza yarayan, belli satır ve sütunları kendi aralarında iletken edilmiş devre tahtasıdır.
Arduino Nedir?
Arduino, açık kaynak kodlu bir mikrodenetleyici kartıdır. Kart ile robotik ve elektronik uygulamalarınızı kolayca gerçekleştirebiliriz.
Açık kaynak kodludur.
Program geliştirmek son derece basittir.
PWM (Sinyal Genişlik Modülasyonu) Nedir?
**
Sinyal modülasyon tekniği olarak tanımlanabilir. Sinyal bilgisinin aktarım için uygun hale çevrilmesi amacının yanı sıra güç kontrolü sağlamak ve elektrik makineleri, güneş pili şarj üniteleri gibi özel devrelere destek olmak amacı da taşır.
L293D
Yön kontrolü yapabilmemiz için bir motor sürücü entegresine ihtiyacımız var. L293D entegresi, 2 adet DC motor veya 1 adet step motor sürmek için kullanılan oldukça popüler bir entegredir.
Bağlantı Şeması
Kodlar
int butonPin = 8;
int potPin = A0; //A0 analog pini pot değişkenine atadık
int potdeger; //Kodlarımız içerisinde kullanacağımız potdeger değişkenini oluşturduk
int enablePin = 11;
int in1Pin = 10;
int in2Pin = 9;
int state = HIGH;
int reading;
int previous = LOW;
long time = 0;
long debounce = 200;
void setup() {
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(enablePin, OUTPUT);
Serial.begin(9600);
pinMode(potPin, INPUT); //pot u giriş olarak ayarladık
pinMode(butonPin, INPUT);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
void loop() {
reading = digitalRead(butonPin);
potdeger = analogRead(potPin);
Serial.println(potdeger);
int hiz = map(potdeger, 0, 1023, 0, 255);
boolean ters = digitalRead(butonPin);
motorCalistir(hiz, ters);
if (reading == HIGH && previous == LOW && millis() - time > debounce) {
if (state == HIGH)
state = LOW;
else
state = HIGH;
time = millis();
}
if (state == 1) {
} else {
digitalWrite(ters, state);
}
previous = reading;
delay(5);
}
void motorCalistir(int hiz, boolean ters)
{
analogWrite(enablePin, hiz);
digitalWrite(in1Pin, ! ters);
digitalWrite(in2Pin, ters);
}
https://gist.github.com/sekizgen/934b1c6b54758307ad5c77f50128b6f4