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

基于单片机智能拐杖软件设计 主控板- ST STC89C51系列是由STC公司制造的STC89C51兼容的8位微控制器(μC)系列。基于8051内核,由于其行业标准指令集,低单位成本以及DIL(DIP)封装中的这些芯片的可用性,因此AT89系列仍然非常受欢迎。这允许在新应用程序中重新使用大量的旧代码而不进行修改。虽然比较新的AT90系列AVR RISC微控制器的功能较弱,但AT89系列的新产品开发继续为上述优点。 阅读详情

功能介绍:
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(); //初始化定时器0
    Timer1_Init(); //初始化定时器1
    UART_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; //重新赋值 10ms
    TL1 = (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;		//设置定时初始值 50ms
    time50ms++;

    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 = 11059200
	RCAP2L = 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/

STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距 STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距 关键词:语音提示盲人拐杖 整点报时 超声波测距拐杖 阅读详情

相关推荐

140 基于单片机盲仪避障语音报警系统设计【毕设课设】

本设计由STC89C52单片机+红外避障传感器电路+语音报警电路+电源电路设计而成。1、通过红外避障传感器检测前方障碍物,检测距离为3-80cm可调。2、红外避障传感器检测到障碍物,语音报警。51盲仪语音报警设计-红外避障-语音。

yxsnss的博客 396

基于单片机盲拐杖设计

EPSON系列的单片机是由精工爱普生(SEIKO EPSON)自主开发的CMOS32位RISCCPU为核心,加上不同的外围电路制成多种型号的MCU,这些产品可以应用于不同的领域:掌上电脑(PDA),移动信息终端,网络设备,办公室OA设备,PC接口设备,智能玩具,GPS应用等,其中它的主要特点有强大的CPU内核,采用RISC结构,三级流水线,105条16位长指令,其大多数指令在一个时钟周期内执行,大大提高了指令的执行效率。单片机在接收到传感器的信息后,将传感器的信号转换为距离信息,通过语音播报或振动提示

I1125787856的博客 1406

STM32 Proteus仿真语音播报SGP30火灾报警器温度湿度-0072

硬件组成:STM32F103C6单片机 +0.960LED显示屏+DHT11温度湿度+电位器模拟SGP30二氧化碳传感器+蜂鸣器LED+串口模拟语音播报+电机模拟电风扇换气+多个按键 1.0.960LED显示屏显示烟雾浓度,温湿度,CO2浓度 2.电位器MQ-2烟雾传感器检测烟雾浓度,单片机通过内部ADC采集电压准确计算出烟雾浓度。 3.当检测到火灾发生(温度 烟雾 CO2任意一个值超过设定值或者湿度过低或者有火焰)时,蜂鸣器报警。电风扇进行换气 4.当有火焰或者烟雾异常语音播报“发生火灾,请尽快疏散到

zhaxiaobian_er的博客 2681

基于单片机智能盲杖设计 (论文+源码)

应用STC89C52单片机微处理器进行研究一种智能手杖系统,需要同时实现超声波自动测距、语音自动报警、距离自动显示、电机震动报警、LED指示灯灯光明灭自动提醒等多种功能,在手机通信提醒模式下手机用户可拨打固定手机电话信号实现手机通信提醒功能。在阴暗环境下LED指示灯发光。如遇到各种紧急情况,用户手机可实现一般按键紧急定位报警发送功能,采用SIM868芯片进行一键报警,将手机GPS上的定位报警信息直接通过手机GSM发送到相关固定用户手机,以便及时得知相关用户定位信息。

1624

基于51单片机智能超声波语音盲仪提醒距离播报控灯设计57X

功能描述:本系统由STC89C52单片机最小系统电路、OLED液晶显示电路、超声波测量电路、光敏检测电路、JR6001语音播报电路、高亮LED驱动电路、按键电路及电源组成。【1】通过OLED液晶实时显示超声波测量距离、设置距离阈值、光照强度及高亮LED的亮灭状态。JR6001语音电路根据当前的设置状态,对触发情况进行语音播报相应信息。【2】上电初始化。液晶显示“智能盲仪”。此时播报当前的设置阈值。通过按键可以设置超声波测量距离阈值,并且有语音提醒设置的阈值,播报有“阈值0.5米”、“阈值1米”、“阈值1.

Danpianjihuizong的博客 353

Verilog - 利用加法器实现乘法器 [代码]

module multiplier ( input [2:0] x, input [2:0] y, output [5:0] mult_out ); wire [2:0] temp0 = y[0] ? x : 3'd0; wire [2:0] temp1 = y[1] ? x : 3'd0; wire [2:0] temp2 = y[2] ? x : 3'...

理论结合实践,开启你的电子学习新方案! 5887

基于单片机智能盲杖设计(论文+源码)

超声波感应距离测距功能:通过系统搭载新的超声波高速距离测距速度功能模块对前方路况进行高速监测,超声波距离测距功能模块最大范围可同时提供2cm-400cm的非接触式高速行驶距离实时感应速度监测以及跟踪服务功能,测距时的感应精度最大范围可达高速距离达到3mm,为盲人提供安全保障;GPS/GSM功能:遇到各种紧急情况,用户手机可实现一般按键紧急定位报警发送功能,将手机GPS上的定位报警信息直接通过手机GSM发送到相关固定用户手机,以便及时得知相关用户定位信息。显示功能:主要显示前方障碍物距离;

2114

基于51单片机智能盲手杖—超声波测距

具体功能: 1.显示前方障碍物距离。 2.实时测量距离,并通过蜂鸣器提醒距离过短,蜂鸣器蜂鸣发出预警。 3.可以通过按键调整蜂鸣器预警的距离。 4.可以显示实际温度,根据温度调整传感器测试计算,减少误差。

2401_82402501的博客 560

0219-基于单片机盲仪(播报)电路设计

1、采用51/52单片机(通用)作为主控芯片; 2、采用超声波模块对距离进行探测; 3、前方出现障碍物时,通过震动马达和语音播报提醒危险; 4、采用WT588D作为语音播报驱动; 4、采用数码管显示障碍物距离; 5、采用光敏传感器检测光照,天黑时警示灯开启,减少行人对盲人的碰撞。采用Altium Designer作为电路设计工具。Altium Designer通过把原理图设计、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设

理论结合实践,开启你的电子学习新方案! 858

基于51单片机智能盲拐杖Proteus仿真+源程序

采用51单片机作为主控CPU,采用HC-SR04超声波模块测量障碍物距离,LCD1602显示屏显示当前的障碍物距离,并且可以设置报警的阈值,通过传感器测量障碍物的距离的远近来进行相关报警,距离越近,蜂鸣器报警节奏越急促,来给盲人提示前面有障碍物,LCD1602可以显示当前的温度程序采用keil编写,并且有中文注释,新手容易看懂,仿真采用Proteus,全套仿真资料齐全:文末有资料分享:

m0_74295839的博客 630

【STM32项目】基于STM32多传感器融合的新型智能盲杖设计与实现教程(完整工程资料源码)

目前,中国盲人数量已突破两千万大关,而城市盲道设计不合理、盲道被非法侵占等危害盲人出行安全的问题屡禁不止[1-3]。随着科技发展,智能盲杖不断涌现,但这些智能盲杖并不智能[4,5]。针对市售智能盲杖无法探测上方障碍物、地面路况(如凹坑、楼梯高度)等缺点,本系统基于89C52单片机,采取多传感器融合的技术实现对上方障碍物、前方障碍物、路面情况的检测,并且辅以优化算法增加检测频率,使盲杖反应更快速、检测更灵敏。另外,盲杖还具有智能语音播报、夜晚LED安全灯、倾倒检测等辅助功能,方便盲人的出行。

嵌入式技术开发 1万+

Proteus仿真实例_基于STM32单片机语音播报体温计(仿真文件+程序)24-32f-04

语音播报体温计系统包括温度采集模块,语音播放模块,显示模块,其中核心 CPU采用单片机 STM32,STM32在电子行业运用广泛。温度采集模块使用 MLX90614红外传感器采集体温数据,语音播放模块采用以JR6001为核心的模块,显示模块使用OLED12864液晶模块。1. 系统运行后就会在OLED显示屏上显示体温,语音播报模块是通过一个UART串口模拟的,按下播报按键就会实现温度的播报。2. 点击下方链接进入串口助手(网页版),设置号好后就能接受语音播报信息,以此来体现语音播报的结果。

XCHardware的博客 1630

51单片机盲手杖_超声波测距+DS18B20测温设计

编号:S0019 盲手杖主要用于帮助视觉有障碍的人解决行动不便问题,具有成本低,使用方便等特点。主要要求有: 1.显示前方障碍物距离; 2.实时测量距离,并通过蜂鸣器提醒距离过短,蜂鸣器蜂鸣发出预警; 3.可以通过按键调整蜂鸣器预警的距离; 4.附加要求,可以显示实际温度,根据温度调整传感器测试计算,减少误差。

weixin_52733843的博客 1227

基于51单片机智能盲拐杖Proteus仿真

单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。也就是说在单片机上电启动的0.1S内,电容两端的电压从0-3.5V不断增加,这个时候10K电阻两端的电压为从5-1.5V不断减少(串联电路各处电压之和为总电压),所以RST引脚所接收到的电压是5V-1.5V的过程,也就是高电平到低电平的过程。

qq_17200045的博客 1455

51单片机语音提示盲人拐杖整点报时夜间警示超声波测距

51单片机语音提示盲人拐杖整点报时夜间警示超声波测距 关键词:语音提示盲人拐杖 整点报时 超声波测距拐杖

LS840233684的博客 1058

231、仿真-基于51单片机公交车温度时间显示站点语音播报Proteus仿真设计(程序+Proteus仿真+配套资料等)

方案一:STM32系列单片机控制,该型号单片机为LQFP44封装,内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ,在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节的闪存程序存储器,也就是说代码量可以写到128k字节,本次设计足够,内部高达20K字节的SRAM。

ENGLISH_HHZ的专栏 1251
上一篇: 基于51单片机的衣柜鞋柜湿度控制系统proteus仿真原理图PCB
下一篇: 基于51单片机的激光测速串口上传设计proteus仿真原理图PCB
极寒钛科技
博客等级 码龄6年 826粉丝 · 161原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值