所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

懒人疫情无接触数人提醒器

特工李 特工李 2020-05-24 23:13:59

大家好我来自大连。我制作他是因为我发现现在疫情开学后老师经常来同学忘记测量体温,让学生在门口等待好久老师也因繁忙的工作忘记看管,如果当有同学来时蜂鸣器提醒老师那该多好。

【制作思路】提醒老师规定到校时间有多少人没有来,有学生来是提醒老师,到达时间提醒老师多少人没来。【作品原理】到达时间超声波开始检测,如有人来(即距离小于等于70cm)蜂鸣器提醒红灯亮,到达时间所有人未到达则发出未到达人数声。【作品讲解】图片+程序+代码+程序注释

材料清单 材料清单
1x
Arduino uno 主板
1x
uno扩展版(五对5V和gnd)
1x
Arduino自带超声波
1x
大面包板
1x
mini面包板
2x
led小灯(一红一绿)
2x
1K电阻
1x
面包线
1x
杜邦线(撕开)
1x
lcd1602显示屏
1x
DS1302时钟
1x
蜂鸣器
步骤1 步骤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

projectImage
步骤2 步骤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);
}

	                    				
Makelog作者原创文章,未经授权禁止转载。
1
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]