和12岁小同志搞创客开发:手撕代码,做一款人体感应灯
目录
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岁小同志搞创客开发:手撕代码,做一款人体感应灯相关推荐
- 和12岁小同志搞创客开发:手撕代码,做一款遥控灯
机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...
- 和12岁小同志搞创客开发:手撕代码,做一款数字骰子
机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...
- 和12岁小同志搞创客开发:手撕代码,做一款密室自动门
机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...
- 和12岁小同志搞创客开发:手撕代码,做一款亮度可调节灯
目录 1.PWM呼吸灯 2.亮度可调节灯 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/ca ...
- 和12岁小同志搞创客开发:手撕代码,做一款声控灯
机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...
- 和12岁小同志搞创客开发:如何驱动红外遥控器?
目录 1.红外遥控器通信原理 2.NEC协议 3.实践 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_3810 ...
- 和12岁小同志搞创客开发:手撕代码,做一款温湿度检测器
机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...
- 和12岁小同志搞创客开发:手撕代码,做一款火焰报警器
机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...
- 和12岁小同志搞创客开发:手撕代码,做一款节拍电子鼓
机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html ...
最新文章
- 是时候了解下无监督学习了!
- 2018新年感谢,写在互联网类脑架构研究十年的前夜
- 协议类接口 - LCD
- 什么是爱?什么是幸福?
- 领域驱动设计,盒马技术团队这么做
- C# 实现 rtc_通过Xlua实现unity热更新的一个小例子
- tomcat-定制tomcat日志
- 简单的BBcode parsing
- mysql分布式数据库_分布式数据库搭建详细教程
- 2020h黑苹果 y7000p_黑苹果安装教程Y7000P
- Java String 类型编码转换
- android 剪切并上传图片
- 国开网电大 动物常见病防治 形考任务1-5
- Py之shap:shap库的简介、安装、使用方法之详细攻略
- 健身的基本知识(1)
- java string newline,Java BufferedWriter newLine()用法及代码示例
- 前辈们的面试经验总结——对于BAT等企业如何面试之面试流程及问题解析、以及面试时的基本礼仪及着装
- 基于FRP反向代理工具实现内网穿透攻击
- 谋退市,前程无忧要新开始?
- P2060 [HNOI2006]马步距离
热门文章
- C++ 重载运算符 operator
- HarmonyOS Text超出部分末尾显示...
- js 动态加载select触发事件
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
- 理解数据类型与数学运算:求和、温度转换
- Go 学习笔记(6)— 变量定义、变量声明、变量作用域
- 12.27评论5位同学试验三
- Access应用日志一
- mysql 5.7 1054_MySQL5.7更改密码时出现ERROR 1054 (42S22)的解决方法
- 静态路由_【零基础学云计算】静态路由!静态路由!静态路由!原理与配置