设计背景:
孩子有手机了,本以为与孩子的联系会更便捷,谁知却让家长有“失控”的感觉,孩子经常玩起手机时间很长。
孩子使用手机要不要管,答案是肯定的。未成年的孩子需要父母的引领,扶正这棵小苗是父母的责任也是应尽的义务。但很多家长又不能长时间陪在身边,及时控制好孩子玩手机的时间。应运而生,为了能够帮助那些自制能力差,快近视,接近手机依赖症的小朋友们,设计了“手机管家精灵盒“
设计思路:
家长端APP通过物联网设置“开启收纳手机”时间、“结束收纳”时间。精灵盒中的手机APP接收到时间,开始计时,当“开启收纳手机”时间到后,通过蓝牙发出指令让Micro bit通过电机驱动板控制电机推出收纳盒。小朋友在手机上开启验证APP,放入盒中,点击盒上按钮,收回盒子。
开启验证。精灵盒中的手机APP随机生成1-5随机数,发送给小朋友手机,小朋友的手机按收到的随机数开始黑白背景闪烁。精灵盒的环境光传感器开始检测,查看闪烁次数与随机数是否一致,以此验证盒中是否为所要收纳的手机。并将结果发送到时家长端。家长就能及时了解手机的状态。
一、家长端APP程序编写
编写环境为MIT App Inventor2 WxBit 汉化增强版。
1、页面设计
“连接状态”为物联网连接状态,“手机状态”为当到了收纳时间,显示手机是否被收纳。
“当前时间”,调用显示手机系统时间。
两个输入框为:启动收纳时间和结束收纳时间
2、逻辑设计
物联网连接,使用 MIT App Inventor2 WxBit 汉化增强版提供的MQTT,服务器UIR使用默认:tcp://broker.hivemq.com:1883。因其不需要其它设置,使用方便简单。但可能安全性不高。
连接物联网,并接收手机收纳状态信息
对提交的时间格式进行校验,并通过物联网发送给“精灵盒手机APP”
显示当前手机系统时间
二、精灵盒手机APP
1、界面设计
界面中主要是蓝牙的相关操作、手动连接物联网(屏幕启动时已自动连接)及收到启动时间后进行“倒计时”
2、逻辑设计
物联网连接
通过物联网收到开启收纳时间信息,进行时间计算,开始倒计时。倒计时结束,通过蓝牙发送指令,Micro bit 控制电机推出盒子,准备收纳手机。当收纳完毕,开启结束收纳倒计时。
MIT App Inventor2与Micro bit 蓝牙连接方法,可以查看本人的另一个帖子:[高级教程]Micro bit 与 App Inventor2 蓝牙通信https://mc.dfrobot.com.cn/thread-297491-1-1.html
当小朋友手机APP通过物联网主题“验证手机程序开启”,发来“start"消息,产生随机验证数,再发送给小朋友手机APP。
并通知Micro bit 开始验证。
Micro bit 发回验证结果,如正确,向家长端APP发送成功信息,否则发送失败信息,并推出盒子,要求再次收纳手机。
三、小朋友手机APP
1、界面设计
只有一个启动按钮,通知开启手机收纳验证。
2、逻辑设计
物联网连接
点击“开启”按钮,发送“start”开启验证指令。
当收到随机验证数,在等待10秒后,按照验证数开始屏幕黑白间隔闪烁。闪烁完毕后发送“stop”指令。
发送“stop”指令完成后,退出APP。
四、硬件设计
控制板使用Micro bit,Micro bit 集成了蓝牙模块,加上micro:bit及 电机驱动扩展板,但在应用中未使用电机驱动接口,而是另加了一个“L298N直流电机驱动模块”与电机相连。
P14,P13接电机驱动模块。P14为高电平,P13为低电平,电机正转,精灵盒被推出。P14为低电平,P13为高电平,电机反转,精灵盒被收回。
“模拟环境光线传感器”接P2引脚,“数字触摸开关”接P1引脚。
let nowtime = 0
let tempsum = 0
let uartData = ""
let wb = 0
let connected = 0
let start = 0
basic.showString("UART")
start = 0
connected = 0
wb = 0
pins.digitalWritePin(DigitalPin.P13, 0)
pins.digitalWritePin(DigitalPin.P14, 0)
basic.forever(function () {
})
bluetooth.onBluetoothDisconnected(function () {//蓝牙断开时,点阵显示
basic.showString("D")
connected = 0
start = 0
})
bluetooth.onBluetoothConnected(function () {//蓝牙连通
basic.showString("C")
connected = 1
while (connected == 1) {
uartData = bluetooth.uartReadUntil(":")//接收字符串以“:”结束
if (uartData.substr(0, 1).compare("K") == 0) {//收到“K”,停止电机
pins.digitalWritePin(DigitalPin.P13, 0)
basic.showIcon(IconNames.No)
}
if (uartData.substr(0, 1).compare("G") == 0) {//收到“G”,电机推出盒子
basic.showIcon(IconNames.Yes)
pins.digitalWritePin(DigitalPin.P13, 1)
basic.pause(500)
pins.digitalWritePin(DigitalPin.P13, 0)
}
if (uartData.substr(0, 1).compare("T") == 0) {//收到“G”,电机推出盒子
basic.showIcon(IconNames.Yes)
pins.digitalWritePin(DigitalPin.P13, 1)
basic.pause(500)
pins.digitalWritePin(DigitalPin.P13, 0)
}
if (uartData.substr(0, 1).compare("M") == 0) {//收到“M”,环境光检测标识置1
start = 1
tempsum = 0
}
if (start == 1) {//开启环境光检测
if (pins.analogReadPin(AnalogPin.P2) < 200 && wb == 1) {
wb = 0
tempsum = tempsum + 1
nowtime = input.runningTime()
}
if (pins.analogReadPin(AnalogPin.P2) > 200 && wb == 0) {
wb = 1
tempsum = tempsum + 1
nowtime = input.runningTime()
}
if (input.runningTime() - nowtime > 12000) {//当闪烁时间停止超过12秒
start = 0//停止检测
bluetooth.uartWriteString(convertToText(tempsum))//通过蓝牙发送检测结果
}
}
}
})
input.onPinPressed(TouchPin.P1, function () {
//当触摸按钮被点击,收回盒子
pins.digitalWritePin(DigitalPin.P14, 1)
basic.pause(500)
pins.digitalWritePin(DigitalPin.P14, 0)
})
五、硬件制作过程
1、制作箱体
使用装修剩余木料,用热熔胶安装箱体,并安装电机和电机驱动。
采用电机+齿轮驱动齿条带动盒子推出,拉回。
2、 安装扩展板及面包板
3、安装“环境光传感器”
外面
里面
4、安装“数字触摸开关”及电源(充电宝)
5、箱体顶后半部分使用“PVC”透明板
6、安装精灵盒子手机
六、视频演示
Joannali2019.08.22
期待完善的项目