Inhaltsverzeichnis:

TheSUN, Arduino Powered Design Wanduhr - Gunook
TheSUN, Arduino Powered Design Wanduhr - Gunook

Video: TheSUN, Arduino Powered Design Wanduhr - Gunook

Video: TheSUN, Arduino Powered Design Wanduhr - Gunook
Video: 3D printed pendulum clock 2024, Juli
Anonim
TheSUN, Arduino Powered Design Wanduhr
TheSUN, Arduino Powered Design Wanduhr
TheSUN, Arduino Powered Design Wanduhr
TheSUN, Arduino Powered Design Wanduhr
TheSUN, Arduino Powered Design Wanduhr
TheSUN, Arduino Powered Design Wanduhr

Hallo wieder Instructables-Leute!:-P

Aufgrund von Versandproblemen konnte ich mein ABTW Projekt nicht weiterführen und habe mich daher entschlossen euch eine weitere, meine neuste Kreation zu zeigen.

Ich denke, viele von uns, wie ich, mögen diese schönen adressierbaren LED-Stripes (auch NEOPIXEL LED genannt). Sie erhalten sie bei ADAFRUIT. Andere Anbieter werden auch ähnliche Produkte anbieten. Es gibt eine Bibliothek auf ADAFRUITS - GitHub (klick mich) mit einigen Beispielcodes. Die Codierung sollte also unkompliziert sein …

Ich sah diese NEOPIXELS und dachte mir, was zum h… kann ich mit diesen glänzenden kleinen Dingen machen.

  • Ein LED-Matrix-Display? -> Zu kompliziert und ich benutze es (derzeit) nicht
  • Weihnachtsbeleuchtung? -> Es passt zur Saison aber es wäre günstiger einen zu kaufen:-P
  • eine Uhr? -> Warum nicht! Aber stylisch und unkonventionell soll es sein

Also, lass uns eine Wanduhr machen.

Wenn wir uns unsere Armbanduhr genau ansehen (wenn Sie ein Analog wie ich haben) werden wir feststellen, dass wir (hoffentlich) 12 Stunden und 60 Minuten haben. Das bedeutet, dass wir 60 adressierbare LEDs brauchen, phu! Wenn wir einen Streifen mit 60 LEDs / Meter nehmen, erhalten wir einen Durchmesser von ~318mm (Radius = Umfang /(2*Π)) das ist definitiv zu groß.

Die Wahrheit ist, wenn Sie jemanden nach der Uhrzeit fragen, wird niemand sagen, dass es 2 Minuten nach 3 ist! Als Antwort erhalten Sie "Es ist 5 nach 3". Warum sollten wir also nicht alles auf 5 Minuten-Schritte herunterskalieren? Dafür benötigen wir nur 12 LEDs, was bedeutet, dass wir einen Durchmesser von 63,6 mm erhalten. Wir sind auch in der Lage, Stunden und Minuten zu unterscheiden, indem wir ihnen eine separate Farbe geben.

DAS IST DER PLAN! Sehen wir uns an, wie ich alles gemacht habe. Wie immer werde ich eine Liste / Stückliste und Anweisungen zum Bau zur Verfügung stellen.

Wenn du denkst, nur Schweizer können coole Uhren herstellen, lass uns beweisen, dass du falsch liegst (sorry Schweiz:-P)

Schritt 1: Design & Materialauswahl

Design & Materialauswahl
Design & Materialauswahl
Design & Materialauswahl
Design & Materialauswahl

Entwurf:

Wenn wir unsere analoge Uhr noch einmal genau betrachten, sehen wir, dass der Kreis in 12 * 30°-Schritte unterteilt ist, wir wissen, dass wir für den LED-Strip 63,6 mm benötigen. Es sollte also möglich sein, den Streifen irgendwie um ein Rohr herum auszurichten. Ich habe mich für Acrylglas entschieden, weil es schön aussieht und es möglich ist, das LED-Licht darin einzukapseln und an jedem Fehler im Glas eine Lichtstreuung stattfindet. Sagen wir also: Mehr Verunreinigungen führen zu mehr Lichtstreuung! Genau das wollen wir. Also schnappt euch gerne eure Gravierwerkzeuge und seid kreativ:-)

Wenn Sie sich auf meine Stücklistenliste und den Namen beziehen, den ich der Uhr gegeben habe, habe ich ein sonnenähnliches Design gewählt. Ich habe alle Acrylteile von einem deutschen Verkäufer auf E-Bay (Link in der Stückliste) erhalten. Für mein Design du wirst brauchen:

  • Acryl-Bodenplatte, transparent Dicke = 6 mm, Durchmesser = 300 mm
  • Acryl-Mittelplatte, transparent Dicke = 3mm, Durchmesser = 150mm
  • Acryl-Frontplatte, satiniert, Dicke = 3mm, Durchmesser = 90mm
  • Acrylrohr, transparent, Außendurchmesser = 64mm (damit müssen wir am LED-Streifen etwas feilen)
  • Acrylstab, transparent, Durchmesser = 5mm (das sind unsere Balken); Es gibt auch Acrylstäbe mit Blasen im Inneren, ich empfehle sie, aber ich habe sie nicht herum.
  • Acrylkleber

Elektronik (siehe Fritzing-Dateien):

  • Arduino mini (oder ähnlich)
  • 1 adressierbarer LED-Streifen (12 LEDs für Stunden- und 5-Minuten-Schritte)
  • 4 adressierbare LEDs (Einzelminuten)
  • 2 330 Ohm Widerstände
  • 1 1000µF Kondensator
  • 1 Netzteil (5V/500mA)
  • ein RTC DS-1307 (optional!)
  • Bluetooth-Modul (optional! ja Sie können die Uhrzeit über BT und ein Android-Smartphone einstellen)

Wenn Sie sich fragen, warum ich MAX485-Chips auf meiner Stückliste habe. Die Antwort ist, dass ich die Uhr mit dem Hausautomationssystem synchronisieren möchte, das ich gerade bauen werde (nie wieder eine Uhr auf Sommerzeit stellen müssen:-P). Das werde ich in meinem nächsten Blog beschreiben paar Wochen/Monat.

Wie Sie bemerkt haben, werde ich auch versuchen, die Uhr mit einigen Sonnenkollektoren und einem LiPo vom Netz zu bekommen, aber ich decke das in diesem Instructable nicht ab, um es selbst auszuprobieren.

Schritt 2: Bereiten Sie die Acrylteile vor

Bereiten Sie die Acrylteile vor
Bereiten Sie die Acrylteile vor
Bereiten Sie die Acrylteile vor
Bereiten Sie die Acrylteile vor
Bereiten Sie die Acrylteile vor
Bereiten Sie die Acrylteile vor

Die Werkzeuge:

Als Erstes ist es sehr hilfreich, wenn Sie den beigelegten DWG-Plan im Maßstab 1:1 ausdrucken. Dieser hilft Ihnen beim Ausrichten aller Teile und dient Ihnen als Bohrplan. Weiter benötigen Sie:

  • Hobbymesser
  • Gehrungslehre
  • Säge
  • Klemmen
  • Handbohrer
  • kann bohren, Durchmesser 65mm
  • ein Satz Metallbohrer
  • eine kleine Metallfeile
  • Acrylkleber

Lasst uns beginnen:

Nehmen Sie die Grundplatte und richten Sie sie auf dem Plan aus, damit Sie den Mittelpunkt des Kreises erhalten. Nehmen Sie nun Ihre Handbohrmaschine mit dem darauf montierten Dosenbohrer und bohren Sie (sehr langsam! nicht zu viel Druck!) ein Loch in die Mitte der Grundplatte, der äußere Kreis sollte ~2-3mm tief sein. Dies dient dazu, den LED-Streifen in die Bodenplatte zu versenken (LED-Streifen ~10mm breit, Balken nur 5mm Durchmesser) und mit den Balken auszurichten (siehe Bild 1).

Jetzt brauchen wir die Bügelsäge, die Gehrungslehre und das Acrylrohr. Schneiden Sie es einfach in Stücke. Ich beschloss, das Gehäuse (Rohr) 40 mm lang zu machen (Bild 2). Jetzt wieder die Bügelsäge greifen und auf einer Seite des Rohres einen kleinen Falz machen, mit der Metallfeile glatt machen. Da kommen die Drähte raus;-) (siehe Bild 3)

Zeit für etwas Kleber…Nehmen Sie die Mittelplatte (d=150mm) und die Frontplatte (die satinierte). Richten Sie sie wieder auf dem Plan aus, geben Sie etwas Kleber auf die Mitte der Mittelplatte, richten Sie die Frontplatte aus und warten Sie, bis die Kleber ist leicht ausgehärtet. Der Kleber, den ich verwendet habe, ist leicht aushärtend und es kann bis zu 2-3 Stunden dauern, also möchten Sie vielleicht eine Klemme verwenden … (Bild 3 und 4)

Gehen Sie beim Aufkleben des Rohres auf die Grundplatte genauso vor, achten Sie darauf, dass die Falz zur Platte zeigt und dort ausgerichtet ist, wo die erste LED (12 Uhr) sein soll.

Warten Sie, bis es ausgehärtet ist!

Wir können nun die 2 Teile (bookmatched) auf den Plan ausrichten und unsere 4 einzelnen winzigen Löcher bohren (5 mm Durchmesser oder der Durchmesser der von Ihnen gewählten LED; bohren Sie langsam mit nicht zu viel Druck). Bohren Sie etwa 8-9 mm tief. Seien Sie vorsichtig, die satinierte Platte ist sehr spröde und kann brechen, wenn Sie zu tief bohren. Sie können sie jetzt zusammenkleben oder Sie entscheiden, wie ich eine Bedrohung in die Bodenplatte schneiden und mit einer Schraube befestigen.

Warten Sie erneut, bis der Kleber ausgehärtet ist. Richten Sie nun die Balken aus und kleben Sie sie auf die Grundplatte. (Bild 6) Ratet mal… warten bis der Kleber ausgehärtet ist:-) Kommen wir zur Elektronik…

Schritt 3: Elektronik

Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik

Die Werkzeuge:

  • Lötkolben
  • Lötdraht
  • Hobbymesser
  • ein kleines Stück Prototyping PCB
  • Lackdraht oder jeder andere Draht, den Sie bevorzugen
  • Heißkleber

Ich habe es mit den einzelnen LEDs versucht. Wenn Sie Lackdraht verwenden, vergessen Sie nicht, den Lack vor dem Löten abzukratzen. Sie können dafür ein Hobbymesser verwenden. Verdrahten Sie sie, Sie können sich das Bild mit der Pinbelegung auf flikto.de ansehen. Beachten Sie, dass bei der nächsten LED DOUT auf DIN wechselt! (siehe Bild 2) Danach können Sie den LED-Streifen in 4 Elemente mit jeweils 3 LEDs schneiden. Denken Sie daran, wir haben 63,6 mm LED-Streifen und 64 mm Außendurchmesser der Röhre, daher benötigen wir etwas "zusätzliche Länge", um sie genau auf die Balken auszurichten. Verdrahten Sie sie mit Lackdraht wie in Bild 4. Ich habe eine kleine Proto-Platine hergestellt, die dienen wird als "Power-Kabelbaum" und enthält die Komponenten für die LED-Streifen (die beiden 330Ohm Widerstände und den 1000µF Kondensator, Bild 7), siehe dazu das Fritzing Image.

Montieren Sie nun den Streifen um das Rohr, richten Sie die LEDs auf die Strahlen aus. Das erste Pixel entspricht 12 Uhr. Wenn Sie Ihr Gehäuse umgedreht haben, vergessen Sie nicht, dass alles gespiegelt ist. Gehen Sie gegen den Uhrzeigersinn vor! Verwenden Sie etwas Heißkleber, um es an der Tube zu befestigen. Ein kleiner Tropfen für jedes Segment genügt!

Das gleiche können Sie auch für die einzelnen LEDs (eventuell gespiegelt) machen, einfach etwas Heißkleber hinzufügen und in die vorgebohrten Löcher drücken.

Verkabeln Sie das Arduino noch nicht, wir verwenden die Hardware-Seriell für die BT-Verbindung, also überprüfen Sie zuerst die nächsten Schritte, in denen ich die Software beschreibe.

Schritt 4: Code

Code
Code
Code
Code

Sie können nun die Skizze auf den Arduino laden. Sie können jetzt auch die LED-Streifen verdrahten. Schließen Sie das BT-Modul nicht an!!! Wir wollen uns zuerst den Code anschauen, ihr solltet wissen, wo ihr einiges optimieren könnt…

Laden Sie die Arduino IDE und die Librarys. Arduino IDE, AdafruitNeoPixel, Time, DS1307RTC herunter

Installieren Sie die IDE und legen Sie die Bibliotheken in den Bibliotheksordner. Öffnen Sie die angehängte INO-Datei und laden Sie sie auf Ihr Arduino hoch. Der hier beschriebene Code ist der gleiche, aber mit zusätzlichen Kommentaren! Wenn Sie alles richtig gemacht haben, sehen Sie nun die "Bootanimation". Die Uhrzeit kann über den Serialmonitor eingestellt werden. Geben Sie einfach @"hour"/"min"/"sec" ein, zB. @10/33/00 (10:33).

Fühlen Sie sich frei, mit dem Code zu spielen… Hier gebe ich Ihnen eine kurze Beschreibung des Codes (Setup ohne RTC!)

DEFINITIONEN:

#define PIN 6 //Stunde LED-Streifen #define MINPIN 5 //Singelminute LED #define NUMPIXELS 12 //Anzahl Pixel für Stunde #define MINNUMPIXELS 4 //Anzahl Pixel für einzelne Minute #define BAUDRATE 115200 //Baudrate, sollte übereinstimmen die Baudrate des BT-Moduls #define utch '@' //starte BYTE von TimeSync

int timeset = 0; // Flag zum Speichern, wenn die Zeit nach Bootint gesetzt wurde delayval = 20; // Verzögerung für Fading-Animation Int Clocktimer = 10000; // Zeitaktualisierung Int timebright = 250; // Helligkeit der Stunde Strip int mtimebright = 50; // Helligkeit von Singleminint initialize = 0; // Flag zum Aufrufen der Clearpixels-Funktion nach bootint ahour; int oldahour = 0; // Vorher speichern Stunde Minute; int Oldamin = 0; // speichert die vorherige Minute für Refreshint asecond; int einen Tag; int einen Monat; int ein Jahr; int mmin;tmElements_t tm;

//Setup für die 2 NeoPixel-LED-Arrays (NAME = TYPE(NUMBER OF PIXELS, WHICH PIN, FORMAT RGB OR GRB, FREQ); Weitere Informationen finden Sie im Adafruit-Leitfaden); Adafruit_NeoPixel-Minpixel = Adafruit_NeoPixel (MINNUMPIXELS, MINPIN, NEO_RGB + NEO_KHZ800);

ERSTELLEN:

Leere Einrichtung () {

Serial.begin (BAUDRATE); Wire.begin(); // Initialisieren Sie die Streifen, alle OFFpixels.begin(); minpixels.begin(); Pixel.show(); minpixels.show();

//Erstelle eine kleine AnimationSerial.println("SUNRISE"); Sonnenaufgang(); Verzögerung (1000); Serial.println("SONNENUNTERGANG"); Sonnenuntergang(); Pixel.show(); Serial.println ("READY"); }

SCHLEIFE:

Void loop () {// auf Timesync prüfen while (Serial.available () > 0) { char c = Serial.read (); if(c == utch) //Wenn ein @ in der Zeile steht, lesen Sie die kommenden Bytes / ints{ readtime(); } } // Initialisieren Sie die LEDs, löschen Sie die Boot-Animation

if (initialisieren == 0) { clearpixels (); initialisieren = 1; }

eine Stunde = Stunde ();

Minute = Minute(); if(timeset == 1 || timeset == 0) // hier können Sie überprüfen, ob die Zeit eingestellt wurde, hier können Sie das Programm stoppen, wenn Timeset = FALSE, einfach "|| timeset == 0" entfernen!

{

if(oldamin < aminute || oldahour set all to OFF, neue Zeit anzeigen{ clearpixels(); ClockDisplay(); } } }

Anzeige der Uhr:

void ClockDisplay(){

oldahour = ahour;

Oldamin = Minute; int xStunde, xmin;

if (ahour >= 12) { xhour = ahour-12; // wir haben nur 12 LEDs für die 24-Stunden-Anzeige} else {xhour = ahour; } // skaliere es in 5-Minuten-Schritte xmin = (eine Minute / 5); if (oldamin < eine Minute) {oldamin = eine Minute; clearpixel(); } // nehmen Sie den Rest der Division oder die Singlemin LED mmin = (Aminute % 5); // Modulo-Operator zB. 24 % 5 = 4! sehr nützlich:-Ppixels.setBrightness(timebright); Pixel.setPixelColor(xmin, Pixel. Color(5, 125, 255)); // Hier können Sie die Farben ändern! Spielen Sie herum!pixels.setPixelColor (xhour, Pixel. Color (255, 50, 0)); Pixel.show();

// Anzeige der einzelnen Minsfor (int m=0; m

minpixels.setBrightness(mtimebright); minpixels.setPixelColor(m, Pixel. Color(255, 255, 0)); minpixels.show(); } }Lesen und verarbeiten Sie TIME-Informationen von Serial

void readtime() // wenn wir bereits das führende "@" haben, verarbeiten Sie die kommenden Daten und speichern Sie die Zeit für die TIME Lib{

eine Stunde = Serial.parseInt(); eine Minute = Serial.parseInt(); asecond = Serial.parseInt(); aday = Serial.parseInt(); ein Monat = Serial.parseInt(); ein Jahr = Serial.parseInt(); Serial.println ("TIMESET"); Serial.print (eine Stunde); Serial.print (": "); Serial.println (eine Minute); setTime(eine Stunde, eine Minute, eine Sekunde, ein Tag, ein Monat, ein Jahr); }

Alles löschen

void clearpixels() // setze jedes einzelne PIXEL auf off, um die Anzeige zu aktualisieren {

Pixel.begin(); minpixels.begin(); for(int i=0;ipixels.setPixelColor(i, Pixel. Color(0, 0, 0)); minpixels.setPixelColor(i, Pixel. Color(0, 0, 0)); Pixel.show(); minpixels.zeigen(); } }

Schritt 5: Die Android APP und BT-Verbindung

Die Android-APP und BT-Verbindung
Die Android-APP und BT-Verbindung
Die Android-APP und BT-Verbindung
Die Android-APP und BT-Verbindung
Die Android-APP und BT-Verbindung
Die Android-APP und BT-Verbindung

Wenn Sie mit den vorherigen Schritten erfolgreich waren, können Sie jetzt Ihr BT-Modul verkabeln. (Ich hoffe, Sie haben sichergestellt, dass die Baudraten übereinstimmen). vergiss nicht die TX & RX Linien zu überqueren:-)

Laden Sie die App herunter und installieren Sie sie, koppeln Sie sie mit Ihrem BT-Dongle, starten Sie die App, verbinden Sie sich mit dem Dongle und synchronisieren Sie die Uhrzeit mit Ihrem Handy. Die APP macht im Grunde dasselbe wie wir zuvor. Es sendet nur @hh/mm/ss/dd/mm/YYYY generiert aus seiner Systemzeit. Ich habe auch die APPInventor AIA-Datei und eine Erklärung zum nächsten Schritt bereitgestellt (für diejenigen, die es interessiert).

Schritt 6: APPInventor

APPInventor
APPInventor
APPInventor
APPInventor

APP Inventor ist ziemlich einfach zu bedienen und lohnt sich für ein so einfaches Programm.

Wenn Sie ein neues Projekt erstellen, finden Sie sich auf dem DESIGNER-Bildschirm wieder. (Bild 1) Hier fügen wir Tabellen, Schaltflächen, Sensoren und andere Elemente zur weiteren Verwendung hinzu. In unserem Fall benötigen wir:

  • eine Tabelle (um alle Elemente zuzuordnen)
  • ein Listpicker (zur Auswahl des BT-Geräts, mit dem wir uns verbinden)
  • eine Taste (um die TIME über BT abzufeuern)
  • einige Labels (zeigen die aktuelle Uhrzeit und das Datum an)
  • der Uhrsensor (Aktualisieren der Uhrzeit)
  • der Bluetooth-Client-Sensor (Konnektivität)

Das Hinzufügen ist genauso einfach wie Drag & Drop! Auf Bild 2 sehen Sie eine Übersicht der "APP" im BLOCKS-Bildschirm. Nun, dort passiert im Grunde die ganze "Magie". Oben habe ich einige Variablen erstellt, um die Uhrzeit und das Datum zu speichern. Der erste Block oben links initialisiert das Listpicker-Element mit der Liste der gekoppelten BT-Geräte zweiten Block entscheiden wir, was mit dem zuvor ausgewählten Element zu tun ist. Nun, wir wollen uns daran anschließen.

Schaut man sich den nächsten Block genau an, so sieht man, dass wir bei BT-Status "ist verbunden" die BT-Meldung generieren. Es ist dasselbe, was wir zuvor in den SerialMonitor eingegeben haben. Der letzte Block links liefert uns die führenden Nullen, um die Zeit anzuzeigen (zB 01:08). Auf der rechten Seite finden Sie unseren letzten Block, in dem wir das Clock-Element verwenden. Hier aktualisieren wir die Variablen und mischen sie mit der Digits-Prozedur, dies geschieht alle 1000ms (Standardeinstellung, ändern Sie es im Designer-Modus) und die aktualisierten Werte mit dem Label anzeigen. Das ist nur eine kurze Beschreibung, aber APPInventor ist wirklich so einfach:-)Vielleicht gibt es jemanden in der Community, der eine Software für iOS oder WindowsPhone schreiben möchte. (wäre großartig)

Ich hoffe, Ihnen hat mein Instructable gefallen! Viel Spaß mit Ihrer neuen Wanduhr! Vielleicht möchten Sie es jemandem schenken, den Sie lieben (Seine Weihnachtszeit):-)

Und wenn es Fragen gibt, frag mich gerne!

Viele Grüße und Frohe Weihnachten.

Empfohlen: