coolwolf / 05/03/2016
Arduino NRF24 alıcı ile uzaktan kumandalı araba
Bu makalede NRF24 kullanarak yapılan bir alıcının çift tekerden tahrikli uzaktan kumandalı bir aracı sürmek için kullanılması ile ilgili bir örnek hazırlamaya çalıştık.
Öncelikle, bu alıcının vericisi bu adreste bulunduğu bilgisini verelim.
Arduino projesinin zip dosyası en altta verilmiştir.
Arduino kodu :
#include
#include "nRF24L01p.h"
nRF24L01p receiver(7,8);//CSN,CE
int M1Hiz=9;
int M1Arti=4;
int M1Eksi=5;
int M2Hiz=10;
int M2Arti=2;
int M2Eksi=3;
int XHiz=0;
int YHiz=0;
int NHiz=0;
void setup(){
delay(150);
Serial.begin(9600);
pinMode(M1Arti,OUTPUT);
pinMode(M1Eksi,OUTPUT);
pinMode(M2Arti,OUTPUT);
pinMode(M2Eksi,OUTPUT);
digitalWrite(M1Arti,LOW);
digitalWrite(M1Eksi,LOW);
digitalWrite(M2Arti,LOW);
digitalWrite(M2Eksi,LOW);
analogWrite(M1Hiz,0);
analogWrite(M2Hiz,0);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
receiver.channel(90);
receiver.RXaddress("Araba");
receiver.init();
}
String message;
void loop(){
if(receiver.available()){
receiver.read();
receiver.rxPL(message);
Serial.println(message);
KomutIsle(message);
message="";
}
}
void KomutIsle(String komut)
{
Serial.println("Komut:" + komut);
int ikinokta = komut.indexOf(':');
if(ikinokta<1) return;
if(komut.length()<3) return; String yon=komut.substring(0,ikinokta); if(yon=="X") { String deger=komut.substring(ikinokta+1); Serial.println("X-Deger:" + deger); if(!isValidNumber(deger)) return; NHiz=deger.toInt(); NHiz=526-NHiz; Serial.println("X-Hiz:"+String(NHiz)); if(NHiz>10)
{
digitalWrite(M1Arti,LOW);
digitalWrite(M1Eksi,HIGH);
digitalWrite(M2Arti,LOW);
digitalWrite(M2Eksi,HIGH);
}else if(NHiz<-10) { digitalWrite(M1Arti,HIGH); digitalWrite(M1Eksi,LOW); digitalWrite(M2Arti,HIGH); digitalWrite(M2Eksi,LOW); } NHiz=abs(NHiz)/2; if(NHiz>255) NHiz=255;
XHiz=NHiz;
YHiz=NHiz;
Serial.println("X-Motor Hizi:"+String(NHiz));
}else if(yon=="Y")
{
String deger=komut.substring(ikinokta+1);
Serial.println("Y-Deger:" + deger);
if(!isValidNumber(deger)) return;
int hiz=deger.toInt();
hiz=526-hiz;
Serial.println("Y-Hiz:"+String(hiz));
if(hiz>25) XHiz=XHiz+abs(hiz);
else if(hiz<-25) YHiz=YHiz+abs(hiz);
else XHiz=YHiz=NHiz;
}
analogWrite(M1Hiz,XHiz);
analogWrite(M2Hiz,YHiz);
}
boolean isValidNumber(String str){
for(byte i=0;i<str.length();i++)
{
if(isDigit(str.charAt(i))) return true;
}
return false;
}
NRF24 pin bağlantı şeklini tekrar vermekte fayda var :
Arduino proje dosyası :
[wpdm_package id=’4372′]
nRF24L01p Kütüphanesi:
[wpdm_package id=’4428′]