mBlock & Arduino(26)Me 动作、光线感应器实作小夜灯

mBlock & Arduino(26)Me 动作、光线感应器实作小夜灯,第1张

小小云提示:教程作者 caterpillar是来自台湾的programmer,所以在一些专有名词的使用上会和我们这边使用的不太一样啦,不过作者也有标注出英文名称,大家自行转换哟(⁎⁍̴̛ᴗ⁍̴̛⁎)

在〈mBlock &Arduino(14)使用人体动作感应器〉中谈过 PIR 动作感应器,Makeblock 提供有 PIR 动作感应器模组,以及光线感应器模组,结合这两个,你就可以轻易地作出一个小夜灯。

Me PIR 动作感应器可以侦测到周围六公尺左右的人体移动,范围可以借由 PIR 上方的可变电阻器来调整,这个动作感应器在 D3 有个 LED,当侦测到人体红外线时,LED 会亮起:

这个动作感应器也可以设定是否可重复触发,仔细看看感应器上可外接的脚位,或者是 RJ25 端口旁的脚位标示,可以发现有个 Mode 脚位,当你给这个 Mode 脚位高电位时,就是可重复触发模式,也就是当感测到红外线变化,在延迟时间内若持续感测到红外线变化,那么“人体红外线感应器方块”就会持续传回 1,直到不再感测到红外线变化后一段延迟时间,才会传回 0,这通常用于判断,人体是否有持续动作(或太久没动静)的场合。

不可重复触发,是当感测到红外线变化而“人体红外感应器方块”传回 1,无论延迟时间内有无感测到红外线变化,时间一到就会先传回 0。

因此,根据你将 RJ25 连接至哪个端口,查出 Mode 脚位是对应至哪个数位脚位,给予高或低电压,就可以设定为可重复触发或不可重复触发模式。

Me 光线感应器可以侦测光线强弱,由于是借由类比脚位得到数值,因此光线强弱变化值由 0 到 1023:

从上面的照片中可以看到,这个感应器还可以侦测灰阶变化,这其实是利用反射光的强弱来达成,为了要能侦测灰阶变化,你必须点亮照片中标示为 D3 的 LED,然后让光线感应器很接近被侦测的平面,但不是接触该平面,由于黑色会吸收光线,因此,越黑的平面,反射光进入光线感应器就会越少,侦侧得到数值就会越低。

侦测灰阶变化的应用,常见于循迹车,在平面上画条黑线,车子上的光线感应器靠近黑线的一侧:

如果黑线是在感应器的右方,当车子越往左偏离黑线,反射光会越大,在大于某个值时可使其偏右接近黑线,如果车子越偏右进入黑线,为避免它整个往右超出黑线,可在反射光小至某个值时,让车子偏左,像这样始终让感应的反射光维持在某个范围内,保持黑线在感应器的右方,就可让车子延着划下的轨道前进。

当然,这样的方式只适合不交叉的黑线,如果轨道有交叉,就要使用两个感应器夹住黑线,如此在两个感应器反射光都小于某个值时,就表示目前处于交叉点。

那么,该怎么点亮标示为 D3 的 LED 呢?这个 LED 是借由标示为 DI 的脚位控制,当高电位时就会点亮 LED,不过光线感应器只能使用于连接埠 6、7、8,查看这些连接埠对应的脚位,都是类比输入脚位,怎么输出高电压?

其实类比脚位也可以用来作为扩充的数位脚位,以 Arduino Uno 为例,A0 到 A5,也可以当作 D14 到 D19 数位脚位来使用,因此,查看你的连接埠,就可以知道要令哪个号码的数位脚位为高电位了,例如,若连接在连接埠 6,其脚位为 A2,那么就是设置数位脚位 15 为高电位,就可以点亮 LED。

如果有兴趣,你也可以使用光线感应器实作个扫瞄器喔!可以参考〈 EV3 Tutorial(7)使用颜色感应器实作扫描器 〉,道理是相同的!

接下来就实作个小夜灯吧!需求是,这个小夜灯只在够暗的时候,才会感应是否有人接近而启用,小夜灯的部份,我们就直接使用光线感应器上的 LED,为了方便调节什么样的光线明亮程度才会感应是否有人接近,我们使用 Me 可变电阻器,并将调整好的数值显示于七段显示器上。

我将 PIR 动作感应器连至端口 3,七段显示器连至端口 4,光线感应器连至端口 6,而可变电阻器连至端口 7。

首先处理侦测人体移动的部份,当侦测到人体靠近时,LED 会点亮:

由于光线感应器连至端口 6,为了控制 LED 明亮,必须使用脚位 A2 充当数位脚位 D16,你可以调整 PIR 动作感应器上的可变电阻,设定好你想要感应的距离范围。

接下来,利用程式设定 PIR 动作感应器为可重复触发模式且先关闭光线应器上的 LED:

程式会每一秒钟将可变电阻器的输入值,设定给七段显示器显示,并作为判断光线门槛值的依据,你可以测试看看小夜灯是否如预期运作。

当然,我们不能老是开着电脑,使用 mBlock 来控制小夜灯,以上测试没有问题的话,可以在“Arduino mode”中,将程式上传至板子上:

记得,上传前要改用“Arduino 主程式”方块,并将自订方块的名称部份改成英文,上传完毕之后,你就可以将小夜灯装在想要的地方,将板子连接上外部电源,板子上的电源开关,就是你要不要启用小夜灯的开关了!

感谢CodeData用户: caterpillar 的贡献 著作权归作者所有

整理:宁波家电物联网云平台,中科极动云

CONTACT US: http://www.iot-jd.com/

用途:

光线亮度检测,光线亮度传感器,具有方向性,只感应传感器正前方的光源,用于寻光效果更佳

模块特色:

1 可以检测周围环境的亮度和光强度(与光敏电阻比较,方向性比较好,可以感知固定方向的光源)

2 灵敏度可调(图中蓝色数字电位器调节)

3 工作电压3.3V-5V

4 数字开关量输出(0和1)

5 设有固定螺栓孔,方便安装

6 小板PCB尺寸:3.2cm * 1.4cm

使用说明:

1 光敏二极管模块对环境光强最敏感,一般用来检测周围环境的亮度和光强,在大多数场合可以与光敏电阻传感器模块通用,二者区别在于,光敏二极管模块方向性较好,可以感知固定方向的光源。

2 模块在无光条件或者光强达不到设定阈值时,DO口输出高电平,当外界环境光强超过设定阈值时,模块D0输出低电平;

3 小板数字量输出D0可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境的光强改变;

4 小板数字量输出DO可以直接驱动本店继电器模块,由此可以组成一个光电开关;

离开等就灭了,很简单的一个小程序。显示屏上是显示的串口01数据

靠近就出0

离开就出1

本文仅为入门实验,甚至谈不上研究的程度。目的是:记录如何烧录程序到 Arduino 主板,以及通过一些简单例程,找到 Arduino 开发的感觉。

开发环境:Ardunio IDE(用于编译、上传运行代码)、VS Code 这种实时的文本编辑器(方便查看、编写代码,编写后再将代码复制到 Arduino IDE 中保存)。

Arduino 驱动:在 Win10 环境,应该会自动安装。插上 Arduino 稍后一会,就能直接上传代码。

1、Hello World例程:

打开 Arduino IDE,另存临时工程。用 VS Code 编辑 .ino 源文件:

int ledpin = 13 //定义数字接口13,对应 Arduino 数字 I/O 13口,库中的 LED_BUILTIN 常量

void setup()

{

// 通过串口收发数据

Serial.begin(9600)//设置串口的波特率

pinMode(ledpin, OUTPUT) //设置13口为输出模式。使用 Arduino 上面的 I/O 口,都需要类似设置

}

void loop()

{

// int val = Serial.read() //读取 pc 发送给 Arduino 的数据

digitalWrite(ledpin, HIGH)//13口输出高电平

delay(500)//延迟0.5秒

digitalWrite(ledpin, LOW) //13口输出低电平

delay(500)

Serial.println("Hello World")

}

编写好保存后,用 Arduino IDE 上传代码后,只要 Arduino 通电,代码就会在主板上运行了。

最后打开 Arduino IDE 的串口工具,即可看到 Arduino 不断发送的数据;随便用个小灯泡,阴极接地,阳极接13口,可以看到小灯泡正在 Blink。

2、使用模拟接口,读取模拟值:

Arduino 有 A0-A5,共6个模拟口,模拟口也可以复用为数字接口14-19。至于是当作模拟口,还是用作数字接口,取决于使用 digital 还是 analog 函数。

例程:

int potpin = 0

int val = 0

void setup()

{

// 通过串口收发数据

Serial.begin(9600)//设置串口的波特率

}

void loop()

{

val = analogRead(potpin)

Serial.println(val)

delay(2000)

}

电路图如下(其中 R2 为可变电阻)。通过可调电阻改变电流大小,从而改变 A0 的模拟值,读取并输出串口。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/8019559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存