【每周挑战】用micro:bit+Obloq打造物联网智能提醒喝水器
本帖最后由 于鑫 于 2018-10-21 09:01 编辑用micro:bit + Obloq 打造物联网智能提醒喝水器
http://player.youku.com/embed/XMzg3OTE1MzA2OA==
项目背景
大家好,我叫于儿,今年8岁。
爸爸工作很忙,经常忘记喝水,所以我开发一个智能提醒喝水器提醒爸爸喝水。为了让更好地让爸爸养成喝水的习惯,我加入了物联网模块,实时监控爸爸的喝水数据。晚上等爸爸回家我就可以拿着数据批评爸爸。
实现思路
我6岁开始学习编程,我会Scratch,现在在用micro:bit学习Python。我基于micro:bit和Obloq物联网模块来开发这个物联网智能提醒喝水器。
大致思路如下:
[*]设置一个计数器,初始值为0
[*]用一个重量传感器来称水杯的重量,每秒钟读取一次数据
[*]如果重量<=0,说明水杯不在称重台上,发送消息“水杯拿起”到IoT;
[*]如果重量>0, 则比较这次重量与上一次重量的差值
[*]如果为正,说明水杯中水多了,发送消息“加水”到IoT;
[*]如果为负,说明水杯中水少了,发送少的重量到IoT,计数器设置为0;
[*]上次重量 <- 本次重量
[*]计数器+1
[*]如果计数器>60*30 (30分钟),则播放音乐提醒喝水
[*]sleep(1000)
流程图如下:https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212006x4nhmyfbcf4uqcoa.jpg
如何实现称重?
这个项目的难点是如何实现称重。一开始想用重量传感器模块,研究了很久发现micro:bit上没有可用的驱动,都是用Arduino来读取数据然后通过串口再传递给micro:bit,可是我没有Arduino,并且似乎micro:bit不能2个设备同时工作在串口模式下,也就是说无法跟Obloq放在一起工作。
于是我想到我有薄膜压力传感器,水杯的重量可以转变成压力,然后通过薄膜压力传感器来读到重量。
薄膜压力传感器的缺点是精度差,不过我的这个项目关心的是重量的差值,对精度要求不高,可以接受。【后来我加入了多次测量求平均值的方法,提高了读数的精度和稳定性】
所需配件
[*]micro:bit + micro:Mate
[*]RFP612薄膜压力传感器
[*]RFP-ZHII电阻电压转换模块
[*]OBLOQ - IoT物联网模块
[*]数字蜂鸣模块
配件资料
RFP612薄膜压力传感器RFP薄膜式压力传感器可对任何接触面的压力进行静态和动态测量,薄膜压力传感器将施加在传感器感应区域的压力转换成电阻信号,然后根据力~电阻的标定关系曲线获得外界所施压力的变化信息,压力越大,传感器输出的电阻越小。https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212016co3h0vls6xoz5zle.jpgRFP-ZHII电阻电压转换模块RFP-ZHII电阻电压转换模块将传感器的电阻信号转化为模拟电压信号或高低电平。它配合RFP薄膜式压力传感器一起使用,将压力转换为模拟信号供micro:bit读取。
功能引脚见下图
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212031fjewxz4jw6fefmjl.jpg
通过实际称重测试,我测得了如下重量-模拟信号读数:
重量(g)模拟读数
01020
83968
162935
229893
311873
396840
460827
538808
620797
722782
878750
将上面的数据做到图上(见下图),可以发现重量和模拟信号呈线性关系。
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212132owasaloobsgrk9m7.png
通过线性回归,可以得到重量~模拟信号的函数关系为:import numpy as np
weight =
analog =
analog_fit = np.polyfit(weight, analog, 1)
print(analog_fit)
输出 [-0.295, 981]analog = −0.295 ∗ weight + 981
实际使用时我们是读到模拟信号量然后换算重量,所以模拟信号~重量的函数关系为:weight_fit = np.polyfit(analog, weight, 1)
print(weight_fit)
输出 [-3.175, 3140]weight = −3.175 ∗ analog + 3140
OBLOQ - IoT物联网模块OBLOQ是一款基于ESP8266设计的串口转WIFI物联网模块,用以接收和发送物联网信息。它尺寸紧凑,价格低,接口简单,即插即用,搭配DFRobot自有的物联网平台,大大降低了物联网的使用门槛,无需复杂的基础知识,就能迅速搭建出一套物联网应用。
详细资料请参考Gravity: OBLOQ - IoT Module 物联网模块
数字蜂鸣模块数字蜂鸣器是一款简单的发声装置,可以通过频率来控制音调。它结构简单、应用丰富,能够模拟我们生活中许多声音和音乐。详细资料请参考数字蜂鸣器模块
设备接线
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212046wgz16aybbun5bgla.jpg
代码实现
注册物联网登陆https://iot.dfrobot.com.cn完成用户注册,即可添加设备。
我是用微信小程序注册的,在微信小程序中搜索EasyIoT,点击小程序,完成授权即可。https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212305ak63pqm6z681y8vk.pngIot_id 和 Iot_pwd 可以在 我的 里查看https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212240ika51k1wcojwvpvg.png
点击 创建 添加设备
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212250lmwee87l4emx7yg2.png
添加后在 设备 里可以查看到刚刚添加的设备及其 topic
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212257qh8gtcuywoz9tpgh.png
添加Obloq软件包进入https://makecode.microbit.org/ --> 点击“添加软件包” --> 在搜索框中输入Obloq,点击搜索 --> 添加Obloq软件包。https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212448iualk3j3l8jlralr.jpg
Obloq初始化
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212513xn70qov6mz5m0661.jpg
模拟读数转化为重量
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212528g66s7l8svooovtgj.jpg
根据重量判断喝水行为
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212543ooqwnc1bnvzor1vp.jpg
定时提醒喝水
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212608lkdaz9kqt9tfffy9.jpg
接收到“water”信息提醒喝水
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212628ftrpr2wke3kr0eme.jpg
完整代码如下
https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212711whkyyee004gi2spp.png
系统演示
先来张系统全家福https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212753pt9j22nwdwgdjcjd.jpg
喝水、加水的数据可以在EasyIot小程序里看到https://mc.dfrobot.com.cn/data/attachment/forum/201810/20/212807ste2ddxattttg8rb.jpg详细演示请看文章开头的视频。
于儿,你很厉害哦。{:5_148:} rzyzzxw 发表于 2018-10-21 07:56
于儿,你很厉害哦。
谢谢你的鼓励 厉害了,我的micro:bit,学习了
页:
[1]