2018-10-20 21:17:49 [显示全部楼层]
7262浏览
查看: 7262|回复: 3

[项目] 【每周挑战】用micro:bit+Obloq打造物联网智能提醒喝水器

[复制链接]
本帖最后由 于鑫 于 2018-10-21 09:01 编辑

micro:bit + Obloq 打造物联网智能提醒喝水器

项目背景
大家好,我叫于儿,今年8岁。

爸爸工作很忙,经常忘记喝水,所以我开发一个智能提醒喝水器提醒爸爸喝水。为了让更好地让爸爸养成喝水的习惯,我加入了物联网模块,实时监控爸爸的喝水数据。晚上等爸爸回家我就可以拿着数据批评爸爸。

实现思路
我6岁开始学习编程,我会Scratch,现在在用micro:bit学习Python。我基于micro:bit和Obloq物联网模块来开发这个物联网智能提醒喝水器。

大致思路如下:
  • 设置一个计数器,初始值为0
  • 用一个重量传感器来称水杯的重量,每秒钟读取一次数据
  • 如果重量<=0,说明水杯不在称重台上,发送消息“水杯拿起”到IoT;
  • 如果重量>0, 则比较这次重量与上一次重量的差值
    • 如果为正,说明水杯中水多了,发送消息“加水”到IoT;
    • 如果为负,说明水杯中水少了,发送少的重量到IoT,计数器设置为0;
    • 上次重量 <- 本次重量
  • 计数器+1
  • 如果计数器>60*30 (30分钟),则播放音乐提醒喝水
  • sleep(1000)

流程图如下:

如何实现称重?
这个项目的难点是如何实现称重。一开始想用重量传感器模块,研究了很久发现micro:bit上没有可用的驱动,都是用Arduino来读取数据然后通过串口再传递给micro:bit,可是我没有Arduino,并且似乎micro:bit不能2个设备同时工作在串口模式下,也就是说无法跟Obloq放在一起工作。

于是我想到我有薄膜压力传感器,水杯的重量可以转变成压力,然后通过薄膜压力传感器来读到重量。

薄膜压力传感器的缺点是精度差,不过我的这个项目关心的是重量的差值,对精度要求不高,可以接受。【后来我加入了多次测量求平均值的方法,提高了读数的精度和稳定性】

所需配件
  • micro:bit + micro:Mate
  • RFP612薄膜压力传感器
  • RFP-ZHII电阻电压转换模块
  • OBLOQ - IoT物联网模块
  • 数字蜂鸣模块

配件资料

RFP612薄膜压力传感器
RFP薄膜式压力传感器可对任何接触面的压力进行静态和动态测量,薄膜压力传感器将施加在传感器感应区域的压力转换成电阻信号,然后根据力~电阻的标定关系曲线获得外界所施压力的变化信息,压力越大,传感器输出的电阻越小。
RFP-ZHII电阻电压转换模块
RFP-ZHII电阻电压转换模块将传感器的电阻信号转化为模拟电压信号或高低电平。它配合RFP薄膜式压力传感器一起使用,将压力转换为模拟信号供micro:bit读取。

功能引脚见下图


通过实际称重测试,我测得了如下重量-模拟信号读数:

重量(g)
模拟读数
0
1020
83
968
162
935
229
893
311
873
396
840
460
827
538
808
620
797
722
782
878
750

将上面的数据做到图上(见下图),可以发现重量和模拟信号呈线性关系。


通过线性回归,可以得到重量~模拟信号的函数关系为:
[mw_shl_code=python,true]import numpy as np
weight = [0,     83, 162, 229, 311, 396, 460, 538, 620, 722, 878]
analog = [1020, 968, 935, 893, 873, 840, 827, 808, 797, 782, 750]

analog_fit = np.polyfit(weight, analog, 1)
print(analog_fit)[/mw_shl_code]

输出 [-0.295, 981]
analog = −0.295 ∗ weight + 981


实际使用时我们是读到模拟信号量然后换算重量,所以模拟信号~重量的函数关系为:
[mw_shl_code=python,true]weight_fit = np.polyfit(analog, weight, 1)
print(weight_fit)
[/mw_shl_code]
输出 [-3.175, 3140]
weight = −3.175 ∗ analog + 3140


OBLOQ - IoT物联网模块
OBLOQ是一款基于ESP8266设计的串口转WIFI物联网模块,用以接收和发送物联网信息。它尺寸紧凑,价格低,接口简单,即插即用,搭配DFRobot自有的物联网平台,大大降低了物联网的使用门槛,无需复杂的基础知识,就能迅速搭建出一套物联网应用。


数字蜂鸣模块
数字蜂鸣器是一款简单的发声装置,可以通过频率来控制音调。它结构简单、应用丰富,能够模拟我们生活中许多声音和音乐。
详细资料请参考数字蜂鸣器模块

设备接线


代码实现

注册物联网
登陆https://iot.dfrobot.com.cn完成用户注册,即可添加设备。

我是用微信小程序注册的,在微信小程序中搜索EasyIoT,点击小程序,完成授权即可。
Iot_idIot_pwd 可以在 我的 里查看

点击 创建 添加设备


添加后在 设备 里可以查看到刚刚添加的设备及其 topic


添加Obloq软件包
进入https://makecode.microbit.org/ --> 点击“添加软件包” --> 在搜索框中输入Obloq,点击搜索 --> 添加Obloq软件包。

Obloq初始化


模拟读数转化为重量


根据重量判断喝水行为


定时提醒喝水


接收到“water”信息提醒喝水


完整代码如下


系统演示
先来张系统全家福

喝水、加水的数据可以在EasyIot小程序里看到
详细演示请看文章开头的视频。





flowchart.jpg
RFP612.jpg
RFP-ZHII.jpg
w-a.png
connection.jpg

rzyzzxw  版主

发表于 2018-10-21 07:56:24

于儿,你很厉害哦。
回复

使用道具 举报

于鑫  初级技师
 楼主|

发表于 2018-10-21 09:12:35

rzyzzxw 发表于 2018-10-21 07:56
于儿,你很厉害哦。

谢谢你的鼓励
回复

使用道具 举报

rzegkly  版主

发表于 2018-10-21 21:14:28

厉害了,我的micro:bit,学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail