【STC8A8K64D4开发板】第3-5讲:人体红外感应传感器

第3-5讲:人体红外感应传感器

    1. 学习目的
  1. 了解人体红外感应传感器的功能。
  2. 掌握单片机编程读取人体红外感应传感器数字输出状态,从而判断有没有人。
    1. 人体红外感应传感器简介

HC-SR501是基于红外线技术的自动控制模块,采用LHl788探头设计,灵敏度高,可靠性强,低电压工作模式,广泛应用于各类自动感应电器设备,尤其是干电池供电的自动控制产品。

HC-SR501能检测到人体身上发出的红外线,并根据检测结果输出高低电平,由此我们可以使用HC-SR501人体红外检测模块来检测是否有人。当有人进入感应范围时,HC-SR501模块输出高电平,人不离开感应范围,将持续输出高电平,人离开后,HC-SR501模块关闭高电平,输出低电平。

图1:人体红外感应传感器

  1. 选择触发(通过跳线选择)
  1. L:不可重复,默认为L(图1中跳线连接的方式即为L)。感应输出高电平后,延时时间一结束,输出将自动从高电平变为低电平。
  2. H:可重复。感应输出高电平后,在延时时间段内,如果有人体在其感应范围内活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平。
  1. 调节灵敏度和感应延时
  1. 调节灵敏度电位器顺时针旋转,灵敏度增加,反之,灵敏度降低。
  2. 调节延时电位器顺时针旋转,感应延时加长,反之,感应延时减短。
  1. HC-SR501人体感应模块参数
  1. 工作电压范围:直流电压(4.5-20)V。
  2. 静态电流:<50uA。
  3. 电平输出:高电平3.3 V ,低电平0V。
  4. 触发方式:L不可重复触发,H重复触发(默认不可重复触发)。
  5. 延时时间:0.5-200S(可调)可制作范围零点几秒-几十分钟。
  6. 封锁时间:2.5S(默认)可制作范围零点几秒-几十秒。
  7. 感应角度:<100度锥角。
  8. 工作温度:-15~+70度。
  9. 感应透镜尺寸:直径:23mm。
  10. 电路板外形尺寸:32mm*24mm
  1. 传感器应用范围

人体感应灯具 ,人体感应玩具,安防产品,工业自动化控制,自动感应电器设备,电池供电自动控制等。

  1. 引脚说明

HC-SR501人体红外检测模块的引脚如下图所示。

图2:人体红外感应传感器引脚

    1. 软件设计
      1. 雨滴传感器实验
  • 注:本节的实验是在“实验2-6-1:串口1数据收发实验”的基础上修改,本节对应的实验源码是:“实验3-5-1:HC-SR501人体红外感应实验”。
        1. 实验内容

单片机实时读取HC-SR501人体红外感应模块输出引脚的状态,以此判断有没有人经过,并通过串口输出检测结果。

  1. 高电平:检测到有人经过,指示灯D1点亮,串口输出提示信息。
  2. 低电平:没有检测到有人经过,指示灯D1熄灭。
        1. 代码编写

本节的代码比较简单,我们直接在“main.c”文件中编写相关的代码。

  1. 定义引脚

首先,定义连接HC-SR501人体红外感应模块输出的引脚,本例中,我们用P5.1连接雨滴传感器的数字输出引脚,定义如下。

代码清单:引用头文件

  1. sbit sensor_in = P5^1;     //用于读取HC-SR501人体红外感应模块输出引脚状态
  1. 读取引脚状态

程序初始化时将P5.1引脚配置为准双向,主循环中不断读取该引脚状态,如为高电平,则认为有人经过,代码清单如下。

代码清单:主函数

  1. /************************************************************************** 
  2. 功能描述:主函数 
  3. 入口参数:无 
  4. 返 回 值:int类型 
  5. **************************************************************************/  
  6. int main(void)  
  7. {  
  8.     P2M1 &= 0xBF;   P2M0 &= 0xBF;     //设置P2.6为准双向口(LED1)  
  9.     P3M1 &= 0xFE;   P3M0 &= 0xFE;     //设置P3.0为准双向口(串口1的RxD)  
  10.     P3M1 &= 0xFD;   P3M0 |= 0x02;     //设置P3.1为推挽输出(串口1的TxD)  
  11.     P5M1 &= 0xFD;   P5M0 &= 0xFD;     //设置P5.1为准双向口 (HC-SR501人体红外感应模块输出)  
  12.     uart1_init();                     //串口1初始化  
  13.     while(1)  
  14.     {  
  15.         if(sensor_in == 1)            //感应到有人经过,HC-SR501数据引脚输出高电平
  16.         {  
  17.             led_on(LED_1);                               //点亮用户指示灯D1  
  18.             printf("Detected someone passing by \r\n");  //串口输出提示信息  
  19.         }  
  20.         else                       
  21.         {  
  22.             led_off(LED_1);               //熄灭用户指示灯D1
  23.         }  
  24.         delay_ms(100);                    //延时100ms,方便在串口调试助手中观察实验数据  
  25.     }  
  26. }  
        1. 硬件连接

如下图所示,用杜邦线将HC-SR501人体红外感应模块的VCC和GND分别连接到开发板J19端子的3V3和GND上,输出引脚连接到J14端子的P51上。

图3:硬件连接

        1. 实验步骤
  1. 解压“…\第3部分:配套例程源码”目录下的压缩文件“实验3-5-1:HC-SR501人体红外感应实验”,将解压后得到的文件夹拷贝到合适的目录,如“D\STC8”(这样做的目的是为了防止中文路径或者工程存放的路径过深导致打开工程出现问题)。
  2. 双击“…\HC-SR501\project”目录下的工程文件“HC-SR501.uvproj”。
  3. 点击编译按钮编译工程,编译成功后生成的HEX文件“HC-SR501.hex”位于工程的“…\HC-SR501\Project\Object”目录下。
  4. 打开STC-ISP软件下载程序,下载使用内部IRC时钟,IRC频率选择:24MHz。
  5. 电脑上打开串口调试助手,选择开发板对应的串口号,将波特率设置为9600bps。
  6. 程序运行后,当HC-SR501人体红外感应模块检测到有人经过时,指示灯D1点亮,并通过串口输出提示信息。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是STC8A8K64D4单片机与JDY-31蓝牙模块进行通信的基本代码: ```c #include <STC8.H> #include <intrins.h> #define FOSC 24000000L //系统时钟频率 #define BAUD 9600 //串口波特率 #define MD0 P3_0 //定义STC8A8K64D4 P3.0引脚作为蓝牙模块的模式选择引脚 bit busy; //串口忙标志位 unsigned char RcvBuff; //串口接收缓冲区 void InitUART() //初始化串口 { SCON = 0x50; //8位数据,可变波特率 TMOD &= 0x0F; //清除原来的定时器设置 TMOD |= 0x20; //设定定时器1为8位自动重装方式 TH1 = TL1 = -(FOSC/12/32/BAUD);//设定波特率 TR1 = 1; //启动定时器1 ES = 1; //串口中断允许 EA = 1; //总中断允许 } void UART_SendByte(unsigned char dat) //串口发送一个字符 { while(busy); //等待前面的数据发送完成 busy = 1; SBUF = dat; //写数据到UART数据寄存器 } void main() { InitUART(); //初始化串口 while(1) { MD0 = 0; //将P3.0引脚置为低电平,使蓝牙模块进入AT指令模式 UART_SendByte('A'); //向蓝牙模块发送AT指令 MD0 = 1; //将P3.0引脚置为高电平,使蓝牙模块退出AT指令模式 } } void UART_Isr() interrupt 4 using 1 //串口中断服务程序 { if(RI) { RI = 0; RcvBuff = SBUF; } if(TI) { TI = 0; busy = 0; } } ``` 以上代码实现了串口初始化、发送一个字符的函数以及主函数中对蓝牙模块的AT指令操作。其中,P3.0引脚作为蓝牙模块的模式选择引脚,当该引脚为低电平时,蓝牙模块进入AT指令模式;当该引脚为高电平时,蓝牙模块退出AT指令模式。此外,还需要注意将STC8A8K64D4单片机的串口接口连接到JDY-31蓝牙模块的TX和RX引脚上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电子友人张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值