在〈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 的模拟值,读取并输出串口。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)