自制遥控小车,遥控距离可达2000米? (nrf24l01射频模块+Arduino nano+L297N)
之前介紹了用esp8266做了一個用手機app控制的WiFi小車,只要實現(xiàn)給小車的不斷供網(wǎng),基本實現(xiàn)了小車的無視距離范圍的測試
沒有看過的朋友可以去看看,傳送門在下面:
不受距離限制的無線小車
但是做出來的小車也許不難發(fā)現(xiàn)控制的延遲度比較高,今天博主就給大家?guī)硪粋€幾乎0延遲的遙控小車,控制距離按照射頻模塊來說是有2000米距離,但是博主測試隔著墻體貌似只有50米到100米的控制距離
遙控小車
不多說直接進入正題
首先做我們這次的遙控小車需要什么呢
材料元件:
編程環(huán)境:arduino IDE
1、Arduino IDE根據(jù)自己的系統(tǒng)安裝合適的版本
Arduino IDE的版本博主推薦1.8.9以上的版本,比較容易下載庫
這次的項目用到的庫有
#include “SPI.h”
#include “Mirf.h”
#include “nRF24L01.h”
#include “MirfHardwareSpiDriver.h”
在軟件里面直接搜索添加下載即可
2,小車基本動作的實現(xiàn)方法以及L298N的原理
這里上篇文章也說過了,沒有看過的朋友建議去上篇文章了解一下,當(dāng)然,如果你只是想做出來,不用了解也能做出來
傳送門:不受距離限制的無線小車
3,接線圖
小車接線圖
遙控器接線圖
面包板上面的4個按鈕就是前進后退左轉(zhuǎn)右轉(zhuǎn),遙控器可以直接充電寶供電哦
這次的有點復(fù)雜而且博主畫的不是很好看,大家見諒
4,遙控器以及小車代碼
Arduino的燒錄過程就不用我多說了吧,不知道的朋友可以去看我以前的文章
小車代碼:
#include "SPI.h" //24L01庫文件 #include "Mirf.h" #include "nRF24L01.h" #include "MirfHardwareSpiDriver.h"int Y;void setup(){ pinMode(2,OUTPUT);pinMode(3,OUTPUT);pinMode(4,OUTPUT);pinMode(5,OUTPUT);Mirf.cePin = 9; //設(shè)置CE引腳為D9Mirf.csnPin = 10; //設(shè)置CSN引腳為D10Mirf.spi = &MirfHardwareSpi; //加載24L01 SPIMirf.init();Mirf.setRADDR((byte *)"serv1"); //接收地址" "Mirf.payload = sizeof(int); //數(shù)據(jù)類型(整數(shù))Mirf.channel = 6; //數(shù)據(jù)通道 3Mirf.config(); Serial.begin(9600); //比特率 9600 }void forward(){digitalWrite(2,HIGH); digitalWrite(3,LOW); digitalWrite(4,HIGH); digitalWrite(5,LOW);delay(30); }void back(){digitalWrite(2,LOW); digitalWrite(3,HIGH); digitalWrite(4,LOW); digitalWrite(5,HIGH);delay(30); }void Turnleft(){digitalWrite(2,LOW); digitalWrite(3,HIGH); digitalWrite(4,HIGH); digitalWrite(5,LOW);delay(30); }void Turnright(){digitalWrite(2,HIGH); digitalWrite(3,LOW); digitalWrite(4,LOW); digitalWrite(5,HIGH);delay(30); }void stop_run(){digitalWrite(2,LOW); digitalWrite(3,LOW); digitalWrite(4,LOW); digitalWrite(5,LOW); }void loop(){if(Mirf.dataReady()){ //如果接收到數(shù)據(jù)則執(zhí)行Mirf.getData((byte *)&Y); //接收數(shù)據(jù)if(Y==5){forward();Turnleft(); }else if(Y==6){forward();Turnright();}else if(Y==7){back();Turnleft(); }else if(Y==8){back();Turnright(); }else if(Y==1){ forward();}else if(Y==2){back();}else if(Y==3){Turnright();}else if(Y==4){Turnleft();}else{stop_run();}Serial.print("Y=");Serial.println(Y);Mirf.rxFifoEmpty(); //清理24L01緩存} }遙控器代碼
#include "SPI.h" //24L01庫文件 #include "Mirf.h" #include "nRF24L01.h" #include "MirfHardwareSpiDriver.h"int X; int A; int B; int C; int D;void setup(){ pinMode(2,INPUT_PULLUP);pinMode(3,INPUT_PULLUP);pinMode(4,INPUT_PULLUP);pinMode(5,INPUT_PULLUP);Mirf.cePin = 9; //設(shè)置CE引腳為D9Mirf.csnPin = 10; //設(shè)置CSN引腳為D10Mirf.spi = &MirfHardwareSpi; //加載24L01 SPIMirf.init(); //開始Mirf.setTADDR((byte *)"serv1"); //發(fā)送到"接收地址"Mirf.payload = sizeof(int); //數(shù)據(jù)類型(整數(shù))Mirf.channel = 6;Mirf.config(); Serial.begin(9600); } void loop(){A = digitalRead(2);B = digitalRead(3);C = digitalRead(4);D = digitalRead(5);if(A==LOW && D==LOW){X=5;}else if(A==LOW && C==LOW){X=6; }else if(B==LOW && D==LOW){X=7; }else if(B==LOW && C==LOW){X=8; }else if(A==LOW){ X=1;}else if(B==LOW){X=2;}else if(C==LOW){X=3; }else if(D==LOW){X=4; }else{X=0; }Serial.print("X=");Serial.println(X);Mirf.send((byte *)&X); //發(fā)送while(Mirf.isSending()){ //等待或繼續(xù)發(fā)送}delay(100); // 等待20ms }燒錄進去就可以控制小車了
遇到什么困難的地方可以聯(lián)系博主,感謝您的瀏覽,不嫌棄的話點個收藏點贊,關(guān)注博主持續(xù)更新好玩的嵌入式項目
總結(jié)
以上是生活随笔為你收集整理的自制遥控小车,遥控距离可达2000米? (nrf24l01射频模块+Arduino nano+L297N)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot参数校验
- 下一篇: 静态网页与动态网页