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"
#endifMPU6050 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);
#endifSerial.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