Arduino el ile uzaktan kontrollü araba

Verici modülde kullanılan malzemeler:

  • MPU6050
  • NRF24L01
  • ARDUINO NANO
  • 9V PİL
  • PCB KLEMENS

 

Alıcı modülde kullanılan malzemeler:

  • NRF24L01
  • L298 MOTOR SÜRÜCÜ
  • 3S LIPO PİL
  • ARDUINO NANO
  • PCB ANAHTAR
  • PCB KLEMENS

Araç için:

  • 6V 250 Rpm Motor ve Tekerlek Seti
  • Araç gövdesi
  • Sarhoş teker

veya hepsi bir arada 2WD Robot Araba Kit

eldiven_verici_alici ares dosyaları

kutuphane dosyaları

Verici kodu:

#include <SPI.h> //nRF24L01+ ile haberleşmek için kullanılan SPI kütüphanesi
#include <RF24.h> //nRF24L01+ kütüphanesi
#include <Wire.h> //iletişim kütüphanesi
#include <I2Cdev.h> //MPU6050 ile haberleşme kütüphanesi
#include <MPU6050.h> //MPU6050 ana kütüphane

MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;

 

int data[2]; // X ve Y düzlemi için dizi tanımlama

RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL; //iletişim adresi

void setup(void){
Serial.begin(9600);
Wire.begin();
mpu.initialize(); //MPU başlat
radio.begin(); //nRF24 başlat
radio.openWritingPipe(pipe); //Alıcı adresini kur
}

void loop(void){

mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

 

data[0] = map(ax, -17000, 17000, 0, 250 ); //X düzleminin verisi (ileri-geri)
data[1] = map(ay, -17000, 17000, 0, 250); //Y düzeleminin verisi (sağ-sol)
radio.write(data, sizeof(data));
}

Alıcı kodu:

#include <SPI.h> //nRF24L01+ ile haberleşmek için kullanılan SPI kütüphanesi
#include <RF24.h> //nRF24L01+ kütüphanesi

//motor enable pinleri
const int enbA = 3;
const int enbB = 5;

//motor pinleri. zıt yöne çevirmek için pin numaralarını değiştirin.
const int IN1 = 4; //Sağ Motor (-)
const int IN2 = 2; //Sağ Motor (+)
const int IN3 = 7; //Sol Motor (+)
const int IN4 = 8; //Sol Motor (-)

// X ve Y düzlemi için dizi tanımlama
int data[2];

//CE ve CSN’nin bağlı olduğu pinler
RF24 radio(9,10);

//iletişim adresi
const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup(){
//motor pinlerini çıkış olarak ayarla
pinMode(enbA, OUTPUT);
pinMode(enbB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

Serial.begin(9600);
radio.begin(); //nRF24 iletişimini başlat
radio.openReadingPipe(1, pipe); //verici adresine ayarla
radio.startListening();
}

void loop(){
if (radio.available()){
radio.read(data, sizeof(data));

if(data[0] > 150){ //ileri
analogWrite(enbA, data[0]);
analogWrite(enbB, data[0]);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);

}

if(data[0] < 100){ //geri
analogWrite(enbA, data[0]);
analogWrite(enbB, data[0]);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}

if(data[1] > 150){ //sol
analogWrite(enbA, data[1]);
analogWrite(enbB, data[1]);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}

if(data[1] < 100){ //sağ
analogWrite(enbA, data[1]);
analogWrite(enbB, data[1]);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}

if(data[0] > 100 && data[0] < 150 && data[1] > 100 && data[1] < 150){
//arabayı durdur
analogWrite(enbA, 0);
analogWrite(enbB, 0);
}
}
}