lxf 发表于 2020-7-17 09:33:47

第44课 NRF24L01 2.4G无线遥控小车

本帖最后由 lxf 于 2020-8-17 13:11 编辑

第44课 NRF24L01 2.4G无线遥控小车

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

内容
利用NRF24L01 2.4G无线模块,按钮远程控制小车,在一块Arduino UNO主板上按下绿色按钮,小车前进,按下黄色按钮,小车停止,按下蓝色按钮,小车后退。
接线图
(小车接线图)
(按钮控制接线图)
小车接线方式
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            <------>               9L298N电机驱动板   <------>    直流减速电机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               <------>            OUTArduino UNO2 <------>    黄色按钮开关模块        5V                <------>             VCC   GND            <------>             GND      3                   <------>            OUTArduino UNO2<------>    蓝色按钮开关模块       5V               <------>               VCC   GND            <------>               GND      4               <------>               OUT
程序实现代码
发送端程序 Sender.ino
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>   //NRF24L01 2.4G无线模块的库文件
RF24 radio(7, 8);   //创建一个RF24的对象CE=7, CSN=8
const byte address = "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秒
}
}
接收端程序 Receiver.ino
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>   //NRF24L01 2.4G无线模块的库文件
RF24 radio(7, 8);   //创建一个RF24的对象CE=7, CSN=8
const byte address = "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);
   }
}
}
页: [1]
查看完整版本: 第44课 NRF24L01 2.4G无线遥控小车