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: >

以内

Arduino可以使用EEPROM(可擦除可编程只读存储器)来记录程序的第一次和第无数次执行。可以使用EEPROMwrite()函数将一个整数值写入EEPROM中的某个地址,而EEPROMread()函数可以读取该地址中的值。在程序第一次执行时,可以将某个地址中的值设置为0,而每次程序执行完成后,将该地址中的值加1,从而可以记录程序执行的次数。

有以下疑问:

1 SoftPWMSet 这是什么鬼? arduino的pwm输出,可以直接使用analogwrite函数。若是你自己写的,;源文件丢出来给人看看是啥。

2 还有"pins_arduinoh"也是,如果是自己写的,都把它贴出来。

3 arduino的中断,不是这样用的。直接使用<avr/interrupth>,会造成冲突

4 对你这个程序,你遇到的困难是?想跟网友求助那个问题?看了10多分钟,还是一头雾水。你这个我大概看了下,目测你的程序是这样的:3,5,10,9,这四个引脚来控制两个直流电机,直接扩流来驱动电机,引脚8接的是一个LeD,用于显示状态,还有个11引脚,从注释的字面上理解,应该是超声波的相关引脚,但是一个引脚,超声波,我愚钝,看不出来的是干嘛。

看了10多分钟,还没搞懂你想要干嘛,根据超声波测得的距离,来控制小车前进后退?还是前进过程中,超声波检测到障碍来做避障?

根据前面的分析,你这段代码,肯定是不通过编译的,错误提示呢?

你要网友帮你修正程序,但是又不知道你的需求,怎么改?

总之,分给我吧~~~

以上就是关于mBlock & Arduino(26)Me 动作、光线感应器实作小夜灯全部的内容,包括:mBlock & Arduino(26)Me 动作、光线感应器实作小夜灯、生活中循迹小车的实例有哪些、arduino怎么记录程序第一次执行和第无数次执行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9717573.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存