写点什么

和 12 岁小同志搞创客开发:手撕代码,做一款人体感应灯

  • 2021 年 11 月 13 日
  • 本文字数:1611 字

    阅读完需:约 5 分钟

和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 输出信号也是数字量,同样接数字口。

传感器连线效果如下所示:

实现代码如下所示:

  const int sensorPin = 2;  const int ledPin =  13;   void setup() {    pinMode(ledPin, OUTPUT);    pinMode(sensorPin, INPUT);  }   void loop()  {     if (digitalRead(sensorPin) == HIGH)     {       digitalWrite(ledPin, HIGH);     }     else {       digitalWrite(ledPin, LOW);     }  }
复制代码

程序开始在 setup()中通过 pinMode()函数将 LED 设置为输出模式,人体红外热释电运动传感器设置为输入模式。

有了输入设备,我要读取输入设备的值,才能进行之后的判断,所以 loop 函数一开始就是读取人体红外热释电运动传感器的值。读取数字传感器状态的函数是:digitalRead(),函数格式如下所示:

 digitalRead(pin)
复制代码

这个函数是用来读取数字引脚状态,高电平还是低电平。人体红外热释电传感器有人或者动物走动时,读到高电平,否则读到低电平。代码的后半段就是对判断出来的值来执行相应动作。(HIGH:高电平,代表 1,LOW:低电平,代表 0) 。

数字传感器只会读到两个值(HIGH 和 LOW)。

这里要用到新的一个语句:if 语句,使用格式如下所示:

(1)if(表达式){语句;}(2)if(表达式){语句;}else{语句;}(3)if(表达式){语句;}else if(表达式){语句;}...else{语句;}
复制代码

表达式是指我们的判断条件,通常为一些关系式或逻辑式,也可是直接表示某—数值。如果 if 表达式条件为真,则执行 if 中的语句。表达式条件为假,则跳出 if 语句。

程序中“==”是比较运算符,用于判断两个数值是否相等,记得是“双等号”而“=”是赋值运算符,把等号右边的值赋给左边。常用运算符如下所示:

  • ==(等于)

  • !=(不等于)

  • <(小于)

  • >(大于)

  • <=(小于等于)

  • >=(大于等于)

特别说明下,小于等于和大于等于,<和=之间不能留有空格,否则编译不通过

当然,除了比较运算符外,程序也可以用的+、一、*、/(加、减、乘、除)这些常用的算术运算符。


拓展学习:和12岁小同志搞创客开发:如何驱动各类型传感器?

发布于: 刚刚阅读数: 2
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018.02.09 加入

【公众号】美男子玩编程,关注获取海量资源~

评论

发布
暂无评论
和12岁小同志搞创客开发:手撕代码,做一款人体感应灯