Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
rheinturmuhr [2017/06/27 16:48] – student | rheinturmuhr [2023/07/03 10:16] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Rheinturmuhr// | ||
+ | |||
+ | === Idee nach Horst.H.Baumann === | ||
+ | |||
+ | |||
+ | **DIESE ANLEITUNG IST FÜR DEN ARDUINO** | ||
+ | |||
+ | __Lichtzeitpegel :__ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Diese Uhr zeigt die Uhrzeit 19:33:43 | ||
+ | - Wir lesen von oben nach unten. | ||
+ | - Die erste lila LED steht für 10 Stunden. | ||
+ | - Die 9 gelb leuchtenden LED`s stehen für 9 Stunden. | ||
+ | - Die 3 grünen LED`s stehen für 30 Minuten. | ||
+ | - Die 3 blauen LED`s stehen für 3 Minuten. | ||
+ | - Die 4 lila LED`s stehen für 40 Sekunden. | ||
+ | - Die 3 gelben LED`s stehen für 3 Sekunden. | ||
+ | |||
+ | === Material === | ||
+ | |||
+ | * Arduino Mega ADK | ||
+ | * 46 LED`s LPD8806 | ||
+ | * 5 Kabel | ||
+ | * Stromquelle 10A und 5V | ||
+ | * USB-Kabel | ||
+ | * 2 m PVC Rohr (d=9cm) | ||
+ | |||
+ | === Software === | ||
+ | |||
+ | * Arduino IDE 1.8.3 | ||
+ | * Cura 2.6 → für den 3D Drucker | ||
+ | * 3DBuilder → zum zuschneiden des 3D Modells | ||
+ | |||
+ | === Anschließen des LED-Streifen | ||
+ | |||
+ | {{: | ||
+ | |||
+ | * Orange GND in GND des Arduino | ||
+ | * Grün DI (Data Input) in Pin 2 des Arduino | ||
+ | * Blau CI (Clock Input) in Pin 3 des Arduino | ||
+ | * Rot 5V+ in den +Pol der Stromquelle | ||
+ | * Schwarz vom – Pol der Stromquelle in einen GND des Arduino | ||
+ | |||
+ | === Installieren der Bibliotheken === | ||
+ | |||
+ | |||
+ | * Time.h | ||
+ | → http:// | ||
+ | * LPD8806.h | ||
+ | → https:// | ||
+ | |||
+ | Beide Bibliotheken lassen sich mit Arduino IDE 1.8.3. installieren. | ||
+ | * → Sketch / Bibliotheken einbinden / | ||
+ | * → ansonsten Anweisungen auf den zugehörigen Seiten folgen. | ||
+ | |||
+ | === Testen der Bibliotheken === | ||
+ | |||
+ | * 1.Strandtest öffnen | ||
+ | * → Datei/ Beispiele / LPD8806/ Strandtest | ||
+ | * 2.Code anpassen auf int nLED`s = 45; | ||
+ | |||
+ | {{: | ||
+ | |||
+ | * 3. Überprüfen und Hochladen | ||
+ | * 4. Schauen ob alle LED`s funktionieren | ||
+ | * 5. TimeSerial öffnen | ||
+ | * → Datei/ Beispiele / Time/ TimeSerial | ||
+ | * 6. Überprüfen und Hochladen | ||
+ | * 7. Seriellen Monitor öffnen | ||
+ | * 8. Oben eine Unix Zeit eingeben und Enter drücken. | ||
+ | * → Unix-Zeit z.B T1357041600 | ||
+ | * 9. Überprüfen ob nun die Zeit läuft. | ||
+ | * | ||
+ | === Code === | ||
+ | |||
+ | Zusammenführen der Codes aus den Bibliotheken : | ||
+ | <file c Einbinden_des_Streifen_Treibers.c> | ||
+ | #include " | ||
+ | #include " | ||
+ | #ifdef __AVR_ATtiny85__ | ||
+ | # | ||
+ | # | ||
+ | |||
+ | |||
+ | int nLEDs = 45; // Nummer der Leds die sich im Streifen befinden. Die erste LED ist 0. Also betreiben wir 46 LEDs | ||
+ | |||
+ | // SPI Pins des Arduino, die genutzt werden. | ||
+ | int dataPin | ||
+ | int clockPin = 3; //Dieser Pin schaltet zum richtigen Wert (int) um sobald der DatenPin eingestellt ist. | ||
+ | |||
+ | |||
+ | // Hier werden dem LPD Strip Parameter übergeben. | ||
+ | // Erster Parameter ist für die Anzahl der LED`s im Streifen. | ||
+ | // Der Zweite ist für den Daten Pin der genutzt wird. | ||
+ | // Der Dritte ist für den Clock Pin der genutzt wird. | ||
+ | LPD8806 strip = LPD8806(nLEDs, | ||
+ | </ | ||
+ | Diesen Code Abschnitt nutzen wir aus LPD8806 und passen ihn auf unsere LED-Streifen an. Die Kommentare sind von uns geschrieben. | ||
+ | |||
+ | <file c Einbinden_der_Zeitbibliothek.c> | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | #define TIME_HEADER | ||
+ | #define TIME_REQUEST | ||
+ | </ | ||
+ | Hier wird time.h eingebunden. | ||
+ | |||
+ | <file c void_setup.c> | ||
+ | void setup() | ||
+ | { | ||
+ | Serial.begin(9600); | ||
+ | while (!Serial) ; // Needed for Leonardo only | ||
+ | pinMode(13, OUTPUT); //Dieser Pin auf dem Arduino leuchtet, wenn der Code läuft. | ||
+ | setSyncProvider( requestSync); | ||
+ | Serial.println(" | ||
+ | | ||
+ | |||
+ | |||
+ | //Setup zum Anschalten des LED-Strip | ||
+ | |||
+ | #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000L) | ||
+ | clock_prescale_set(clock_div_1); | ||
+ | #endif | ||
+ | |||
+ | strip.begin(); | ||
+ | strip.show(); | ||
+ | } | ||
+ | </ | ||
+ | So sollte euer void setup() aussehen wenn ihr das Setup aus LPD8806 und das aus time.h zusammengefügt habt. | ||
+ | |||
+ | <file void_loop.c> | ||
+ | void loop(){ | ||
+ | if (Serial.available()) { //Wenn die serielle Schnittstelle zwischen PC und Arduino gesetzt ist, kann der Code hier die Uhrzeit vom PC abgreifen, dass geht bei unserem Arduino nicht. | ||
+ | processSyncMessage(); | ||
+ | } | ||
+ | if (timeStatus()!= timeNotSet) { //Wenn die Uhrzeit nicht über die serielle Schnittstelle eingebunden wird, soll dieser Befehl den seriellen Monitor öffnen. | ||
+ | digitalClockDisplay(); | ||
+ | ledanzeige(); | ||
+ | } | ||
+ | if (timeStatus() == timeSet) { //Wenn die Uhrzeit gesetzt ist, soll nun die LED-Anzeige gestartet werden. | ||
+ | ledanzeige(); | ||
+ | } | ||
+ | delay(1000); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Void loop haben wir so geschrieben. Damit dies auch läuft braucht ihr natürlich folgende Methoden aus time.h : | ||
+ | * void digitalClockDisplay() | ||
+ | * void printDigits() | ||
+ | * void processSyncMessage() | ||
+ | * time_t requestSync() | ||
+ | ledanzeige() haben wir selbst geschrieben. | ||
+ | |||
+ | |||
+ | <file led_anzeige.c> | ||
+ | void ledanzeige(){ | ||
+ | int s; //s steht für Sekunde und ist ein Integer. | ||
+ | int s1; //s1 steht für alle Sekunden von 1-9 und ist ein Integer. | ||
+ | int m; // m steht für die Minuten und ist ein Integer. | ||
+ | int m1; // m1 steht für alle Minuten von 1-9 und ist ein Integer. | ||
+ | int h1; // h1 steht für alle Stunden von 1-9 und ist ein Integer. | ||
+ | int h; // h steht für Stunde und ist ein Integer. | ||
+ | h1=hour() %10; // h1 ist gleich der Methode hour Modulo (Rest): % bsp: 12%10 = 2. So können nacher LEDs für Stunde 1-9 angezeigt werden und auch 11-19. | ||
+ | h=hour(); // h ist gleich der Methode hour. | ||
+ | m1=minute() %10; //m1 ist gleich minute() %10. So können nacher LEDs für Minute 1-9 angezeigt werden auch wenn gerade Minute = 39 ist können die 9 Minuten berechnet und angezeigt werden. | ||
+ | m=minute(); //m ist gleich der Methode minute. | ||
+ | s1=second() %10; //s1 ist gleich second%10. So können nacher LEDs für Sekunde 1-9 angezeigt werden auch wenn gerade Sekunde = 39 ist können die 9 Sekunden berechnet und angezeigt werden. | ||
+ | s=second(); //s ist gleich der Methode second. | ||
+ | </ | ||
+ | |||
+ | Hier haben wir einige Integer eingebunden und definiert, die wir im Laufe unserer Methode nutzen. | ||
+ | |||
+ | |||
+ | <file led_anzeige_sekunden.c> | ||
+ | // | ||
+ | // Hier werden die Sekunden der Uhrenanzeige eingestellt. | ||
+ | // oneSecond = {0, | ||
+ | if(s1> | ||
+ | strip.setPixelColor(0, | ||
+ | strip.show(); | ||
+ | } | ||
+ | if(s1> | ||
+ | strip.setPixelColor(1, | ||
+ | strip.show(); | ||
+ | } | ||
+ | if(s1> | ||
+ | strip.setPixelColor(2, | ||
+ | strip.show(); | ||
+ | } | ||
+ | if(s1> | ||
+ | strip.setPixelColor(3, | ||
+ | strip.show(); | ||
+ | } | ||
+ | if(s1> | ||
+ | strip.setPixelColor(4, | ||
+ | strip.show(); | ||
+ | } | ||
+ | if(s1> | ||
+ | strip.setPixelColor(5, | ||
+ | strip.show(); | ||
+ | } | ||
+ | if(s1> | ||
+ | strip.setPixelColor(6, | ||
+ | strip.show(); | ||
+ | } | ||
+ | if(s1> | ||
+ | strip.setPixelColor(7, | ||
+ | strip.show(); | ||
+ | } | ||
+ | if(s1> | ||
+ | strip.setPixelColor(8, | ||
+ | strip.show(); | ||
+ | } | ||
+ | |||
+ | // Hier werden alle LED`s ausgeschaltet wenn s1 gleich 0 ist. Die Zahl 60 wird auf einer digital Uhr nicht angezeigt, also wird bei 0 ausgeschaltet. Denn 60 sekunden sind gleich 1Minute 00 Sekunden. | ||
+ | if(s1==0){ | ||
+ | | ||
+ | strip.setPixelColor(1, | ||
+ | | ||
+ | strip.setPixelColor(3, | ||
+ | | ||
+ | strip.setPixelColor(5, | ||
+ | | ||
+ | strip.setPixelColor(7, | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Hier seht ihr ein Beispiel mit dem ihr zum Beispiel die Sekunden anschalten könnt und nach 10 Sekunden die LEDs für Sekunde abgeschaltet werden. | ||
+ | Viel Spaß beim Rest selber basteln. | ||
+ | |||
+ | |||
+ | --- // | ||
+ | --- // | ||