7 Ağustos 2016 Pazar

ARDUINO ILE ARABA YAPIMI

Arduino ile Yer çekimi sensörüne baglı araba yapımını anlatacağım. Kablosuz veri iletişimi ile gerçekleşecek olan bu işlem yer çekimine bağlı olarak arabayı hareket ettirecektir.
REKLAM ALANI
İhtiyaç listemize bir bakalım.
  • iki adet arduino nano
  • dört adet 3.7v lion pil
  • motor sürücü (L298N)
  • 2 dc motor tekerli
  • 433mhz rf transmitter ve receiver
  • bir oyuncak araba
  • ivir zivir işlemleri icin kablo
  • Yerçekimi sensörü(MPU6050)
Kumanda

Kumandamıza öncelikle yerçekimi sensörünü bağlayalım resmi ben çizemediğim için googledan aldım :)

Şekildeki gibi transmitterida baglarsak kumandamiz hazir sayırlır. Ama dikkat etmemiz gerekn şey mutlaka bir anten görevi görecek kabloyu anten kısmına bağlamaktır. Anten bağlandığında çekim kuvveti oldukça artıyor

Şimdi kaynak kodlarımızı nasıl yazacağımıza geçelim
Kütüphane ve değişkenlerimizi ekleyelim
#include "I2Cdev.h"
#include "MPU6050.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
    #include "Wire.h"
#endif
MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;

  #include <VirtualWire.h>
#define OUTPUT_READABLE_ACCELGYRO
#define LED_PIN 13
bool blinkState = false;

Setup fonksiyonumuzu oluşturalım

void setup() {
    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
        Wire.begin();
    #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
        Fastwire::setup(400, true);
    #endif
    Serial.begin(9600);
    Serial.println("Initializing I2C devices...");
    accelgyro.initialize();
    
      //Veri Gönder
    vw_set_ptt_inverted(true);  // rf onay
    vw_setup(2000);            // baglanti hizi
    vw_set_rx_pin(8);         
    vw_rx_start();   
    vw_set_tx_pin(9);
}

Şimdide loop fonksiyonumuzu oluşturalım.
String x;
String y;
String veriler;
void loop() {
    accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
    #ifdef OUTPUT_READABLE_ACCELGYRO
     x=String(ax);
     y=String(ay);
   oku(x,y);
    #endif
}
Çağırdığımız oku  fonksiyonunda ne var bakalım
void oku(String x,String y)
{
veriler="";
  int xx = x.toInt();
  int yy = y.toInt();
 
    if(xx<-5000)
  {
    veriler+="sag";
  }
      if(xx>5000)
  {
    veriler+="sol";
  }
      if(yy<-5000)
  {
    veriler+="ileri";
  }
      if(yy>5000)
  {
    veriler+="geri";
  }
  Serial.println(veriler);
  gonder(veriler);

}

Son olarak dataları transmitter ile gönderiyoru
void gonder(String veri)
{
  int verisay = veri.length() + 1;
  char veri_dizi[verisay];
  veri.toCharArray(veri_dizi, verisay);
  Serial.print(veri_dizi);
   const char *msg = veri_dizi;
   vw_send((uint8_t *)msg, strlen(msg));
   vw_wait_tx();          
   delay(100);
}

Herşeyi sorabilirsiniz tabiki. Bir sonraki dersimde araba ve motor kısmını anlatacağım.

Hiç yorum yok:

Yorum Gönder