自制遥控小车,遥控距离可达2000米? (nrf24l01射频数块+Arduino nano+L297N)
Posted 弓长于水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自制遥控小车,遥控距离可达2000米? (nrf24l01射频数块+Arduino nano+L297N)相关的知识,希望对你有一定的参考价值。
之前介绍了用esp8266做了一个用手机app控制的WiFi小车,只要实现给小车的不断供网,基本实现了小车的无视距离范围的测试
没有看过的朋友可以去看看,传送门在下面:
不受距离限制的无线小车
但是做出来的小车也许不难发现控制的延迟度比较高,今天博主就给大家带来一个几乎0延迟的遥控小车,控制距离按照射频模块来说是有2000米距离,但是博主测试隔着墙体貌似只有50米到100米的控制距离
遥控小车
不多说直接进入正题
首先做我们这次的遥控小车需要什么呢
材料元件:
- 小车机身(包括4个轮子,4个电机)
- 2个nrf24l01射频模块
- 2个Arduino nano开发板
- 若干杜邦线(最好三种都有)
- 若干两脚立式按钮
- 1块小的面包板
- l298n(红板)
- 电源(可以使用充电宝,博主就是用的充电宝)
编程环境:arduino IDE
1、Arduino IDE根据自己的系统安装合适的版本
Arduino IDE的版本博主推荐1.8.9以上的版本,比较容易下载库
这次的项目用到的库有
#include “SPI.h”
#include “Mirf.h”
#include “nRF24L01.h”
#include “MirfHardwareSpiDriver.h”
在软件里面直接搜索添加下载即可
2,小车基本动作的实现方法以及L298N的原理
这里上篇文章也说过了,没有看过的朋友建议去上篇文章了解一下,当然,如果你只是想做出来,不用了解也能做出来
传送门:不受距离限制的无线小车
3,接线图
小车接线图
遥控器接线图
面包板上面的4个按钮就是前进后退左转右转,遥控器可以直接充电宝供电哦
这次的有点复杂而且博主画的不是很好看,大家见谅
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; //设置CE引脚为D9
Mirf.csnPin = 10; //设置CSN引脚为D10
Mirf.spi = &MirfHardwareSpi; //加载24L01 SPI
Mirf.init();
Mirf.setRADDR((byte *)"serv1"); //接收地址" "
Mirf.payload = sizeof(int); //数据类型(整数)
Mirf.channel = 6; //数据通道 3
Mirf.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()){ //如果接收到数据则执行
Mirf.getData((byte *)&Y); //接收数据
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; //设置CE引脚为D9
Mirf.csnPin = 10; //设置CSN引脚为D10
Mirf.spi = &MirfHardwareSpi; //加载24L01 SPI
Mirf.init(); //开始
Mirf.setTADDR((byte *)"serv1"); //发送到"接收地址"
Mirf.payload = sizeof(int); //数据类型(整数)
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); //发送
while(Mirf.isSending()){ //等待或继续发送
}
delay(100); // 等待20ms
}
烧录进去就可以控制小车了
遇到什么困难的地方可以联系博主,感谢您的浏览,不嫌弃的话点个收藏点赞,关注博主持续更新好玩的嵌入式项目
以上是关于自制遥控小车,遥控距离可达2000米? (nrf24l01射频数块+Arduino nano+L297N)的主要内容,如果未能解决你的问题,请参考以下文章