学习内容
利用NRF24L01 2.4G无线模块,按钮远程控制小车。
制作材料准备
Arduino UNO开发板*2
NRF24L01 2.4G无线模块*2
按钮开关模块*3
L298N电机驱动板
9V充电锂电池和9V电池扣子
装有两个直流电机马达小车
配套USB数据线
配套杜邦线若干
Arduino IDE软件

小车接线方式(仅供参考)
Arduino UNO1 <------> NRF24L01 2.4G无线模块1
3.3V <------> VCC
GND <------> GND
8 <------> CSN
7 <------> CE
13 <------> SCK
11 <------> MOSI
12 <------> MISO
Arduino UNO1 <------> L298N电机驱动板
5V <------> +5V
GND <------> GND
ENA <------> 2
IN1 <------> 3
IN2 <------> 4
ENB <------> 5
IN3 <------> 6
IN4 <------> 9
L298N电机驱动板 <------> 直流减速电机A
OUT1 <------> 一端接口
OUT2 <------> 另一端接口
L298N电机驱动板 <------> 直流减速电机B
OUT3 <------> 一端接口
OUT4 <------> 另一端接口
9V充电锂电池 <------> L298N电机驱动板
正极 < ------> +12V
负极 <------> GND
按钮接线方式
Arduino UNO2 <------> NRF24L01 2.4G无线模块2
3.3V <------> VCC
GND <------> GND
8 <------> CSN
7 <------> CE
13 <------> SCK
11 <------> MOSI
12 <------> MISO
Arduino UNO2 <------> 绿色按钮开关模块
5V <------> VCC
GND <------> GND
2 <------> OUT
Arduino UNO2 <------> 黄色按钮开关模块
5V <------> VCC
GND <------> GND
3 <------> OUT
Arduino UNO2 <------> 蓝色按钮开关模块
5V <------> VCC
GND <------> GND
4 <------> OUT
程序设计内容
利用NRF24L01 2.4G无线模块,按钮远程控制小车,在一块Arduino UNO主板上按下绿色按钮,小车前进,按下黄色按钮,小车停止,按下蓝色按钮,小车后退。
程序编辑(仅供参考)
发射端程序
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> //NRF24L01 2.4G无线模块的库文件
RF24 radio(7, 8); //创建一个RF24的对象CE=7, CSN=8
const byte address[6] = "00001"; //创建一个数组,建立发送机地址,或者说两个模块将用于通信的“管道”
void setup() {
pinMode(2, INPUT); //初始化2号引脚为输入
pinMode(3, INPUT); //初始化3号引脚为输入
pinMode(4, INPUT); //初始化4号引脚为输入
radio.begin(); //初始化radio对象
radio.openWritingPipe(address); //使用radio.openWritingPipe()函数设置的发送机地址
radio.setPALevel(RF24_PA_MIN); //设置功率放大器级别,将其设置为最小值
radio.stopListening(); // 使用radio.stopListening()函数将模块设置为发送机
}
void loop() {
if (digitalRead(2) == 1){ //如果2号引脚为高电平,即绿色按钮被按下
const char text= 'q'; //创建一个字符数组,并为其分配消息q
radio.write(&text, sizeof(text)); //使用radio.write()函数将消息发送给接收机,让小车前进,text是要发送的字符变量,
// sizeof(text))设置了我们要从text变量中获取的字节数
delay(300); //延迟等待0.3秒
}
else if(digitalRead(3) == 1){ //如果3号引脚为高电平,即黄色按钮被按下
const char text= 's'; //创建一个字符数组,并为其分配消息s
radio.write(&text, sizeof(text)); //使用radio.write()函数将消息发送给接收机,让小车停止,text是要发送的字符变量,
// sizeof(text))设置了我们要从text变量中获取的字节数
delay(300); //延迟等待0.3秒
}
else if(digitalRead(4) == 1){ //如果4号引脚为高电平,即蓝色按钮被按下
const char text= 'h'; //创建一个字符数组,并为其分配消息h
radio.write(&text, sizeof(text)); //使用radio.write()函数将消息发送给接收机,让小车后退,text是要发送的字符变量,
// sizeof(text))设置了我们要从text变量中获取的字节数
delay(300); //延迟等待0.3秒
}
}
接收端程序
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> //NRF24L01 2.4G无线模块的库文件
RF24 radio(7, 8); //创建一个RF24的对象CE=7, CSN=8
const byte address[6] = "00001"; //创建一个数组,建立接收机地址,或者说两个模块将用于通信的“管道”
void setup() {
pinMode(2, OUTPUT); //定义2号引脚为输出
pinMode(3, OUTPUT); //定义3号引脚为输出
pinMode(4, OUTPUT); //定义4号引脚为输出
pinMode(5, OUTPUT); //定义5号引脚为输出
pinMode(6, OUTPUT); //定义6号引脚为输出
pinMode(9, OUTPUT); //定义9号引脚为输出
Serial.begin(9600);
radio.begin(); //初始化radio对象
radio.openReadingPipe(0, address); //使用radio.openReadingPipe()函数设置的接收机地址
radio.setPALevel(RF24_PA_MIN); //设置功率放大器级别,将其设置为最小值
radio.startListening(); // 使用radio..startListening()将模块设置为接收机
}
void loop() {
if (radio.available()) { //判断是否有要接收的数据
char text = 0; //创建一个空的字符变量text
radio.read(&text, sizeof(text)); //读取数据,并将其存储到text变量中
if (text == 'q') { //如果接收到的数据是q,那么小车前进
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(9,HIGH);
}
else if(text == 's') { //如果接收到的数据是s,那么小车停止
digitalWrite(2,LOW);
digitalWrite(5,LOW);
}
else if(text == 'h') { //如果接收到的数据是h,那么小车后退
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(9,LOW);
}
}
}
