Elle Uzaktan Kontrollü Araba Uygulaması

Görseldeki eldiven üzerine yerleştirilmiş verici devresi görülmektedir. Görseldeki vericide kullanılan MPU6050 sensörü küçük deney borduna SDA pini A4, SCL pini A5’e gelecek şekilde takılmıştır. Görseldeki alıcı devresinde nRF24L01+ modül kullanılarak kablosuz iletişim uygulaması yapılmıştır. nRF24L01+ modülü Arduino ile haberleşirken SPI protokolünü, MPU6050 ivme sensörü I2C protokolünü kullanmaktadır. İvme sensörünün x ve y ekseninde -16384 ile 16384 arasında ürettiği değerler map() foksiyonuyla -255 ile 255 arası değerlere dönüştürülerek alıcıya gönderilir. Alıcıda negatif değerler “-“ ile çarpılarak pozitif değer PWM olarak geri ve sağ dönüşe uygulanır.

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2
#include <Wire.h> // Mpu6050 ile I2C iletişim.
#include <MPU6050.h> //Mpu6050 kütüphanesi v0.3.0

MPU6050 ivme_sensor; // ivme_sensor isimli nesne oluştur.
int x, y, z; // x, y, z düzlemlerinin ivme değişkenleri.

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[2]; // X ve y düzlemi için dizi tanımlama.

void setup() {
  Wire.begin(); // I2C iletişimi başlat.
  ivme_sensor.initialize(); // Mpu6050'yi başlat.

  Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
  if (!radio.begin()) { // nRF24L01+'yı başlat.
    Serial.println("nRF24L01+ bağlantıları yanlış veya temazsızlık var. nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
    while (1) {}
  }
  radio.openWritingPipe(1234); // İletişim anahtarı 1234.
}

void loop() {
  ivme_sensor.getAcceleration(&x, &y, &z); // Sensörden ivme bilgilerini al.

  veri[0] = map(x, -16384, 16384, -255, 255 ); //X düzleminin verisi (Geri-İleri)
  veri[1] = map(y, -16384, 16384, -255, 255); //Y düzeleminin verisi (Sağ-Sol)
  radio.write(&veri, sizeof(veri)); // veri değişkenindeki bilgiyi nRF24L01+'ya gönder.
}

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> //  v1.4.2

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.

int veri[2];// X ve Y düzlemi için dizi tanımlama
const byte IN1 = 5, IN2 = 6, IN3 = 9, IN4 = 10; // PWM pinleri. (enA ve enB'de jumper takılı).

void setup() {
  Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
  if (!radio.begin()) { // nRF24L01+'yı başlat.
    Serial.println("nRF24L01+ bağlantıları yanlış veya nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
    while (1) {}
  }
  radio.openReadingPipe(0, 1234); // İletişim anahtarı 1234.
  radio.startListening(); // Alıcı moda geç.
}

void loop() {
  if (radio.available()) { // Veri geliyorsa...
    radio.read(&veri, sizeof(veri)); // Gelen veriyi veri değişkenine yükle.

    if (veri[0] > 50) { //İleri.
      analogWrite(IN1, veri[0]);
      analogWrite(IN2, 0);
      analogWrite(IN3, veri[0]);
      analogWrite(IN4, 0);
    }
    if (veri[0] < -50) { //Geri.
      analogWrite(IN1, 0);
      analogWrite(IN2, -veri[0]);
      analogWrite(IN3, 0);
      analogWrite(IN4, -veri[0]);
    }
    if (veri[1] > 50) { //Sol.
      analogWrite(IN1, 0);
      analogWrite(IN2, veri[1]);
      analogWrite(IN3, veri[1]);
      analogWrite(IN4, 0);
    }
    if (veri[1] < -50) { // Sağ.
      analogWrite(IN1, -veri[1]);
      analogWrite(IN2, 0);
      analogWrite(IN3, 0);
      analogWrite(IN4, -veri[1]);
    }
    if (veri[0] > -50 && veri[0] < 50 && veri[1] > -50 && veri[1] < 50) { // Dur.
      analogWrite(IN1, 0);
      analogWrite(IN2, 0);
      analogWrite(IN3, 0);
      analogWrite(IN4, 0);
    }
  }
}

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> //  v1.4.2

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
byte solPwm, sagPwm;
int veri[2];// X ve Y düzlemi için dizi tanımlama
const byte IN1 = 5, IN2 = 6, IN3 = 9, IN4 = 10; // PWM pinleri. (enA ve enB'de jumper takılı).
// IN1, IN2 sol tekerlek, IN3, IN4 sağ tekerlek.
void setup() {
  Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
  if (!radio.begin()) { // nRF24L01+'yı başlat.
    Serial.println("nRF24L01+ bağlantıları yanlış veya nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
    while (1) {}
  }
  radio.openReadingPipe(0, 1234); // İletişim anahtarı 1234.
  radio.startListening(); // Alıcı moda geç.
}

void loop() {
  if (radio.available()) { // Veri geliyorsa...
    radio.read(&veri, sizeof(veri)); // Gelen veriyi veri değişkenine yükle.

    int x = veri[0]; // x'in içeriği -255 ile 255 arasında değişmektedir. (Geri-İleri)
    int y = veri[1]; // y'in içeriği -255 ile 255 arasında değişmektedir. (Sağ-Sol)

    if (y > 0) { // y pozitif ise sola dön
      sagPwm = x;
      if (x > y / 3)
        solPwm = x - y / 3;

    }
    else { // y negatif ise sağa dön
      solPwm = x;
      if (x > -(y / 3))
        sagPwm = x + y / 3; // Sağda y negatiftir.
    }

    if (x > 50) { // İleri yönler.
      analogWrite(IN1, solPwm);
      analogWrite(IN2, 0);
      analogWrite(IN3, sagPwm);
      analogWrite(IN4, 0);
    }
    if (x < -50) { // Geri yönler.
      analogWrite(IN1, 0);
      analogWrite(IN2, 255 - solPwm);
      analogWrite(IN3, 0);
      analogWrite(IN4, 255 - sagPwm);
    }
    if (x > -50 && x < 50 && y > -50 && y < 50) { // Dur.
      analogWrite(IN1, 0);
      analogWrite(IN2, 0);
      analogWrite(IN3, 0);
      analogWrite(IN4, 0);
    }
  }
}

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> //  v1.4.2

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.

int veri[3];// X ve Y düzlemi için dizi tanımlama
const byte IN1 = 5, IN2 = 6, IN3 = 9, IN4 = 10; // PWM pinleri. (enA ve enB'de jumper takılı).
const byte buzzer = 4;
void setup() {
  Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
  if (!radio.begin()) { // nRF24L01+'yı başlat.
    Serial.println("nRF24L01+ bağlantıları yanlış veya nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
    while (1) {}
  }
  radio.openReadingPipe(0, 1234); // İletişim anahtarı 1234.
  radio.startListening(); // Alıcı moda geç.
  pinMode(buzzer, OUTPUT); // Buzzer pin.
}

void loop() {
  if (radio.available()) { // Veri geliyorsa...
    radio.read(&veri, sizeof(veri)); // Gelen veriyi veri değişkenine yükle.

    if (veri[0] > 50) { //İleri.
      analogWrite(IN1, veri[0]);
      analogWrite(IN2, 0);
      analogWrite(IN3, veri[0]);
      analogWrite(IN4, 0);
    }
    if (veri[0] < -50) { //Geri.
      analogWrite(IN1, 0);
      analogWrite(IN2, -veri[0]);
      analogWrite(IN3, 0);
      analogWrite(IN4, -veri[0]);
    }
    if (veri[1] > 50) { //Sol.
      analogWrite(IN1, 0);
      analogWrite(IN2, veri[1]);
      analogWrite(IN3, veri[1]);
      analogWrite(IN4, 0);
    }
    if (veri[1] < -50) { // Sağ.
      analogWrite(IN1, -veri[1]);
      analogWrite(IN2, 0);
      analogWrite(IN3, 0);
      analogWrite(IN4, -veri[1]);
    }
    if (veri[0] > -50 && veri[0] < 50 && veri[1] > -50 && veri[1] < 50) { // Dur.
      analogWrite(IN1, 0);
      analogWrite(IN2, 0);
      analogWrite(IN3, 0);
      analogWrite(IN4, 0);
    }
    if (veri[2] > 16000) {
      digitalWrite(buzzer, HIGH); // Korna çal.
      delay(200);
    }
    else
      digitalWrite(buzzer, LOW); // Korna durdur.
  }
}

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2
#include <Wire.h> // Mpu6050 ile I2C iletişim.
#include <MPU6050.h> //Mpu6050 kütüphanesi v0.3.0

MPU6050 ivme_sensor; // ivme_sensor isimli nesne oluştur.
int ax, ay, az, gx, gy, gz; // x, y, z düzlemlerinin ivme değişkenleri.

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[3]; // X ve y düzlemi için dizi tanımlama.

void setup() {
  Wire.begin(); // I2C iletişimi başlat.
  ivme_sensor.initialize(); // Mpu6050'yi başlat.

  Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
  if (!radio.begin()) { // nRF24L01+'yı başlat.
    Serial.println("nRF24L01+ bağlantıları yanlış veya temazsızlık var. nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
    while (1) {}
  }
  radio.openWritingPipe(1234); // İletişim anahtarı 1234.
}

void loop() {
  ivme_sensor.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);  // Sensörden ivme bilgilerini al.

  veri[0] = map(ax, -17000, 17000, -255, 255 ); //X düzleminin verisi (ileri-geri)
  veri[1] = map(ay, -17000, 17000, -255, 255); //Y düzleminin verisi (sağ-sol)
  veri[2] = gx;

  radio.write(&veri, sizeof(veri)); // veri değişkenindeki bilgiyi nRF24L01+'ya gönder.
}

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2
#include <Wire.h> // Mpu6050 ile I2C iletişim.
#include <MPU6050.h> //Mpu6050 kütüphanesi v0.3.0

MPU6050 ivme_sensor; // ivme_sensor isimli nesne oluştur.
int ax, ay, az, gx, gy, gz; // x, y, z düzlemlerinin ivme değişkenleri.

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[3]; // X ve y düzlemi için dizi tanımlama.

void setup() {
  Wire.begin(); // I2C iletişimi başlat.
  ivme_sensor.initialize(); // Mpu6050'yi başlat.

  Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
  if (!radio.begin()) { // nRF24L01+'yı başlat.
    Serial.println("nRF24L01+ bağlantıları yanlış veya temazsızlık var. nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
    while (1) {}
  }
  radio.openWritingPipe(1234); // İletişim anahtarı 1234.
}

void loop() {
  ivme_sensor.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);        //.getAcceleration(&x, &y, &z); // Sensörden ivme bilgilerini al.

  veri[0] = map(ax, -16384, 16384, -255, 255 ); //X düzleminin verisi (Geri-İleri)
  veri[1] = map(ay, -16384, 16384, -255, 255); //Y düzeleminin verisi (Sağ-Sol)
  veri[2] = gx;

  radio.write(&veri, sizeof(veri)); // veri değişkenindeki bilgiyi nRF24L01+'ya gönder.
Serial.print(ax);
Serial.print(" ");
Serial.println(ay);
 
}

Benzer Temrinler & Yazılar

  • DC Motor Uygulaması

    Elektrik enerjisini hareket enerjine çevirmeye yarayan mekanik aygıtlara motor denir. Elektrikmotorları AC ve DC olarak iki gerilim türünde çalışacak şekilde üretilir. Diğer birçok motor modelibu iki motor türünden geliştirilmiştir. AC motorlar genel olarak asenkron motor olarak iki türdeüretilir. Bunlar bir fazlı ve üç fazlı motorlar olmak üzere iki türdedir. Bu motorların dönüş yönünüdeğiştirmek için farklı…

  • Işık Sensörü Uygulaması

    Görseldeki devrede Arduino’nun 5 V gerilimi üzerine uygulanan LDR’nin direnç-gerilim değişiminin anlaşılabilmesi için 10 kΩ’luk bir direnç seri bağlanarak gerilim bölücü oluşturulur. Bağlantı noktasının gerilim değişimi Arduino’nun analog girişine verilir. Aydınlık ortamda LDR’nindirenci 10 kΩ’un altındadır. Karanlıkta (LDR elle kapatıldığında) LDR direnci MΩ değerine doğruartar. LDR üzerine düşen gerilim artacağı için LDR ucuna bağlı A0…

  • Bluetooth Uygulaması

    Bluetooth modülle haberleşmek için telefondan bluetooth bağlantısı açılarak hc-05 cihazı bulunur ve “Bluetooth aygıtını seç” düğmesiyle hc-05 seçilir. Varsayılan şifre “1234” veya “0000” dır.Bluetooth ile “A” harfi gönderilerek LED yakılır, “B” harfi gönderilerek LED söndürülür (Görseldeki). Bluetooth uygulama devresi Görselde görülmektedir. void setup() { pinMode(13, OUTPUT); Serial.begin(9600); // Bluetooth ile seri iletişimi başlat. } void…

  • Step Motor Uygulaması

    Step motorlar, adımlarla hareket eden DC motorlardır görselde Faz adı verilen gruplar hâlinde organize edilmiş çoklu bobinleri vardır. Her faza sırayla enerji verildiğinde motor her seferindebir adım olacak şekilde döner. Çift kutuplu step motorlar, iki bobinden oluşur ve genellikle bobinbaşına iki olmak üzere dört bağlantıya sahiptir. Tek kutuplu bir step motor elektriksel olarak ikiayrı bobinden…

  • Gaz Dedektörü Devresi

    Görseldeki MQ-2 gaz sensörü pin yapısı görülmektedir. MQ-2 gaz sensörü, 300 ile 10.000 ppm seviyesindeki yanıcı gaz ve sigara dumanını algılar. Görselde görülen gaz sensörü devresi, ortamda gaz algıladığında uyarı sinyalleri verir. VCC: 5 V besleme. GND: Toprak pini. D0: Dijital veri çıkışı. A0: Analog veri çıkışı. const byte buzzer = 13; // Buzzer'ın takılacağı…

  • Trafik Lambası Uygulaması

    Görselde röle modülünün beslemesi Arduino kartının 5 V ve GND uçlarından verilir. ModülünGörselde 13, 12, 11 numaralı pinlere sırasıyla kırmızı, sarı ve yeşil LED bağlanarak programda çıkış olarak ayarlanmıştır. Her durum için yanan lambalara lojik 1 bilgisi gönderilirken sönmesi istenen lambalara lojik 0 bilgisi gönderilir.Değişkenler (kirmizi, sari, yesil) byte (0-255 arası sayılar için) tipinde tanımlanarak…

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacaktır. Gerekli alanlar * ile işaretlenmiştir.