查看: 8189|回复: 5

【参赛作品】渔业水质检测无线平台

[复制链接]

1

主题

7

帖子

27

积分

新手上路

Rank: 1

积分
27
发表于 2017-7-12 04:32:52 | 显示全部楼层 |阅读模式
本帖最后由 41****@qq.com 于 2017-7-12 04:40 编辑

参赛作品:渔业水质检测无线系统
团队介绍:本团队成员均为广东海洋大学科技园领沃团队成员,具备一定的软硬件技术,吃苦耐劳,勤奋刻苦,在项目上具有一定的积累,光听学校名称就知道我校是涉海高校,故此次为大家带来的作品是渔业水质检测无线系统,这也是我第一次在OneNET平台发表帖子,希望大家捧场。
团队成员:谢宇 李祖恒 杜洁婷 张宇航 黄宇姗 孙志帆

一、需求分析
    我国是一个渔业大国,国内水产养殖总面积大约8088.2千公顷。科学有效地开发和利用我国宜渔国土资源,关系到未来我国渔业经济的发展、农业产业结构的调整、渔农民的增收、保证粮食安全、稳定和增加优质蛋白食物供给等重大战略问题。
    国内具有一定规模的渔场,面积大,管理员们每天都要24小时看管鱼塘,实时注意鱼塘的水温、光照、湿度、溶氧量等问题,工作量大。在养鱼业中,根据鱼的生长情况正确控制投饵装置,合理增加投饵次数,对于促进鱼类生长,减少饵料浪费和防止水质恶化都很重要,因此投饵是养殖中一项重要的工作,同时也是一项繁重的劳动,迫切需要实行机械化、自动化。
    同时,污染事件时有发生,但通过日常的巡逻中,可以通过对数据的观察,即使发现污染,排查污染源,从而避免更大的损失。
二、概述
  平台结构方面: 双体船与同样吨位的单体船相比,具有更大的甲板面积和舱容,因此而被用于货船由于双体船的宽度比单体船大得多,其稳定性明显优于单体船,且具有承受较大风浪的能力;高速双体船和双体风帆一样,拥有较为稳定,水阻少,较轻,不易翻船等优点。故我们选择双体船作为我们的平台。以下图片包含平台的内部结构与实物:

                                        AQYIV_JY@YTJ771XQ0J)D.png


  技术方面:我们提出了一种基于STM32的渔业水质监测无线平台,同时兼备移动、数据监测功能。具体的设计如下:本设计检测部分分两部分组成,硬件部分和软件部分。硬件部分主要是采用STM32F103C8T6芯片作为控制芯片。驱动部分由12V 和5V电源组成。传感器检测部分利用三个传感器模块集成,三个模块可检测水温、PH值以及电导率。载体运作和检测功同时运作,耗电率低,反馈数据准确,能更全方面检测水质状况。其中,电导率模块通过反映水体导电情况,代表水体浑浊度,即杂质成分的含量;PH值模块能通过水的酸碱度反映水体是否富营养化,代表水环境是否适合水生物生存;水温模块通过温度计反映一天内水温的变化程度,体现渔场水温变化情况。软件部分主要是通讯部分,利用传感器数据检测板和控制板之间的配合,通过NRF和WIFI模块实现双向无线远距离通讯。NRF实现传感器数据检测板和控制板之间控制指令的发送和检测数据包的返回。再者,WIFI模块将数据包上传到外网的OneNet平台。在OneNet平台绘制曲线图实时反映渔场水质变化,方便管理工作人员进行全天候远程实时监测,也能利用大量数据分析水质状况。以下是整个系统框图:
          {`G72@NRCH3]{[4YB7X_C`U.png

三、功能
本项目设计是采用STM32作为控制核心,使用双驱动载体在湖面实现运动。平台上搭载与水质相关的是三类传感器,结合GPS,定点投喂鱼粮,同时利用摄像头观察水中鱼类。岸上操作器控制载体运动并通过OLED液晶屏实时显示各种检测数据,并附有LED作为操作器工作状态的指示。岸上设备与平台通过WIFI和NRF实现通信。具有以下功能:
(1)数据采集及传输;
(2)投饵;
(3)摄像头观察水下鱼群;
(4)定位;
(5)污染报警功能;
1、数据采集及传输
数据的采集和传输分为三部分,一是手持遥控器OLED屏幕显示,二是OneNET平台,三是自制上位机。
  1)自制遥控器数据显示与控制。
HD2}6J@NY4JAHT5D6~FU5KP.png                                                                                           
        附8mil超细(芯片附近)手工做板正面图,动手能力超强有木有(虽然焊功有点渣):

mmexport1499803991037.jpg                                                                                             

2)OneNET上的数据传输

YLDC`G{YSAFCNF[O6I7OU@P.png                                                                                           

  3)自制上位机显示与控制

R~(D_H{9T`10O}L[6YI}A76.png                                                                                           

2、投饵功能
     如上述结构图所示,平台内置饵料舱,饵料可通过舵机控制饵料舱的开关,边移动边投饵,让大部分鱼都可以吃到鱼粮,避免鱼因营养极度不均匀而造成差距较大的问题。
3摄像头观察水下鱼群
目前采用wifi小车方案,视频传输模块采用WR703N无线智能路由器,刷入基于linux内核的openwrt系统,搭载720P摄像头,在wifi允许的范围内,就可实时查看浅水水下鱼游动情况,视频系统结合投饵器机械装置,岸上的管理员通过摄像头观察鱼类情况,进而控制鱼粮数量。(但我们认为此方案在以后的长远发展中不太适用,具体方案还有待讨论)下图是在鱼缸中测试图片:                                                                                                                                                                      mmexport1499800842439.jpg                                                                                  
4、定位
利用M8N GPS,获取平台所在位置的地理坐标。采用U8X-M8030(M8)芯片,极限下的定位精度可以达到0.5m,最长启动时间只需要26s。
   GPS用串口与主控通讯。系统将串口信息处理后传输至岸上的设备,然后被上传至网络端OneNET平台,平台中即可查看平台的位移。   下图为湛江湖光岩定位情况:
      Q8)V(7IB0YNT65CGMZW4O@0.png                                                                      
5、报警功能
当水质不符合正常值时,用户则收到报警通知。
   0C8K]$OCD@1SUXF4Z4(L9.png                                       
四、总结
本作品为第一代作品,因资金不足,许多功能还未完善,接下来会继续做下去,在此我们也希望有业界人士给予一些支持。本作品已在“中星杯”泛珠三角+大学生计算机作品赛全国总决赛中取得铜奖。下图是在总决赛(香港)的表现:
mmexport1499802560657_mh1499802730175.jpg                    mmexport1499802562564_mh1499802817839.jpg                                                                                                                                         mmexport1499686169696.jpg (奖状有木有很吓人呢?)

     另外,本平台在湛江某水产公司试验成功,测试数据基本与常规仪器测试数据基本吻合,并得到一定的认可(具体哪家公司就不说了,毕竟平台还在试验阶段)。
    平台演示视频:http://v.youku.com/v_show/id_XMj ... j.8428770.3416059.1
     代码的话打算只贴一部分,上传OneNET还有获取传感器这部分其实大家都懂的了,那么我就公布一下OLED的显示、控制接收数据的代码吧,希望对大家的开发有启发。

  1. void K_Function(void)
  2. {
  3.                 u8 K_3=0,i;
  4.                 u8 temp1[8]="AA11CC";  //Ç°½ø
  5.                 u8 temp2[8]="AA12CC";  //Ïò×ó
  6.                 u8 temp3[8]="AA13CC";  //ÏòÓÒ
  7.                 u8 temp4[8]="AA14CC";  //Í£Ö¹
  8.                 u8 temp5[8]="AA15CC";  //¿ØÖÆ´¬ÌåÇл»µ½·¢ËÍģʽ
  9.                 static u8 K_1=0;
  10.                 if(OLED_Check == 0)
  11.                 {
  12. start:        Function1_Screen();        
  13.                 }        
  14.                 K_Flag=keyscan(0);
  15.                 switch(K_Flag)
  16.                 {
  17.                                 case 1:
  18.                                                                 K_1++;
  19.                                                                 if(K_1 == 1)
  20.                                                                         KEY_Mode1 = 5;
  21.                                                                 else
  22.                                                                 {
  23.                                                                         K_1 = 0;
  24.                                                                         KEY_Mode1 = 1;
  25.                                                                 } OLED_CLS();        
  26.                                                                 break;
  27.                                                                
  28.                                 case 2: K_Check = 1 ;
  29.                                                         if((K_Check == 1) && (KEY_Mode1 == 1))
  30.                                                         {
  31.                                                                         NRF_TX_Mode();
  32.                                                                         for(i=0;i<6;i++)
  33.                                                                         {
  34.                                                                                 NRF_Tx_Dat(temp5);
  35.                                                                                 delay_ms(30);
  36.                                                                         }                                                               
  37.                                                                         PAout(15) = 1;
  38.                                                                         Value_Flag = 1;
  39.                                                                         K_Check = 0;
  40.                                                                         OLED_Check = 1;
  41.                                                                         OLED_CLS();
  42.                                                                         Function2_Screen();
  43.                                                         }
  44.                                                                
  45.                                                         if((K_Check == 1) && (KEY_Mode1 == 5))
  46.                                                         {
  47.                                                                 PAout(15) = 1;
  48.                                                                 K_Check = 0;
  49.                                                                 OLED_Check = 2;
  50.                                                                 OLED_CLS();
  51.                                                                 Function3_Screen();
  52.                                                                 for(;;)
  53.                                                                 {
  54.                                                                         GPIO_WriteBit(GPIOA,GPIO_Pin_15,
  55.                                                                         (BitAction)((1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_15))));                                                                        
  56.                                                                         NRF_TX_Mode();
  57.                                                                         /*¿ªÊ¼·¢ËÍÊý¾Ý*/
  58.                                                                         K_3=keyscan(0);
  59.                                                                         switch(K_3)
  60.                                                                         {
  61.                                                                                 case 1: do{NRF_Tx_Dat(temp1);}while(!key1);break;
  62.                                                                                 case 2: do{NRF_Tx_Dat(temp2);}while(!key2);break;
  63.                                                                                 case 3: do{NRF_Tx_Dat(temp3);}while(!key3);break;
  64.                                                                         }
  65.                                                                         NRF_Tx_Dat(temp4);
  66.                                                                         delay_ms(20);
  67.                                                                         if(4 == K_3)
  68.                                                                                 {
  69.                                                                                         PAout(15) = 0;
  70.                                                                                         OLED_Check = 0;
  71.                                                                                         OLED_CLS();
  72.                                                                                         break;
  73.                                                                                         goto start;
  74.                                                                                 }
  75.                                                                         }
  76.                                                                 }                break;               
  77.                                                                
  78.                                 case 4:Value_Flag = 0;OLED_Check = 0;OLED_CLS(); break; goto start;                                                        
  79.                                 default : break;
  80.                 }        
  81. }

复制代码




回复

举报

3

主题

40

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2019-3-21 09:54:38 | 显示全部楼层
广东海洋大学发来贺电!

79

主题

450

帖子

1640

积分

金牌会员

Rank: 6Rank: 6

积分
1640
发表于 2017-8-30 14:46:14 | 显示全部楼层
楼主可以把应用页面链接发出来看一下吗
1、麒麟座开发板QQ交流群:328700926
该群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2017-8-3 15:36:05 | 显示全部楼层
这个东西确实很不错,手工点赞!但是船设计得有点丑

5

主题

36

帖子

128

积分

注册会员

Rank: 2

积分
128
发表于 2017-7-17 00:35:53 | 显示全部楼层
广东海洋大学的都好厉害啊

1

主题

4

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2017-7-13 13:51:59 | 显示全部楼层
广东海洋大学的同僚发来贺电:666!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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