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

自制 Arduino 伊斯兰祷告时间实时时钟

零部件与物料

Arduino UNO ×1
Nokia 5110 显示屏 (PCD8544) ×1
DS1307 实时时钟模块 (Seeed Pi RTC) ×1

所需工具与设备

应用与在线服务

项目简介

本项目实现一个可显示公历日期与每日伊斯兰祷告时间的实时时钟。核心硬件为 Arduino UNO、DS1307 RTC 模块与 Nokia 5110 LCD。

主要元件介绍

Arduino UNO

基于 ATmega328P 的开源单片机板,提供 14 个数字 I/O(6 路 PWM)、6 个模拟输入、16 MHz 主频、32 KB Flash、2 KB SRAM、1 KB EEPROM。

DS1307 RTC

低功耗全二进制编码十进制 (BCD) 时钟/日历,提供秒、分、时、日、月、年信息,自动调整月份天数与闰年。支持 24/12 小时制,内置掉电检测自动切换备用电池。通过 I2C 接口 (SCL/SDA) 通信,需外接上拉电阻。

Nokia 5110 LCD

84×48 像素单色屏,带背光,采用 PCD8544 控制器,类 SPI 接口。引脚包括 VCC/GND、RST(复位)、CE(片选)、D/C(数据/命令)、DIN(数据输入)、CLK(时钟)、BL(背光控制,可接 PWM 引脚调光)。

程序配置方法

需修改代码第 161 行的 calcPrayerTimes() 参数:

calcPrayerTimes(year, month, day, 经度, 纬度, 时区, Fajr黄昏角, Isha黄昏角, ...);

可通过 IslamicFinder 查询所在城市的经纬度、Fajr 与 Isha 角度。以开罗为例:

对应代码修改为:

calcPrayerTimes(year, month, dayOfMonth, 30.2, 30, 2, -19.5, -17.5, fajr, sunRise, zuhr, asr, maghrib, isha);

计算结果为 double 类型,需用 doubleToHrMin() 转换为时/分。

程序工作原理

算法基于天文学计算:通过儒略日计算太阳视黄经、赤道倾角、恒星时等,推导出各祷告时刻的时角,再转换为当地时间。核心函数 calcPrayerTimes() 由 Mahmoud Adly Ezzat 编写,包含角度换算、归一化、时角计算等步骤。

完整代码

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
#define DS1307_I2C_ADDRESS 0x68

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
double fajr, sunRise, zuhr, asr, maghrib, isha;
char *Day[] = {"", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

void setup() {
  Wire.begin();
  display.begin();
  display.setContrast(25);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(22, 18); display.print("Hatem");
  display.display(); delay(500);
  display.setCursor(24, 28); display.print("ZEHIR");
  display.display(); delay(500);
  getDateDs1307();
}

void loop() {
  getDateDs1307();
  // 此处需替换为你所在城市的参数
  calcPrayerTimes(year, month, dayOfMonth, 39.8, 21.4, 3, -18.5, -19,
                  fajr, sunRise, zuhr, asr, maghrib, isha);
  static unsigned long prev = 0;
  if (millis() - prev > 200) {
    prev = millis();
    printTime();
  }
}

// 包含 BCD 转换、RTC 读写、双精度转时分、祷告时间核心算法等函数
// 详见原文完整代码

原理图

电路连接:DS1307 SDA→A4, SCL→A5;Nokia 5110 接 D3~D7;共用 5V/GND。

制造工艺

  1. Arduino POV 时钟:自制视觉暂留 LED 显示器
  2. 复古 Numitron 管时钟:Arduino Nano 驱动,低温可靠省电
  3. DIY Arduino单词时钟 – 极简优雅的实时文字显示
  4. 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
  5. 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
  6. Arduino Due 驱动 3.2″ TFT 实现温度监测与实时时钟
  7. Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
  8. Arduino UNO 驱动 1.17 英寸 TFT 屏显示图片 (SD 卡读取)
  9. 自制便携式视觉暂留显示器:Arduino UNO 与 ATtiny85
  10. Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
  11. 用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟
  12. Arduino Uno 控制 25kHz 4 针 PWM 风扇 - 硬件、代码与测试