改装普通插座为WiFi智能插座
先上图片拆一个普通插座,拆掉一个插座模块
安装继电器控制板
安装Arduino pro-mini 和usb转串口模块
红外遥控信号输出
完成内部安装
正面
USB和红外遥控接口
开始使用
控制中心:OpenWrt
本帖最后由 Gemicio 于 2013-11-12 23:07 编辑
好久没来,这里越来越热闹了,坛主经营有方啊!
很久以前在这里发过一个帖子,用手机蓝牙遥控Arduino发射红外信号遥控家电,主要为了解决家里遥控器多,用起来麻烦,这个方案可以一机在手,控制全部家电。为此还费了老大的劲学习安卓编程,还好后来还是成功编了个apk程序,实现了初衷。但后来问题又出现了,老婆用了Apple,这下又头大了,于是想能不能搞个多平台方案,这样就有了通过WiFi网页控制的想法,好处是只要客户端用浏览器打开网页就能控制。经过一番折腾终于成功实现。
一、总体方案
客户端:手机、平板电脑等WiFi无线接入路由器,浏览器作为操控工具
服务器:TP-Link TL-WR703N迷你路由器改OpenWrt,客户端模式接入WiFi路由器,设固定IP,USB口接优盘、USB转串口
转发客户端网页输入的命令字符串到Arduino串口
单片机:Arduino mini-pro,接收服务器串口信号,控制电器交流电源,发射红外遥控信号控制家电
二、OpenWrt设置
1、mini路由器刷OpenWrt,设置WiFi client模式,接入家中上网的无线路由器,固定IP地址;
2、改优盘Boot,(原厂4M空间实在装不了什么啊)
3、安装USB声卡,(用了32G的优盘,可以放不少MP3),USB2串口等
kmod-sound-core 3.3.8-1
kmod-usb-acm 3.3.8-1
kmod-usb-audio 3.3.8-1
kmod-usb-core 3.3.8-1
kmod-usb-ohci 3.3.8-1
kmod-usb-serial 3.3.8-1
kmod-usb-serial-ftdi 3.3.8-1
kmod-usb-serial-pl2303 3.3.8-1
kmod-usb-storage 3.3.8-1
kmod-usb2 3.3.8-1
4、编写web2ser文件上传 /www/cgi-bin/,用于接收网页input的字符并发送到串口;我用的USB转串口模块是很便宜的PL2303,所以dev是ttyUSB0,如果是Arduino UNO自带的则是ttyACM0,UNO串口有重启的问题,测试时走了不少弯路,不过先打开串口接收就可以解决。
web2ser文件内容如下:
#!/usr/bin/lua
io.output("/dev/ttyUSB0")
io.write(os.getenv("QUERY_STRING"))
设置Properties 0755
5、编写usart文件上传 /etc/init.d/,用于开机时设定串口速率,stty命令原系统没有,需要另行安装;
内容如下:
#!/bin/sh /etc/rc.common
#/etc/init.d/usart
START=80
start(){
/usr/bin/stty -F /dev/ttyUSB0 raw speed 9600
}
stop(){
killall usart
}
设置Properties 0777,然后enable;
6、编写remote.html文件上传到 /www/
文件主要内容:
<script>
function sendSer(value){
document.getElementById("ser").src="http://(mini路由器ip地址)/cgi-bin/web2ser?"+value;
}
</script>
<a name="top"></a>
<img src="img/bk (5).jpg" alt="Welcome!">
<p><b><font size="5" color="white">交流电源开关</font></b></p>
<p></p>
<table>
<tr><td><input type="button" onclick="sendSer('X1')"value=" HTPC " /></td><td/>
实现点击按钮发送字符。这里加了ip地址,所以这个网页客户端本地也能执行。
本帖最后由 Gemicio 于 2013-11-12 23:01 编辑
三、Arduino控制红外遥控信号和继电器
OpenWrt通过串口发送给Arduino每次两个字符,第一个字符ch1选择电器,第二个字符ch2选择遥控功能
Arduino mini -pro的4567四个引脚控制四路继电器,IRremote.h编码红外遥控信号
#include <IRremote.h>;
IRsend irsend;
unsigned int flpMenu[] = {1800, 850, 900, 800, 900, 850, 950, 800, 900, 850, 900, 850, 850, 850, 950, 1600, 1850, 850, 900, 1700, 1800, 23164};
#define led4 4
#define led5 5
#define led6 6
#define led7 7
int Av0=2;
int Av1=1;
IRremote不能解码的遥控信号只能用raw格式,在这里定义。AV0\1用来设置电视机视频输入源,实现一键选择
case 'P': // Select TV AV in
switch(ch2){
case '1':
{
Av1=1;//TV
}
break;
case '2':
{
Av1=2;//HDIMI1
}
break;
case '3':
{
Av1=3;//HDMI2
}
break;
case '4':
{
Av1=4;//CVI1
}
break;
case '5':
{
Av1=5;//CVI2
}
break;
case '6':
{
Av1=6;//AV
}
break;
case '7':
{
Av1=7;//Side AV
}
case '8':
{
Av1=8;//PC VGA
}
break;
}
irsend.sendRC5(0x838, 12); // PHILIPS TV AV
delay(600);
if (Av1>=Av0){
for (int i=Av0; i<=Av1; i++)
{
irsend.sendRC5(0x838, 12); // PHILIPS TV AV
delay(100);
if (i<Av1){
irsend.sendRC5(0x038, 12); // PHILIPS TV AV
delay(200);
i++;
}
}
}
else{
for (int i=Av0; i<=Av1+8; i++)
{
irsend.sendRC5(0x838, 12); // PHILIPS TV AV
delay(100);
if (i<Av1+8){
irsend.sendRC5(0x038, 12); // PHILIPS TV AV
delay(200);
i++;
}
}
}
for (int i = 0; i < 2; i++) {
irsend.sendRaw(flpOk, 22, 38); //PHILIPS TV ok
delay(100);
}
Av0=Av1;
break;
飞利浦的遥控信号居然连续两次按是不一样的,想了半天用了这个办法好歹解决了’一键选择‘
继电器控制很简单,如果打开就关闭,如果关闭就打开:
case 'X':// AC POWER
switch(ch2){
case '1':
if (digitalRead(led4) == HIGH){
digitalWrite(led4,LOW);
}
else{
digitalWrite(led4,HIGH);
}
break;
case '2':
if (digitalRead(led5) == HIGH){
digitalWrite(led5,LOW);
}
else{
digitalWrite(led5,HIGH);
}
break; 貌似很牛掰啊 这个想法很不错哦。空间处理的不错。。。 图倒是贴很全, 楞没大明白。 这是干什么?
把变压器(充电器)集成到插座里,加红外遥控功能? 做的确实不错 , 本帖最后由 komoya 于 2013-11-13 09:55 编辑
Gemicio 发表于 2013-11-12 10:51 static/image/common/back.gif
三、Arduino控制红外遥控信号和继电器
OpenWrt通过串口发送给Arduino每次两个字符,第一个字符ch1选择电 ...
我上个月还在想用arduino+en28j60控制8组三极管,再控制继电器。 就是需要一根网线连接arduino板和mini路由中继,再无线连接大的无线路由器。
需要的是在arduino代码中写入网页。。 比较麻烦
你用的是mini路由连接arduino的USB, 我想用的是mini路由器连接arduino的网口。 思路不同,但你这个可以直接省一个路由器啦。。{:soso_e179:} 楼主好贴! 有创意,再加一个RF的接收模块。 PL2303驱动如何安装 应该加入2401 2.4G多点控制,2401模块4元多m8芯片5元多 hick 发表于4 天前 static/image/common/back.gif
图倒是贴很全, 楞没大明白。 这是干什么?
把变压器(充电器)集成到插座里,加红外遥控功能?...
即可以用电脑单独控制每个插座又可以用控制器控制 hxpasd 发表于 2013-11-16 18:17
PL2303驱动如何安装
路由器openwrt管理页面可以很容易安装 hxpasd 发表于 2013-11-16 18:35
应该加入2401 2.4G多点控制,2401模块4元多m8芯片5元多
智能家居系统需要,而我这里只需控制客厅一个点的电器,所以simple is the best.
页:
[1]
2