自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

適合程序員的智能家居

開發(fā)
看到最近智能家居的討論挺火,我也來(lái)分享下在智能家居這塊的體會(huì)。我主要改造了我租的房子的室燈。主要實(shí)現(xiàn)功能有:監(jiān)控室內(nèi)環(huán)境,改裝了室燈,光線暗的時(shí)候有人時(shí)自動(dòng)開燈,光線亮自動(dòng)滅燈,可紅外用遙控器、手機(jī)客戶端改變閾值。

前言

看到最近智能家居的討論挺火,我也來(lái)分享下在智能家居這塊的體會(huì)。我主要改造了我租的房子的室燈。主要實(shí)現(xiàn)功能有:監(jiān)控室內(nèi)環(huán)境,改裝了室燈,光線暗的時(shí)候有人時(shí)自動(dòng)開燈,光線亮自動(dòng)滅燈,可紅外用遙控器、手機(jī)客戶端改變閾值。

材料

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

傳感器:光敏電阻、DHT11溫濕度傳感器、串口WIFI模塊、紅外遙控探頭、紅外人體探測(cè)器、5V繼電器(220V)

布線

室燈控制還是很簡(jiǎn)單的,控制電源即可。

  • 首先使用繼電器接管室燈的電線。
  • 然后放置紅外人體探測(cè)器,我把它朝向房間門口。
  • 溫濕度傳感器、光敏電阻、wifi模塊、紅外遙控探頭就比較隨意了,合理放置就行。

程序開發(fā)

Arduino開發(fā)工具官方有提供,代碼類似c語(yǔ)言,有很多第三方庫(kù),開發(fā)非常容易。最讓我感到幸福的是VS也有相應(yīng)的開發(fā)環(huán)境,有個(gè)插件叫做Visual Micro。

  • 控制電路無(wú)非就是置數(shù)字IO口高電平或低電平。
  • 光敏電阻測(cè)光很簡(jiǎn)單,使用模擬口測(cè)電阻值,如果需要精度更高更專業(yè)的可以買專門的測(cè)光模塊。
  • 通信方式多種多樣,紅外遙控、射頻、藍(lán)牙、wifi,坑爹的wp不支持藍(lán)牙串口,所以我選用的是串口wifi,使用簡(jiǎn)單,模塊有自己的配置頁(yè)面,我配置成接入屋里的wifi網(wǎng)絡(luò)+模塊自建AP,并使用UDP模式發(fā)送廣播。
  • 具體代碼附在下面。

原型

 [[114640]]

可以使用220v~5v變壓器,這樣就可以把主體放到燈罩里了,而且可以使用小點(diǎn)的板子。

擴(kuò)展

Arduino這種類似積木的搭建方法非常適合咱們程序員自己DIY,不需要自己制作電路板。在這個(gè)室燈控制的基礎(chǔ)上咱們?cè)跀U(kuò)展一下思維:

  • 加上紅外發(fā)射頭就可以控制相應(yīng)的紅外遙控設(shè)備,一個(gè)接收一個(gè)發(fā)射組合就是***遙控器,多個(gè)發(fā)射器可以防死角
  • 加上常用的2.4G或者低頻段的無(wú)線模塊,就可以實(shí)現(xiàn)無(wú)線設(shè)備間通訊(模塊很便宜,有興趣可以嘗試鼠標(biāo)、鍵盤、遙控車、航模通訊)
  • 加個(gè)舵機(jī),拉窗簾不在話下。
  • 再大膽點(diǎn),拆開電器找到電路板,接上線,使用Arduino的數(shù)字IO直接監(jiān)控/控制電器電路板。
  • 加上語(yǔ)音識(shí)別模塊(目前的貌似都不太理想,相對(duì)Arduino有些重,這活交給家庭網(wǎng)關(guān)或者手機(jī)比較好)語(yǔ)音控制電器。

Arduino可以方便的實(shí)現(xiàn)控制電源、控制/監(jiān)控帶電路控制的電器的電路板。

憧憬一下當(dāng)WP的Cortana成熟的時(shí)候,這些設(shè)備控制,Cortana都能根據(jù)我的習(xí)慣自動(dòng)搞定,并支持語(yǔ)音控制,全時(shí)待命,未來(lái)生活啊~

***附上我的Arduino代碼:

  1. #include <EEPROM.h>  
  2. #include <IRremote.h>  
  3. #include <dht11.h>  
  4.    
  5. //UNO  
  6. //#define GM_dpin A5             //光敏電阻  
  7. //#define dht_dpin 2            //溫濕度傳感器  
  8. //#define wifiRx_dpin 5            //WIFI接收Rx  
  9. //#define wifiTx_dpin 6            //WIFI發(fā)送Tx  
  10. //#define HW_dpin 8                //紅外遙控探頭  
  11. //#define RSensor_dpin 10        //紅外探測(cè)器人  
  12. //#define jdq_dpin 11            //繼電器  
  13. //#define light_dpin 13            //指示燈  
  14.    
  15. //2560  
  16. #define GM_dpin A15             //光敏電阻  
  17. //#define wifiTx_dpin 10        //WIFI發(fā)送Rx  
  18. //#define wifiRx_dpin 11        //WIFI接收Tx  
  19. #define dht_dpin 21                //溫濕度傳感器  
  20. #define HW_dpin 22                //紅外遙控探頭  
  21. #define RSensor_dpin 23            //紅外探測(cè)器人  
  22. #define jdq_dpin 29                //繼電器  
  23. #define light_dpin 13            //指示燈  
  24.    
  25. int ADZ = 45;                //暗度閥值  
  26. int LDZ = 175;                //亮度閥值  
  27.    
  28. bool IsJDQOpend = false;  
  29. bool IsAutoOpen = false;  
  30. bool IsPause = false;  
  31.    
  32. IRrecv irrecv(HW_dpin);  
  33. decode_results results;  
  34.    
  35. dht11 DHT;  
  36.    
  37. //SoftwareSerial WiFiPort(wifiRx_dpin, wifiTx_dpin);  
  38.    
  39. void InitController(){  
  40.     pinMode(jdq_dpin, OUTPUT);  
  41.     digitalWrite(jdq_dpin, LOW);  
  42.    
  43.     pinMode(light_dpin, OUTPUT);  
  44.     digitalWrite(light_dpin, LOW);  
  45.    
  46.     pinMode(RSensor_dpin, INPUT);  
  47.     pinMode(GM_dpin, INPUT);  
  48. }  
  49.    
  50. void closeLight(){  
  51.     digitalWrite(light_dpin, LOW);  
  52.     digitalWrite(jdq_dpin, LOW);  
  53.     IsJDQOpend = false;  
  54.     IsAutoOpen = false;  
  55.     delay(2000);  
  56. }  
  57.    
  58. void openLight(){  
  59.     digitalWrite(light_dpin, HIGH);  
  60.     digitalWrite(jdq_dpin, HIGH);  
  61.     IsJDQOpend = true;  
  62.     delay(2000);  
  63. }  
  64.    
  65. void makePause(){  
  66.     IsPause = !IsPause;  
  67.     if (IsPause){  
  68.         for (int i = 0; i < 5; i++)  
  69.         {  
  70.             digitalWrite(light_dpin, HIGH);  
  71.             delay(100);  
  72.             digitalWrite(light_dpin, LOW);  
  73.             delay(100);  
  74.         }  
  75.     }  
  76.     else{  
  77.         digitalWrite(light_dpin, HIGH);  
  78.         delay(1000);  
  79.         digitalWrite(light_dpin, LOW);  
  80.     }  
  81. }  
  82.    
  83. //室燈控制器  
  84. void LightController(){  
  85.     //接收紅外遙控器信號(hào)  
  86.     if (irrecv.decode(&results)) {  
  87.         Serial.println(results.value, HEX);  
  88.         if (results.value == 0xFFA25D){  
  89.             //關(guān)燈  
  90.             closeLight();  
  91.         }  
  92.         if (results.value == 0xFFE21D){  
  93.             //開燈  
  94.             openLight();  
  95.         }  
  96.         if (results.value == 0xFFC23D){  
  97.             //暫停  
  98.             makePause();  
  99.         }  
  100.         irrecv.resume();  
  101.     }  
  102.    
  103.     if (IsPause)return;  
  104.     //光敏電阻判斷室內(nèi)亮度  
  105.     int valx = analogRead(GM_dpin);  
  106.     //Serial.println(valx);  
  107.     if (valx < ADZ){  
  108.         //繼電器如果是關(guān)的  
  109.         if (!IsJDQOpend){  
  110.             //紅外人體檢測(cè)  
  111.             int val = digitalRead(RSensor_dpin);  
  112.             if (val == 1)  
  113.             {  
  114.                 //開燈  
  115.                 openLight();  
  116.                 IsAutoOpen = true;  
  117.             }  
  118.             else 
  119.             {  
  120.                 return;  
  121.             }  
  122.         }  
  123.     }  
  124.     else{  
  125.         if (valx > LDZ && IsJDQOpend && IsAutoOpen){  
  126.             valx = analogRead(GM_dpin);  
  127.             if (valx <= LDZ)return;  
  128.             //環(huán)境亮,關(guān)燈  
  129.             closeLight();  
  130.         }  
  131.     }  
  132. }  
  133.    
  134. void setup(){  
  135.     byte    value = EEPROM.read(1);  
  136.     if (value != 255)ADZ = value;  
  137.    
  138.     value = EEPROM.read(2);  
  139.     if (value != 255)LDZ = value;  
  140.    
  141.     Serial.begin(115200);  
  142.     Serial3.begin(115200);  
  143.     InitController();  
  144.     irrecv.enableIRIn();  
  145.     delay(500);  
  146.     Serial.println();  
  147.     Serial.println("[---ZZY Hareware Startup---]");  
  148. }  
  149.    
  150. void loop(){  
  151.     LightController();  
  152.     InfoQuery();  
  153.     GetCommand();  
  154. }  
  155.    
  156. long timespan;  
  157. void InfoQuery(){  
  158.     unsigned long t = (micros() - timespan) / 1000000;  
  159.     if (t < 1)return;  
  160.     timespan = micros();  
  161.     //信息查詢  
  162.     //光控信息  
  163.     int valx = analogRead(GM_dpin);  
  164.     //溫濕度傳感器  
  165.     DHT.read(dht_dpin);  
  166.     String msg = "VMZClub_Home HTP H";  
  167.     msg += DHT.humidity;  
  168.     msg += "T";  
  169.     msg += DHT.temperature;  
  170.     msg += "L";  
  171.     msg += valx;  
  172.     msg += "S";  
  173.     msg += IsJDQOpend;  
  174.     msg += "P";  
  175.     msg += IsPause;  
  176.     msg += "F";  
  177.     msg += ADZ;  
  178.     msg += "/";  
  179.     msg += LDZ;  
  180.     Serial3.print(msg);  
  181.     Serial.println(msg);  
  182. }  
  183.    
  184. void GetCommand(){  
  185.     int cmd[10] = { -1 };  
  186.     for (int i = 0; i < 10; i++)  
  187.     {  
  188.         cmd[i] = Serial3.read();  
  189.         if (cmd[i] == -1)break;  
  190.         Serial.println((char) cmd[i]);  
  191.     }  
  192.     if (cmd[0] == -1)return;  
  193.     switch ((char) cmd[0])  
  194.     {  
  195.     case 'L':  
  196.         switch (cmd[1])  
  197.         {  
  198.         case '0':  
  199.             closeLight();  
  200.             break;  
  201.    
  202.         case '1':  
  203.             openLight();  
  204.             break;  
  205.         }  
  206.         break;  
  207.    
  208.     case 'P':  
  209.         switch (cmd[1])  
  210.         {  
  211.         case '0':  
  212.             IsPause = false;  
  213.             break;  
  214.    
  215.         case '1':  
  216.             IsPause = true;  
  217.             break;  
  218.         }  
  219.         break;  
  220.    
  221.     case 'F':  
  222.         switch (cmd[1])  
  223.         {  
  224.         case'A':  
  225.             if (cmd[2] != -1)    {  
  226.                 ADZ = cmd[2];  
  227.                 EEPROM.write(1, ADZ);  
  228.             }  
  229.             break;  
  230.         case'L':  
  231.             if (cmd[2] != -1){  
  232.                 LDZ = cmd[2];  
  233.                 EEPROM.write(2, LDZ);  
  234.             }  
  235.             break;  
  236.         }  
  237.         break;  
  238.     }  

本文來(lái)自:http://www.cnblogs.com/zhang740/p/3785600.html

責(zé)任編輯:林師授 來(lái)源: 博客園
相關(guān)推薦

2019-12-24 19:31:27

智能家居物聯(lián)網(wǎng)技術(shù)

2015-09-28 09:37:49

2017-09-18 08:34:18

程序員寫作技法

2017-09-18 13:45:59

程序員

2021-12-13 22:50:16

物聯(lián)網(wǎng)智能家居數(shù)據(jù)

2023-05-16 09:53:18

ChatGPT人工智能

2019-04-24 12:22:05

2018-09-19 16:20:17

智能系統(tǒng)開源

2023-10-12 11:27:42

智能家居人工智能

2022-07-01 10:28:24

智能家居網(wǎng)絡(luò)安全漏洞

2013-07-15 13:28:23

智能家居智能

2023-10-25 16:33:59

智能家居物聯(lián)網(wǎng)

2023-03-01 10:08:52

2014-06-16 16:00:09

2009-07-31 10:52:09

新電氣世界智能家庭布線

2023-03-10 11:27:46

物聯(lián)網(wǎng)智能家居

2023-10-07 10:14:04

2021-01-15 15:36:32

人工智能智能家居機(jī)器人

2022-05-25 10:03:38

機(jī)器人智能家居

2021-08-04 15:03:12

物聯(lián)網(wǎng)智能家居IoT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)