亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟

项目简介

本项目将制作一个基于 Arduino UNO 的简易闹钟,整合了多个模块教程。若在某个模块遇到困难,可参考网站上对应的单独教程。

所需组件

参考教程

接线说明

用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟

库与代码

代码功能

接线完成后,LCD 显示默认或之前设定的日期时间。按“*”键进入时间日期设置模式;按“A”键设置闹钟时分;按“B”键可在闹钟响起前取消,或响铃时按任意键停止。

完整代码

// DS1302 RTC + 4x4 Keypad + LCD I2C + Arduino + Buzzer
#include <Keypad.h>
#include <Wire.h>
#include <virtuabotixRTC.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7

LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
virtuabotixRTC myRTC(2, 3, 4); // CLK, DAT, RST

const byte numRows = 4;
const byte numCols = 4;
char keymap[numRows][numCols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[numRows] = {12,11,10,9};
byte colPins[numCols] = {8,7,6,5};

int i1,i2,i3,i4;
char c1,c2,c3,c4;
char keypressed, keypressedx;
int A_hour = NULL, A_minute = NULL, AlarmIsActive = NULL;
int buzzer = 13;
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

void setup() {
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home();
}

void loop() {
  while(keypressed == NO_KEY) {
    keypressed = myKeypad.getKey();
    lcd.clear();
    myRTC.updateTime();

    // 闹钟触发逻辑:时、分匹配且秒在 0-2 之间
    if(myRTC.hours == A_hour && myRTC.minutes == A_minute && AlarmIsActive == 1 && myRTC.seconds >= 0 && myRTC.seconds <= 2) {
      while(keypressedx == NO_KEY) {
        tone(buzzer, 1000); delay(100);
        tone(buzzer, 2000); delay(100);
        lcd.clear(); lcd.print("Get up !!!");
        keypressedx = myKeypad.getKey();
      }
    }
    keypressedx = NO_KEY;
    noTone(buzzer);

    // 显示日期时间
    lcd.setCursor(0,0);
    lcd.print(myRTC.dayofmonth); lcd.print("/");
    lcd.print(myRTC.month); lcd.print("/");
    lcd.print(myRTC.year);
    lcd.setCursor(0,1);
    lcd.print(myRTC.hours); lcd.print(":");
    lcd.print(myRTC.minutes); lcd.print(":");
    lcd.print(myRTC.seconds);
    delay(100);
  }

  // 时间日期设置(按 * 进入)
  if (keypressed == '*') {
    lcd.clear(); lcd.print(" Setup"); delay(1000);
    lcd.clear(); lcd.print("Setup year");
    // 依次输入年(4位)、月(2位)、日(2位)、时(2位)、分(2位)
    // 每步使用 waitForKey 阻塞等待按键,过滤功能键
    // 最终调用 myRTC.setDS1302Time(秒, 分, 时, 周, 日, 月, 年)
    keypressed = NO_KEY;
  }

  // 闹钟设置(按 A 进入)
  if (keypressed == 'A') {
    lcd.clear(); lcd.print(" Alarm setup "); delay(1000);
    lcd.clear(); lcd.print("Set alarm hour");
    // 输入时(2位)、分(2位),设置 A_hour, A_minute, AlarmIsActive=1
    keypressed = NO_KEY;
  }

  // 取消闹钟(按 B)
  if (keypressed == 'B') {
    lcd.clear(); lcd.print("Alarm deactivated");
    AlarmIsActive = 0; keypressed = NO_KEY; delay(500);
  } else {
    myRTC.updateTime(); keypressed = NO_KEY;
  }
}

原理图

用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟

制造工艺

  1. Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
  2. Arduino POV 时钟:自制视觉暂留 LED 显示器
  3. 复古 Numitron 管时钟:Arduino Nano 驱动,低温可靠省电
  4. DIY Arduino单词时钟 – 极简优雅的实时文字显示
  5. 自制 Arduino 伊斯兰祷告时间实时时钟
  6. 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
  7. Arduino Due 驱动 3.2″ TFT 实现温度监测与实时时钟
  8. 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
  9. TM1637 数码管时钟:Arduino Nano 实现时间设定与闹钟
  10. Arduino UNO 驱动 1.17 英寸 TFT 屏显示图片 (SD 卡读取)
  11. 自制高精度测距轮:Arduino Nano + 旋转编码器 + 1602 LCD
  12. 轻松打造 Arduino 秒表:按钮触发计时器