前言

看到最近智能家居的讨论挺火,我也来分享下在智能家居这块的体会。我主要改造了我租的房子的室灯。主要实现功能有:监控室内环境,改装了室灯,光线暗的时候有人时自动开灯,光线亮自动灭灯,可红外用遥控器、手机客户端改变阈值。

材料

主控板:Arduino UNO/Mega2560(IO口多)

传感器:光敏电阻、DHT11温湿度传感器、串口WIFI模块、红外遥控探头、红外人体探测器、5V继电器(220V)

布线

室灯控制还是很简单的,控制电源即可。

首先使用继电器接管室灯的电线。

然后放置红外人体探测器,我把它朝向房间门口。

温湿度传感器、光敏电阻、wifi模块、红外遥控探头就比较随意了,合理放置就行。

程序开发

Arduino开发工具官方有提供,代码类似c语言,有很多第三方库,开发非常容易。最让我感到幸福的是VS也有相应的开发环境,有个插件叫做Visual Micro。

控制电路无非就是置数字IO口高电平或低电平。

光敏电阻测光很简单,使用模拟口测电阻值,如果需要精度更高更专业的可以买专门的测光模块。

通信方式多种多样,红外遥控、射频、蓝牙、wifi,坑爹的wp不支持蓝牙串口,所以我选用的是串口wifi,使用简单,模块有自己的配置页面,我配置成接入屋里的wifi网络+模块自建AP,并使用UDP模式发送广播。

具体代码附在下面。

原型

可以使用220v~5v变压器,这样就可以把主体放到灯罩里了,而且可以使用小点的板子。

扩展

Arduino这种类似积木的搭建方法非常适合咱们程序员自己DIY,不需要自己制作电路板。在这个室灯控制的基础上咱们在扩展一下思维:

加上红外发射头就可以控制相应的红外遥控设备,一个接收一个发射组合就是万能遥控器,多个发射器可以防死角

加上常用的2.4G或者低频段的无线模块,就可以实现无线设备间通讯(模块很便宜,有兴趣可以尝试鼠标、键盘、遥控车、航模通讯)

加个舵机,拉窗帘不在话下。

再大胆点,拆开电器找到电路板,接上线,使用Arduino的数字IO直接监控/控制电器电路板。

加上语音识别模块(目前的貌似都不太理想,相对Arduino有些重,这活交给家庭网关或者手机比较好)语音控制电器。

Arduino可以方便的实现控制电源、控制/监控带电路控制的电器的电路板。

憧憬一下当WP的Cortana成熟的时候,这些设备控制,Cortana都能根据我的习惯自动搞定,并支持语音控制,全时待命,未来生活啊~

最后附上我的Arduino代码:

#include

#include

#include

//UNO

//#define GM_dpin A5 //光敏电阻

//#define dht_dpin 2 //温湿度传感器

//#define wifiRx_dpin 5 //WIFI接收Rx

//#define wifiTx_dpin 6 //WIFI发送Tx

//#define HW_dpin 8 //红外遥控探头

//#define RSensor_dpin 10 //红外探测器人

//#define jdq_dpin 11 //继电器

//#define light_dpin 13 //指示灯

//2560

#define GM_dpin A15 //光敏电阻

//#define wifiTx_dpin 10 //WIFI发送Rx

//#define wifiRx_dpin 11 //WIFI接收Tx

#define dht_dpin 21 //温湿度传感器

#define HW_dpin 22 //红外遥控探头

#define RSensor_dpin 23 //红外探测器人

#define jdq_dpin 29 //继电器

#define light_dpin 13 //指示灯

int ADZ = 45; //暗度阀值

int LDZ = 175; //亮度阀值

bool IsJDQOpend = false;

bool IsAutoOpen = false;

bool IsPause = false;

IRrecv irrecv(HW_dpin);

decode_results results;

dht11 DHT;

//SoftwareSerial WiFiPort(wifiRx_dpin, wifiTx_dpin);

void InitController(){

pinMode(jdq_dpin, OUTPUT);

digitalWrite(jdq_dpin, LOW);

pinMode(light_dpin, OUTPUT);

digitalWrite(light_dpin, LOW);

pinMode(RSensor_dpin, INPUT);

pinMode(GM_dpin, INPUT);

}

void closeLight(){

digitalWrite(light_dpin, LOW);

digitalWrite(jdq_dpin, LOW);

IsJDQOpend = false;

IsAutoOpen = false;

delay(2000);

}

void openLight(){

digitalWrite(light_dpin, HIGH);

digitalWrite(jdq_dpin, HIGH);

IsJDQOpend = true;

delay(2000);

}

void makePause(){

IsPause = !IsPause;

if (IsPause){

for (int i = 0; i < 5; i++)

{

digitalWrite(light_dpin, HIGH);

delay(100);

digitalWrite(light_dpin, LOW);

delay(100);

}

}

else{

digitalWrite(light_dpin, HIGH);

delay(1000);

digitalWrite(light_dpin, LOW);

}

}

//室灯控制器

void LightController(){

//接收红外遥控器信号

if (irrecv.decode(&results)) {

Serial.println(results.value, HEX);

if (results.value == 0xFFA25D){

//关灯

closeLight();

}

if (results.value == 0xFFE21D){

//开灯

openLight();

}

if (results.value == 0xFFC23D){

//暂停

makePause();

}

irrecv.resume();

}

if (IsPause)return;

//光敏电阻判断室内亮度

int valx = analogRead(GM_dpin);

//Serial.println(valx);

if (valx < ADZ){

//继电器如果是关的

if (!IsJDQOpend){

//红外人体检测

int val = digitalRead(RSensor_dpin);

if (val == 1)

{

//开灯

openLight();

IsAutoOpen = true;

}

else

{

return;

}

}

}

else{

if (valx > LDZ && IsJDQOpend && IsAutoOpen){

valx = analogRead(GM_dpin);

if (valx <= LDZ)return;

//环境亮,关灯

closeLight();

}

}

}

void setup(){

byte value = EEPROM.read(1);

if (value != 255)ADZ = value;

value = EEPROM.read(2);

if (value != 255)LDZ = value;

Serial.begin(115200);

Serial3.begin(115200);

InitController();

irrecv.enableIRIn();

delay(500);

Serial.println();

Serial.println("[---ZZY Hareware Startup---]");

}

void loop(){

LightController();

InfoQuery();

GetCommand();

}

long timespan;

void InfoQuery(){

unsigned long t = (micros() - timespan) / 1000000;

if (t < 1)return;

timespan = micros();

//信息查询

//光控信息

int valx = analogRead(GM_dpin);

//温湿度传感器

DHT.read(dht_dpin);

String msg = "VMZClub_Home HTP H";

msg += DHT.humidity;

msg += "T";

msg += DHT.temperature;

msg += "L";

msg += valx;

msg += "S";

msg += IsJDQOpend;

msg += "P";

msg += IsPause;

msg += "F";

msg += ADZ;

msg += "/";

msg += LDZ;

Serial3.print(msg);

Serial.println(msg);

}

void GetCommand(){

int cmd[10] = { -1 };

for (int i = 0; i < 10; i++)

{

cmd[i] = Serial3.read();

if (cmd[i] == -1)break;

Serial.println((char) cmd[i]);

}

if (cmd[0] == -1)return;

switch ((char) cmd[0])

{

case 'L':

switch (cmd[1])

{

case '0':

closeLight();

break;

case '1':

openLight();

break;

}

break;

case 'P':

switch (cmd[1])

{

case '0':

IsPause = false;

break;

case '1':

IsPause = true;

break;

}

break;

case 'F':

switch (cmd[1])

{

case'A':

if (cmd[2] != -1) {

ADZ = cmd[2];

EEPROM.write(1, ADZ);

}

break;

case'L':

if (cmd[2] != -1){

LDZ = cmd[2];

EEPROM.write(2, LDZ);

}

break;

}

break;

}

}

python硬件编程智能家居_适合程序员的智能家居相关推荐

  1. python在哪里写代码比较适合-程序员面试被要求手写代码,你与顶级程序员的差别在哪?...

    原标题:程序员面试被要求手写代码,你与顶级程序员的差别在哪? 前言: Python现在非常火,语法简单而且功能强大,很多同学都想学Python! 所以小的给各位看官们准备了收藏已久的视频教程分享给大家 ...

  2. python利用微信的方法_作为程序员,如何利用Python玩转微信,让你的微信与众不同...

    我们每天都在用微信,有没有想过用Python来控制我们的微信,不多说,直接上干货! 安装模块 1.生成微信对象 bot = Bot() #初始化一个对象,就相当于拿到了这个人的微信,后续的一些操作都要 ...

  3. python可以这样学豆瓣_豆瓣程序员如何利用Python开发出这么成功的社区?

    image 豆瓣网对互联网用户来说是知名的Web 2.0社区,但对开发者而言,更重要的是一个应用Python打造的非常成功的Web 2.0站点.豆瓣网已经达到了300万注册用户,另外还有千万级的非注册 ...

  4. python面向对象实例王者荣耀_大牛程序员利用Python开发王者荣耀带妹神器,一路直奔上王者...

    王者荣耀 -很火的手游-简直老少通吃-令人发指-虽然操作简单-但为什么你还是会被虐, 其实 是有技巧的--本文Python大神带你研究王者荣耀各类英雄的出装小技巧,让你成为大神般的存在 前期准备 环境 ...

  5. python接私活王者_大牛程序员利用Python开发王者荣耀带妹神器,一路直奔上王者...

    王者荣耀 -很火的手游-简直老少通吃-令人发指-虽然操作简单-但为什么你还是会被虐, 其实 是有技巧的--本文Python大神带你研究王者荣耀各类英雄的出装小技巧,让你成为大神般的存在 前期准备 环境 ...

  6. 抖音python上的代码视频_资深程序员:十行Python代码教你爬取抖音视频!

    环境说明 环境: python 3.7.1 centos 7.4 pip 10.0.1 部署 [root@localhost ~]# python3.7 --version Python 3.7.1 ...

  7. python硬件编程_Python学习日记_《Python硬件编程实战》笔记_Mr_Ouyang

    书名: Python硬件编程实战 作者: 李茂 出版社: 机械工业出版社 [此处需要插入图片 Python封面] 笔者简评:不太适宜购买,全书大篇幅在用图片来解释极简单的细节,对于那些需要作者去深挖. ...

  8. windows游戏编程_2020年适合程序员编程的笔记本电脑推荐

    在购买编程笔记本电脑时,一套智能的基准规格包括至少 8GB 的内存.像样的 SSD.强大的集成 GPU 和一个 i5 或 i7 处理器.虽然这些基准配置很好,但它们不足以帮助您找到最好的笔记本电脑.在 ...

  9. python笔记本电脑推荐2020_最新版:2020年适合程序员的推荐笔记本电脑

    购买编程笔记本电脑时,一套明智的基准规格包括至少8GB内存,不错的SSD,强大的集成GPU和i5或i7处理器.尽管这些基准测试配置不错,但不足以帮助您找到最好的笔记本电脑.在本文中,我研究和编辑了程序 ...

最新文章

  1. RESTFUL框架-网站即软件
  2. P1063 能量项链
  3. python怎样画立体图形-用python来画出高光谱遥感影像的3D立体图
  4. web browser 发展史
  5. slam 常用数据集的帧率
  6. 跟我一起学.NetCore之Asp.NetCore启动流程浅析
  7. 信息学奥赛一本通 1319:【例6.1】排队接水 | 洛谷 P1223 排队接水
  8. 高性能网关设备及服务实践
  9. 把python37添加到环境变量配置_linux设置python环境变量 分类: python ...
  10. elementUI select组件value值注意事项
  11. Python ‘,=‘ 语句的使用
  12. 实例讲解什么是Meta回归,怎么利用Meta回归发表文章!
  13. bootstrap完整左侧导航栏代码及结果样式
  14. GAN的评价图像评价指标(IS和FID)
  15. 把数字翻译成英文声明.C语言,如何把数字翻译成英文
  16. oracle的空间字段、空间函数,空间数据类型
  17. 关于Windows的用户帐户控制
  18. 本地图文直接复制到dedecms编辑器中
  19. 样式padding-left和margin-left有什么区别?(from baidu zidao)
  20. Basler工业相机python开发(Pypylon)

热门文章

  1. 【Bug_驱动】ThinkPad鼠标和触摸板无法同时使用的解决方案
  2. 27岁Python独立开发者,年收入超900万,过着令人羡慕的生活
  3. redis主从结构,主库宕机
  4. hp4411s vt168
  5. pytorch拟合sin函数
  6. IE中的看板管理在软件开发中的应用
  7. 安川e1000中文说明书_安川变频器E1000快速使用指南.pdf
  8. marquee做文字滚动、图片轮播
  9. 北京内推 | 微软亚洲研究院DKI组招聘大模型方向研究实习生
  10. 不同档次的计算机配置,Win7显卡型号和电脑配置型号不一样怎么回事