Часы реального времени на Arduino с расчётом времени намаза
Компоненты и материалы
| Arduino UNO | 1 шт. |
| Дисплей Nokia 5110 (84×48 пикселей) | 1 шт. |
| RTC-модуль DS1307 (Seeed Pi RTC) | 1 шт. |
Необходимые инструменты
- Перемычки (набор)
- Брэдборд 400 контактов
Программное обеспечение
- Arduino IDE
О проекте
Это устройство – часы реального времени, отображающие григорианскую дату и ежедневное время намаза (салята). Для сборки нужны: Arduino UNO (или совместимая плата), RTC DS1307 и ЖК-дисплей Nokia 5110.
Описание компонентов
Arduino UNO
Микроконтроллерная плата на базе ATmega328P. Имеет 14 цифровых входов/выходов (6 с ШИМ), 6 аналоговых входов, 16 МГц керамический резонатор, 32 КБ флеш-памяти, 2 КБ ОЗУ, 1 КБ EEPROM, разъем питания и USB.
DS1307 – RTC (часы реального времени)
Низкопотребляющий календарь/часы с двоично-десятичным кодированием (BCD). Отслеживает секунды, минуты, часы, день недели, дату, месяц и год. Автоматически корректирует концы месяцев и високосные годы. Работает в 12- или 24-часовом формате с индикатором AM/PM. Имеет встроенный контроллер питания для переключения на батарею при отключении основного питания.
Выводы DS1307:
- VCC, GND – питание
- SCL – тактовый вход I2C
- SDA – данные I2C (требует внешний подтягивающий резистор)
- SQW/OUT – выход прямоугольных импульсов (1 Гц, 4/8/32 кГц)
- X1, X2 – подключение кварца 32.768 кГц
Дисплей Nokia 5110
Монохромный дисплей 84×48 пикселей с подсветкой, контроллер PCD8544 (как в Nokia 3310). Интерфейс – последовательный, похожий на SPI.
Выводы дисплея:
- VCC, GND – питание
- RST – сброс (активный низкий)
- CE – выбор чипа (активный низкий)
- D/C – данные/команда (HIGH – данные, LOW – команда)
- DIN – последовательные данные
- CLK – тактовый сигнал
- BL – управление подсветкой (можно подключить к ШИМ-пину)
Настройка программы под ваш город
В строке 161 кода нужно указать географические координаты и параметры расчёта:
calcPrayerTimes(year, month, dayOfMonth, longitude, latitude, timeZone, fajrTwilight, ishaTwilight, fajr, sunRise, zuhr, asr, maghrib, isha);
Параметры:
- Долгота / Широта / Часовой пояс
- Угол сумерков для фаджра и иши (варьируются по странам)
Координаты и углы можно узнать на сайте IslamicFinder, введя название города.
Пример для Каира:
- Долгота: 30.2
- Широта: 30
- Часовой пояс: +2
- Угол фаджра: -19.5
- Угол иши: -17.5
Строка кода для Каира:
calcPrayerTimes(year, month, dayOfMonth, 30.2, 30, 2, -19.5, -17.5, fajr, sunRise, zuhr, asr, maghrib, isha);
Как работает алгоритм
Функция принимает дату, координаты, часовой пояс и углы сумерков, возвращая 6 значений времени (фаджр, восход, зухр, аср, магриб, иша) в формате double. Функция doubleToHrMin преобразует их в часы и минуты.
Алгоритм расчёта времени намаза разработан Махмудом Адли Эззатом (источник).
Исходный код
#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.setTextColor(BLACK);
display.setTextSize(1);
getDateDs1307();
}
void loop() {
getDateDs1307();
// Пример координат (нужно заменить на свои)
calcPrayerTimes(year, month, dayOfMonth, 39.8, 21.4, 3, -18.5, -19, fajr, sunRise, zuhr, asr, maghrib, isha);
printTime();
delay(5000);
}
// Функции преобразования BCD, чтения RTC, вывода на дисплей, расчёта времени намаза
// (полный код см. в оригинале)
Схема подключения
Схема в формате Fritzing показывает подключение DS1307 по I2C (A4/A5) и дисплея Nokia 5110 к цифровым пинам 3–7.
Производственный процесс
- Arduino POV-часы: сборка дисплея на эффекте сохранения образа
- Ретро-часы на индикаторах Numitron с Arduino: просто, надёжно, экономно
- Слово-часы (Word Clock) на Arduino — DIY-часы с текстовой индикацией времени
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Умная копилка: управление монетоприёмником на Arduino Nano
- Монитор температуры и реальные часы на Arduino Due с TFT-дисплеем 3.2"
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Вывод изображений на 1.17-дюймовый TFT LCD с Arduino UNO
- Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код
- Управление 4-пиновым PWM-вентилятором 25 кГц на Arduino Uno — Сборка, код и тесты