项目简介:搭建一辆有arduino UNO 与rnf24l01组成的小车;手部安装由arduino nano开发板、nrf24l01、imu构成的手势控制器,利用手势控制器检测手部状态、发送信号对小车进行前进,实现基于卡尔曼滤波的MPU6050姿态结算。
准备工作:
如果你想搭建一辆有Arduino UNO和nRF24L01组成的小车,并使用手势控制器来控制小车,你需要准备以下硬件:(制作步骤省略)
-
Arduino UNO微控制器:用于控制小车的运动。
-
NRF24L01模块:用于在小车和手势控制器之间进行无线通信。
-
小车底盘:用于支撑小车的结构和轮子。
-
马达:用于带动小车的运动。
-
电池:用于为小车提供电力。
-
Arduino Nano开发板:用于控制手势控制器的运动。
-
IMU传感器:用于检测手势控制器的状态。
这些硬件是搭建一辆有Arduino UNO和nRF24L01组成的小车所必需的。
陀螺仪小车是一种使用陀螺仪感测器控制方向的小车。要制作陀螺仪小车,你需要准备以下材料和工具:(制作步骤省略)
-
小车底盘:可以使用Lego(乐高)、Arduino、Raspberry Pi(树莓派)或其他工具制作。
-
电机和驱动板:可以使用直流电机(【Youtube搬运】直流电动机的工作原理【含中文字幕需手动开启】_哔哩哔哩_bilibili)或步进电机(【动画演示】步进电机的原理,学了这么多年电工,终于搞明白了_哔哩哔哩_bilibili),并使用驱动板来控制它们的转速和方向。
简言之:步进电机是一种特殊的直流电机,转动受限,范围小, 但精确度更高,适用于高精度转动的场合:机器人,3D打印机。
步进电机与直流电机的优缺点,与伺服电机区别 - 21ic电子网
- 陀螺仪感测器:可以使用MPU6050、L3G4200D或其他类型的陀螺仪感测器。
MPU6050和L3G4200D都是三轴陀螺仪传感器,可以测量旋转率和加速度。 MPU6050是一款集成的加速度计和陀螺仪传感器,可以提供高精度的测量数据。 它采用了微控制器的内部滤波器来减少噪声并提高精度。 MPU6050还支持运动检测功能,可以检测到极小的运动并触发相应的事件。 L3G4200D是一款独立的三轴陀螺仪传感器,它通过 I2C 或 SPI 接口与微控制器连接。 L3G4200D可以测量高达 2000 dps 的旋转率,具有较高的精度和较快的采样速率。 它还具有数据自动对齐功能,可以使得数据在不同的字节序中得到正确的对齐。 在选择这两个传感器时,应考虑自己的应用场景,以及所需的精度和功能。 如果需要一个集成的解决方案,则可以选择 MPU6050,但如果需要一个独立的陀螺仪传感器,则可以选择 L3G4200D。
-
电源:可以使用锂电池或其他类型的可充电电池来为小车提供电力。
-
开发板:可以使用Arduino、Raspberry Pi或其他类型的开发板来控制小车的电机和陀螺仪感测器。
-
编程工具:需要安装适用于你使用的开发板的编程工具。
开发板、驱动板、母板概念:
1.开发板,就是通常用作开发用途的PCB(未有安装元器件,只有布线电路图形的半成品板),通常上面载有一个或多个MCU(微控制单元,为芯片级的计算机,近似理解为cpu,俗称单片机(scm))/FPGA(由可编程互相连接的可配置逻辑块矩阵构成的半导体器件)等器件作为核心,以及一些外设例如Flash、SRAM、SDRAM、LED、数码管、TFT LCD等外设作为辅助开发,以及一些额外的引脚。
https://www.bilibili.com/video/BV193411y7TW/?spm_id_from=333.337.search-card.all.click&vd_source=a2417ade71290cd940c5e2edb896b97bhttps://www.bilibili.com/video/BV193411y7TW/?spm_id_from=333.337.search-card.all.click&vd_source=a2417ade71290cd940c5e2edb896b97b
2.驱动板,通常是用于驱动特定外设(驱动外接硬件,用来控制输出大电流大电压),例如大功率步进电机、大的液晶屏等。
3.母板,或者叫底板,通常将开发板或者是核心板插在其上,同时将驱动板也连接在其上,主要起到一个大型连接器的作用,当开发板或者说核心板上的外设不够时,也会部署一些额外的外设用来辅助开发并最终形成整个产品。
陀螺仪小车开发的注意内容
具体的,你需要在代码中读取陀螺仪感测器的数据,然后根据陀螺仪感测器的角度来控制电机的方向。你可以设置一个阈值,当陀螺仪感测器的角度大于阈值时,小车向左转;当陀螺仪感测器的角度小于阈值时,小车向右转。
你也可以设计其他的控制策略,比如根据陀螺仪感测器的加速度来控制小车的前进和后退。
在制作过程中,你可能会遇到各种问题,比如小车不能正常行驶、陀螺仪感测器的数据不准确等。在遇到这些问题时,你可以通过调试代码、检查电路连接、重新校准陀螺仪感测器等方式来解决问题。
NRF24L01
NRF24L01是一种无线收发模块,具有较高的传输速率和长距离传输能力,能够使用2.4GHz频段进行无线通信。它是一种低成本、低功耗(支持自动睡眠、待机和唤醒功能)的无线通信模块,支持多种通信协议,广泛应用于各种无线通信项目中。除了通信协议和接口之外,nRF24L01模块还具有其他一些特性:尺寸较小、支持多种通信模式、可配置的通信参数、支持硬件加密。
NRF24L01模块通常使用SPI接口与微控制器连接,可以使用Arduino、Raspberry Pi或其他类型的微控制器来控制它。
如果你想使用nRF24L01模块来开发无线通信应用,你可以考虑以下应用场景:
远程控制:nRF24L01模块可以用于实现远程控制功能。你可以使用模块来控制各种电子设备,比如灯、电视、空调等。
传感器网络:nRF24L01模块可以用于建立传感器网络。你可以使用模块来采集各种传感器的数据,并将数据传输到中央服务器。
无线网络:nRF24L01模块可以用于建立无线网络。
即时通讯:nRF24L01模块可以用于实现即时通讯功能。你可以使用模块来实现文本、语音和视频通信。
家庭自动化:nRF24L01模块可以用于实现家庭自动化功能。你可以使用模块来控制各种智能家居设备,比如门锁、窗帘、照明等。
远程监控:nRF24L01模块可以用于实现远程监控功能。你可以使用模块来监控各种环境参数,比如温度、湿度、气压等。
正式内容:
流程:
arduino uno(①)和nrf24l01(①)控制小车;arduino uno(①)、nrf24l01(①)、mpu6050获取姿态解算数据。
1.手上姿态检测,控制mpu6050检测手部状态(运动数据及温度数据),利用其芯片内部的DMP模块,进行传感器数据处理,通过SPI协议向手势控制器中的arduino UNO(②)输出姿态结算后的数据;
2.编写代码,将NRF24L01模块连接到对应的Arduino开发板,arduino uno(②)将获取的数据通过nrf24l01(②)(发射器)无线传给nrf24l01(①)(接收器)一端。
3.arduino uno(①)要编写代码来接收 NRF24L01 (①)收到的信号,并根据信号来控制小车的运动(可以使用电机驱动器的相应函数来控制小车前进)。
(2条消息) Arduino开发板使用NRF24L01进行无线通信_sunshyman的博客-CSDN博客_arduino rf24l01
任务实现步骤:
首先,你需要将 Arduino UNO 和 NRF24L01 连接到小车上,并使用一些电机驱动器来控制小车的运动。具体来说,你可以使用 L298N 电机驱动器来控制小车的电机。(学习内容:连接电机驱动器和电机)
然后,你需要在 Arduino UNO (①)上编写代码来接收 NRF24L01(②) 收到的信号,并根据信号来控制小车的运动。(了解如何使用 NRF24L01 和 Arduino 进行无线通信)
接着,你需要在 Arduino uno (②) 上编写代码来控制 IMU 检测手部的状态,并使用 NRF24L01 将信号发送给 Arduino UNO。具体来说,你需要使用 IMU 库来读取 IMU 传感器的数据,并根据手部的状态来控制 NRF24L01 发送信号。
最后,你需要将所有部分整合起来,调试代码并确保所有功能都能正常工作。
IMU与MPU6050的关系
IMU 是一个通用术语,指的是任何可以测量和提供有关人体加速度和方向信息的设备,而 MPU6050 是由 InvenSense 制造的一种特定类型的 IMU。
MPU6050 是一个 6 轴 IMU,包含一个 3 轴加速度计和一个 3 轴陀螺仪。它用于测量和提供有关物体在 3D 空间中的加速度和角速度的信息。它通常用于无人机、机器人和其他类型的运动传感系统等应用。
相比之下,IMU 可以指任何能够测量和提供有关身体加速度和方向信息的设备,而不管它使用的传感器的具体类型或它具有的轴数。IMU 通常用于各种应用,包括机器人、航空航天和虚拟现实等。
控制电机的转速即控制PWM
控制电机的转速通常是通过调节电机的输入电压来实现的,而调节电机输入电压的一种常用方法就是使用脉冲宽度调制(PWM)控制。
PWM 控制方法通过不断地交替地打开和关闭电机的电源,达到调节电机输入电压的目的。具体来说,我们可以调节 PWM 信号的占空比(duty cycle)来控制电机的转速。占空比越大,电机所接受的电压就越大,电机的转速就越快;占空比越小,电机所接受的电压就越小,电机的转速就越慢。
使用 PWM 控制电机的转速的一个优点是,它可以提供较好的转速精度和响应速度。另外,PWM 控制还可以通过改变 PWM 信号的频率来控制电机的扭矩。
但是,使用 PWM 控制电机也有一些缺点。首先,PWM 控制需要使用控制电路来实现,这会增加系统的复杂度和成本。其次,PWM 控制可能会产生较大的电磁干扰,影响电机的寿命和系统的稳定性。
在选择控制电机的方式时,需要根据具体的应用场景来确定使用哪种控制方式。在一些情况下,使用 PWM 控制电机可能是最优的选择。但是,在一些应用场景中,其他控制方式可能更加适用。
例如,在需要提供较大扭矩和较高转速的应用场景中,可能会使用直流电机,并使用直流桥控制方式来控制电机的转速和扭矩。在需要提供较高精度和较低成本的应用场景中,可能会使用步进电机,并使用步进电机驱动器来控制电机的转速和位置。
总之,在控制电机的转速时,PWM 控制是一种常用的方法,但是并不是唯一的选择。根据具体的应用场景和需求,可以选择适合的控制方式来实现。
L298N驱动模块,用在控制小车电机的驱动和通过单片机PWM来控制电压输入脚已达到控制小车速度的目的
代码实现模块:
参考: Arduino教程:MPU6050的数据获取、分析与处理 - 知乎摘要MPU6050是一种非常流行的空间运动传感器芯片,可以获取器件当前的三个加速度分量和三个旋转角速度。由于其体积小巧,功能强大,精度较高,不仅被广泛应用于工业,同时也是航模爱好者的神器,被安装在各类飞行…https://zhuanlan.zhihu.com/p/20082486
详解Arduino Uno开发板的引脚分配图及定义_全程站着的攻城师的博客-CSDN博客_arduino uno引脚图https://blog.csdn.net/it1988888/article/details/118087831(2条消息) Arduino开发板使用NRF24L01进行无线通信_sunshyman的博客-CSDN博客_arduino rf24l01https://blog.csdn.net/sunshyman/article/details/112977704?ops_request_misc=&request_id=&biz_id=102&utm_term=arduino%E5%92%8Cnrf24l01%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-112977704.142%5Ev68%5Ejs_top,201%5Ev4%5Eadd_ask,213%5Ev2%5Et3_esquery_v3&spm=1018.2226.3001.4187
详解PWM原理、频率与占空比 - 21ic电子网https://www.21ic.com/article/887609.html#:~:text=%E8%84%89%E5%86%B2%E5%AE%BD%E5%BA%A6%E8%B0%83%E5%88%B6%20%28PWM%29%EF%BC%8C%E6%98%AF%E8%8B%B1%E6%96%87%E2%80%9CPulse,Width%20Modulation%E2%80%9D%E7%9A%84%E7%BC%A9%E5%86%99%EF%BC%8C%E7%AE%80%E7%A7%B0%E8%84%89%E5%AE%BD%E8%B0%83%E5%88%B6%EF%BC%8C%E6%98%AF%E5%88%A9%E7%94%A8%E5%BE%AE%E5%A4%84%E7%90%86%E5%99%A8%E7%9A%84%E6%95%B0%E5%AD%97%E8%BE%93%E5%87%BA%E6%9D%A5%E5%AF%B9%E6%A8%A1%E6%8B%9F%E7%94%B5%E8%B7%AF%E8%BF%9B%E8%A1%8C%E6%8E%A7%E5%88%B6%E7%9A%84%E4%B8%80%E7%A7%8D%E9%9D%9E%E5%B8%B8%E6%9C%89%E6%95%88%E7%9A%84%E6%8A%80%E6%9C%AF%EF%BC%8C%E5%B9%BF%E6%B3%9B%E5%BA%94%E7%94%A8%E5%9C%A8%E4%BB%8E%E6%B5%8B%E9%87%8F%E3%80%81%E9%80%9A%E4%BF%A1%E5%88%B0%E5%8A%9F%E7%8E%87%E6%8E%A7%E5%88%B6%E4%B8%8E%E5%8F%98%E6%8D%A2%E7%9A%84%E8%AE%B8%E5%A4%9A%E9%A2%86%E5%9F%9F%E4%B8%AD%E3%80%82%20%E8%BF%99%E5%B0%B1%E6%98%AF%E5%8D%A0%E7%A9%BA%E6%AF%94%E4%B8%BA80%25%E7%9A%84%E8%84%89%E5%86%B2%E4%BF%A1%E5%8F%B7%E3%80%82
nRF24L01 – How It Works, Arduino Interface, Circuits, CodesIn this tutorial we will learn how to use the nRF24L01 RF transceiver module to make a wireless communication between two Arduino boards.https://howtomechatronics.com/tutorials/arduino/arduino-wireless-communication-nrf24l01-tutorial/
MPU6050姿态解算2-欧拉角&旋转矩阵 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/195683958