找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3533|回复: 2
收起左侧

基于云服务的远程植物看管助手设计资料

[复制链接]
ID:252822 发表于 2017-11-23 20:17 | 显示全部楼层 |阅读模式
资料总览:
0.png

基于云服务的远程植物看管助手pptx内容预览:
0.png 0.png 0.png 0.png 0.png 0.png
科技创新项目申报表

  
作品选题的确定(原专利、产品或生活、生产中不足之处)
  
当前市场上的智能花盆类产品其智能性大多局限于对花盆本身的自动浇水功能,或者通过添加蓝牙或者WiFi模块实现与近距离的手机客户端通信功能。这些功能虽然解决了用户不能及时看护问题,但是不够智能化。因为对于植物来说最重要的是浇水量问题,不同植物所需的浇水量不同,现有的自动浇水功能多为设定一个统一的土壤湿度阈值,当湿度低于此阈值时开启自动浇水功能。因此对一些需水量很大或者耐干旱的植物并不适用。同样适用于近距离通过手机客户端控制花盆浇水的功能也不能满足长期远距离出差用户的使用需求。
  
创新之处
  
与市场上现有产品相比,本作品创新之处在于具有远程控制与智能浇水的功能。无论用户身处何地,只需手机连上网络,打开客户端便可实时获取当前植物信息;对养花爱好者可以根据当前土壤湿度及光照强度实现远程一键浇水功能,这也解决了对不同植物的适用性问题。同时对于设备的供电问题,本作品结合外接电源、内置电源以及太阳能电池充电三种功能,可以不必担心设备供电问题。
  
基本思路
  
对于解决远程控制问题采用云服务模式,移动客户端要有适用的app软件,智能设备端要结合功能添加合适的传感器。因此主要从两大部分考虑,硬件和软件部分。
  
(1)硬件部分:电源和控制部分。电源部分设计主要是实现主电源意外断开后备用电源立刻供电,并且备用电源采用太阳能电池板充电,实现当电池电压低于一定值时自动充电的功能。控制部分主要是实现各传感器模块将采集的数据信息上传至 MCU,并通过 WIFI 模块将数据上传至云端。生长环境信息采集分为光照强度传感器 BH1750,温湿度传感器 DHT11,土壤湿度传感器三部分。并且设计有微型水泵实现浇水功能。
  
(2)软件部分:设备端控制程序的设计以及客户端app的设计。设备端控制程序实现将采集的信息融合上传至云端并且接收控制命令。app部分则主要实现接收融合后的信息并且可以实现控制功能。
  
集体作品中申报者各自的工作分工
  
张曼:负责整体框架设计、硬件部分设计、所用材料搜集、资料查找与报告的撰写。
  
李岩:负责软件程序的设计调试、整个实验平台的检测与调试。
  
进一步完善该作品的设想
  
基于云服务的远程植物看管助手系统作为物联网接入点可以在原硬件基础上进行扩展,以此为基点可实现远程控制家中所有接入设备。在接下来打算设计扩展口,以便于其他设备通过基于云服务的远程植物看管助手系统接入云端。只要家中拥有了植物看管助手,那么如果有其他接入需求,只需简单升级即可,不需要更换硬件设备便可轻松实现。
申报作品所提供的材料
1.作品研究技术说明书(论文)     0    件。                                                                                                    2.作品附件(图纸、图表、调查问卷表等)  0       件。                                                                    3.作品数据光盘    0      件。
  
4.其他      6 件。                                                                                                                        总计:       6    件。                                                                                                                       说明:申报材料可为复印件,均不退回,请申报者自留底稿。                                                                                                                                                                                                        
申报者确认事宜
我(们)确认所有申报资料属实,服从大赛评委会的决议。                                            
  
申报者(第一作者)签名:     监护人签名(或班主任代表):
  
                                 年  月  日
  
项目摘要
  
  
基于云服务的远程植物看管助手是基于云概念的智能植物看管平台,通过手机客户端接入云端与智能硬件相连实现远程控制的功能。其硬件平台采用以 ARM Cortex-M3为内核的 STM32 高性能嵌入式处理芯片,通过采集植物所处土壤的湿度、外界环境的温度和湿度、外界光照强度等信息并实时上传至移动 APP 客户端,便于植物主人无论在家还是远在异地都能实时掌握植物的生长状态。移动客户端 APP不仅可以接收信息,还可以发送指令。只要认为植物需要浇水,便可发送指令远程管理。另外如果没有时间或所处环境没有网络,智能硬件端设定有土壤湿度最低阈值,只要达到浇水要求,系统就会自动开启浇水功能。而且倘若主人不善养殖花卉,可以根据花卉的生长环境生存周期不同,设置不同阈值,有区分的来帮助主人浇水养花,因此无需担心无人照顾而使植物缺水。另外此系统还具有语音播报功能,当检测到人体红外信号时会播报植物信息;当植物缺水时会语音提醒浇水。智能移动花管家的设计秉承“环保、低碳、节能”理念。采用移动电源供电,另外可以选择外接充电方式或太阳能电池板进行充电。设计太阳能充电的目的在于长时间无人看管条件下当电源电量低于一定值时可以自动启动太阳能充电,确保系统不会断电。因此无论在何种环境下都可以放心使用。

总结展望
设计扩展口,便于家中其他设备通过基于云服务的远程植物看管助手系统接入云端。只要家中拥有了植物看管助手,那么如果有其他接入需求,只需简单升级即可,不需要更换硬件设备便可轻松实现。

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);   //关闭电机
  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.         /* 系统初始化*/
  109.         SystemInit();
  110.         UARTx_Init();
  111.         Printf_SystemRccClocks();
  112.         RTC_Init();
  113.         /*应用初始化*/
  114.         Hal_Init();
  115.         /* 初始化各类型数据帧*/
  116.         McuStatusInit();

  117.         while(1)
  118.         {
  119.                
  120.                 MessageHandle(); //处理来自串口的数据帧
  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)  //客户端发出控制命令,关闭自动浇水模式
  167.                 {
  168.                         if(iol_temp <45)  //土壤湿度小于45
  169.                         {
  170.                                 JDQ_ON();  //打开浇水
  171.                                 //间隔一定时间关闭浇水
  172.                                 Delay_ms(3000);
  173.                                 JDQ_OFF();


  174.                         }
  175.                         else   //如果土壤湿度大于45
  176.                         {
  177.                                 JDQ_OFF();   //关闭浇水

  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:程序\
科技创新项目查新报告.doc
科技创新项目申报表.doc
附件1:小米智能花盆.doc
附件2:智能花盆设计报告.doc
附件3:基于ZigBee3G网络的温室无线远程植物生态监测系统.caj
附件4:原理图.PDF.lnk
附件6:基于云服务的远程植物看管助手.pptx

所有资料51hei提供下载:

机械-张曼-基于云服务的远程植物看管助手.rar (13.3 MB, 下载次数: 33)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2017-11-24 02:14 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:251711 发表于 2017-12-7 00:07 来自手机 | 显示全部楼层
这个真的不错,给了我启发
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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