Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Jam Arduino dengan waktu sholat Islam

Komponen dan persediaan

Arduino UNO
× 1
Tampilan Nokia 5510
× 1
Seeed Pi RTC (DS1307)
× 1

Alat dan mesin yang diperlukan

Kabel Jumper Pria/Pria Premium, 40 x 3" (75mm )
Breadboard, 400 Pin

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Ini adalah jam waktu nyata dengan kemampuan untuk menunjukkan tanggal Gregorian dan waktu sholat harian. Untuk rangkaian sederhana ini, kita perlu menggunakan Arduino UNO (atau papan Arduino apa pun), LCD RTC DS1307 dan NOKIA 5110.

Anda dapat membeli suku cadang di sini (tautan afiliasi):

  • Arduino UNO
  • DS1307
  • LCD NOKIA 5110

Bahan

Arduino UNO

Arduino Uno adalah papan mikrokontroler open-source berdasarkan mikrokontroler ATmega328P. Board ini dilengkapi dengan set GPIO analog dan digital (input/output tujuan umum) yang dapat dihubungkan ke berbagai sensor, aktuator, papan ekspansi, dan sirkuit lainnya.

Arduino UNO memiliki:

  • 14 pin input/output digital (6 di antaranya dapat digunakan sebagai output PWM)
  • 6 masukan analog
  • Resonator keramik 16 MHz
  • Memori Flash 32 KB (0,5 KB digunakan oleh bootloader)
  • SRAM 2 KB
  • EEPROM 1 KB
  • Soket Daya DC &Port USB

DS1307

DS1307 serial real-time clock (RTC) adalah jam/kalender biner-kode desimal (BCD) berdaya rendah.

Jam/kalender menyediakan informasi detik, menit, jam, hari, tanggal, bulan, dan tahun. Tanggal akhir bulan secara otomatis disesuaikan untuk bulan dengan kurang dari 31 hari, termasuk koreksi untuk tahun kabisat.

DS1307 beroperasi dalam format 24 jam atau 12 jam dengan indikator AM/PM. Ini memiliki sirkuit sensor daya internal yang mendeteksi kegagalan daya dan secara otomatis beralih ke suplai baterai.

Fungsi Pin DS1307

  • VCC, GND: Daya DC diberikan ke perangkat pada pin ini.
  • SCL (Input Jam Serial): digunakan untuk menyinkronkan pergerakan data pada antarmuka serial.
  • SDA (Masukan/Keluaran Data Serial): SDA adalah pin input/output untuk antarmuka serial 2-kawat. Pin SDA adalah saluran terbuka yang memerlukan resistor pullup eksternal.
  • SQW/OUT (Gelombang Persegi/Driver Output): Saat diaktifkan, bit SQWE diatur ke 1, pin SQW/OUT mengeluarkan salah satu dari empat frekuensi gelombang persegi (1Hz, 4kHz, 8kHz, 32kHz). Pin SQW/OUT adalah open-drain dan membutuhkan resistor pull-up eksternal. Ini akan beroperasi dengan Vcc atau Vbat yang diterapkan.
  • X1, X2: Koneksi untuk kristal kuarsa 32.768kHz standar. Sirkuit osilator internal dirancang untuk operasi dengan kristal yang memiliki kapasitansi beban yang ditentukan sebesar 12,5pF

LCD NOKIA 5110

Nokia 5110 LCD adalah layar monokrom 84*48 piksel, dilengkapi dengan lampu latar dan dapat digunakan untuk menggambar teks, grafik, atau gambar. LCD menggunakan pengontrol PCD8544 (sama dengan yang digunakan pada LCD Nokia 3310), pengontrol ini terhubung ke mikrokontroler melalui antarmuka bus serial yang mirip dengan SPI.

Pinout LCD Nokia 5110

  • VCC, GND: Daya DC diberikan ke perangkat pada pin ini.
  • RST: itu me-reset tampilan. Ini pin rendah aktif. Anda juga dapat menghubungkan pin ini ke reset Arduino sehingga akan mereset layar secara otomatis.
  • CE (Aktifkan Chip): pin rendah aktif, akan membantu untuk memilih salah satu dari banyak perangkat terhubung yang berbagi bus SPI yang sama.
  • D/C (Data/Perintah): itu memberitahu tampilan apakah itu menerima atau menampilkan data. Sinyal TINGGI untuk data dan sinyal RENDAH untuk perintah.
  • DIN: itu adalah pin data serial untuk antarmuka SPI, itu akan mengirim data dari mikrokontroler ke LCD.
  • CLK (Jam): LCD dan mikrokontroler akan memerlukan jam umum untuk beroperasi karena komunikasi SPI mereka. pin ini akan membantu membuatnya.
  • BL (Lampu Latar): itu mengontrol lampu latar layar. Anda dapat mengontrol kecerahannya dengan menambahkan potensiometer atau menghubungkannya ke pin Arduino berkemampuan PWM (Pin # 3, 5, 6, 9, 10 dan 11).

Bagaimana cara mengedit program?

Anda harus mengadaptasi baris 161 dari kode:

calcPrayerTimes(tahun, bulan, hariBulan, 41.3, 20.6, 3, -18.5, -19, subuh, matahari terbit, zuhr, ashar, maghrib, isya); 

Parameter yang dibutuhkan adalah:

  • Bujur/Lintang/Zona Waktu dari tempat yang diinginkan.
  • Fajr Twilight/ Esha Twilight berbeda dalam perhitungan dari satu negara ke negara lain.

Anda juga bisa mendapatkan koordinat geografis kota Anda, seperti lintang dan bujur, yang dibutuhkan program untuk menghitung waktu sholat dengan mengunjungi situs web IslamicFinder lalu mencari kota Anda.

Seperti yang kami perhatikan pada gambar di atas, setelah saya mencari kota Kairo, waktu sholat muncul di samping beberapa informasi. Yang penting bagi kami adalah garis lintang, garis bujur, sudut Isya dan sudut Fajar, Anda akan mengubah angka-angka tersebut dalam program agar sesuai dengan kota Anda.

Bagaimana cara kerja program?

Fungsi ini mengambil data Tahun/Bulan/Hari/Bujur/Lintang/Zona Waktu/FajrTwilight/IsyaTwilight ditambah 6 referensi ke variabel ganda (Fajr/SunRise/Zuhr/Ashar/Maghrib/Isya). Keenam variabel inilah yang akan mengembalikan data. ada juga beberapa fungsi untuk membantu dalam beberapa konversi angka (misalnya, Radian ke Derajat dan sebaliknya).

Jadi, jika kita mengambil Kairo sebagai contoh:

  • Bujur:30,2
  • Lintang:30
  • Zona Waktu:+2
  • Subuh Senja:-19,5
  • Esha Twilight:-17,5

Kita harus mengadaptasi baris 161 seperti ini:

calcPrayerTimes(tahun, bulan, hariBulan, 30.2, 30, 2, -19,5, -17,5, subuh, matahari terbit, zuhur, ashar, maghrib, isya); 

Perhatikan bahwa waktu sholat ini masih "ganda" dan harus diubah ke format waktu. Mahmoud Adly Ezzat membuat fungsi doubleToHrMin (Anda dapat menemukannya sebelum fungsi calcPrayerTimes) yang membagi angka menjadi Jam dan Menit. Dibutuhkan referensi ganda dan dua ke variabel int.

Jangan lupa untuk memberikan jempol jika menurut Anda bermanfaat.

PS: algoritma perhitungan waktu sholat ditulis oleh Mahmoud Adly Ezzat. Anda dapat membaca lebih lanjut tentang itu di posting blognya.

Kode

  • Jam Arduino dengan waktu sholat Islam
Jam Arduino dengan waktu sholat IslamArduino
- Waktu sholat di layar Nokia 5510/3310 oleh Hatem Zehir
- Perhitungan waktu sholat dari http://3adly.blogspot.com/2010/07/prayer-times-calculations-pure-c-code.html
#include "Wire.h"#include  #include Adafruit_PCD8544 display =Adafruit_PCD8544(7, 6, 5, 4, 3);int xegg, yegg;#define DS1307_I2C_ADDRESS 0x68 // Ini adalah alamat I2C lama sebelumnyaMillis =0; // akan menyimpan waktu terakhir diperbaruibyte detik, menit, jam, hariPekan, hariBulan, bulan, tahun;interval panjang =200;int displayx, displayy, displayradius, x2, y2, x3, y3;int zero =0;char * Hari[] ={"", "Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};fajr dua kali, matahari terbit, zuhur, ashar, maghrib, isya; // Mengonversi bilangan desimal normal ke desimal berkode biner decToBcd(byte val){ return ( (val / 10 * 16) + (val % 10) );}// Mengonversi desimal berkode biner ke bilangan desimal normalbyte bcdToDec(byte val){ return ( (val / 16 * 10) + (val % 16) );}// Mendapatkan tanggal dan waktu dari ds1307 dan mencetak resultvoid getDateDs1307(){ // Reset pointer register Wire.beginTransmission(DS1307_I2C_ADDRESS); //Kabel.tulis(0x00); Kawat.tulis(nol); Kawat.endTransmisi(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); detik =bcdToDec(Wire.read() &0x7f); menit =bcdToDec(Wire.read()); jam =bcdToDec(Wire.read() &0x3f); dayOfWeek =bcdToDec(Wire.read()); dayOfMonth =bcdToDec(Wire.read()); bulan =bcdToDec(Wire.read()); tahun =bcdToDec(Wire.read());}tidak berlaku setDateDs1307(){ Wire.beginTransmission(DS1307_I2C_ADDRESS); Kawat.tulis(nol); Wire.write(decToBcd(kedua)); // 0 hingga bit 7 memulai jam Wire.write(decToBcd(minute)); Wire.write(decToBcd(jam)); // untuk 12 jam pagi/malam, perlu mengatur bit 6 (juga perlu mengubah readDateDs1307) Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(hariBulan)); Wire.write(decToBcd(bulan)); Wire.write(decToBcd(tahun)); Wire.endTransmission();}void printTime(){ int jam, menit; karakter[12]; tampilan.clearDisplay(); display.setCursor(0, 16); display.print(Hari[hariMinggu]); tampilan.print(":"); display.print(char(hariBulan / 10 + 0x30)); display.print(char(hariBulan % 10 + 0x30)); tampilan.print("/"); display.print(char(bulan / 10 + 0x30)); display.print(char(bulan % 10 + 0x30)); tampilan.print("/"); display.print("20"); display.print(char(tahun / 10 + 0x30)); display.print(char(tahun % 10 + 0x30)); display.setCursor(18, 26); display.print( char( jam / 10 + 0x30) ); display.print( char( jam % 10 + 0x30) ); tampilan.print(":"); display.print( char(menit / 10 + 0x30)); display.print( char(menit % 10 + 0x30)); tampilan.print(":"); display.print(char (detik / 10 + 0x30)); display.print(char (kedua % 10 + 0x30)); tampilan.display(); penundaan (1000); doubleToHrMin(fajr, jam, menit); tampilan.clearDisplay(); display.setCursor(1, 1); display.print("Subuh"); display.print(jam); tampilan.print(":"); display.print(menit); tampilan.display(); doubleToHrMin(zuhr, jam, menit); display.setCursor(1, 10); display.print("Zuhr "); display.print(jam); tampilan.print(":"); display.print(menit); tampilan.display(); doubleToHrMin(asr, jam, menit); display.setCursor(1, 20); display.print("Ashar "); display.print(jam); tampilan.print(":"); display.print(menit); tampilan.display(); doubleToHrMin(magrib, jam, menit); display.setCursor(1, 30); display.print("Maghrib"); display.print(jam); tampilan.print(":"); display.print(menit); tampilan.display(); doubleToHrMin(isha, jam, menit); display.setCursor(1, 40); display.print("Isya"); display.print(jam); tampilan.print(":"); display.print(menit); tampilan.display(); delay(5000);}pengaturan batal() { Wire.begin(); tampilan.mulai(); tampilan.clearDisplay(); display.setContrast(25); xegg =(tampilan.lebar()) / 2; yegg =(tampilan.tinggi()) / 2; display.setTextColor(HITAM); tampilan.setTextSize(1); display.setCursor(22, 18); display.print("Hatem"); tampilan.display(); penundaan (500); display.setCursor(24, 28); display.print("ZEHIR"); tampilan.display(); penundaan (500); getDateDs1307();}void loop() { getDateDs1307(); calcPrayerTimes(tahun, bulan, hariBulan, 39.8, 21.4, 3, -18.5, -19, subuh, matahari terbit, zuhr, ashar, maghrib, isya); // tahun , bulan, hari, Bujur, Lintang, Zona Waktu, Fajar Senja, Esha Senja unsigned long currentMillis =millis(); if (Millis saat ini - Mili sebelumnya> interval) { Mili sebelumnya =Mili saat ini; //getDateDs1307(); printWaktu(); }}/*------------------------------------------------- ---------------------------------------*/// WAKTU DOA (oleh Mahmoud Adly Ezzat , Kairo)//konversi Derajat ke Radiandouble degToRad(derajat ganda){ return ((3.1415926 / 180) * derajat);}//konversi Radian ke Derajatdouble radToDeg(radian ganda){ return (radian * (180 / 3.1415926)); }//pastikan nilai antara 0 dan 360double moreLess360(double value){ while (value> 360 || value <0) { if (value> 360) value -=360; else if (nilai <0) nilai +=360; } kembalikan nilai;}//pastikan nilai antara 0 dan 24double moreLess24(double value){ while (value> 24 || value <0) { if (value> 24) value -=24; else if (nilai <0) nilai +=24; } mengembalikan nilai;}//mengubah angka ganda menjadi Jam dan Menitvoid doubleToHrMin(angka ganda, int &jam, int &menit){ hours =floor(moreLess24(number)); menit =lantai(lebihKurang24(angka - jam) * 60);}void calcPrayerTimes(int tahun, int bulan, int hari, double longitude, double latitude, int timeZone, double fajrTwilight, double ishaTwilight, double &fajrTime, double &sunRiseTime, double &zuhrTime , double &asrTime, double &magribTime, double &ishaTime){ double D =(367 * tahun) - ((tahun + (int)((bulan + 9) / 12)) * 7 / 4) + (((int)(275 * bulan / 9)) + hari - 730531.5); ganda L =280.461 + 0.9856474 * D; L =lebihKurang360(L); ganda M =357,528 + (0,9856003) * D; M =lebihKurang360(M); double Lambda =L + 1,915 * sin(degToRad(M)) + 0,02 * sin(degToRad(2 * M)); Lambda =lebihKurang360(Lambda); kemiringan ganda =23,439 - 0,0000004 * D; ganda Alpha =radToDeg(atan((cos(degToRad(Obliquity)) * tan(degToRad(Lambda)))))); Alfa =lebihKurang360(Alfa); Alfa =Alfa - (360 * (int)(Alfa / 360)); Alfa =Alfa + 90 * (lantai(Lambda / 90) - lantai(Alfa / 90)); ganda ST =100.46 + 0.985647352 * D; double Des =radToDeg(asin(sin(degToRad(Obliquity)) * sin(degToRad(Lambda)))); double Durinal_Arc =radToDeg(acos((sin(degToRad(-0.8333)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude)) ))); ganda Siang =Alpha - ST; Siang =lebihKurang360(Siang); double UT_Noon =Siang - bujur; ////////////////////////////////////////// // Menghitung Busur Waktu Sholat &Waktu // ///////////////////////////////////////////////////// // 2) Waktu Zuhr [Siang Lokal] zuhrTime =UT_Noon / 15 + TimeZone; // Ashar Hanafi //gandakan Asr_Alt =radToDeg(atan(2+tan(degToRad(lintang - Des)))); double Asr_Alt =radToDeg(atan(1.7 + tan(degToRad(lintang - Des)))); // Ashar Syafii //gandakan Asr_Alt =radToDeg(atan(1 + tan(degToRad(lintang - Des)))); double Asr_Arc =radToDeg(acos((sin(degToRad(90 - Asr_Alt)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude) )))); Asr_Arc =Asr_Arc / 15; // 3) Waktu Ashar asrTime =zuhrTime + Asr_Arc; // 1) Shorouq Time sunRiseTime =zuhrTime - (Durinal_Arc / 15); // 4) Waktu Maghrib MaghribTime =Waktu Zuhr + (Durinal_Arc / 15); double Esha_Arc =radToDeg(acos((sin(degToRad(ishaTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) )); // 5) Waktu Isha ishaTime =zuhrTime + (Esha_Arc / 15); // 0) Waktu Subuh ganda Fajr_Arc =radToDeg(acos((sin(degToRad(fajrTwilight)) - sin(degToRad(Dec)) * sin(degToRad(lintang))) / (cos(degToRad(Dec)) * cos( degToRad(lintang))))); fajrTime =zuhrTime - (Fajr_Arc / 15); kembali;}

Skema


Proses manufaktur

  1. Arduino pov vision clock
  2. Jam IV9 Numitron DIY paling sederhana dengan Arduino
  3. Jam Kata Sederhana (Arduino)
  4. Jam Master
  5. Kontrol Penerima Koin dengan Arduino
  6. Suhu Arduino. Monitor Dan Jam Waktu Nyata Dengan Tampilan 3.2
  7. Arduino dengan Bluetooth untuk Mengontrol LED!
  8. Menampilkan Gambar Pada Layar TFT LCD Dengan Arduino UNO!
  9. Jam Alarm Sederhana dengan DS1302 RTC
  10. 25 kHz 4 Pin Kontrol Kipas PWM dengan Arduino Uno