spruce STM32智能小车测试报告.docx
- 文档编号:10866316
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:12
- 大小:113.89KB
spruce STM32智能小车测试报告.docx
《spruce STM32智能小车测试报告.docx》由会员分享,可在线阅读,更多相关《spruce STM32智能小车测试报告.docx(12页珍藏版)》请在冰豆网上搜索。
spruceSTM32智能小车测试报告
SpruceSTM32智能小车测试报告
SpruceSTM32使用说明:
Spruce上搭载了STM32处理器,STM32虽然是Cortex-M3内核的32位ARM,但是一方面可以将它作为ARM来使用,另一方面也可以将它作为arduino来使用,arduino环境下的程序可以直接拿过来使用,但要在与spruce配套的集成开发环境maple-ide下编译之后通过USB转串口线下载到STM32中,只有个别函数用法与之前不一样,例如PWM与之前的arduino环境中使用不一样,只需稍作修改即可
Spruce下载方法:
用USB转串口线将spruce与电脑连接,先编译,在maple-ide环境中编译,然后点击下载按钮,点击完毕之后将spruce上的RESET建按下,待出现如图1所示界面立即松开RESET,即可将程序下载到STM32中,下载成功后可以看到如图2所示界面,提示重启USB返回正常工作模式,此时拔下USB接头然后再插上,STM32即可恢复正常工作状态,重新上电后一般要等待2秒钟才能恢复正常工作(说明:
STM32需要在特定状态下才能通过串口下载程序,所以需要这样操作)
图1等待下载状态
图2下载成功重启USB
硬件环境:
车体为双轮带减速齿轮的直流马达驱动,配以万向轮,控制器为SpruceSTM32控制板,电机驱动板为L298N,驱动2路直流电机,传感器有路径传感器:
探测黑色轨迹,路障传感器。
电源使用12V电源,赛道为1.5cm的黑色白底的赛道。
软件环境:
maple-ide编译环境
接线说明:
电机驱动板:
I1:
2
I2:
1
I3:
5
I4:
6
EA:
11
EB:
12
蓝线—接左侧GND
紫线—接左侧VCC
灰线—接右侧GND
绿线—接右侧VCC
备注:
由于左右侧VCC/GND是与stepmotor接口接在一起的,故本测试使用的是stepmotor接口
路径传感器:
Q1—15,Q2—16,Q3—17,Q4—18,Q5—19
路障传感器:
15(接左边传感器)16(接前方传感器)、17(接右边传感器)、
红色:
接4.5-5V电源高电平(加个限流电阻更好)
黄色:
接单片机,输出TTL电平给单片机(加上拉电阻更好)
黑色:
接GND0V电源低电平
图3路径传感器
图4小车模型
图5红外避障传感器
系统工作说明:
系统功能分为循迹和避障功能
循迹功能:
接通电源小车会沿着地上的黑线行驶,小车配有5个路径传感器,当中间的传感器检测到黑线,则小车前进;当中间偏右的传感器检测到黑线,说明小车向右微偏,小车应向左轻微转动;当最右侧的传感器检测到黑线,说明小车向右大偏,小车应向左大幅度转动。
具体可通过PWM控制L298N使能端EA、EB来控制小车的速度,通过控制delay()延时来控制小车转动的角度。
依此类推小车左侧传感器检测到黑线则刚好相反。
(此小车搭载传感器只能寻黑线)
避障功能:
小车前方装有三个红外避障传感器,当检测到障碍物,相应的传感器会输出低电平。
当前方检测到障碍物,则小车后退点然后默认再右转;右侧检测到障碍物,小车左转;左侧检测到障碍物,小车右转;三个方向都没有障碍物前进;另外当左前后或左右检测到障碍物后退点然后默认再右转;左前方检测到障碍物右转;右前方检测到障碍物左转,总共有八种情况。
注意每次转动幅度不要太大,可以使用程序进行多次轻微调整方向,以便使小车能贴着障碍物边缘前进,具体可通过PWM控制L298N使能端EA、EB来控制小车的速度,通过控制delay()延时来控制小车转动的角度。
可以通过调整传感器后的电位器来调整检测距离,检测距离不要太远,一般控制在30CM为宜,由此小车可以实现避障的功能,遇到死胡同,小车能贴壁走出来。
测试代码:
------------------------------------------------
避障代码:
------------------------------------------------
unsignedcharstatus=0;
voidsetup()
{
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(15,INPUT);
pinMode(16,INPUT);
pinMode(17,INPUT);
pinMode(11,PWM);
pinMode(12,PWM);
}
voidloop()
{
status=digitalRead(15)+digitalRead(16)*2+digitalRead(17)*4;
switch(status)
{
case0b00000000:
case0b00000101:
back();
delay(100);
turn_right();
pwmWrite(12,15000);
delay(100);
break;
///////////////////////////////////////////
case0b00000001:
case0b00000011:
case0b00000010:
turn_right();
pwmWrite(12,15000);
delay(10);
break;
////////////////////////////////////////
case0b00000100:
case0b00000110:
turn_left();
pwmWrite(11,15000);
delay(10);
break;
///////////////////////////////////
/*case0b00000111:
forward();
delay(30);
break;*/
///////////////////////////////////
default:
forward();
delay(20);
}
}
voidturn_left(void)
{
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
pwmWrite(11,30000);
pwmWrite(12,30000);
}
voidturn_right(void)
{
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
pwmWrite(11,30000);
pwmWrite(12,30000);
}
voidforward(void)
{
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
pwmWrite(11,28000);
pwmWrite(12,30000);
}
voidback(void)
{
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
pwmWrite(11,30000);
pwmWrite(12,30000);
}
------------------------------------------------
循迹代码:
------------------------------------------------
unsignedcharroad=0;
voidsetup()
{
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(11,PWM);
pinMode(12,PWM);
pinMode(15,INPUT);
pinMode(16,INPUT);
pinMode(17,INPUT);
pinMode(18,INPUT);
pinMode(19,INPUT);
Serial1.begin(9600);
}
voidloop()
{
Serial1.write("Arduino!
\r\n");
////////////////////////////////////////////
road=digitalRead(15)+digitalRead(16)*2+digitalRead(17)*4+
digitalRead(18)*8+digitalRead(19)*16;
switch(road)
{
case0b00011011:
forward();
delay(100);
break;
///////////////////////////////////////////
case0b00011101:
turn_left();
pwmWrite(11,17000);
delay(50);
break;
case0b00010111:
turn_right();
pwmWrite(12,17000);
delay(50);
break;
////////////////////////////////////////
case0b00001111:
turn_right();
delay(50);
break;
case0b00011110:
turn_left();
delay(50);
break;
///////////////////////////////////
default:
forward();
delay(10);
}
}
voidturn_left(void)
{
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
pwmWrite(11,35000);
pwmWrite(12,35000);
}
voidturn_right(void)
{
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
pwmWrite(11,35000);
pwmWrite(12,35000);
}
voidforward(void)
{
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
pwmWrite(11,35000);
pwmWrite(12,35000);
}
voidback(void)
{
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
pwmWrite(11,17000);
pwmWrite(12,17000);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- spruce STM32智能小车测试报告 STM32 智能 小车 测试报告