工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino で作るイスラム教礼拝時刻付きリアルタイムクロック

必要な部品と材料

部品名 数量
Arduino UNO 1
Nokia 5110 LCD ディスプレイ(84×48 ピクセル、モノクロ) 1
DS1307 RTC モジュール(Seeed Pi RTC 等) 1

必要な工具と機器

アプリとオンラインサービス

プロジェクト概要

グレゴリオ暦の日付と毎日の礼拝時刻(サラート)を表示するリアルタイムクロックを Arduino UNO、DS1307 RTC、Nokia 5110 LCD で構築します。

主要コンポーネントの解説

Arduino UNO

ATmega328P ベースのオープンソースマイコンボード。14 本のデジタル I/O(うち 6 本は PWM 出力可能)、6 本のアナログ入力、16 MHz セラミック振動子、32 KB フラッシュメモリ、2 KB SRAM、1 KB EEPROM を備えます。

DS1307 RTC

低消費電力のフル BCD(2進化十進数)クロック/カレンダー。秒、分、時、曜日、日、月、年を管理し、月末日の自動調整(閏年対応含む)機能を持ちます。24時間/12時間(AM/PM)形式両対応。内蔵電源検出回路により、電源断時に自動的にバッテリー駆動へ切り替わります。

主なピン機能:

Nokia 5110 LCD

84×48 ピクセルのモノクロ液晶。バックライト付きでテキスト、グラフィック、画像表示が可能。PCD8544 コントローラー(Nokia 3310 と同一)を搭載し、SPI 類似のシリアルバスで通信します。

ピン配置:

プログラムのカスタマイズ方法

コードの 161 行目をお住まいの地域に合わせて書き換えます:

calcPrayerTimes(year, month, dayOfMonth, 経度, 緯度, タイムゾーン, 
                ファジル薄明角, イシャ薄明角, 
                fajr, sunRise, zuhr, asr, maghrib, isha);

必要なパラメータ:

座標は IslamicFinder 等で検索可能です。例えばカイロの場合:

この場合、161 行目は以下のようになります:

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

プログラムの動作原理

年/月/日/経度/緯度/タイムゾーン/薄明角を入力として受け取り、6つの礼拝時刻(ファジル、日の出、ズフル、アスル、マグリブ、イシャ)を double 型で返却します。内部ではラジアン⇔度変換、0〜360°/0〜24h 正規化などの補助関数を使用。double 値は doubleToHrMin() 関数で時・分に分解して表示します。

礼拝時刻計算アルゴリズムは 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;

byte decToBcd(byte val) { return (val / 10 * 16) + (val % 10); }
byte bcdToDec(byte val) { return (val / 16 * 10) + (val % 16); }

void getDateDs1307() {
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0x00);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
  second = bcdToDec(Wire.read() & 0x7f);
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read() & 0x3f);
  dayOfWeek = bcdToDec(Wire.read());
  dayOfMonth = bcdToDec(Wire.read());
  month = bcdToDec(Wire.read());
  year = bcdToDec(Wire.read());
}

void printTime() {
  getDateDs1307();
  calcPrayerTimes(year, month, dayOfMonth, 39.8, 21.4, 3, -18.5, -19,
                  fajr, sunRise, zuhr, asr, maghrib, isha);
  
  display.clearDisplay();
  display.setCursor(0, 16);
  display.print(Day[dayOfWeek]);
  display.print(": ");
  display.print(dayOfMonth); display.print("/");
  display.print(month); display.print("/20"); display.println(year);
  
  display.setCursor(18, 26);
  display.print(hour); display.print(":");
  display.print(minute); display.print(":"); display.println(second);
  display.display();
  delay(1000);
  
  int h, m;
  doubleToHrMin(fajr, h, m);
  display.clearDisplay(); display.setCursor(1, 1);
  display.print("Fajr "); display.print(h); display.print(":"); display.println(m);
  // 以下、Zuhr, Asr, Maghrib, Isha も同様に表示...
  delay(5000);
}

// 礼拝時刻計算関数群(degToRad, radToDeg, moreLess360, moreLess24,
// doubleToHrMin, calcPrayerTimes)はオリジナルコードを参照

回路図

Arduino UNO、DS1307、Nokia 5110 LCD の接続図。I²C(RTC)と SPI(LCD)でそれぞれ通信します。

製造プロセス

  1. Arduino POVクロック:残像効果で浮かび上がるLED時計を自作する
  2. Arduinoで作るレトロNumitron管時計:シンプル、信頼性高く、省エネ
  3. DIY Arduinoワードクロック – 文字で時刻を表示する洗練されたリアルタイムクロック
  4. 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
  5. スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
  6. Arduino Dueと3.2インチTFTで作る温度監視付きリアルタイムクロック
  7. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  8. Arduino UNOで1.17インチTFT LCDに画像を表示する方法
  9. Arduino UNOとATtiny85で作る携帯型POV(残像)ディスプレイ
  10. DS1302 RTCとArduino UNOで作る信頼性の高い目覚まし時計
  11. Arduino Unoで25kHz 4ピンPWMファンを制御 – 製作・コード・テスト