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

  • Röleyle Dijital Çıkış Uygulaması

    Görselde röle modülünün beslemesi Arduino kartının 5 V ve GND uçlarından verilir. Modülün sinyal girişine Arduino’nun çıkış olarak ayarlanan 13 numaralı pini bağlanır. Modülün NO-COM uçlarına 220 V’la seri bağlanan lamba normalde sönüktür. Modülün sinyal girişi Arduino’nun 13 numaralı pininden lojik 1 (5 V) bilgisini aldığında röle içinde COM ucu NO kontağıyla temas eder ve…

  • LDR’yle Analog Giriş Uygulaması

    LDR, ışıkla direnci ters orantılı olarak değişen elemandır. 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ğlanarakgerilim bölücü oluşturulur. Bağlantı noktasının gerilim değişimi Arduino’nun analog girişineverilir const byte LED = 13; //LED değişkeninin içeriği 13 ile sabitlendi. int LDR; void setup() {  pinMode(LED, OUTPUT);  Serial.begin(9600); } void…

  • Servo Motor Uygulaması

    Servo, kapalı çevrim (geri besleme) kontrol sistemi anlamına gelir. Kapalı çevrim kontrol sistemi,istenen sonucu elde etmek yani motorun hızını ve yönünü ayarlamak için geri besleme sinyalinikullanır. Görselde servo motor geri besleme blok şeması ve kontrol ünitesi görülmektedir.DC motor, dişliler aracılığıyla çıkış miline bağlıdır ki bu mil potansiyometrenin milidir. Potansiyometre,motorun mevcut konumunun hedef konumla karşılaştırıldığı servo…

  • Parmak İzi Okuma Uygulaması

    Görseldeki parmak izi okuma uygulaması görülmektedir. UART haberleşme protokolü kullanılan sensör Arduino’da SoftwareSerial kütüphanesi kullanılarak 2 ve 3 numaralı pinlere bağlanmıştır. Görselde parmak izi sensörünün pin yapısı verilmiştir. Parmak izi kaydetme programıyla kaydedilen parmak izleri, parmak izi okuma programıyla test edilir. İşlemler seri ekran kullanılarak yapılır. VCC: 3,3 V-5 V besleme. GND: Topraklama pini. TX:…

  • Wi-Fi Kontrollü Araba Uygulaması NodeMCU 1.0 (ESP-12E) ve ESP32 kodu

    Görseldeki Wi-Fi kontrollü araba uygulamasında NodeMCU acces point (AP) modunda çalışmaktadır. NodeMCU’ya bağlanmak için kablosuz ağlardan “Robot” seçilir. Şifre “12345678” girilir. Bilgisayar veya akıllı telefondan tarayıcı (Chrome vb.) açılarak adres satırına 192.168.4.1 girilerek NodeMCU içindeki web server sayfasından araç kontrol edilir. /*  NodeMCU Access Point (AP) modunda çalışmaktadır.    Kablosuz ağlardan "Robot"a bağlanın. Şifre: 12345678    Tarayıcıdan…

  • Seri Port Ekran Uygulaması

    Görseldeki çıktılarda seri port ekranına Serial.println() fonksiyonuyla “MerhabaDünya” yazdırılmaktadır.İkinci programda butonla dijital giriş uygulamasında butonun durumu seri port ekranına yazdırılmaktadır void setup() {  Serial.begin(9600); //Seri iletişim baudrate ayarı yapıldı. } void loop() {  Serial.println("Merhaba Dünya!"); } const byte buton = 2; void setup() {  Serial.begin(9600); //Seri iletişim baudrate ayarı yapıldı.  pinMode(buton, INPUT_PULLUP); } void loop()…

Bir Yorum Yazın

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