功能介绍:
0.本系统采用STC89C52作为单片机
1.导盲仗的上部和底部分别设置超声波传感器,利用超声波测距原理分别测得盲人面部和脚底离障碍物的距离,并将障碍信息通过语音播报传递给盲人
2.导盲杖设有光照传感器,利用光敏电阻测量环境光照,光照强度小于某个阈值时,自动打开导盲杖的照明LED灯带。以便引起行人及车辆注意。
3.在导盲杖的底部安装积水探测传感器,来检测积水,如果有积水则进行蜂鸣器报警,进而提醒盲人躲避积水。
4.导盲杖设有温度传感器,按键可语音播报当前温度,为盲人增添衣物提供参考。
5.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:

PCB:

主程序:

#include "main.h"/*******************变量定义*********************/
sbit TRIG_1 = P2^4; //接口定义
sbit ECHO_1 = P2^5; //接口定义
sbit TRIG_2 = P1^1; //接口定义
sbit ECHO_2 = P1^0; //接口定义
float f_distance1 = 0; //距离1
float f_distance2 = 0; //距离2
int tempBuf = 0; //读取温度值
float temperature; //实际温度值bit refreshFlag = 0;
bit sendFlag = 0;unsigned int lightValue;
unsigned int waterValue;char dis[32];/********************************************************
函数名称:void mian()
函数作用:主函数
参数说明:
********************************************************/
void main()
{BUZZER = ON;LED = ON;DelayS(1);BUZZER = OFF;LED = OFF;TRIG_1 = 0;TRIG_2 = 0;Timer0_Init(); //初始化定时器0Timer1_Init(); //初始化定时器1UART_Init(); //初始化串口DS18B20_Start();DS18B20_GetTemp(&tempBuf);temperature = (float)tempBuf * 0.0625; //温度值转换while (1) //死循环{if (refreshFlag == 1){refreshFlag = 0;Measuring();TR1 = 0;if (f_distance1 <= 1500) //上方探测小于1500mm{UART_SendStr("注意前方障碍物\r\n", 16); //发送数据DelayS(3);}if (f_distance2 <= 1500) //下方探测小于1500mm{UART_SendStr("注意脚下障碍物\r\n", 16); //发送数据DelayS(3);}TR1 = 1;if (lightValue < 40) //环境光低于40%{LED = ON;}else{LED = OFF;}if (waterValue > 10) //前方有积水{BUZZER = ON;}else{BUZZER = OFF;}}if (KEY_TEMP == 0) //语音播报温度按键按下{DelayMs(20);if (KEY_TEMP == 0){TR1 = 0;DS18B20_Start();DS18B20_GetTemp(&tempBuf);temperature = (float)tempBuf * 0.0625; //温度值转换sprintf(dis, "当前温度%4.1f摄氏度\r\n", temperature); //打印温度值UART_SendStr(dis, 20);DelayS(2);TR1 = 1;}while (!KEY_TEMP);}}
}/************************* 定时器0初始化 *************************/
void Timer0_Init(void)
{TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH0 = 0;TL0 = 0;EA = 1;  //总中断打开ET0 = 1; //定时器中断打开TR0 = 0; //定时器开关关闭
}/************************* 定时器0中断 *************************/
void Timer0_Interrupt(void) interrupt 1
{}/************************* 定时器1初始化 *************************/
void Timer1_Init(void)
{TMOD |= 0x10; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH1 = (65536 - 9216) / 256; //重新赋值 10msTL1 = (65536 - 9216) % 256;EA = 1;  //总中断打开ET1 = 1; //定时器中断打开TR1 = 1; //定时器开关打开
}/************************* 定时器1中断 *************************/
void Timer1_Interrupt(void) interrupt 3
{static unsigned int time50ms  = 0;TL1 = 0x00;        //设置定时初始值TH1 = 0x4C;       //设置定时初始值 50mstime50ms++;if (time50ms > 20){refreshFlag = 1; //显示标志time50ms = 0;}
}void Measuring(void)
{static long cnt = 0; //定时器计数TR1 = 0;TRIG_1 = 1; //启动一次模块        //不可以使用其他终端 容易造成死循环DelayUs10x(1);TRIG_1 = 0;while (!ECHO_1);    //当RX为零时等待TR0 = 1; //开启计数while (ECHO_1); //当RX为1计数并等待TR0 = 0;cnt = (long)(TH0 * 256 + TL0);TH0 = 0;TL0 = 0;f_distance1 = (float)cnt * 17 / 100.0 * 1.102; //算出来是mm (g_cnt * 340 / 2) / 1000.0 * 1.102;系数cnt = 0;TRIG_2 = 1; //启动一次模块      //不可以使用其他终端 容易造成死循环DelayUs10x(1);TRIG_2 = 0;while (!ECHO_2);    //当RX为零时等待TR0 = 1; //开启计数while (ECHO_2); //当RX为1计数并等待TR0 = 0;cnt = (long)(TH0 * 256 + TL0);TH0 = 0;TL0 = 0;f_distance2 = (float)cnt * 17 / 100.0 * 1.102; //算出来是mm (g_cnt * 340 / 2) / 1000.0 * 1.102;系数cnt = 0;TR1 = 1;lightValue = 100 - 100 * ReadADC(AIN0_GND) / 255; //光照强度waterValue = 100 - 100 * ReadADC(AIN1_GND) / 255; //水滴值}/************************* 串口配置 *************************/
void UART_Init(void)
{SCON = 0x50;TH2 = 0xFF;TL2 = 0xDB;RCAP2H = 0xFF;  //(65536-(FOSC/32/BAUD))   BAUD = 9600 FOSC = 11059200RCAP2L = 0xDB;/*****************/TCLK = 1;RCLK = 1;C_T2 = 0;EXEN2 = 0;/*****************/TR2 = 1;ES   = 1; //打开串口中断EA   = 1; //打开总中断}/************************* 串口发送字节 *************************/
void UART_SendByte(unsigned char dat) //串口发送单字节数据
{unsigned char time_out;time_out = 0;SBUF = dat;                        //将数据放入SBUF中while ((!TI) && (time_out < 100)) //检测是否发送出去{time_out++;DelayUs10x(2);}      //未发送出去 进行短暂延时TI = 0; //清除ti标志
}/************************* 串口发送字符串 *************************/
void UART_SendStr(unsigned char *s, unsigned char length)
{unsigned char num;num = 0x00;while (num < length) //发送长度对比{UART_SendByte(*s); //放松单字节数据s++;            //指针++num++;            //下一个++}
}/************************* 串口中断 *************************/
void UART_Interrupt(void) interrupt 4 //串行中断服务程序
{if (RI)//判断是接收中断产生{RI = 0; //标志位清零}
}

仿真演示视频:
https://www.bilibili.com/video/BV1EY4y1578X/

实物演示视频:
https://www.bilibili.com/video/BV1HY4y1675F/

基于51单片机的智能导盲杖语音播报积水检测温度提示灯光照明proteus仿真原理图相关推荐

  1. 基于51单片机的智能停车场管理车位引导系统红外检测无线蓝牙/WiFi手机APP控制设计

    本系统由STC89C52单片机.(无线蓝牙/WIFI模块-可选).红外对管传感器.LCD1602液晶显示.LED指示灯及电源组成. 通过红外对管模块实时检测车位是否占用,车位分为1车位.2车位.3车位 ...

  2. 基于51单片机的智能无线LED灯控制 蓝牙手机APP控制灯亮灭亮度方案原理图设计

    硬件电路的设计 (下方附文件) 系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STC89C52单片机电路+8位LED灯电路+蓝牙模块电路+电源电路组成. 1.通过手机APP可以控制8路 ...

  3. 基于51单片机的智能红外遥控防雨晾衣架 雨滴光强检测系统proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前雨滴/光强/温湿度/晾衣架状态 2.支持手动/自动两种模式 3.自动模式下,当雨滴<5/光强<80同时满 ...

  4. 基于51单片机的智能家居防火防盗系统设计

    基于51单片机的智能家居防火防盗系统设计 自动开关灯,温度,烟雾浓度报警,数值可调节等:附赠资料包含原理图,仿真,代码(C语言),实物的元件清单及功能演示视频.适合课设. CSDN内下载地址:下载地址 ...

  5. 基于51单片机的智能晾衣架系统设计

    1.功能介绍 设计基于51单片机的智能晾衣架.主要功能如下: (1)控制晾衣架的升降. (2)具有限位开关功能. (3)具有无线遥控功能. (4)能够指示运行状态. (5)具有智能模式,可以根据环境光 ...

  6. 基于51单片机简易智能家居

    基于51单片机的智能家居的设计 前言 一.项目简介 二.开发环境/工具: 1.Keil 5/Keil 4 2.STC-ISP 3.蓝牙串口助手 4.手机app 三.硬件设计: 1.单片机与蓝牙模块连接 ...

  7. 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计

    1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...

  8. 基于51单片机的智能火灾报警系统

    具体实现功能 系统由51单片机+MQ-2烟雾传感+ADC0832模数转换芯片+DS18B20温度传感器+数码管显示+按键模块+声光报警模块构成. 具体功能: 1.实时监测及显示温度值和烟雾浓度: 2. ...

  9. 【资料分享】基于51单片机的智能指纹考勤系统设计-原理图-PCB-程序-报告、基于51单片机和MAX1898的智能手机充电器设计

    1661[毕设课设]基于51单片机的智能指纹考勤系统设计-原理图-PCB-程序-报告 摘 要 随着科学技术的不断发展带动着电子行业的地位越来越重,现在电子产品几乎在社会的各个领域都可以见到.这些技术的 ...

最新文章

  1. 美国新桥投资集团(Newbridge Capital) [from baike]
  2. Vue使用better-scroll左右菜单联动
  3. Android MVP模式 简单易懂的介绍方式
  4. python调用动态库出现error193_切换到64位时使用Python Winerror 193
  5. Docker入门系列(一):目标和安排
  6. 计算机网络 间接路由选择与直接路由选择
  7. (22)Spring Boot 拦截器HandlerInterceptor【从零开始学Spring Boot】
  8. MySQL 5.7 参考手册(官方中文版) | 2.2 安装和升级MySQL
  9. iperf3 万兆测试
  10. 临别给《生活大爆炸》做个台词数据分析,你猜谢耳朵最爱说什么?
  11. android 图片存取方法,6种备份Android照片的方法
  12. 关于微信小程序申请及个人信息和微信账号的问题
  13. 想要刚毕业就月入过万必须要懂这些面试题(Vue 篇)
  14. 那么厉害的个人所得税计算器代码你竟然不点开看看,你膨胀了!
  15. 【空间描述与位姿变换】(台大林沛群课程学习笔记)持续更新~
  16. 均州古城(走遍中国08.10.27)
  17. 记录: 微信公众号部署之 单域名多公众号部署
  18. 烤仔的朋友们丨现有的食品溯源系统能够保护“西城大爷”吗?
  19. .net 程序访问数据库之异常SqlException (0x80131904)
  20. 麻将游戏C++洗牌算法分析并实现跨平台

热门文章

  1. 太闲则别念窃生,太忙则真性不现
  2. 名帖03 李阳冰 篆书《谦卦碑》
  3. 技术交流群,期待热爱技术的你加入
  4. 【PPT】数字化转型的主要任务、挑战与措施
  5. Python 下载Bing首页高清图片
  6. could not open selected vm debug port (8700)解决方法
  7. 在FlashBuilder里的ActionScript工程中使用Flash CS5中的类 fl.controls库
  8. 公司企业邮箱有哪些好用的功能,邮件撤回怎么用?
  9. Outlook邮箱已经发出的邮件怎么撤回或重发替换
  10. 超级仓库管理系统---(1)概述