Inhaltsverzeichnis:

Die ultimative Binäruhr – Gunook
Die ultimative Binäruhr – Gunook

Video: Die ultimative Binäruhr – Gunook

Video: Die ultimative Binäruhr – Gunook
Video: Mit diesen Profi Tipps zum erfolgreichen Marathon! 2024, Juli
Anonim
Die ultimative binäre Uhr
Die ultimative binäre Uhr
Die ultimative binäre Uhr
Die ultimative binäre Uhr
Die ultimative binäre Uhr
Die ultimative binäre Uhr

Ich habe vor kurzem das Konzept der Binäruhren kennengelernt und habe angefangen zu recherchieren, um zu sehen, ob ich eine für mich selbst bauen könnte. Ich konnte jedoch kein bestehendes Design finden, das gleichzeitig funktional und stilvoll war. Also beschloss ich, mein eigenes Design komplett von Grund auf neu zu erstellen!

Lieferungen

Alle Dateien für dieses Projekt:

Die Bibliotheken für den Arduino-Code können hier von GitHub heruntergeladen werden:

M41T62 RTC-Bibliothek

FastLED-Bibliothek

LowPower-Bibliothek

Schritt 1: Die Idee

Ich bin vor kurzem über folgendes Video gestolpert:

DIY binäre Armbanduhr

Das obige Video zeigt eine einfache hausgemachte Binäruhr. Ich hatte keine Ahnung, dass es so etwas gibt, aber nachdem ich etwas mehr über das Thema Binäruhren recherchiert hatte, wurde mir schnell klar, dass es eine Menge verschiedener Designs gibt! Ich wollte einen für mich bauen, konnte aber kein Design finden, das mir gefiel. Den binären Uhren, die ich gefunden habe, fehlten viele Funktionen und sie sahen nicht besonders gut aus. Also beschloss ich, mein eigenes komplett von Grund auf neu zu entwerfen!

Der erste Schritt war die Festlegung der Kriterien für mein Design. Das ist mir eingefallen:

  • Binäre RGB-Schnittstelle
  • Zeitanzeige (mit sehr genauer Zeitmessung)
  • Datumsanzeige
  • Stoppuhrfunktion
  • Alarmfunktion
  • Akkulaufzeit von mindestens 2 Wochen
  • USB-Aufladung
  • Vom Benutzer leicht anpassbare Software
  • Ein klares und einfaches Design

Diese Kriterien bildeten die Grundlage für das gesamte Projekt. Der nächste Schritt war, herauszufinden, wie die Uhr funktionieren soll!

Schritt 2: Einige Binary-Watch-Theorie

Einige Binary-Watch-Theorie
Einige Binary-Watch-Theorie

Der Plan war einfach. Die Binäruhr würde wie eine normale Uhr funktionieren, außer dass die Schnittstelle binär wäre, insbesondere BCD (Binary Coded Decimal). BCD ist eine Art von Binärcodierung, bei der jede Dezimalstelle durch eine feste Anzahl von Bits dargestellt wird. Ich brauche 4 Bits, um eine Ziffer von 0-9 darstellen zu können. Und für einen Standard

hh:mm

Zeitformat, ich brauche 4 dieser Ziffern. Das bedeutet, dass ich insgesamt 16 Bit benötige, die durch 16 LEDs dargestellt werden.

Das Ablesen der Uhrzeit in BCD ist ziemlich einfach, wenn Sie sich daran gewöhnt haben. Die untere Zeile der Uhr stellt das niedrigstwertige Bit dar (1) und die obere Zeile ist das höchstwertige Bit (8). Jede Spalte steht für eine Ziffer im

hh:mm

Zeitformat. Wenn eine LED leuchtet, zählen Sie diesen Wert. Wenn eine LED AUS ist, ignorieren Sie sie.

Um die erste Ziffer zu lesen, summieren Sie einfach alle den aktivierten LEDs entsprechenden Werte in der ersten (ganz links) Spalte. Machen Sie dasselbe für die anderen Ziffern von links nach rechts. Sie haben jetzt die Uhrzeit in BCD gelesen!

Dieses Prinzip gilt für die restlichen Funktionen der Uhr. Die Verwendung von RGB-LEDs hilft bei der Unterscheidung zwischen verschiedenen Funktionen und Modi mit unterschiedlichen Farben. Die Farben werden vom Benutzer ausgewählt und können leicht an die gewünschte Farbpalette angepasst werden. Dies ermöglicht dem Benutzer, einfach durch die Funktionen zu navigieren, ohne verwirrt zu werden.

Der nächste Schritt war das Erstellen eines Blockdiagramms!

Schritt 3: Zur Arbeit gehen

Zur Arbeit kommen
Zur Arbeit kommen

Wie bei jedem typischen Elektronikprojekt ist ein Blockdiagramm ein wesentlicher Bestandteil in der frühen Designphase. Anhand der Kriterien habe ich es geschafft, das obige Blockschaltbild zusammenzustellen. Jeder Block im Diagramm repräsentiert eine Funktion in der Schaltung und die Pfeile zeigen die Beziehung der Funktionen. Das Blockschaltbild in seiner Gesamtheit gibt einen guten Überblick über die Funktionsweise der Schaltung.

Der nächste Schritt war, Entscheidungen über einzelne Komponenten für jeden Block im Blockdiagramm zu treffen!

Schritt 4: Komponenten auswählen

Es stellte sich heraus, dass es in dieser Schaltung ziemlich viele Komponenten gab. Im Folgenden habe ich einige der wichtigsten herausgesucht, zusammen mit einer Erklärung, warum ich sie gewählt habe.

Die LEDs

Für die binäre Schnittstelle war die Wahl ziemlich einfach. Ich wusste, dass ich LEDs für die Anzeige verwenden wollte und fand heraus, dass ich 16 davon (in einem 4×4-Raster) brauchte, um so viele Informationen wie möglich anzuzeigen. Bei meiner Recherche nach der perfekten LED tauchte immer wieder die APA102 auf. Es handelt sich um eine sehr kleine (2 mm x 2 mm) adressierbare LED mit einer breiten Farbpalette und ist recht günstig. Obwohl ich noch nie zuvor mit ihnen gearbeitet hatte, schienen sie perfekt für dieses Projekt zu passen, also entschied ich mich, sie zu verwenden.

Der Mikrocontroller

Auch die Wahl eines Mikrocontrollers war recht einfach. Ich habe viel Erfahrung mit dem Atmega328P-AU in Standalone-Anwendungen und war mit seinen Funktionen sehr vertraut. Dies ist der gleiche Mikrocontroller, der in den Arduino Nano-Boards verwendet wird. Ich bin mir bewusst, dass es wahrscheinlich einen billigeren Mikrocontroller gibt, den ich hätte verwenden können, aber zu wissen, dass der Atmega328 alle Arduino-Bibliotheken vollständig unterstützen würde, war ein wichtiger Faktor bei der Auswahl für dieses Projekt.

Die RTC (Echtzeituhr)

Die primäre Anforderung für die RTC war Genauigkeit. Ich wusste, dass die Uhr keine Internetverbindung haben würde und sich daher nicht über eine Internetverbindung neu kalibrieren könnte, der Benutzer müsste sie manuell neu kalibrieren. Daher wollte ich die Zeitmessung so genau wie möglich machen. Die M41T62 RTC hat eine der höchsten Genauigkeiten, die ich finden konnte (± 2 ppm, was ± 5 Sekunden pro Monat entspricht). Die Kombination der hohen Genauigkeit mit der I2C-Kompatibilität und dem extrem niedrigen Stromverbrauch machte diese RTC zu einer guten Wahl für dieses Projekt.

DC-DC-Aufwärtswandler

Die Auswahl des DC-DC-Aufwärtswandler-ICs erfolgte einfach durch Betrachten der Schaltung und Herausfinden der erforderlichen Spannungen und Ströme. Das Betreiben der Schaltung mit niedriger Spannung würde den Stromverbrauch verringern, aber ich konnte nicht unter 4,5 V gehen (die minimale Mikrocontrollerspannung bei 16 MHz Takt) und ich konnte nicht über 4,5 V (die maximale Spannung der RTC) gehen. Dies bedeutete, dass ich die Schaltung mit genau 4,5 V betreiben musste, um die Komponenten innerhalb ihrer empfohlenen Spezifikationen zu betreiben. Ich habe berechnet, dass der maximale Strom der Schaltung 250 mA nicht überschreiten würde. Also machte ich mich auf die Suche nach einem Aufwärtswandler, der die Anforderungen erfüllen konnte und stieß schnell auf den TPS61220. Der TPS61220 benötigte nur wenige externe Komponenten, war recht günstig und konnte die Strom- und Spannungsanforderungen erfüllen.

Die Batterie

Die primäre Anforderung an die Batterie war die Größe. Die Batterie musste klein genug sein, damit sie in das Uhrengehäuse passt, ohne dass sie sperrig wirkt. Ich dachte, dass die Batterie 20 mm × 35 mm × 10 mm nicht überschreiten darf. Mit diesen Größenbeschränkungen und dem Strombedarf von 250mA beschränkte sich meine Akkuauswahl auf LiPo-Akkus. Auf Hobbyking habe ich einen "Turnigy nano-tech 300mAh 1S" Akku gefunden, den ich verwenden wollte.

Der Lade-IC

Für den Laderegler gab es keine besonderen Anforderungen, außer dass er mit einem 1S-LiPo-Akku kompatibel sein musste. Ich habe den MCP73831T gefunden, einen vollständig integrierten Laderegler, der für Einzelzellen-Ladeanwendungen entwickelt wurde. Eine seiner Funktionen ist die Möglichkeit, den Ladestrom über einen externen Widerstand einzustellen, was ich in dieser Anwendung sehr nützlich fand.

LiPo-Schutz

Ich wollte eine Spannungs- und Stromüberwachung einschließen, um die Batterie vor gefährlichen Überladungs- und Tiefentladungszuständen zu schützen. Es gab eine begrenzte Anzahl von ICs, die solche Funktionen boten, und eine der billigeren Optionen war der BQ29700 IC. Es erforderte nur eine minimale Anzahl externer Komponenten und enthielt den gesamten notwendigen Schutz für einen einzelligen LiPo-Akku.

Nachdem die Komponenten ausgewählt waren, war es an der Zeit, den Schaltplan zu erstellen!

Schritt 5: Der Schaltplan

Der Schaltplan
Der Schaltplan

Mit Altium Designer konnte ich den obigen Schaltplan anhand der Empfehlungen aus den Datenblättern der einzelnen Komponenten zusammenstellen. Der Schaltplan ist in verschiedene Blöcke unterteilt, um ihn besser lesbar zu machen. Ich habe auch einige Notizen mit wichtigen Informationen hinzugefügt, falls jemand anderes dieses Design neu erstellen möchte.

Der nächste Schritt war das Anlegen des Schaltplans auf einer Platine!

Schritt 6: PCB-Layout

PCB-Layout
PCB-Layout
PCB-Layout
PCB-Layout
PCB-Layout
PCB-Layout
PCB-Layout
PCB-Layout

Das PCB-Layout erwies sich als der schwierigste Teil dieses Projekts. Ich habe mich für eine 2-Lagen-Leiterplatte entschieden, um die Herstellungskosten der Leiterplatte auf ein Minimum zu reduzieren. Ich entschied mich für eine Standarduhrgröße von 36 mm, da dies ziemlich gut zu den LEDs zu passen schien. Ich fügte einige 1-mm-Schraubenlöcher hinzu, um die Platine im Uhrengehäuse zu befestigen. Das Ziel war es, ein sauberes und gut aussehendes Design beizubehalten, indem alle Komponenten (außer natürlich die LEDs) auf der unteren Schicht platziert wurden. Ich wollte auch die absolut minimale Anzahl von Vias verwenden, um zu vermeiden, dass sichtbare Vias auf der obersten Ebene vorhanden sind. Dies bedeutete, dass ich alle Spuren auf einer einzigen Ebene verlegen musste, während ich darauf achten musste, die "verrauschten" Teile der Schaltung von den empfindlichen Signalspuren fernzuhalten. Ich habe auch darauf geachtet, alle Leiterbahnen so kurz wie möglich zu halten, die Bypass-Kondensatoren nahe an der Last zu platzieren, dickere Leiterbahnen für Hochleistungskomponenten zu verwenden und ansonsten alle gängigen guten Praktiken des PCB-Designs zu befolgen. Das Routing hat ziemlich lange gedauert, aber ich denke, es ist sehr gut geworden.

Der nächste Schritt war die Erstellung eines 3D-Modells für das Uhrengehäuse!

Schritt 7: 3D-Design

3D-Design
3D-Design
3D-Design
3D-Design
3D-Design
3D-Design

Das Uhrengehäuse wurde nach einem sehr konventionellen, klassischen Uhrendesign mit Fusion 360 entworfen. Ich habe einen Standardabstand von 18 mm für das Uhrenarmband verwendet, um die Uhr mit einer Vielzahl anderer Armbänder kompatibel zu machen. Der Ausschnitt für die Platine wurde 0,4 mm größer als die Platine selbst entworfen, um eventuelle Fertigungsungenauigkeiten auszugleichen. Ich habe einige Schraubpfosten zur Montage der Platine und eine kleine Kante zum Auflegen der Platine beigefügt. Ich habe darauf geachtet, die Platine einen Fem-Millimeter von oben zu versenken, um zu vermeiden, dass die scharfen Kanten der LEDs an der Kleidung hängen bleiben. Die Höhe des Gehäuses wurde ausschließlich durch die Dicke der Batterie bestimmt. Der Rest des Gehäuses wurde so gestaltet, dass er mit abgerundeten Kanten und polierten Ecken einfach gut aussieht. Ich musste das Design 3D-druckfreundlich halten, damit ich es ohne Hilfsmaterial zu Hause 3D-drucken konnte.

Nachdem die Hardware nun fertig war, war es an der Zeit, mit der Arbeit an der Software zu beginnen!

Schritt 8: Der Code

Der Code
Der Code

Ich begann den Code, indem ich alle notwendigen Bibliotheken einfügte. Dazu gehört die Bibliothek zur Kommunikation mit der RTC und zum Ansteuern der LEDs. Danach habe ich für jeden der Modi separate Funktionen erstellt. Wenn der Benutzer den Modus durch Drücken einer Taste umschaltet, ruft das Programm die diesem Modus entsprechende Funktion auf. Wenn der Benutzer innerhalb einer bestimmten Zeit keinen Knopf drückt, geht die Uhr in den Ruhezustand.

Der Schlafmodus wird dadurch angezeigt, dass alle LEDs verblassen, bis sie vollständig erloschen sind. Die Verwendung des Schlafmodus erhöht die Batterielebensdauer erheblich und hält die LEDs ausgeschaltet, wenn sie nicht verwendet werden. Der Benutzer kann die Uhr durch Drücken der oberen Taste aufwecken. Beim Aufwachen überprüft die Uhr den Batteriestand, um sicherzustellen, dass sie nicht aufgeladen werden muss. Wenn eine Aufladung erforderlich ist, blinken die LEDs einige Male rot, bevor die Uhrzeit angezeigt wird. Wenn der Akku einen kritischen Wert unterschreitet, schaltet er sich überhaupt nicht ein.

Die restliche Zeit wurde programmiert, um die anderen Modi so intuitiv wie möglich zu gestalten. Ich dachte, dass es am intuitivsten wäre, die gleiche Schaltfläche für die gleiche Funktionalität in allen Modi zu verwenden. Nach einigen Tests ist dies die Tastenkonfiguration, die ich mir ausgedacht habe:

  • Drücken der oberen Taste: Aufwachen / Wechseln zwischen den Modi "Zeit anzeigen", "Datum anzeigen", "Stoppuhr" und "Alarm".
  • Halten der oberen Taste: Rufen Sie den Modus "Uhrzeit einstellen", "Datum einstellen", "Stoppuhr starten" oder "Alarm einstellen" auf.
  • Drücken der unteren Taste: Erhöhen Sie die Helligkeit.
  • Untere Taste gedrückt halten: Wechseln Sie in den Modus "Farbe wählen".

Die untere Taste ist immer für die Helligkeits- und Farbanpassungen verantwortlich, unabhängig davon, in welchem Modus Sie sich befinden. Wenn der Benutzer in den Modus "Farbe wählen" wechselt, beginnen die LEDs, alle möglichen RGB-Farben zu durchlaufen. Der Benutzer kann die Animation anhalten und die Farbe auswählen, die er für diesen bestimmten Modus bevorzugt (Anzeigezeit in Rot, Anzeigedatum in Blau usw.). Die Farben sollen vom Benutzer leicht anpassbar sein, um ihm zu helfen, zwischen den verschiedenen Modi zu unterscheiden.

Nachdem der Code fertig war, war es an der Zeit, ihn auf den Mikrocontroller hochzuladen!

Schritt 9: Programmierung

Programmierung
Programmierung

Es war fast Zeit für das Löten und die Montage, aber vorher musste ich den Mikrocontroller programmieren. Ich habe diese Anleitung befolgt

Brennen Sie den Bootloader auf ein ATmega328P-AU SMD

wie man einen Bootloader brennt und den Mikrocontroller mit einem normalen Arduino Uno als Programmierer programmiert.

Der erste Schritt bestand darin, das Arduino Uno in einen ISP zu verwandeln, indem der Beispielcode "ArduinoISP" hochgeladen wurde. Ich habe ein Steckbrett zusammen mit einer Programmierbuchse verwendet und den Schaltplan aus dem Tutorial verdrahtet. Danach konnte ich den Bootloader auf den Mikrocontroller brennen, indem ich in der Arduino IDE einfach auf "Burn Bootloader" drückte.

Sobald der Mikrocontroller einen Bootloader hatte, habe ich einfach den vorhandenen Mikrocontroller vom Arduino Uno entfernt und das Arduino Uno-Board als USB-zu-Seriell-Adapter verwendet, um den Code auf den Mikrocontroller in der Programmierbuchse hochzuladen. Nachdem der Upload abgeschlossen war, konnte ich mit dem Lötvorgang beginnen.

Der nächste Schritt war das Sammeln aller Komponenten und das Zusammenlöten!

Schritt 10: Löten

Löten
Löten
Löten
Löten
Löten
Löten
Löten
Löten

Der Lötprozess wurde in zwei Teile geteilt. Zuerst musste die untere Schicht gelötet werden und dann die obere Schicht.

Ich befestigte die Uhrenplatine zwischen ein paar Prototypenplatinen mit Klebeband. Dadurch wurde sichergestellt, dass sich die Leiterplatte beim Löten nicht bewegt, was sehr wichtig ist. Dann legte ich die Lötschablone über die Leiterplatte und verwendete eine großzügige Menge Lötpaste, um alle Lötpads zu bedecken. Ich fuhr fort, eine dünne Pinzette zu verwenden, um alle Komponenten auf die entsprechenden Pads zu legen. Ich habe dann eine Heißluftpistole verwendet, um alle Komponenten an Ort und Stelle aufzuschmelzen.

Als die untere Schicht gelötet wurde, habe ich sie schnell visuell überprüft, um sicherzustellen, dass das Löten erfolgreich war. Dann drehte ich die Platine um und wiederholte den Lötvorgang auf der anderen Seite, diesmal mit allen LEDs. Es war sehr wichtig, die Platine beim Löten der oberen Schicht nicht zu überhitzen, da alle Komponenten auf der Unterseite abfallen können. Zum Glück blieben alle Komponenten an Ort und Stelle und nach dem Anlöten der Knöpfe mit einem normalen Lötkolben war die Platine fertig!

Nun ging es an die Endmontage!

Schritt 11: Montage

Montage
Montage

Der Zusammenbau war sehr einfach. Ich habe die Batterie an die Platine angeschlossen und die Batterie und die Platine in das 3D-gedruckte Gehäuse gelegt. Ich fuhr fort, die vier Schrauben in den Befestigungslöchern in jeder Ecke der Platine einzuschrauben. Danach habe ich die Uhrenarmbänder mit den 18mm Federstegen befestigt und die Uhr war fertig!

Schritt 12: Fazit und Verbesserungen

Fazit und Verbesserungen
Fazit und Verbesserungen
Fazit und Verbesserungen
Fazit und Verbesserungen

Die Uhr funktioniert wie erwartet und ich bin sehr zufrieden mit dem Ergebnis. Ich hatte bisher keine Probleme damit und der Akku bleibt auch nach einer ganzen Woche Nutzung fast vollständig geladen.

Ich könnte der Uhr in Zukunft weitere Funktionen hinzufügen. Da der USB-Port mit dem Mikrocontroller verbunden ist, kann die Firmware jederzeit mit neuen Features aktualisiert werden. Vorerst werde ich diese Version der Uhr jedoch weiterhin verwenden und sehen, wie sie sich nach längerem Gebrauch hält.

Wenn Sie Gedanken, Kommentare oder Fragen zu diesem Projekt haben, hinterlassen Sie diese bitte unten. Sie können sie auch an [email protected] senden.

Uhrenwettbewerb
Uhrenwettbewerb
Uhrenwettbewerb
Uhrenwettbewerb

Erster Preis beim Uhrenwettbewerb

Empfohlen: