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);
 
}

Categories:

Tags:

No responses yet

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Dersler