【项目来源】
本项目将《义务教育信息科技教学指南-物联网实践与探索》八年级全一册当中第二章MQTT有关内容与第三章反馈与控制的内容相结合,共同体现在系统中。通过使用系统观察结果可以帮助学生理解MQTT的发布订阅模式,清晰了解什么是反馈与什么是控制。行空板的鸣笛警报、指示灯闪烁、文字提示都属于是反馈,舵机的转动是一种控制。
【项目简介】
本项目是一个智慧门锁系统,这是一个用行空板K10、超声波传感器以及舵机制作成的简易的智慧门锁系统传感器负责在门外测量门外的人与门的距离,舵机模拟屋内的门锁。不同距离会有不同的效果。
40cm以上是安全距离,行空板显示绿灯,屏幕显示“您已进入监控范围”的文字,舵机臂保持竖直。
20-40cm是警告距离,并不会触发门锁落下,舵机臂依旧保持竖直,但是行空板会显示黄灯,屏幕显示“您已进入监控范围”的文字。
0-20cm表示危险距离,进入这个距离,行空板会闪烁红灯,屏幕切换为摄像头画面同时显示目前的距离和“请远离”的文字,发出声音警示,并且门锁会落下,这里舵机模拟的是门锁。在进入危险距离后,会每隔三秒向easy iot平台发送消息,提示房子的主人“您家门前有人,请谨慎开门”,直至距离在20cm以上才会停止。
【项目硬件准备】
智慧门锁系统应用的硬件设备有:行空板K10、超声波传感器、micro:bit掌控IO扩展板、180° 微型舵机




【硬件连接】

【流程图】

【项目代码】

/*!
* MindPlus
* esp32s3bit
*
*/
#include <DFRobot_Iot.h>
#include "unihiker_k10.h"
#include <DFRobot_URM10.h>
#include <DFRobot_Servo.h>
// 动态变量
volatile float mind_n_a;
// 静态常量
const String topics[5] = {"U0BcluvNR","","","",""};
// 创建对象
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
DFRobot_Iot myIot;
DFRobot_URM10 urm10;
Music music;
Servo servo_P1;
// 主程序开始
void setup() {
k10.begin();
k10.initScreen(screen_dir);
k10.initBgCamerImage();
k10.setBgCamerImage(false);
k10.creatCanvas();
servo_P1.attach(P1);
k10.setScreenBackground(0xFFFFFF);
myIot.wifiConnect("mumu", "13145273057");
while (!myIot.wifiStatus()) {}
k10.canvas->canvasText("WiFi连接成功^_^", 5, 0x009900);
k10.canvas->updateCanvas();
delay(3000);
myIot.init("iot.dfrobot.com.cn","UMzvluDHg","5453193102325697","KuxqNSdHR",topics,1883);
myIot.connect();
while (!myIot.connected()) {}
k10.canvas->canvasText("MQTT连接成功^_^", 7, 0x009900);
k10.canvas->updateCanvas();
delay(3000);
myIot.publish(topic_0, "===connect===");
mind_n_a = (urm10.getDistanceCM(P0, P0));
k10.canvas->canvasClear();
}
void loop() {
if (((urm10.getDistanceCM(P0, P0))<20)) {
k10.canvas->canvasClear();
k10.rgb->write(-1, 0xFF0000);
k10.canvas->canvasText("智 慧 门 锁 系 统", 30, 20, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->canvasText((urm10.getDistanceCM(P0, P0)), 90, 115, 0x0000FF, k10.canvas->eCNAndENFont24, 8, false);
k10.canvas->canvasText("请远离,请远离", 36, 165, 0xFF0000, k10.canvas->eCNAndENFont24, 50, true);
music.playMusic(ENTERTAINER);
k10.setBgCamerImage(true);
myIot.publish(topic_0, "您家门前有人,请谨慎开门");
k10.canvas->updateCanvas();
servo_P1.angle(abs(90));
delay(3000);
}
else if (((urm10.getDistanceCM(P0, P0))<40)) {
k10.setBgCamerImage(false);
k10.rgb->write(-1, 0xFFFF00);
k10.canvas->canvasText("智 慧 门 锁 系 统", 30, 20, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->canvasText("您已进入监控范围", 72, 125, 0xFFCC00, k10.canvas->eCNAndENFont24, 4, false);
k10.canvas->updateCanvas();
servo_P1.angle(abs(180));
delay(3000);
}
else {
k10.setBgCamerImage(false);
k10.rgb->write(-1, 0x00FF00);
k10.canvas->canvasText("智 慧 门 锁 系 统", 30, 20, 0x000000, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->canvasText("您已进入监控范围", 72, 125, 0x00FF00, k10.canvas->eCNAndENFont24, 4, false);
k10.canvas->updateCanvas();
servo_P1.angle(abs(180));
delay(3000);
}
}
附件
评论