【项目背景】
学校创客空间的打造如火如荼,有一个安静舒适,充满学习氛围的创客环境,可以事半功倍。本项目通过多种室内环境监测设备的联动,试图通过现代化、可视化、自动化的方式为创客空间部署一款属于创客的大屏展示和预警驾驶舱。让科技服务生活。
【项目内容】
为了使用易用性和可扩展性,本项目使用行空板作为物联网服务器,采用MQTT协议进行连接。数据采集器使用SCI采集模块,使用传感器来检测创客空间的空气温湿度、空气质量、噪声强度以及氧气浓度等,并实时摄像头监控创客空间。如果室内灯光较暗,自动灯光照明,如果室内温度过高则使用降温设备降温(备用)。如果氧气浓度过低,进行报警,并联动开窗通风。
【制作过程】
【一、硬件清单】
行空板—————————— ×1
SCI 采集模块—————— ×1
温湿度传感器—————— ×1
空气质量传感器————— ×1
氧气传感器————————×1
环境光传感器—————— ×1
模拟分贝传感器————— ×1
ph2.0-4p———————— 若干
ph2.0-3p———————— 若干
杜邦线(导线)———— 若干
【二、具体步骤】
步骤1 硬件设置
1.行空板siot版本升级
行空板上默认内置的是SIoT V1,而Mind+可视化平台需要使用SIoT V2,因此需要先进行升级。
软件Mind+1.8.0版本及SIoT V2版本升级文件: 腾讯微云下载: 链接: https://share.weiyun.com/6SFhgLQj :
1.下载升级文件:升级行空板SIOTV2.mp
2.打开Mind+,在项目中打开上一步下载的升级行空板SIOTV2.mp文件。
3.行空板连接电脑待启动完成,点击连接远程终端中选择10.1.2.3连接行空板,连接成功之后点击运行,等待行空板重启完成即可。
4.此时打开行空板上的SIOT网页,按Ctrl+F5刷新页面,可以看到界面已经SIOTV2了,登录账号是siot,密码dfrobot。
2.SCI 采集模块设置
因为分贝计是电压模拟传感器,需要设置 SCI 的Port1电压显示值。
使用数字/模拟传感器
将传感器接入左侧的Port1口在初始页摁下“S”键,进入设置菜单光标默认处于“Select SKU”,此时摁下“OK”键,进入传感器选择页面通过“S”和“R”键上移/下移光标至要选择的传感器上摁下“OK”键确认选择,至此选择成功,页面会直接跳转至初始页并在第一行显示出已选择的传感器数据说明1:选中“Analog”选项后会在初始页显示Port1口读取到的电压值,单位为mV说明2:传感器选中后会一直处于选中状态,传感器的数据会一直显示在初始页的第一行,若要取消选中状态请选择“NULL”
3.氧气传感器设置:
将氧气浓度传感器连接到SCI采集模块后显示O3为0,这是默认的臭氧浓度,这是不正确的,需要调节一下地址。
调节方法:找到该传感器背面的拨码开关,A0和A1调成1和0即可。
步骤2 接线设置
SCI采集模块真是神器,我们不用去关心接口如何,只要让行空板(或者其它微控制器)通过IIC接口协议读取最终的生产数据即可。
所以我们的接线方式相对来说就比较简单了。
因为SCI采集模块只有1个 A/D模拟口,所以如果想接入其它相同类型的传感器,可以直接连接行空板的接口,或者另行增加微控制器并联接入;同时,SCI还有两个IIC接口,如果想要多接设备,可使用 IIC 级联装置进行接入,这里不再另行展开。
步骤3 软件处理
为了实现,SCI数据采集模块的控制使用,我们需要在Mind+ 1.8 里首先加载,用户库:
https://gitee.com/liliang9693/ext-sci
这样,我们通过在Mind+1.8 中导入行空板、pinpong库、SCI采集模块,就可以直接获得数据了:
步骤4 完整呈现
AQI等级参考
eCO2/CO2浓度参考
TVOC浓度参考
科学研究显示,当环境温度在18℃到25℃,相对湿度在40%到70%时,人体感觉最舒适;因此我们可以通过,对相应数据的监测传感和控制,来实现想要的功能。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from pinpong.libs.dfrobot_ens160 import Ens160
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from dfrobot_rp2040_sci import *
from pinpong.board import Board
import siot
import time
# 自定义函数
def ChuShiHuamqtt():
siot.getsubscribe(topic="siot/TVOC")
siot.getsubscribe(topic="siot/AQI")
siot.getsubscribe(topic="siot/分贝")
siot.getsubscribe(topic="siot/光照")
siot.getsubscribe(topic="siot/CO2浓度")
siot.getsubscribe(topic="siot/氧含量")
siot.getsubscribe(topic="siot/湿度")
siot.getsubscribe(topic="siot/温度")
def mqttFaBu():
global tvoc
global aqi
global analog
global GuangZhao
global co2
global o2
global humiair
global tempair
siot.publish_save(topic="siot/TVOC", data=tvoc)
siot.publish_save(topic="siot/AQI", data=aqi)
siot.publish_save(topic="siot/分贝", data=analog)
siot.publish_save(topic="siot/光照", data=GuangZhao)
siot.publish_save(topic="siot/CO2浓度", data=co2)
siot.publish_save(topic="siot/氧含量", data=o2)
siot.publish_save(topic="siot/湿度", data=humiair)
siot.publish_save(topic="siot/温度", data=tempair)
def DaYinBianLiang():
global tvoc
global aqi
global analog
global GuangZhao
global co2
global o2
global humiair
global tempair
print("-----------数据显示开始....-------------------------")
print(analog)
print(aqi)
print(co2)
print(humiair)
print(o2)
print(tempair)
print(tvoc)
print(GuangZhao)
print("-----------数据显示结束....-------------------------")
Board().begin()
siot.init(client_id="09890634796143871",server="10.1.2.3",port=1883,user="siot",password="dfrobot")
siot.connect()
siot.loop()
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.")
p_ens160 = Ens160(0x52)
p_ens160.set_pwr_mode(p_ens160.ENS160_STANDARD_MODE)
p_ens160.set_temp_hum(24, 60)
ChuShiHuamqtt()
while True:
o2 = SCI1.get_valueFloat1(SCI1.eALL,"O2")
analog = SCI1.get_valueFloat1(SCI1.eALL,"Analog")
tempair = SCI1.get_valueFloat1(SCI1.eALL,"Temp_Air")
humiair = SCI1.get_valueFloat1(SCI1.eALL,"Humi_Air")
co2 = p_ens160.get_eco2()
tvoc = p_ens160.get_tvoc()
aqi = p_ens160.get_aqi()
GuangZhao = light.read()
analog = (analog / 20)
co2 = (co2 / 200)
mqttFaBu()
DaYinBianLiang()
time.sleep(1)
【作品说明】
有几点需要说明下,
1. CO2浓度原来的是数值是从0--21500。为了能使数据更具有可视化能力这里做了 除 200 处理,映射为百分比,方便查看。
2. 空气质量传感器返回的是 1~5数值,为了在仪表盘里更直观,这里临时画了张图放在最上面,比较尴尬的是仪表盘的颜色组不能自定义。
3. 分贝传感器返回的是电压值,所以这里要做 乘以 50 处理,转换为分贝数值。
【总结】
1.本项目在外观上面没有做过多修饰,本来一些数据显示完全可以使用python-opencv直接生成图片显示,奈何时间有限,调试程序太耗时。个人觉得 这个可视化面板在美化方面还是要再改进。
2. 本项目只是PoC,作为想法验证。所以没有做实物或者场景模拟,可应用性可能稍微差点,主要也是动手能力不够。。。。
3. 本项目没有做反馈和控制,再接其它传感器或者功能件怕饼摊得太大不好收场,所以就没有处理了。
附件
hacker_2023.08.17
666
hacker_2023.07.26
666
hacker_2023.07.16
666