回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

#决赛#云雀天宫物联可视化系统 简单

头像 rzegkly 2023.08.11 225 1

360截图20230828193325863.jpg

一、项目介绍

 

          每年的8月23日前后,太阳到达黄经150°时是二十四节气的处暑。

处暑是反映气温变化的一个节气。

“处”含有躲藏、终止意思,“处暑”表示炎热暑天结束了。

太空探索永无止境,

某年8月22日,云雀天宫空间站投入使用。

为了保证中国宇航员的安全,

空间站实现无人值守环境监测系统,

检测实验舱土壤水分,统计回收空间站水量多少,

对空间站核心舱的温度、湿度、噪音、压强监测等功能。         

今天分享一下《云雀天宫物联可视化系统》

 

image.png

材料清单

image.png

二、项目介绍实现功能

1.云雀气象仪测量核心舱的温度、湿度、气压,

2.RGB灯带点亮数目映射反映空间站噪音的大小,

3.雨量传感器检测实验舱水分搜集的多少,

4.土壤传感器检测实验舱植物土壤中水分,

5.行空板检测核心舱噪音的大小。

微信图片_20230827165855.jpg

三、制作过程

 

(1)升级行空板SIoTV2,

 

1.升级行空板siotv2参照我的帖子,

2.测试SIOTV2。账号:siot , 密码:dfrobot

b5f8a3fcaad98261893c3083681f92a3_f4ae5b6ce4c6291bea469a661c431c58.jpg

3.进入siot界面,新建气象相关主题

360截图20230827151027890.jpg

4.行空板网络设置,保证行空板WiFi与电脑WiFi在同一个网段,在实时显示相关数据。

(记录下WiFi状态下IP地址:192.168.58.212, 为编程做准备)。

360截图20230827151943794.jpg

(2)编写程序

 

步骤1 步骤1 打开mind+1.8.0,窗口右上角,选择python模式,点击左下角“扩展”,在官方库中找到“行空板”、"MQTT-PY"

1.jpg

步骤2 右下角点击左下角“扩展”,在pingpong库中添加pingpong、WS2812 RGB灯

2.jpg

步骤3 在Mind+右下角点击左下角“扩展”,在用户库中添加 SCI、云雀气象仪、雨量模块

3.jpg

步骤4 程序编写

1.程序初始化

image.png
image.png

2.将相关参数发送MQTT服务器中

image.png

3.设置变量,核心舱噪音值映射灯带

image.png

4.通过电脑远程桌面,输入IP地址:10.1.2.3,登陆进入。

image.png
360截图20230826210801424.jpg

远程访问行空板效果图

 

步骤5 设置可视化面板

4.打开Mind+1.8.0,在顶部菜单栏点击进入可视化面板,进入弹出新窗口

 

image.png

5.点击新建项目,选择新建空白项目,输入项目名称描述后点击确认即可新建一个项目,点击编辑即可进入面板编辑页面。

可视化封面.jpg

6.进入页面后会弹出提示选择数据源,连接行空板上的SIoT V2,则ip可以填写行空板的ip。其他设置保持默认,确认后会提示连接成功。

360截图20230828152956539.jpg

7.添加相关数据组件,绑定相关气象主题Topic

 

image.png

8.云雀天宫物联可视化面板

 

360截图20230827150842121.jpg

(3)进入siot界面,分析相关参数

yushui.jpg
气压.jpg
声音.jpg
湿度.jpg
土壤.jpg
温度.jpg

(4)云雀天宫空间站模型制作

 

image.png

安装梦天、问天实验舱

image.png

安装梦天、问天实验舱

image.png

安装天和核心舱及天舟货运舱

image.png

安装天和核心舱及天舟货运舱

image.png

安装神舟载人飞船

image.png

安装各舱体连接件,在瓶盖上钻孔用螺丝固定

image.png

各舱合体

image.png

舱体安装太阳能电池板

微信图片_20230827165840.jpg

云雀天宫空间站模型

 

 

四、总结

 

《云雀天宫物联可视化系统》项目基本可以实现功能

1.云雀气象仪测量核心舱的温度、湿度、气压,

2.RGB灯带点亮数目映射反映空间站噪音的大小,

3.雨量传感器检测实验舱水分搜集的多少,

4.土壤传感器检测实验舱植物土壤中水分,

5.行空板检测核心舱噪音的大小。

由于时间有限,将来该项目可以加入语音合成模块,让项目自动播放的功能,同时,项目添加摄像头实时查看空间站的噪音、雨水量等信息。

五、资源

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

# MindPlus
# Python
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from DFRobot_Atmospherlum import *
from pinpong.board import NeoPixel
from dfrobot_rp2040_sci import *
from pinpong.board import Board
from unihiker import Audio
from unihiker import GUI
import math
import siot
import time


def numberMap(x, in_min, in_max, out_min, out_max):
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min


Board().begin()
u_gui=GUI()
siot.init(client_id="24809568021678974",server="192.168.58.212",port=1883,user="siot",password="dfrobot")
u_audio = Audio()
siot.connect()
siot.loop()
np1 = NeoPixel(Pin((Pin.P0)),7)
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.")
yunque_i2c = DFRobot_Atmospherlum_I2C(0x42)
while (yunque_i2c.begin() != 0):
    print("yunque_i2c initialize failed!!")
    time.sleep(1)
print("Sensor initialize success!!")
yunque_i2c.set_local_time()
time.sleep(1)

u_gui.fill_round_rect(x=10,y=10,w=220,h=40,r=5,color="#FFFF00")
aa=u_gui.draw_text(text="云雀天宫物联系统",x=20,y=15,font_size=18, color="#FF0000")
u_gui.fill_round_rect(x=10,y=60,w=220,h=28,r=5,color="#FF6600")
tr=u_gui.draw_text(text="土壤湿度",x=20,y=60,font_size=15, color="#0000FF")
u_gui.fill_round_rect(x=10,y=90,w=220,h=28,r=5,color="#FF6600")
yl=u_gui.draw_text(text="雨     量",x=20,y=90,font_size=15, color="#000000")
u_gui.fill_round_rect(x=10,y=120,w=220,h=28,r=5,color="#FF6600")
wd=u_gui.draw_text(text="温    度",x=20,y=120,font_size=15, color="#0000FF")
u_gui.fill_round_rect(x=10,y=150,w=220,h=28,r=5,color="#FF6600")
sd=u_gui.draw_text(text="湿    度",x=20,y=150,font_size=15, color="#000000")
u_gui.fill_round_rect(x=10,y=180,w=220,h=28,r=5,color="#FF6600")
qy=u_gui.draw_text(text="气     压",x=20,y=180,font_size=15, color="#0000FF")
u_gui.fill_round_rect(x=10,y=210,w=220,h=28,r=5,color="#FF6600")
sy=u_gui.draw_text(text="声  音",x=20,y=210,font_size=15, color="#000000")
u_gui.fill_round_rect(x=10,y=240,w=220,h=28,r=5,color="#FF6600")
time=u_gui.draw_text(text="更新时间:",x=20,y=240,font_size=15, color="#FFFFFF")
u_gui.fill_round_rect(x=10,y=270,w=220,h=28,r=5,color="#FF6600")
time1=u_gui.draw_text(text=" ",x=20,y=270,font_size=14, color="#0000FF")
siot.getsubscribe(topic="siot/yuliang")
siot.getsubscribe(topic="siot/turang")
siot.getsubscribe(topic="siot/shidu")
siot.getsubscribe(topic="siot/wendu")
siot.getsubscribe(topic="siot/qiya")
siot.getsubscribe(topic="siot/sy")
siot.publish_save(topic="siot/yuliang", data="hello")
siot.publish_save(topic="siot/turang", data="hello")
siot.publish_save(topic="siot/shidu", data="hello")
siot.publish_save(topic="siot/wendu", data="hello")
siot.publish_save(topic="siot/qiya", data="hello")
siot.publish_save(topic="siot/sy", data="hello")
QianDengShu = 0

while True:
    TuRangShiDu = SCI1.get_value0("Moisture")
    YuLiang = SCI1.get_value0("Rainfall")
    QiYa = (yunque_i2c.get_value("Pressure"))
    ShiDu = (yunque_i2c.get_value("Humi"))
    WenDu = (yunque_i2c.get_value("Temp"))
    GengXinShiJian = (yunque_i2c.get_time_stamp())
    ShengYin = (int(u_audio.sound_level()))
    XianDengShu = (numberMap(ShengYin, 0, 80, 0, 6))
    XianDengShu = (math.floor(XianDengShu))
    print(XianDengShu)
    if (QianDengShu < XianDengShu):
        np1.range_color(0,XianDengShu,0xFF0000)
    elif (QianDengShu > XianDengShu):
        np1.range_color((XianDengShu + 1),QianDengShu,0x000000)
    elif (XianDengShu == 0):
        np1.range_color(0,0,0x000000)
    QianDengShu = XianDengShu
    tr.config(text=(str((str("土壤湿度 :") + str(TuRangShiDu))) + str(SCI1.get_unit1(SCI1.eALL,"Moisture"))))
    yl.config(text=(str((str("雨      量 :") + str(YuLiang))) + str(SCI1.get_unit1(SCI1.eALL,"Rainfall"))))
    wd.config(text=(str("温      度 :") + str((str(WenDu) + str((yunque_i2c.get_unit("Temp")))))))
    sd.config(text=(str("湿      度 :") + str((str(ShiDu) + str((yunque_i2c.get_unit("Humi")))))))
    qy.config(text=(str("气      压 :") + str((str(QiYa) + str((yunque_i2c.get_unit("Pressure")))))))
    time1.config(text=GengXinShiJian)
    sy.config(text=(str("声      音 :") + str((str(ShengYin) + str("dB")))))
    siot.publish_save(topic="siot/turang", data=(str(TuRangShiDu)))
    siot.publish_save(topic="siot/yuliang", data=(str(YuLiang)))
    siot.publish_save(topic="siot/wendu", data=(str(WenDu)))
    siot.publish_save(topic="siot/shidu", data=(str(ShiDu)))
    siot.publish_save(topic="siot/qiya", data=(str(QiYa)))
    siot.publish_save(topic="siot/sy", data=(str(ShengYin)))

微信图片_20230827165859.jpg

评论

user-avatar
  • hacker_

    hacker_2023.08.28

    666

    0