放假回家了,基本上都是一个人在家,晚上除了自己的房间有光,其他房间都是黑漆漆的,每当要去客厅接水喝,走到门口时都有种恐怖的感觉……
于是想到很久以前用89C52做的人体红外感应灯,从柜子里翻出来看了看,LED什么的都拆了,但是人体红外感应模 块还在,89C52的最小系统也是完整的,反正51单片机现在不用以后也用不到了,于是就开干,把这个人体红外感应等做完整,正好也复习(学习)一下51单片机的玩法。
第一部分 原理图设计
这就是板子原本的样子。其实这是我当年自己焊的第一块板子,背后太难看就不拍了。
然后这就是STM89C52,注意方向哦,认真看图能发现上面是有个半圆弧的缺口的,他朝上。
然后基于目前的板子来设计电路图吧。
首先我们要知道89C52封装后的引脚和原理图中标的是不同的,所以看89C52的引脚图。
结合图看到我们人体红外传感器离P2.0这个IO口很近,于是决定把P2.0口作为输入口。
51单片机需要最小系统才能正确运行,所以我们是来了解一下,虽然板子上已经焊好了。
打开Proteus,开始设计原理图。
这就是最基本的电路了。XTAL1和XTAL2这一部分是时钟电路,RST接出去的就是复位电路。
复位电路很好理解,就是按一下就复位嘛,51单片机是高电平复位,所以平时应该要通过下拉电阻下拉,保证平时是低电平,那个10K的电阻一头接地一头接RST,所以他就是下拉电阻了。
可能没玩过51单片机的同学不清楚时钟电路是什么回事,时钟电路就是产生象时钟一样准确的振荡电路。震荡电路就相当于我们的心脏,他要按一定的频率跳动我们才能活。另外时钟电路就像是我们做广播体操一样,需要提供一个节拍,我们每个人跟着节拍做才能做整齐,而这个节拍就是单片机心脏跳动的频率。
我们平时玩Arduino时并不用关心振荡电路或者复位电路,因为板子上已经都设计好了,比如我的UNO就是16MHz的晶振,并且AVR单片机可以使用内部的晶振。而51单片机没有内部晶振,必须要使用外部晶振。
另外可以看到图上EA口接了高电平,EA为片外程序存储器选择输入端,低电平时,使用片外程序存储器;高电平时,使用片内程序存储器。当然我们就是使用片内程序存储器咯。
这样连接好单片机最基本的电路就完成了,烧上程序供电就能运行了。
在我们编程之前,先把电路设计完整。
这里我们加了2部分。
第一部分就是P2.0的输入,由于没有人体红外传感器的仿真模块,就用一个按钮来代替。我们的人体红外传感器使用的是HC-SR501,根据文档我们可以知道当感应到有人时,OUT引脚是置为高电平3.3V的。在51中,或者Arduino中,单片机系统使用5V作为高电平时,3.3V也是算作高电平的。
第二部分就是LED啦。电阻是作为限流用的,防止电流过大烧坏LED或者单片机,我这里使用了玩Arduino都陪的220欧电阻,当然可以小一点,也可以大一点,只不过太小了起不到限流的作用,太大了虽然对硬件没有损坏但是亮度就太小了。
第二部分 程序设计
直接上程序。
这样就是最简易的代码了,大家应该都有C语言基础就不用讲太细了。P1,P2都是“reg51.h”里面定义了的,直接拿来用就行了。sbit是位定义,我们定义了“in”为P2.0这个引脚。P1我们没有单独定义每个引脚,因为我们可以直接将所有P1的端口置0或者置1。延时函数大家都能理解嘛,执行空循环浪费时间就行了。而while(1){}就相当于Arduino的loop(){}。
这里我们只要判断,P2.0口如果是高电平,那么就把P1口设置为0,即低电平,延时1000毫秒,再将P1口设置为1,即高电平。当然,真正使用时延时1秒肯定不够,我最后设置的是60秒。
第三部分 仿真
Proteus有仿真功能,加载Keil C生成的HEX文件,然后点击左下角的运行仿真即可。
这样就开始仿真了,然后点击P2.0口的按钮。
按下按钮后对比发现LED亮了,并且延时约1秒后又熄灭了,说明程序正确执行了。
第四部分 动手开工
先来把程序烧录上。记得把延时程序改成60秒哦。
通过USB2TTL,RX,TX反接。
按通常的烧录方法就行了。
然后上电烙铁,对照原理图设计电路图。因为这个原理图很简单,直接在大脑里就能画出电路图。如果复杂了,还是先把电路图设计好再焊接。
我一直记得我有白光LED,但是找来找去都没有找到,翻了翻淘宝发现真的是我记错了,于是我就用2个红色LED和2个蓝色LED来代替了。
注意LED的导线,由于要安装在不同的位置所以导线也不一样长,这个要根据自身情况而定。
要说的就是我把面包版的电源模块拿来用了,又可以用电池又可以通过USB用移动电源。
然后开始部署,我是用透明胶固定导线。想到拆的时候会留胶,所以没粘很多,看起来不太美观。
正好我门口对面就有个平台可以放。然后需要调节下传感器的感知距离,我调到最低的,反正完全够用了。
第五部分 使用测试
好不容易等到了晚上,可以测试了。
先打开电源,单片机运行,感受到了我的人体红外,灯亮。于是我进房间,留下一条门缝,一分钟左右灯熄灭了,于是我拉开门,灯又一下亮了起来。程序是没问题,单片机能正确运行。蛋似!光线真的太弱了。虽然我们看得到,但是本来就弱的光线,还是红色和蓝色的,这氛围更加诡异了……
这是什么!瞬间有种进了鬼屋的感觉啊!吓死本宝宝了!
我觉得还是早睡早起好!
第六部分 总结
如果真的要做的话,还是卖个大功率白光LED吧,有条件的同学还可以继电器加电灯。
最后附上所有资料的下载。
http://pan.baidu.com/s/1sjkgiDn
*本文作者:zhangtory,本文属FreeBuf黑客与极客(FreeBuf.COM)原创奖励计划,未经许可禁止转载
不容错过
- 让你家的楼宇门变聪明:基于树莓派实现任意终端控制楼宇门豆豆青春不喂狗2015-11-27
- 专访腾讯TSRC新锐奖得主、挖洞新星instruderFB独家2013-10-10
- 肖恩·帕克:从黑客到亿万富翁hujias2015-07-05
- 【回播已更新】 FreeBuf公开课(直播课程):Android组件与数据存储安全分析及实战banish2015-11-19
0daybank
已有 25 条评论
可以说666不?
躺在床上灯亮了不是更恐怖……
很不错,支持支持
截图我看看
手机可以打开
叼!
感觉和51搭起来就好low[笑cry]最后的导线那么长,是做信号还是电源?寄生参数想想都怕[笑cry]
@ 韋銘武Benjamin 用51就low ?呵呵了。照这逻辑,掺和分立元件的都是low到18层地狱的。
这种电路貌似只需要一个模块,不需要单片机,就可以实现吧?
@ conservativefield 是的,实测模块置高电平时电流只有1.6mA,如果直接用模块是不足以驱动LED,所以需要用三极管搭一个放大电路,但是我手里没有三极管,所以就用了单片机,让单片机来驱动LED。
@ zhangtory 单片机真的是多余的,这个红外模块本来就有延时的,要驱动大功率led的话加个继电器就完美了,根本不需要单片机,更不需要编程。
和鼠标灯很像
让我想起了在学校用51单片机做的流水灯,,
这个protues 还要换成学的
12 – ISIS Professional 啥意思?
@ acer 12是工程名;ISIS是proteus软件带的东西,是画仿真电路图的;Professional就是Professional
Reply:Cool!
看图吓死本宝宝了
前面那里应该是STC89C52把,不过确实有STM开头的STM32,ti的arm芯片.
话说我也有一个和楼主同款的电源模块.
@ malokch 嗯,是STC。那个电源模块我还有n个。。。
51系列跟atmega系列比还是太弱了。
而且延时啥的为啥不用外部中断!!!
这完全证明了手工帝那颗嬴荡的心
40脚的IC只利用了9个脚感觉有点浪费,应该可以找其他IC去代替吧
除了灯 根本不诡异。没有灯也照样工作
学习了 不懂单片,但是勾起了我少年时期的梦想。