標題: 基于云服務的遠程植物看管助手設(shè)計資料 [打印本頁]

作者: 172572nz    時間: 2017-11-23 20:17
標題: 基于云服務的遠程植物看管助手設(shè)計資料
資料總覽:


基于云服務的遠程植物看管助手pptx內(nèi)容預覽:

科技創(chuàng)新項目申報表

  
作品選題的確定(原專利、產(chǎn)品或生活、生產(chǎn)中不足之處)
  
當前市場上的智能花盆類產(chǎn)品其智能性大多局限于對花盆本身的自動澆水功能,或者通過添加藍牙或者WiFi模塊實現(xiàn)與近距離的手機客戶端通信功能。這些功能雖然解決了用戶不能及時看護問題,但是不夠智能化。因為對于植物來說最重要的是澆水量問題,不同植物所需的澆水量不同,現(xiàn)有的自動澆水功能多為設(shè)定一個統(tǒng)一的土壤濕度閾值,當濕度低于此閾值時開啟自動澆水功能。因此對一些需水量很大或者耐干旱的植物并不適用。同樣適用于近距離通過手機客戶端控制花盆澆水的功能也不能滿足長期遠距離出差用戶的使用需求。
  
創(chuàng)新之處
  
與市場上現(xiàn)有產(chǎn)品相比,本作品創(chuàng)新之處在于具有遠程控制與智能澆水的功能。無論用戶身處何地,只需手機連上網(wǎng)絡(luò),打開客戶端便可實時獲取當前植物信息;對養(yǎng)花愛好者可以根據(jù)當前土壤濕度及光照強度實現(xiàn)遠程一鍵澆水功能,這也解決了對不同植物的適用性問題。同時對于設(shè)備的供電問題,本作品結(jié)合外接電源、內(nèi)置電源以及太陽能電池充電三種功能,可以不必擔心設(shè)備供電問題。
  
基本思路
  
對于解決遠程控制問題采用云服務模式,移動客戶端要有適用的app軟件,智能設(shè)備端要結(jié)合功能添加合適的傳感器。因此主要從兩大部分考慮,硬件和軟件部分。
  
(1)硬件部分:電源和控制部分。電源部分設(shè)計主要是實現(xiàn)主電源意外斷開后備用電源立刻供電,并且備用電源采用太陽能電池板充電,實現(xiàn)當電池電壓低于一定值時自動充電的功能。控制部分主要是實現(xiàn)各傳感器模塊將采集的數(shù)據(jù)信息上傳至 MCU,并通過 WIFI 模塊將數(shù)據(jù)上傳至云端。生長環(huán)境信息采集分為光照強度傳感器 BH1750,溫濕度傳感器 DHT11,土壤濕度傳感器三部分。并且設(shè)計有微型水泵實現(xiàn)澆水功能。
  
(2)軟件部分:設(shè)備端控制程序的設(shè)計以及客戶端app的設(shè)計。設(shè)備端控制程序?qū)崿F(xiàn)將采集的信息融合上傳至云端并且接收控制命令。app部分則主要實現(xiàn)接收融合后的信息并且可以實現(xiàn)控制功能。
  
集體作品中申報者各自的工作分工
  
張曼:負責整體框架設(shè)計、硬件部分設(shè)計、所用材料搜集、資料查找與報告的撰寫。
  
李巖:負責軟件程序的設(shè)計調(diào)試、整個實驗平臺的檢測與調(diào)試。
  
進一步完善該作品的設(shè)想
  
基于云服務的遠程植物看管助手系統(tǒng)作為物聯(lián)網(wǎng)接入點可以在原硬件基礎(chǔ)上進行擴展,以此為基點可實現(xiàn)遠程控制家中所有接入設(shè)備。在接下來打算設(shè)計擴展口,以便于其他設(shè)備通過基于云服務的遠程植物看管助手系統(tǒng)接入云端。只要家中擁有了植物看管助手,那么如果有其他接入需求,只需簡單升級即可,不需要更換硬件設(shè)備便可輕松實現(xiàn)。
申報作品所提供的材料
1.作品研究技術(shù)說明書(論文)     0    件。                                                                                                    2.作品附件(圖紙、圖表、調(diào)查問卷表等)  0       件。                                                                    3.作品數(shù)據(jù)光盤    0      件。
  
4.其他      6 件。                                                                                                                        總計:       6    件。                                                                                                                       說明:申報材料可為復印件,均不退回,請申報者自留底稿。                                                                                                                                                                                                        
申報者確認事宜
我(們)確認所有申報資料屬實,服從大賽評委會的決議。                                            
  
申報者(第一作者)簽名:     監(jiān)護人簽名(或班主任代表):
  
                                 年  月  日
  
項目摘要
  
  
基于云服務的遠程植物看管助手是基于云概念的智能植物看管平臺,通過手機客戶端接入云端與智能硬件相連實現(xiàn)遠程控制的功能。其硬件平臺采用以 ARM Cortex-M3為內(nèi)核的 STM32 高性能嵌入式處理芯片,通過采集植物所處土壤的濕度、外界環(huán)境的溫度和濕度、外界光照強度等信息并實時上傳至移動 APP 客戶端,便于植物主人無論在家還是遠在異地都能實時掌握植物的生長狀態(tài)。移動客戶端 APP不僅可以接收信息,還可以發(fā)送指令。只要認為植物需要澆水,便可發(fā)送指令遠程管理。另外如果沒有時間或所處環(huán)境沒有網(wǎng)絡(luò),智能硬件端設(shè)定有土壤濕度最低閾值,只要達到澆水要求,系統(tǒng)就會自動開啟澆水功能。而且倘若主人不善養(yǎng)殖花卉,可以根據(jù)花卉的生長環(huán)境生存周期不同,設(shè)置不同閾值,有區(qū)分的來幫助主人澆水養(yǎng)花,因此無需擔心無人照顧而使植物缺水。另外此系統(tǒng)還具有語音播報功能,當檢測到人體紅外信號時會播報植物信息;當植物缺水時會語音提醒澆水。智能移動花管家的設(shè)計秉承“環(huán)保、低碳、節(jié)能”理念。采用移動電源供電,另外可以選擇外接充電方式或太陽能電池板進行充電。設(shè)計太陽能充電的目的在于長時間無人看管條件下當電源電量低于一定值時可以自動啟動太陽能充電,確保系統(tǒng)不會斷電。因此無論在何種環(huán)境下都可以放心使用。

總結(jié)展望
設(shè)計擴展口,便于家中其他設(shè)備通過基于云服務的遠程植物看管助手系統(tǒng)接入云端。只要家中擁有了植物看管助手,那么如果有其他接入需求,只需簡單升級即可,不需要更換硬件設(shè)備便可輕松實現(xiàn)。

STM32單片機源程序如下:
  1. #include "include.h"
  2. #include "bh1750.h"
  3. //#include "max7219.h"

  4. UART_HandleTypeDef                                         UART_HandleStruct;
  5. Pro_Wait_AckTypeDef                     Wait_AckStruct;
  6. Device_WirteTypeDef                                             Device_WirteStruct;                   
  7. Device_ReadTypeDef                Device_ReadStruct;

  8. Pro_M2W_ReturnInfoTypeDef                                  Pro_M2W_ReturnInfoStruct;
  9. Pro_CommonCmdTypeDef                                       Pro_CommonCmdStruct;
  10. Pro_W2D_WifiStatusTypeDef                      Pro_W2D_WifiStatusStruct;     
  11. Pro_CommonCmdTypeDef                                              Pro_M2WResetCmdStruct;                   
  12. Pro_D2W_ConfigWifiTypeDef               Pro_D2WConfigCmdStruct;                  
  13. Pro_D2W_ReportDevStatusTypeDef           Pro_D2W_ReportStatusStruct;
  14. KEY_StatusTypeDef                                                                 KEY_Status;
  15. uint8_t                                                                                                                 SN;   
  16. uint32_t SystemTimeCount = 0;
  17. uint32_t ReportTimeCount = 0;

  18. uint8_t Set_LedStatus = 0;
  19. uint8_t gatersensorflag=0;
  20. uint8_t gaterpowerflag=0;
  21. uint8_t flat = 1;
  22. uint8_t watertimeflag=0;
  23. uint8_t Yyflag=0;

  24. //u8 Tab[]={0x00,0x42,0xe7,0x00,0x00,0x81,0x42,0x3c};//笑臉
  25. //u8 Tab2[]={0x00,0xe7,0x42,0x00,0x00,0x3c,0x42,0x81};//哭

  26. void McuStatusInit(void)
  27. {
  28.         memset(&UART_HandleStruct, 0, sizeof(UART_HandleStruct));
  29.         memset(&Pro_CommonCmdStruct, 0, sizeof(Pro_CommonCmdStruct));
  30.         Pro_CommonCmdStruct.Pro_HeadPart.Head[0] = 0XFF;
  31.         Pro_CommonCmdStruct.Pro_HeadPart.Head[1] = 0XFF;       
  32.        
  33.         memset(&Pro_CommonCmdStruct, 0, sizeof(Pro_CommonCmdStruct));
  34.         Pro_CommonCmdStruct.Pro_HeadPart.Head[0] = 0XFF;
  35.         Pro_CommonCmdStruct.Pro_HeadPart.Head[1] = 0XFF;       
  36.        
  37.        
  38.         memset(&Pro_M2W_ReturnInfoStruct, 0, sizeof(Pro_M2W_ReturnInfoStruct));
  39.         Pro_M2W_ReturnInfoStruct.Pro_HeadPart.Head[0] = 0XFF;
  40.         Pro_M2W_ReturnInfoStruct.Pro_HeadPart.Head[1] = 0XFF;
  41.         Pro_M2W_ReturnInfoStruct.Pro_HeadPart.Len = exchangeBytes(sizeof(Pro_M2W_ReturnInfoStruct) - 4);
  42.         Pro_M2W_ReturnInfoStruct.Pro_HeadPart.Cmd = Pro_D2W__GetDeviceInfo_Ack_Cmd;
  43.         memcpy(Pro_M2W_ReturnInfoStruct.Pro_ver, PRO_VER, strlen(PRO_VER));
  44.         memcpy(Pro_M2W_ReturnInfoStruct.P0_ver, P0_VER, strlen(P0_VER));
  45.         memcpy(Pro_M2W_ReturnInfoStruct.Hard_ver, HARD_VER, strlen(HARD_VER));
  46.         memcpy(Pro_M2W_ReturnInfoStruct.Soft_ver, SOFT_VER, strlen(SOFT_VER));
  47.         memcpy(Pro_M2W_ReturnInfoStruct.Product_Key, PRODUCT_KEY, strlen(PRODUCT_KEY));
  48.         Pro_M2W_ReturnInfoStruct.Binable_Time = exchangeBytes(0);;               
  49.        
  50.         memset(&Pro_D2W_ReportStatusStruct, 0, sizeof(Pro_D2W_ReportStatusStruct));
  51.         Pro_D2W_ReportStatusStruct.Pro_HeadPartP0Cmd.Pro_HeadPart.Head[0] = 0XFF;
  52.         Pro_D2W_ReportStatusStruct.Pro_HeadPartP0Cmd.Pro_HeadPart.Head[1] = 0XFF;            
  53.         Pro_D2W_ReportStatusStruct.Pro_HeadPartP0Cmd.Pro_HeadPart.Len = exchangeBytes(sizeof(Pro_D2W_ReportStatusStruct) - 4);
  54.         Pro_D2W_ReportStatusStruct.Pro_HeadPartP0Cmd.Pro_HeadPart.Cmd = Pro_D2W_P0_Cmd;
  55.        
  56.         memset(&Pro_M2WResetCmdStruct, 0, sizeof(Pro_M2WResetCmdStruct));
  57.         Pro_M2WResetCmdStruct.Pro_HeadPart.Head[0] = 0XFF;
  58.         Pro_M2WResetCmdStruct.Pro_HeadPart.Head[1] = 0XFF;
  59.         Pro_M2WResetCmdStruct.Pro_HeadPart.Len = exchangeBytes(sizeof(Pro_M2WResetCmdStruct) - 4);
  60.         Pro_M2WResetCmdStruct.Pro_HeadPart.Cmd = Pro_D2W_ResetWifi_Cmd;
  61.        
  62.         memset(&Pro_D2WConfigCmdStruct, 0, sizeof(Pro_D2WConfigCmdStruct));
  63.         Pro_D2WConfigCmdStruct.Pro_HeadPart.Head[0] = 0XFF;
  64.         Pro_D2WConfigCmdStruct.Pro_HeadPart.Head[1] = 0XFF;
  65.         Pro_D2WConfigCmdStruct.Pro_HeadPart.Len = exchangeBytes(sizeof(Pro_D2WConfigCmdStruct) - 4);
  66.         Pro_D2WConfigCmdStruct.Pro_HeadPart.Cmd = Pro_D2W_ControlWifi_Config_Cmd;       

  67.         memset(&Device_WirteStruct, 0, sizeof(Device_WirteStruct));
  68. //        Device_WirteStruct.Motor = exchangeBytes(0x05);   //關(guān)閉電機
  69.        
  70.         memset(&Device_ReadStruct, 0, sizeof(Device_ReadStruct));
  71.        
  72.         memset(&KEY_Status, 0, sizeof(KEY_Status));
  73.        
  74. }
  75. void Printf_SystemRccClocks(void)
  76. {
  77.         uint8_t SYSCLKSource;

  78.         RCC_ClocksTypeDef  SystemRCC_Clocks;
  79.         SYSCLKSource = RCC_GetSYSCLKSource();

  80.         RCC_GetClocksFreq(&SystemRCC_Clocks);
  81. }

  82. void printf_DevStatus(void)
  83. {
  84.         Printf_TimeDisplay();
  85.        
  86. }
  87.        

  88. void Hal_Init(void)
  89. {
  90.         TIM3_Int_Init(7199,9);   //1ms SystemTimeCount + 1
  91.         KEY_GPIO_Init();
  92.         Motor_Init();
  93.         Delay_Init(72);
  94.         DHT11_Init();    //溫濕度傳感器初始化
  95. //        RGB_LED_Init();
  96.         LED_GPIO_Init();
  97.         Init_BH1750();   //光強度傳感器初始化
  98.         AdcInit();    //ADC初始化
  99. //        SPI1_Init();  //led點陣初始化
  100. //        Init_MAX7219();
  101. }

  102. void ReportDevStatusHandle(void);

  103. int main(void)
  104. {
  105.         u16 adcx,adc2,i,j;
  106.         float ADC_ConvertedValueLocal,iol_temp,Vdd;
  107.        
  108.         /* 系統(tǒng)初始化*/
  109.         SystemInit();
  110.         UARTx_Init();
  111.         Printf_SystemRccClocks();
  112.         RTC_Init();
  113.         /*應用初始化*/
  114.         Hal_Init();
  115.         /* 初始化各類型數(shù)據(jù)幀*/
  116.         McuStatusInit();

  117.         while(1)
  118.         {
  119.                
  120.                 MessageHandle(); //處理來自串口的數(shù)據(jù)幀
  121.                 KEY_Handle();                  //處理來自按鍵的事件
  122.                  
  123.                
  124.                 if(gatersensorflag !=0)   //上傳信息
  125.                 {
  126.                         gatersensorflag = 0;
  127.                        
  128.                         Start_BH1750();  //光強
  129.                         Delay_ms(180);
  130.                         Read_BH1750();
  131.                         Convert_BH1750();
  132.                         Device_ReadStruct.light =Light_crc();
  133.                        
  134.                         DHT11_Read_Data(&Device_ReadStruct.Temperature, &Device_ReadStruct.Humidity);  //溫濕度
  135.                        
  136.                         adcx=AdcGetValHum();  //土壤濕度
  137.                         ADC_ConvertedValueLocal = (float)adcx/4096*3.3;
  138.                         iol_temp =100- (ADC_ConvertedValueLocal/3.3)*100 -32;
  139.                         Device_ReadStruct.iol_temp=iol_temp;

  140.                 }
  141.                
  142.                                 //有人時播放語音
  143.                 if(HW == 1 && iol_temp >=45 && Yyflag == 1)
  144.                 {
  145.                                 UART2_Send_DATA(0xAA);
  146.                                 UART2_Send_DATA(0x07);
  147.                                 UART2_Send_DATA(0x02);
  148.                                 UART2_Send_DATA(0x00);
  149.                                 UART2_Send_DATA(0x03);
  150.                                 UART2_Send_DATA(0xB6);
  151.                                 //Delay_ms(6000);
  152.                                 Yyflag = 0;
  153.                 }       
  154.                
  155.                 if(iol_temp <43)  //如果土壤濕度小于43,語音提示
  156.                 {
  157.                         UART2_Send_DATA(0xAA);
  158.                         UART2_Send_DATA(0x07);
  159.                         UART2_Send_DATA(0x02);
  160.                         UART2_Send_DATA(0x00);
  161.                         UART2_Send_DATA(0x01);
  162.                         UART2_Send_DATA(0xB4);
  163.                         Delay_ms(1500);
  164.                 }
  165.                        
  166.                 if(flat == 1)  //客戶端發(fā)出控制命令,關(guān)閉自動澆水模式
  167.                 {
  168.                         if(iol_temp <45)  //土壤濕度小于45
  169.                         {
  170.                                 JDQ_ON();  //打開澆水
  171.                                 //間隔一定時間關(guān)閉澆水
  172.                                 Delay_ms(3000);
  173.                                 JDQ_OFF();


  174.                         }
  175.                         else   //如果土壤濕度大于45
  176.                         {
  177.                                 JDQ_OFF();   //關(guān)閉澆水

  178.                         }
  179.                 }
  180.                
  181.                 //測量備用電源電壓
  182.                 if(gaterpowerflag !=0)
  183.                 {
  184.                         gaterpowerflag=0;
  185.                        
  186.                         adc2=AdcGetValuePower();
  187.                         Vdd=(float)adc2*2.55*(3.3/4096);
  188.                        
  189.                         if(Vdd<1.7)  // 如果電源電壓低于6.4V,開啟繼電器充電
  190.                         {
  191.                                 Power_ON();
  192.                         }
  193.                         else
  194.                         {
  195.                                 Power_OFF();
  196.                         }
  197.                 }
  198.                
  199. ……………………

  200. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
資料列表:
附件5:程序\
科技創(chuàng)新項目查新報告.doc
科技創(chuàng)新項目申報表.doc
附件1:小米智能花盆.doc
附件2:智能花盆設(shè)計報告.doc
附件3:基于ZigBee3G網(wǎng)絡(luò)的溫室無線遠程植物生態(tài)監(jiān)測系統(tǒng).caj
附件4:原理圖.PDF.lnk
附件6:基于云服務的遠程植物看管助手.pptx

所有資料51hei提供下載:

機械-張曼-基于云服務的遠程植物看管助手.rar (13.3 MB, 下載次數(shù): 35)



作者: admin    時間: 2017-11-24 02:14
好資料,51黑有你更精彩!!!
作者: 15703013756    時間: 2017-12-7 00:07
這個真的不錯,給了我啟發(fā)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1