目录

1、传感器原理

2、代码实践


机缘巧合在网上认识一位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输出信号也是数字量,同样接数字口。

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

实现代码如下所示:

int sensorPin = 2;             //传感器连接到数字2
int ledPin =  13;              //LED连接到数字13
int sensorState = 0;           //变量sensorState用于存储传感器状态void setup() {pinMode(ledPin, OUTPUT);         //LED为输出设备pinMode(sensorPin, INPUT);      //传感器为输入设备
}void loop(){sensorState = digitalRead(sensorPin);    //读取传感器的值if (sensorState == HIGH) {       //如果为高,LED亮digitalWrite(ledPin, HIGH);  } else {                               //否则,LED灭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岁小同志搞创客开发:如何驱动各类型传感器?

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

  1. 和12岁小同志搞创客开发:手撕代码,做一款遥控灯

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  2. 和12岁小同志搞创客开发:手撕代码,做一款数字骰子

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  3. 和12岁小同志搞创客开发:手撕代码,做一款密室自动门

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  4. 和12岁小同志搞创客开发:手撕代码,做一款亮度可调节灯

    目录 1.PWM呼吸灯 2.亮度可调节灯 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/ca ...

  5. 和12岁小同志搞创客开发:手撕代码,做一款声控灯

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  6. 和12岁小同志搞创客开发:如何驱动红外遥控器?

    目录 1.红外遥控器通信原理 2.NEC协议 3.实践 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_3810 ...

  7. 和12岁小同志搞创客开发:手撕代码,做一款温湿度检测器

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  8. 和12岁小同志搞创客开发:手撕代码,做一款火焰报警器

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

  9. 和12岁小同志搞创客开发:手撕代码,做一款节拍电子鼓

    机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...

最新文章

  1. 是时候了解下无监督学习了!
  2. 2018新年感谢,写在互联网类脑架构研究十年的前夜
  3. 协议类接口 - LCD
  4. 什么是爱?什么是幸福?
  5. 领域驱动设计,盒马技术团队这么做
  6. C# 实现 rtc_通过Xlua实现unity热更新的一个小例子
  7. tomcat-定制tomcat日志
  8. 简单的BBcode parsing
  9. mysql分布式数据库_分布式数据库搭建详细教程
  10. 2020h黑苹果 y7000p_黑苹果安装教程Y7000P
  11. Java String 类型编码转换
  12. android 剪切并上传图片
  13. 国开网电大 动物常见病防治 形考任务1-5
  14. Py之shap:shap库的简介、安装、使用方法之详细攻略
  15. 健身的基本知识(1)
  16. java string newline,Java BufferedWriter newLine()用法及代码示例
  17. 前辈们的面试经验总结——对于BAT等企业如何面试之面试流程及问题解析、以及面试时的基本礼仪及着装
  18. 基于FRP反向代理工具实现内网穿透攻击
  19. 谋退市,前程无忧要新开始?
  20. P2060 [HNOI2006]马步距离

热门文章

  1. C++ 重载运算符 operator
  2. HarmonyOS Text超出部分末尾显示...
  3. js 动态加载select触发事件
  4. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
  5. 理解数据类型与数学运算:求和、温度转换
  6. Go 学习笔记(6)— 变量定义、变量声明、变量作用域
  7. 12.27评论5位同学试验三
  8. Access应用日志一
  9. mysql 5.7 1054_MySQL5.7更改密码时出现ERROR 1054 (42S22)的解决方法
  10. 静态路由_【零基础学云计算】静态路由!静态路由!静态路由!原理与配置