KS0071 Keyestudio Mini Tank Robot Projeleri
Tanıtım
Mini tank robot, Arduino tabanlı bir mikrodenetleyicinin öğrenme uygulama geliştirme sistemidir. Ultrasonik engellerden kaçınma, bluetooth uzaktan kumanda gibi fonksiyonlara sahiptir. Bu kit birçok ilginç program içeriyor. Daha fazla fonksiyona sahip olmak için harici devre modülleri ile de genişletilebilir. Bu kit, Arduino'yu ilginç bir şekilde öğrenmenize yardımcı olmak için tasarlanmıştır. Eğlenirken Arduino MCU geliştirme yeteneğini öğrenebilirsiniz.
Parametreler
1. Motor parametreleri: 6V, 150rpm / dak
2. Motor kontrolü için L298P sürücü modülünü kullanın.
3. Ultrasonik modül ile donatılmış, önde engel olup olmadığını ve Tank
robotu ile engellerden kaçınma işlevini gerçekleştirmek için engeller
arasındaki mesafeyi tespit edebilir.
4. Bluetooth kablosuz modülü ile donatılmış, cep telefonu Bluetooth ile eşleştirdikten sonra robotu uzaktan kontrol edebilir.
5. Harici 7 ~ 12V güç kaynağına bağlanabilir; çeşitli sensör modülleri ile çeşitli fonksiyonları gerçekleştirebilir.
Bileşen Listesi
1. keyestudio UNO R3 controller * 1
2. keyestudio L298P shield * 1
3. keyestudio V5 sensor shield * 1
4. HC-SR04 ultrasonic sensor module * 1
5. keyestudio Bluetooth Module (HC-06) * 1
6. Plastic platform (PC) * 1
7. Servo motor * 1
8. Transparent Acrylic board * 1
9. Metal holder * 4
10. Tank driver wheel * 2
11. Tank load-bearing wheel * 2
12. Caterpillar band * 2
13. Metal motor * 2
14. Copper coupler * 2
15. 18650 2-cell battery case * 1
16. USB cable (1m) * 1
17. Copper bush * 2
18. Flange bearing * 4
19. Hexagon copper bush (M3*10MM) * 4
20. Hexagon copper bush (M3*45MM) * 4
21. Round Screw (M3*6MM) * 10
22. Round Screw (M4*35MM) * 4
23. Inner hexagon screw (M3*8MM) * 10
24. Inner hexagon screw (M3*20MM) * 6
25. Inner hexagon screw (M3*25MM) * 6
26. Inner hexagon screw (M4*10MM) * 6
27. Inner hexagon screw (M4*50MM) * 2
28. M3 Nut * 6
29. M4 self-locking nut * 2
30. M4 nut * 15
31. Connector wire (150mm, black) * 2
32. Connector wire (150mm, red) * 2
33. F-F Dupont wire (20CM, 4Pin) * 1
34. Supporting part (27*27*16MM, blue) * 2
35. Winding wire (12CM) * 1
- Self-prepare part
Giriş
Arduino nedir?
Arduino, açık kaynaklı bir donanım proje platformudur. Bu platform,
basit G / Ç işlevine sahip bir devre kartı ve program geliştirme ortamı
yazılımı içerir. İnteraktif ürünler geliştirmek için kullanılabilir.
Örneğin, birden fazla anahtar ve sensörün sinyallerini okuyabilir ve
ışığı, servo motoru ve diğer çeşitli fiziksel cihazları kontrol
edebilir. Robot alanında yaygın olarak kullanılmaktadır.
Arduino kurulumu ve program yüklemesi:
Öncelikle, Arduino geliştirme yazılımını indirin, aşağıdaki bağlantıyı tıklayın:
arduino-1.5.6-r2-windows.rar
İndirilen dosya bir arduino-1.5.6-r2-windows.zip sıkıştırılmış klasördür, sabit sürücünüze açın.
Arduino-1.5.6 .exe dosyasına çift tıklayın. "Kabul ediyorum" u tıklayın;
Click "Next”;
Ve sonra "Kur";
Kurulumun tamamlanmasını bekleyin, kapat'a tıklayın.
Aşağıdaki şekil Arduino 1.5.6'nın neye benzediğidir.
Sonra, Arduino sürücüsünü kuralım.Farklı işletim sistemleri için, yükleme yönteminde küçük bir fark olabilir. Aşağıda WIN 7'de bir örnek verilmiştir.
Arduino Uno'yu bilgisayarınıza ilk kez bağladığınızda, "Bilgisayar” -> "Özellikler” -> "Aygıt yöneticisi” ni sağ tıklayın, "Bilinmeyen aygıtlar” ı görebilirsiniz.
"Bilinmeyen aygıtlar" a tıklayın, "Sürücü yazılımını güncelle" yi seçin.
Bu sayfada, "Sürücü yazılımı için bilgisayarıma göz atın" seçeneğini tıklayın.
"Sürücüler" dosyasını bulun.
Sonrakine tıkla"; Kuruluma başlamak için "Bu sürücü yazılımını yine de kur" seçeneğini seçin.
Yükleme tamamlandı; "Kapat" a tıklayın.
Sürücü yüklendikten sonra tekrar "Aygıt yöneticisi" ne gidin. "Bilgisayar" -> "Özellikler" -> "Cihaz yöneticisi" üzerine sağ tıklayın, UNO cihazını aşağıdaki şekilde gösterildiği gibi, ayrıca Com port bilgisi ile görebilirsiniz.
Aşağıda, "Merhaba Dünya!" adlı bir eskiz yükleme örneği verilmiştir.
İlk önce, Arduino IDE'yi açın. Bu örnek taslakta, Arduino'yu belirli
bir karakter dizisi "R" aldığında seri monitörde "Merhaba Dünya!"
görüntüleyecek şekilde programladık; ayrıca yerleşik D13 LED'i her "R"
aldığında bir kez yanıp sönecektir.
İlk önce panoyu kurun; "Araçlar" da "Arduino Uno" yu seçin.
Ardından, COM bağlantı noktasını ayarlayın; "Araçlar" da "COM3" öğesini seçin.
Seçimden sonra, gösterilen alanın "Aygıt yöneticisi” ndeki ayarlarla aynı olduğunu görebilirsiniz.
Copy the example sketch and paste it to the IDE; click "Verify ” to check compiling mistakes; click "Upload ” to upload the program to the board.
After uploading is done, open "serial monitor ”; enter "R”; click "Send”, the serial monitor will display "Hello World!” and the D13 LED will blink once.
Tebrikler! İlk eskiz yüklemeniz başarılı!
Proje Detayları :
Proje 1: Ultrasonik Sensör
Giriş
HC-SR04 Ultrasonik Sensör, çeşitli robotik projelerinde temel olarak
nesnelerden kaçınma için kullanılan çok uygun fiyatlı bir yakın mesafe
sensörüdür. Esasen Arduino gözlerinize mekansal farkındalık sağlar ve
robotunuzun bir masadan düşmesini veya düşmesini önleyebilir. Ayrıca
taret uygulamalarında, su seviyesi algılamada ve hatta park sensörü
olarak kullanılmıştır. Bu basit proje, HC-SR04 sensörünü bir Arduino ve
bir İşleme taslağı ile kullanarak bilgisayar ekranınızda düzgün, küçük
bir etkileşimli görüntü sağlayacak.
Şartname
Çalışma Gerilimi: DC 5V
Çalışma Akımı: 15mA
Çalışma Frekansı: 40Hz
Maksimum Aralık: 4m
Min Aralık: 2cm
Ölçüm Açısı: 15 derece
Tetik Giriş Sinyali: 10µS TTL puls
Yankı Çıkış Sinyali Girişi TTL kolu sinyali ve orantılı aralık
Sample Code
Wiring Method:
VCC to Arduino 5v
GND to Arduino GND
Echo to Arduino pin 4
Trig to Arduino pin 5
#define echoPin 4 // Echo Pin #define trigPin 5 // Trigger Pin #define LEDPin 13 // Onboard LED int maximumRange = 200; // Maximum range needed int minimumRange = 0; // Minimum range needed long duration, distance; // Duration used to calculate distance void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(LEDPin, OUTPUT); // Use LED indicator (if required) } void loop() { /* The following trigPin/echoPin cycle is used to determine the distance of the nearest object by bouncing soundwaves off of it. */ digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); //Calculate the distance (in cm) based on the speed of sound. distance = duration/58.2; if (distance >= maximumRange || distance <= minimumRange){ /* Send a negative number to computer and Turn LED ON to indicate "out of range" */ Serial.println("-1"); digitalWrite(LEDPin, HIGH); } else { /* Send the distance to the computer using Serial protocol, and turn LED OFF to indicate successful reading. */ Serial.println(distance); digitalWrite(LEDPin, LOW); } //Delay 50ms before next reading. delay(50); }
Sonuç
Bağlantı ve yükleme sonrasında ultrasonik sensör algılama alanı
içerisinde engel algıladığında kendisi ile engel arasındaki mesafeyi
ölçmekte ve aşağıdaki şekilde gösterildiği gibi seri monitörde mesafenin
değeri gösterilmektedir.
Proje 2: Bluetooth Modülü
Giriş
Bu Bluetooth modülü, seri kablosuz veri aktarımını kolayca
gerçekleştirebilir. Çalışma frekansı, en popüler 2,4 GHz ISM frekans
bandı arasındadır (yani Endüstriyel, bilimsel ve tıbbi). Bluetooth 2.1 +
EDR standardını benimser. Bluetooth 2.1'de, farklı cihazların sinyal
iletim süresi 0,5 saniyelik bir aralıkta durur, böylece bluetooth
çipinin iş yükü önemli ölçüde azaltılabilir ve bluetooth için daha fazla
uyku süresi kaydedilebilir. Bu modül, kullanımı kolay ve genel tasarım /
geliştirme döngüsünü basitleştiren seri arabirim ile ayarlanır.
Özellikler
Bluetooth Protokolü: Bluetooth 2.1+ EDR standardı
USB Protokolü: USB v1.1 / 2.0
Çalışma Frekansı: 2.4GHz ISM frekans bandı
Modülasyon Modu: Gauss frekans Kaydırma Anahtarlama
İletim Gücü: ≤ 4dBm, ikinci aşama
Hassasiyet:% 0.1 Bit Hata Oranında 0.1-84dBm
İletim Hızı: 2.1Mbps (Maks) / 160 kbps (Asenkron) ; 1Mbps / 1Mbps (Senkron)
Güvenlik Özelliği: Kimlik doğrulama ve şifreleme
Desteklenen Yapılandırma: Bluetooth seri bağlantı noktası (büyük ve küçük)
Besleme Voltajı: 5V DC 50mA
Çalışma Sıcaklığı: -20 ila 55℃
Not: Test kodunu yüklemeden önce Bluetooth modülünü ekleyemiyoruz, aksi takdirde program yüklenemeyecektir. Test kodunu başarıyla yükledikten sonra, Bluetooth ve Bluetooth modülünü bağlayın, APP'yi eşleştirin ve bağlayın.
Sample Code
int val; int ledpin=13; void setup() { Serial.begin(9600); pinMode(ledpin,OUTPUT); } void loop() { val=Serial.read(); if(val=='a') { digitalWrite(ledpin,HIGH); delay(250); digitalWrite(ledpin,LOW); delay(250); Serial.println("keyestudio"); }}
Sonuç
Güç verildikten sonra, güç göstergesi D1 yanar ve Bluetooth
modülündeki LED yanıp söner; cep telefonunda Bluetooth'u açın,
eşleştirin, 1234'ü girin ve Şekil 1'de gösterildiği gibi eşleştirmeyi
bitirin; APP'yi açın — Bluetooth seri iletişim asistanı, Bluetooth'a
bağlayın, normal modu seçin, bağlantıyı tamamlayın ve Bluetooth
modülündeki LED Şekil 2'de gösterildiği gibi yanar; Asistana bir "a”
girin ve Şekil 3'te gösterildiği gibi içinde "keyesdudio” görüntüleyin.
Figure 1 - - - - - - - - - - - - Figure 2 - - - - - - - - - - - - - Figure 3
Proje 3: Engellerden Kaçma
Giriş
Bu proje, yazılım ve donanım tasarımı da dahil olmak üzere Arduino
tabanlı basit bir engellerden kaçınma tank robot sistemidir. Denetleyici
kısmı bir UNO kartıdır. Önde engel olup olmadığını tespit etmek ve
sinyali UNO'ya geri bildirmek için ultrasonik sensör ve servo motorlar
kullanılır. UNO, Tank hareket yönünü ayarlamak için motor hareketini
belirlemek ve kontrol etmek için sinyali analiz edecektir. Bu nedenle
tank robotu otomatik olarak engellerden kaçınabilir.
Çalışma prensibi
Ultrasonik aralık: kontrolör, çıkış pini yüksek seviyeli sinyali
aldığında 10 μs'den daha yüksek bir yüksek seviyeli sinyal gönderir,
zamanlayıcı açık olacaktır; sinyal düşük seviyeye değiştiğinde, bu
ultrasonik dalga alıcı-verici için kullanılan zamanlayıcı zaman
periyodunu okuyabiliriz. İletim hızı ile birlikte mesafeyi
hesaplayabiliriz.
Bir engele olan mesafeyi tespit etmek için ultrasonik sensörü
kullandıktan sonra, verilere göre Tankın hareketini kontrol
edebiliyoruz.
Engele olan mesafe <10 cm ise, Tank geriye doğru hareket eder;
mesafe> = 25cm ise, Tank ileri doğru hareket eder; mesafe <25cm
ise, sol ve sağ mesafeyi ölçmek için servo motorların hareketini kontrol
ederiz. Her iki mesafe de 10 cm'den küçükse, Tank geriye doğru hareket
eder; mesafe hem> = 10 cm ise ve soldaki mesafe sağdaki mesafeden
fazlaysa, Tank sola doğru hareket eder; soldaki mesafe <= sağdaki
mesafe ise, Tank sağa doğru hareket eder.
Sample Code
/* L = Left R = Right F = forward B = backward */ #includeint pinLB = 12; // define pin 12 int pinLF = 3; // define pin 3 int pinRB = 13; // define pin 13 int pinRF = 11; // define pin 11 //////////////////////////////// int inputPin = 4; // define pin for sensor echo int outputPin =5; // define pin for sensor trig int Fspeedd = 0; // forward speed int Rspeedd = 0; // right speed int Lspeedd = 0; // left speed int directionn = 0; // forward=8 backward=2 left=4 right=6 Servo myservo; // set myservo int delay_time = 250; // settling time after steering servo motor moving B int Fgo = 8; // Move F int Rgo = 6; // move to the R int Lgo = 4; // move to the L int Bgo = 2; // move B void setup() { Serial.begin(9600); // Define motor output pin pinMode(pinLB,OUTPUT); // pin 12 pinMode(pinLF,OUTPUT); // pin 3 (PWM) pinMode(pinRB,OUTPUT); // pin 13 pinMode(pinRF,OUTPUT); // pin 11 (PWM) pinMode(inputPin, INPUT); // define input pin for sensor pinMode(outputPin, OUTPUT); // define output pin for sensor myservo.attach(9); // Define servo motor output pin to D9 (PWM) } void advance() // move forward { digitalWrite(pinLB,LOW); // right wheel moves forward digitalWrite(pinRB, LOW); // left wheel moves forward analogWrite(pinLF,255); analogWrite(pinRF,255); } void stopp() // stop { digitalWrite(pinLB,HIGH); digitalWrite(pinRB,HIGH); analogWrite(pinLF,0); analogWrite(pinRF,0); } void right() // turn right (single wheel) { digitalWrite(pinLB,HIGH); // wheel on the left moves forward digitalWrite(pinRB,LOW); // wheel on the right moves backward analogWrite(pinLF, 255); analogWrite(pinRF,255); } void left() // turn left (single wheel) { digitalWrite(pinLB,LOW); // wheel on the left moves backward digitalWrite(pinRB,HIGH); // wheel on the right moves forward analogWrite(pinLF, 255); analogWrite(pinRF,255); } void back() // move backward { digitalWrite(pinLB,HIGH); // motor moves to left rear digitalWrite(pinRB,HIGH); // motor moves to right rear analogWrite(pinLF,255); analogWrite(pinRF,255); } void detection() // measure 3 angles (0.90.179) { int delay_time = 250; // stabilizing time for servo motor after moving backward ask_pin_F(); // read the distance ahead if(Fspeedd < 10) // if distance ahead is <10cm { stopp(); // clear data delay(100); back(); // move backward for 0.2S delay(200); } if(Fspeedd < 25) // if distance ahead is <25cm { stopp(); delay(100); // clear data ask_pin_L(); // read distance on the left delay(delay_time); // stabilizing time for servo motor ask_pin_R(); // read distance on the right delay(delay_time); // stabilizing time for servo motor if(Lspeedd > Rspeedd) // if distance on the left is >distance on the right { directionn = Lgo; // move to the L } if(Lspeedd <= Rspeedd) // if distance on the left is <= distance on the right { directionn = Rgo; // move to the right } if (Lspeedd < 10 && Rspeedd < 10) // if distance on left and right are both <10cm { directionn = Bgo; // move backward }} else // if distance ahead is >25cm { directionn = Fgo; // move forward }} void ask_pin_F() // measure the distance ahead { myservo.write(90); digitalWrite(outputPin, LOW); // ultrasonic sensor transmit low level signal 2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // ultrasonic sensor transmit high level signal10μs, at least 10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // keep transmitting low level signal float Fdistance = pulseIn(inputPin, HIGH); // read the time in between Fdistance= Fdistance/5.8/10; // convert time into distance (unit: cm) Fspeedd = Fdistance; // read the distance into Fspeedd } void ask_pin_L() // measure distance on the left { myservo.write(5); delay(delay_time); digitalWrite(outputPin, LOW); // ultrasonic sensor transmit low level signal 2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // ultrasonic sensor transmit high level signal10μs, at least 10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // keep transmitting low level signal float Ldistance = pulseIn(inputPin, HIGH); // read the time in between Ldistance= Ldistance/5.8/10; // convert time into distance (unit: cm) Lspeedd = Ldistance; // read the distance into Lspeedd } void ask_pin_R() // measure distance on the right { myservo.write(177); delay(delay_time); digitalWrite(outputPin, LOW); // ultrasonic sensor transmit low level signal 2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // ultrasonic sensor transmit high level signal10μs, at least 10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // keep transmitting low level signal float Rdistance = pulseIn(inputPin, HIGH); // read the time in between Rdistance= Rdistance/5.8/10; // convert time into distance (unit: cm) Rspeedd = Rdistance; // read the distance into Rspeedd } void loop() { myservo.write(90); // home set the servo motor, ready for next measurement detection(); // measure the angle and determine which direction to move if(directionn == 2) // if directionn= 2 { back(); delay(800); // go backward left() ; delay(200); // Move slightly to the left (to prevent stuck in dead end) } if(directionn == 6) // if directionn = 6 { back(); delay(100); right(); delay(600); // turn right } if(directionn == 4) // if directionn = 4 { back(); delay(600); left(); delay(600); // turn left } if(directionn == 8) // if directionn = 8 { advance(); // move forward delay(100); } }
Sonuç
Güç açıldıktan sonra araç çalışır ve bir engeli yakaladığında otomatik olarak engelden kaçınır.
Proje 4: Bluetooth Kontrollü Tank Robotu
Giriş
Bu proje, yazılım ve donanım tasarımı da dahil olmak üzere Bluetooth
iletişimine dayalı bir tank robot sistemidir. Denetleyici kısmı bir UNO
kartıdır. Cep telefonundan Bluetooth sinyalini almak ve sinyali UNO'ya
geri beslemek için bir Bluetooth modülü kullanılır. UNO, aracın hareket
yönünü ayarlamak için motor hareketini belirlemek ve kontrol etmek için
sinyali analiz edecektir. Bu nedenle tank robotu cep telefonu ile
kontrol edilebilir.
Çalışma prensibi
1. Bluetooth modülü UNO'ya bağlıdır; modül, bir Bluetooth APP aracılığıyla cep telefonuyla iletişim kurar.
2. Cep telefonundaki Bluetooth APP, Bluetooth modülüne "U” "D” "L” "R” "S” bilgilerini iletecektir.
3. Bluetooth modülü, bilgiyi UNO'ya iletir, böylece UNO alınan bilgiye göre araç hareketini belirleyebilir.
4. UNO bir "U" aldığında, araba dümdüz ileri gider; "D" aldığında,
araba geri gider; Sola dönmek için "L"; Sağa dönmek için "R"; ve
durdurma için "S".
Bluetooth Kullanımı
Ana kart + 5V'yi Bluetooth VCC'ye, GND'yi Bluetooth GND'ye, TX'i Bluetooth RX'e ve RX'i Bluetooth TX'e bağlayın.
Telefonunuzdaki Bluetooth'u açmayı unutmayın; Bluetooth APP'yi
açtığınızda, size hatırlatacaktır.Telefonunuzdaki Bluetooth cihazını
eşleştirin, arayın ve eşleştirin.
Cihazı eşleştirin, PIN No. 1234'tür.
Bluetooth APP'yi açın ve Bluetooth cihazını eşleştirin. Bluetooth
modülü eşleştirildikten sonra cep telefonuyla iletişim kurabilir.
Not: Test kodunu yüklemeden önce Bluetooth modülünü ekleyemiyoruz, aksi takdirde program yüklenemeyecektir. Test kodunu başarıyla yükledikten sonra, Bluetooth ve Bluetooth modülünü bağlayın, APP'yi eşleştirin ve bağlayın.
Sample Code
/* L = Left R = Right F = forward B = backward */ int pinLB = 12; // define pin 12 int pinLF = 3; // define pin 3 int pinRB = 13; // define pin 13 int pinRF = 11; // define pin 11 int val; void setup() { Serial.begin(9600); // define pin for motor output pinMode(pinLB,OUTPUT); // pin 12 pinMode(pinLF,OUTPUT); // pin 3 (PWM) pinMode(pinRB,OUTPUT); // pin 13 pinMode(pinRF,OUTPUT); // pin 11 (PWM) } void advance() // move forward { digitalWrite(pinLB,LOW); // right wheel moves forward digitalWrite(pinRB, LOW); // left wheel moves forward analogWrite(pinLF,255); analogWrite(pinRF,255); } void stopp() // stop { digitalWrite(pinLB,HIGH); digitalWrite(pinRB,HIGH); analogWrite(pinLF,0); analogWrite(pinRF,0); } void right() // turn right (single wheel) { digitalWrite(pinLB,HIGH); // left wheel moves forward digitalWrite(pinRB,LOW); // right wheel moves backward analogWrite(pinLF, 255); analogWrite(pinRF,255); } void left() // turn left (single wheel) { digitalWrite(pinLB,LOW); // left wheel moves forward digitalWrite(pinRB,HIGH); // right wheel moves backward analogWrite(pinLF, 255); analogWrite(pinRF,255); } void back() // move backward {digitalWrite(pinLB,HIGH); // motor moves to left rear digitalWrite(pinRB,HIGH); // motor moves to right rear analogWrite(pinLF,255); analogWrite(pinRF,255); } void loop() { val=Serial.read(); if(val=='U')advance(); if(val=='D')back(); if(val=='L')left() ; if(val=='R')right(); if(val=='S')stopp(); }
Sonuç
Bluetooth APP'ye bağlandığında, arabanın hareketi APP tarafından kontrol edilir.
Proje 5: Ultrasonik Değişen Tank Robotu
Giriş
3. projede, engellerden kaçınma işlevini gerçekleştirmek için tank
için ultrasonik sensör modülünü kullanıyoruz. 4. projede, tank için bir
HC-06 Bluetooth modülü kullanıyoruz, böylece tank bir cep telefonu
terminalinden kontrol edilebilir.
Bu proje proje 3 ve proje 4'e dayanmaktadır. Burada, aralıklandırma
için yankı sondaj yöntemini uyguluyoruz. Ultrasonik sensörün tetik ucu,
ultrasonik dalgayı belirli bir yönde başlatacaktır. Aynı zamanda
zamanlayıcı saymaya başlar; ultrasonik dalga bir engelle karşılaştığında
geri yansıtılır; yankı ucu sinyali aldığında, zamanlayıcı sayımı
durdurur. Dalganın hareket hızı ve hareket süresi ile fırlatma noktası
ile engel arasındaki mesafeyi hesaplayabiliriz.
Ayrıca, Tankın terminal ile iletişim kurması için HC-06 Bluetooth
modülünü kullanacağız. Tank ölçülen mesafeyi terminale gönderir, böylece
tank hareket halindeyken tank ile engel arasındaki mesafeyi net bir
şekilde görebiliriz.
Bu robot, kapalı bir alanda dış mekan keşiflerinde veya arazi keşiflerinde kullanılabilir.
Sample Code
/* L = Left R = Right F = forward B = backward */ #includeint pinLB = 12; // define pin 12 int pinLF = 3; // define pin 3 int pinRB = 13; // define pin 13 int pinRF = 11; // define pin 11 int inputPin = 4; // define pin for sensor echo int outputPin =5; // define pin for sensor trig int Fspeedd = 0; // forward speed int Rspeedd = 0; // right speed int Lspeedd = 0; // left speed int directionn = 0; // forward=8 backward=2 left=4 right=6 Servo myservo; // set myservo int delay_time = 250; // settling time after steering servo motor moving B int Fgo = 8; // Move F int Rgo = 6; // move to the R int Lgo = 4; // move to the L int Bgo = 2; // move B void setup() { Serial.begin(9600); // Define motor output pin pinMode(pinLB,OUTPUT); // pin 12 pinMode(pinLF,OUTPUT); // pin 3 (PWM) pinMode(pinRB,OUTPUT); // pin 13 pinMode(pinRF,OUTPUT); // pin 11 (PWM) pinMode(inputPin, INPUT); // define input pin for sensor pinMode(outputPin, OUTPUT); // define output pin for sensor myservo.attach(9); // Define servo motor output pin to D9 (PWM) } void advance() // move forward { digitalWrite(pinLB,LOW); // right wheel moves forward digitalWrite(pinRB, LOW); // left wheel moves forward analogWrite(pinLF,255); analogWrite(pinRF,255); } void stopp() // stop { digitalWrite(pinLB,HIGH); digitalWrite(pinRB,HIGH); analogWrite(pinLF,0); analogWrite(pinRF,0); } void right() // turn right (single wheel) { digitalWrite(pinLB,HIGH); // wheel on the left moves forward digitalWrite(pinRB,LOW); // wheel on the right moves backward analogWrite(pinLF, 255); analogWrite(pinRF,255); } void left() // turn left (single wheel) { digitalWrite(pinLB,LOW); // wheel on the left moves backward digitalWrite(pinRB,HIGH); // wheel on the right moves forward analogWrite(pinLF, 255); analogWrite(pinRF,255); } void back() // move backward { digitalWrite(pinLB,HIGH); // motor moves to left rear digitalWrite(pinRB,HIGH); // motor moves to right rear analogWrite(pinLF,255); analogWrite(pinRF,255); } void detection() // measure 3 angles (0.90.179) { int delay_time = 250; // stabilizing time for servo motor after moving backward ask_pin_F(); // read the distance ahead if(Fspeedd < 10) // if distance ahead is <10cm { stopp(); // clear data delay(100); back(); // move backward for 0.2S delay(200); } if(Fspeedd < 25) // if distance ahead is <25cm { stopp(); delay(100); // clear data ask_pin_L(); // read distance on the left delay(delay_time); // stabilizing time for servo motor ask_pin_R(); // read distance on the right delay(delay_time); // stabilizing time for servo motor if(Lspeedd > Rspeedd) // if distance on the left is >distance on the right { directionn = Lgo; // move to the L } if(Lspeedd <= Rspeedd) // if distance on the left is <= distance on the right { directionn = Rgo; // move to the right } if (Lspeedd < 10 && Rspeedd < 10) // if distance on left and right are both <10cm { directionn = Bgo; // move backward } } else // if distance ahead is >25cm { directionn = Fgo; // move forward }} void ask_pin_F() // measure the distance ahead { myservo.write(90); digitalWrite(outputPin, LOW); // ultrasonic sensor transmit low level signal 2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // ultrasonic sensor transmit high level signal10μs, at least 10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // keep transmitting low level signal float Fdistance = pulseIn(inputPin, HIGH); // read the time in between Fdistance= Fdistance/5.8/10; // convert time into distance (unit: cm) Fspeedd = Fdistance; // read the distance into Fspeedd Serial.print("Fspeedd = "); Serial.print(Fspeedd ); Serial.println(" cm"); } void ask_pin_L() // measure distance on the left { myservo.write(5); delay(delay_time); digitalWrite(outputPin, LOW); // ultrasonic sensor transmit low level signal 2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // ultrasonic sensor transmit high level signal10μs, at least 10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // keep transmitting low level signal float Ldistance = pulseIn(inputPin, HIGH); // read the time in between Ldistance= Ldistance/5.8/10; // convert time into distance (unit: cm) Lspeedd = Ldistance; // read the distance into Lspeedd Serial.print("Lspeedd = "); Serial.print(Lspeedd ); Serial.print(" cm "); } void ask_pin_R() // measure distance on the right { myservo.write(177); delay(delay_time); digitalWrite(outputPin, LOW); // ultrasonic sensor transmit low level signal 2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // ultrasonic sensor transmit high level signal10μs, at least 10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // keep transmitting low level signal float Rdistance = pulseIn(inputPin, HIGH); // read the time in between Rdistance= Rdistance/5.8/10; // convert time into distance (unit: cm) Rspeedd = Rdistance; // read the distance into Rspeedd Serial.print(" Rspeedd = "); Serial.print(Rspeedd ); Serial.println(" cm"); } void loop() { myservo.write(90); // home set the servo motor, ready for next measurement detection(); // measure the angle and determine which direction to move if(directionn == 2) // if directionn= 2 { back(); delay(800); // go backward left() ; delay(200); // Move slightly to the left (to prevent stuck in dead end) } if(directionn == 6) // if directionn = 6 { back(); delay(100); right(); delay(600); // turn right } if(directionn == 4) // if directionn = 4 { back(); delay(600); left(); delay(600); // turn left } if(directionn == 8) // if directionn = 8 { advance(); // move forward delay(100); }}
Sonuç
Bluetooth APP'ye bağlandığında, arabanın hareketi APP tarafından kontrol edilir.
Kaynaklar
Video
http://video.keyestudio.com/KS0071/
Tank Installation PDF:
https://drive.google.com/open?id=1IFGz6clYB0JbiMtdZZV4XH9IbIcwOOKg
Kullanici rehberi:
https://drive.google.com/open?id=1G03TVDzuoW6Bxo50nQkrhh1_JihFE1KW
Bluetooth Uygulaması:
https://drive.google.com/open?id=1cBEx0n0pGu_SYvGZbVpYg8zj1hKJoGFy
Kütüphane:
https://drive.google.com/open?id=1JvUVuz334EBc1ZZZLX9nRKapVPkcrc6f
Kodlar:
https://drive.google.com/open?id=1AgWsGJq9r9NpzWcfzRFex28YeLxDQtZ9
Yazılım Sürücüsü:
https://drive.google.com/open?id=1hYTPYzer2zm-egEcc3Y5vsZOUC0uFFl7