Evet driver mevcut sorunu da buldum. Bu sefer yazılımda bir eksik olduğunu fark ettim. Araca lipo pili taktığımda arka tekerler eldivenden komut vermesem biel kendi kendine dönüyor. Ön iki tekerlek ise hiç dönmüyor. Araç komple komutlarıma yanıt vermiyor.
Eldiven’e yüklediğim komut:
#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(7,8);
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));
}
Araca yüklediğim komut:
#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(7,8);
//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);
}
}
}
https://www.robotistan.com/Data/EditorFiles/rex4.pdf aracın devre şeması bu pdf’in en sonunda yer alıyor.