KS0071 Keyestudio Mini Tank Robot Projeleri

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
18650 rechargeable battery * 2
18650 charger * 1
 
 
Arduino Uygulaması
 


thumb

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;


thumb

Click "Next”;


thumb

Ve sonra "Kur";


thumb

Kurulumun tamamlanmasını bekleyin, kapat'a tıklayın.


thumb

Aşağıdaki şekil Arduino 1.5.6'nın neye benzediğidir.


thumb

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.

thumb

"Bilinmeyen aygıtlar" a tıklayın, "Sürücü yazılımını güncelle" yi seçin.


thumb

Bu sayfada, "Sürücü yazılımı için bilgisayarıma göz atın" seçeneğini tıklayın.


thumb

"Sürücüler" dosyasını bulun.


thumb

Sonrakine tıkla"; Kuruluma başlamak için "Bu sürücü yazılımını yine de kur" seçeneğini seçin.


thumb

Yükleme tamamlandı; "Kapat" a tıklayın.


thumb

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.


thumb

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.


thumb

Ardından, COM bağlantı noktasını ayarlayın; "Araçlar" da "COM3" öğesini seçin.


thumb

Seçimden sonra, gösterilen alanın "Aygıt yöneticisi” ndeki ayarlarla aynı olduğunu görebilirsiniz.


thumb

Copy the example sketch and paste it to the IDE; click "Verify thumb” to check compiling mistakes; click "Upload thumb” to upload the program to the board.


thumb

After uploading is done, open "serial monitorthumb ”; enter "R”; click "Send”, the serial monitor will display "Hello World!” and the D13 LED will blink once.


thumb

Tebrikler! İlk eskiz yüklemeniz başarılı!

 

Proje Detayları :

 

Proje 1: Ultrasonik Sensör


thumb

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.
thumb

Ş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

Bağlantı şeması

thumb

thumb

thumb

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.
thumb


Proje 2: Bluetooth Modülü

Ks0071 2-1.png

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.

Bağlantı şeması

thumb

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


thumb thumb thumb

Proje 3: Engellerden Kaçma


thumb

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.

Şematik ve Bağlantı Şeması

thumb

thumb

Sample Code

/*   
    L = Left 
    R = Right 
    F = forward 
    B = backward
*/
#include  
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 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


thumb

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.

Şematik ve Bağlantı Şeması

thumb

thumb

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


thumb

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.


Şematik ve Bağlantı Şeması

thumb

thumb

Sample Code

/*   
    L = Left 
    R = Right 
    F = forward 
    B = backward
*/
#include  
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 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

Blog Etiketleri :
IdeaSoft® | E-Ticaret paketleri ile hazırlanmıştır.