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

#决赛#校园公厕环境监测系统 简单

头像 tongtong20336 2023.08.14 1747 14

一、项目背景

 

        思考一:

        暑假自驾旅行,路经几个服务区发现,现在服务区都有服务区智能公厕系统(如下图),如果学校厕所也有这样的大屏显示厕所环境监测信息,不仅能让中小学生认识到环境监测的重要性,更能提高中小学生的公共卫生意识。

        除此之外,现如今中学生在厕所偷偷抽烟,加上厕所不能安装监控,所以无法对抽烟学生不能很好地监管,环境监测系统就可以监测厕所里是否有人抽烟,及时通报。

 

      思考二:

      女性生理期有不确定性,在特殊的生理情况下,难免会遇到窘迫的时候。如果青春期女生,在校遇到生理期,窘迫尴尬之余,又能以怎样的方式寻求帮助呢?如果有一个按钮可以求助,是否可以解决女生的烦恼。

       除此之外,厕所没有监控,所以是校园霸凌频发地,被欺凌者不能及时求救,悲剧时常发生。如果有一个按钮可以求助,是否可以及时阻止校园霸凌。

      于是,我想用行空板+物联网的方式,看能不能解决这个难题。

         

二、方案设计

 

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

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

3、项目共设计了大屏数据监测系统、A行空板用来显示公厕各项数据,A行空板上设计了两个按钮,一个是女生特殊时期(生理期)求助按钮,另一个是被霸凌的求助按钮。

         A行空板如果检测到空气质量指数超标,B行空板收到后,就反馈“疑似有人吸烟”等信息;如果有人触发了A行空板上的按钮,B行空板板收到后,就反馈”特殊时期求助“或者”有霸凌事件“。

 

 

未命名文件-导出.png

三、制作过程

 

(一)数据版面大屏设计

 

      利用Mind+的可视化面板,设计“校园公厕环境监测系统”大屏。

      大屏内容包括:时钟、室内温度、室内湿度、空气质量指数、eCO2指数、TVOC指数、温馨提示等。

微信截图_20230822145629.png

(二)硬件连接

 

      本项目选用了行空板、扩展板、SCI 采集模块、SHT31数字温湿度传感器、ENS160空气质量传感器、PM2.5空气质量传感器、无源音箱来进行硬件的连接,以下是硬件连接示意图:

                                                                 

                                                                A行空板硬件连接:

图片2.png

                                                                   

                                                                     B行空板硬件连接:

图片3.png

 

(三)SIot设计

 

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

image.png

(四)行空板版面设计

 

 

              A行空板界面                                    B行空板界面(1)                             B行空板界面(2)  

 

IMG_20230822_160247.jpg    IMG_20230822_155829.jpg       IMG_20230822_160005.jpg                                                                          

 

(五)程序代码

 

A行空板(用做服务器主板)

A行空板.png

 

          图片1.png             图片1.png             图片1.png              图片1.png             图片1.png          图片1.png         图片1.png        图片1.png

 

B行空板(接收信息)

 

B行空板.png
 

 

(六)设计过程中发现的问题

        问题一:两块行空板无法相互通讯

        一开始是用start.SIot来进行物联网互联,后来发现两块行空板不能共享一个服务器地址

image.png

 

image.png

        

         解决方法:

            网上找到一个帖子,提到了解决方法,就是A行空板做服务器,B行空板做智能终端,

            A行空板和B行空板要在同一个网络下,可以各自先登录自己的IP地址。

           但是,在SIot服务器地址设置时,要用同一个,如果是以A行空板做服务器,那么B行空板的SIot服务器地址也要和A行空板一致,这样才能实现两块行空板相互之间的通讯。

 

image.png
图片4.png

      image.png            image.png

 

 

      问题二:行空板不能离线运行程序

       本来想用自动生成的代码直接放到行空板离线运行,结果出现各种报错。

       解决方法:

        在项目中的文件,新建一个py文件,将自动生成的代码,直接拷贝到新建的py文件里保存,然后运行一次,再将这个文件复制粘贴到行空板中的文件里面。

 

图片5.png

       

 

七)总结

      

       本项目利用各种监测室内环境指数的传感器进行了设计及制作,最终实现了预期设想。在上一轮比赛中,没能实现按钮回调,这次实现了。此次项目在实际应用中可能还会出现各种问题,以后将项目再次完善,越来越好!

步骤1 选题

步骤2 方案设计

步骤3 数据版面大屏设计

步骤4 硬件连接

步骤5 SIot设计

步骤6 行空板版面设计

步骤7 程序设计

材料清单

  • 行空板 X2
  • SCI 采集模块 X1 链接
  • SHT31数字温湿度传感器 X1 链接
  • PM2.5空气质量传感器 X1 链接
  • ENS160 空气质量传感器 X 链接
  • 无源音箱 X
代码
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.libs.dfrobot_sht31 import SHT31
from dfrobot_rp2040_sci import *
from pinpong.board import Board
from unihiker import GUI
import siot
import time

# 事件回调函数
def button_click1():
    siot.publish_save(topic="siot/暖心求助", data="特殊时期求助")
def button_click2():
    siot.publish_save(topic="siot/暖心求助", data="有人霸凌")


Board().begin()
siot.init(client_id="5218723707353439",server="192.168.2.142",port=1883,user="siot",password="dfrobot")
u_gui=GUI()
siot.connect()
siot.loop()
p_sht31 = SHT31(0x45)
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/室内温度")
siot.getsubscribe(topic="siot/颗粒浓度")
siot.getsubscribe(topic="siot/ECO2")
siot.getsubscribe(topic="siot/TVOC")
siot.getsubscribe(topic="siot/空气质量指数")
siot.getsubscribe(topic="siot/暖心求助")
bg=u_gui.draw_image(image="202308171.png",x=0,y=0)
u_gui.fill_round_rect(x=15,y=10,w=210,h=55,r=5,color="#FFCC00")
u_gui.draw_text(text="校园公厕",x=80,y=12,font_size=15, color="#000000")
u_gui.draw_text(text="环境监测系统",x=55,y=35,font_size=15, color="#000000")
u_gui.fill_round_rect(x=15,y=75,w=210,h=25,r=5,color="#FF6600")
wendu=u_gui.draw_text(text=(str("温度") + str(p_sht31.temp_c())),x=20,y=75,font_size=12, color="#333333")
u_gui.fill_round_rect(x=15,y=110,w=210,h=25,r=5,color="#FF6600")
shidu=u_gui.draw_text(text=(str("湿度") + str(p_sht31.humidity())),x=20,y=110,font_size=12, color="#FFFFFF")
u_gui.fill_round_rect(x=15,y=145,w=210,h=25,r=5,color="#FF6600")
kelinongdu =u_gui.draw_text(text=(str((str("PM2.5") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort2,"PM2.5")) + str(SCI1.get_unit1(SCI1.ePort2,"PM2.5"))))),x=20,y=145,font_size=12, color="#333333")
u_gui.fill_round_rect(x=15,y=180,w=210,h=25,r=5,color="#FF6600")
eCO2=u_gui.draw_text(text=(str((str("eCO2") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort2,"ECO2")) + str(SCI1.get_unit1(SCI1.ePort2,"ECO2"))))),x=20,y=180,font_size=12, color="#FFFFFF")
u_gui.fill_round_rect(x=15,y=215,w=210,h=25,r=5,color="#FF6600")
TVOC=u_gui.draw_text(text=(str((str("TVOC") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort3,"TVOC")) + str(SCI1.get_unit1(SCI1.ePort3,"TVOC"))))),x=20,y=215,font_size=12, color="#333333")
u_gui.fill_round_rect(x=15,y=250,w=210,h=25,r=5,color="#FF6600")
kongqizhiiang=u_gui.draw_text(text=(str("空气质量指数") + str((str(SCI1.get_value1(SCI1.ePort3,"AQI")) + str(SCI1.get_unit1(SCI1.ePort3,"AQI"))))),x=20,y=250,font_size=12, color="#333333")
button1=u_gui.add_button(text="特殊时期",x=20,y=280,w=70,h=30,onclick=button_click1)
button2=u_gui.add_button(text="其他求助",x=80,y=280,w=70,h=30,onclick=button_click1)

while True:
    wendu.config(text=(str("温度") + str(p_sht31.temp_c())))
    siot.publish_save(topic="siot/室内温度", data=p_sht31.temp_c())
    shidu.config(text=(str("湿度") + str(p_sht31.humidity())))
    siot.publish_save(topic="siot/室内湿度", data=p_sht31.humidity())
    kelinongdu .config(text=(str((str("PM2.5") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort2,"PM2.5")) + str(SCI1.get_unit1(SCI1.ePort2,"PM2.5"))))))
    siot.publish_save(topic="siot/颗粒浓度", data=SCI1.get_value1(SCI1.ePort2,"PM2.5"))
    eCO2.config(text=(str((str("eCO2") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort3,"ECO2")) + str(SCI1.get_unit1(SCI1.ePort3,"ECO2"))))))
    siot.publish_save(topic="siot/ECO2", data=SCI1.get_value1(SCI1.ePort3,"ECO2"))
    TVOC.config(text=(str((str("TVOC") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort3,"TVOC")) + str(SCI1.get_unit1(SCI1.ePort3,"TVOC"))))))
    siot.publish_save(topic="siot/TVOC", data=SCI1.get_value1(SCI1.ePort3,"TVOC"))
    kongqizhiiang.config(text=(str("空气质量指数") + str((str(SCI1.get_value1(SCI1.ePort3,"AQI")) + str(SCI1.get_unit1(SCI1.ePort3,"AQI"))))))
    siot.publish_save(topic="siot/空气质量指数", data=(str("AQI") + str(SCI1.get_value1(SCI1.ePort3,"AQI"))))
    time.sleep(5)
代码
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import Audio
from unihiker import GUI
import siot

# 事件回调函数
def on_message_callback(client, userdata, msg):
    if ((msg.payload.decode() == (str("3"))) or ((msg.payload.decode() == (str("4"))) or (msg.payload.decode() == (str("5"))))):
        u_gui.fill_round_rect(x=15,y=100,w=210,h=70,r=5,color="#FF6600")
        u_gui.draw_text(text="教学楼二楼(女厕)",x=30,y=105,font_size=15, color="#000000")
        u_gui.draw_text(text="疑似有人抽烟",x=50,y=135,font_size=15, color="#000000")
        u_audio.play("3.mp3")
    if (msg.payload.decode() == (str("特殊时期求助"))):
        u_gui.fill_round_rect(x=15,y=200,w=210,h=70,r=5,color="#FF6600")
        u_gui.draw_text(text="教学楼二楼(女厕)",x=30,y=205,font_size=15, color="#000000")
        u_gui.draw_text(text="特殊时期求助",x=50,y=235,font_size=15, color="#000000")
        u_audio.play("1.mp3")
    if (msg.payload.decode() == (str("有人霸凌"))):
        u_gui.fill_round_rect(x=15,y=200,w=210,h=70,r=5,color="#FF6600")
        u_gui.draw_text(text="教学楼二楼(女厕)",x=30,y=205,font_size=15, color="#000000")
        u_gui.draw_text(text="有人霸凌",x=50,y=235,font_size=15, color="#000000")
        u_audio.play("2.mp3")


siot.init(client_id="03385741237950879",server="192.168.2.142",port=1883,user="siot",password="dfrobot")
u_gui=GUI()
u_audio = Audio()
siot.connect()
siot.loop()
siot.set_callback(on_message_callback)
siot.getsubscribe(topic="siot/暖心求助")
siot.getsubscribe(topic="siot/空气质量指数")
bg=u_gui.draw_image(image="20230817.png",x=0,y=0)
u_gui.fill_round_rect(x=15,y=10,w=210,h=65,r=5,color="#FFCC00")
u_gui.draw_text(text="校园公厕",x=70,y=12,font_size=20, color="#000000")
u_gui.draw_text(text="暖心服务",x=70,y=40,font_size=20, color="#000000")

while True:
    pass

评论

user-avatar
  • 罗罗罗

    罗罗罗2024.04.13

    666

    1
    • tongtong20336

      tongtong203362024.04.14

      谢谢~

  • undefined6

    undefined62024.03.21

    可以借用一下视频吗

    1
    • tongtong20336

      tongtong203362024.03.25

      怎么借用?

  • JOVI

    JOVI2023.11.01

    学习学习

    1
    • tongtong20336

      tongtong203362023.11.02

      谢谢~

  • 腿毛利小五郎

    腿毛利小五郎2023.10.25

    学习666

    2
    • tongtong20336

      tongtong203362023.10.27

      谢谢~

    • tongtong20336

      tongtong203362023.11.02

      谢谢~

  • 家里略

    家里略2023.10.18

    很棒!学习一下

    0
    • qzs1982

      qzs19822023.08.27

      给你点个赞!

      0
      • 春秋大仙

        春秋大仙2023.08.24

        666666

        0
        • hacker_

          hacker_2023.08.23

          给你点个赞!

          0
          • 匿名

            匿名

            该评论已删除

            1
            • _深蓝_

              _深蓝_2023.09.06

              666