Arduino gyro kontrollu araç iletişim sorunu

IX Kayra

Centipat
Katılım
17 Şubat 2020
Mesajlar
4
Yer
Konya
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Merhaba, kolay gelsin. İnternet de görüp heves ettiğim bir projeydi. Arduino ile yapılan arabayı ivme ölçer kullanarak el hareketleri ile yönetme aşamasını tamamladım. Ama burada bırakmak istemiyorum. Önüne engel çıkınca eldivenin titremesini istiyorum. Bunun için arabaya ultrasonik mesafe sensörü ekledim (hc SR04). Eldiven ile araba iletişimini NRF24L01 ile yapıyordum ama arabadan eldivene mesafe sensöründeki veriyi gönderemiyorum. Kodlarda hata yapmış olabilirim. Hem araba hem de eldiven için kullandığım kodları ekliyorum.

Kod:
//Araba.
#include <SPI.h>
#include "RF24.h"
#include "I2Cdev.h"

int led = 4;
int echoPin = 2;
int trigPin = 3;

const int enbA = 3;
const int enbB = 5;

const int IN1 = 2; //Right Motor (-)
const int IN2 = 4; //Right Motor (+)
const int IN3 = 7; //Left Motor (+)
const int IN4 = 6; //Right Motor (-)

int RightSpd = 130;
int LeftSpd = 150;

int data[2];
int veri, olcum;

RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL;
const uint64_t pipes = 0xF0F0F0F0D2LL;

void setup(){
pinMode(enbA, OUTPUT);
pinMode(enbB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(led, OUTPUT);

Serial.begin(9600);
Serial.println(veri);
delay(50);
Wire.begin();
radio.begin();
radio.openReadingPipe(1, pipe);
radio.openWritingPipe(pipes);
radio.startListening();
}

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

if(data[0] > 380){
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}

if(data[0] < 310){
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}

if(data[1] > 180){
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}

if(data[1] < 110){
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}

if(data[0] > 330 && data[0] < 360 && data[1] > 130 && data[1] < 160){
analogWrite(enbA, 0);
analogWrite(enbB, 0);
}

if(veri<30)
{
digitalWrite(led,LOW);
}
else.
{
digitalWrite(led, HIGH);
}

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
olcum = pulseIn(echoPin, HIGH);
veri = olcum / 58.2;
delay(50);
radio.write(veri, sizeof(veri));
}
}

Kod:
//Eldiven.
#include <SPI.h>
#include "RF24.h"
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"

int titresim;

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

int data[2];
int veri;

RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL;
const uint64_t pipes =0xF0F0F0F0D2LL;

void setup(void){
Serial.begin(9600);
Serial.println(veri);
delay(50);
Wire.begin();
mpu.initialize();
radio.begin();
radio.openWritingPipe(pipe);
radio.openReadingPipe(1, pipes);
}

void loop(void){

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

data[0] = map(ax, -17000, 17000, 300, 400 );
data[1] = map(ay, -17000, 17000, 100, 200);
radio.write(data, sizeof(data));

if (radio.available()){
radio.read(veri, sizeof(veri));

if(veri!=0)
{
digitalWrite(titresim, LOW);
if(veri <50)
{
digitalWrite(titresim, HIGH);
}
else.
{
digitalWrite(titresim, LOW);}
}
}
}
 
NRF24 kullanması kolay bir radyo verici-alıcı değildir. Arduino güç beslemesi 55mA verebildiği için NRF24 çalışmaz bunun için farklı bir kaynaktan 3.3V vermek ya da 3.3V kısmına 10V 10uF kondansator bağlarsan anlık veri gönderimini sağlayabilecek akıma sahip olurlar. Kondansator bağlamanıza rağmen çalışmazsa buradan yazabilirsin. Elimde 4-5 tane var bende denerim. Teşekkürler :) Başarılar dilerim.
 
NRF24 Yerine kullanımı daha kolay radyo alıcı verici var mı ? Maliyeti diğerlerine göre daha düşük olduğu için tercih etmiştim.
 
NRF24 Yerine kullanımı daha kolay radyo alıcı verici var mı ? Maliyeti diğerlerine göre daha düşük olduğu için tercih etmiştim.
Arduino bakımından kullanımı kolay sayılabilir bir kaç tane var ama onların kütüphanesi olduğunu sanmıyorum. Siz kondansator ile deneyin eğer olmazsa diğerlerine bakarız. Elinizde güç kaynağı varsa arduinodan güç vermek yerine Arduinonun - si ile güç kaynağını birleştirip gücü güç kaynağından verebilirsin. Daha sağlıklı olur.
 
Arduino bakımından kullanımı kolay sayılabilir bir kaç tane var ama onların kütüphanesi olduğunu sanmıyorum. Siz kondansator ile deneyin eğer olmazsa diğerlerine bakarız. Elinizde güç kaynağı varsa arduinodan güç vermek yerine Arduinonun - si ile güç kaynağını birleştirip gücü güç kaynağından verebilirsin. Daha sağlıklı olur.
nrf24'lerin kondansatör bağlantılarını yaptım. Seri port ekranını çalıştırdığımda değer döndürmüyor. Sürekli dönen soru işareti ile karşılaşıyorum.
 
Serial monitörden izleyememeniz normal. Serialprint komutunu void setup içinde kullandığınız için program ilk açılışta bir kere yazıyor sonra bidaha yazdırmıyor. Döngü içerisine almanız gerek. Hangi işlemden sonra "veri" değişkenini yazdıracak ona göre yerleştirin.
 

Geri
Yukarı