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); }
No responses yet