久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6566|回復(fù): 5
收起左側(cè)

arduino智能培養(yǎng)大棚

[復(fù)制鏈接]
ID:335884 發(fā)表于 2018-5-29 23:13 | 顯示全部樓層 |閱讀模式
/*程序: 本程序目的是實(shí)現(xiàn)環(huán)境實(shí)時(shí)監(jiān)控以及操作自動(dòng)化,分為自動(dòng)化和藍(lán)牙控制兩部分
操作自動(dòng)化部分包括:1、溫度大于30自動(dòng)開(kāi)啟風(fēng)扇
                    2、土壤濕度小于300水泵自動(dòng)加水
                    3、亮度系數(shù)小于150打開(kāi)補(bǔ)光燈
                    3、超過(guò)以上限度開(kāi)啟警示燈
藍(lán)牙部分:用app inventor設(shè)計(jì)軟件通過(guò)藍(lán)牙控制使不在限制條件下手動(dòng)控制用電器開(kāi)關(guān)。包括:開(kāi)啟(關(guān)閉)風(fēng)扇、水泵、補(bǔ)光燈、警示燈、門(mén)
其他部分:12864OLED顯示溫度、濕度、MQ(煙霧)、亮度系數(shù)等*/

  1. #include <SPI.h>
  2. #include <SoftwareSerial.h>
  3. #include <Wire.h>  
  4. #include <Adafruit_GFX.h>  
  5. #include <Adafruit_SSD1306.h>  
  6. #include <dht.h>
  7. #include <Servo.h>
  8. dht DHT;
  9. #define LOGO16_GLCD_HEIGHT 16 //定義顯示高度  
  10. #define LOGO16_GLCD_WIDTH  16 //定義顯示寬度  
  11. //#define YELLOW  1               //黃燈警報(bào)閃爍端口1
  12. #define GREEN  2              //綠燈警報(bào)閃爍端口2
  13. #define DUOJI 3              //舵機(jī)pwn端口口3
  14. #define OLED_RESET 4          //OLED復(fù)位端口4
  15. #define YELLOW 5              //煙霧端口5
  16. #define FAN 6                //風(fēng)扇端口6(pwn口 具體修改)
  17. #define DHT22_PIN 7            //溫濕度端口7
  18. #define PUMP  8              //水泵端口8
  19. #define HLED  9               //高光食人魚(yú)LED端口9
  20. #define RED  12               //紅燈警報(bào)閃爍端口12   
  21. #define analogMoistue 0       //讀取藍(lán)牙監(jiān)測(cè)信息讀取端口0  
  22. int TSignal=A0;              //土壤信息端口A0  
  23. int MQ=analogRead(A1);       //煙霧信息端口A1
  24. int BSignal=A2;            //亮度模塊端口A2
  25. int ck003 = 155;           //亮度系數(shù)
  26. int turang = 300;            //土壤濕度系數(shù)
  27. //int bluetooth=0;                   //定義藍(lán)牙接入開(kāi)關(guān)
  28. //char  android=' ';
  29. int is_auto =1;
  30. int time_count;
  31. Servo myservo;
  32. SoftwareSerial I2CBT(10,11);   
  33. byte serialA;                  
  34. Adafruit_SSD1306 display(OLED_RESET);
  35. static const unsigned char PROGMEM str_1[] =  
  36. {   
  37. 0x00,0x08,0x43,0xFC,0x32,0x08,0x12,0x08,
  38.       0x83,0xF8,0x62,0x08,0x22,0x08,0x0B,0xF8,
  39.       0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,
  40.       0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x20,0x00,
  41.   };//溫


  42. static const unsigned char PROGMEM str_2[] =  
  43. {   
  44. 0x01,0x00,0x00,0x84,0x3F,0xFE,0x22,0x20,
  45.       0x22,0x28,0x3F,0xFC,0x22,0x20,0x23,0xE0,
  46.       0x20,0x00,0x2F,0xF0,0x22,0x20,0x21,0x40,
  47.       0x20,0x80,0x43,0x60,0x8C,0x1E,0x30,0x04,
  48.   };  // 度


  49. static const unsigned char PROGMEM str_3[] =  
  50. {   
  51. 0x00,0x08,0x47,0xFC,0x34,0x08,0x14,0x08,
  52.       0x87,0xF8,0x64,0x08,0x24,0x08,0x0F,0xF8,
  53.       0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28,
  54.       0x23,0x30,0x21,0x24,0x3F,0xFE,0x20,0x00,
  55.   }; //濕

  56.   static const unsigned char PROGMEM str_4[] =  
  57. {   
  58. 0x60,0x00,0x91,0xF4,0x96,0x0C,0x6C,0x04,0x08,0x04,0x18,0x00,0x18,0x00,0x18,0x00,
  59. 0x18,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x0C,0x04,0x06,0x08,0x01,0xF0,0x00,0x00
  60.   }; //(℃)

  61.   static const unsigned char PROGMEM str_5[] =  
  62. {   
  63. 0x00,0x00,0x00,0x00,0x70,0x00,0xD8,0x00,0xDA,0x00,0x76,0x00,0x0C,0x00,0x18,0x00,
  64. 0x30,0x00,0x6E,0x00,0x5B,0x00,0x1B,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  65.   }; //(%)  
  66. #if (SSD1306_LCDHEIGHT != 64)  
  67. #error("Height incorrect, please fix Adafruit_SSD1306.h!");  //OLED顯示分高度
  68. #endif  

  69. void setup()   
  70. {  
  71. myservo.attach(DUOJI);
  72. pinMode(FAN,OUTPUT);  
  73. pinMode(PUMP,OUTPUT);
  74. pinMode(HLED,OUTPUT);
  75. pinMode(RED,OUTPUT);
  76. pinMode(YELLOW,OUTPUT);
  77. pinMode(GREEN,OUTPUT);
  78. pinMode(TSignal,INPUT);
  79. pinMode(BSignal,INPUT);
  80. digitalWrite(FAN,LOW);
  81. digitalWrite(PUMP,LOW);         
  82. digitalWrite(HLED,LOW);  ;
  83. digitalWrite(RED,LOW);
  84. digitalWrite(YELLOW,LOW);
  85. digitalWrite(GREEN,LOW);              
  86. Serial.begin(9600);                        //輸出比特率
  87. I2CBT.begin(9600);                          //藍(lán)牙傳輸比特率  
  88. display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //OLED顯示起始地址位
  89. display.clearDisplay();  
  90. }  

  91. void loop()
  92. {   
  93.   time_count+=1;
  94.   oled_display();
  95.   byte Data[3]; //顯示溫度           
  96.   byte cmmd[20];
  97.   int insize;
  98.   char str[256];
  99.   int i=(int)(DHT.temperature*10);
  100.     //serialA=I2CBT.read();
  101.     Data[0]='a';
  102.     Data[1]=i/256;      
  103.   Data[2]=i%256;  
  104.   if(is_auto==1)
  105.   {
  106.   AUTOFAN();
  107.     AUTOBRIGHTNESS();
  108.     AUTOPUMP();
  109.     AUTOJINGGAO();
  110.     AUTOYELLOW ();
  111.   AUTOGREEN ();
  112.   }
  113.     if((insize=(I2CBT.available()))>0)  
  114.     {
  115.       is_auto=0;  //關(guān)閉自動(dòng)控制
  116.       time_count=0;
  117.       Serial.print("藍(lán)牙數(shù)據(jù)字節(jié)數(shù) = ");
  118.       Serial.println(insize);
  119.       for (int i=0; i<insize; i++)
  120.       {
  121.       Serial.print(cmmd[i]=char(I2CBT.read()),i);
  122.       Serial.print("\n");
  123.       }
  124.     }
  125.     else
  126.   {
  127.     cmmd[0]='z';
  128.       if(time_count>3000)
  129.     {   
  130.         is_auto=1;
  131.       }
  132.     }


  133.     switch(cmmd[0])     //讀取第一個(gè)字節(jié)
  134.     {case 49:
  135.     Serial.println(DHT.temperature);
  136.         I2CBT.write(Data[0]);
  137.         I2CBT.write(Data[1]);
  138.         I2CBT.write(Data[2]);
  139.      break;

  140.      case 'g': digitalWrite(RED, HIGH); break;  //'g'開(kāi)警示燈


  141.      case 'h': digitalWrite(RED, LOW);  break;  //‘h’關(guān)警示燈


  142.      case 'k': analogWrite(FAN,255);  break;  //'k'開(kāi)風(fēng)扇


  143.      case 'l': analogWrite(FAN,0);    break;  //‘l’關(guān)風(fēng)扇


  144.      case 'i': myservo.write(0);    break;  //'i'開(kāi)門(mén)


  145.      case 'j': myservo.write(90);     break;  //‘j’關(guān)門(mén)


  146.      case 'e': digitalWrite(PUMP,HIGH);
  147.      delay(5000); digitalWrite(PUMP,LOW); break;  //'e'開(kāi)水泵


  148.     // case 'f': digitalWrite(PUMP,LOW);   break;  //‘f’關(guān)水泵


  149.      case 'c': digitalWrite(HLED,HIGH); break;  //'i'開(kāi)補(bǔ)光燈


  150.      case 'd': digitalWrite(HLED,LOW);  break;  //‘d’關(guān)補(bǔ)光燈


  151.      case 'b': is_auto=1;         break;  //‘b’開(kāi)啟自動(dòng)化


  152.    case 'z':                break;  //直接退出

  153.    default: is_auto=1;
  154.      }
  155.   }



  156. void oled_display()
  157. {
  158.   int chk = DHT.read22(DHT22_PIN);        //讀取DH22數(shù)據(jù)
  159.   display.setTextSize(1);               //設(shè)置字體大小  
  160.   display.setTextColor(WHITE);            //設(shè)置字體顏色白色  
  161.   display.setCursor(0,0);                 //設(shè)置字體的起始位置
  162.   display.drawBitmap(0, 20, str_1, 16, 16, 1);  //在坐標(biāo)X:0   Y:20的位置顯示中文字符溫
  163.   display.drawBitmap(18, 20, str_2, 16, 16, 1); //在坐標(biāo)X:42  Y:16的位置顯示中文字符度
  164.   display.drawBitmap(80, 20, str_4, 16, 16,1);  //在坐標(biāo)X:42  Y:16的位置顯示中文字符℃
  165.   display.setCursor(36,25);             //設(shè)置字體的起始位置(36,25)
  166.   display.setTextSize(1);             //設(shè)置字體大小為1
  167.   display.print(":");                   //顯示符號(hào)“:”  
  168.   display.println((float)DHT.temperature, 2); //顯示實(shí)時(shí)溫度
  169.   display.drawBitmap(0, 40, str_3, 16, 16, 1);  //在坐標(biāo)X:0   Y:40的位置顯示中文字符濕
  170.   display.drawBitmap(18, 40, str_2, 16, 16, 1); //在坐標(biāo)X:18  Y:40的位置顯示中文字符度
  171.   display.drawBitmap(80, 40, str_5, 16, 16, 1); //在坐標(biāo)X:80  Y:40的位置顯示中文字符%
  172.   display.setCursor(36,45);             //設(shè)置字體的起始位置(36,25)
  173.   display.setTextSize(1);                 //設(shè)置字體大小為1
  174.   display.print(":");                     //顯示符號(hào)“:”
  175.   display.println((float)DHT.humidity, 2);    //顯示實(shí)時(shí)濕度
  176.   display.setCursor(5,5);               //設(shè)置字體的起始位置(5,5)
  177.   display.setTextSize(1);                 //設(shè)置字體大小為1
  178.   display.println("MQ-2:");               //輸出字符"MQ-2:"并換行
  179.   display.setCursor(33,5);                //設(shè)置字體的起始位置(5,5)
  180.   display.println(analogRead(A1),1);        //顯示模擬口A1的數(shù)據(jù)并換行
  181.   display.display();                      //把緩存的都顯示
  182.   display.clearDisplay();
  183. }

  184. void AUTOFAN()
  185. {
  186.   if(DHT.temperature>30)
  187.   {
  188.     analogWrite(FAN,255);               //溫度大于30℃打開(kāi)風(fēng)扇
  189.   }
  190.   else if(DHT.temperature<30)
  191.   {
  192.     analogWrite(FAN,0);                 //溫度小于30℃關(guān)閉風(fēng)扇         
  193.   }
  194. }


  195.   void AUTOPUMP()                       //如土壤濕度不足開(kāi)啟水泵自動(dòng)加水
  196.   {
  197.     Serial.print("土壤濕度:");
  198.   Serial.println(analogRead(A0));
  199.     if(analogRead(A0) < turang)
  200.     {
  201.       digitalWrite(PUMP,HIGH);
  202.     }
  203.     else if(analogRead(A0) > turang)
  204.     {
  205.       digitalWrite(PUMP,LOW);
  206.     }
  207.   }


  208. void AUTOJINGGAO()                        //紅燈警告
  209. {
  210.    if((analogRead(TSignal) < turang))     //判斷水是否足夠,不足則閃爍,足夠則不閃爍
  211.   {
  212.   digitalWrite(RED, HIGH);  
  213.   delay(300);         
  214.   digitalWrite(RED, LOW);  
  215.   delay(300);  
  216.   }
  217. else if((analogRead(TSignal) > turang))
  218.   {
  219.   digitalWrite(RED,LOW);  
  220.   }
  221. }
  222. void AUTOYELLOW ()
  223. {
  224. if(DHT.temperature>30)     //判斷水是否足夠,不足則閃爍,足夠則不閃爍
  225.   {
  226.   digitalWrite(YELLOW, HIGH);  
  227.   delay(300);         
  228.   digitalWrite(YELLOW, LOW);  
  229.   delay(300);  
  230.   }
  231. else if(DHT.temperature<30)
  232.   {
  233.   digitalWrite(YELLOW,LOW);  
  234.   }
  235.   }

  236.    void AUTOGREEN()
  237.    {
  238.    if(analogRead(BSignal) < ck003)     //判斷水是否足夠,不足則閃爍,足夠則不閃爍
  239.   {
  240.   digitalWrite(GREEN, HIGH);  
  241.   delay(300);         
  242.   digitalWrite(GREEN, LOW);  
  243.   delay(300);  
  244.   }
  245. else if(analogRead(BSignal) > ck003)
  246.   {
  247.   digitalWrite(GREEN,LOW);  
  248.   }
  249. }

  250. void AUTOBRIGHTNESS()                 //光度不夠時(shí)增加亮度呼吸燈
  251. {
  252.   Serial.print("光度系數(shù):");
  253.   Serial.println(analogRead(BSignal));   
  254.   if(analogRead(BSignal) < ck003)
  255.   {

  256.   digitalWrite(HLED,HIGH);   
  257.   delay(500);
  258.   }
  259.   else  if(analogRead(BSignal) > ck003)
  260.   {
  261.   digitalWrite(HLED,LOW);   
  262.   }
  263.   delay(500);
  264. }
復(fù)制代碼


/*

app inventor 部分  
組間設(shè)計(jì):
邏輯設(shè)計(jì):
初始化

藍(lán)牙準(zhǔn)備與選擇
各種用電器

獲取數(shù)據(jù)

App inventor上述aia文件  (無(wú)密碼)
App inventor 可用網(wǎng)站     app.gzjkw點(diǎn)net/login/
問(wèn)題:1、無(wú)法通過(guò)藍(lán)牙控制用電器
      2、程序劃線部分無(wú)法在arduino串口監(jiān)視器中觀察到由Android輸入的數(shù)據(jù)
思考(這樣思考是不是正確的):1、arduino是由收到Android手機(jī)發(fā)送的文本開(kāi)控制IO口的電位拉高或者置低。接受Android收的文本指令傳到串口,我們要做的就是讀取串口的數(shù)據(jù)(Serial .read),再輸出指令并執(zhí)行(Serial .println)。(即劃線部分)問(wèn)題在于打開(kāi)串口監(jiān)視器無(wú)法觀察到由Android端接受的指令。
2、顯示器不在自動(dòng)化與藍(lán)牙模式之內(nèi)。是否可以用中斷來(lái)減低運(yùn)存(僅思想,首要解決第一個(gè)問(wèn)題)。

*/

0.png

全部資料51hei下載地址:
arduino211.7z (1.68 MB, 下載次數(shù): 72)
回復(fù)

使用道具 舉報(bào)

ID:450830 發(fā)表于 2018-12-20 16:02 | 顯示全部樓層
不錯(cuò)學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:670099 發(fā)表于 2019-12-21 20:52 | 顯示全部樓層
很想做一個(gè),好好學(xué)一下
回復(fù)

使用道具 舉報(bào)

ID:658819 發(fā)表于 2020-1-6 22:21 | 顯示全部樓層
樓主好作品,相關(guān)模塊和接線都有嗎
回復(fù)

使用道具 舉報(bào)

ID:445248 發(fā)表于 2020-6-10 16:42 | 顯示全部樓層
ghost98 發(fā)表于 2019-12-21 20:52
很想做一個(gè),好好學(xué)一下

你好 你有樓主的app文件嗎 我現(xiàn)在看 已近被刪除
回復(fù)

使用道具 舉報(bào)

ID:76497 發(fā)表于 2020-7-10 14:10 | 顯示全部樓層
難點(diǎn)在于APP部分
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕国产第一页 | 日本手机在线 | 久久手机在线视频 | 成人免费在线 | 亚洲欧美日韩国产综合 | 91免费高清 | 欧美1区 | 国产精品夜夜春夜夜爽久久电影 | 伦理午夜电影免费观看 | 青青草av网站 | 中国大陆高清aⅴ毛片 | 日韩精品一区在线 | 成人av一区二区三区 | 欧美一级特黄aaa大片在线观看 | 美女二区| 日本一区二区高清视频 | 日韩av免费在线观看 | h肉视频| 凹凸日日摸日日碰夜夜 | 国产高清视频一区 | 亚洲日韩中文字幕一区 | 国产精品中文字幕在线 | 九九热这里 | 国产精品一区二区在线观看 | 久久久99精品免费观看 | 婷婷久久久久 | 中文字幕中文字幕 | 国产精品美女一区二区 | 99热.com| 欧美色综合一区二区三区 | 欧美日韩中文字幕在线 | 97精品超碰一区二区三区 | 欧美精品一区二区在线观看 | 日韩成人一区 | av黄色免费在线观看 | 日本不卡一区二区三区在线观看 | 久久久视频在线 | 久久色视频 | 交专区videossex农村 | 在线黄| 国产日韩在线观看一区 |