Binäre Uhr mit RGB Panel - AZ-Delivery

In onze Blogbericht vanaf 17 juni hebben we al een real-time klok met onze Nano V3Aangesloten.

Sommige klanten hebben dit gerepliceerd en had in wezen 2 vragen:

1. Hoe krijg ik de dikke darm te knipperen?

2. Hoe moet je zoiets om te zetten in een binair horloge?

 

Ik wil graag beide vragen te beantwoorden in onze blog post vandaag.

 

Klaar binaire klokweergave

 

Voor de binaire display, gebruik ik de populaire AZ-Derlivery U-64 LED Panel met 64 WS2812b RGB LED's. 

 

Anders hebben we een condensator (1000 micron) en een weerstand (220 x) nodig

Zoals altijd wanneer we werken met WS2812b LED's: deze zijn zeer helder, maar trekken ook veel kracht. Een van de 64 LED's kan trekken tot 50mA op volle helderheid. De nano kan echter maximaal 200mA leveren. Dus als je het paneel niet met een lage helderheid of met een externe voeding bedient, riskeer je je eigen gezondheid en die van je medemensen. 

 

We nemen het circuit van de post vermeld aan het begin, en uit te breiden. DIN op het RGB-paneel is verbonden met de tussenliggende 220• Weerstand van de pin D6 van de Arduino.

Voor de voeding raad ik een 5V voeding met 5A aan. Vir sluit de pluspaal van de voeding aan op de +5V-pin van het paneel en de minpaal van de voeding met de GND-pin van het paneel. Dan overbruggen we de +5V en GND pinnen van het paneel met de 1000-F condensator (let op polariteit!).

Om het paneel te laten werken, moeten we gnd nog steeds aansluiten op de GND-pin van de Arduino op het paneel.

Nu is een goed moment om te testen of de klok en het display nog steeds gaan.

Als alles werkt zoals gewenst en er geen magische kwelling stijgt, hebben we alles goed gedaan.

 

Daarna volgt de Sketsch. Om dit te bereiken, heb ik uitgebreid de schets van de blog post eerder vermeld:

 

c!p/
Binaire klok met RTC-module en 8x8 RGB LED-matrix
//
Uitbreiding van de real-time klok uit de AZ-Delivery Blog post 
// https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/echtzeituhr-mit-display-am-nano-v3
//
Gebruikt aangepaste code van npowley https://codebender.cc/sketch:241472#NeoPixel%20Binary%20Clock.ino
Gebruikt gewijzigde code van http://www.pjrc.com/teensy/td_libs_DS1307RTC.html 
//////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <Arduino.H>

#include <TM1637Beeldscherm.H> voor het 4bit 7-segment display
#include <Draad.H> om de RTC uit te lezen
#define RTC_I2C_ADDRESS 0x68 I2C-adres van de RTC DS3231
#include <FastLED (VastLED).H> om het LED-paneel te bedienen (https://github.com/FastLED/FastLED)
 
#define Clk 2 Arduino Pin D2 als CLK (RTC) 
#define Dio 3 Ardiono Pin D3 - DIO (RTC)
#define NUM_LEDS 64 Aantal LED's
#define DATA_PIN 6 Gegevensspeld D6 op de nano voor het U-64 LED-paneel
#define Uurkleur Rode Kleur voor uren
#define Minutenkleur Groene Minutenlang kleur
#define SecondColor SecondColor SecondColor SecondColor Blauwe Kleur voor seconden
#define UurNeutraal Zwarte Urenlang uit kleur
#define MinuutNeutraal Zwarte Minutenlang van kleur af
#define SecondNeutral SecondNeutral Zwarte Uit kleur voor seconden
#define LEDDimLevel 8 Reverity van de LED's. Bij hoger gelieve geen paneel boven die te leveren Nano met 5v.

TM1637Beeldscherm Weergeven(Clk, Dio); 7-segment display
uint8_t Punten = 0b100000000; Dubbele punk van de 7-segment display.

uint8_t bcdToDec( uint8_t Val )
{    Terug (uint8_t) ((Val / 16 * 10) + (Val % 16));
}

Int Breken = 190;
 
Int Uur,Minuut,Tweede;

CRGB CRGB Leds[NUM_LEDS]; Array maken voor LED-paneel

Void Setup(){   Draad.Beginnen();   Seriële.Beginnen(9600);   Weergeven.setHelderheid(0x0a);  helderheid 7-segment display   FastLED (VastLED).addLeds<WS2812B, DATA_PIN, Grb Grb>(Leds, NUM_LEDS); LED-paneelarray opvullen
}
 
Void Lus(){    Draad.beginTransmissie(RTC_I2C_ADDRESS); Het vaststellen van de verbinding met het adres 0x68    Draad.Schrijven(0);    Draad.eindTransmissie();    Draad.verzoekVan(RTC_I2C_ADDRESS, 7);      Tweede = bcdToDec(Draad.Lezen() & 0x7f);    Minuut = bcdToDec(Draad.Lezen());     Uur = bcdToDec(Draad.Lezen() & 0x3f);           Seriële.Afdrukken(Uur);      Seriële.Afdrukken(":");      Seriële.Afdrukken(Minuut);      Seriële.Afdrukken(":");      Seriële.println(Tweede);      Als ((Tweede % 2) == 0){ 7-segment display delimiter ":" aan of uit          Punten = 0b11111111;      }      Anders {         Punten = 0b0000000000;      }      Weergeven.showNumberDecEx(Uur, Punten, Waar, 2, 0);      Weergeven.showNumberDec(Minuut, Waar, 2, 2);        FastLED (VastLED).Duidelijk();    Leds.setHelderheid(LEDDimLevel);      Als (Uur > 12) { van 24u formaat tot 12h formaat        Uur = Uur -12;      }      displayHour(Uur); Uur binair weergeven      displayMinute(Minuut); Minuut binair weergeven      displaySecond(Tweede); Tweede binaire weergeven     Vertraging(Breken);
}

Void displayHour(Byte Uur){   Voor (Int H = 0; H <= 3; H++) tellen van de meeste juiste bit (0) tot 4e bit (3)
voor (int h = 3; h >= 0; h--)   {     Als (bitLezen(Uur, H) == 1){ Lees de enkele bits van rechts naar links en als er een !1!, breng de LED-up       Leds[55 - H] = CRGB CRGB::Uurkleur; tonen de kleur gedefinieerd aan de bovenkant van deze schets       Leds[63 - H] = CRGB CRGB::Uurkleur; tonen de kleur gedefinieerd aan de bovenkant van deze schets     }     Anders     {       Leds[55 - H] = CRGB CRGB::UurNeutraal; als de LED niet wordt gebruikt, neem het naar beneden of naar een andere kleur. Zie de bovenkant van de ketch       Leds[63 - H] = CRGB CRGB::UurNeutraal; als de LED niet wordt gebruikt, neem het naar beneden of naar een andere kleur. Zie de bovenkant van de ketch     }   }   FastLED (VastLED).Toon(); De LED's weergeven
}
 
Void displayMinute(Byte Minuut){   Voor (Int M = 0; M <= 5; M++){     Als (bitLezen(Minuut, M) == 1){       Leds[31 - M] = CRGB CRGB::Minutenkleur; Begin bij de 1e LED voor de minuten (4) en voeg de minuut bit       Leds[39 - M] = CRGB CRGB::Minutenkleur; Begin bij de 1e LED voor de minuten (4) en voeg de minuut bit     }     Anders     {       Leds[31 - M] = CRGB CRGB::MinuutNeutraal;       Leds[39 - M] = CRGB CRGB::MinuutNeutraal;     }   }   FastLED (VastLED).Toon();
}
 
Void displaySecond(Byte Tweede){   Voor (Int S = 0; S <= 5; S++){     Als (bitLezen(Tweede, S) == 1){       Leds[7 - S] = CRGB CRGB::SecondColor SecondColor SecondColor SecondColor; Start bij de 1e LED voor de seconden (10) en voeg de seconden bits       Leds[15 - S] = CRGB CRGB::SecondColor SecondColor SecondColor SecondColor; Start bij de 1e LED voor de seconden (10) en voeg de seconden bits     }     Anders     {       Leds[7 - S] = CRGB CRGB::SecondNeutral SecondNeutral;       Leds[15 - S] = CRGB CRGB::SecondNeutral SecondNeutral;     }   }   FastLED (VastLED).Toon();
}

 

Nu, afhankelijk van de huidige tijd, u zien min of meer veel kleurrijke LED's, maar het display dat ik niet altijd gemakkelijk ontcijferen, zelfs voor binaire-ervaren mensen.

Dus heb ik een klein stencil gemaakt om af te drukken. Dit kan worden gedownload via de volgende Dropbox-link: https://www.dropbox.com/s/nr2kuth73zbqka1/bin%20uhr.svg?dl=0

 

 

 

 

Zoals het gezegde luidt: "Er zijn 10 soorten mensen. Degenen die binaire code begrijpen en degenen die het niet begrijpen."

Daarom mag een binaire klok niet ontbreken in een computer klaslokaal.

 

Natuurlijk is er nog werk aan de winkel. De schets kan nog op sommige plaatsen worden geoptimaliseerd. Bijvoorbeeld, ik hou niet van het feit dat de RGB LED's flikkeren elke keer dat ze passeren.

Trouwens, iemand wilde een temperatuursensor, en een tijd-gecontroleerde servo, en een DCF ontvanger, en een zoemer, en een Larson scanner voor de ongebruikte LED's, en, en ...

 

Maar dat zou voor vandaag het geval moeten zijn geweest. 

We kijken uit naar uw opmerkingen.

Tot de volgende post van AZ-Delivery, uw expert in micro-elektronica!

 

Für arduinoProjekte für fortgeschrittene

3 Reacties

Andreas Wolter

Andreas Wolter

danke für den Hinweis, wurde korrigiert.

Andreas Wolter
AZ-Delivery Blog

Michael Steinsträßer

Michael Steinsträßer

Hallo Zusammen,

Schönes Projekt! Leider funktioniert der Link zur Echtzeituhr nicht. Bitte mal reparieren.

Mfg Michael

Richard

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

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery