大家好我来自大连。我制作他是因为我发现现在疫情开学后老师经常来同学忘记测量体温,让学生在门口等待好久老师也因繁忙的工作忘记看管,如果当有同学来时蜂鸣器提醒老师那该多好。
【制作思路】提醒老师规定到校时间有多少人没有来,有学生来是提醒老师,到达时间提醒老师多少人没来。【作品原理】到达时间超声波开始检测,如有人来(即距离小于等于70cm)蜂鸣器提醒红灯亮,到达时间所有人未到达则发出未到达人数声。【作品讲解】图片+程序+代码+程序注释
步骤1 开始接线
扩展版按照对应接对应引脚
显示1602显示屏,Gnd——Gnd,Vcc——5V,SDA——A4,SCL——A5
DS1302GND——GND,CLK——4,DAT——3,RS——2
两个小灯接法一样(下方图)
超声波Vcc——5V,Gnd——Gnd,还有两个分别按照mind+给的 超声波模块接口接
迷你面包板是1602大面包版其他
蜂鸣器+接数字引脚-接gnd
步骤2 现在开始编程吧(代码程序均有注释)
【注意】如果分钟则要大于等于,小时等于就行。这是时间设置上的问题注意一下。
程序有点长所以截屏不方便大家谅解,但是有代码和附件
代码
/*!
* MindPlus
* uno
*
* 主程序开始,循坏外主要用于初始化各个模块
*/
#include <ThreeWire.h>
#include <RtcDS1302.h>
#include <DFRobot_URM10.h>
#include <DFRobot_Libraries.h>
#include <DFRobot_LiquidCrystal_I2C.h>
// 动态变量
volatile float mind_n_RenShu;
// 创建对象
DFRobot_LiquidCrystal_I2C lcd1602;
ThreeWire myWire(3,4,2);
RtcDS1302<ThreeWire> Rtc(myWire);
DFRobot_Tone DFTone;
DFRobot_URM10 urm10;
// 主程序开始
void setup() {
Rtc.Begin();
Rtc.SetDateTime(RtcDateTime("Jan/01/2020", "20:42:35"));
lcd1602.begin(0x3f);
if (((Rtc.GetDateTime().Minute())>=2)) {
for (int index = 0; index < 10; index++) {
DFTone.play(11, 131, 500);
}
}
// 此处作用是用来设置结束时间
while (!((Rtc.GetDateTime().Minute())>=2)) {
if (((Rtc.GetDateTime().Minute())>=2)) {
while (1) {
// 当有人来时红灯亮起,蜂鸣器提示
if (((urm10.getDistanceCM(8, 12))<=70)) {
mind_n_RenShu += 1;
for (int index = 0; index < 5; index++) {
DFTone.play(11, 196, 125);
digitalWrite(7, HIGH);
}
}
// 当没有人时绿灯亮起提示系统正常
if (((urm10.getDistanceCM(8, 12))>100)) {
for (int index = 0; index < 5; index++) {
digitalWrite(1, HIGH);
}
}
}
}
if (((Rtc.GetDateTime().Minute())>=2)) {
while (1) {
lcd1602.printLine(uint32_t(1), "people");
// 变量人数要自己添加或者改名。当然也可以不添加但是用人数更加方便理解。
lcd1602.print(uint32_t(8), uint32_t(0), mind_n_RenShu);
lcd1602.printLine(uint32_t(2), "time");
lcd1602.print(uint32_t(5), uint32_t(1), (Rtc.GetDateTime().Hour()));
lcd1602.print(uint32_t(8), uint32_t(1), (Rtc.GetDateTime().Minute()));
}
}
}
// 在此填写你要计数的总人数。【讲解】如果变量也就是进来的人等于指定人数他就显示绿灯蜂鸣器长时间出声来提醒你人已道齐.
if ((mind_n_RenShu==3)) {
for (int index = 0; index < 10; index++) {
digitalWrite(1, HIGH);
DFTone.play(11, 262, 125);
}
}
if (((Rtc.GetDateTime().Minute())>=2)) {
if ((mind_n_RenShu<3)) {
// 如果到达终止时间人还未到齐,那吗蜂鸣器响未到齐人数声音
for (int index = 0; index < (3 - mind_n_RenShu); index++) {
DFTone.play(11, 988, 250);
}
}
}
}
void loop() {
lcd1602.clear();
delay(300000);
}
评论