Radyo Kontrollü Kumanda (RC) ile Arduino Kullanımı
Bu projede sizlere radyo kontrollü araç kumandası ile arduinoyu nasıl birlikte kullanabileceğimizi ve bu sayede uzak menzillerden karmaşık robot projelerini nasıl yönlendirebileceğimizi açıklamaya çalıştım. Umarım sizler için faydalı bir kaynak olmuştur.
Gerekli Malzemeler:
1 Adet RC Kumanda
1 Adet uyumlu ve bind edilmiş RC Alıcı
1 Adet Arduino kontrolcü
1 Adet SG90 servo (herhangi bir servo olabilir)
1 Adet Led ve 220Ohm direnç
5v Kaynak
Jumper Kablo vs.
Devre Şeması:
Ekleniyor
Arduino Kodu:
#include <Servo.h> //motor pinleri #define MotorL1 9 #define MotorL2 10 #define MotorLE 6 #define MotorR1 7 #define MotorR2 8 #define MotorRE 5 //alıcıdan arduinoya aldığımız kanallar const int ch1=A1; const int ch2=A2; const int ch4=A3; const int ch6=A4; //gerekli değişkenleri tanımladık int servodeger; int leddeger; int ilerideger, motorileri, motorgeri; int donusdeger, motorsag, motorsol; Servo servom; void setup() { Serial.begin(9600); //kanalları tanımladık pinMode(ch1,INPUT); pinMode(ch2,INPUT); pinMode(ch4,INPUT); pinMode(ch6,INPUT); pinMode(2,OUTPUT); //servoyu 3 nolu kanala taktık servom.attach(3); digitalWrite(2,LOW); } void loop() { //değerleri pulsein komutu ile okuyup değişkenlere atadık servodeger = pulseIn (ch4,HIGH); if (servodeger <1550 && servodeger >1450) servodeger=1500; leddeger = pulseIn (ch6,HIGH); donusdeger = pulseIn (ch1,HIGH); ilerideger = pulseIn (ch2,HIGH); servom.write(servodeger); motorileri=map(ilerideger,1920,1080,0,255); motorgeri=map(ilerideger,1080,1920,0,255); motorsag=map(donusdeger,1080,1920,0,255); motorsol=map(donusdeger,1920,1080,0,255); if (leddeger > 1300) {digitalWrite(2,HIGH);} else digitalWrite(2,LOW); if (ilerideger > 1550){ geri(motorgeri);} else if (ilerideger < 1450){ ileri(motorileri);} else if (donusdeger < 1450) {yerindesol(motorsol);} else if (donusdeger > 1550) {yerindesag(motorsag);} else dur(); Serial.print ("Ch1:"); Serial.println (servodeger); Serial.print ("Ch2a:"); Serial.println (motorileri); Serial.print ("Ch2b:"); Serial.println (motorgeri); Serial.print ("Ch6:"); Serial.println (leddeger); Serial.print ("Ch1:"); Serial.println (donusdeger); } void ileri(int ilerigeri){ // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif analogWrite(MotorRE, ilerigeri); // Sağ motorun hızı digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif analogWrite(MotorLE, ilerigeri); // Sol motorun hızı } void geri(int ilerigeri){ // Robotun geri hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, LOW); // Sağ motorun ileri hareketi pasif digitalWrite(MotorR2, HIGH); // Sağ motorun geri hareketi aktif analogWrite(MotorRE, ilerigeri); // Sağ motorun hızı digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi pasif digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi aktif analogWrite(MotorLE, ilerigeri); // Sol motorun hızı } void yerindesag(int sag){ // Robotun yerinde sağa dönme hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi pasif digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi aktif analogWrite(MotorRE, sag); // Sağ motorun hızı digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi aktif digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi pasif analogWrite(MotorLE, sag); // Sol motorun hızı } void yerindesol(int sol){ // Robotun yerinde sola dönme hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, LOW); // Sağ motorun ileri hareketi aktif digitalWrite(MotorR2, HIGH); // Sağ motorun geri hareketi pasif analogWrite(MotorRE, sol); // Sağ motorun hızı digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi pasif digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi aktif analogWrite(MotorLE, sol); // Sol motorun hızı } void dur(){ // Robotun durma hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, HIGH); digitalWrite(MotorR2, LOW); digitalWrite(MotorRE, LOW); digitalWrite(MotorL1, HIGH); digitalWrite(MotorL2, LOW); digitalWrite(MotorLE, LOW); }
Gerekli Malzemeler:
1 Adet RC Kumanda
1 Adet uyumlu ve bind edilmiş RC Alıcı
1 Adet Arduino kontrolcü
1 Adet SG90 servo (herhangi bir servo olabilir)
1 Adet Led ve 220Ohm direnç
5v Kaynak
Jumper Kablo vs.
Devre Şeması:
Ekleniyor
Arduino Kodu:
#include <Servo.h> //motor pinleri #define MotorL1 9 #define MotorL2 10 #define MotorLE 6 #define MotorR1 7 #define MotorR2 8 #define MotorRE 5 //alıcıdan arduinoya aldığımız kanallar const int ch1=A1; const int ch2=A2; const int ch4=A3; const int ch6=A4; //gerekli değişkenleri tanımladık int servodeger; int leddeger; int ilerideger, motorileri, motorgeri; int donusdeger, motorsag, motorsol; Servo servom; void setup() { Serial.begin(9600); //kanalları tanımladık pinMode(ch1,INPUT); pinMode(ch2,INPUT); pinMode(ch4,INPUT); pinMode(ch6,INPUT); pinMode(2,OUTPUT); //servoyu 3 nolu kanala taktık servom.attach(3); digitalWrite(2,LOW); } void loop() { //değerleri pulsein komutu ile okuyup değişkenlere atadık servodeger = pulseIn (ch4,HIGH); if (servodeger <1550 && servodeger >1450) servodeger=1500; leddeger = pulseIn (ch6,HIGH); donusdeger = pulseIn (ch1,HIGH); ilerideger = pulseIn (ch2,HIGH); servom.write(servodeger); motorileri=map(ilerideger,1920,1080,0,255); motorgeri=map(ilerideger,1080,1920,0,255); motorsag=map(donusdeger,1080,1920,0,255); motorsol=map(donusdeger,1920,1080,0,255); if (leddeger > 1300) {digitalWrite(2,HIGH);} else digitalWrite(2,LOW); if (ilerideger > 1550){ geri(motorgeri);} else if (ilerideger < 1450){ ileri(motorileri);} else if (donusdeger < 1450) {yerindesol(motorsol);} else if (donusdeger > 1550) {yerindesag(motorsag);} else dur(); Serial.print ("Ch1:"); Serial.println (servodeger); Serial.print ("Ch2a:"); Serial.println (motorileri); Serial.print ("Ch2b:"); Serial.println (motorgeri); Serial.print ("Ch6:"); Serial.println (leddeger); Serial.print ("Ch1:"); Serial.println (donusdeger); } void ileri(int ilerigeri){ // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif analogWrite(MotorRE, ilerigeri); // Sağ motorun hızı digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif analogWrite(MotorLE, ilerigeri); // Sol motorun hızı } void geri(int ilerigeri){ // Robotun geri hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, LOW); // Sağ motorun ileri hareketi pasif digitalWrite(MotorR2, HIGH); // Sağ motorun geri hareketi aktif analogWrite(MotorRE, ilerigeri); // Sağ motorun hızı digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi pasif digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi aktif analogWrite(MotorLE, ilerigeri); // Sol motorun hızı } void yerindesag(int sag){ // Robotun yerinde sağa dönme hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi pasif digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi aktif analogWrite(MotorRE, sag); // Sağ motorun hızı digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi aktif digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi pasif analogWrite(MotorLE, sag); // Sol motorun hızı } void yerindesol(int sol){ // Robotun yerinde sola dönme hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, LOW); // Sağ motorun ileri hareketi aktif digitalWrite(MotorR2, HIGH); // Sağ motorun geri hareketi pasif analogWrite(MotorRE, sol); // Sağ motorun hızı digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi pasif digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi aktif analogWrite(MotorLE, sol); // Sol motorun hızı } void dur(){ // Robotun durma hareketi için fonksiyon tanımlıyoruz. digitalWrite(MotorR1, HIGH); digitalWrite(MotorR2, LOW); digitalWrite(MotorRE, LOW); digitalWrite(MotorL1, HIGH); digitalWrite(MotorL2, LOW); digitalWrite(MotorLE, LOW); }
Yorumlar
Yorum Gönder