Arduino Etch-A-Sketch Clock
9 Schritt:Schritt 1: - (! Teileliste für uns Briten) Stückliste Stückliste Schritt 2: Construction - Frame Schritt 3: Construction - Driving the EAS Knöpfe Schritt 4: Aufbau - Montage und Fahren mit dem EAS-Rotation Schritt 5: Electronics Schritt 6: Software - Einstellen der Uhr Schritt 7: Software - Testing Schritt 8: Software - die Haupt-Code! Schritt 9: Abschließende Hinweise
Ich habe verschiedene Arduino angetrieben Etch-A-Sketch Uhren, die im Internet zu sehen, aber keiner mit Anweisungen (es ist eine Art Geheimnis? Ist jemand Planung betreffend die reich an der Etch-A-Sketch Clock globalen Markt?). Ich habe Arduino verwendet, aber nie Schrittmotoren, Echtzeituhren, nie auf dieses Niveau (sich als eigentlich ganz einfach) codiert verwendet, und etwas von Grund nie wirklich gebaut.
Ich habe den Code von jemandem, der ein EAS (Etch-A-Sketch) gemacht hatte, die zufällige Linien, dann von dort gelernt, zog (sein Code hat mich gelehrt, wie man Stepper fahren und wie Case-Anweisungen verwenden).
Es ist alles wirklich ziemlich einfach. Der schwierigste Teil ist die Definition jeder numerische Ziffer im Code als jeder EAS ist etwas anders. Zum Beispiel, wenn Sie drehen ein EAS-Knopf nach links den "Cursor" auf die EAS geht nach links. Man könnte dies zu messen, und schnell den Code schreiben, dass "-1600" Schritte des Schrittmotors zieht 2cm der Linie auf die EAS in die linke Richtung.
Sie würden dann davon ausgehen, dass "1600" Schritte 2 cm Linie auf die EAS in die richtige Richtung geben würde, aber es wird nicht. Sie werden wahrscheinlich um 1 cm. Dies, da die EAS ist ein "analoges" Gerät mit einer eigenen analogen Schwächen. Sie werden bemerken, dass, wenn Sie einen Regler drehen in eine Richtung und dann die Richtung ändern, die Zeichnung Stift hinter so locker in die inneren Mechanismen Verzögerung aufgenommen wird.
Der genaue Abstand jedes EAS Knopf bewegt den Stift / Cursor über die EAS ist davon abhängig, was sie zuletzt gemacht haben! dh, wenn die EAS gerade bewegt, wird der nächste Schritt nach rechts, wird anders sein als wenn es nur links verschoben werden. etc etc.
Das bedeutet, jede Zahl / Ziffer muss manuell berechnet werden. Es war eine Menge Arbeit. Nicht schwer, aber es benötigt Geduld. Ich habe es über mehrere Abende. Sie werden die Ziffern 8,9 und 0 sind nicht so schön wie das waren die letzten, die tun, bemerken, und ich hatte meine Geduld bis dahin verloren! Sie können sie leicht tune Fein :-)
Um herauszufinden, die Zahlen I gedruckt 0-9 in einer "digitalen" font und dann schneiden Sie die Zahlen aus. Ich habe dann stecken sie auf die EAS und "zog" um sie herum mit der EAS Testcode (mehr dazu später).
Schritt 1: - (! Teileliste für uns Briten) Stückliste Stückliste
- Das ist ziemlich flüssig - ich werde Ihnen ein paar Optionen am Ende geben.
Perspex / Acrylic Sheet A3 - 3 mm dick £ 5
Perspex / Acrylic Sheet A3 - 4 mm breites £ 6,80
Alle unten waren aus http://www.zappautomation.co.uk/en/
8mm glatte Stahlstange 300mm SFC8 £ 3,60
8mm Stange klemmt x 2 SK08 £ 2,82
T2.5 32 Zahnscheibe für EAS Rotation £ 3,49
T2.5 Gürtel 6 mm breit 145 mm lang für EAS Rotation £ 3,96
Nema 17 Motor SY42STH33-1334A für EAS Dreh £ 11,00 (ich fand besser da, später zu lesen)
Diese waren von beltingonline.com
T2.5 6mm breit 177,50 lange Bänder 2 x 6,98 £ für beide
T2.5 30 Zähne Riemenscheibe 2 x 5,91 £ für beide
T2.5 20 Zähne Riemenscheibe x 4 10,94 £ für alle 4 (Sie brauchen nur 3)
ITC RTC DS1307 AT24C32 - Real Time Clock mit Akku 2,85 £ Chinese Ebay Verkäufer
5V-Schrittmotor mit ULN2003-Treiber x 2 jeweils oder weniger £ 3,30 - Ebay
Easydriver - Arduino Schrittmotor-Treiber (http://www.schmalzhaus.com/EasyDriver/) 3,00 £ oder weniger - Ebay (Chinese Verkäufer)
Etch-A-Sketch - rund £ 10 ab Tesco online.
12V Stromversorgung - mindestens 2 A - £ variiert
Arduino Arduino Uno ATMega328 Chip Kit £ 3,50 - das ist der Arduino-Chips, Widerstände, Kristall, und 5V-Regler-Kit. Sie könnten genauso gut auf einem Brett Verkauf von Arduino. Es spielt keine Rolle. Dies ist nur der billigste Weg.
Zusätzliche Bemerkungen:
Die kleinen Schrittmotoren (x2) mit den ULN2003 Treiber kostet so gut wie nichts auf Ebay. Ich kaufte sie, als ich das Experimentieren und wusste nicht einmal, ob ich in der Lage sein, dieses zu erhalten, um überhaupt zu arbeiten, so wollte nicht zu viel Geld zu begehen. Sie sind langsam. Aber sie arbeiten. Sie erhalten auch sehr heiß, aber scheint ok. Sie sind langsam genug, dass es dauert etwa 2,5 Minuten, um die Zeit zu ziehen. Ich habe dann die Uhr anzuhalten eine Weile, dann ziehen Sie die Uhrzeit neu ein. Auf diese Weise können die Motoren halten und die EAS wird nicht ständig aktualisiert, die sicherlich tragen würde es in kurzer Zeit. Mein nächster Schritt ist, um sie mit NEMA 17 Motoren ersetzen.
Der Schrittmotor für die EAS Drehung war ein Fehler. Ich wusste nicht, was ich tat. Es funktioniert, aber nur knapp! - Es erfordert 1.3Amps pro Phase bei vollem Drehmoment laufen und ist auch ganz ein kleiner Motor. Die Easydriver Schrittmotor-Treiber wird nur auf etwa 750mA bewertet, so kann es den Schritt bei vollem Drehmoment nicht ausgeführt. Mit Einstellung der Leistung Schraube an der Easydriver es stellt sich die EAS, aber das Gewicht der EAS muss ziemlich gut ausbalanciert, um die Arbeit aus ihm heraus zu nehmen.
Ich kaufte einige seit Nema 17 Schrittmotoren, die bei 0.8amp pro Phase bei 6V bewertet werden, und sie sind nicht zu stoppen!
Die einfache Treiber kann auch mit einem generischen L298N 4-Draht Schrittmotor-Treiber ersetzt werden - aber sie kosten fast das gleiche, und haben keine schöne glatte Mikro wie die Easydriver hat, und sie mehrere Drähte zu verwenden! Ich verließ die auskommentierten Code in der Haupt Arduino Sketch so können Sie sehen, wo ich erste verwendet einen dieser Treiber, die EAS drehen (bevor ich verbrannte es mit dem falschen Motor!).
Schritt 2: Construction - Frame
-
Dies ist das erste, was Sie brauchen, um, wie Sie können nicht wirklich jede Motorsteuerung der EAS testen mit heraus, es. Sie brauchen nicht, um über das Hinzufügen der EAS Drehmotorsteuerung erst viel später Sorgen, wenn Sie nicht wollen, um. Achten Sie darauf, die EAS Rahmen (Inhaber) erste, so dass Sie wissen, welche Größe zu mounten, damit es nicht traf die Basis, wenn sie sich dreht zu bauen!
Ich habe 4 mm Acryl für die Basis und die Seiten, und 3 mm Acryl für die EAS Halter / Rahmen.
Sie wollen bei Ihnen nach Ihrem Geschmack zu bauen, sondern um Ihnen zu helfen, meine Maße (grob) sind:
Basis = 20cm durch 32cm
Seiten = 10cm x 18cm
Seitenwelle / Spindelöffnung = 16 cm von der Basis
EAS Rahmen 3 mm Platte (ungebogenen) = 30-31cm lang x 24,5 breit (könnte dünner sein)
Für die EAS Rahmen (Inhaber) habe ich eine Heißluftpistole, um das Acryl in eine "U" -Form am Boden zu biegen. Dies war weder einfach, oder ordentlich! - Ich musste die Acrylmehrmals aufwärmen es meist flach zu erhalten !. Google, wie man Acryl biegen - Sie legen Sie es auf eine gute Lineal und dann erwärmen und es biegt. Das Ergebnis ist gut für Casual Inspektion. Als ich hinzufügen, größere Nema 17 Stepper später werde ich ein Stück Acryl schneiden, um die Motoren unter montieren, bringen Sie dann dieses Stück Acryl an der Hauptplatte mit 3cm Stand-offs.
Ich reparierte die Seiten an der Basis mit Ersatz 45 dgree spitzen Klammern hatte ich herumliegen, und dann vernietet sie zusammen. Sie könnten ebenso zusammenschrauben mit Schrauben und Muttern - ich würde empfehlen M3.
Um die EAS Ich versuchte mehrere Experimente zu befestigen. Ich habe gelernt, dass jedes Loch in der EAS ist ein Irrtum! Probieren Sie es aus - und dann versuchen, die Säuberung von Aluminiumpulver .... Am Ende klebte ich die EAS Knöpfe (die gerade abziehen) auf der Rückseite der EAS mit Epoxy 2 Komponentenkleber und gebohrt 2 mm Löcher. Ich hatte 4 von ihnen, wie ich bereits mit Bohrungen in einem anderen EAS experimentiert ...... Verwenden Sie einfach, was Sie zur Hand, um die EAS in einem Abstand von der Platte, die für Sie gesetzt haben. Mein System ermöglicht es mir, die EAS mit 4 Schrauben entfernen, für die Prüfung usw.
Schritt 3: Construction - Driving the EAS Knöpfe
-
Die Motoren für die EAS Knöpfe sind nur verschraubt (M3 Muttern und Schrauben) in die Acryl. Bohren Sie die Löcher für die Schrauben größer als Sie benötigen, dann verwenden Scheiben an den Schrauben. Auf diese Weise können die Riemenspannung, indem der Motor auf seiner Löcher einzustellen.
Ihre Motorriemenscheiben sollten 5mm Löcher haben. Diese werden die Motorwellen gut genug (oder perfekt für NEMA 17 Motoren) entsprechen. Bestellen Sie Ihre Riemenscheiben mit den richtigen Durchmesser Löchern - ich tat es nicht - und sogar mit einer Säulenbohrmaschine, gelang es mir, nicht zentralen Löcher zu bohren - das ist wirklich vermasselt die Riemenspannung.
Die größeren Riemenscheiben müssen wieder 5mm Löcher. Die 30T Riemenscheiben mit 6mm Löcher kommen, also kaufte ich eine 5 mm Innendurchmesser Messingrohr und schob sie in die 6 mm Löcher zu reduzieren bis 5 mm.
Die Riemenspannung muss dicht sein, ohne Biegen der Kunststoff EAS Wellen.
Ich legte die Treiberplatten, die mit den Schrittmotoren kommen auf der Rückseite des EAS-Halterung und gleich um die Drähte geleitet. Wenn ich dachte, ich würde vor 8mm Löcher gebohrt haben und übergeben Sie die Stecker und Leitungen durch die Löcher.
Schritt 4: Aufbau - Montage und Fahren mit dem EAS-Rotation
-
Um die EAS an der Basis und die Seiten habe ich 8 mm Stahlstange als die "Achse" zu montieren, mit Klammern, um die Stange zu halten.
Was ich tat, war zunächst mit der EAS montiert und mit den Motoren installiert, ruhte ich die ganze Sache auf meine Fingerspitzen, um den Schwerpunkt des Ganzen der EAS zu finden - also dort, wo die Stahlstange zu montieren, so wäre es Zum Bilanzpunkt, wenn Sie waren die EAS flach zu haben und zeigte auf die Decke. Dies ist der erste Schritt des Ausgleichens der gesamten Apparat.
Ich habe dann an den Klemmen verschraubt, und die Stahlstange durch eingespeist. Ich bohrte 8mm Löcher in den Seitenwänden, um die Stange zu nehmen. In meinem Entwurf brauchte ich Abstandshalter zwischen den Muscheln und der Seitenrahmen, also kaufte ich eine hohle runde Aluminiumstange von B & Q, die eine ID, die größer als 8 mm ist, hat, und schneiden Sie die Abstandhalter von ihm weg.
Der nächste Schritt ist, um Gewicht die ganze Sache zu begegnen, damit es nicht wollen, um es aus eigenem Antrieb zu drehen. Dies ist das Alu-Rohr ragte die Rückseite mit einem gewissen Stahl und einem g-clamp auf sie. Das ist meine grobe Lösung für den Ausgleich der Gewichts. Sie können erarbeiten eine elegantere Lösung!
Wenn Sie fertig sind, sollte der gesamte EAS ziemlich gleichmäßig zu drehen, ohne es zu wollen natürlich in eine bestimmte Richtung fallen die ganze Zeit. Je ausgeglichener ist, desto geringer ist der Drehmotor zu arbeiten.
Schließlich montiert I eine NEMA 17 Motor auf der Seite, mit zwei Riemenscheiben, um die EAS drehen. Ich bestieg den Motor unter Verwendung von Metallabstandshalter, die geeignet sind den Abstand I benötigt der Motor aus dem Rahmen. Ich habe eine faire paar Abstandshalter zur Hand - Ich empfehle Ihnen einen sortierten Menge von ihnen ebay kaufen - sie sind so nützlich.
Meine Abstandshalter sind weiblich-weiblich - so schneide ich das Ende von einigen kleinen Schrauben, um sie Bolzen für Motorende zu machen.
Auch möchte der Gurtspannung hier dicht sein, aber nicht so verrückt.
Schritt 5: Electronics
-
Ich werde nicht zur Hand halten Sie zu viel hier, wie es ist alles sehr Standard-Sachen, und alle wichtigen Anschlüsse sind in den Arduino Sketch-Dateien beschrieben. Wenn einer das ist neu für Sie, dann schnappen Sie sich einen Steckbrett und ein paar Grund arduino Tutorials 1., wie Blinken einer LED ... - sondern in Zusammenfassung .... (Update - Ich habe einen rough and ready Schaltplan im Anhang)
Die Hauptplatine ist ein Standard-Arduino 328 mit seinen Standard-Kristall, Kondensatoren, Widerstände nach unten ziehen und eine LED auf dem Chip Pin 19 (damit ich sehen kann, wenn er Macht hat und es flackert, wenn ich eine Skizze laden). Gerade google Arduino Brotschneidebrett (http://arduino.cc/en/Main/Standalone) - es ist die gleiche - aber ich weiß nicht mit der 5V-Regler die Mühe, weil die Easydriver Schritttreiberplatine hat 5V reg eingebaut und ich auf dieser Einschalten des Arduino.
Ich benutze einen USB FTDI Programmierer und gerade in die Arduino mit Tx- und Rx-Patch (und Macht und der Erde und Reset) - das ist die 5-polige Breakout auf meiner Platine ..
Ich habe eine Prototyping-Board als die Schaltung ist so einfach ist es nicht wert Drucken einer Leiterplatte (siehe meine anderen Instructable! :-))
Die Echtzeituhr ist tot einfach. Es verbindet sich mit Masse und + 5V, und dann geht SCL Analogons 5 aruino (Chip pin28) und SDA geht analog Pin 4 (Chip Stift 27). Das ist es! Es lohnt sich wirklich das Hinzufügen einer von ihnen. Ohne sie müssten Sie die Zeit in der Arduino jedem versorgt es eingerichtet - und tun, dass mit einer langsamen Zeichnung Uhr wäre ein Albtraum. Auf diese Weise behält der arduino die Zeit, wenn es ausgeschaltet ist.
Die Schrittmotorsteuerungen für die beiden EAS-Regler verbinden nach dem Arduino Sketch Kommentare - vertikale Schritt in1, in2, in3 geht in4 Arduino digitale 4,5,6,7, horizontale Schritt (in1..2..3..4 ) geht an digitalen Pins 2,3,12,13 arduino. Die Schrittmotor-Treiber eine Verbindung zu Ihrem 12v Quelle - Boden und zu leben.
Die Easydriver mit Masse verbunden und leben 12v wieder, und dann die DIR Pin geht auf digitale 8 Arduino und der Schritt geht zu arduino pin digital 9 (leicht hey !! :-))
Ich heiße verklebt die RTC auf das Projekt Bord, dann heiß verklebt alles auf eine Ersatz Bit aus Acryl, die ich fest an die Haupt EAS Platte mit Doppelklebeband.
Wie Sie sehen können, werden die Schrittmotoren mit 12V direkt angetrieben - das ist, wo sie ihre Macht zu erhalten! - Sie dann ihre Signale zu erhalten von der Niederspannungs arduino Seite.
Der Rest ist alles im Code ...
Schritt 6: Software - Einstellen der Uhr
-
Die Software ist in 3 getrennte Skizzen gebrochen.
1- Die Uhrzeiteinstellung
Dieses Programm setzt einfach die Zeit auf dem RTC-Chip zu, dass Ihr PC-Programmierung.
Sie müssen die DS1307RTC Bibliothek in Ihr Arduino IDE zu installieren,
Kopieren und Einfügen in Arduino IDE, kompilieren es, laden Sie sie, und führen Sie es.
Rufen Sie die serielle Monitor in Arduino IDE und Sie werden sehen es die Zeit, die auf dem RTC-Chip gesetzt hat, zu bestätigen.
Fertig! - Man kann nie wirklich brauchen, um diese wieder zu verwenden.
Tip - stellen Sie Ihre PC-Uhr ca. 3 min schnell, wenn Sie dies tun. Auf diese Weise die EAS Uhr ist immer ca. 3 min schnell, und durch die Zeit, zeichnen die Zeit in den EAS beendet hat, wird es richtig! dh durch die Zeit, zu der zweiten Minute stelligen bekommt, wird es fast drei Minuten nach dem Start - so wird es richtig sein :-)
# include
# include
# include
tmElements_t tm;
Leere setup () {
bool analysieren = false;
bool config = false;
// Das Datum und die Uhrzeit der Compiler ausgeführt wurde
if (getTime (__ TIME__)) {
analysieren = true;
// Und konfigurieren Sie die RTC mit dieser info
if (RTC.write (tm)) {
config = true;
}
}
Serial.begin (9600);
während (Serial!); // Warten Arduino Serial Monitor
Verzögerung (200);
if (parsen && config) {
Serial.print ("DS1307 konfiguriert Time =");
Serial.print (__ TIME__);
} Else if (parse) {
Serial.println ("DS1307 Kommunikationsfehler: - {");
Serial.println ("Bitte überprüfen Sie Ihre Schaltung");
} Else {
Serial.print ("Keine Informationen analysieren vom Compiler, Time = \" ");
Serial.print (__ TIME__);
Serial.println ("\" ");
}
}
Leere Schleife () {
}
bool getTime (const char * str)
{
int Hour, Min, Sec;
if (! sscanf (str, "% d:% d:% d", & Hour, Min &, & Sec) = 3) return false;
tm.Hour = Stunde;
tm.Minute = Min;
tm.Second = Sec;
return true;
}
Schritt 7: Software - Testing
- 2 - Testen der Hardware
Das Arduino Sketch ist, was ich geschaffen, um alles außer der Zeitnahme zu testen und zu zeichnen und definieren Sie die Ziffern auf der EAS.
Wieder, kopieren, einfügen, zu kompilieren, hochladen, laufen.
Für dieses Programm auf dem Arduino seriellen Monitor IDE jedesmal, wenn Sie es ausführen wollen, laden Sie, wie das ist, wie wir die EAS zu steuern.
In der seriellen Monitor, Schlüssel Folgenden gefolgt von eingeben, um:
c - löscht den Bildschirm - das heißt dreht die EAS
R, L, udnbsp; - rechts, links, oben und unten für einen geringen Betrag - der EAS Cursor / Stift
p - loooong linken Rück - seien Sie vorsichtig mit dieser, Sie wollen nicht, um die EAS Vergangenheit die Kanten zu fahren. Dies ist hilfreich, wenn bei der Prüfung Nummer Zeichnung und Sie am Ende auf der rechten Ende des Bildschirms.
0-9 - zieht 0 bis 9 auf dem Bildschirm
Mit diesem Programm können Sie sehen, wie es sich die Zahlen auf Ihre speziellen EAS zeichnen und dann den Code für die Feineinstellung zu bearbeiten.
/ *
Kleine Schrittmotor und Treiber
http://arduino-direct.com/sunshop/index.php?l=product_detail&p=126
[Email protected] * /
/ * ----- (Import benötigten Bibliotheken) ----- * /
#include <Stepper.h>
/ * ----- (Declare Konstanten, Pin-Nummern) ----- * /
#define SCHRITTE 32 // Anzahl der Schritte pro Umdrehung
// # Definieren STEPSSIDE 200 // Anzahl Schritte seitigen Motor
/ * ----- (Declare Objekte) ----- * /
// Erstellt eine Instanz des Schritt-Klasse und gibt
// Die Anzahl der Schritte des Motors, und die Stifte es
// angeheftet
// Die Stiftverbindungen bis 4 Stiften verbunden werden müssen,
// In den Motortreiber In1, In2, In3, In4 und trat dann in die Stifte
// Hier in der Reihenfolge 1-3-2-4 für die ordnungsgemäße Sequenzierung
Schritt small_stepperV (Schritte, 4, 6, 5, 7);
Schritt small_stepperH (Schritte, 2, 12, 3, 13);
// Stepper small_stepperR (STEPSSIDE, 8, 10, 9, 11);
/ * ----- (Variablen deklarieren) ----- * /
Leere setup () / * ---- (SETUP: wird einmal) ---- * /
{
// Stellen Sie die Geschwindigkeit des Motors
small_stepperH.setSpeed (700);
small_stepperV.setSpeed (700);
pinMode (8, Ausgang);
pinMode (9, OUTPUT);
digital (8, LOW);
digital (9, LOW);
// Initialisierung der seriellen Kommunikation:
Serial.begin (9600);
} / * - (Ende Setup) --- * /
Leere Schleife () / * ---- (LOOP: läuft ständig) ---- * /
{
if (Serial.available ()> 0) {
int InByte = Serial.read ();
Schalter (InByte) {
Fall 'c':
// Small_stepperR.step (-150);
// Verzögerung (1000);
// Small_stepperR.step (150);
// Verzögerung (2000);
digital (8, LOW);
for (int Mikroschritte = 1; Mikro <1400; Mikro ++) {
digital (9, HOCH);
Verzögerung (1);
digital (9, LOW);
Verzögerung (1);
}
Verzögerung (1000);
digital (8, HOCH);
for (int Mikroschritte = 1; Mikro <1400; Mikro ++) {
digital (9, HOCH);
Verzögerung (1);
digital (9, LOW);
Verzögerung (1);
}
Unterbrechung;
Fall 'r':
Serial.println ("Richtig!");
small_stepperH.step (500);
Verzögerung (200);
Unterbrechung;
Fall 'p':
Serial.println ("LONG LEFT");
small_stepperH.step (-10000);
Verzögerung (200);
Unterbrechung;
Fall 'l':
Serial.println ("Links");
small_stepperH.step (-500);
Verzögerung (200);
Unterbrechung;
Fall 'u':
Serial.println ("UP");
small_stepperV.step (500);
Verzögerung (200);
Unterbrechung;
Fall 'd':
Serial.println ("AB");
small_stepperV.step (-500);
Verzögerung (200);
Unterbrechung;
Bei "1":
Serial.println ("1");
small_stepperH.step (700); //Recht
small_stepperV.step (3100); // Up
small_stepperH.step (500); //Recht
small_stepperV.step (-3070); // Nach unten
small_stepperH.step (-1000); // Links
small_stepperH.step (1700); //Recht
Verzögerung (200);
Unterbrechung;
Bei "2":
Serial.println ("2");
small_stepperV.step (2000); // Up
small_stepperH.step (1400); //Recht
small_stepperV.step (600); // Up
small_stepperH.step (-1750); // Links
small_stepperV.step (500); // Up
small_stepperH.step (2200); //Recht
small_stepperV.step (-1950); // Nach unten
small_stepperH.step (-1600); // Links
small_stepperV.step (-600); // Nach unten
small_stepperH.step (1600); //Recht
small_stepperV.step (-500); // Nach unten
small_stepperH.step (-2200); // Links
small_stepperH.step (2200); //Recht
Verzögerung (200);
Unterbrechung;
Bei "3":
Serial.println ("3");
small_stepperH.step (2000); //Recht
small_stepperV.step (3100); // Up
small_stepperH.step (-2250); // Links
small_stepperV.step (-950); // Nach unten
small_stepperH.step (1700); //Recht
small_stepperV.step (-500); // Nach unten
small_stepperH.step (-1650); // Links
small_stepperV.step (-550); // Nach unten
small_stepperH.step (1650); //Recht
small_stepperV.step (-550); // Nach unten
small_stepperH.step (-1700); // Links
small_stepperV.step (-550); // Nach unten
small_stepperH.step (2150); //Recht
Verzögerung (200);
Unterbrechung;
Bei "4":
Serial.println ("4");
small_stepperH.step (1800); //Recht
small_stepperV.step (3100); // Up
small_stepperH.step (-950); // Links
small_stepperV.step (-1500); // Nach unten
small_stepperH.step (-650); // Links
small_stepperV.step (1500); // Up
small_stepperH.step (-600); // Links
small_stepperV.step (-1950); // Nach unten
small_stepperH.step (1600); //Recht
small_stepperV.step (-1130); // Nach unten
small_stepperH.step (630); //Recht
Verzögerung (200);
Unterbrechung;
Fall "5":
Serial.println ("5");
small_stepperV.step (1000); // Up
small_stepperH.step (1300); //Recht
small_stepperV.step (600); // Up
small_stepperH.step (-1700); // Links
small_stepperV.step (1500); // Up
small_stepperH.step (2100); //Recht
small_stepperV.step (-950); // Nach unten
small_stepperH.step (-1700); // Links
small_stepperV.step (-650); // Nach unten
small_stepperH.step (1700); //Recht
small_stepperV.step (-1450); // Nach unten
small_stepperH.step (-2200); // Links
small_stepperH.step (2200); //Recht
Verzögerung (200);
Unterbrechung;
Fall '6':
Serial.println ("6");
small_stepperV.step (3100); // Up
small_stepperH.step (1750); //Recht
small_stepperV.step (-950); // Nach unten
small_stepperH.step (-1650); // Links
small_stepperV.step (-700); // Nach unten
small_stepperH.step (1650); //Recht
small_stepperV.step (-1450); // Nach unten
small_stepperH.step (-2200); // Links
small_stepperH.step (950); //Recht
small_stepperV.step (1500); // Up
small_stepperH.step (800); //Recht
small_stepperV.step (-1000); // Nach unten
small_stepperH.step (-1150); // Links
small_stepperV.step (-480); // Nach unten
small_stepperH.step (1650); //Recht
Verzögerung (200);
Unterbrechung;
Bei "7":
Serial.println ("7");
small_stepperH.step (1250); //Recht
small_stepperV.step (2600); // Up
small_stepperH.step (-1100); // Links
small_stepperV.step (-1200); // Nach unten
small_stepperH.step (-600); // Links
small_stepperV.step (1670); // Up
small_stepperH.step (2200); //Recht
small_stepperV.step (-3020); // Nach unten
small_stepperH.step (-900); // Links
small_stepperH.step (1000); //Recht
Verzögerung (200);
Unterbrechung;
Bei "8":
Serial.println ("8");
small_stepperV.step (3100); // Up
small_stepperH.step (1750); //Recht
small_stepperV.step (-950); // Nach unten
small_stepperH.step (-1650); // Links
small_stepperV.step (-700); // Nach unten
small_stepperH.step (1150); //Recht
small_stepperV.step (1200); // Up
small_stepperH.step (470); //Recht
small_stepperV.step (-2600); // Nach unten
small_stepperH.step (-2200); // Links
small_stepperH.step (950); //Recht
small_stepperV.step (1500); // Up
small_stepperH.step (800); //Recht
small_stepperV.step (-1000); // Nach unten
small_stepperH.step (-1160); // Links
small_stepperV.step (-500); // Nach unten
small_stepperH.step (1700); //Recht
Verzögerung (200);
Unterbrechung;
Bei "9":
Serial.println ("9");
small_stepperH.step (1250); //Recht
small_stepperV.step (2650); // Up
small_stepperH.step (-1100); // Links
small_stepperV.step (-1200); // Nach unten
small_stepperH.step (1050); //Recht
small_stepperV.step (-450); // Nach unten
small_stepperH.step (-1550); // Links
small_stepperV.step (2050); // Up
small_stepperH.step (2150); //Recht
small_stepperV.step (-3050); // Nach unten
small_stepperH.step (-900); // Links
small_stepperH.step (1000); //Recht
Verzögerung (200);
Unterbrechung;
Bei "0":
Serial.println ("0");
small_stepperV.step (3100); // Up
small_stepperH.step (1850); //Recht
small_stepperV.step (-3050); // Nach unten
small_stepperH.step (-2200); // Links
small_stepperH.step (800); //Recht
small_stepperV.step (2500); // Up
small_stepperH.step (850); //Recht
small_stepperV.step (-2000); // Nach unten
small_stepperH.step (-1200); // Links
small_stepperV.step (-530); // Nach unten
small_stepperH.step (1850); //Recht
Verzögerung (200);
Unterbrechung;
}}}
Schritt 8: Software - die Haupt-Code!
- 3 - Hauptcode
Ok, das ist das Hauptprogramm - Sie das Testprogramm mit diesen zu überschreiben.
Sie müssen die "Time" Bibliothek zu installieren, obwohl ich denke, das ist standardmäßig installiert.
Ich werde Sie durch die Hauptfunktionen des Codes zu sprechen. Ich bin immer noch sehr viel ein Lerner so kann ich auch ein paar ungeschickten Methoden gewählt haben, aber es funktioniert.
Die wichtigsten Hürden sind:
- Lesen Sie die Zeit
- Konvertieren Sie die Stunden von 24 Stunden Format bis 12-Stunden-Format, und stoppen Sie die 0 vom 1. Ziffer - will es nicht zeichnen "08 32" - Zeitverschwendung Zeichnen der Null.
- Die Minuten und der Streifen in einzelne Ziffern.
- Ziehen Sie die Zeit, jede Ziffer nimmt die gleiche Menge an Speicherplatz, so dass der Cursor auf der EAS liefert immer an der gleichen Stelle, bereit für die nächste Zeit zu aktualisieren.
Ich habe die Zeit-Umsätzen mit Remote Function Calls (getDigit und hourConverter) durchgeführt. print2digits wird nicht verwendet, sondern war Teil der Prüfung.
Es gibt eine Menge von Tests, kommentierte Code zu Ihrem Vorteil verlassen. Ein großer Teil der Prüfung des tatsächlichen Zeitmessung wurde über die serielle IDE-Monitor durchgeführt - der EAS ist viel zu langsam für die Prüfung so etwas.
/ * ----- (Import benötigten Bibliotheken) ----- * /
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#include <Stepper.h>
/ * ----- (Declare Konstanten, Pin-Nummern) ----- * /
#define SCHRITTE 32 // Anzahl der Schritte pro Umdrehung
#define STEPSSIDE 200 // Anzahl Schritte seitigen Motor
/ * ----- (Declare Objekte) ----- * /
// Erstellt eine Instanz des Schritt-Klasse und gibt
// Die Anzahl der Schritte des Motors, und die Stifte es
// angeheftet
// Die Stiftverbindungen bis 4 Stiften verbunden werden müssen,
// In den Motortreiber In1, In2, In3, In4 und trat dann in die Stifte
// Hier in der Reihenfolge 1-3-2-4 für die ordnungsgemäße Sequenzierung
Schritt small_stepperV (Schritte, 4, 6, 5, 7);
Schritt small_stepperH (Schritte, 2, 12, 3, 13);
Leere setup () {
Serial.begin (9600);
// Stellen Sie die Geschwindigkeit des Motors
small_stepperH.setSpeed (700);
small_stepperV.setSpeed (700);
pinMode (8, Ausgang);
pinMode (9, OUTPUT);
digital (8, LOW);
digital (9, LOW);
}
Leere Schleife () {
tmElements_t tm;
RTC.read (tm);
// MAJOR ABSCHNITT IF - prüfen, ob der Minute ist ein Vielfaches von 5
// If ((getDigit (tm.Minute, 1)) == 5 || (getDigit (tm.Minute, 1)) == 0) {// wieder aktivieren 5 min UPDATE
// Lösche EAS-Bildschirm mit Hilfe eines Easydriver mit Direction Pin verdrahtet Pin 8 und Pin Schritt Arduino an Pin 9 Aruino
digital (8, LOW);
for (int Mikroschritte = 1; Mikro <1400; Mikro ++) {
digital (9, HOCH);
Verzögerung (1);
digital (9, LOW);
Verzögerung (1);
}
Verzögerung (1000);
digital (8, HOCH);
for (int Mikroschritte = 1; Mikro <1400; Mikro ++) {
digital (9, HOCH);
Verzögerung (1);
digital (9, LOW);
Verzögerung (1);
}
/ * Serial.print ("Ok, Stunde =");
Serial.print (hourConverter (tm.Hour));
//hourConvert(tm.Hour);
// Serial.print (tm.Hour);
Serial.write ('');
Serial.print ("Minutes =");
print2digits (tm.Minute);
//Serial.print(tm.Minute);
Serial.println ();
* /
// Hauptzeit Extraktionsabschnitt
// Extrahieren und Zeichnen HOUR
if ((hourConverter (tm.Hour)) == 1) {
sketchBlank ();
sketchSpaceSml ();
Skizze1 ();
} Else if ((hourConverter (tm.Hour)) == 2) {
sketchBlank ();
sketchSpaceSml ();
sketch2 ();
} Else if ((hourConverter (tm.Hour)) == 3) {
sketchBlank ();
sketchSpaceSml ();
Skizze3 ();
} Else if ((hourConverter (tm.Hour)) == 4) {
sketchBlank ();
sketchSpaceSml ();
Skizze4 ();
} Else if ((hourConverter (tm.Hour)) == 5) {
sketchBlank ();
sketchSpaceSml ();
sketch5 ();
} Else if ((hourConverter (tm.Hour)) == 6) {
sketchBlank ();
sketchSpaceSml ();
sketch6 ();
} Else if ((hourConverter (tm.Hour)) == 7) {
sketchBlank ();
sketchSpaceSml ();
sketch7 ();
} Else if ((hourConverter (tm.Hour)) == 8) {
sketchBlank ();
sketchSpaceSml ();
sketch8 ();
} Else if ((hourConverter (tm.Hour)) == 9) {
sketchBlank ();
sketchSpaceSml ();
sketch9 ();
} Else if ((hourConverter (tm.Hour)) == 10) {
Skizze1 ();
sketchSpaceSml ();
sketch0 ();
} Else if ((hourConverter (tm.Hour)) == 11) {
Skizze1 ();
sketchSpaceSml ();
Skizze1 ();
} Else if ((hourConverter (tm.Hour)) == 12) {
Skizze1 ();
sketchSpaceSml ();
sketch2 ();
}
// Leerzeichen vor Minuten
sketchBlank ();
// Extrahieren und zeichnen Minute 1. Ziffer
if ((getDigit (tm.Minute, 2)) == 1) {
Skizze1 ();
} Else if ((getDigit (tm.Minute, 2)) == 2) {
sketch2 ();
} Else if ((getDigit (tm.Minute, 2)) == 3) {
Skizze3 ();
} Else if ((getDigit (tm.Minute, 2)) == 4) {
Skizze4 ();
} Else if ((getDigit (tm.Minute, 2)) == 5) {
sketch5 ();
} Else {
sketch0 ();
}
// Raum vor dem 2. Minutenziffer
sketchSpaceSml ();
// Extrahieren und zeichnen Minute 2. Ziffer
if ((getDigit (tm.Minute, 1)) == 1) {
Skizze1 ();
} Else if ((getDigit (tm.Minute, 1)) == 2) {
sketch2 ();
} Else if ((getDigit (tm.Minute, 1)) == 3) {
Skizze3 ();
} Else if ((getDigit (tm.Minute, 1)) == 4) {
Skizze4 ();
} Else if ((getDigit (tm.Minute, 1)) == 5) {
sketch5 ();
} Else if ((getDigit (tm.Minute, 1)) == 6) {
sketch6 ();
} Else if ((getDigit (tm.Minute, 1)) == 7) {
sketch7 ();
} Else if ((getDigit (tm.Minute, 1)) == 8) {
sketch8 ();
} Else if ((getDigit (tm.Minute, 1)) == 9) {
sketch9 ();
} Else {
sketch0 ();
}
// Gebe Cursor zu starten
small_stepperH.step (-11.800); // Links
small_stepperH.step (1200); //Recht
// Test zur 1. oder zweite Ziffer (zählt von rechts), dh "12" zu extrahieren - Ziffer 1 = 2
/ * Serial.print ("Min Ziffer 2 =");
Serial.print (getDigit (tm.Minute, 2));
Serial.println ();
Serial.print ("Min Ziffer 1 =");
Serial.print (getDigit (tm.Minute, 1));
Serial.println ();
// Test Extrahieren Stunde Nummer
if ((hourConverter (tm.Hour)) == 9) {
Serial.print ("Digit Stunde = Nine !!");
} Else if ((hourConverter (tm.Hour)) == 10) {
Serial.print ("Digit Stunde = Ten !!");
}
Serial.println ();
* /
Verzögerung (59500); // Eine anständige Verzögerung zwischen Aktuelles
//} // Entfernen Sie die oben verzögern und wieder frei Anable diese Linie 5 min Aktuelles
}
// END OF MAIN LOOP
Leere print2digits (int number) {
if (oder> 0 && Zahl <10) {
Serial.write ('0');
}
Serial.print (number);
}
int getDigit (unsigned int Nummer, int digit) {// Nimmt eine Zahl und gibt die x'th digit)
for (int i = 0; i <digit-1; i ++) {
Nummer / = 10;
}
zurück Anzahl% 10;
}
int hourConverter (int number) {// nimmt 24 Stunden Zeit und zieht 12 oder 12 addiert, wenn es 00: Stunde)
if (Anzahl> 12) {
Zahl = Anzahl - 12;
} Else if (Nummer == 0) {
Nummer = Nummer + 12;
}
zurück Nummer;
}
Leere Skizze1 () {
small_stepperH.step (700); //Recht
small_stepperV.step (3100); // Up
small_stepperH.step (500); //Recht
small_stepperV.step (-3090); // Nach unten
small_stepperH.step (-1000); // Links
small_stepperH.step (1700); //Recht
}
Leere sketch2 () {
small_stepperV.step (2000); // Up
small_stepperH.step (1400); //Recht
small_stepperV.step (600); // Up
small_stepperH.step (-1750); // Links
small_stepperV.step (500); // Up
small_stepperH.step (2200); //Recht
small_stepperV.step (-1950); // Nach unten
small_stepperH.step (-1600); // Links
small_stepperV.step (-600); // Nach unten
small_stepperH.step (1600); //Recht
small_stepperV.step (-500); // Nach unten
small_stepperH.step (-2200); // Links
small_stepperH.step (2200); //Recht
}
Leere Skizze3 () {
small_stepperH.step (2000); //Recht
small_stepperV.step (3100); // Up
small_stepperH.step (-2250); // Links
small_stepperV.step (-950); // Nach unten
small_stepperH.step (1700); //Recht
small_stepperV.step (-500); // Nach unten
small_stepperH.step (-1650); // Links
small_stepperV.step (-550); // Nach unten
small_stepperH.step (1650); //Recht
small_stepperV.step (-550); // Nach unten
small_stepperH.step (-1700); // Links
small_stepperV.step (-550); // Nach unten
small_stepperH.step (2150); //Recht
}
Leere Skizze4 () {
small_stepperH.step (1800); //Recht
small_stepperV.step (3100); // Up
small_stepperH.step (-950); // Links
small_stepperV.step (-1500); // Nach unten
small_stepperH.step (-650); // Links
small_stepperV.step (1500); // Up
small_stepperH.step (-600); // Links
small_stepperV.step (-1950); // Nach unten
small_stepperH.step (1600); //Recht
small_stepperV.step (-1130); // Nach unten
small_stepperH.step (630); //Recht
}
Leere sketch5 () {
small_stepperV.step (1000); // Up
small_stepperH.step (1300); //Recht
small_stepperV.step (600); // Up
small_stepperH.step (-1700); // Links
small_stepperV.step (1500); // Up
small_stepperH.step (2100); //Recht
small_stepperV.step (-950); // Nach unten
small_stepperH.step (-1700); // Links
small_stepperV.step (-650); // Nach unten
small_stepperH.step (1700); //Recht
small_stepperV.step (-1450); // Nach unten
small_stepperH.step (-2200); // Links
small_stepperH.step (2200); //Recht
}
Leere sketch6 () {
small_stepperV.step (3100); // Up
small_stepperH.step (1750); //Recht
small_stepperV.step (-950); // Nach unten
small_stepperH.step (-1650); // Links
small_stepperV.step (-700); // Nach unten
small_stepperH.step (1650); //Recht
small_stepperV.step (-1450); // Nach unten
small_stepperH.step (-2200); // Links
small_stepperH.step (950); //Recht
small_stepperV.step (1500); // Up
small_stepperH.step (800); //Recht
small_stepperV.step (-1000); // Nach unten
small_stepperH.step (-1150); // Links
small_stepperV.step (-480); // Nach unten
small_stepperH.step (1650); //Recht
}
Leere sketch7 () {
small_stepperH.step (1250); //Recht
small_stepperV.step (2600); // Up
small_stepperH.step (-1100); // Links
small_stepperV.step (-1200); // Nach unten
small_stepperH.step (-600); // Links
small_stepperV.step (1670); // Up
small_stepperH.step (2200); //Recht
small_stepperV.step (-3020); // Nach unten
small_stepperH.step (-900); // Links
small_stepperH.step (1000); //Recht
}
Leere sketch8 () {
small_stepperV.step (3100); // Up
small_stepperH.step (1750); //Recht
small_stepperV.step (-950); // Nach unten
small_stepperH.step (-1650); // Links
small_stepperV.step (-700); // Nach unten
small_stepperH.step (1150); //Recht
small_stepperV.step (1200); // Up
small_stepperH.step (470); //Recht
small_stepperV.step (-2600); // Nach unten
small_stepperH.step (-2200); // Links
small_stepperH.step (950); //Recht
small_stepperV.step (1500); // Up
small_stepperH.step (800); //Recht
small_stepperV.step (-1000); // Nach unten
small_stepperH.step (-1160); // Links
small_stepperV.step (-500); // Nach unten
small_stepperH.step (1700); //Recht
}
Leere sketch9 () {
small_stepperH.step(1250); //right
small_stepperV.step(2650); //up
small_stepperH.step(-1100); //left
small_stepperV.step(-1200); //down
small_stepperH.step(1050); //right
small_stepperV.step(-450); //down
small_stepperH.step(-1550); //left
small_stepperV.step(2050); //up
small_stepperH.step(2150); //right
small_stepperV.step(-3050); //down
small_stepperH.step(-900); //left
small_stepperH.step(1000); //right
}
void sketch0 () {
small_stepperV.step(3100); //up
small_stepperH.step(1850); //right
small_stepperV.step(-3050); //down
small_stepperH.step(-2200); //left
small_stepperH.step(800); //right
small_stepperV.step(2500); //up
small_stepperH.step(850); //right
small_stepperV.step(-2000); //down
small_stepperH.step(-1150); //left
small_stepperV.step(-530); //down
small_stepperH.step(1800); //right
}
void sketchBlank () {
small_stepperH.step(2000); //right
}
void sketchSpaceSml () {
small_stepperH.step(500); //right
}
Step 9: Final Notes
- You need to switch off the EAS clock when the EAS cursor has returned all the way left and it stopped. This way when you next power it on it will start in the same place. If you get in a mess you can force the EAS pulleys by hand.
My digits are not perfect. They may not work well on your EAS. I'm very pleased with 1-7. I got lazy with 8,9 and 0 :-)
My EAS does not always return to the place it started - it gets close. It's not a problem, I never run if for more than a few hours when I've got people round :-)
If you use different stepper motors you will need to think about scaling all the numbers for drawing the digits by a factor if "x". The steppers I use have a built in gear reduction of 64:1 and are 32 steps. So 2048 steps = one full revolution. A standard Nema usually has 200 steps, but driven by an EasyDriver you cam run at 1/8th micro steps, so you would have 8x200 = 1600 steps per revolutions. So my code would work directly but draw 12% bigger digits - they should fit... I'll know soon!