Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Horloge Arduino avec heures de prière islamique

Composants et fournitures

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

Outils et machines nécessaires

Câbles de connexion mâle/mâle Premium, 40 x 3" (75mm )
Planche à pain, 400 broches

Applications et services en ligne

Arduino IDE

À propos de ce projet

Il s'agit d'une horloge en temps réel avec la possibilité d'afficher la date grégorienne et les heures de prière quotidiennes. Pour ce circuit simple, nous devons utiliser un Arduino UNO (ou n'importe quelle carte Arduino), un RTC DS1307 et un NOKIA 5110 LCD.

Vous pouvez acheter les pièces ici (liens affiliés) :

  • Arduino UNO
  • DS1307
  • LCD NOKIA 5110

Matériaux

Arduino UNO

L'Arduino Uno est une carte microcontrôleur open source basée sur le microcontrôleur ATmega328P. Cette carte est équipée d'ensembles de GPIO analogiques et numériques (entrées/sorties à usage général) qui peuvent être interfacés avec divers capteurs, actionneurs, cartes d'extension et autres circuits.

L'Arduino UNO a :

  • 14 broches d'entrée/sortie numériques (dont 6 peuvent être utilisées comme sorties PWM)
  • 6 entrées analogiques
  • Résonateur céramique 16 MHz
  • 32 Ko de mémoire flash (0,5 Ko utilisé par le chargeur de démarrage)
  • 2 Ko SRAM
  • 1 Ko EEPROM
  • Prise d'alimentation CC et port USB

DS1307

L'horloge temps réel (RTC) série DS1307 est une horloge/calendrier décimal codé binaire (BCD) à faible consommation.

L'horloge/le calendrier fournit des informations sur les secondes, les minutes, les heures, le jour, la date, le mois et l'année. La date de fin de mois est automatiquement ajustée pour les mois de moins de 31 jours, y compris les corrections pour les années bissextiles.

Le DS1307 fonctionne au format 24 heures ou 12 heures avec indicateur AM/PM. Il dispose d'un circuit de détection de puissance intégré qui détecte les pannes de courant et bascule automatiquement sur l'alimentation par batterie.

Fonction Pin du DS1307

  • VCC, GND : L'alimentation CC est fournie à l'appareil sur ces broches.
  • SCL (Entrée d'horloge série) : utilisé pour synchroniser le mouvement des données sur l'interface série.
  • SDA (Entrée/Sortie de données en série) : SDA est la broche d'entrée/sortie de l'interface série à 2 fils. La broche SDA est un drain ouvert qui nécessite une résistance de rappel externe.
  • SQW/OUT (Square Wave/Pilote de sortie) : Lorsqu'il est activé, le bit SQWE est défini sur 1, la broche SQW/OUT émet l'une des quatre fréquences d'onde carrée (1 Hz, 4 kHz, 8 kHz, 32 kHz). La broche SQW/OUT est un drain ouvert et nécessite une résistance de rappel externe. Il fonctionnera avec Vcc ou Vbat appliqué.
  • X1, X2 : Connexions pour un cristal de quartz standard de 32,768 kHz. Le circuit de l'oscillateur interne est conçu pour fonctionner avec un cristal ayant une capacité de charge spécifiée de 12,5 pF

LCD NOKIA 5110

Le Nokia 5110 LCD est un écran monochrome de 84*48 pixels, il est doté d'un rétroéclairage et peut être utilisé pour dessiner du texte, des graphiques ou des images. L'écran LCD utilise le contrôleur PCD8544 (le même que celui utilisé dans l'écran LCD Nokia 3310), ce contrôleur s'interface avec les microcontrôleurs via une interface de bus série similaire à SPI.

Brochetage LCD Nokia 5110

  • VCC, GND : L'alimentation CC est fournie à l'appareil sur ces broches.
  • RST : il réinitialise l'affichage. C'est une broche basse active. Vous pouvez également connecter cette broche à la réinitialisation Arduino afin qu'elle réinitialise automatiquement l'écran.
  • CE (Puce activée) : une broche basse active, il permet de sélectionner l'un des nombreux appareils connectés partageant le même bus SPI.
  • D/C (Données/Commande) : il indique à l'écran s'il reçoit ou affiche des données. Le signal HAUT est pour les données et le signal BAS pour la commande.
  • DIN : c'est une broche de données série pour l'interface SPI, elle enverra les données du microcontrôleur à l'écran LCD.
  • CLK (Horloge) : l'écran LCD et le microcontrôleur nécessiteront une horloge commune pour fonctionner en raison de leur communication SPI. cette épingle aidera à le faire.
  • BL (Rétroéclairage) : il contrôle le rétroéclairage de l'écran. Vous pouvez contrôler sa luminosité en ajoutant un potentiomètre ou en le connectant à une broche Arduino compatible PWM (broche n°3, 5, 6, 9, 10 et 11).

Comment éditer le programme ?

Vous devez adapter la ligne 161 du code :

calcPrayerTimes(year, month, dayOfMonth, 41.3, 20.6, 3, -18.5, -19, fajr, sunRise, zuhr, asr, maghrib, isha); 

Les paramètres nécessaires sont :

  • Longitude/Latitude/Fuseau horaire du lieu souhaité.
  • Fajr Twilight/Esha Twilight diffèrent dans les calculs d'un pays à l'autre.

Vous pouvez également obtenir les coordonnées géographiques de votre ville, telles que la latitude et la longitude, dont le programme a besoin pour calculer les heures de prière en visitant le site Web IslamicFinder puis recherchez votre ville.

Comme nous le notons dans l'image ci-dessus, après avoir recherché la ville du Caire, les heures de prière sont apparues en plus de certaines informations. Ce qui compte pour nous, c'est la latitude, la longitude, l'angle Isha et l'angle Fajr, vous modifierez ces chiffres dans le programme en fonction de votre ville.

Comment fonctionne le programme ?

La fonction prend les données Année/Mois/Jour/Longitude/Latitude/TimeZone/FajrTwilight/IshaTwilight plus 6 références à des variables doubles (Fajr/SunRise/Zuhr/Asr/Maghrib/Isha). Ces 6 variables sont celles dans lesquelles retourner les données. il y a aussi quelques fonctions pour aider dans certaines conversions de nombres (par exemple, Radians en Degrés et vice versa).

Donc, si nous prenons le Caire comme exemple :

  • Longitude : 30,2
  • Latitude : 30
  • Fuseau horaire :+2
  • Crépuscule Fajr :-19,5
  • Esha Crépuscule :-17,5

Nous devrions adapter la ligne 161 comme ceci :

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

Notez que ces heures de prière sont toujours « doubles » et doivent être converties en un format d'heure. Mahmoud Adly Ezzat a créé la fonction doubleToHrMin (vous pouvez la trouver avant la fonction calcPrayerTimes) qui divise le nombre en heures et minutes. Il prend les références double et deux aux variables int.

N'oubliez pas de laisser un pouce vers le haut si vous le trouvez utile.

PS : l'algorithme de calcul du temps de prière est écrit par Mahmoud Adly Ezzat. Vous pouvez en savoir plus à ce sujet dans son article de blog.

Code

  • Horloge Arduino avec heures de prière islamique
Horloge Arduino avec heures de prière islamiqueArduino
- Heure de prière sur l'écran Nokia 5510/3310 par Hatem Zehir
- Le calcul du temps de prière provient de 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 // Ceci est l'adresse I2C depuis longtemps Millis =0; // stockera la dernière fois que l'heure a été mise à jourbyte seconde, minute, heure, dayOfWeek, dayOfMonth, month, year;long interval =200;int displayx, displayy, displayradius, x2, y2, x3, y3;int zero =0;char * Jour[] ={"", "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"};double fajr, sunRise, zuhr, asr, maghrib, isha; // Convertir les nombres décimaux normaux en octets décimaux codés binaire decToBcd(byte val){ return ( (val / 10 * 16) + (val % 10) );}// Convertir les nombres décimaux codés binaires en nombres décimaux normauxbyte bcdToDec(byte val){ return ( (val / 16 * 10) + (val % 16) );}// Obtient la date et l'heure du ds1307 et imprime resultvoid getDateDs1307(){ // Réinitialise le pointeur de registre Wire.beginTransmission(DS1307_I2C_ADDRESS); //Wire.write(0x00); Wire.write(zéro); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); seconde =bcdToDec(Wire.read() &0x7f); minute =bcdToDec(Wire.read()); heure =bcdToDec(Wire.read() &0x3f); dayOfWeek =bcdToDec(Wire.read()); dayOfMonth =bcdToDec(Wire.read()); mois =bcdToDec(Wire.read()); année =bcdToDec(Wire.read());}void setDateDs1307(){ Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(zéro); Wire.write(decToBcd(second)); // 0 au bit 7 démarre l'horloge Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); // pour 12 heures am/pm, besoin de définir le bit 6 (doit également changer readDateDs1307) Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(mois)); Wire.write(decToBcd(year)); Wire.endTransmission();}void printTime(){ int heures, minutes ; caractère s[12] ; display.clearDisplay(); display.setCursor(0, 16); display.print(Day[dayOfWeek]); display.print(":"); display.print(char(dayOfMonth / 10 + 0x30)); display.print(char(dayOfMonth % 10 + 0x30)); display.print("/"); display.print(char(mois / 10 + 0x30)); display.print(char(mois % 10 + 0x30)); display.print("/"); display.print("20"); display.print(char(année / 10 + 0x30)); display.print(char(année % 10 + 0x30)); display.setCursor(18, 26); display.print( char( heure / 10 + 0x30) ); display.print( char( heure % 10 + 0x30) ); display.print(":"); display.print( char(minute / 10 + 0x30)); display.print( char(minute % 10 + 0x30)); display.print(":"); display.print(char (seconde / 10 + 0x30)); display.print(char (seconde % 10 + 0x30)); display.display(); retard(1000); doubleToHrMin(fajr, heures, minutes); display.clearDisplay(); display.setCursor(1, 1); display.print("Fajr "); display.print(heures); display.print(":"); display.print(minutes); display.display(); doubleToHrMin(zuhr, heures, minutes); display.setCursor(1, 10); display.print("Zuhr "); display.print(heures); display.print(":"); display.print(minutes); display.display(); doubleToHrMin(asr, heures, minutes); display.setCursor(1, 20); display.print("Asr "); display.print(heures); display.print(":"); display.print(minutes); display.display(); doubleToHrMin(maghrib, heures, minutes); display.setCursor(1, 30); display.print("Maghrib "); display.print(heures); display.print(":"); display.print(minutes); display.display(); doubleToHrMin(isha, heures, minutes); display.setCursor(1, 40); display.print("Isha "); display.print(heures); display.print(":"); display.print(minutes); display.display(); délai (5000);}configuration void() { Wire.begin(); display.begin(); display.clearDisplay(); display.setContrast(25); xegg =(display.width()) / 2 ; yegg =(affichage.hauteur()) / 2 ; display.setTextColor(NOIR); display.setTextSize(1); display.setCursor(22, 18); display.print("Hatem"); display.display(); retard (500); display.setCursor(24, 28); display.print("ZEHIR"); display.display(); retard (500); getDateDs1307();}boucle vide() { getDateDs1307(); calcPrayerTimes(année, mois, jour du mois, 39,8, 21,4, 3, -18,5, -19, fajr, sunRise, zuhr, asr, maghrib, isha); // année, mois, jour, longitude, latitude, fuseau horaire, Fajr Twilight, Esha Twilight unsigned long currentMillis =millis (); if (currentMillis - previousMillis> intervalle) { previousMillis =currentMillis; //getDateDs1307(); printTime(); }}/*------------------------------------------------------------ ----------------------------------------------------*/// L'HEURE DE LA PRIERE (par Mahmoud Adly Ezzat , Le Caire)//convertir Degré en Radiandouble degToRad(double degré){ return ((3.1415926 / 180) * degré);}//convertir Radian en Degrédouble radToDeg(double radian){ return (radian * (180 / 3.1415926)); }//assurez-vous qu'une valeur est comprise entre 0 et 360double moreLess360(double value){ while (value> 360 || value <0) { if (value> 360) value -=360; sinon si (valeur <0) valeur +=360 ; } return value;}//assurez-vous qu'une valeur est comprise entre 0 et 24double moreLess24(double value){ while (value> 24 || value <0) { if (value> 24) value -=24; sinon si (valeur <0) valeur +=24 ; } return value;}//convertir le nombre double en Hours and Minutesvoid doubleToHrMin(double number, int &hours, int &minutes){ hours =floor(moreLess24(number)); minutes =floor(moreLess24(number - hours) * 60);}void calcPrayerTimes(int year, int mois, int jour, double longitude, double latitude, int timeZone, double fajrTwilight, double ishaTwilight, double &fajrTime, double &sunRiseTime, double &zuhrTime , double &asrTime, double &maghribTime, double &ishaTime){ double D =(367 * année) - ((année + (int)((mois + 9) / 12)) * 7 / 4) + (((int)(275 * mois / 9)) + jour - 730531,5); double L =280,461 + 0,9856474 * D; L =plusMoins360(L); double M =357,528 + (0,9856003) * D ; M =plusMoins360(M); double Lambda =L + 1,915 * sin(degVersRad(M)) + 0,02 * sin(degVersRad(2 * M)); Lambda =plusMoins360(Lambda); double obliquité =23,439 - 0,0000004 * D ; double Alpha =radVersDeg(atan((cos(degVersRad(Obliquité)) * tan(degVersRad(Lambda))))); Alpha =plusMoins360(Alpha); Alpha =Alpha - (360 * (int)(Alpha / 360)); Alpha =Alpha + 90 * (étage(Lambda / 90) - étage(Alpha / 90)); double ST =100,46 + 0,985647352 * D ; double Dec =radVersDeg(asin(sin(degVersRad(Obliquité)) * sin(degVersRad(Lambda)))); double Durinal_Arc =radVersDeg(acos((sin(degToRad(-0.8333)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude)) ))); double Midi =Alpha - ST; Midi =plusMoins360 (midi); double UT_Noon =Midi - longitude ; ///////////////////////////////////////// // Calcul des temps de prière Arcs &Heures // ////////////////////////////////////////////////////////// // 2) Zuhr Time [midi local] zuhrTime =UT_Noon / 15 + timeZone ; // Asr Hanafi //double Asr_Alt =radVersDeg(atan(2+tan(degVersRad(latitude - Dec)))); double Asr_Alt =radToDeg(atan(1.7 + tan(degToRad(latitude - Dec)))); // Asr Shafii //double Asr_Alt =radVersDeg(atan(1 + tan(degVersRad(latitude - Dec)))); 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) Asr Time asrTime =zuhrTime + Asr_Arc; // 1) Shorouq Time sunRiseTime =zuhrTime - (Durinal_Arc / 15); // 4) Maghrib Time maghribTime =zuhrTime + (Durinal_Arc / 15); double Esha_Arc =radToDeg(acos((sin(degToRad(ishaTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos(degToRad(latitude))) )); // 5) Isha Time ishaTime =zuhrTime + (Esha_Arc / 15); // 0) Fajr Time double Fajr_Arc =radToDeg(acos((sin(degToRad(fajrTwilight)) - sin(degToRad(Dec)) * sin(degToRad(latitude))) / (cos(degToRad(Dec)) * cos( degVersRad(latitude))))); fajrTime =zuhrTime - (Fajr_Arc / 15); retour ;}

Schémas


Processus de fabrication

  1. horloge de vision Arduino pov
  2. horloge IV9 Numitron DIY la plus simple avec Arduino
  3. Horloge de mots simple (Arduino)
  4. horloge maîtresse
  5. Contrôler l'accepteur de pièces avec Arduino
  6. Arduino Temp. Moniteur et horloge en temps réel avec affichage 3.2
  7. Arduino avec Bluetooth pour contrôler une LED !
  8. Réveil simple avec DS1302 RTC
  9. Contrôle de ventilateur PWM 4 broches 25 kHz avec Arduino Uno