Arduino İçin Çok İşlevli Bluetooth Kontrollü, Engelden Kaçan, Çizgi izleyen ve Kumandayla Kontrol Edilen Robot Kiti Kurulumu
Bluetooth çok fonksiyonlu araba el kitabı
Kısa bir giriş
ARDUINO Bluetooth çok fonksiyonlu araba, bir mikrodenetleyici öğrenen uygulama geliştirme sistemini, arduino mikro denetleyici serisi atmega-328’yi çekirdek olarak kullanıyor: Sonlandırma avı, engel önleme, kızılötesi uzaktan kumanda ve Bluetooth uzaktan kumanda işlevleri Kit, çok eğlenceli programlar içeriyor ve genişletilebilir Harici devre modülü, böylece otomobil özelliklerinin kullanımını arttırır.Kullanıcıların ARDUINO mikrodenetleyicisini sıkıcı teorik bilgiden öğrenmelerine izin vermek için tasarlanmış, eğlenceli SCM sistem geliştirme yetenekleri elde etmek için.
Parametreler
- Motor parametreleri:Gerilim aralığı: 6-9V, Redüksiyon oranı: 1 – 48 A
- Kontrol motor seçimi L298N sürücü modülü
- Akıllı araba uzaktan kumanda sisteminden oluşan kızılötesi uzaktan iletişim modülü
- Ultrasonik modül, araba engel önleme sistemi
- HC06 Bluetooth kablosuz modülü
- 7 -12V’luk harici voltaj girişi pil yuvası
Neler Yapılabilir :
- L298N motorlu sürücü kartı uygulamaları
- Akıllı araba izleme
- Ultrasonik engel önleme akıllı araba
- Kızılötesi uzaktan kumanda akıllı araba
- Arduino Bluetooth uzaktan kumanda programlanabilir akıllı araba
Kit Nelerden Oluşuyor
- Bluetooth çok fonksiyonlu araç kiti dahil
- 4 adet dişli motor.
- 4 adet yüksek kalite lastik
- 4 adet motor sabit adet
- 1 adet 100*213*3mm plaka
- 1 adet 100*213*5mm plaka
- 1 adet L298N motor sürücü kurulu
- 1 adet uno r3
- 1 adet sensör uzatma kurulu V5
- 1 adet tutucu
- 1 adet SG90 servo
- 1 adet ultrasonik sensör modülü
- 3 adet TCRT5000 izleme modülü
- 1 adet kızılötesi alıcı sensör modülü
- 1 adet uzaktan
- 1 adet 18650 pil kutusu
- 1 adet 18650 şarj
- 1 adet bluetooth modülü
- 1 adet 40pin dupont hattı
- 1 adet USB kablosu
- 1 adet vida kiti
Satın Almak için
İngilizce ve çince döküman için tıklayınız.
L298N motorlu sürücü kartı uygulaması:
L298N köprü sürücü kartı Lütfen burada (L298NdualH-köprü DC motor sürücü kartı el kitabı) bakınız, burada değil, bazı kullanıcılar iki DC motorun nasıl kontrol edileceğini bilmiyorlar, burada bazı ayrıntılar var.
Güç alanına giren ilk VMS sürücüsü, harici bir güç kaynağı ile erişilebilir, normalde 9V daha uygun, kurulun mantıksal kısmı güç alabilir, terminal bağlantısız kalabilir, aynı zamanda +5 V- + 7 V’ye erişebilir. İki DC motorun kontrolü için iki sıra üç iğneli kullanılır.EA, EB erişimi Motor kontrolü için ArduinoPWM arabirimleri, I1, I2, I3, I4 arabirimleri iki DC motorun öne, geriye, direksiyona ve frenlere kumanda etmek için kullanılır, sadece dijital Arduino’ya erişmek için arayüz.
Bu hazırlık çalışması tamamlandı, bir program yazabilirsiniz ve burada arabayı düz, geriye, sola çevirin, sağa dönelim, fren fonksiyonları referans için programa yazılır.
Kodumuz:
int pinI1 = 8 ;//Motor I1
int pinI2 = 9 ;//Motor I2
int speedpin = 11 ;// PWM EA bağlantısı
int pinI3 = 6 ;//Motor I1
int pinI4 = 7 ;//Motor I1
int speedpin1 = 10 ;// PWM EB bağlantısı
void setup ()
{
pinMode (pinI1, OUTPUT);
pinMode (pinI2, OUTPUT);
pinMode (speedpin, OUTPUT);
pinMode (pinI3, OUTPUT);
pinMode (pinI4, OUTPUT);
pinMode (speedpin1, OUTPUT);
}
void loop ()
{
//Düz Gitmesi için
analogWrite (speedpin, 100) ;
analogWrite (speedpin1, 100);
digitalWrite (pinI4, LOW) ;// DC motoru (sağ) saat yönünün tersine çevirir
digitalWrite (pinI3, HIGH);
digitalWrite (pinI1, LOW) ;//DC motoru (sol) saat yönünde çevirir
digitalWrite (pinI2, HIGH);
delay (2000);
//Geri
analogWrite (speedpin, 100) ;
analogWrite (speedpin1, 100);
digitalWrite (pinI4, HIGH) ; // DC motoru (sağ) saat yönünde çevirir
digitalWrite (pinI3, LOW);
digitalWrite (pinI1, HIGH) ;//DC motoru (sol) saat yönünün tersine çevirir
digitalWrite (pinI2, LOW);
delay (2000);
//Sola
analogWrite (speedpin, 60) ;
analogWrite (speedpin1, 60);
digitalWrite (pinI4, LOW) ;// DC motor (sağ) saat yönünün tersine çevirir
digitalWrite (pinI3, HIGH);
digitalWrite (pinI1, HIGH) ;// DC motoru (sol) saat yönünün tersine çevirir
digitalWrite (pinI2, LOW);
delay (2000);
//Sağa
analogWrite (speedpin, 60) ;
analogWrite (speedpin1, 60);
digitalWrite (pinI4, HIGH) ;//DC motoru(sağ) saat yönünde çevirir
digitalWrite (pinI3, LOW);
digitalWrite (pinI1, LOW) ;//DC motoru (sol) saat yönünde çevirir
digitalWrite (pinI2, HIGH);
delay (2000);
//Fren – Durması için
digitalWrite (pinI4, HIGH) ;//sağ motoru frenle
digitalWrite (pinI3, HIGH);
digitalWrite (pinI1, HIGH) ;// Sol Motoru Frenle
digitalWrite (pinI2, HIGH);
delay (2000);
}
Akıllı araba çizgi takibi (TCRT5000 kullanarak)Kodları:
İzleme modülü prensibi: TCRT5000 kızılötesi tüp işleri, renk kızılötesi yansıması kullanımı aynı değildir, yansıtılan sinyal yoğunluğu bir akım sinyaline dönüştürülür. Beyaz ve beyaz izleme modülü siyah etkili bir beyaz algılar aktif düşük, algılama yüksekliği 0 -3cm.
Not: Siyah beyaz izlemenin hassasiyetini ayarlamak için devre potansiyometresi düğmesini kullanabilirsiniz.
Robot tasarımında TCRT5000 kızılötesi boru, endüstriyel imalatta yaygın olarak kullanılmaktadır. Siyah beyaz izleme TCRT5000 robotlar, endüstriyel sayma sensörleri yapma olanağına sahiptir.
Kullanımı:
1 sensör arayüzü, sırasıyla, GND, VCC, OUT pinlerine sahiptir. Besleme tarafı için VCC ve GND, OUT sinyal çıkışıdır.
(2) bir nesne algılanırsa, düşük seviye çıkış sinyali terminali; hiçbir nesne algılanmazsa, sinyal tarafı yüksek çıktı.
3 ana yargı sinyali çıktısı 0 veya 1, nesnenin var olup olmadığını belirleyebilirsiniz.
Performans parametreleri:
- Algılama mesafesi, Beyazla ilgili test 2 cm. En uzak beyazdan farklı renk türüne bağlı.
- Besleme gerilimi : 2.5V ~ 12V, 12V değerini aşmayın. (Not: Alçak gerilim güç kaynağı kullanmak en iyisidir, güç kaynağı voltajı çok yüksek sensör ömrü 5V güç kaynağı daha kısalır)
- İşletim akımı, 5V olduğunda 18 ~ 20ma.Ancak sensör donanımı 18 ~ 20ma olarak ayarlandığında kapsamlı testten sonra Anti-sıkışma kabiliyeti başta olmak üzere mevcut en iyi performans.
- nesne algılanırsa, düşük seviye çıkış sinyali terminali; hiçbir nesne algılanmazsa, sinyal tarafı yüksek çıktı.
- TTL seviye sensörü çıkışı direkt olarak 3.3V veya 5V mikrodenetleyici IO portuna bağlanabilir.
Siyah veya beyaz çizgi algılama ilkesi
- Düzlemin rengi siyah olmadığında, bu özelliğin küçük siyah ışık yansıtması kullanın; sensör kızılötesi ışığı yayar ve çoğunlukla yansır. Düşük algılayıcı çıkış seviyesi0.
- Siyah yansıma kapasitesi zayıf olduğu için partide düz bir siyah çizgi, siyah çizgi sensörü olduğunda, yansıyan kızılötesi ışık nadiren eylem seviyesi sensörüne gelirse, sensör de 1 çıkışı verir.
- Sadece algılayıcının çıkışını belirlemek için mikro denetleyici kullanıyoruz 0 veya 1, siyah hat algılayabilecektir.
- Beyaz çizgi algılama ilkesi ve siyah çizgi, siyah çizgi etrafında beyaz çizgi, nispeten yakın beyaz çizgi algılama gibi siyah çizgi algılama ilkesi ve daha sonra ayarlanabilir direnç yukarıda kızılötesi sensörü ayarlamak, azaltılmış hassasiyet sadece Renk çevreye kadar algılanmaz, bu nedenle beyaz çizgiyi tespit edebilirsiniz
TCRT5000 Kullanım Kodu:
int pin = 7 ;
int val ;
void setup ()
{
pinMode (ledPin, OUTPUT) ;
Serial.begin (9600) ;
}
void loop ()
{
value val = digitalRead (pin) ;//değeri oku
Serial.println (val) ;//değeri serial porta yaz
}
Çizgi Takip Kodu:
Otomobil çizgi sensörleri sayesinde otomatik olarak siyah zemini algılayabilir ve DC motorlar sayesinde çizgi boyunca hareket eder.
Genel blok diyagramı:
Test (siyah çizgiyi oku ) -> Yazılım kontrolü-> Motoru çalıştır->Arabayı kontrol et
Arduino Kodumuz:
int MotorRight1 = 5;
int MotorRight2 = 6;
int MotorLeft1 = 10;
int MotorLeft2 = 11;
const int SensorLeft = 7; // Sol çizgi sensörü giriş pini
const int SensorMiddle = 4;// Orta çizgi sensörü giriş pini
const int SensorRight = 3; //Sağ çizgi sensörü giriş pini
int SL; // Sol çizgi Sensörü durumu
int SM; // Orta çizgi Sensörü durumu
int SR; // Sağ çizgi Sensörü durumu
void setup ()
{
Serial.begin (9600);
pinMode (MotorRight1, OUTPUT); // Pin 8 (PWM)
pinMode (MotorRight2, OUTPUT); // Pin 9 (PWM)
pinMode (MotorLeft1, OUTPUT); // Pin 10 (PWM)
pinMode (MotorLeft2, OUTPUT); // Pin 11 (PWM)
pinMode (SensorLeft, INPUT); // Sol Çizgi Sensörü
pinMode (SensorMiddle, INPUT) ;// Orta Çizgi Sensörü
pinMode (SensorRight, INPUT); // Sağ Çizgi Sensörü
}
void loop ()
{
SL = digitalRead (SensorLeft);
SM = digitalRead (SensorMiddle);
SR = digitalRead (SensorRight);
if (SM == HIGH) // orta sensör zemin siyahsa
{
if (SL == LOW & SR == HIGH) // sol beyaz, sağ siyahsa hafif sola dön
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
analogWrite (MotorLeft1, 0);
analogWrite (MotorLeft2, 80);
}
else if (SR == LOW & SL == HIGH) // sağ beyaz, sol siyahsa hafif sağa dön
{
analogWrite (MotorRight1, 0) ;
analogWrite (MotorRight2, 80);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
}
else // iki tarafta beyazsa düz git
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
analogWrite (MotorLeft1, 200);
analogWrite (MotorLeft2, 200);
analogWrite (MotorRight1, 200);
analogWrite (MotorRight2, 200);
}
}
else // sensörler beyaz alanda yani dışardaysa
{
if (SL == LOW & SR == HIGH) // sol beyaz, sağ siyahsa hafif sola dön
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
}
else if (SR == LOW & SL == HIGH) // sağ beyaz, sol siyahsa hafif sağa dön
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
}
else // robot beyaz alanda duruyorsa
{
digitalWrite (MotorRight1, HIGH);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, HIGH);
digitalWrite (MotorLeft2, LOW);;
}}}
Ultrasonik sensör ile Engel den Kaçan Araba Yapımı:
Arduino Kodumuz:
#Include <Servo.h>
int pinLB = 6; // L298 motor sürücümüzün LB bacağını 6 nolu pine bağlıyoruz
int pinLF = 9; // L298 motor sürücümüzün LF bacağını 9 nolu pine bağlıyoruz
int pinRB = 10; // L298 motor sürücümüzün RB bacağını 10 nolu pine bağlıyoruz
int pinRF = 11; // L298 motor sürücümüzün RF bacağını 11 nolu pine bağlıyoruz
/*
Ultrasonik sensörlerin dört bacağı vardır.
- VCC +5 V bağlantısı için
- TRIQ Giriş Sinyali
- ECHO Çıkış Sinyali
- GND Ground – Toprak için
*/
int inputPin = A0; // ultrasonic sensörün TRİQ bacağını analog A0 bağlıyoruz
int outputPin = A1; // ultrasonic sensörün ECHO bacağını analog A1 bağlıyoruz
/*
Ultrasonik Akıllı araba engelden kaçma işlemleri (ARDUINO)
L = Sol
R = Sağ
F = Ön
B = Sonra
*/
int Fspeedd = 0; // -Hızla
int Rspeedd = 0; //Doğru hız
int Lspeedd = 0; //Sol hız
int yön = 0; // Sol Ön Yazı = 8 sonra = 2 = 4 Sağ Ok = 6
Servo myservo; / / Myservo’yu ayarla
int delay_time = 250; //Servo motorları yönlendirdikten sonraki ayar zamanı
int Fgo = 8; // ileriye
int Rgo = 6; // Sağa
int Lgo = 4; // Sola
int Bgo = 2; // Terse
void setup ()
{
Serial.begin (9600);
pinMode (pinLB, OUTPUT);
pinMode (pinLF, OUTPUT);
pinMode (pinRB, OUTPUT);
pinMode (pinRF, OUTPUT);
pinMode (inputPin, INPUT);
pinMode (outputPin, OUTPUT);
myservo.attach (5); // Servo Motoru 5 nolu digital pine takıyoruz
}
void advance (int a) // ileri
{
digitalWrite (pinRB, LOW);// sağ arka motor hareketi
digitalWrite (pinRF, HIGH);
digitalWrite (pinLB, LOW);// sol arka motor hareketi
digitalWrite (pinLF, HIGH);
delay (a * 100);
}
void right (int b) // Sağa Dön (Tek tekerlek)
{
digitalWrite (pinRB, LOW); // sağ arka motor hareketi
digitalWrite (pinRF, HIGH);
digitalWrite (pinLB, HIGH);
digitalWrite (pinLF, HIGH);
delay (b * 100);
}
void left (int c) // Sola Dön (Tek tekerlek)
{
digitalWrite (pinRB, HIGH);
digitalWrite (pinRF, HIGH);
digitalWrite (pinLB, LOW);// sol arka motor hareketi
digitalWrite (pinLF, HIGH);
delay (c * 100);
}
void turnR (int d) //sağa dön
{
digitalWrite (pinRB, LOW); // sağ arka motor hareketi
digitalWrite (pinRF, HIGH);
digitalWrite (pinLB, HIGH);
digitalWrite (pinLF, LOW); // sol ön motor hareketi
delay (d * 100);
}
void turnL (int e) //sola dön
{
digitalWrite (pinRB, HIGH);
digitalWrite (pinRF, LOW); // sağ ön motor hareketi
digitalWrite (pinLB, LOW); // sol arka motor hareketi
digitalWrite (pinLF, HIGH);
delay (e * 100);
}
void stopp (int f) //Dur
{
digitalWrite (pinRB, HIGH);
digitalWrite (pinRF, HIGH);
digitalWrite (pinLB, HIGH);
digitalWrite (pinLF, HIGH);
delay (f * 100);
}
void back (int g) / / Check out
{
digitalWrite (pinRB, HIGH); // sağ arka motor hareketi
digitalWrite (pinRF, LOW);
digitalWrite (pinLB, HIGH); // sol arka motor hareketi
digitalWrite (pinLF, LOW);
delay (g * 100);
}
void detection () //servo motoru Üç açıda çevirerek bak (0 – 90 – 179)
{
int delay_time = 250;
ask_pin_F (); //Önde Oku
if (Fspeedd <10) // Öndeki mesafe 10 cmden az ise
{
stopp (1); // Çıktı verisini temizle
back (2); // 0.2 saniye göz atsın
}
if (Fspeedd <25) // Öndeki mesafe 25 cmden az ise
{
stopp (1); // Çıktı verisini temizle
ask_pin_L ();// Sola dön ve oku
delay (delay_time); //bir süre bekle
ask_pin_R (); //sağa dön ve oku
delay (delay_time); //bir süre bekle
if (Lspeedd> Rspeedd) // Soldaki mesafe sağdaki mesafeden büyükse
{
directionn = Rgo; // Sağa
}
if (Lspeedd <= Rspeedd) // Soldaki mesfe Sağdaki mesafeye eşit veya küçükse
{
directionn = Lgo; //sola dön
}
if (Lspeedd <10 && Rspeedd <10) // soldaki mesafe 10 cmde küçük ve sağdaki mesafe 10 cmden küçükse
{
directionn = Bgo; // geri dön
}
}
else // öndeki mesafe en az 25 cm ise
{
directionn = Fgo; // ileri git
}
}
void ask_pin_F () // öndeki mesafeyi ölç
{
myservo.write (90);//servo motoru öne bakacak şekilde çevir.
digitalWrite (outputPin, LOW);
delayMicroseconds (2);
digitalWrite (outputPin, HIGH);
delayMicroseconds (10);
digitalWrite (outputPin, LOW);
float Fdistance = pulseIn (inputPin, HIGH);
Fdistance = Fdistance/5.8/10;
Serial.print (“Öndeki mesafe:”);
Serial.println (Fdistance);
Fspeedd = Fdistance;
}
void ask_pin_L () //soldaki mesafeyi bul
{
myservo.write (5);
delay (delay_time);
digitalWrite (outputPin, LOW);
delayMicroseconds (2);
digitalWrite (outputPin, HIGH);
delayMicroseconds (10);
digitalWrite (outputPin, LOW);
float Ldistance = pulseIn (inputPin, HIGH);
Ldistance = Ldistance/5.8/10;
Serial.print (“Soldaki mesafe:”);
Serial.println (Ldistance);
Lspeedd = Ldistance;
}
void ask_pin_R () //sağdaki mesafeyi bul
{
myservo.write (177);//servo motoru sağa dönder.
delay (delay_time);
digitalWrite (outputPin, LOW);
delayMicroseconds (2);
digitalWrite (outputPin, HIGH);
delayMicroseconds (10);
digitalWrite (outputPin, LOW);
float Rdistance = pulseIn (inputPin, HIGH);
Rdistance = Rdistance/5.8/10;
Serial.print (“Sağdaki mesafe:”);
Serial.println (Rdistance);
Rspeedd = Rdistance;
}
void loop ()
{
myservo.write (90); // robot öne baksın
detection (); // yön tespiti yap ve sağa sola bakıp mesafeleri bul
if (directionn == 2) // ters dön
{
back (8);
turnL (2); // Biraz hafifçe sola doğru ilerle
Serial.print (“geri dön”);
}
if (directionn == 6) //sağa dön
{
back (1);
turnR (6); // Sağa dön
Serial.print (“Sağa Dön”);
}
if (directionn == 4) // sola dön
{
back (1);
turnL (6); //sola dön
Serial.print (“Sola Dön”);
}
if (directionn == 8) // ileri git
{
advance (1); //ileri git
Serial.print (“ileri Git”);
Serial.print (” “);
}
}
Kızılötesi Kumandayla uzaktan Kontrollü Robot Araç:
# Include <IRremote.h>
int RECV_PIN = A0;
int pinLB = 6 ;
int pinLF = 9 ;
int pinRB = 3 ;
int pinRF = 5 ;
long advence = 0x00EF 807F ;
long back = 0x00EFA 05F ;
long stop = 0x00EF 906F ;
long left = 0x00EF00FF;
long right = 0x00EF40BF;
IRrecv irrecv (RECV_PIN);
decode_results results;
void dump (decode_results * results) {
int count = results-> rawlen;
if (results-> decode_type == UNKNOWN)
{
Serial.println (“Could not decode message”);
}
else
{
if (results-> decode_type == NEC)
{
Serial.print (“Decoded NEC:”);
}
else if (results-> decode_type == SONY)
{
Serial.print (“Decoded SONY:”);
}
else if (results-> decode_type == RC5)
{
Serial.print (“Decoded RC5:”);
}
else if (results-> decode_type == RC6)
{
Serial.print (“Decoded RC6:”);
}
Serial.print (results-> value, HEX);
Serial.print (“(“);
Serial.print (results-> bits, DEC);
Serial.println (“bits)”);
}
Serial.print (“Raw (“);
Serial.print (count, DEC);
Serial.print (“):”);
for (int i = 0; i <count; i + +)
{
if ((i% 2) == 1) {
Serial.print (results-> rawbuf [i] * USECPERTICK, DEC);
}
else
{
Serial.print (- (int) results-> rawbuf [i] * USECPERTICK, DEC);
}
Serial.print (“”);
}
Serial.println (“”);
}
void setup ()
{
pinMode (RECV_PIN, INPUT);
pinMode (pinLB, OUTPUT);
pinMode (pinLF, OUTPUT);
pinMode (pinRB, OUTPUT);
pinMode (pinRF, OUTPUT);
Serial.begin (9600);
irrecv.enableIRIn ();
}
int on = 0;
unsigned long last = millis ();
void loop ()
{
if (irrecv.decode (& results))
{
if (millis () – last> 250)
{
on = on!;
/ / digitalWrite (8, on HIGH:? LOW);
digitalWrite (13, on HIGH:? LOW);
dump (& results);
}
if (results.value == advence)
{DigitalWrite (pinRB, LOW) ;
digitalWrite (pinRF, HIGH);
digitalWrite (pinLB, LOW) ;
digitalWrite (pinLF, HIGH);}
if (results.value == back)
{DigitalWrite (pinRB, HIGH) ;/
digitalWrite (pinRF, LOW);}
if (results.value == left)
{DigitalWrite (pinRB, LOW) ;
digitalWrite (pinRF, HIGH);
digitalWrite (pinLB, HIGH) ;
digitalWrite (pinLF, LOW);}
if (results.value == right)
{DigitalWrite (pinRB, HIGH) ;
digitalWrite (pinRF, LOW);
digitalWrite (pinLB, HIGH) ;
digitalWrite (pinLF, HIGH);}
if (results.value == stop)
{
digitalWrite (pinRB, HIGH) ;
digitalWrite (pinRF, HIGH);
digitalWrite (pinLB, HIGH) ;
digitalWrite (pinLF, HIGH);
}
last = millis ();
irrecv.resume ();
}
}
Bluetooth Kontrollü Robot Yapımı :
char val;
int ledpin = 13;
void setup ()
{
Serial.begin (9600);
pinMode (ledpin, OUTPUT);
}
void loop ()
{
val = Serial.read ();
if (val == ‘r’)
{
digitalWrite (ledpin, HIGH);
delay ((500);
digitalWrite (ledpin, LOW);
delay (500);
Serial.println (“keyes”);
}
}
Burada, Arduino Bluetooth uzaktan kumanda programlanabilir akıllı araba hakkında bilgi edineceğiz. Bluetooth ileri, geri, sola dönüş, sağa dönüş, vb. Basit tuşlar, bilgisayar ve cep telefonu iki kontrol modu ile kontrol edilebilir.
Bluetooth eşleştirmesiyle birlikte araç telefonunu ilk kez kullanmanız gerektiğinde (kablosuz cihaz konumundaki daha sonra eşleştirme yapıldıktan sonra), aşağıdaki ilk adımlara bakın:
1-Bluetooth’u açma Telefonu hatırlıyorum, Bluetooth yazılımını açın kullanıcıyı açmasını isteyecektir
2-Ardından, metin isteminde gösterildiği gibi, Bluetooth cihazlarını bağlayın, eşleştirilmiş Bluetooth cihazları tarar , aksi halde arabayı bağlayamazsınız.
3-Eşleşen araba, şifre “1234” deneyin.
Arduino Bluetooth uzaktan kumanda programlanabilir akıllı araba programı:
/ / *******************************
int MotorRight1 = 5;
int MotorRight2 = 6;
int MotorLeft1 = 10;
int MotorLeft2 = 11;
void setup ()
{
Serial.begin (9600);
pinMode (MotorRight1, OUTPUT); / / Pin 8 (PWM)
pinMode (MotorRight2, OUTPUT); / / Pin 9 (PWM)
pinMode (MotorLeft1, OUTPUT); / / Pin 10 (PWM)
pinMode (MotorLeft2, OUTPUT); / / Pin 11 (PWM)
}
void go () / / Forward
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
}
void left () / / turn right
{
digitalWrite (MotorRight1, HIGH);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
}
void right () / / turn left
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
digitalWrite (MotorLeft1, HIGH);
digitalWrite (MotorLeft2, LOW);
}
void stop () / / stop
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
}
void back () / / Check out
{
digitalWrite (MotorRight1, HIGH);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, HIGH);
digitalWrite (MotorLeft2, LOW);;
}
void loop ()
{
char val = Serial.read ();
Serial.write (val);
if (-1! = val) {
if (‘W’ == val)
go ();
else if (‘A’ == val)
left ();
else if (‘D’ == val)
right ();
else if (‘S’ == val)
back ();
else if (‘Q’ == val)
stop ();
delay (500);
}
else
{
/ / Stop ();
delay (500);
}
}
Tüm Fonksiyonları Bir arada olan Robot Yapımı :
# Include <IRremote.h>
# Include <Servo.h>
//*********************** motor pin’in tanımlamaları********************* ****
int MotorRight1 = 5;
int MotorRight2 = 6;
int MotorLeft1 = 10;
int MotorLeft2 = 11;
int counter = 0;
const int irReceiverPin = 2;//ÇIKIŞ sinyalleri Pin 2’ye bağlı IR alıcısı
char val;
//*********************** IRcode’u algılamak için ayarlayın ****************** *******
long IRfront = 0x00FFA25D;
long IRback = 0x00FF629D;
long IRturnright = 0x00FFC23D;
long IRturnleft = 0x00FF02FD;
long IRstop = 0x00FFE21D;
long IRcny70 = 0x00FFA857;
long IRAutorun = 0x00FF 906F ;
long IRturnsmallleft = 0x00FF22DD;
// *************************CNY70 pin ******************* *****************
const int SensorLeft = 7;// sol çizgi sensörü
const int SensorMiddle = 4; //orta çizgi sensörü
const int SensorRight = 3; //sağ çizgi sensörü
int SL; / / Left sensor status
int SM; / / The sensor status
int SR; / / Right sensor status
IRrecv irrecv (irReceiverPin);
decode_results results;
/ / ************************* ultrasonic pinleri ****************** ************
int inputPin = 13;
int outputPin = 12;
int Fspeedd = 0;
int Rspeedd = 0;
int Lspeedd = 0;
int directionn = 0;
Servo myservo;
int delay_time = 250;
int Fgo = 8;
int Rgo = 6;
int Lgo = 4; /
int Bgo = 2;
)
void setup ()
{
Serial.begin (9600);
pinMode (MotorRight1, OUTPUT);
pinMode (MotorRight2, OUTPUT);
pinMode (MotorLeft1, OUTPUT);
pinMode (MotorLeft2, OUTPUT);
irrecv.enableIRIn ();
pinMode (SensorLeft, INPUT);
pinMode (SensorMiddle, INPUT) ;
pinMode (SensorRight, INPUT);
digitalWrite (2, HIGH);
pinMode (inputPin, INPUT);
pinMode (outputPin, OUTPUT);
myservo.attach (9);
}
void advance (int a) //ileri
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
delay (a * 100);
}
void right (int b) //sağa dön
{
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
delay (b * 100);
}
void left (int c) //sola dön
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
delay (c * 100);
}
void turnR (int d)
{
digitalWrite (MotorRight1, HIGH);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
delay (d * 100);
}
void turnL (int e)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
digitalWrite (MotorLeft1, HIGH);
digitalWrite (MotorLeft2, LOW);
delay (e * 100);
}
void stopp (int f)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
delay (f * 100);
}
void back (int g)
{
digitalWrite (MotorRight1, HIGH);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, HIGH);
digitalWrite (MotorLeft2, LOW);;
delay (g * 100);
}
void detection ()
{
int delay_time = 250;
ask_pin_F ();
if (Fspeedd <10)
{
stopp (1);
back (2);
}
if (Fspeedd <25)
{
stopp (1);
ask_pin_L ();
delay (delay_time);
ask_pin_R ();
delay (delay_time);
if (Lspeedd> Rspeedd)
{
directionn = Lgo;
}
if (Lspeedd <= Rspeedd)
{
directionn = Rgo;
}
if (Lspeedd <15 && Rspeedd <15)
{
directionn = Bgo;
}
}
else
{
directionn = Fgo;
}
}
void ask_pin_F ()
{
myservo.write (90);
digitalWrite (outputPin, LOW);
delayMicroseconds (2);
digitalWrite (outputPin, HIGH);
delayMicroseconds (10);
digitalWrite (outputPin, LOW);
float Fdistance = pulseIn (inputPin, HIGH);
Fdistance = Fdistance/5.8/10;
Serial.print (“F distance:”);
Serial.println (Fdistance);
Fspeedd = Fdistance;
}
void ask_pin_L ()
{
myservo.write (177);
delay (delay_time);
digitalWrite (outputPin, LOW);
delayMicroseconds (2);
digitalWrite (outputPin, HIGH);
delayMicroseconds (10);
digitalWrite (outputPin, LOW);
float Ldistance = pulseIn (inputPin, HIGH);
Ldistance = Ldistance/5.8/10;
Serial.print (“L distance:”);
Serial.println (Ldistance);
Lspeedd = Ldistance;
}
void ask_pin_R ()
{
myservo.write (5);
delay (delay_time);
digitalWrite (outputPin, LOW);
delayMicroseconds (2);
digitalWrite (outputPin, HIGH);
delayMicroseconds (10);
digitalWrite (outputPin, LOW);
float Rdistance = pulseIn (inputPin, HIGH);
Rdistance = Rdistance/5.8/10;
Serial.print (“R distance:”);
Serial.println (Rdistance);
Rspeedd = Rdistance;
}
void loop ()
{
SL = digitalRead (SensorLeft);
SM = digitalRead (SensorMiddle);
SR = digitalRead (SensorRight);
performCommand ();
if (irrecv.decode (& results))
{
if (results.value == IRfront) //ileri
{
advance (10) ;
}
if (results.value == IRback)
{
back (10) ;
}
if (results.value == IRturnright)
{
right (6);
}
if (results.value == IRturnleft)
{
left (6);
}
if (results.value == IRstop)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
}
if (results.value == IRcny70) // çizgi moduna geçiliyor
{
while (IRcny70)
{
SL = digitalRead (SensorLeft);
SM = digitalRead (SensorMiddle);
SR = digitalRead (SensorRight);
if (SM == HIGH)
{
if (SL == LOW & SR == HIGH)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
analogWrite (MotorLeft1, 0);
analogWrite (MotorLeft2, 80);
}
else if (SR == LOW & SL == HIGH)
{
analogWrite (MotorRight1, 0) ;
analogWrite (MotorRight2, 80);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
}
else
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
analogWrite (MotorLeft1, 200);
analogWrite (MotorLeft2, 200);
analogWrite (MotorRight1, 200);
analogWrite (MotorRight2, 200);
}
}
else
{
if (SL == LOW & SR == HIGH)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, HIGH);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
}
else if (SR == LOW & SL == HIGH)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, HIGH);
}
else
{
digitalWrite (MotorRight1, HIGH);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, HIGH);
digitalWrite (MotorLeft2, LOW);;
}
}
if (irrecv.decode (& results))
{
irrecv.resume ();
Serial.println (results.value, HEX);
if (results.value == IRstop)
{
digitalWrite (MotorRight1, HIGH);
digitalWrite (MotorRight2, HIGH);
digitalWrite (MotorLeft1, HIGH);
digitalWrite (MotorLeft2, HIGH);
break;
}
}
}
results.value = 0;
}
//ultrasonic modu engelden kaçan robot modu
if (results.value == IRAutorun)
{
while (IRAutorun)
{
myservo.write (90);
detection ();
if (directionn == 8)
{
if (irrecv.decode (& results))
{
irrecv.resume ();
Serial.println (results.value, HEX);
if (results.value == IRstop)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
break;
}
}
results.value = 0;
advance (1);
Serial.print (“Advance”);
Serial.print (“”);
}
if (directionn == 2)
{
if (irrecv.decode (& results))
{
irrecv.resume ();
Serial.println (results.value, HEX);
if (results.value == IRstop)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
break;
}
}
results.value = 0;
back (8);
turnL (3);
Serial.print (“Reverse”);
}
if (directionn == 6)
{
if (irrecv.decode (& results))
{
irrecv.resume ();
Serial.println (results.value, HEX);
if (results.value == IRstop)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
break;
}
}
results.value = 0;
back (1);
turnR (6);
Serial.print (“Right”);
}
if (directionn == 4)
{
if (irrecv.decode (& results))
{
irrecv.resume ();
Serial.println (results.value, HEX);
if (results.value == IRstop)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
break;
}
}
results.value = 0;
back (1);
turnL (6);
Serial.print (“Left”);
}
if (irrecv.decode (& results))
{
irrecv.resume ();
Serial.println (results.value, HEX);
if (results.value == IRstop)
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
break;
}
}
}
results.value = 0;
}
// normal mod
else
{
digitalWrite (MotorRight1, LOW);
digitalWrite (MotorRight2, LOW);
digitalWrite (MotorLeft1, LOW);
digitalWrite (MotorLeft2, LOW);
}
irrecv.resume ();
}
}
void performCommand () {
if (Serial.available ()) {
val = Serial.read ();
}
if (val == ‘f’) {
advance (10);
} Else if (val == ‘z’) {
stopp (10);
} Else if (val == ‘b’) {
back (10);
} Else if (val == ‘y’) {
back (10);
} else if (val == ‘l’) {
turnR (10);
} Else if (val == ‘r’) {
turnL (10);
} Else if (val == ‘v’) {
stopp (10);
} Else if (val == ‘s’) {
stopp (10);
}
}