Dans notre Article de blog à partir du 17 juin, nous avons déjà une horloge en temps réel avec notre Nano V3connecté.
Certains clients ont copié cela et ont essentiellement posé 2 questions:
1. Comment puis-je faire clignoter les deux points?
2. Comment faire une horloge binaire avec quelque chose comme ça?
Je voudrais répondre aux deux questions dans le blog d'aujourd'hui.
J'utilise le populaire pour l'affichage binaire Panneau LED AZ-Derlivery U-64 avec 64 LED RGB WS2812b.
Sinon, nous avons besoin d'un condensateur (1000 µF) et d'une résistance (220 Ω)
Comme toujours lorsque nous travaillons avec des LED WS2812b: elles sont très lumineuses, mais consomment également beaucoup de courant. L'une des 64 LED peut tirer jusqu'à 50 mA à pleine luminosité. Cependant, le Nano peut fournir un maximum de 200mA. Donc, si vous n'utilisez pas le panneau avec une faible luminosité ou avec une alimentation externe, vous risquez votre propre santé et celle de vos semblables.
Nous reprenons le circuit de l'article mentionné au début et le développons. DIN sur le panneau RGB est interposé avec 220Ω résistance la broche D6 de l'Arduino connecté.
Pour l'alimentation, je recommande une alimentation 5V avec 5A. Vir connecte le pôle positif de l'alimentation à la broche + 5V du panneau et le pôle négatif de l'alimentation à la broche GND du panneau. Ensuite, nous pontons les broches + 5V et GND du panneau avec le condensateur 1000µF (notez la polarité!).
Pour que le panneau fonctionne, nous devons toujours connecter GND sur le panneau à la broche GND de l'Arduino.
Le moment est venu de tester si l'horloge et l'affichage fonctionnent toujours.
Si tout fonctionne comme souhaité et qu'il n'y a pas de fumée magique, nous avons tout fait correctement.
Ensuite, le croquis. Pour cela, j'ai développé l'esquisse du blog mentionné au début:
//////////////////////////////////////////////////// //////////////////////////////////////////////////// // c! p / // Horloge binaire avec module RTC et matrice LED 8x8 RGB // // Extension de l'horloge en temps réel à partir du billet AZ Delivery Blog // https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/echtzeituhr-mit-display-am-nano-v3 // // Utilise le code modifié de npowley https://codebender.cc/sketch:241472#NeoPixel%20Binary%20Clock.ino // Utilise le code modifié de http://www.pjrc.com/teensy/td_libs_DS1307RTC.html ////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <Arduino.h> #include <TM1637Display.h> // pour l'affichage 4 bits 7 segments #include <Wire.h> // pour lire le RTC #define RTC_I2C_ADDRESS 0x68 // Adresse I2C du RTC DS3231 #include <FastLED.h> // pour contrôler le panneau LED (https://github.com/FastLED/FastLED) #define CLK 2 // Broche Arduino D2 en CLK (RTC) #define DIO 3 // Ardiono Pin D3 en DIO (RTC) #define NUM_LEDS 64 // nombre de LED #define DATA_PIN 6 // Broche de données D6 sur le nano pour le panneau LED U-64 #define HourColor Rouge // couleur pendant des heures #define MinuteColor Vert // couleur pendant minutes #define SecondColor Bleu // couleur pendant secondes #define HourNeutral Noir // hors couleur pendant des heures #define Minute neutre Noir // hors couleur pendant quelques minutes #define Deuxième neutre Noir // hors couleur pendant quelques secondes #define LEDDimLevel 8 // Halliness des LED. Si le panneau est plus haut, veuillez ne pas fournir 5v au-dessus du nano. TM1637Display affichage(CLK, DIO); // Affichage à 7 segments uint8_t des points = 0b10000000; // deux points de l'affichage à 7 segments. uint8_t bcdToDec( uint8_t val ) { retour (uint8_t) ((val / 16 * 10) + (val % 16)); } int casser = 190; int heure,minute,seconde; CRGB leds[NUM_LEDS]; // Créer un tableau pour le panneau LED nul configuration(){ Wire.commencer(); Série.commencer(9600); affichage.setBrightness(0x0a); // Luminosité affichage 7 segments FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); // Remplissez le réseau de panneaux LED } nul boucle(){ Wire.beginTransmission(RTC_I2C_ADDRESS); Établir la connexion à l’adresse 0x68 Fil.Écrire(0); Fil.endTransmission(); Fil.demandeDe(RTC_I2C_ADDRESS, 7); Deuxième = bcdToDec(Fil.Lire() & 0x7f); Minute = bcdToDec(Fil.Lire()); Heure = bcdToDec(Fil.Lire() & 0x3f); Série.Imprimer(Heure); Série.Imprimer(":"); Série.Imprimer(Minute); Série.Imprimer(":"); Série.println(Deuxième); Si ((Deuxième % 2) == 0){ 7-segment affichage delimiter ":" sur ou hors Points = 0b111111111; } Autre { Points = 0b00000000000; } Affichage.showNumberDecEx(Heure, Points, Vrai, 2, 0); Affichage.showNumberDec(Minute, Vrai, 2, 2); FastLED (fastLED).Clair(); Led.setBrightness setBrightness setBrightness setB(LEDDimLevel (en)); Si (Heure > 12) { de 24h format à 12h format Heure = Heure -12; } displayHour(Heure); Afficher l’heure binaire displayMinute(Minute); Afficher minute binaire displaySeconde(Deuxième); Afficher le deuxième binaire Retard(Pause); } Vide displayHour(Octet Heure){ Pour (Int H (en) = 0; H (en) <= 3; H (en)++) compter de la plupart des bits droit (0) à 4e bit (3) pour (int h '3; h 'gt;'0; h--) { Si (bitRead(Heure, H (en)) == 1){ Lire les bits simples de droite à gauche et s’il ya un !1!, apportez la LED Led[55 - H (en)] = CRGB (CRGB)::HourColor; afficher la couleur définie en haut de cette esquisse Led[63 - H (en)] = CRGB (CRGB)::HourColor; afficher la couleur définie en haut de cette esquisse } Autre { Led[55 - H (en)] = CRGB (CRGB)::HourNeutral; si la LED n’est pas utilisée, prenez-la vers le bas ou à une couleur différente. Voir le haut du ketch Led[63 - H (en)] = CRGB (CRGB)::HourNeutral; si la LED n’est pas utilisée, prenez-la vers le bas ou à une couleur différente. Voir le haut du ketch } } FastLED (fastLED).Montrer(); Afficher les LED } Vide displayMinute(Octet Minute){ Pour (Int M = 0; M <= 5; M++){ Si (bitRead(Minute, M) == 1){ Led[31 - M] = CRGB (CRGB)::MinuteColor; Commencez à la 1ère LED pour les minutes (4) et ajoutez le peu minute Led[39 - M] = CRGB (CRGB)::MinuteColor; Commencez à la 1ère LED pour les minutes (4) et ajoutez le peu minute } Autre { Led[31 - M] = CRGB (CRGB)::MinuteNeutral; Led[39 - M] = CRGB (CRGB)::MinuteNeutral; } } FastLED (fastLED).Montrer(); } Vide displaySeconde(Octet Deuxième){ Pour (Int S = 0; S <= 5; S++){ Si (bitRead(Deuxième, S) == 1){ Led[7 - S] = CRGB (CRGB)::Deuxièmecolore; Commencez à la 1ère LED pour les secondes (10) et ajoutez les bits Seconds Led[15 - S] = CRGB (CRGB)::Deuxièmecolore; Commencez à la 1ère LED pour les secondes (10) et ajoutez les bits Seconds } Autre { Led[7 - S] = CRGB (CRGB)::DeuxièmeNeutral; Led[15 - S] = CRGB (CRGB)::DeuxièmeNeutral; } } FastLED (fastLED).Montrer(); }
Maintenant, en fonction de l’heure actuelle, vous pouvez voir plus ou moins de LED colorées, mais l’affichage que je ne déchiffre pas toujours facilement, même pour les personnes binaires expérimentés.
J’ai donc créé un petit pochoir à imprimer. Cela peut être téléchargé à partir du lien Dropbox suivant : https://www.dropbox.com/s/nr2kuth73zbqka1/bin%20uhr.svg?dl=0
Comme le dit le dicton: «Il ya 10 types de personnes. Ceux qui comprennent le code binaire et ceux qui ne le comprennent pas.
Par conséquent, une horloge binaire ne doit pas être absente d’une salle de classe d’ordinateur.
Bien sûr, il reste encore du travail à faire. L’esquisse pourrait encore être optimisée à certains endroits. Par exemple, je n’aime pas le fait que les LED RGB scintillent chaque fois qu’ils passent à travers.
En outre, quelqu’un voulait un capteur de température, et un servo contrôlé par le temps, et un récepteur DCF, et un buzzer, et un scanner Larson pour les LED inutilisées, et, et ...
Mais c’est censé avoir été le cas pour aujourd’hui.
Nous attendons avec impatience vos commentaires.
Jusqu’au prochain post de AZ-Delivery, votre expert en microélectronique!
3 commentaires
Andreas Wolter
danke für den Hinweis, wurde korrigiert.
Andreas Wolter
AZ-Delivery Blog
Michael Steinsträßer
Hallo Zusammen,
Schönes Projekt! Leider funktioniert der Link zur Echtzeituhr nicht. Bitte mal reparieren.
Mfg Michael
Richard
Hallo,
habe ein max7219 Led Matrix, damit funktioniert der Code leider nicht.
5Anschlüsse:
VCC, GND, DIN, CS, CLK
Könnten sie mir den Code so umschreiben damit es auch mit dem max7219 funktioniert?
Danke im voraus für ihre Bemühungen.
Liebe Grüße
Richard