和 12 岁小同志搞创客开发:手撕代码,做一款人体感应灯
机缘巧合在网上认识一位 12 岁小同志,从零开始系统辅导其创客开发思维和技巧。
项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html
本篇博文我们要手写代码做一款人体感应灯。要求:当有人经过的时候,LED 灯就会自动亮起,人一旦走开,LED 自动关闭了。这里用到的传感器是人体红外热释电运动传感器,它是一种能检测人或动物身体发射的红外线而输出电信号的传感器。
1、传感器原理
早在 1938 年,有人提出过利用热释电效应探测红外辐射,但并未受到重视,直到六十年代,随着激光、红外技术的迅速发展,才又推动了对热释电效应的研究和对热释电晶体的应用。热释电晶体已广泛用于红外光谱仪、红外遥感以及热辐射探测器,它可以作为红外激光的一种较理想的探测器。它目标正在被广泛的应用到各种自动化控制装置中。
热释电效应同压电效应类似,是指由于温度的变化而引起晶体表面荷电的现象。热释电传感器是对温度敏感的传感器。它由陶瓷氧化物或压电晶体元件组成,在元件两个表面做成电极,在传感器监测范围内温度有ΔT 的变化时,热释电效应会在两个电极上会产生电荷ΔQ,即在两电极之间产生一微弱的电压ΔV。由于它的输出阻抗极高,在传感器中有一个场效应管进行阻抗变换。热释电效应所产生的电荷ΔQ 会被空气中的离子所结合而消失,即当环境温度稳定不变时,ΔT=0,则传感器无输出。当人体进入检测区,因人体温度与环境温度有差别,产生ΔT,则有ΔT 输出;若人体进入检测区后不动,则温度没有变化,传感器也没有输出了。所以这种传感器检测人体或者动物的活动传感。
由实验证明,传感器不加光学透镜(也称菲涅尔透镜),其检测距离小于 2 米,而加上光学透镜后,其检测距离可大于 7 米。
2、代码实践
整个装置分为三个部分,输入,控制与输出。人体红外热释电运动传感器为输入设备,Arduino 就是控制设备,LED 发光模块就是输出设备。
由于人体红外热释电运动传感器为数字量的传感器,所以接数字口。LED 输出信号也是数字量,同样接数字口。
传感器连线效果如下所示:
实现代码如下所示:
程序开始在 setup()中通过 pinMode()函数将 LED 设置为输出模式,人体红外热释电运动传感器设置为输入模式。
有了输入设备,我要读取输入设备的值,才能进行之后的判断,所以 loop 函数一开始就是读取人体红外热释电运动传感器的值。读取数字传感器状态的函数是:digitalRead(),函数格式如下所示:
这个函数是用来读取数字引脚状态,高电平还是低电平。人体红外热释电传感器有人或者动物走动时,读到高电平,否则读到低电平。代码的后半段就是对判断出来的值来执行相应动作。(HIGH:高电平,代表 1,LOW:低电平,代表 0) 。
数字传感器只会读到两个值(HIGH 和 LOW)。
这里要用到新的一个语句:if 语句,使用格式如下所示:
表达式是指我们的判断条件,通常为一些关系式或逻辑式,也可是直接表示某—数值。如果 if 表达式条件为真,则执行 if 中的语句。表达式条件为假,则跳出 if 语句。
程序中“==”是比较运算符,用于判断两个数值是否相等,记得是“双等号”而“=”是赋值运算符,把等号右边的值赋给左边。常用运算符如下所示:
==(等于)
!=(不等于)
<(小于)
>(大于)
<=(小于等于)
>=(大于等于)
特别说明下,小于等于和大于等于,<和=之间不能留有空格,否则编译不通过。
当然,除了比较运算符外,程序也可以用的+、一、*、/(加、减、乘、除)这些常用的算术运算符。
版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/d21c057d8a81cdc56aed395f9】。文章转载请联系作者。
评论