基于51单片机的智能导盲杖语音播报积水检测温度提示灯光照明proteus仿真原理图
功能介绍:
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仿真原理图相关推荐
- 基于51单片机的智能停车场管理车位引导系统红外检测无线蓝牙/WiFi手机APP控制设计
本系统由STC89C52单片机.(无线蓝牙/WIFI模块-可选).红外对管传感器.LCD1602液晶显示.LED指示灯及电源组成. 通过红外对管模块实时检测车位是否占用,车位分为1车位.2车位.3车位 ...
- 基于51单片机的智能无线LED灯控制 蓝牙手机APP控制灯亮灭亮度方案原理图设计
硬件电路的设计 (下方附文件) 系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STC89C52单片机电路+8位LED灯电路+蓝牙模块电路+电源电路组成. 1.通过手机APP可以控制8路 ...
- 基于51单片机的智能红外遥控防雨晾衣架 雨滴光强检测系统proteus仿真原理图PCB
功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前雨滴/光强/温湿度/晾衣架状态 2.支持手动/自动两种模式 3.自动模式下,当雨滴<5/光强<80同时满 ...
- 基于51单片机的智能家居防火防盗系统设计
基于51单片机的智能家居防火防盗系统设计 自动开关灯,温度,烟雾浓度报警,数值可调节等:附赠资料包含原理图,仿真,代码(C语言),实物的元件清单及功能演示视频.适合课设. CSDN内下载地址:下载地址 ...
- 基于51单片机的智能晾衣架系统设计
1.功能介绍 设计基于51单片机的智能晾衣架.主要功能如下: (1)控制晾衣架的升降. (2)具有限位开关功能. (3)具有无线遥控功能. (4)能够指示运行状态. (5)具有智能模式,可以根据环境光 ...
- 基于51单片机简易智能家居
基于51单片机的智能家居的设计 前言 一.项目简介 二.开发环境/工具: 1.Keil 5/Keil 4 2.STC-ISP 3.蓝牙串口助手 4.手机app 三.硬件设计: 1.单片机与蓝牙模块连接 ...
- 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计
1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...
- 基于51单片机的智能火灾报警系统
具体实现功能 系统由51单片机+MQ-2烟雾传感+ADC0832模数转换芯片+DS18B20温度传感器+数码管显示+按键模块+声光报警模块构成. 具体功能: 1.实时监测及显示温度值和烟雾浓度: 2. ...
- 【资料分享】基于51单片机的智能指纹考勤系统设计-原理图-PCB-程序-报告、基于51单片机和MAX1898的智能手机充电器设计
1661[毕设课设]基于51单片机的智能指纹考勤系统设计-原理图-PCB-程序-报告 摘 要 随着科学技术的不断发展带动着电子行业的地位越来越重,现在电子产品几乎在社会的各个领域都可以见到.这些技术的 ...
最新文章
- 美国新桥投资集团(Newbridge Capital) [from baike]
- Vue使用better-scroll左右菜单联动
- Android MVP模式 简单易懂的介绍方式
- python调用动态库出现error193_切换到64位时使用Python Winerror 193
- Docker入门系列(一):目标和安排
- 计算机网络 间接路由选择与直接路由选择
- (22)Spring Boot 拦截器HandlerInterceptor【从零开始学Spring Boot】
- MySQL 5.7 参考手册(官方中文版) | 2.2 安装和升级MySQL
- iperf3 万兆测试
- 临别给《生活大爆炸》做个台词数据分析,你猜谢耳朵最爱说什么?
- android 图片存取方法,6种备份Android照片的方法
- 关于微信小程序申请及个人信息和微信账号的问题
- 想要刚毕业就月入过万必须要懂这些面试题(Vue 篇)
- 那么厉害的个人所得税计算器代码你竟然不点开看看,你膨胀了!
- 【空间描述与位姿变换】(台大林沛群课程学习笔记)持续更新~
- 均州古城(走遍中国08.10.27)
- 记录: 微信公众号部署之 单域名多公众号部署
- 烤仔的朋友们丨现有的食品溯源系统能够保护“西城大爷”吗?
- .net 程序访问数据库之异常SqlException (0x80131904)
- 麻将游戏C++洗牌算法分析并实现跨平台