你是否喜欢高大上的自动化工具?你是否羡慕电影中只需一个遥控器就可控制家中所有的家具?心动不如行动,让我们先从充电台灯开始,探索科技的奥秘。
一.确定开关位置
我们可以想到,无论是使用什么样的控制方式,总可以等效成一个开关,控制台灯的开和灭,那么我们首先要做的就是搞清台灯的电路,把电源接入后的导线部分断开,换成我们想要的,可以用蓝牙远程控制的开关。
我们分析一下这个电路,从左往右看,交流电接入后首先经过一个电容和电阻的并联,它的作用是滤波,因为日常供电的220v理论上是正弦波,但其实它的波形十分紊乱,经过电容通交流隔直流的效果能够使其波形更加平滑,起到滤波作用。再往右是一个电桥,它的作用是实现交流变直流,当成功变换时,右面的LED灯亮,电池正常充电,右边的二极管作用是整流,它可以把反向的电流阻挡以防止影响后面的电路。最后,开关1控制了靠上那条导线通过的LED小灯泡,开关2控制了靠下面那条导线通过的LED小灯泡,达到两次的灯光变强。obviously很显然,我们只想把D5和SW1中间切断,加上我们需要的开关即可。
(粗浅理解,欢迎大家批评指正~)
二.设置数据传输
所谓蓝牙控制,就是利用蓝牙串口这样一款app,在蓝牙设备之间创建串口进行数据传输。传输数据之后,就涉及到数据的接收和处理,完成我们想要的效果。然而我们查到,蓝牙串口基于SPP协议,通信两端设备必须兼容于蓝牙模块BF10-A协议,手机app显然符合要求,因此我们只要选择合适的蓝牙模块,并且调试好两个端口的波特率,就可以实现数据的传输了。如图
三.完成数据处理
那么,我们现在考虑的就是如何通过简单的数据完成台灯的开关呢,是否要用到广为熟知的单片机?答案是肯定的。这时候上期会刊推荐大家学习c语言起到了应有的作用(笑~),
#include<reg52.h>
#include<intrins.h>
首先包含单片机所用到的数据库,接着定义基本概念
uchar a;
sbit pink=P0^2;
uchar code table[]=
{0x80,0xc0,0xe0,0xf0,
0xf8,0xfc,0xfe,0xff};
void delay(uchar x)
{
uint y;
for (; x > 0 ; x-- )
for( y=500 ;y>0;y--);
}
数据对应操作,单片机控制了开关:
void main()
{ int m,n,i;
init();
while(1)
{ if(a==0x07)
{P0=0xff;
flag=0;
flag1=0;
}
if(a==0x08)
{
P0=0xff;
flag=0;
flag1=1;}
if(a==0x09)
{P0=0xff;
flag=1;
flag1=1;}
if(a==0x10)
{P0=0xff;
flag=1;
flag1=0;}
if(a==0x02)
{
for(m=5000;m>0;m--)
{//P2=0xfe;
//P2=0xfd;
P2=0x89;
P0=0xfb;
P0=0xf7;
P0=0xef;
P0=0xdf;
P0=0xff;
P2=0xf8;
P0=0xfb;
P0=0xff;
P2=0x0f;
P0=0xdf;
P2=0x00;}
}
void ser() interrupt 4
{
ES=0;
RI=0; //将接受中断标志位清0;
a=SBUF; //将接受到的数据赋值给a
ES=1;
}
通过简单的编程,单片机让智障台灯摇身一变,成为了可以识别传输信号的智能台灯。
现在我们的蓝牙控制台灯就已经可以工作了,这种开关的转变不仅看起来更好玩,还能够“挽救”一些开关出问题的台灯们,是不是感觉很棒?这样的改装其实还有很多,例如蓝牙的传输距离很近,那么能不能用无线电控制,再加上一个可以显示灯状态的显示功能,这样可以实现我们离开家,随时查看灯的亮灭并开关;接入不同颜色的小灯,变换开启时候的效果;还可以通过转换开关的位置和方式,令台灯有亮度的调节……感兴趣的同学,可以继续关注科技爱好者协会,参与我们的讨论与活动,让我们一起实现自动化的世界吧~