视频:平衡小车自主避障
视频地址:http://player.youku.com/player.php/sid/XMTM1Njk5ODQyOA==/v.swf
实验12.平衡小车跟踪移动物体
一、实验目的:通过平衡小车跟踪移动物体实验,学习如何利用超声波模块来实现小车跟踪移动物体的功能。
二.实验过程及分析:本实验主要是根据上一个实验实现小车自主避障,修改关键代码使小车能够跟踪移动的物体。
平衡小车跟踪移动物体代码分析:当超声波模块检测到平衡小车距离前面的物体小于 0.5 米时会自动跟踪物体
#if MODE_BIZHANG==1
if(Distance<500)
{
Movement-=250 ;
if(1==Flag_Hou)
Movement=-250;
}
#endif
三.实验现象:平衡小车实现了跟踪移动物体的功能。
四.实验总结:通过本次实验学习了如何利用超声波模块来实现小车跟踪移动物体的功能,同时也避免了蓝牙控制和超声波避障的冲突。
实验13.实现体感控制平衡小车
一、实验目的:通过体感控制平衡小车实验,学习如何利用mpu6050姿态传感器和NRF24L01无线模块进行无线发送、接收与mpu6050姿态相关的指令,实现体感控制平衡小车。
二、实验过程及分析:本实验首先学习与姿态信息相关的一些准备知识,接着利用mpu6050姿态传感器获取mpu6050的姿态信息,根据姿态信息制定相应的指令,然后利用NRF24L01无线模块进行无线发送指令,小车接收到指令执行相应操作,最终实现体感控制平衡小车。
学习要点:与姿态信息相关的一些准备知识;获取mpu6050的姿态信息;根据姿态信息制定相应的指令,NRF24L01无线模块发送指令;小车接收到指令执行相应操作。
与姿态信息相关的一些准备知识:主要就是要知道与姿态相关的三个角度的具体含义,直接看下面几张生动形象的图就可以了,一目了然
俯仰角(Pitch)
横滚角(Roll)
航向角( Yaw)
姿态图
获取mpu6050的姿态信息:关于利用mpu6050读取姿态信息的详细介绍可看我前面的贴子 实验5.传感器驱动实验(读取mpu6050原始数据) 和实验6.多传感器数据融合实验。这里只介绍本次实验所要用到的关键代码。
读取MPU6050内置DMP的姿态信息关键代码:
Stm32控制板程序
float DirF_DirB(void)
{
unsigned long sensor_timestamp;
unsigned char more;
long quat[4];
dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors, &more);
if (sensors & INV_WXYZ_QUAT )
{
q0=quat[0] / q30;
q1=quat[1] / q30;
q2=quat[2] / q30;
q3=quat[3] / q30;
Pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; //俯仰角
printf("%f,%f,\r\n",Pitch,Yaw);
return Pitch;//得到俯仰角
}
}
根据姿态信息制定相应的指令,RF24L01无线模块发送指令:
关键代码:
Stm32控制板程序
while(1)
{
DirF_DirB();
if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
{
if(DirF_DirB()>20) tmp_buf[1]=F;
else if(DirF_DirB()<-20) tmp_buf[1]=B;
else tmp_buf[1]=S;
}
小车接收到相应指令执行相应操作:
关键代码:
小车程序
void NRF24L01(void)
{ unsigned char S,F,B;
u8 mode=0,count;
u8 tmp_buf[33];
if(mode==0)//RX模式
{
RX_Mode();
while(1)
{
if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
{
// printf("%d\r\n",tmp_buf[1]);
if(tmp_buf[1]==S) {Flag_Qian=0,Flag_Hou=0;}
if(tmp_buf[1]==F){Flag_Qian=1,Flag_Hou=0;}
if(tmp_buf[1]==B){Flag_Qian=0,Flag_Hou=1;}
}else delay_us(100);
};
}
}
三.实验现象:实现了体感控制平衡小车
四.实验总结:通过本次实验学习了与姿态信息相关的知识,然后利用mpu6050和nrf24l01制定和发送相应指令,最后实现了体感控制平衡小车。
实验14.平衡小车在桌面静止
在前面的实验8. 实现平衡小车直立时处于静止状态 已经调试过小车直立,不过效果还不是很好;所以我又重新调试了一下,效果比之前好了一些。
具体调试方法可以看看我前面的实验7.PID调试实验 和实验8. 实现平衡小车直立时处于静止状态
下面是视频:平衡小车在桌面静止
视频地址:http://player.youku.com/player.php/sid/XMTM2MjczNTI0OA==/v.swf
模块化平衡小车的原理图主要参考了平衡小车套件的原理图。
在 模块化平衡小车硬件篇 里主要展示了模块化平衡小车用到的东西,缺少一些必要的说明,这里介绍一下并上传相关的硬件资料。首先是stm32nucleo板,芯片的型号是STM32F103RBt6,板子板载了ST-LINK,只需一根USB线即可下载和调试程序。
stm32 nucleo是ST官方推出的开源硬件,下面是这个板子的硬件原理图和PCB资料。
然后是电机驱动模块tb6612和6轴传感器mpu6050模块(三轴陀螺仪+三轴加速度计)
电机驱动模块tb6612的说明及资料
注意:输入电压(VM )一定要低于12V,不然模块上的钽电容可能会爆炸,我就炸过
更具体的使用方法上淘宝搜和参考下面的资料
电机驱动模块tb6612的资料:
TB6612FNG英文原版资料.pdf
6轴传感器mpu6050模块的说明及资料
这个模块和我用的模块有一点小区别,我的模块电源输入分为3.3V和5V两个引脚,下面这个模块的电源输入为一个引脚VCC(3-5v(内部低压差稳压))
mpu6050模块的资料
接下来是电源部分,主要是LM2596降压模块,具体在平衡小车的应用是把锂电池提供的电压转化为5V输出的电压,可以通过模块的电位器调节输出电压,然后把5V电源提供给stm32nucleo作为电源。LM2596降压模块的详细说明可以上淘宝搜。
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |