Uzaktan Kontrollü Araba Uygulaması

Görseldeki joystick modülünün 10 bitlik ADC’de aldığı değerler verilmiştir. Görselde joystick modülünün pin yapısı görülmektedir. Görsel 3.84’teki verici ve Görsel 3.85’teki alıcı devrelerinde birer adet nRF24L01+ modül kullanılarak kablosuz iletişim uygulaması yapılmıştır. nRF24L01+ modülü Arduino ile haberleşirken SPI protokolünü kullanır. Joystickle x ve y ekseninde 0-1023 arasında okunan 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ılıp pozitif değer PWM olarak geri ve sol dönüşe uygulanır.

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

int x, y; // x ve y düzlemlerinin değişkenleri.

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

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 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() {
  x = analogRead(A0); // joystick x ekseni bilgisini al.
  y = analogRead(A1); // joystick y ekseni bilgisini al.

  veri[0] = map(x, 0, 1023, -255, 255 ); //X düzleminin verisi (Geri-ileri).
  veri[1] = map(y, 0, 1023, -255, 255); //Y düzeleminin verisi (Sol-sağ).
  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ı).
// IN1 ve IN2 sol tekerlek, IN3 ve 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.

    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) { // Sağ.
      analogWrite(IN1, veri[1]);
      analogWrite(IN2, 0);
      analogWrite(IN3, 0);
      analogWrite(IN4, veri[1]);
    }
    if (veri[1] < -50) { //Sol.
      analogWrite(IN1, 0);
      analogWrite(IN2, -veri[1]);
      analogWrite(IN3, -veri[1]);
      analogWrite(IN4, 0);
    }
    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.

int veri[3];// X, y düzlemi ve sw 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 ve IN2 sol tekerlek, IN3 ve IN4 sağ tekerlek.
const byte buzzer = 11; // Buzzer pin.

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);
}

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) { // Sağ.
      analogWrite(IN1, veri[1]);
      analogWrite(IN2, 0);
      analogWrite(IN3, 0);
      analogWrite(IN4, veri[1]);
    }
    if (veri[1] < -50) { //Sol.
      analogWrite(IN1, 0);
      analogWrite(IN2, -veri[1]);
      analogWrite(IN3, -veri[1]);
      analogWrite(IN4, 0);
    }
    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] == 0)
      digitalWrite(buzzer, HIGH); // Korna çal.
    else
      digitalWrite(buzzer, LOW); // Korna durdur.
  }
}

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

int x, y; // x ve y düzlemlerinin değişkenleri.

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[3]; // x, y düzlemi ve korna için dizi tanımlama.
const byte sw=2; // sw (buton) pini.

void setup() {
  pinMode(sw, INPUT_PULLUP); // Butona basınca 0.
  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() {
  x = analogRead(A0);
  y = analogRead(A1);
  bool swDurum = digitalRead(sw);

  veri[0] = map(x, 0, 1023, -255, 255 ); //X düzleminin verisi (Geri-ileri).
  veri[1] = map(y, 0, 1023, -255, 255); //Y düzeleminin verisi (Sol-sağ).
  veri[2] = swDurum; //Butona basılma bilgisi. 0 basıldı, 1 basılmadı bilgisi.

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

Benzer Temrinler & Yazılar

  • Şifreli Kilit Uygulaması

    Görseldeki uygulamada tuş takımından doğru şifre girildiğinde step motor 90 °C’lik dönüş yapar. Geçerli ve geçersiz şifreler için farklı ses sinyalleri verir. #include <Keypad.h> //Tuş takımı kütüphanesi. byte hane = 0; char sifre[] = "123ABC"; // Kullanılacak şifre. char giris[sizeof(sifre)]; //Şifre uzunluğu kadar dizi oluştur. const byte buzzer = 1; // Buzzer pini. //—Tuş takımı…

  • RFID Uygulaması

    Görseldeki uygulamada RFID okuyucuya geçerli bir kart okutulduğunda seri ekranda “ge-çerli kart” yazar. Geçersiz kart okutulduğunda kartın ID’sini verir. ID’si programa dâhil edilenkartlar, geçerli kart olur. Kart geçerliyken çalışan kod blokuna istenen kodlar yazılarak istenenkontroller sağlanır. #include <SPI.h> // Dahili SPI kütüphanesi #include <MFRC522.h> // v1.4.9 #define reset 9 // Reset pini #define ss 10…

  • Keypad Uygulaması

    Görseldeki devrede tuş takımı uygulaması verilmiştir. Keypad kütüphanesini kurmak içinmenülerden ”Taslak  Library Ekle  Kütüphaneleri Yönet” seçeneğinden arama kutusuna“Keypad” yazılıp Keypad (Keypad by Mark Stanley and Alexander Brevig) kütüphanesi bulunarakkurulur. Daha sonra “Taslak  Library Ekle  Keypad” seçilerek programın başına eklenir. Buprogramın bir örneğine menülerden “Dosya  Örnekler  Keypad  CustomKeypad” adımlarıizlenerek…

  • 7 segment displayle dijital çıkış uygulaması yapmak

    Görselde ortak katotlu ve ortak anotlu 7 segment displayin yapısı, Görsel 2.25b’de ise dijital çıkış şeması ve devresi görülmektedir. Displayin a, b, c, d, e, f, g segmentleri sırasıylaArduino’nun 6, 5, 4, 3, 2, 1, 0 numaralı pinlerine bağlıdır. Ortak katot Arduino’nun GND ucunabağlıdır. Karar yapısı olarak switch case kullanılmıştır. Rakam değişkenin içeriğine göre ilgili…

  • Bilgisayardan Arduino’ya Veri Gönderme

    Bu uygulamada Serial.read() fonksiyonuyla USB kablo üzerinden bilgisayardan gelen verilerokunarak seri port ekranına yazdırılmıştır. Bilgisayardan Arduino’ya veri göndermek için seri portekranının üst kısmındaki kutuya karakter yazıp gönder düğmesine tıklanır Görselde Çokkarakterli metin bilgisini okumak için Serial.readString() fonksiyonu kullanılır. void setup() { Serial.begin(9600); //Seri iletişim başlatıldı. } void loop() { if (Serial.available()>0) { //Seri iletişimde veri…

  • Isı Sensörü Uygulaması

    Aşağıda LM35 sıcaklık sensörü pin yapısı ve uygulama devresi görülmektedir. LM35 sıcaklık sensörü 4-20 V’la beslenebilmektedir. Çıkış ucu ise 25 °C’de 250 mV gerilimvermektedir. Bu değer her 1 °C’de 10 mV değişim gösterir. 10 bitlik analog giriş 0-5 V için 0-1023 arası değer almaktadır. Analog girişteki gerilim (5/ 1023)*A0 işlemiyle volt cinsinden bulunur. Volt değeri…

Bir Yorum Yazın

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