回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

#决赛#小型鱼缸鲶鱼效应养鱼可视化系统 简单

头像 _深蓝_ 2023.07.03 163 2

一、项目背景

家里没有好一点的鱼缸,孩子特别喜欢养鱼,于是从网上买了一个小鱼缸以及一些小鱼。起初还好好的,一天过去后小鱼陆陆续续走向生命的尽头。我一脸无奈加悲伤,又添了几分罪孽...

 

微信图片_20230828170018.jpg

鱼缸一般有增氧系统、排污系统、换水系统,可是这样的小鱼缸加这样的东西非常不方便。为了解决增氧问题,无意间发现了鲶鱼效应,于是根据这个思路想自己制作一个,让小鱼不在悠闲,而是加速游动,这样可以解决缺氧的问题。说干就干,利用这次“物联网创新应用专项挑战赛”,制作一个小型鱼缸鲶鱼效应养鱼可视化系统。

 

二、项目思路

 

1. mind+1.8 模拟环境监测大屏。

2.SIOT2.0物联网平台,存储和物联通信,转发消息。

3.项目共设计了大屏数据监测、鱼缸实时图像监控、鱼缸补光及鲶鱼效应惊吓等组成。

思维导图.png

三、项目步骤

 

1、使用电子模块

 

行空板                                     ×1
SCI采集模块                           ×1
ENS160 空气质量传感器      ×1
环境光传感器                          ×1
防水温度传感器                      ×1
温湿度传感器                          ×1
LED灯                                       ×1
电池盒(9V)                         ×1
摄像头(带USB线)              ×1
直流电机驱动模块                 ×1
小电机                                     ×1

3pin线及4pin连接线     若干

 

2、连接行空板电路

 

电路连接.png

3、设置SIOT服务器

 

利用行空板自带的SIot,设计了以下的数据:

siot数据.jpg

程序运行后上传到SIOT服务器的数据有

光siot照.jpg
siot温湿度.jpg

还可以通过大屏系统的按钮开关控制LED灯的亮与灭,以及小电机的旋转。

siotLED.jpg
siotLED.jpg

4、数据大屏监控系统设计

 

大屏.jpg

5、图形化编程积木程序

 

图像化编程截图.jpg

 

四、效果及其改进方向

 

本人通过录屏及拍摄视频的方式还原该系统的效果,并做了点修改上传至B站,敬请各位观看。

 

 

本人做的该系统中缺少鱼缸中水的含氧量,水清澈程度的监测,在一定程度上缺乏掌握全面的鱼儿生长的环境。应该加入水溶解氧浓度的监测,水质监测等等。

 

五、其他补充资料

 

python代码如下

 

代码
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
import base64
from io import BytesIO
from PIL import Image
from pinpong.board import DS18B20
from dfrobot_rp2040_sci import *
from pinpong.board import DHT11
from pinpong.board import Board
from pinpong.board import Pin
from unihiker import GUI
import math
import time
import siot
import cv2

# 事件回调函数
def on_message_callback(client, userdata, msg):
    aq.config(text=(str(msg.topic) + str(msg.payload.decode())))
    if (msg.topic == "siot/LED"):
        if (msg.payload.decode() == "on"):
            pin3.write_analog(255)
        elif (msg.payload.decode() == "off"):
            pin3.write_analog(0)
    if (msg.topic == "siot/电机"):
        if (msg.payload.decode() == "on"):
            pin4.write_analog(255)
            time.sleep(10)
            pin4.write_analog(0)
def u_thread1_function():

    def frame2base64(frame):
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        img = Image.fromarray(frame) #将每一帧转为Image
        output_buffer = BytesIO() #创建一个BytesIO
        img.save(output_buffer, format='JPEG') #写入output_buffer
        byte_data = output_buffer.getvalue() #在内存中读取
        base64_data = base64.b64encode(byte_data) #转为BASE64
        return base64_data #转码成功 返回base64编码

    def base642base64(frame):
        data=str('data:image/png;base64,')
        base64data = str(frame2base64(frame))
        framedata = base64data[2:(len(base64data)-1)]
        base642base64_data = data + str(framedata)
        return base642base64_data
    vd = cv2.VideoCapture()
    vd.open(-1)
    while True:
        ret, grab = vd.read()
        siot.publish(topic="siot/video", data=base642base64(grab))
        if cv2.waitKey(20) & 0xff== 27:
            break


siot.init(client_id="4181806564474069",server="10.1.2.3",port=1883,user="siot",password="dfrobot")
Board().begin()
u_gui=GUI()
siot.connect()
siot.loop()
siot.set_callback(on_message_callback)
pin1 = Pin(22)
ds1 = DS18B20(pin1)
pin2 = Pin(24)
dht1 = DHT11(pin2)
# pin3  LED灯
pin3 = Pin(23, Pin.PWM)
pin4 = Pin(21, Pin.PWM)
SCI1 = DFRobot_RP2040_SCI_IIC(addr=0x21)
while SCI1.begin() != 0:
    print("Initialization Sensor Universal Adapter Board failed.")
    time.sleep(1)
print("Initialization Sensor Universal Adapter Board done.")
siot.getsubscribe(topic="siot/电机")
siot.getsubscribe(topic="siot/LED")
thread1=u_gui.start_thread(u_thread1_function)
aq=u_gui.draw_text(text="行空板",x=0,y=0,font_size=20, color="#0000FF")

while True:
    AQI = (int(SCI1.get_value0("AQI")))
    if (AQI < 50):
        siot.publish_save(topic="siot/空气质量指数", data="优")
    elif (AQI < 100):
        siot.publish_save(topic="siot/空气质量指数", data="良好")
    else:
        siot.publish_save(topic="siot/空气质量指数", data="受污染")
    siot.publish_save(topic="siot/水温", data=ds1.temp_c())
    siot.publish_save(topic="siot/光照", data=SCI1.get_value0("Light"))
    siot.publish_save(topic="siot/温湿度", data=(str(dht1.temp_c()) + str((str(",") + str(dht1.humidity())))))
    time.sleep(2)

评论

user-avatar
  • hacker_

    hacker_2023.08.30

    666

    0
    • hacker_

      hacker_2023.08.30

      66

      0