最近两天有点偷懒了,什么都不想做,所以今天不接着弄上次的GPS模块了,今天就分享点别的-----大三时做的嵌入式课程设计。当时做好后也算是好几个班流传最广的版本了,所以多少还是很有点成就感的。
实现的具体功能如下:
运用STM32F407ZGT6为核心的开发板,实现玩具小车的控制。控制内容包括:
1.可利用按键进行小车行驶控制(前进、后退、左转、右转);
2.可用电位器实现小车速度调整;
3.可利用红外遥控器控制小车运行;
4.可利用显示屏将当前小车运行状态显示在屏幕上。
5.可利用蓝牙控制小车状态
6.可以利用蓝牙控制小车循迹功能开关实现小车自动循迹
7.可以利用超声波模块实现小车的避障转向功能
记得当时老师要求是至少实现5个还是6个功能,我当时做了以上7个功能。一共有8个功能可选最后一个是关于mpu6050的,关于这个模块我们以后细讲。
至于代码部分还是展示一部分吧
int main()
{
u8 lab = 0; //循迹控制标志
u8 i=0;
u8 key;
u16 value=0;
u16 value1=0;
float vol, vol_1; //声明一些程序用到的变量
long long indata=0;
float distance=0; //超声波测距用到的变量
SysTick_Init(168);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
LED_Init1(); //led和电机引脚初始化
gpio_Init();
USART1_Init(9600);
USART3_Init(9600); //串口初始化
ADCx_Init(); //adc数模转换初始化
KEY_Init(); //按键初始化
Hwjs_Init(); //红外模块初始化
TFTLCD_Init(); //LCD初始化
TIM12_CH1_PWM_Init(500-1,84-1);
TIM11_CH1_PWM_Init(500-1,84-1); //TIM11和TIM12初始化
AT24CXX_Init();
TIM5_CH1_Input_Init(0xffffffff,83); //以1M频率计数
FRONT_COLOR=BLACK;
LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,12,"liaocheng-university");
LCD_ShowFontHZ(10,50,"聊城大学");
LCD_ShowFontHZ(10,120,"小车状态:"); //屏幕显示聊大,和小车状态等字符串
GPIO_SetBits(GPIOF,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_9|GPIO_Pin_10); //初始小车状态为停止
pwm(1500, 17500); //舵机角度调整至正前方。
USART3_RX_STA=0; //蓝牙串口接收信息标志
while(1)
{
distance = ultrasonic(indata, distance); //get前方是否有障碍物
value = adc_model_1( value, vol ); //1--get钮输入引脚的电压值
value1 = adc_model_2(value1, vol_1 ); //1--get旋钮输入引脚的电压值
pwm_model(i, value, value1); //2--pwm输出设置
Remote_control(); //3--红外遥控
lab = hc05_control(lab); //4--蓝牙控制
key_model(key); //5--按键扫描程序执行前进后退,左转右转
Obstacle_avoidance(lab); //6--循迹模块控制函数
Ultrasonic_obstacle_avoidance(distance); //7--超声波避障控制函数
}
}
全部代码放在百度网盘里,链接:链接:https://pan.baidu.com/s/1EnKFuV3M8G73_y61cXZyiQ
提取码:kn6i
需要的可以自行下载,如果你是聊大的学弟学妹,如果要求一样则可以直接编译下载就可以(这里还是建议大家把上面的代码当作参考,毕竟学知识还是要靠自己去理解去探索)。当然,这里我也不想讲解每行代码作用。
还有一个问题就是接线问题,具体如下:
第三次更新说明:
1.这次跟新程序完成超声波测试功能,可能这也是最后一次更新。
2.超声波模块接线说明
舵机的信号线(IO10)———对应开发板(PF3)
舵机vcc,gnd已经接扩展板的5V和gnd
超声波模块
(vcc)--开发板(5V)
(GND)--开发板(GND)
(trig)--开发板(PF2)
(echo)--开发板(PA0)
注:本人在调试过程可能扩展板出现问题,超声测距本来可以直接插扩展板的接口,但是由于某种原因测试出错,所以本人直接将超声波模块接开发板,测试功能正常。(这也是上面为什么超声波模块会接开发板5V和GND的原因)
*******************************************************************
再次重申:本程序仅限大家学习使用,严禁用于任何商业用途。
当然,本人能力有限,希望大家批评改进。联系方式:见文末。
*******************************************************************
二次更新说明:
1.直至本次更新程序可以实现6个要求功能(2个基本功能和4个选做功能)。
2.这次主要是对循迹模块功能进行编写,具体函数还是在主函数中while循环中调用,大家可以选中右键go to去具体了解。这里不做详细介绍
3.功能说明,由于主函数大的while循环中存放的功能函数太多,直接和以前一样放进去会对其他函数造成影响,所以本人添加一个循迹函数标志变量,具体是由蓝牙功能进行控制。所以想要实现循迹功能必须具有蓝牙功能(本来想使用pcf8574的中断功能,但是扩展板上没有INT的外部接口,所以只能这样了。遗憾!)具体就是循迹模块中4个红外对管有一个亮了就进行转向(可左转也可能右转,具体看是哪个对管指示灯亮,全亮就停止行进)。
4.接线说明,这次又添加了两根线主要是IIC接口的串行数据线(SDA)和时钟线(SCL),SDA————扩展板上的J23的6号引脚,SCL————扩展板上的J23的5号引脚。SCL---接开发板PB8,
SDA--接开发板PB9。
注:接线由于功能越来越多,所以接线一定要注意连接正确。如果有疑问可以请教作者或作者宿舍成员。
更新说明:
1.程序添加蓝牙功能,可以实现蓝牙控制小车,蓝牙连接后输入‘qianjin’对应 前进
‘houtui’对应 后退,‘zuozhuan’对应 左转, ‘youzhuan’对应 右转, ‘tingzhi’对应 停止
2.引脚说明 电机1接(PF0,PF9),电机2接(PF1,PF10), pwm2,pwm3对应(PB14,PF7)
AD0,AD1对应(PA6,PA4)
3.蓝牙模块的连接:VCC接5v, GND接GND, RX接PB10, TX接PB11
注:扩展板(小板)与开发板之间需要 ---共地!!!
说明:
1.程序下载进开发板,按下reset开始执行程序
2.按下开发板的右下角的上键前进同时两个led灯全亮(下键,左键,右键分别实现相对应功能)
3.调节扩展板上的黄色旋钮和旁边的白色电位器实现小车左右轮调速
4.红外遥控的使用2键对应前进,8键对应后退,4键对应左转,6键对应右转
5.屏幕显示,屏幕前3行显示
“liaocheng-university
聊城大学
小车状态:”一直保持不变,下一行显示‘前进’或‘后退’或‘左转’或‘右转’具体跟随小车当前状态改变。
注:由于连线可能接反,实验过程中可以自己更改最终都可实现以上效果。
以上内容压缩包内都有,而且更为详细,希望对大家有帮助。