Arduino İle NRF24L01 Kullanarak RC Araba Yapımı

0 100
Merhaba ben Atakan, bügün sizlerle nrf24l01 kablosuz haberleşme modülü kullanarak uzun menzilli bir RC Araba yapacağız, Hadi Başlayalım;

Öncelikle malzeme listesi;

  • 2 Adet Arduino (Nano Veya Uno)
  • 2 Adet Joystick
  • 2 Adet NRF24L01 Antenli modül
  • 1 Adet L298N Motor sürücü
  • 2 Adet DC motor
  • 2 Adet 9V pil ve Breadboard

Bu proje ile öğreneceklerimiz;

  • NRF24L01 modüllerinin haberleşmesi
  • Joystick modüllerinin kullanımı
  • Motor sürücü ile DC motor kontrolü
  • Ve 2 Arduino’nun kablosuz haberleşmesi

Ve şimdide devre şemalarını oluşturalım

Alıcı Devresi

 

Verici Devresi :

 

Verici (kumanda) Kodu :

#include <SPI.h>
#include <nRF24L01.h> // Çeşitli kütüphaneler dahil ediyoruz
#include <RF24.h>

#define CE_PIN 7 // CE pinini belirtiyoruz
#define CSN_PIN 8 // CSN pinini belirtiyoruz
#define x_axis A0 // 1.joysticten gelecek x verisinin pinini belirtiyoruz
#define y_axis A1 // 1.joysticten gelecek y verisinin pinini belirtiyoruz
#define x2_axisa A2 // 2. joystictenj gelecek x verisinin pinini belirtiyoruz
#define y2_axis A3 // 2. joystictenj gelecek y verisinin pinini belirtiyoruz

const uint64_t pipe = 0xE8E8F0F0E1LL; // Başka NRF modüllerinin sinyalleri ile karışmasın diye şifre atadık
RF24 radio(CE_PIN, CSN_PIN);
int data[0];
int data[1]; // Data adlı değişkenler tanımlıyoruz
int data[2];
int data[3];

void setup()
{
Serial.begin(9600); // seri iletişimi açtık
radio.begin(); // radio iletişimi açtık
radio.openWritingPipe(pipe);
}

void loop()
{

data[0] = analogRead(x_axis); // x verisini oku ve data 0 adında kaydet
data[1] = analogRead(y_axis); // y verisini oku ve data 1 adında kaydet
data[2] = analogRead(x2_axis); // x2 verisini oku ve data 2 adında kaydet
data[3] = analogRead(x2_axis); // y2 verisini oku ve data 3 adında kaydet
radio.write( data, sizeof(data) ); // bu verileri alıcıya data adında ilet

// hatalara karşı küçük bir önlem
Serial.print(analogRead(x_axis));
Serial.print(" ");
Serial.print(analogRead(A1));
Serial.print(" ");
//Serial.print(digitalRead(BUTON));
}
Alıcı (Araba) Kodu:

#include <SPI.h> // Gerekli kütüphaneleri dahil ettik dahil ettik
#include <nRF24L01.h>
#include <RF24.h>

#define CE_PIN 9 // CE pininin 9. pine bağlı olduğunu belirttik
#define CSN_PIN 10 // CSN pininin 10. pine bağlı olduğunu belirttik
const uint64_t pipe = 0xE8E8F0F0E1LL; // başka pir NRF modülü ile bağlantı karışmaması için şifre atadık
RF24 radio(CE_PIN, CSN_PIN);
int data[2]; // data adında bir değişken atadık
const int Motor1_Ileri = 7; // Sağ motorun ileri pinini belirttik
const int Motor1_Geri = 6;// sağ motorun geri pinini belirttik

const int Motor2_Ileri = 4;// Sol motorun ileri pinini belirttik
const int Motor2_Geri = 2;// Sol motorun geri pinini belirttik
void setup()
{
pinMode(Motor1_Ileri,OUTPUT);// Sağ motorun ileri pininden çıkış vereceğimizi belirttik belirttik
pinMode(Motor1_Geri,OUTPUT);// Sağ motorun geri pininden çıkış vereceğimizi belirttik belirttik
pinMode(Motor1_PWM,OUTPUT);// Sağ motorun PWM pininden çıkış vereceğimizi belirttik belirttik
pinMode(Motor2_Ileri,OUTPUT);// Sol motorun ileri pininden çıkış vereceğimizi belirttik belirttik
pinMode(Motor2_Geri,OUTPUT);// Sol motorun geri pininden çıkış vereceğimizi belirttik belirttik
pinMode(Motor2_PWM,OUTPUT);// Sol motorun PWM pininden çıkış vereceğimizi belirttik belirttik
Serial.begin(9600);// Seri iletişimi başlattık...
radio.begin();// Radio haberleşmeyi başlattık...
radio.openReadingPipe(1,pipe);
radio.startListening();;
}

void loop() {
if ( radio.available() ) // Radio iletişimi başlat ve...
{
int y = data[1];// Gelen y verisini data 1 olarak kaydet
int x = data[0];// Gelen x verisini data 0 olarak kardet
int y2 = data[3];// Gelen y2 verisini data 3 olarak kaydet
int x2 = data[4];// Gelen x2 verisini data 4 olarak kardet
radio.read( data, sizeof(data) ); //Ardından bu verileri oku
if(y >= 400 && y <= 600) { // Eğer gelen y verisi 400 den büyük 600 den küçük ise
digitalWrite(Motor1_Ileri,LOW);
digitalWrite(Motor1_Geri,LOW); // Hareket etme
digitalWrite(Motor2_Ileri,LOW);
digitalWrite(Motor2_Geri,LOW);
}
if(y >= 800 && y <= 1023) { // Gelen y verisi 800 den büyük 1023 den küçük ise
digitalWrite(Motor1_Ileri,LOW);
digitalWrite(Motor1_Geri,HIGH);// Sağ motoru geri dönder
digitalWrite(Motor2_Ileri,LOW);
digitalWrite(Motor2_Geri,HIGH);// Sol motor geri dönder
}
if(y >= 0 && y <= 450) { // Gelen y verisi 0 dan büyük 450 den küçük ise
digitalWrite(Motor1_Ileri,HIGH);// Sağ motor ileri dönder
digitalWrite(Motor1_Geri,LOW);
digitalWrite(Motor2_Ileri,HIGH);// Sol motor ileri dönder
digitalWrite(Motor2_Geri,LOW);
}
if(x2 >= 0 && x2 <= 450) { // gelen x verisi 0 dan büyük 450 den küçük ise
digitalWrite(Motor1_Ileri,LOW);
digitalWrite(Motor1_Geri,HIGH);// Sağ motoru geri dönder
digitalWrite(Motor2_Ileri,HIGH);// Sol motor ileri dönder
digitalWrite(Motor2_Geri,LOW);
}
if(x2 >= 600 && x2 <= 1023) { //gelen x verisi 600 den büyük 1023 den küçük ise
digitalWrite(Motor1_Ileri,HIGH);//Sağ motor ileri döner
digitalWrite(Motor1_Geri,LOW);
digitalWrite(Motor2_Ileri,LOW);
digitalWrite(Motor2_Geri,HIGH); // Sol motor geri döner
}
}
}

Robotun ana mantığı kumandadan gelen x ve y verilerini değerlendiriyor ve bu verileri okuduktan sonra motor sürücü ile motorları kontrol ediyor.

 

Bunlar da İlgini Çekebilir

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.