2015-9-18 13:47:00 [显示全部楼层]
29674浏览
查看: 29674|回复: 8

[中级教程] Arduino教程中级 项目二 感应灯

[复制链接]

项目二 感应灯

本系列教程配套硬件套件:新版Arduino中级套件

这节要做的是个感应灯,当有人经过的时候,LED灯就会自动亮起,人一旦走了,LED又自动关闭了。这里用到的传感器是人体红外热释电运动传感器。它是一种能检测人或动物身体发射的红外线的传感器。拿它来做整人玩具应该是个不错的选择!

所需元件

1×  数字食人鱼红色LED发光模块
1×  人体红外热释电运动传感器
截屏2020-07-03 16.43.31.png

硬件连接

人体红外热释电运动传感器
连接数字引脚2
数字食人鱼红色LED发光模块
连接数字引脚13
截屏2020-07-03 16.43.25.png

硬件分析(数字输入—数字输出)

整个装置分为三个部分,输入,控制与输出。人体红外热释电运动传感器为输入设备, Arduino就是控制设备,LED发光模块就是输出设备。
又由于人体红外热释电运动传感器为数字量的传感器,所以接数字口。LED输出信号也是数字量,同样接数字口。
截屏2020-07-03 16.43.20.png

输入代码

样例代码 2-1:

   //项目二 —— 感应灯
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);
  }
}

下载完成后,可以试着人走开,等待一段时间,看看LED是否会关掉。随后再试着靠近,LED是不是会自动亮起。

代码回顾

还是由输入输出着手,传感器是输入(INPUT),LED是输出(OUTPUT)。所以在初始化中设置为:

pinMode(ledPin, OUTPUT);         //LED为输出设备
pinMode(sensorPin,INPUT);      //传感器为输入设备

有了输入设备,我们需要读取输入设备的值,才能进行之后的判断,所以loop函数一开始就是读取传感器的值。

读取数字传感器状态的函数是——digitalRead()。

sensorState =digitalRead(sensorPin);

函数格式如下:
digitalRead(pin)

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

数字传感器只会读到两个值(HIGH和LOW)。这里要用到新的一个语句——if语句。

if语句格式如下:

(1)if(表达式){
语句;
}
(2)if(表达式){
语句;
}else{
语句;
}

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

格式(1)多用于一种判断中,格式(2)多用于两种判断的情况。

这里只有两种情况,传感器有人读到的是高,否则就是低。所以用的if…else语句。

if (sensorState ==HIGH) {      
... //如果为高,LED亮
}
else {                              
   ... //否则,LED灭
}

“==”是一种比较运算符,用于判断两个数值是否相等,记得是“双等号”!而“=”是赋值的意思。把等号右边的值赋给左边。

我们常用的运算符有:

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

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

趣味练习

(1)        喜欢去鬼屋玩的小伙伴们,一定会喜欢这个,给LED做个“面目狰狞”的壳儿,放在一个阴冷黑暗的小屋,再配点刺激的音乐,应该还是挺带感的。当然灯光效果也少不了,可以换成开关切换频率较快的模式。

(2)        文艺青年可以拿这个人体红外热释电传感器做个漂亮的装饰灯。
详见教程:https://mc.dfrobot.com.cn/thread-1983-1-1.html

Lesson2_1.ino

635 Bytes, 阅读权限: 10, 下载次数: 71

jiashe2011  见习技师

发表于 2017-2-22 00:49:27

学习2!!!
回复

使用道具 举报

annyu  学徒

发表于 2017-3-7 23:35:23

谢谢分享
回复

使用道具 举报

sdzxqgh  见习技师

发表于 2017-5-8 20:30:42

5米远近可控
回复

使用道具 举报

zhouyu77642017  学徒

发表于 2018-8-9 09:40:38

学习了
回复

使用道具 举报

koller  学徒

发表于 2018-8-13 14:40:18


学习了
回复

使用道具 举报

嘴角上扬1  学徒

发表于 2019-7-23 17:38:33

可以安装 纽扣锂电池嘛
回复

使用道具 举报

комалов  见习技师

发表于 2022-2-26 09:54:09

嘴角上扬1 发表于 2019-7-23 17:38
可以安装 纽扣锂电池嘛

应该不可以的
回复

使用道具 举报

комалов  见习技师

发表于 2022-2-26 10:53:16

学习了!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail