智能动作触发闹钟:赖床不再,起床有保障
零部件与物料
| 零部件 | 数量 | 备注 |
|---|---|---|
| Arduino Nano Every | 1 | 紧凑低功耗,任意 Arduino 兼容板均可 |
| DS3231 时钟模块 | 1 | |
| HC-SR501 人体红外传感器 | 1 | 检测人体移动触发 |
| 蜂鸣器(5V 压电) | 1 |
软件与在线服务
- Arduino IDE
项目简介
起床难?这款动作触发闹钟强制你保持清醒:按掉闹钟后若检测到你回床,闹铃重置,必须在传感器前保持活动设定时长才能彻底关闭。
组装接线
准备:DS3231 RTC、HC-SR501 PIR、蜂鸣器、轻触按钮、Arduino Nano Every。

接线对照:
- 蜂鸣器负极 → GND,正极 → D11
- 按钮一脚 → GND,另一脚 → D9
- HC-SR501 VCC → 5V,OUT → D7,GND → GND
- DS3231 GND → GND,VCC → 5V,SDA → A4,SCL → A5

核心代码
先安装 DS3231 库(代码区下载 ZIP → IDE 添加)。首次烧录后需注释掉 clock.setDateTime(__DATE__, __TIME__),否则每次复位都会重置时间。
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7;
int pirValue;
int set_hour = 7;
int set_minute = 0;
void setup() {
clock.begin();
pinMode(button, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
// clock.setDateTime(__DATE__, __TIME__); // 首次上传后注释
pinMode(pirPin, INPUT);
}
void alarm(int minute) {
bool button_pressed = false, awake = false, movement = false;
// 阶段1:响铃等待按键
while (!button_pressed) {
for (int i = 0; i < 4; i++) {
tone(11, 523, 100); delay(100);
tone(11, 784, 50);
for (int j = 0; j < 20; j++) {
if (digitalRead(button) == LOW) {
button_pressed = true; awake = true;
dt = clock.getDateTime(); minute = dt.minute;
}
delay(65);
}
}
}
dt = clock.getDateTime(); minute = dt.minute;
// 阶段2:必须在传感器前保持活动
while (awake) {
movement = false;
dt = clock.getDateTime();
for (int i = 0; i < 30; i++) if (digitalRead(pirPin)) movement = true;
digitalWrite(LED_BUILTIN, movement);
if (!pirValue) {
delay(5000);
for (int i = 0; i < 40; i++) if (digitalRead(pirPin)) movement = true;
if (!movement) alarm(minute); // 无动作则重置闹钟
}
if (abs(dt.minute - minute) >= 1) { // 设定清醒时长(如1分钟)
tone(11, 698, 50); delay(100); tone(11, 698, 50);
digitalWrite(LED_BUILTIN, 0); awake = false;
}
delay(100);
}
}
void loop() {
dt = clock.getDateTime();
if (set_minute == dt.minute && set_hour == dt.hour) alarm(set_minute);
delay(10000);
}
传感器调节

将 HC-SR501 跳线帽设为可重复触发模式(H 位)。

灵敏度拧到最大,延迟拧到最小:既能持续检测到人,又不会因延迟过长而忽略“回床”动作。

小型化封装
面包板验证无误后,直接焊接到 Nano Every 做成掌上闹钟。

用 3mm 轻型木板(55×35×40mm)做外壳:预留大窗给 PIR、Micro-USB 充电口、蜂鸣器出声孔。




成品展示:



代码与库文件
- 闹钟主程序(上文已含)
- DS3231 库 ZIP(下载后 IDE 导入)
原理图
面包板正负轨接 Arduino 5V/GND。
制造工艺