Bu çalışmamızda daha önce gördüğümüz Arduino’nun analog girişlerinin bir potansiyometre kullanılarak pwm çıkışlarına bağlanan DC ve Servo motorların nasıl kontrol edilebileceğini inceliyoruz.
DC Motor Kontrolü:
DC motoru bir pwm çıkışa (9 numaralı dijital çıkışa) bağlayıp, diğer ucu gnd hattına çekiyoruz. Analog girişe uygulanan gerilimi değiştirmek için 10k potansiyometre kullanıyoruz. Potansiyometrenin bir ucu +5 volt hattına diğer ucu da gnd hattına bağlanıyor. 0 – 5 volt arası değişen gerilim alabileceğimiz orta ucu da bir analog girişe (A0) bağlıyoruz. tüm bağlantı bu kadar. Bu demo olduğu için motor sürücü kullanmadım. Sürekli kullanım için ihtiyaç olduğunu unutmayalım.
Gelelim koda: Önce pot ve motor pinlerini tanımlıyoruz. girisDC ve cilisDC isimli iki tamsayı değişkeni tanımlıyoruz. Setup kısmında motor pini çıkış, pot pininin ise giriş olduğunu tanımlayıp seri iletişimi (9600 boud rate) başlatıyoruz. Bu programın çalışıp çalışmadığını kontrol edebilmek için eklendi. Loop’da ise analog pindeki değer okutulup girişDC değişkenine atanıyor. Giris 10 bit, pwm çıkış ise 8 bit olduğu için map komutu ile girisDC’de okunan 0-1023 arasındaki değeri, 0-255 arasında dönüştürüp bunu cikisDC değişkenine atıyoruz. analogWrite konutu ile motorpinine çıkış veriyoruz. ve seri ekranda bu değeri yazdırarak kontrol edebiliyoruz. Oldukça kısa bir program.
#define potPinDC A0
#define motorPinDC 9
int girisDC, cikisDC;
void setup() {
Serial.begin (9600);
pinMode(motorPinDC, OUTPUT);
pinMode(potPinDC, INPUT);
}
void loop() {
girisDC = analogRead(potPinDC);
cikisDC = map(girisDC, 0, 1023, 0, 255);
analogWrite (motorPinDC, cikisDC);
Serial.print(“cikisDC = “);
Serial.println(cikisDC);
delay (500);
}
Servo Motor Kontrolü:
Servo motorların üç bağlantısı olduğunu daha önce görmüştük. Kahverengi kabloyu gnd hattına, kırmızı kabloyu da +5 volt hattına bağladıktan sonra sinyal girişi olan sarı kabloyu yine Ardıino’nun 9 numaralı pwm çıkışına bağlıyoruz. Potansiyometre bağlantısı yine aynı şekilde, bir uç gnd, bir uç +5 volt hattına, orta uç ise A0 girişine bağlanıyor. Kodda ise genel mantık aynı. Ancak önce başta servo kütüphanesi çağırıyoruz ( kütüphane eklemeyi daha önce görmüştük) . myservo isimli nesne oluşturuluyor, girisServo, ve cikisServo tamsayı değişkenleri tanımlanıyor. Motor pini burada değil setup kısmında myservo.attach komutu ile yapılıyor. Loop kısmındaki değişikliklik ise önce girişten okunan değer 0 – 1023 aralığından, servo’nun dönüş (açı) aralığı olan 0 – 180 arasına dönüştürülüyor. Sonraki değişiklik ise analogWrite yerine myservı.write komutu ile dönüş sağlanıyor. Hepsi bu kadar.
#include <Servo.h>
Servo myservo;
#define potPinServo A0
int girisServo, cikisServo;
void setup()
{
myservo.attach(9);
Serial.begin (9600);
pinMode(potPinServo, INPUT);
}
void loop()
{
girisServo = analogRead(potPinServo);
cikisServo = map(girisServo, 0, 1023, 0, 180);
myservo.write(cikisServo);
Serial.print(“cikisServo = “);
Serial.println(cikisServo);
delay (10);
}
Bu seferlik de bu kadar. Görüşmek dileği ile hoşça kalın…
Kodlar: