找回密码
 立即注册

QQ登录

只需一步,快速开始

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

第45课 三轴倾斜度ADXL345
X轴控制小车前进和后退


目标

利用NRF24L01 2.4G无线模块和三轴倾斜度ADXL345传感器模块,X轴控制小车前进和后退。

实验材料

Arduino UNO开发板*2
NRF24L01 2.4G无线模块*2
三轴倾斜度ADXL345传感器模块
L298N电机驱动板
9V充电锂电池和9V电池扣子
装有两个直流电机马达小车
配套USB数据线
配套杜邦线若干
Arduino IDE软件

微信图片_20200717094525.png

内容

利用NRF24L01 2.4G无线模块和三轴倾斜度ADXL345传感器模块,远程控制小车,当三轴倾斜度ADXL345传感器的X轴方向往前倾斜时,小车前进,当方向往后倾斜时,小车后退,当方向即不往前也不往后时,小车停止。

接线图

图片2.png
(小车接线图)
图片3.png
三轴倾斜度ADXL345传感器模块控制接线图)

小车接线方式

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

三轴倾斜度ADXL345传感器模块控制接线方式

Arduino UNO2    <------>     NRF24L01 2.4G无线模块2
            3.3V         <------>             VCC
           GND         <------>            GND
             8             <------>            CSN
             7             <------>             CE  
            13            <------>            SCK
            11            <------>           MOSI
            12            <------>           MISO
Arduino UNO2    <------>    三轴倾斜度ADXL345传感器模块
           5V             <------>             VCC
         GND           <------>             GND
          5V              <------>              CS
        GND            <------>             SD0
         A4              <------>             SDA
         A5              <------>             SCL
需要用到三轴倾斜度ADXL345传感器模块第三方库文件,文件名为“ADXL345”和“I2Cdev”。
提取码:0ig6
下载后解压,把文件名为“ADXL345”和“I2Cdev”的两个文件夹复制放到Arduino安装包的“libraries”文件夹里面。

程序实现代码

发送端程序 Sender.ino

  1. #include <Wire.h>
  2. #include <I2Cdev.h>
  3. #include <ADXL345.h>  //三轴倾斜度ADXL345传感器模块库文件
  4. ADXL345 accel;
  5. #include <SPI.h>
  6. #include <nRF24L01.h>
  7. #include <RF24.h>   //NRF24L01 2.4G无线模块的库文件
  8. RF24 radio(7, 8); //创建一个RF24的对象CE=7, CSN=8
  9. const byte address[6] = "00001";  //创建一个数组,建立发送机地址,或者说两个模块将用于通信的“管道”
  10. volatile int X;  //定义一个整型变量X
  11. void setup() {
  12.     Serial.begin(9600);  
  13.    Wire.begin();
  14.   accel.initialize();
  15.     X = 0;  //初始化整型变量X为0
  16.   radio.begin();    //初始化radio对象
  17.   radio.openWritingPipe(address);  //使用radio.openWritingPipe()函数设置的发送机地址
  18.   radio.setPALevel(RF24_PA_MIN);  //设置功率放大器级别,将其设置为最小值
  19.   radio.stopListening();  // 使用radio.stopListening()函数将模块设置为发送机
  20. }
  21. void loop() {
  22. X = accel.getAccelerationX();  //把三轴倾斜度ADXL345传感器模块的X轴加速度数值赋值给X
  23.   radio.write(&X, sizeof(X));    //使用radio.write()函数将消息发送给接收机,X是要发送的整型数值变量,
  24. // sizeof(X)设置了我们要从X变量中获取的整型数长度。
  25.   Serial.println(accel.getAccelerationX());   //串口自动打印三轴倾斜度ADXL345传感器模块的X轴加速度数值
  26.   delay(1000);  //延迟等待1秒
  27. }
复制代码

接收端程序 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.   Serial.begin(9600);
  8.    pinMode(2, OUTPUT);   //定义2号引脚为输出
  9.   pinMode(3, OUTPUT);   //定义3号引脚为输出
  10.   pinMode(4, OUTPUT);   //定义4号引脚为输出
  11.   pinMode(5, OUTPUT);   //定义5号引脚为输出
  12.   pinMode(6, OUTPUT);   //定义6号引脚为输出
  13.   pinMode(9, OUTPUT);   //定义6号引脚为输出
  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.     int text = 0;    //定义一个整型变量text并赋值为0
  22.     radio.read(&text, sizeof(text));  //读取数据,并将其存储到text变量中
  23.     Serial.println(text);  //打印变量text的数据,即接收到的数据
  24.     delay(300);  //延迟等待0.3秒
  25.    if (text > 100) {  //如果三轴倾斜度ADXL345传感器模块X轴方向往前倾斜,那么小车前进
  26.     digitalWrite(2,HIGH);
  27.     digitalWrite(3,HIGH);
  28.     digitalWrite(4,LOW);
  29.     digitalWrite(5,HIGH);
  30.     digitalWrite(6,LOW);
  31.     digitalWrite(9,HIGH);
  32.     }
  33.     else if (-100 < text && text < 100) {   //如果三轴倾斜度ADXL345传感器模块X轴方向即不往前也不往后,那么小车停止
  34.       digitalWrite(2,LOW);
  35.       digitalWrite(5,LOW);
  36.      }
  37. else if (text < -100) {  //如果三轴倾斜度ADXL345传感器模块X轴方向往后倾斜,那么小车后退
  38.     digitalWrite(2,HIGH);
  39.     digitalWrite(3,LOW);
  40.     digitalWrite(4,HIGH);
  41.     digitalWrite(5,HIGH);
  42.     digitalWrite(6,HIGH);
  43.     digitalWrite(9,LOW);
  44.     }
  45. }
  46. }
复制代码
分享至 : QQ空间
收藏

0 个回复

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