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 de Berlin

Composants et fournitures

Arduino UNO
× 1
Maxim intégré max7219
Juste le circuit intégré qui est utilisé dans les évasions de la matrice LED...
× 1
Horloge en temps réel (RTC)
× 1
LED 5 mm :Jaune
× 13
LED 5 mm :Rouge
× 11
Résistance 10k ohm
× 1

À propos de ce projet

Tout d'abord...

Il s'agit d'un copier/coller d'un tutoriel que j'ai écrit sur le site Web Instructables. J'ai encore besoin de comprendre comment je passe d'un site à un autre. Alors peut-être que ce n'est pas aussi astucieux qu'il devrait l'être... Mais, commencez avec une horloge pas si quotidienne.

Intro : Horloge de Berlin

L'horloge de Berlin, BerlinUhr ou Mengenlehreuhr, était probablement la toute première horloge numérique.

Il existe depuis 1975...

Beaucoup d'informations que vous pouvez trouver ici :https://en.wikipedia.org/wiki/Mengenlehreuhr

Comment est-il fait, comment donne-t-on l'heure ?

En bref, il y a quatre rangées de lumières. La rangée du haut donne les heures x 5, la suivante les "heures simples" de 1 à 4. La troisième rangée nous donne les "minutes x5", la rangée du bas les minutes.

Sur la photo présentée, (en fait une lampe est cassée...) le temps est de :2x5 heures plus 3 heures + 6x5 minutes + 2 minutes.

Il est donc 13h32. OK, je suppose que nous, Européens, sommes plus habitués à lire l'heure en 24h. format, l'horloge aussi.

Le plus gros voyant du dessus clignote toutes les secondes.

J'ai pensé que cette horloge pourrait être amusante à faire dans Arduino.

Étape 1 : un peu d'électronique

De quoi avons-nous besoin pour ce projet ?

Tout d'abord, (bien sûr), notre Arduino.

J'utilise l'un de mes Uno qui traîne partout près de mon ordinateur.

Puisque nous parlons d'une horloge, nous pourrions utiliser un RTC. J'en ai utilisé un bon marché avec un DS 1307.

Pour "l'affichage", nous avons besoin de quelques LED. J'ai utilisé 13 jaunes, 5 mm et 11 rouges. (J'ai en fait utilisé des RVB pour les rouges, car je n'avais pas assez de rouges qui traînaient...)

Une planche à pain, une planche d'impression avec seulement des trous et des "îlots de soudure". Je viens d'utiliser une partie du soi-disant "format de carte Euro".

J'ai utilisé 2 résistances. Un de 220Ohms (la LED des secondes), et un autre de 68K.

Et un IC supplémentaire :MAX7219.

Le MAX est un pilote d'affichage LED à 8 chiffres. Beaucoup d'entre nous le connaissent car il est également utilisé dans les matrices LED.

Pour plus de facilité, j'ai également utilisé la bibliothèque Arduino "LedControl". Si vous ne l'avez toujours pas, vous pouvez le télécharger ici :

https://github.com/wayoda/LedControl

Étape 2 : configuration.

Vous pouvez trouver une très belle fiche technique pour ce MAX 7219 à cet endroit :

https://www.sparkfun.com/datasheets/Components/Gen...

COM-09622-MAX7219-MAX7221.pdf

Je n'irai pas plus loin dans cette fiche technique, mais cela vaut la peine de l'utiliser, c'est une sorte de circuit intégré "amusant".

Un saut vers l'Arduino.

Sur ce schéma, vous voyez une construction très simple :j'utilise SDA et SCL pour utiliser l'horloge (A 1307 breakout), et quatre autres sorties :DataIn, Clock et Chipselect qui vont au MAX 7219, et OUT 13 que nous utilisons pour notre LED "secondes" clignotante.

La plupart des choses se produisent dans l'Arduino :il lit l'horloge, la convertit en différents types de sortie, puis envoie les données au 7219.

Lorsque vous lirez le code, vous verrez que j'utilise simplement ma propre langue, le néerlandais, pour cela. Par exemple :l'int "vijfuren" que j'utilise est la variable qui compte "Cinq-heures", idem pour les "vijfminuten" et "vijfminuten1" :ceux-ci donnent la sortie "Cinq-minutes".

Dans le croquis, j'utilise également l'année, le mois, le jour du mois et le jour de la semaine, dans ce croquis en particulier, je n'en ai pas besoin, mais peut-être plus tard, je pourrais y ajouter un calendrier.

Dans la configuration Fritzing(c), le circuit intégré n'est pas câblé :je l'ai fait pour la facilité, car il a beaucoup de sorties.

Résumons-les :

les broches 4 et 9 sont connectées au GND,

19 est VCC

18, ISet, est connecté à VCC avec une résistance :celle-ci limite le courant qui va aux sorties. J'ai d'abord essayé avec une résistance de 20K, mais au bout d'une dizaine de minutes, tout s'est éteint... Maintenant, avec une résistance de 68K, l'horloge tourne toujours (après plus de 24h). Mais il y a une différence entre la luminosité des rouges et des jaunes, je pense que c'est dû au fait que les rouges sont en fait des Leds RVB. Je dois régler ça...

la broche 1 est DataIn, celle-ci vient de l'Arduino, la broche 12

la broche 12 est Load, provenant de la broche 10 de l'Arduino

la broche 13 est Clk, provenant d'Arduino 11.

Jusqu'ici pour les entrées du 7219.

Jetez un œil aux sorties :

Le 7219 a la possibilité d'alimenter 8 écrans 7seg.

Ces sorties, DIG 0 à DIG 4 sont utilisées ici pour piloter les "lignes" des LED :comme la ligne "cinq minutes" contient 11 LED, j'utilise DIG 1 et DIG 2 pour les piloter.

Les autres sorties :Segments A à G et DP (d'un affichage 7Seg normal).

Dans ce cas (avec LedControl), je leur envoie des mots binaires (byteform, comme B01010100).

Et là j'ai fait une erreur. Une certaine logique m'a dit que SEG A serait le MSB, B le deuxième bit le plus significatif, et ainsi de suite, jusqu'à DP, que je pensais être le bit le moins significatif (LSB). Faux... Pour une raison ou une autre, les fabricants de l'IC pensaient que DP serait le MSB. Je ne vois pas la logique de ça...

Cela m'a fait changer mon codage, car j'ai déjà soudé les LED...

Étape 3 :Les LED

Sur ce schéma, vous voyez comment les LED sont connectées ensemble. Je n'ai dessiné que les trois premiers, les autres vont dans le même sens.

La LED des secondes est connectée directement à la broche 13.

L'image montre "comment ça marche". Il est 17h47...

Ok, la rangée du bas n'est pas très claire, c'est sur une maquette. J'espère que vous me croyez que cela fonctionne vraiment. (c'est vrai !).

Oh, encore un pas à venir...

Étape 4 :Étape "dernière", le Code.

#include  #include const int DS1307 =0x68;// A5 =SCL, A4 =SDA const char* jours[] ={"Dimanche", "Lundi" , "mardi", "mercredi", "jeudi", "vendredi", "samedi"};const char* mois[] ={"janvier", "février", "mars", "avril", "mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"};octet seconde =0 ; octet minute =0 ; octet heure =0 ; octet jour de la semaine =0 ; octet jour du mois =0 ; octet mois =0 ; octet année =0 ; octet lastMinute =0 ; octet lastSecond =0; int LED =13 ; octet nul =B0000000 ; octet een =B01000000; octet twee =B01100000 ; octet sec =B01110000; octet vier =B01111000; octet vijf =B01111100 ; octet zes =B01111110; octet zeven =B01111111; octet acht =B11111111; octet negen =B01000000; octet tien =B01100000;octet elf =B01110000; Int a=0; entier b =0; entier c =0; int vijfMinTwee=0;int uitgang =FAIBLE; /* la broche 12 est connectée au DataIn La broche 11 est connectée au CLK La broche 10 est connectée à LOAD */LedControl lc=LedControl(12, 11, 10, 1); void setup() { Wire.begin(); Serial.begin(9600);pinMode (Led, OUTPUT);lc.shutdown(0, false); /* Réglez la luminosité sur des valeurs moyennes */ lc.setIntensity(0, 8); /* et efface l'affichage */ lc.clearDisplay(0);}void loop() { readTime(); digitalWrite(Led, uitgang);if (second !=lastSecond){ if (uitgang ==LOW) uitgang =HIGH; sinon uitgang =FAIBLE; digitalWrite (Led, uitgang); lastSecond =seconde; } if (minute !=lastMinute) { printTime(); lastMinute =minute;}}byte bcdToDec(byte val) {return ((val/16*10) + (val%16));}void printTime() { char buffer[3];long minuten =minute;long uren =heure;int vijfmin =minuten /5; int eenminuut =minuten -(vijfmin * 5);int vijfuren =uren/5; int eenuren =uren - (vijfuren * 5); a =vijfmin; numérique(); vijfmin =b; vijfMinTwee =c;a =eenminuut;digitaal(); eenminuut =b; a=vijfuren; digitaal();vijfuren =b;a =eenuren; digital();eenuren =b; lc.setRow(0, 4, vijfuren);lc.setRow(0, 3, eenuren); lc.setRow(0, 1, vijfmin);lc.setRow(0, 2, vijfMinTwee); lc.setRow(0, 0, eenminuut);} void readTime() { Wire.beginTransmission(DS1307) ; Wire.write(byte(0)); Wire.endTransmission();Wire.requestFrom(DS1307, 7); seconde =bcdToDec(Wire.read());minute =bcdToDec(Wire.read());heure =bcdToDec(Wire.read()); jour de la semaine =bcdToDec(Wire.read()); jour du mois =bcdToDec(Wire.read());mois =bcdToDec(Wire.read()); année =bcdToDec(Wire.read()); }void digitaal(){switch (a){ case 0:b=nul; c=nul ; Pause; cas 1 :b =een; c=nul ; Pause; cas 2 :b =twee; c=nul ; Pause; cas 3 :b =sec; c=nul ; Pause; cas 4 :b =vier; c=nul ; cassure ;cas 5 :b =vijf ; c=nul ; Pause; cas 6 :b =zes; c=nul ; Pause; cas 7 :b =zeven ; c=nul ; Pause; cas 8 :b =acht ; c=nul ; Pause; cas 9 :b =acht ; c =negen; Pause; cas 10 :b=acht; c =tien; Pause; cas 11 :b=acht; c =elfe; Pause; } } 

Assez simple, je crois.

Autre avantage de ce sketch :vous apprenez maintenant à compter en néerlandais... De 0 à 11...;-)

J'espère que cela vous plaira !

Marc

Code

Github
https://github.com/wayoda/LedControlhttps://github.com/wayoda/LedControl

Processus de fabrication

  1. Équations de constantes temporelles
  2. horloge à coucou
  3. Sablier
  4. Regardez
  5. Sommeil Python()
  6. Rpibot – À propos de l'apprentissage de la robotique
  7. Générateur d'horloge Verilog
  8. Python - Date et heure
  9. Horloge miroir infini