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

#新物联网挑战二#智能工作室环境系统 简单

头像 小含糊online 2023.07.11 1046 15

项目介绍:

我参加的是主题二:健康学习空间探究,得到的参赛硬件包中包含有以下物料:空气温湿度传感器、空气质量传感器、分贝传感器、环境光传感器、氧气传感器、行空板、SCI采集模块。加上自己之前购置过的一些传感器,针对本主题,进行了一个简单的设计与制作。整个项目大致思路是:使用手头上的传感器,打造一间健康、科学、有趣的工作室。我和媳妇儿把小卧室改成了一间书房,每天加班或者周末打游戏都会在这里,有时候一忙起来,就会忘记喝水、起身活动、休息眼睛,我俩身体也不是很好,房间如果太热、太干燥鼻子就会很难受,大家应该多少也会有这样的烦恼吧?下面先上两张图,然后详细讲一讲制作过程。

61cf2cd59c8af3e4eef4c406d3f78c4.jpg

图1 智能工作室环境系统V1.0

封面.png

图2  智能工作室环境系统可视化界面

材料清单

  • 行空板 X2
  • Arduino主控板 X1
  • 扩展板 X2
  • 二哈识图 X1
  • SCI数据采集模块 X1
  • 模拟分贝计 X1
  • 氧气浓度传感器 X
  • 光线传感器 X
  • 继电器 X2
  • 温湿度传感器 X1
  • 空气质量传感器 X
  • LED X2
  • 扩音器 X1
  • ws2812灯带 X2
  • 蓝牙音箱 X1
  • 柔性薄膜压力传感器 X2
  • USB加湿器 X1
  • USB风扇 X1
  • OBLOQ物联网模块 X1

步骤1 首先理清楚思路,根据手头上的硬件物料,设计功能,绘制思维导图。

物联网创新挑战赛.png

步骤2 硬件测试

硬件测试-传感器

首先是对各种传感器进行测试,利用print串口输出,与网站的说明文档进行比对,检查传感器是否都可以正常工作。这里有几个小地方需要注意:

1.   收到的几个传感器中,模拟分贝计、光线传感器、氧气浓度传感器由于pingpong库中暂时没有,所以需要和SCI数据采集模块绑定,才能够正常接入程序;

2.关于模拟分贝计,直接插在SCI上面是无法读取分贝值的,需要在SET里面进行设置,具体操作如下SET-SELECT SKU-SEN0232 DECIBEL

3.另外还是关于模拟分贝计,我是用手机(iPhone14pro)上的分贝测试软件与分贝计同时检测,发现得到的结果总是相差15分贝左右……

83ac7ace449427833b1523daccf269c.jpg

4.接着就是常规的方法测试压力薄膜传感器、灯带、扩音器、风扇、加湿器、而哈摄像头等……

硬件测试-改装

WPS拼图0.png

这里主要需要焊接以下几个地方:

1.  继电器的电源线

2.柔性薄膜压力传感器需要加一个上拉电阻来确保信号的稳定

硬件测试-蓝牙音箱

行空板可以对音频进行录放,但是有一个前提条件——必须外接音箱。有两种解决办法——usb音箱或者蓝牙音箱。之前考虑后面要用usb口接摄像头,所以选择使用蓝牙音箱进行音频的播放,但是这种方法也是比较麻烦的,需要进入cmd中获取行空板的权限,然后在一堆设备中找到蓝牙音箱的名字并且进行绑定,这里不再赘述,参考资料如下:

【回忆杀】王心凌——爱你 音乐播放器 作者:Ski

非常感谢Ski前辈的帖子!

image.png

步骤3 编写程序

程序编写-Arduino主控板部分

核心器材:柔性薄膜压力传感器、Arduino主控板、OBLOQ物联网模块

image.png

这里说一说柔性薄膜压力传感器

image.png

再说一下OBLOP物联网模块

因为Arduino没有WiFi,所以需要使用这个模块进行网络通信,并且可以根据需要,选择不同的服务器,不过遗憾的是,最多只能绑定5个Topic,如下图所示

image.png

原理:通过柔性薄膜压力传感器检测座位是否有人坐下,根据国家体育总局的一篇文章《世卫组织发布《关于身体活动和久坐行为指南》 只要动起来都有益健康》,我设定每过30min提醒一次起身活动(为演示方便,设置为10秒),活动时间为一首轻音乐的时间,并且会播放轻音乐。如下图所示:

image.png

程序:

Arduino部分.png

程序编写-行空板B部分

核心器材:行空板、二哈识图摄像头

image.png

为什么不从行空板A部分开说呢?因为行空板B部分是所有部分的核心!

先看看二哈识图摄像头,这是一款很棒的产品:

image.png

原理:

image.png

这里只录入了我自己的人脸信息,不过大家可以看看讲解视频,这一部分配合语音说明,还是挺好玩的!

程序:

行空板B部分.png

程序编写-行空板A部分

核心器材:行空板、各种传感器、继电器、USB风扇、USB加湿器、SCI采集模块

image.png

重点说一下SCI采集模块:

image.png

连接的是IIC口,可以获取2525种传感器模块的信息,注意是包括电压转换之后的实际物理量,而且还有对应的单位,配合移动电源,可以实时快速方便的获取当前环境的参数,并显示在屏幕上,真的是很赞的一款产品,希望后续多支持一些传感器,再来一个wifi传输功能就更棒啦!

原理:通过接收SIot的信息,实现风扇、加湿器、灯光的自动控制,通过SIot将传感器获取的环境参数分享给其他主控板,实现联动功能。

程序:

行空板A部分.png

步骤4 组合搭建与美化

1. 先把硬件统统连起来

image.png

2. 加外包装

之前想着使用3D打印做,但是3D打印机坏了,而且3D打印需要的时间也比较久,又自己特别忙(加班工作+二手房装修改造),所以决定使用DF快递的盒子,纸壳的话,DIY也真的很方便。

image.png

正面

image.png

侧面

image.png

里面

这里一定注意:布线一定要提前规划好,反正我这边连完测试发现出问题了,但是线又不好弄,最后索性全部拆掉重新布线,最终如下图:

image.png

里面

image.png

侧面

image.png

前面

步骤5 SIot与可视化面板

SIot平台

首先我们需要明白,SIot就是一个物流集散地,可以存储各种需要收发信息,行空板自带WIFI,连接上SIot之后就是快递员,进行信息的收发。前提条件是:在同一网络环境下!

这里牵扯两个步骤:

1. 行空板使用USB数据线连接电脑,登陆10.1.2.3之后,先进行一次网络设置,这样之后就可以扔掉数据线了!

image.png

2. 需要在SIot平台上设置对应的Topic(在应用开关-SIot中选择打开页面)

image.png

之后就可以点击“新建主题”创建不同的Topic用来收发不同的数据啦!

image.png

可视化面板

可视化界面可以将SIot平台接收到的数据以文字、图标等方式进行直观的展示,并且还可以使用各种文字、开关、按钮等方式发送信息,是非常棒的一个功能,虽然目前还存在图标指针不够灵活自由、模块缩放自由度不够、层级关系设置、分辨率设置等问题,但是已经可以做出比较好看的界面了。

这是可视化界面的样子:

image.png

这次挑战赛,我也是最后时间节点前才开始制作可视化面板(太忙太忙了),虽然不是很完美,但我真的尽力啦~

封面.png

总结

这次挑战赛最终成品和我想象中还是有一定差别的,给大家看看我之前的设计:

image.png

这两部分需要使用opencv,程序部分需要一直循环执行,会和其他功能有冲突,在下才疏学浅,没能找到完美解决办法,所以就腰斩了……

总的来说,利用这一套系统,我发现自己家的书房算是能学习,但是还是应该多通风的水平,需要注意的地方①噪音②总挥发性有机化合物,尤其是第二点,还是挺害怕的,之前都没什么感觉,这次借着实验器材测试才发现,这里把搜到的资料分享给大家,如下图:

circle_screenshot_1_TVOC_百度百科.png

说一下收获:

1. 能够进入挑战赛第二轮,非常开心,能和全国那么多优秀的老师们同台竞技,让我觉得有一种亲切的感觉,同时也见识了各种各样厉害的作品,大开眼界;

2. 在项目创作过程中,时间其实很紧张,因为临近期末开始的,学校工作是最忙的时候,直到7月9号,我才忙完学校工作,期间只能下班回家一边学习一边创作,说实话,很累,但是也发自内心的开心,因为这段时间是很有意义的;

3. 再就是在创作的过程中,大家都能发现一些产品软件上的小问题,DF的技术们也都能及时解释或者解决这些小问题,这是一个非常愉快和有意义的过程;

4. 白嫖了RMB1500+的创客硬件,血赚!

说完收获,分享一下自己记的一些笔记

(1) 使用压力薄膜传感器时,必须把底部垫起来才能正常读取压力值

image.png

木板+厚胶带+压力薄膜+木板+胶带

image.png

厚胶带+压力薄膜传感器

(2) 起身活动时可以播放轻音乐

(3) “读取模拟引脚”获得的是字符串

image.png

(4) 使用外接扩音器需要重新定向引脚

(5) 喝水提醒不使用音乐(AI合成)是为了避免与久坐提醒相冲突,使用扩音器是为了让音量大一些

(6) 文件名后缀也要注意大小写

image.png

(8) 只有需要接收siot的信息才必须订阅,否则可以不订阅!

因为论坛对附件大小的限制,我没法上传行空板B部分程序,现在把它放到蓝奏云,供大家下载查看。

 

在最后再说一下改进设想:

1.加入坐姿矫正系统,这个需要好好研究一下OpenCV;

2.找到可以多线程并行不会报错的方法,任重道远……

3.向智能门锁一样,加入管理员和普通用户,分别赋予不同权限;

4.在可视化界面将所有用户的自拍展示,并且在线的用户是彩色,离线的是黑白;

5.加入喝水量统计与分析;

6.加入学习时长统计与分析;

 

以上是我这次挑战赛的全部内容,还请大家多提宝贵意见!不吝赐教!

代码
#行空板A部分
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.libs.dfrobot_ens160 import Ens160
from pinpong.libs.dfrobot_sht31 import SHT31
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from pinpong.board import NeoPixel
from dfrobot_rp2040_sci import *
from pinpong.board import Board
import siot
import time

# 自定义函数
def YangQiNongDu():
    if (SCI1.get_valueFloat0("O2") >= 20.9):
        siot.publish_save(topic="siot/氧气浓度", data="氧气浓度合适!")
    else:
        siot.publish_save(topic="siot/氧气浓度", data="氧气过低,请注意!")
def GuangXian():
    if (SCI1.get_valueFloat0("Light") < 50):
        p_p22_out=Pin(Pin.P22, Pin.OUT)
        p_p22_out.write_digital(1)
        siot.publish_save(topic="siot/光线", data="房间昏暗,已为您开灯!")
    else:
        p_p22_out=Pin(Pin.P22, Pin.OUT)
        p_p22_out.write_digital(0)
        siot.publish_save(topic="siot/光线", data="光线充足,适宜学习!")
def ShengYin():
    if (SCI1.get_valueFloat0("Sound") < 60):
        siot.publish_save(topic="siot/声音", data="安静,适宜学习!")
    else:
        siot.publish_save(topic="siot/声音", data="注意!轻声细语!")
def KongQiZhiLiangZhiShu():
    if (p_ens160.get_aqi() == 1):
        siot.publish_save(topic="siot/空气质量指数", data=(str((str("空气质量指数:") + str("1,"))) + str("环境非常好哦!")))
    elif (p_ens160.get_aqi() == 2):
        siot.publish_save(topic="siot/空气质量指数", data=(str((str("空气质量指数:") + str("2,"))) + str("请保持充分通风!")))
    elif (p_ens160.get_aqi() == 3):
        siot.publish_save(topic="siot/空气质量指数", data=(str((str("空气质量指数:") + str("3,"))) + str("请贾强通风,空气不太好喔!")))
    elif (p_ens160.get_aqi() == 4):
        siot.publish_save(topic="siot/空气质量指数", data=(str((str("空气质量指数:") + str("4,"))) + str("空气质量很差,快解决污染源!")))
    else:
        siot.publish_save(topic="siot/空气质量指数", data=(str((str("空气质量指数:") + str("5,"))) + str("空气质量极差,请离开!!")))
def TVOCNongDu():
    if (p_ens160.get_tvoc() < 50):
        siot.publish_save(topic="siot/TVOC浓度", data="正常")
    elif ((50 < p_ens160.get_tvoc()) and (p_ens160.get_eco2() <= 750)):
        siot.publish_save(topic="siot/TVOC浓度", data="可能急躁不安和不舒服")
    elif ((750 < p_ens160.get_tvoc()) and (p_ens160.get_eco2() <= 6000)):
        siot.publish_save(topic="siot/TVOC浓度", data="可能急躁不安和头疼")
    elif (6000 < p_ens160.get_tvoc()):
        siot.publish_save(topic="siot/TVOC浓度", data="产生头疼等神经问题")
def CO2NongDu():
    if ((400 < p_ens160.get_eco2()) and (p_ens160.get_eco2() <= 600)):
        siot.publish_save(topic="siot/CO2浓度", data="CO2浓度合适,很棒喔!")
    elif ((600 < p_ens160.get_eco2()) and (p_ens160.get_eco2() <= 800)):
        siot.publish_save(topic="siot/CO2浓度", data="CO2浓度合适,很棒喔!")
    elif ((800 < p_ens160.get_eco2()) and (p_ens160.get_eco2() <= 1000)):
        siot.publish_save(topic="siot/CO2浓度", data="CO2浓度偏高,请适当通风!")
    elif ((1000 < p_ens160.get_eco2()) and (p_ens160.get_eco2() <= 1500)):
        siot.publish_save(topic="siot/CO2浓度", data="CO2浓度过高,请通风!")
    else:
        siot.publish_save(topic="siot/CO2浓度", data="CO2浓度极高,请及时通风!!")

# 事件回调函数
def on_message_callback(client, userdata, msg):
    global QiDong
    if (msg.topic == "siot/启动"):
        if (msg.payload.decode() == "启动"):
            QiDong = 1
    if (msg.topic == "siot/通知"):
        np1.brightness(255)
        buzzer.play(buzzer.CHASE,buzzer.Once)
        for index in range(10):
            time.sleep(0.05)
            np1.brightness(255)
            time.sleep(0.05)
            np1.brightness(0)
    if (msg.topic == "siot/警报"):
        if (msg.payload.decode() == "警报"):
            np1.brightness(255)
            np1.range_color(0,59,0xFF0000)
            for index in range(10):
                np1.brightness(255)
                buzzer.pitch(131,1)
                time.sleep(0.05)
                np1.brightness(0)
                time.sleep(0.05)
        if (msg.payload.decode() == "OFF"):
            np1.rainbow(0,59,1,360)
            np1.brightness(0)


Board().begin()
siot.init(client_id="940759934624213",server="192.168.2.18",port=1883,user="siot",password="dfrobot")
siot.set_callback(on_message_callback)
siot.connect()
siot.loop()
np1 = NeoPixel(Pin((Pin.P8)),60)
np1.brightness(0)
np1.rainbow(0,59,1,360)
siot.getsubscribe(topic="siot/启动")
siot.getsubscribe(topic="siot/通知")
siot.getsubscribe(topic="siot/警报")
buzzer.redirect(Pin.P0)
p_sht31 = SHT31(0x44)
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_temp_hum(p_sht31.temp_c(), p_sht31.humidity())
p_ens160.set_pwr_mode(p_ens160.ENS160_STANDARD_MODE)
QiDong = 0
print("初始化成功,等待启动系统……")
while not ((QiDong == 1)):
    pass
print("启动系统……")
p_p22_out=Pin(Pin.P22, Pin.OUT)
p_p22_out.write_digital(0)
p_p12_out=Pin(Pin.P12, Pin.OUT)
p_p12_out.write_digital(1)
p_p23_out=Pin(Pin.P23, Pin.OUT)
p_p23_out.write_digital(0)

while True:
    YangQiNongDu()
    GuangXian()
    ShengYin()
    CO2NongDu()
    TVOCNongDu()
    KongQiZhiLiangZhiShu()
    siot.publish_save(topic="siot/温度", data=p_sht31.temp_c())
    siot.publish_save(topic="siot/湿度", data=p_sht31.humidity())
    siot.publish_save(topic="siot/温湿度", data=(str((str(p_sht31.temp_c()) + str(","))) + str(p_sht31.humidity())))
    if (p_sht31.temp_c() >= 29):
        p_p12_out=Pin(Pin.P12, Pin.OUT)
        p_p12_out.write_digital(0)
    else:
        p_p12_out=Pin(Pin.P12, Pin.OUT)
        p_p12_out.write_digital(1)
    if (p_sht31.humidity() <= 60):
        p_p23_out=Pin(Pin.P23, Pin.OUT)
        p_p23_out.write_digital(1)
    else:
        p_p23_out=Pin(Pin.P23, Pin.OUT)
        p_p23_out.write_digital(0)
代码
#行空板B部分
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.libs.dfrobot_huskylens import Parameter
from pinpong.libs.dfrobot_huskylens import Huskylens
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from pinpong.board import NeoPixel
from pinpong.board import Board
from unihiker import Audio
from unihiker import GUI
import time
import siot

# 事件回调函数
def on_message_callback(client, userdata, msg):
    if (msg.topic == "siot/压力座椅"):
        if (msg.payload.decode() == "起身休息"):
            u_audio.play("起身活动.mp3")
            u_audio.play("Letter From Heaven.mp3")
            u_audio.play("去学习.mp3")
            siot.publish_save(topic="siot/压力座椅", data="休息结束")
    if (msg.topic == "siot/通知"):
        背景=u_gui.draw_image(image="背景_彩色.jpg",x=0,y=0)
        文字_初始化3=u_gui.draw_text(text="系统启动成功!",x=0,y=50,font_size=14, color="#FF0000")
        文字_初始化1=u_gui.draw_text(text="欢迎使用",x=0,y=0,font_size=14, color="#FFFFFF")
        文字_初始化2=u_gui.draw_text(text="智能工作室环境系统v1.0",x=0,y=25,font_size=14, color="#FFFFFF")
        文字_初始化4=u_gui.draw_text(text="智能工作室环境系统启动!",x=0,y=75,font_size=14, color="#FF0000")
        文字_初始化5=u_gui.draw_text(text="祝你学有所获!",x=0,y=100,font_size=14, color="#FF6666")
        文字_初始化6=u_gui.draw_text(text=(str("通知:") + str(msg.payload.decode())),x=0,y=125,font_size=14, color="#FFFFFF")


u_gui=GUI()
siot.init(client_id="36625455661329553",server="192.168.2.18",port=1883,user="siot",password="dfrobot")
Board().begin()
u_audio = Audio()
siot.connect()
siot.loop()
p_p21_analog=Pin(Pin.P21, Pin.ANALOG)
p_p2_analog=Pin(Pin.P2, Pin.ANALOG)
siot.set_callback(on_message_callback)
背景=u_gui.draw_image(image="背景_黑白.png",x=0,y=0)
文字_初始化1=u_gui.draw_text(text="欢迎使用",x=0,y=0,font_size=14, color="#FFFFFF")
文字_初始化2=u_gui.draw_text(text="智能工作室环境系统v1.0",x=0,y=25,font_size=14, color="#FFFFFF")
文字_初始化3=u_gui.draw_text(text="初始化中……",x=0,y=50,font_size=14, color="#FF0000")
print("初始化MQTT……")
print("连接网络……")
print("网络连接成功!")
siot.getsubscribe(topic="siot/压力座椅")
siot.getsubscribe(topic="siot/通知")
siot.publish_save(topic="siot/范范老师状态", data="离开ing")
print("初始化灯带……")
np1 = NeoPixel(Pin((Pin.P8)),60)
np1.brightness(0)
文字_初始化3.config(text="系统说明……")
print("系统说明……")
u_audio.play("初始化.mp3")
p_huskylens = Huskylens()
print("Hello World")
p_huskylens.command_request_algorthim("ALGORITHM_FACE_RECOGNITION")
time.sleep(0.5)
print("1")
文字_初始化3.config(text="开始扫脸授权……")
buzzer.play(buzzer.JUMP_UP,buzzer.Once)
print("开始扫脸授权……")
while not (p_huskylens.is_appear_direct("blocks")):
    pass
time.sleep(0.5)
while not ((p_huskylens.read_block_center_parameter_direct(Parameter.id, "blocks") == 1)):
    p_huskylens.command_request()
    文字_初始化3.config(text="授权失败,重新尝试……")
    u_audio.play("授权失败.mp3")
    print("授权失败,重新尝试……")
文字_初始化3.config(text="授权成功,系统即将启动!")
print("授权成功,系统即将启动!")
siot.publish_save(topic="siot/范范老师状态", data="学习ing")
u_audio.play("喝水说明.mp3")
np1.brightness(255)
np1.rainbow(0,59,1,360)
文字_初始化3.config(text="等待放置水杯……")
print("等待放置水杯……")
while not ((p_p21_analog.read_analog() < 2800)):
    pass
文字_初始化3.config(text="已放置水杯,正在正式启动系统……")
print("已放置水杯,正在正式启动系统……")
siot.publish_save(topic="siot/启动", data="启动")
背景=u_gui.draw_image(image="背景_彩色.jpg",x=0,y=0)
文字_初始化3=u_gui.draw_text(text="系统启动成功!",x=0,y=50,font_size=14, color="#FF0000")
文字_初始化1=u_gui.draw_text(text="欢迎使用",x=0,y=0,font_size=14, color="#FFFFFF")
文字_初始化2=u_gui.draw_text(text="智能工作室环境系统v1.0",x=0,y=25,font_size=14, color="#FFFFFF")
文字_初始化4=u_gui.draw_text(text="智能工作室环境系统启动!",x=0,y=75,font_size=14, color="#FF0000")
文字_初始化5=u_gui.draw_text(text="祝你学有所获!",x=0,y=100,font_size=14, color="#FF6666")
print("系统启动成功!智能工作室环境系统启动,祝你学有所获!")

while True:
    print("等待放置水杯……")
    while not ((p_p21_analog.read_analog() < 2800)):
        pass
    buzzer.play(buzzer.POWER_UP,buzzer.Once)
    np1.brightness(0)
    HeShuiDaoJiShi = 13
    while not ((HeShuiDaoJiShi <= 0)):
        print((str("当前水杯参数:") + str(p_p21_analog.read_analog())))
        print((str((str("喝水还剩:") + str(HeShuiDaoJiShi))) + str("秒")))
        time.sleep(1)
        HeShuiDaoJiShi = (HeShuiDaoJiShi - 1)
        if (not (p_p21_analog.read_analog() < 2800)):
            time.sleep(0.05)
            if (not (p_p21_analog.read_analog() < 2800)):
                print("提前补水,不错不错!")
                np1.brightness(255)
                np1.rainbow(0,59,1,360)
                while not ((p_p21_analog.read_analog() < 2800)):
                    pass
                HeShuiDaoJiShi = 13
        else:
            np1.brightness(0)
    print("补水时间到!")
    np1.brightness(255)
    np1.range_color(0,59,0xFF0000)
    buzzer.play(buzzer.POWER_DOWN,buzzer.Once)
    while not ((not (p_p2_analog.read_analog() < 2800))):
        pass
    np1.rainbow(0,59,1,360)
代码
//Arduino部分
/*!
 * MindPlus
 * uno
 *
 */
#include <UNO_Obloq.h>
#include <SoftwareSerial.h>

// 动态变量
volatile float mind_n_sitting_countdown, mind_n_eyes;
// 函数声明
void DF_JiuZuoTiXing();
// 静态常量
const String topics[5] = {"siot/启动","siot/压力座椅","","",""};
// 创建对象
UNO_Obloq      olq;
SoftwareSerial softSerial(2, 3);


// 主程序开始
void setup() {
	Serial.begin(9600);
	softSerial.begin(9600);
  olq.startConnect(&softSerial, "xiaohanhu", "xhh901129", "siot", "dfrobot", topics, "192.168.2.18", 1883);
	Serial.println("OBLOQ初始化完毕");
	mind_n_sitting_countdown = 5;
	mind_n_eyes = 9;
	Serial.println("等待启动信息……");
	while (!(olq.getMessage(olq.topic_0)=="启动")) {}
	Serial.println("久坐提醒模式启动……");
}
void loop() {
	DF_JiuZuoTiXing();
}


// 自定义函数
void DF_JiuZuoTiXing() {
	Serial.println(analogRead(A0));
	while (!(analogRead(A0)>100)) {}
	mind_n_sitting_countdown = 10;
	while (!(mind_n_sitting_countdown<=0)) {
		Serial.println(analogRead(A0));
		Serial.println(mind_n_sitting_countdown);
		delay(1000);
		mind_n_sitting_countdown -= 1;
		if ((!(analogRead(A0)>100))) {
			delay(50);
			while (!(analogRead(A0)>100)) {}
			mind_n_sitting_countdown = 10;
		}
	}
	olq.publish(olq.topic_1, "->起身休息");
	digitalWrite(13, HIGH);
	while (!(!(analogRead(A0)>100))) {}
	digitalWrite(13, LOW);
	while (!(olq.available(olq.topic_1))) {}
	while (!(olq.getMessage(olq.topic_1)=="休息结束")) {}
}

评论

user-avatar
  • 三春牛-创客

    三春牛-创客2024.03.24

    学习学习!

    0
    • 三春牛-创客

      三春牛-创客2024.03.24

      好棒啊~

      0
      • 许培享

        许培享2024.01.14

        学习学习大神

        1
        • 小含糊online

          小含糊online2024.01.19

          互相学习,共同进步!

      • hacker_

        hacker_2023.07.26

        666

        1
        • 小含糊online

          小含糊online2024.01.19

          互相学习,共同进步!

      • 少东

        少东2023.07.24

        腻害腻害,膜拜大神!

        1
        • 小含糊online

          小含糊online2024.01.19

          互相学习,共同进步!

      • hacker_

        hacker_2023.07.16

        666

        0
        • DFHkrhgVBz2

          DFHkrhgVBz22023.07.15

          cycc😑👌💰👀

          1
          • 小含糊online

            小含糊online2024.01.19

            互相学习,共同进步!

        • SeanXiao

          SeanXiao2023.07.15

          w

          1
          • 小含糊online

            小含糊online2024.01.19

            互相学习,共同进步!

        • 春秋大仙

          春秋大仙2023.07.14

          6666666

          1
          • 小含糊online

            小含糊online2024.01.19

            互相学习,共同进步!