真正让您在早上起床的闹钟
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
因为有时候早上起床很困难,所以我决定做一个闹钟,真的可以让你起床。这个想法是使用运动传感器,以便闹钟知道您在按下贪睡按钮后是否回到床上。如果是这种情况,警报将再次响起。否则,如果您起床时间足够长(例如 2 分钟),闹钟将不再响起。在此期间,您必须大约在传感器前面(几米内),您可以在那里开始您的早晨例行活动。
组装
对于这个项目,我们需要一个时钟模块、一个运动传感器、一个蜂鸣器、一个小按钮和一个 Arduino。
现在一切都需要连接起来:
- 蜂鸣器的负极引脚 --> GND
- 蜂鸣器正极引脚 --> D11
- 按钮引脚 --> GND
- 另一个按钮销 --> D9
- 运动传感器 VCC --> 5V
- 运动传感器输出 --> D7
- 运动传感器GND --> GND
- 时钟模块地-->地
- 时钟模块VCC --> 5V
- 时钟模块 SDA --> SDA(Mega2560 的引脚 20)
- 时钟模块 SCL --> SCL(Mega2560 的引脚 21)
如图所示接线后:
代码
首先,您需要从代码部分下载 ZIP 文件。这是时钟模块的库。如果您在将文件添加到库时遇到困难,可以按照代码部分中的说明进行操作。
现在您可以从软件部分上传代码。在你上传代码后,你必须注释掉这一行:
clock.setDateTime(__DATE__, __TIME__);
此行在设置功能中。
现在你应该直接重新上传代码。
如果不注释掉,每次重置板子时,时钟模块中的时间都会重置为上次上传的时间。
之后,您可以设置闹钟响起的时间。您可以设置一天中的小时和分钟:
//--------------------------------------int set_hour =6;int set_minute =55;//------------------------------------------------
现在闹钟每天都会在这个时候响起。还可以编辑代码,以便您可以在周末或其他几天有不同的时间。
现在如果你给闹钟供电,它会一直等到设定的时间。然后将执行alarm() 函数。起初它会开始发出哔哔声,直到您按下贪睡按钮。之后,运动传感器会检查它前面是否有人。你必须在传感器前面一段给定的时间,你还必须移动一点,以便触发运动传感器。如果您在运动传感器的视野范围内保持足够长的时间,则会发出短促的蜂鸣声,告诉您闹钟现在已在当天禁用,它将一直等到第二天早上。
但是,如果您在按下按钮后的时间内回到床上,闹钟将响起,整个过程将重新开始。所以这个闹钟可以确保你不只是关掉闹钟然后回到床上。希望在您站在传感器前的时间之后,您已经足够清醒,不会再上床睡觉了。
在此行中,您可以调整必须位于传感器前的时间(以分钟为单位):
if(abs(dt.minute - minute)>=1){ //设置你必须 // 进入的时间段
传感器调整
运动传感器需要进行一些调整才能正常使用此闹钟。首先,我们必须将触发器选择跳线放到正确的位置。需要处于可重复触发模式!
现在您还必须调整时间延迟和灵敏度。对我来说,当我将灵敏度设置为最大值并且时间延迟稍微超过最小值时,效果最好。时间延迟决定了最后一次检测到一个人后输出高的时间。如果延迟太短,则很难阻止警报再次响起,因为传感器不会始终检测到您。另一方面,如果延迟时间太长,则您再次回到床上时警报不会通知。
图>
现在我们让它变得紧凑
经过一些测试,我们准备使闹钟更紧凑。为此,我使用 Arduino Nano Every,但您也可以使用几乎任何其他 Arduino 板。
我们开始根据第二个原理图将所有东西焊接在一起(它与以前基本相同,只是没有面包板)。
图> 图> 图>在测试一切是否仍然正常后,我们可以为闹钟构建一个案例。我决定用 3 毫米的轻木制作外壳,因为它很容易使用。下面是一些构建案例过程的图片。我的箱子尺寸是 55mm x 35mm x 40mm。
图> 图>我为运动传感器开了一个大洞,还有一个用于 micro USB 电缆的插槽和一个用于扬声器的开口。
完成的闹钟:
图> 图>
代码
- 闹钟Arduino代码
- 时钟库
闹钟Arduino代码Arduino
#include#include DS3231 时钟;RTCDateTime dt;int button =9;int pirPin =7; // HC-S501int pirValue 的输入; // 存储读取 PIR 值的位置//------------------------------------------------int set_hour =7;int set_minute =0;//--------------------------------------无效设置(){时钟。开始(); pinMode(按钮,INPUT_PULLUP); pinMode(LED_BUILTIN,输出); //clock.setDateTime(__DATE__, __TIME__); // !!在第一次上传后,您必须注释掉这一行。否则你会得到错误的时间!! pinMode(pirPin, INPUT);}void alarm(int minute){ bool button_pressed =false; bool 清醒 =假;布尔运动 =假; while(!button_pressed){ //只要没有按下按钮,闹钟就会开启 for(int i =0; i <4; i++){tone(11, 523, 100);延迟(100);音调(11、784、50); for(int i =0; i <20; i++){ if(digitalRead(button) ==LOW){ button_pressed =true;清醒 =真; dt =时钟.getDateTime();分钟 =dt.minute; } 延迟(65); } } } dt =clock.getDateTime();分钟 =dt.minute;而(清醒){运动=假; dt =时钟.getDateTime(); for(int i =0; i <30; i++){ if(digitalRead(pirPin)){movement =true;} } digitalWrite(LED_BUILTIN, Movement);如果(!pirValue){ 延迟(5000); for(int i =0; i <40; i++){ if(digitalRead(pirPin)){movement =true;} } if(!movement){ alarm(minute); //如果没有检测到动作太久,警报会重置 } } if(abs(dt.minute - minute)>=1){ //设置你必须在传感器前面的时间段(11, 698 , 50);延迟(100);音调(11、698、50);数字写入(LED_BUILTIN,0);清醒=假; } 延迟(100); }} void loop() { dt =clock.getDateTime(); if(set_minute ==dt.minute &&set_hour ==dt.hour){ alarm(set_minute); } 延迟(10000);}
时钟库Arduino
这是 DS3231 库的 zip 文件。您必须下载它并将其添加到您的库中,如下所示:打开 Arduino --> 转到“草图”->“包含库”->“添加 .ZIP 库”--> 转到 zip 文件并单击确定
无预览(仅下载)。
示意图
我忘了在面包板上绘制到 VCC 和 GND 的连接。所以你只需要将 Arduino 上的 5V 连接到正轨,将 Arduino 上的 GND 连接到负轨。制造工艺