回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

手机管家精灵盒 简单

头像 云天 2019.08.13 1599 1

设计背景:

孩子有手机了,本以为与孩子的联系会更便捷,谁知却让家长有“失控”的感觉,孩子经常玩起手机时间很长。

孩子使用手机要不要管,答案是肯定的。未成年的孩子需要父母的引领,扶正这棵小苗是父母的责任也是应尽的义务。但很多家长又不能长时间陪在身边,及时控制好孩子玩手机的时间。应运而生,为了能够帮助那些自制能力差,快近视,接近手机依赖症的小朋友们,设计了“手机管家精灵盒“

project-image

设计思路:

家长端APP通过物联网设置“开启收纳手机”时间、“结束收纳”时间。精灵盒中的手机APP接收到时间,开始计时,当“开启收纳手机”时间到后,通过蓝牙发出指令让Micro bit通过电机驱动板控制电机推出收纳盒。小朋友在手机上开启验证APP,放入盒中,点击盒上按钮,收回盒子。

开启验证。精灵盒中的手机APP随机生成1-5随机数,发送给小朋友手机,小朋友的手机按收到的随机数开始黑白背景闪烁。精灵盒的环境光传感器开始检测,查看闪烁次数与随机数是否一致,以此验证盒中是否为所要收纳的手机。并将结果发送到时家长端。家长就能及时了解手机的状态。

project-image

一、家长端APP程序编写

编写环境为MIT App Inventor2 WxBit 汉化增强版。

1、页面设计

“连接状态”为物联网连接状态,“手机状态”为当到了收纳时间,显示手机是否被收纳。

“当前时间”,调用显示手机系统时间。

两个输入框为:启动收纳时间和结束收纳时间

project-image

2、逻辑设计

物联网连接,使用 MIT App Inventor2 WxBit 汉化增强版提供的MQTT,服务器UIR使用默认:tcp://broker.hivemq.com:1883。因其不需要其它设置,使用方便简单。但可能安全性不高。

project-image

连接物联网,并接收手机收纳状态信息

对提交的时间格式进行校验,并通过物联网发送给“精灵盒手机APP”

project-image

显示当前手机系统时间

project-image

二、精灵盒手机APP

1、界面设计

界面中主要是蓝牙的相关操作、手动连接物联网(屏幕启动时已自动连接)及收到启动时间后进行“倒计时”

project-image

2、逻辑设计

物联网连接

project-image

通过物联网收到开启收纳时间信息,进行时间计算,开始倒计时。倒计时结束,通过蓝牙发送指令,Micro bit 控制电机推出盒子,准备收纳手机。当收纳完毕,开启结束收纳倒计时。

project-image

    MIT App Inventor2与Micro bit 蓝牙连接方法,可以查看本人的另一个帖子:[高级教程]Micro bit 与 App Inventor2 蓝牙通信https://mc.dfrobot.com.cn/thread-297491-1-1.html

project-image

当小朋友手机APP通过物联网主题“验证手机程序开启”,发来“start"消息,产生随机验证数,再发送给小朋友手机APP。

project-image

并通知Micro bit 开始验证。

project-image

Micro bit 发回验证结果,如正确,向家长端APP发送成功信息,否则发送失败信息,并推出盒子,要求再次收纳手机。

project-image

三、小朋友手机APP

1、界面设计

只有一个启动按钮,通知开启手机收纳验证。

project-image

2、逻辑设计

物联网连接

project-image

点击“开启”按钮,发送“start”开启验证指令。

project-image

当收到随机验证数,在等待10秒后,按照验证数开始屏幕黑白间隔闪烁。闪烁完毕后发送“stop”指令。

project-image

发送“stop”指令完成后,退出APP。

project-image

四、硬件设计

控制板使用Micro bit,Micro bit 集成了蓝牙模块,加上micro:bit及 电机驱动扩展板,但在应用中未使用电机驱动接口,而是另加了一个“L298N直流电机驱动模块”与电机相连。

P14,P13接电机驱动模块。P14为高电平,P13为低电平,电机正转,精灵盒被推出。P14为低电平,P13为高电平,电机反转,精灵盒被收回。


project-image

“模拟环境光线传感器”接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)
})

积木代码:https://makecode.microbit.org/_iL9FXuRCbLAA

五、硬件制作过程

1、制作箱体

使用装修剩余木料,用热熔胶安装箱体,并安装电机和电机驱动。

project-image

采用电机+齿轮驱动齿条带动盒子推出,拉回。

2、 安装扩展板及面包板

project-image

3、安装“环境光传感器”

project-image

外面

project-image

里面

4、安装“数字触摸开关”及电源(充电宝)

project-image

5、箱体顶后半部分使用“PVC”透明板

project-image

6、安装精灵盒子手机


project-image

六、视频演示

评论

user-avatar
  • Joannali

    Joannali2019.08.22

    期待完善的项目

    0