智能家居大概是早几年被热炒的概念,但事实上到现在也未真正进入智能家居时代。原因有许多,个人觉得主要原因是功能还没那么接地气,其次是设备难以标准化成规模生产以形成良性的市场循环云云……总之,讨论其未能大规模普及的原因,有的没的总能凑上一篇又长又臭的论文,何况这不是本文要讨论的重点。
话说回来,无论如何,自己动手打造一个简单的智能家居系统,也不是太难和太昂贵的事情,而且还极富有GEEK精神。
因此,我们将从最简单功能开始尝试,打造我们的智能家居系统。我们的第一个目标是做一盏可以无线控制的灯:通过手机蓝牙,控制无线控制电灯。需要说明的是,无线控制不等于智能家居,但一定是智能家居实现的基本途径。
在此,不得不提醒的是,在您准备好材料准备开干之前,请认真学习一些电工基本常识——触电从来不是一件闹着玩的事。
工具及材料
Arduino 主控板
蓝牙模块
继电器模块
灯泡及灯座
杜邦线及面包线若干
面包板
导线及插头
剪刀
安卓手机
面包板
Arduino mega 2560
继电器模块
杜邦线
电灯及灯座
电线及插头
蓝牙模块
实现思路
实现手机蓝牙控制电灯,我们需要一台安卓手机通过蓝牙向控制电路发送指令,控制电路收到指令后进行判断,确认指令正确后控制继电器(相当于电灯的开关)闭合或断开,实现电灯接通或者关闭。
电路模拟图:
简单介绍一下Arduino :Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE)。它使用起来简单方便,价格也逐渐走低,且在网络上能找到相当多的学习资源,适用于艺术家、设计师、爱好者和对于“互动”有兴趣的朋友们。
由于身边只有一块Arduino mega2560控制板,因此我用这块控制板为例来实现这个电路。事实上arduino有一系列型号可以用,每个型号都有各自的特点,但是基本应用都是类似的。读者可以根据自己的需求选择arduino型号。
搭建控制器
连接面包板
为了后面其他零件的供电,我们将控制器的5V和GND(地)端口分别引出接在面包板上——红色一边代表5V,蓝色一边代表GND,在后面的零件需要供电时可直接在从这面包板上这两排插孔上取电。
连接蓝牙模块
将蓝牙接收板插在面包板上固定,蓝牙模块有四个引脚VCC和GND为模块提供电源,TXD和RXD与主控板进行串口通讯。用面包线或杜邦线将蓝牙模块的四个引脚与对应的端口连接起来:
VCC端连接面包板的红色一边
GND端连接面包板的蓝色一边
TXD端连接Arduino的RX1
RXD端连接Arduino的TX1
连接完的蓝牙模块
连接继电器模块
将Arduino的22号端口与继电器模块的IN1端口连接起来
将继电器模块的VCC和GND分别接在面包板上的供电端。这样,当Arduino的22号端口发出高电平信号的时候,继电器将闭合,接通连接在上面的电路;当Arduino输出的是低电平信号的时候,继电器将断开。
安装电灯
将电线的线头剥开,露出线头,安装在灯座的两个接线柱上
安装好,并将电灯装上
电线的另一头是一个两舌的插头
连接完电灯的电路之后,我们做一下电灯的通电小测试:将插头插在220V的市电上,测试电灯是否能正常工作。主要用电安全。
电灯工作正常。
拔下电源,进行下一步的制作:
将电灯的供电线剥开一点外皮,然后将其中一条电线剪断,剥开绝缘层,露出铜线。
将铜线接在继电器上:
继电器有三个端口,将准备好的两个线头接常开端口,如上图的的左边两个端口。
至此,我们的接线工作全部完成。
编写及烧写程序
在编写程序之前,我们需要下载编写程序的软件。在Arduino的官方网站上我们可以非常方便得下载到编写环境:http://arduino.cc/en/Main/Software
安装完Arduino后,电脑桌面上会出现这个图标,启动,进入程序编写环境。
启动界面
编程环境
将程序敲入软件的编辑框上,并将电路板的USB端口与电脑的USB端口连接。选择菜单栏,工具》板卡》arduino mega2560 or mega ADK
点击红圈标志的按键,进行程序烧写(就是把程序下载到电路板上让它运行啦~)
完成之后,软件下方提示下载完成。
安装手机控制端
首先我们需要下载安装蓝牙串口APP
启动软件
软件会请求蓝牙权限,点击是:
进入软件页面,可以注意到手机任务栏上已经显示蓝牙已经启动了。
点击右上角的连接
像平常连接蓝牙设备一样,配对好设备之后,选中你的蓝牙设备连接。
拖动到软件界面到,第三页键盘页,选择一个按键,设置内容
名称:电灯(可自定义)
字符
消息:l(小写L)
点击确定。软件的键盘上出现一个按键。
测试:
保持电路板与电脑的USB连接(或者用充电器给电路板供电),将电灯的插头接在220V市电上,确保蓝牙模块连接正常,按键盘,控制电灯的开关。
主控板代码:
int flag=0;
void setup()
{
Serial1.begin(9600);
pinMode(22,OUTPUT);//relay
digitalWrite(22,LOW);
}
void loop()
{
int val;
val=Serial1.read();
if(val=='l')
{
flag=~flag;
digitalWrite(22,flag);
}}