最近设计了一个项目基于单片机的盲人拐杖控制系统,与大家分享一下:
一、基本介绍
项目名:基于单片机的盲人拐杖控制系统设计
项目编号:mcuclub-dz-040
单片机类型:STM32F103C8T6
具体功能:
设计内容展示:
一、32实物图
单片机型号:STM32F103C8T6
板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。
供电接口:TYPE-C
二、原理图
软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图
三、PCB图
由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,
隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
四、系统框图
本设计以单片机为核心控制器,加上其他模块一起组成此次设计盲人拐杖的整个系统,其中包括中控部分、输入部分和输出部分。中控部分采用了单片机控制器,其主要作用是获取输入部分的数据,经过内部处理,逻辑判断,最终控制输出部分。输入由四部分组成,第一部分是GPS检测模块,通过该模块获取当前的定位;第二部分是超声波模块,通过该模块获取障碍物到拐杖的距离;第三部分是按键模块,通过该模块可以控制照明灯的开关;第四部分是供电模块,通过该模块可给整个系统进行供电。输出由三部分组成,第一部分是报警模块,当检测到距离小于障碍物最小值时进行报警提醒;第二部分是照明模块,检测到照明模块按键按下,控制照明灯打开;第三部分是GSM模块,检测到按键按下两次,将当前位置信息发送到用户的手机上。具体系统框图如图3.1所示。
五、软件设计流程
六、部分程序展示
软件版本:keil5
逻辑程序和驱动程序分开,分布于main.c和其他.c文件
/****
*******按键函数
*****/
void Key_function(void)
{
key_num = Chiclet_Keyboard_Scan(0); //按键扫描
if(key_num ==1) //有按键按下
{
LED = ~LED;
}
else if(key_num == 2)
{
sprintf(send_buf,"N:%f E:%f",N_num_new,E_num_new);
Sim900a_Send_English("15295492643", send_buf);
}
}/****
*******监测函数
*****/
void Monitor_function(void)
{
if(time_num % 2 == 0) //获取数据
{
distance_value = Hcsr04_GetDistance(25); //获取距离值
}
if(USART2_WaitRecive() == 0) //通过GPS获取经纬度
{
if(strstr((char *)usart2_buf,"GNRMC"))
{
result = strstr((char *)usart2_buf,"A,");
if(result != NULL)
{
result = result+2;
N_num = (float)atof(result);
N_du = (uint16_t)(N_num / 100.0);
N_fen = N_num-N_du*100;
N_num = N_du + N_fen/60.0;
if(0 < N_num && N_num < 60)
N_num_new = N_num;
}
result = strstr((char *)usart2_buf,"N,");
if(result != NULL)
{
result = result+2;
E_num = (float)atof(result);
E_du = (uint16_t)(E_num / 100.0);
E_fen = E_num-E_du*100;
E_num = E_du + E_fen/60.0;
if(70 < E_num && E_num < 150)
E_num_new = E_num;
}
}
USART2_Clear();
}
}
/****
*******处理函数
*****/
void Manage_function(void)
{
if(distance_value < 10)
{
if(time_num % 10 == 0)
{
BEEP = ~BEEP;
}
}
else
{
BEEP = 0;
}
}
http://资料点击该链接到官网下载:www.mcubee.comhttp://资料点击该链接到官网下载:www.mcubee.com