极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 36276|回复: 16

改装普通插座为WiFi智能插座

[复制链接]
发表于 2013-11-12 10:46:51 | 显示全部楼层 |阅读模式
先上图片

拆一个普通插座,拆掉一个插座模块


安装继电器控制板


安装Arduino pro-mini 和usb转串口模块


红外遥控信号输出


完成内部安装


正面


USB和红外遥控接口


开始使用


控制中心:OpenWrt

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2013-11-12 10:50:57 | 显示全部楼层
本帖最后由 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文件内容如下:

[pre lang="" line="1"]#!/usr/bin/lua
io.output("/dev/ttyUSB0")
io.write(os.getenv("QUERY_STRING"))[/code]

设置Properties 0755

5、编写usart文件上传 /etc/init.d/,用于开机时设定串口速率,stty命令原系统没有,需要另行安装;
内容如下:
[pre lang="" line="1"]#!/bin/sh /etc/rc.common
#/etc/init.d/usart
START=80
start(){
/usr/bin/stty -F /dev/ttyUSB0 raw speed 9600
}
stop(){
killall usart
}[/code]

设置Properties 0777,然后enable;

6、编写remote.html文件上传到 /www/
文件主要内容:
[pre lang="html" line="1"]<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/>
[/code]
实现点击按钮发送字符。这里加了ip地址,所以这个网页客户端本地也能执行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-12 10:51:39 | 显示全部楼层
本帖最后由 Gemicio 于 2013-11-12 23:01 编辑

三、Arduino控制红外遥控信号和继电器

OpenWrt通过串口发送给Arduino每次两个字符,第一个字符ch1选择电器,第二个字符ch2选择遥控功能
Arduino mini -pro的4567四个引脚控制四路继电器,IRremote.h编码红外遥控信号
  1. #include <IRremote.h>;
  2.   IRsend irsend;
  3.   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};
  4. #define led4 4
  5. #define led5 5
  6. #define led6 6
  7. #define led7 7
  8. int Av0=2;
  9. int Av1=1;
复制代码


IRremote不能解码的遥控信号只能用raw格式,在这里定义。AV0\1用来设置电视机视频输入源,实现一键选择

[pre lang="arduino" line="462"]      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;[/code]

飞利浦的遥控信号居然连续两次按是不一样的,想了半天用了这个办法好歹解决了’一键选择‘

继电器控制很简单,如果打开就关闭,如果关闭就打开:
[pre lang="arduino" line="539"]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;[/code]
回复 支持 反对

使用道具 举报

发表于 2013-11-12 13:09:11 | 显示全部楼层
貌似很牛掰啊
回复 支持 反对

使用道具 举报

发表于 2013-11-12 17:20:04 | 显示全部楼层
这个想法很不错哦。空间处理的不错。。。
回复 支持 反对

使用道具 举报

发表于 2013-11-12 19:06:13 | 显示全部楼层
图倒是贴很全, 楞没大明白。 这是干什么?  
把变压器(充电器)集成到插座里,加红外遥控功能?
回复 支持 反对

使用道具 举报

发表于 2013-11-12 20:19:40 | 显示全部楼层
做的确实不错 ,
回复 支持 反对

使用道具 举报

发表于 2013-11-13 09:53:01 | 显示全部楼层
本帖最后由 komoya 于 2013-11-13 09:55 编辑
Gemicio 发表于 2013-11-12 10:51
三、Arduino控制红外遥控信号和继电器

OpenWrt通过串口发送给Arduino每次两个字符,第一个字符ch1选择电 ...


我上个月还在想用arduino+en28j60控制8组三极管,再控制继电器。 就是需要一根网线连接arduino板和mini路由中继,再无线连接大的无线路由器。

需要的是在arduino代码中写入网页。。 比较麻烦

你用的是mini路由连接arduino的USB, 我想用的是mini路由器连接arduino的网口。 思路不同,但你这个可以直接省一个路由器啦。。{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2013-11-13 11:16:56 | 显示全部楼层
楼主好贴!
回复 支持 反对

使用道具 举报

发表于 2013-11-13 13:03:15 | 显示全部楼层
有创意,再加一个RF的接收模块。
回复 支持 反对

使用道具 举报

发表于 2013-11-16 18:17:16 来自手机 | 显示全部楼层
PL2303驱动如何安装来自: iPhone客户端
回复 支持 反对

使用道具 举报

发表于 2013-11-16 18:35:03 来自手机 | 显示全部楼层
应该加入2401 2.4G多点控制,2401模块4元多m8芯片5元多来自: iPhone客户端
回复 支持 反对

使用道具 举报

发表于 2013-11-16 20:04:42 来自手机 | 显示全部楼层
hick 发表于  4 天前
图倒是贴很全, 楞没大明白。 这是干什么?   
把变压器(充电器)集成到插座里,加红外遥控功能?...

即可以用电脑单独控制每个插座又可以用控制器控制来自: iPhone客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-16 22:35:34 来自手机 | 显示全部楼层
hxpasd 发表于 2013-11-16 18:17
PL2303驱动如何安装

路由器openwrt管理页面可以很容易安装
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-16 22:43:34 来自手机 | 显示全部楼层
hxpasd 发表于 2013-11-16 18:35
应该加入2401 2.4G多点控制,2401模块4元多m8芯片5元多

智能家居系统需要,而我这里只需控制客厅一个点的电器,所以simple is the best.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 10:27 , Processed in 0.047913 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表