Elle Uzaktan Kontrollü Araba Uygulaması
Görseldeki eldiven üzerine yerleştirilmiş verici devresi görülmektedir. Görseldeki vericide kullanılan MPU6050 sensörü küçük deney borduna SDA pini A4, SCL pini A5’e gelecek şekilde takılmıştır. Görseldeki alıcı devresinde nRF24L01+ modül kullanılarak kablosuz iletişim uygulaması yapılmıştır. nRF24L01+ modülü Arduino ile haberleşirken SPI protokolünü, MPU6050 ivme sensörü I2C protokolünü kullanmaktadır. İvme sensörünün x ve y ekseninde -16384 ile 16384 arasında ürettiği 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ılarak pozitif değer PWM olarak geri ve sağ dönüşe uygulanır.


#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2
#include <Wire.h> // Mpu6050 ile I2C iletişim.
#include <MPU6050.h> //Mpu6050 kütüphanesi v0.3.0
MPU6050 ivme_sensor; // ivme_sensor isimli nesne oluştur.
int x, y, z; // x, y, z düzlemlerinin ivme değişkenleri.
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.
void setup() {
Wire.begin(); // I2C iletişimi başlat.
ivme_sensor.initialize(); // Mpu6050'yi başlat.
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() {
ivme_sensor.getAcceleration(&x, &y, &z); // Sensörden ivme bilgilerini al.
veri[0] = map(x, -16384, 16384, -255, 255 ); //X düzleminin verisi (Geri-İleri)
veri[1] = map(y, -16384, 16384, -255, 255); //Y düzeleminin verisi (Sağ-Sol)
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ı).
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) { //Sol.
analogWrite(IN1, 0);
analogWrite(IN2, veri[1]);
analogWrite(IN3, veri[1]);
analogWrite(IN4, 0);
}
if (veri[1] < -50) { // Sağ.
analogWrite(IN1, -veri[1]);
analogWrite(IN2, 0);
analogWrite(IN3, 0);
analogWrite(IN4, -veri[1]);
}
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.
byte solPwm, sagPwm;
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, IN2 sol tekerlek, IN3, 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.
int x = veri[0]; // x'in içeriği -255 ile 255 arasında değişmektedir. (Geri-İleri)
int y = veri[1]; // y'in içeriği -255 ile 255 arasında değişmektedir. (Sağ-Sol)
if (y > 0) { // y pozitif ise sola dön
sagPwm = x;
if (x > y / 3)
solPwm = x - y / 3;
}
else { // y negatif ise sağa dön
solPwm = x;
if (x > -(y / 3))
sagPwm = x + y / 3; // Sağda y negatiftir.
}
if (x > 50) { // İleri yönler.
analogWrite(IN1, solPwm);
analogWrite(IN2, 0);
analogWrite(IN3, sagPwm);
analogWrite(IN4, 0);
}
if (x < -50) { // Geri yönler.
analogWrite(IN1, 0);
analogWrite(IN2, 255 - solPwm);
analogWrite(IN3, 0);
analogWrite(IN4, 255 - sagPwm);
}
if (x > -50 && x < 50 && y > -50 && y < 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 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ı).
const byte buzzer = 4;
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); // Buzzer pin.
}
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) { //Sol.
analogWrite(IN1, 0);
analogWrite(IN2, veri[1]);
analogWrite(IN3, veri[1]);
analogWrite(IN4, 0);
}
if (veri[1] < -50) { // Sağ.
analogWrite(IN1, -veri[1]);
analogWrite(IN2, 0);
analogWrite(IN3, 0);
analogWrite(IN4, -veri[1]);
}
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] > 16000) {
digitalWrite(buzzer, HIGH); // Korna çal.
delay(200);
}
else
digitalWrite(buzzer, LOW); // Korna durdur.
}
}
#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2
#include <Wire.h> // Mpu6050 ile I2C iletişim.
#include <MPU6050.h> //Mpu6050 kütüphanesi v0.3.0
MPU6050 ivme_sensor; // ivme_sensor isimli nesne oluştur.
int ax, ay, az, gx, gy, gz; // x, y, z düzlemlerinin ivme değişkenleri.
RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[3]; // X ve y düzlemi için dizi tanımlama.
void setup() {
Wire.begin(); // I2C iletişimi başlat.
ivme_sensor.initialize(); // Mpu6050'yi başlat.
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() {
ivme_sensor.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); // Sensörden ivme bilgilerini al.
veri[0] = map(ax, -17000, 17000, -255, 255 ); //X düzleminin verisi (ileri-geri)
veri[1] = map(ay, -17000, 17000, -255, 255); //Y düzleminin verisi (sağ-sol)
veri[2] = gx;
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
#include <Wire.h> // Mpu6050 ile I2C iletişim.
#include <MPU6050.h> //Mpu6050 kütüphanesi v0.3.0
MPU6050 ivme_sensor; // ivme_sensor isimli nesne oluştur.
int ax, ay, az, gx, gy, gz; // x, y, z düzlemlerinin ivme değişkenleri.
RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[3]; // X ve y düzlemi için dizi tanımlama.
void setup() {
Wire.begin(); // I2C iletişimi başlat.
ivme_sensor.initialize(); // Mpu6050'yi başlat.
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() {
ivme_sensor.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //.getAcceleration(&x, &y, &z); // Sensörden ivme bilgilerini al.
veri[0] = map(ax, -16384, 16384, -255, 255 ); //X düzleminin verisi (Geri-İleri)
veri[1] = map(ay, -16384, 16384, -255, 255); //Y düzeleminin verisi (Sağ-Sol)
veri[2] = gx;
radio.write(&veri, sizeof(veri)); // veri değişkenindeki bilgiyi nRF24L01+'ya gönder.
Serial.print(ax);
Serial.print(" ");
Serial.println(ay);
}