找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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


目标

利用NRF24L01 2.4G无线模块,按钮远程控制小车。

实验材料

Arduino UNO开发板*2
NRF24L01 2.4G无线模块*2
按钮开关模块*3
L298N电机驱动板
9V充电锂电池和9V电池扣子
装有两个直流电机马达小车
配套USB数据线
配套杜邦线若干
Arduino IDE软件

微信图片_20200717093544.png

内容

利用NRF24L01 2.4G无线模块,按钮远程控制小车,在一块Arduino UNO主板上按下绿色按钮,小车前进,按下黄色按钮,小车停止,按下蓝色按钮,小车后退。

接线图

图片2.png
(小车接线图)

图片3.png
(按钮控制接线图)

小车接线方式

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

程序实现代码

发送端程序 Sender.ino

  1. #include <SPI.h>
  2. #include <nRF24L01.h>
  3. #include <RF24.h>   //NRF24L01 2.4G无线模块的库文件
  4. RF24 radio(7, 8);   //创建一个RF24的对象CE=7, CSN=8
  5. const byte address[6] = "00001";  //创建一个数组,建立发送机地址,或者说两个模块将用于通信的“管道”
  6. void setup() {
  7.   pinMode(2, INPUT);   //初始化2号引脚为输入
  8.   pinMode(3, INPUT);   //初始化3号引脚为输入
  9.   pinMode(4, INPUT);   //初始化4号引脚为输入
  10.   radio.begin();    //初始化radio对象
  11.   radio.openWritingPipe(address);  //使用radio.openWritingPipe()函数设置的发送机地址
  12.   radio.setPALevel(RF24_PA_MIN);  //设置功率放大器级别,将其设置为最小值
  13.   radio.stopListening();  // 使用radio.stopListening()函数将模块设置为发送机
  14. }
  15. void loop() {
  16.   if (digitalRead(2) == 1){    //如果2号引脚为高电平,即绿色按钮被按下
  17.   const char text=  'q';  //创建一个字符数组,并为其分配消息q
  18.   radio.write(&text, sizeof(text));  //使用radio.write()函数将消息发送给接收机,让小车前进,text是要发送的字符变量,
  19. // sizeof(text))设置了我们要从text变量中获取的字节数

  20.   delay(300);  //延迟等待0.3秒
  21. }
  22. else if(digitalRead(3) == 1){    //如果3号引脚为高电平,即黄色按钮被按下
  23.   const char text=  's';  //创建一个字符数组,并为其分配消息s
  24.   radio.write(&text, sizeof(text));  //使用radio.write()函数将消息发送给接收机,让小车停止,text是要发送的字符变量,
  25. // sizeof(text))设置了我们要从text变量中获取的字节数
  26.   delay(300);  //延迟等待0.3秒
  27. }
  28. else if(digitalRead(4) == 1){    //如果4号引脚为高电平,即蓝色按钮被按下
  29.   const char text=  'h';  //创建一个字符数组,并为其分配消息h
  30.   radio.write(&text, sizeof(text));   //使用radio.write()函数将消息发送给接收机,让小车后退,text是要发送的字符变量,
  31. // sizeof(text))设置了我们要从text变量中获取的字节数
  32.   delay(300);  //延迟等待0.3秒
  33. }
  34. }
复制代码

接收端程序 Receiver.ino

  1. #include <SPI.h>
  2. #include <nRF24L01.h>
  3. #include <RF24.h>   //NRF24L01 2.4G无线模块的库文件
  4. RF24 radio(7, 8);   //创建一个RF24的对象CE=7, CSN=8
  5. const byte address[6] = "00001";  //创建一个数组,建立接收机地址,或者说两个模块将用于通信的“管道”
  6. void setup() {
  7.   pinMode(2, OUTPUT);   //定义2号引脚为输出
  8.   pinMode(3, OUTPUT);   //定义3号引脚为输出
  9.   pinMode(4, OUTPUT);   //定义4号引脚为输出
  10.   pinMode(5, OUTPUT);   //定义5号引脚为输出
  11.   pinMode(6, OUTPUT);   //定义6号引脚为输出
  12.   pinMode(9, OUTPUT);   //定义9号引脚为输出
  13.   Serial.begin(9600);
  14.   radio.begin();   //初始化radio对象
  15.   radio.openReadingPipe(0, address);   //使用radio.openReadingPipe()函数设置的接收机地址
  16.   radio.setPALevel(RF24_PA_MIN);   //设置功率放大器级别,将其设置为最小值
  17.   radio.startListening();    // 使用radio..startListening()将模块设置为接收机
  18. }
  19. void loop() {
  20.   if (radio.available()) {  //判断是否有要接收的数据
  21.     char text = 0;      //创建一个空的字符变量text
  22.     radio.read(&text, sizeof(text));  //读取数据,并将其存储到text变量中
  23.     if (text == 'q') {   //如果接收到的数据是q,那么小车前进
  24.     digitalWrite(2,HIGH);
  25.     digitalWrite(3,HIGH);
  26.     digitalWrite(4,LOW);
  27.     digitalWrite(5,HIGH);
  28.     digitalWrite(6,LOW);
  29.     digitalWrite(9,HIGH);
  30.   }
  31. else if(text == 's') {    //如果接收到的数据是s,那么小车停止
  32.     digitalWrite(2,LOW);
  33.     digitalWrite(5,LOW);
  34.     }
  35.    else if(text == 'h') {    //如果接收到的数据是h,那么小车后退
  36.     digitalWrite(2,HIGH);
  37.     digitalWrite(3,LOW);
  38.     digitalWrite(4,HIGH);
  39.     digitalWrite(5,HIGH);
  40.     digitalWrite(6,HIGH);
  41.     digitalWrite(9,LOW);
  42.    }
  43. }
  44. }
复制代码
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册