您当前的位置:首页 > 电子 > 开发板/开源硬件

Arduino之 NRF24L01 2.4G无线遥控小车

时间:09-12来源:作者:点击数:

学习内容

利用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);
   }
}
}
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐