找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3027|回复: 1
收起左侧

基于51单片机的超声波导盲杖程序电路设计 HC-SR04,GA6

[复制链接]
ID:872579 发表于 2021-1-8 14:40 | 显示全部楼层 |阅读模式
带有通信功能的基于超声波来实现障碍物检测的导盲杖
GPS定位信息发送功能:以串口通信的形式将GPS定位模块内的定位信息下载到单片机最小系统,再对定位信息进行处理将经纬度信息分离出来通过GSM模块以短信形式发送给事先设置好的手机号码。
1.png 2.png 3.png 4.png 5.png 6.png 7.png
超声波避障功能:利用超声波测量与前方物体的距离,当距离小于1米时,由单片机控制蜂鸣器发出报警声提示盲人。
一键寻回功能:当导盲杖找不到时,我们可以通过点击手中的遥控器让导盲杖上的蜂鸣器发出报警声,辅助我们寻找。
上面我们对功能做了介绍,下面主要讲解一下整个系统硬件及软件设计:
GPS定位信息发送功能:我们选择使用GPS定位模块搭配GSM模块来实现,
GPS模块内部原理是当GPS模块获取到定位信息时,会通过TX引脚将整个GPS定位信息发送出去,所以我们只需要将单片机串口接收引脚与GPS模块发送引脚相连,设置串口通信波特率为9600,即可接收到当前定位信息。
GSM模块内部通信原理是,当我们只是用短信发送功能时,我们只需要通过串口向GSM模块发送AT指令及短信内容信息,即可控制GSM模块完成短信的发送,所以硬件电路上我们只需要将单片机串口发送引脚与GSM模块RX接收引脚相连接,即可满足整个功能要求。
超声波避障功能: HC-SR04超声波模块工作原理:(1)采用I/O引脚触发测距,给Trig引脚一个至少10us的高电平信号;(2)模块自动发送8个40khz的方波,自动检测是否有信号返回   (3)有信号返回,通过Echo引脚输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;  所以我们在设计硬件电路时只需要将Trig引脚和Echo引脚接入单片机系统,由单片机通过Trig触发测距并对Echo引脚的高电平持续时间进行计时即可满足功能的要求。
一键巡回功能:我们主要使用PT2262和PT2272编解码电路来实现此功能,
编码芯片PT2262发出的编码信号由地址码、数据码、同步码组成一个完整的码字。地址码是由地址管脚A0-A7的状态(高位/悬空/低位)决定,PT2262和PT2272需要地址管脚状态完全相同,生成的地址码才会完全相同,PT2272才会正常接收PT2262的信号。D0-D3管脚为数据管脚,用以生成数据码,数据码用于在PT2262与PT2272之间同步D0-D3管脚的状态。
本设计中选择将PT2262/PT2272 A0-A7地址管脚统一悬空,当PT2262按键下时,D0-D3管脚置为高电平生成相应的数据码,同时控制433MHZ发射电路将DOUT引脚输出的经过调制的串行数据信号在高频载波上发射出去
PT2272接收到后,进行解码,先核对地址码是否相同,如果相同,则查看数据编码,并按照数据编码将本端的D0-D3管脚全部置为高电平。
将PT2272的D1管脚与单片机相连,用单片机检测管脚的状态,当管脚为高电平时,即控制蜂鸣器发出报警。

电路原理图如下:
51hei.png

单片机源程序如下:
  1. #include <intrins.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <string.h>
  5. #include <delay.h>
  6. #include <Ultrasonic.h>
  7. #include"uart.h"


  8. //定义IO
  9. //按键
  10. sbit beep=P1^2;
  11. sbit keysend=P1^1;//发送位置短信
  12. sbit pt=P3^7; //PT2272感应信号
  13. bit flagxun=0;//寻物标志位

  14. unsigned char code PhoneNO[]= "123456789"; //接收方号码   

  15. //GPS数据接收变量
  16. bit flag1=0;
  17. char com1;
  18. char xdata com2[38];//变量接收中间数组

  19. unsigned char cc=0;//变量数组计数
  20. bit flag2=0;//数据接收完处理标志位

  21. //短信数组
  22. char xdata duanxin[]="N:  .   W:   .  ";

  23. void Delay1000ms()               
  24. {
  25.         unsigned char i, j, k;

  26.         i = 43;
  27.         j = 6;
  28.         k = 203;
  29.         do
  30.         {
  31.                 do
  32.                 {
  33.                         while (--k);
  34.                 } while (--j);
  35.         } while (--i);
  36. }

  37. //发送短信

  38. void sendmessage()
  39. {
  40.                    Uart_Send_Byte2("AT+CMGF=1\r\n");        
  41.                 Delay1000ms();
  42.                 Uart_Send_Byte2("AT+CSCS=\"GSM\"\r\n");        
  43.                 Delay1000ms();
  44.                 Uart_Send_Byte2("AT+CMGS=");        
  45.                 Uart_Send_Byte('"');
  46.                 Uart_Send_Byte2(PhoneNO);   
  47.                 Uart_Send_Byte('"');
  48.                 Uart_Send_Byte('\r');               
  49.                 Uart_Send_Byte('\n');               
  50.                 Delay1000ms();
  51.                 Uart_Send_Byte2(duanxin);  
  52.                 Delay1000ms();
  53.                 Uart_Send_Byte(0x1a);               
  54.                 Delay1000ms();
  55.                 Delay1000ms();
  56.                 Delay1000ms();
  57.                 Delay1000ms();
  58.                 Delay1000ms();
  59. }
  60.                                                                           
  61. //按键检测
  62. void keyscan()
  63. {
  64.         if(keysend==0)
  65.         {
  66.                 Delay_Ms(5);if(keysend==0)
  67.                 {
  68.                          while(flag2!=1);//等待接收到GPS信号
  69.                           duanxin[2]=com2[19];duanxin[3]=com2[20];duanxin[5]=com2[21];duanxin[6]=com2[22];
  70.                           duanxin[10]=com2[32];duanxin[11]=com2[33];duanxin[12]=com2[34];duanxin[14]=com2[35];
  71.                           duanxin[15]=com2[36];
  72.                           sendmessage();
  73.                           flag2=0;        
  74.                 }
  75.                 while(!keysend);
  76.         }
  77.         if(pt==1) {Delay_Ms(50);if(pt==1) {beep=~beep;flagxun=~flagxun;} Delay_Ms(500);while(pt);} //遥控找拐杖
  78. }


  79. void main()
  80. {
  81.         beep=1;pt=1;
  82.         Uart_Init();
  83.         init_timer1();
  84.         while(1)
  85.         {        
  86.                 keyscan();
  87.                 display_volume();
  88.                 if(distance_data<100) beep=0;//超声测距报警
  89.                 if(distance_data>=100&&flagxun==0) beep=1;
  90.         }
  91. }

  92. void Uart_Isr() interrupt 4
  93. {
  94.     RI = 0;            
  95.         com1 = SBUF;         
  96.         if(com1=='

  97. )         {flag1=1;}
  98.         if(flag1==1) {com2[cc]=com1;cc++;}
  99.         if(cc==38) {if(com2[4]=='M'&&com2[17]=='A') {flag2=1;}  flag1=0;cc=0;}
  100. }
复制代码

所有资料51hei提供下载,可能有较多bug请大家多多批评指教:
导盲杖资料.7z (4.56 MB, 下载次数: 68)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1070910 发表于 2023-4-16 17:47 | 显示全部楼层
有仿真吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表