智能花盆-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 20690|回复: 6

[项目] 智能花盆

[复制链接]
发表于 2017-8-31 20:18 | 显示全部楼层 |阅读模式
本帖最后由 王顺 于 2017-11-18 14:18 编辑

参赛项目:
智能花盆

参赛组员:
王顺 - 一只程序猿,最近喜欢折腾电子,负责电子设计与arduino程序编写
万大圣 - 某物联网公司产品经理,负责智能花盆改造
向芸花 - 程序媛一枚,本职工作是做物联网前端,现在做花盆技术分析。
陈宁佳 - 程序媛一枚,产品设计包装,
外观包装分析,“打酱油”

项目简介:
1、远程浇水2、远程补光
3、远程赏花
4、平台实时采集环境数据
5、语音自我介绍
6、APP实时观察状况
                                以下为更新项目内容
                                                                        摘要
      随着社会的进步,人民生活水平的提高,越来越多的人喜欢养花来装饰室内、陶冶情操,另外也是由于环境污染不得不养植物净化空气。但经常由于工作繁忙或在外出差而忘记照料植物。或是对植物的习性不了解养不活植物。不管因为什么原因,都是因为养花者与盆栽里的植物缺少“交流”。而随着科技的发展,“智能”一词进入了我们的视野,智能盆栽拉近了人与盆栽的距离。
从当前社会的需求出发设计了智能花盆系统。该设备主要由信息传感模块、显示模块、语音模块、远程视频监控、无线通信模块、储存模块组成。通过感知设备与语音交互实现互动式养花,通过云服务进行远程查看花生长、浇水、光照,为用户解决了上班忙无时间照料植物、出差担心家中植物的问题,此作品成本低,市场同类产品少、有极大的市场竞争力和很好的经济价值。
      智能花盆系统的设计在于创新理念与设计实践的结合,一方面,解决不会养花的问题,养花系统利用温湿度传感器、光照传感器、土壤湿度传感器等获取植物土壤的水份、光照情况经过MCU的处理实现自动浇水、自动光照和远程赏花。另一方面,生活的快节奏化,让我们没时间养花,但又希望享受绿意,养花系统通过我们日常不离手的手机将虚拟与现实结合。通过WiFi将植物信息发送到手机APP上,用户不仅手指一点就可随时随地了解植物最新信息。而且在现实生活中感受到植物带给我们的好处,一份绿色,一份健康。同时,你也可以打开手机界面的花友圈,找一群志同道合的花友们讨论养花之道,系统也会实时推送最新养花技巧。
        随着现代化科技的发展,该项目的前景广阔,养花系统还可以应用到市政园林上,对城市环境进行保护。

                                                                       功能特色

   自助养花系统的技术属于自主研发,主要由上位机、下位机和云服务终端组成
IDPKEOA(5)43_%HHU2KLXY3.png
        本系统硬件部分采用arduino单片机为处理器,控制各模块之间的衔接。通过感知层的数据采集,传入主控芯片进行处理后;网络层利用WIFI无线通信,将数据传输到云平台;在应用层的智能终端设备上显示所有数据。各个传感器来采集温湿度等相关数据,处理器会将花的数据记录并存储,并通过通信模块(WiFi传感单元)将数据上传到云平台分析出植物所差的养分,平台上就能操作电子阀泵控来自动浇水、添加营养液。这样无论你在何处,都不用担心自己的花没浇水,随时随地、想看就看、一键操作。

                                                                       作品展示
IMG_20171001_125835.jpg

       所需硬件:远程监控视频传感器,arduino语音模块,IIC1602,光照传感器GY-30,WiFi模块8266,灯泡,湿度传感器,DHT11温湿度模块,电源模块,其他耗材(水管,喷头,花盆,洞洞板,导线......)等。

    硬件组成

   “智能花盆系统”。温度传感器、湿度传感器、光强传感器组成传感模块,这些模块一起作输入;输出由无线传感模块、语音模块、显示模块、自动控制模块组成。首先是输入端采集信号给单片机,单片机在对采集到的数据进行分析处理;然后在显示模块上进行数据显示,语音模块主要是用来播报天气预报,温度、湿度、光照等信息;再通过WIFI模块将数据传输到云服务,那么在终端上就能查看数据,了解到植物的生长情况;最后在终端设备进行所需操作,如:补光、浇水、拍照等。其整个硬件结构如图所示:

05K}U5ZV44EWYOLS04ZK3ZT.png
     硬件部分
     首先是通过对控制模块、传感器模块的检测给单片机输入信号,单片机在对采集到的数据进行分析处理,通过蓝牙/WIFI模块将数据传输到后台数据库,可以在终端上查看数据,了解到植物的生长情况;然后输出相应的控制信号对语音模块控制,语音模块主要是用来播报天气预报,温度、湿度、光照等。
由电源、光照传感器、温度传感器、湿度传感器、水泵电子阀、摄像头、WIFI模块七大部分为单片机(CPU)服务,共同构成智慧花盆的硬件,来实现远程访问,自动控制浇水、拍照,并将数据传输到后台,通过终端查看。硬件组成框图如下图所示:


`4ULE0EN%Y)7FE2P}F@H)R9.png

     花盆整个主控部分
IMG_20171001_125848.jpg

     语音控制部分

IMG_20171001_125904.jpg IMG_20171001_125912.jpg

      显示部分

IMG_20171001_125922.jpg

      远程监控部分

IMG_20171001_130013.jpg

土壤传感器部分

IMG_20171001_125943.jpg

光照传感器部分

IMG_20171001_125956.jpg

补光部分

IMG_20171001_130004.jpg


       软件架构

软件系统主要包括主程序、Web程序、中断控制程序。在云服务系统中,会将设备域(智能花盆)检测数据和控制参数上传到平台域,平台会进行数据分析及处理、事件告警,之后在应用层的终端设备查看养花信息,也能进行相应的操作。云服务结构如图所示

4`~B0~RZNP2_U00LL}YR1.png

       作品成本
该作品成本低,只要是采购一些硬件设备,其他都是团队成员一手设计。采购清单如下表:
  
序号
  
名称
单价(元)
数量
总价(元)
1
led小射灯
18
4
72
2
继电器
3.3
5
16.5
3
光照传感器
6.2
2
12.4
4
土壤传感器
2.36
5
11.8
5
WIFI模块
12.3
3
36.9
6
语音模块
54
1
54
7
水泵
27
1
27
8
花盆
15.8
1
15.8
9
温湿度传感器模块
4.3
1
4.3
10
漫反射红外模块
15.45
2
30.9
11
arduino开发板
251
1
251
   12
  视频传感器
120
1
120

传统花卉产业与互联网融合是一个良好的机遇和更是一个花卉产业转型升级的好开头,实践过程中虽然会有专业、技术、经验等方面的不足,但经过不断的学习和团队间的互助将养花系统一步步完善。“传统植物花卉产业”+“技术”+“互联网”之间的结合,在未来发展空间非常大,必将成为未来市场、社会的大势所趋,也将代替传统花卉产业中的不足,提升我国经济和国民经济。

      展望
智能养花系统,将来发展方向如下:
1.小型化
体积小型化,带来用户方便快捷。
2.便宜化
降低成本,提高精度,增加用户数量。
3.智能化
增加更多的高级功能,如:APP、健全语音库。
4.全面化
推广用户:花店、花卉市场、种植基地。
5.专用化
设置专用的系统,提高精度,保护珍稀灭绝植物(如:金花葵,华山新麦草),实时监测它的生长。


软件代码部分

软件部分分为联网部分,数据上传部分,接收命令控制和数据读取部分
[kenrobot_code]8266AT指令部分

while (!doCmdOk("AT", "OK"));
  digitalWrite(8, HIGH);   // 使Led亮

  while (!doCmdOk("AT+CWMODE=3", "OK"));            //工作模式
  while (!doCmdOk("AT+CWJAP=\"MyI9023\",\"wds109609\"", "OK"));
  while (!doCmdOk("AT+CIPSTART=\"TCP\",\"183.230.40.39\",876", "CONNECT"));
  while (!doCmdOk("AT+CIPMODE=1", "OK"));           //透传模式
  while (!doCmdOk("AT+CIPSEND", ">"));              //开始发送

/* EDP 连接 */

if (!edp_connect)
  {
    while (WIFI_UART.available()) WIFI_UART.read(); //清空串口接收缓存
    packetSend(packetConnect(ID, KEY));             //发送EPD连接包
    while (!WIFI_UART.available());                 //等待EDP连接应答
    if ((tmp = WIFI_UART.readBytes(rcv_pkt.data, sizeof(rcv_pkt.data))) > 0 )
    {
      rcvDebug(rcv_pkt.data, tmp);
      if (rcv_pkt.data[0] == 0x20 && rcv_pkt.data[2] == 0x00 && rcv_pkt.data[3] == 0x00)
      {
        edp_connect = 1;
        DBG_UART.println("EDP connected.");
      }
      else
        DBG_UART.println("EDP connect error.");
    }
    packetClear(&rcv_pkt);
  }

数据上传部分
//光照
  liggger = readGZ(lig);
  if (edp_connect && liggger)
  {
    DBG_UART.print("guang: ");
    DBG_UART.println(lig);
    packetSend(packetDataSaveTrans(PUSH_ID, "HIG", lig));  //发送数据存储包
    digitalWrite(8, HIGH);
    delay(100);
    digitalWrite(8, LOW);
  }

接收命令部分
while (WIFI_UART.available())
  {
    readEdpPkt(&rcv_pkt);
    if (isEdpPkt(&rcv_pkt))
    {
      pkt_type = rcv_pkt.data[0];
      switch (pkt_type)
      {
        case CMDREQ:
          char edp_command[50];
          char edp_cmd_id[40];
          long id_len, cmd_len, rm_len;
          char datastr[20];
          char val[10];
          memset(edp_command, 0, sizeof(edp_command));
          memset(edp_cmd_id, 0, sizeof(edp_cmd_id));
          edpCommandReqParse(&rcv_pkt, edp_cmd_id, edp_command, &rm_len, &id_len, &cmd_len);
          DBG_UART.print("rm_len: ");
          DBG_UART.println(rm_len, DEC);
          delay(10);
          DBG_UART.print("id_len: ");
          DBG_UART.println(id_len, DEC);
          delay(10);
          DBG_UART.print("cmd_len: ");
          DBG_UART.println(cmd_len, DEC);
          delay(10);
          DBG_UART.print("id: ");
          DBG_UART.println(edp_cmd_id);
          delay(10);
          DBG_UART.print("cmd: ");
          DBG_UART.println(edp_command);

          //数据处理与应用中EDP命令内容对应
          //本例中格式为  shuju:{V}
          sscanf(edp_command, "%[^:]:%s", datastr, val);

          //光照开关
          if (atoi(val) == 1)
            digitalWrite(6, HIGH);
          if (atoi(val) == 11)
            digitalWrite(6, LOW);
          //浇水系统
          if (atoi(val) == 2)
            digitalWrite(7, HIGH);
          if (atoi(val) == 22)
            digitalWrite(7, LOW);

          packetSend(packetDataSaveTrans(NULL, datastr, val)); //将新数据值上传至数据流
          break;
        default:
          DBG_UART.print("unknown type: ");
          DBG_UART.println(pkt_type, HEX);
          break;
      }
    }

传感器数据读取
bool temperature(char *hum)
{
  int i, sun_val, val = 0;
  for (i = 0; i <= 10; i++)
  {
    sun_val += analogRead(A2);
  }
  val = map(sun_val / 10, 0, 1023, 0, 99);
  delay(1000);
  lcd.setCursor(0, 0);               //设置显示指针
  lcd.print("SH:");     //输出字符到LCD1602上
  lcd.print(val);
  lcd.setCursor(5, 0);
  lcd.print("rh");
  delay(100);
  sprintf(hum, "%d", val);
}[/kenrobot_code]
   最后,作品的全部质料我将全部上传,视频质料一并上传!

  我们都知道团队应该是Team,而不是Group,也就是说团队不仅仅是一群人的简单的组合,而一定是不同成员有分工、有协同,是一个有机的整体,这个就叫做协同合作、相互支持。团队成员根据工作需要,根据个人特长,合理分工,有效协同,一起把事情做好。团队成员之间协同合作、互相支持,就是要使1+1>2,并且不断改进提高,使效能(效率+效果)达到最大化,1+1能不能=3,能不能=4,甚至更大,就看我们在团队的工作中如何更有效的协作和互相支持,这需要不断的训练。

A968E175E3062DFD85D33CE9A20C4E3C.jpg


程序源码: soft_serial_wifi-7.rar (5.75 KB, 下载次数: 230)


发表于 2018-5-31 14:30 | 显示全部楼层
请问一下这是用的哪种arduino的芯片
发表于 2017-10-29 22:43 | 显示全部楼层
1.感谢对社区比赛的支持,开发者积分和贡献值已发放,请点击以下链接领取纪念衫并参与抽奖~
http://www.arduino.cn/thread-48132-1-1.html
2.比赛结果会在11.15号前公布,请耐心等待。
发表于 2017-10-30 16:02 | 显示全部楼层
厉害,这个是基于何种协议?我有个京东云服务器,不知道怎么搭建
发表于 2018-4-10 19:45 | 显示全部楼层
厉害,但为一个花盆装一个摄像头,代价有点高
发表于 2018-9-13 13:15 | 显示全部楼层
这项目不错
发表于 2019-4-10 10:32 | 显示全部楼层
学习了,谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 01:38 , Processed in 0.081790 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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