Digital / Analog Clock - Arduino + Papercraft
11 Schritt:Schritt 1: Sammeln Sie Ihre Materialien Schritt 2: Testen Sie die elektronischen Teile Schritt 3: Entwerfen Sie die Uhr Schritt 4: Schneiden Sie die Stücke Schritt 5: Construction Schritt 6: Fügen Sie die Ziffern Schritt 7: Fügen Sie die Servos Schritt 8: Fertig Bauprojekte Schritt 9: Anschlussklemmen verdrahten Elektronik Schritt 10: Programing Schritt 11: Fertig
In diesem instructable werden wir Neuerstellung einer Uhr inspiriert von Alvin Aronson ursprünglicher Entwurf. Als ich zum ersten Mal sah diese Uhr war ich sehr beeindruckt, wie sauber das elegante Design wurde das wollte ich sofort um diesen Effekt zu erstellen.
Alvin Aronson ursprünglicher Entwurf (hergestellt mit Corian und Holz):
Ich hoffe, dass einige von Ihnen das gleiche Gefühl und verwenden Sie diese als Leitfaden für sein Ein-Schritt näher an mit einem Ihrer eigenen
Im Wesentlichen haben wir eine Sieben-Segment-Takt, wo anstelle von LEDs haben wir Stellen, die in und aus dem Fensterbereich, wird der Schatten, die durch diese Ziffern ermöglichen es dem Benutzer, um die Zeit vor dem weißen Ziffern auf weiß zu lesen. Durch die Verwendung von 28 Servos, können wir eine Arduino zum ersten Prozess verwenden die aktuelle Zeit und drücken Sie die Ziffern aus entsprechend durch die Motorsteuerung. weitere werden in den späteren Seiten erläutert.
Ich habe versucht, die Teile so einfach wie möglich zu halten, unter Verwendung leicht verfügbarer Teile ohne tiefe Kenntnis der Elektronik kann man beginnen, erkunden ihre eigenen Takt. Ich habe keine 3D-Drucker so Konstruktion wird anhand eines Papierhand erfolgen.
Schritt 1: Sammeln Sie Ihre Materialien
-
Hier sind die Dinge, die Sie benötigen. Ich hatte vor, diese in der Kategorie "kit Wettbewerb" passen, so habe ich den Aufbau, einfache Teile ohne Notwendigkeit zum Löten beschränkt. Alternativ. Arduino Uno und Motor-Controller ersetzt mit Arduino Mega die Wand ermöglichen die direkte Steuerung von bis zu 64 Servos können. Die Baukosten kostete mich rund 130 € in Teilen. Denken Sie daran, können Sie die Teile wieder verwendet, um andere große Projekte wie ein Hexapod zu schaffen!
Die Elektronik Kit:
Arduino Uno
DS1307 oder RTC-Uhr Breakout Spur hält der Zeit
Servomotor-Controller - steuert Servomotoren
28 Servos - sie um 180 Grad drehen
Konstruktion:
Karton
Hobby Aluminiumrohr * - Um Ziffern, sanft zu gleiten; benötigen einen Innen- und Außenrohr
Doppelseitiges Klebeband
Haftnotizen
Büroklammer
* Oder nutzen Sie eine Packung billige Bleistifte
Werkzeuge:
Papercutter - shiloutte Portrait (optional)
Klebepistole
Dremel - bis Schlauch geschnitten (optional)
Messer (optional)
Schritt 2: Testen Sie die elektronischen Teile
-
Servos
So dass Sie einen schönen Ball von Servos haben jetzt. Besser testen sie zuerst. (Ein von mir waren defekt)
Schließen Sie die SSC-32 mit dem Arduino mit dem beigefügten Bild als Anleitung
http://marc-tetrapod.blogspot.ca/2012/10/arduino-ssc-32-servo.html
RTC
Was die RTC können Sie tun, ist Ihre Arbeitszeiten mit einem kleinen Lithium-Batterie. Jedes System, [Ihr Computer und Ihr Telefon] mit einer Uhr wird eine haben. Dies ist die am häufigsten verwendete Weg, um die Zeit zu, wenn die Dinge ein / aus ständig mit Strom versorgt. Wir werden später in diesem instructable hook up diese Schaltung
Schritt 3: Entwerfen Sie die Uhr
- Folgende Stücke wurden in Adobe Illustrator gestaltet. Mit der Absicht, auf Papier zu schneiden. Wenn Sie einen 3D-Drucker sind, werden Sie wahrscheinlich haben, um verschiedene Methoden verwenden, aber die Grundidee ist die gleiche. Auch bitte teilen Sie Ihre Designs :)
Wir haben 6 Schichten:
[01] Vordere Face - Clock Face
[01] Frontseiten-Gesicht - Segment Gesicht
[02] Frontschild - Hält Tubing
[03] Basis - Hält Servo + Tubing
[03] Basis - Hält Servo + Tubing
[04] Zurück Shield - Hält Servo
Hinweis: Einige Dateien müssen zweimal geschnitten werden. siehe oben für die Bestellung von Details
Schritt 4: Schneiden Sie die Stücke
-
Alle 7 Artikel anzeigen
Folgende Stücke wurden in Adobe Illustrator gestaltet und mit einem shiloutte Portrait geschnitten. Wenn Sie das Gefühl, dass Sie die Zeit haben möchten Sie vielleicht auch von Hand ausgeschnitten diese Schichten.
Die Metallstäbe wurden mit einem Dremel zu schneiden. Ich schneide das größere Rohr 1cm und die eine, die in ihm gleitet, um 2cm
Schritt 5: Construction
Schritt 6: Fügen Sie die Ziffern
Schritt 7: Fügen Sie die Servos
Schritt 9: Anschlussklemmen verdrahten Elektronik
-
Servo Controller- Es gibt 32 Pins auf der SSC-32 Controller, stecken Sie Ihre 28 Servos in sicherstellen, dass Sie, um zu gehen. Schließen Sie den RX Pin an die TX Pint auf der Arduino Schließen Sie den Erdungsstift zu Arduino Erdungsbolzen
Weitere Informationen http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/overview- Schließen Sie 5V bis 5V Arduino Connect GND zu GND Arduino Connect SDA analoge Stift 4. Schließen SCL Arduino analogen Pin 5 Arduino.
Schritt 10: Programing
- Algorithmus
Hauptschleife- Abrufen Zeit vom RTC-Modul (in Stunden und Minuten) Wenn die Zeit verschiedene Anzeigezeit Wiederholen
- Zwischenzeit in vier Ziffern. (Unter Verwendung von Modulo / div 10) Für jeden Sieben-Segment-Anzeige, Bewegen Segmente heraus stellige Anzeige
- Zeigen Decoderlogik. Übersetzen int in Sieben-Segment-Bestellung. Bewegen benötigt Servos von X Grad. Bewegen Sie nicht benötigte Servos Y Grad (X steht für die Stellung und Y ist die Lage der Ebene.
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
Kurz Sega = 0; // Anzeigestift 14
Kurz SEGB = 1; // Anzeigestift 16
Kurz SEGC = 2; // Anzeigestift 13
Kurz SEGD = 3; // Anzeige Pin 3
Kurz Sege = 4; // Anzeige Pin 5
Kurz segF = 5; // Anzeigestift 11
Kurz SEGG = 6; // Anzeigestift 15
Kurz segA_OUT = 110;
Kurz segB_OUT = 110;
Kurz segC_OUT = 110;
Kurz segD_OUT = 110;
Kurz segE_OUT = 110;
Kurz segF_OUT = 110;
Kurz segG_OUT = 110;
Kurz segA_IN = 90;
Kurz segB_IN = 90;
Kurz segC_IN = 90;
Kurz segD_IN = 90;
Kurz segE_IN = 90;
Kurz segF_IN = 90;
Kurz segG_IN = 90;
int TIME = 2000;
Datetime datePast;
Datetime dateNow;
// Housekeeping
Leere setup () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.adjust (Datetime (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// Hauptschleife
Leere Schleife () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
Display- (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// Angesichts einer Reihe, zeigen wir 10.22
// Nach dem durch die 4 Zahlen läuft, wird die Anzeige ausgeschaltet bleibt
nichtig Display- (int toDisplay) {
for (int Ziffer = 4; Ziffer> 0; digit--) {
lightNumber (toDisplay% 10, Ziffer);
toDisplay / = 10;
}
// Bewegung zu starten
Serial.print ("T"); Serial.println (Zeit);
}
Leere move (int Servo, int Position) {
Serial.print ("#");
Serial.print (Servo);
Serial.print ("P");
Serial.print (Position);
}
// Angesichts einer Reihe, dreht sich auf jene Segmente
// Wenn Nummer == 10, und schalten Sie dann Anzahl
nichtig lightNumber (int numberToDisplay, int Segment) {
int offset = (Segment - 1) * 7;
Schalter (numberToDisplay) {
Bei 0:
bewegen (Sega + Offset, segA_OUT);
bewegen (SEGB + Offset, segB_OUT);
bewegen (SEGC + Offset, segC_OUT);
move (SEGD + Offset, segD_OUT);
move (Sege + Offset, segE_OUT);
bewegen (segF + Offset, segF_OUT);
move (SEGG + Offset, segG_IN);
brechen;
Fall 1:
bewegen (Sega + Offset, segA_IN);
bewegen (SEGB + Offset, segB_OUT);
bewegen (SEGC + Offset, segC_OUT);
move (SEGD + Offset, segD_IN);
move (Sege + Offset, segE_IN);
bewegen (segF + Offset, segF_IN);
move (SEGG + Offset, segG_IN);
brechen;
Fall 2:
bewegen (Sega + Offset, segA_OUT);
bewegen (SEGB + Offset, segB_OUT);
bewegen (SEGC + Offset, segC_IN);
move (SEGD + Offset, segD_OUT);
move (Sege + Offset, segE_OUT);
bewegen (segF + Offset, segF_IN);
move (SEGG + Offset, segG_OUT);
brechen;
Fall 3:
bewegen (Sega + Offset, segA_OUT);
bewegen (SEGB + Offset, segB_OUT);
bewegen (SEGC + Offset, segC_OUT);
move (SEGD + Offset, segD_OUT);
move (Sege + Offset, segE_IN);
bewegen (segF + Offset, segF_IN);
move (SEGG + Offset, segG_OUT);
brechen;
Fall 4:
bewegen (Sega + Offset, segA_IN);
bewegen (SEGB + Offset, segB_OUT);
bewegen (SEGC + Offset, segC_OUT);
move (SEGD + Offset, segD_IN);
move (Sege + Offset, segE_IN);
bewegen (segF + Offset, segF_OUT);
move (SEGG + Offset, segG_OUT);
brechen;
Fall 5:
bewegen (Sega + Offset, segA_OUT);
bewegen (SEGB + Offset, segB_IN);
bewegen (SEGC + Offset, segC_OUT);
move (SEGD + Offset, segD_OUT);
move (Sege + Offset, segE_IN);
bewegen (segF + Offset, segF_OUT);
move (SEGG + Offset, segG_OUT);
brechen;
Fall 6:
bewegen (Sega + Offset, segA_OUT);
bewegen (SEGB + Offset, segB_IN);
bewegen (SEGC + Offset, segC_OUT);
move (SEGD + Offset, segD_OUT);
move (Sege + Offset, segE_OUT);
bewegen (segF + Offset, segF_OUT);
move (SEGG + Offset, segG_OUT);
brechen;
Fall 7:
bewegen (Sega + Offset, segA_OUT);
bewegen (SEGB + Offset, segB_OUT);
bewegen (SEGC + Offset, segC_OUT);
move (SEGD + Offset, segD_IN);
move (Sege + Offset, segE_IN);
bewegen (segF + Offset, segF_IN);
move (SEGG + Offset, segG_IN);
brechen;
Fall 8:
bewegen (Sega + Offset, segA_OUT);
bewegen (SEGB + Offset, segB_OUT);
bewegen (SEGC + Offset, segC_OUT);
move (SEGD + Offset, segD_OUT);
move (Sege + Offset, segE_OUT);
bewegen (segF + Offset, segF_OUT);
move (SEGG + Offset, segG_OUT);
brechen;
Fall 9:
bewegen (Sega + Offset, segA_OUT);
bewegen (SEGB + Offset, segB_OUT);
bewegen (SEGC + Offset, segC_OUT);
move (SEGD + Offset, segD_OUT);
move (Sege + Offset, segE_IN);
bewegen (segF + Offset, segF_OUT);
move (SEGG + Offset, segG_OUT);
brechen;
Fall 10:
bewegen (Sega + Offset, segA_IN);
bewegen (SEGB + Offset, segB_IN);
bewegen (SEGC + Offset, segC_IN);
move (SEGD + Offset, segD_IN);
move (Sege + Offset, segE_IN);
bewegen (segF + Offset, segF_IN);
move (SEGG + Offset, segG_IN);
brechen;
}
}
Andere
Sie müssen auch zu Ihnen setzen RTC-Uhr zum ersten Mal. Dadurch erhalten sie eine Startzeit gleich der einer auf Ihrem Computer. Sie müssen das RTC-Bibliothek, um den folgenden Code ausführen.
# include
#include "RTClib.h"
RTC_DS1307 RTC;
Leere setup () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
if (! RTC.isrunning ()) {
Serial.println ("RTC läuft nicht!");
RTC.adjust (Datetime (__ DATE__, __TIME__));
}
}