Η αρχή της λειτουργίας της προτεινόμενης απεικόνισης, η οποία κατασκευάστηκε και κατασκευάστηκε από τα Instructables με το ψευδώνυμο alstroemeria, έχει ως εξής: τα τμήματα που προωθούνται από τους σερβοφόρους ρίχνουν μια σκιά, γεγονός που τα καθιστά ορατά. Τα υπόλοιπα τμήματα, που βρίσκονται στο ίδιο επίπεδο με το φόντο, συγχωνεύονται με αυτό.
Είναι σαφές ότι
σπιτικό Αποδεικνύεται δαπανηρή, γιατί για αυτήν ο πλοίαρχος αποκτά μέχρι και 28 τέτοια σερβο:
Και μια ενότητα διαχείρισης που συνδέεται με
Arduino όπως αυτό:
Η ρολόι ρολογιού πραγματικού χρόνου (RTC) σε αυτό το φόντο φαίνεται να είναι πολύ μικρή δαπάνη.
Έχοντας αποκτήσει όλα τα απαραίτητα στοιχεία, ο πλοίαρχος μέχρι στιγμής τα αφαιρεί για να δουλέψουν σε πρότυπα για την κατασκευή του μηχανικού μέρους της οθόνης. Παίρνει τέσσερα αρχεία:
1,
2,
3,
4. Ο οδηγός εμφανίζει τα αρχεία 1 και 3 δύο φορές σε ένα plotter κοπής, και 2 και 4, ένα κάθε φορά, όλα σε μια κλίμακα 1: 1, και παίρνει έξι μέρη, μερικά από τα οποία μοιάζουν με παλιές κάρτες διάτρησης με κάποιο τρόπο. Μπορείτε επίσης να εκτυπώσετε, επίσης σε κλίμακα 1: 1 και στις ίδιες ποσότητες, και να κόψετε χειροκίνητα.
Ο Dremel κόβει κοίλους μεταλλικούς ακροδέκτες μήκους 20 mm και σωλήνες με εξωτερική διάμετρο ελαφρώς μεγαλύτερο από την εξωτερική διάμετρο του πείρου με μήκος 10 mm:
Τα στρώματα κόλλας με παχιά ταινία διπλής όψης προσθέτουν σωλήνες:
Προσθέτει κινούμενα τμήματα κολλημένα στις καρφίτσες που περνούν μέσα από τους σωλήνες, στην οπίσθια πλευρά κόβουν το χαλύβδινο σύρμα προωθώντας τους ίδιους ακροδέκτες και εδώ οι κορίνες είναι κοίλες:
Καμπάζει τους ώμους, κόβει τις σερβοειδείς και τις συνδέει:
Κλείνει το σέρβο με το υπόλοιπο διάτρητο φύλλο:
Η μονάδα σερβοελέγχου συνδέεται σύμφωνα με το σχήμα που δίνεται στην αρχή του άρθρου. Οι ίδιοι οι οδηγοί συνδέονται με την ενότητα με τη σειρά που αντιστοιχεί στους τυπικούς χαρακτηρισμούς των τμημάτων:
Η μονάδα RTC συνδέεται ως εξής: SDA - ακίδα 4 του Arduino, SCL - pin 5, συν ισχύ και κοινό καλώδιο - παράλληλα με τις αντίστοιχες γραμμές Arduino. Εδώ είναι το αποτέλεσμα:
Ο οδηγός ορίζει την ώρα στη μονάδα RTC με αυτό το σκίτσο (χρειάζεστε τη βιβλιοθήκη RTClib):
#include
#include "RTClib.h"
RTC_DS1307 RTC;
άκυρη ρύθμιση () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
αν (! RTC.isrunning ()) {
Serial.println ("Το RTC ΔΕΝ τρέχει!");
RTC.just (DateTime (__ DATE__, __TIME__)).
}}
}}
Στη συνέχεια, συμπληρώνει το κύριο σκίτσο που απαιτεί την ίδια βιβλιοθήκη:
#include
#include "RTClib.h"
RTC_DS1307 RTC;
σύντομο segA = 0; // Πείρος οθόνης 14
σύντομο segB = 1; // Πείρος οθόνης 16
σύντομο segC = 2; // Πινέλο οθόνης 13
σύντομο segD = 3; // Πείρος οθόνης 3
κοντό segE = 4; // Πινέλο οθόνης 5
σύντομο segF = 5; // Πινέλο οθόνης 11
σύντομο segG = 6; // Πινέλο οθόνης 15
σύντομο segA_OUT = 110;
σύντομο segB_OUT = 110;
σύντομο segC_OUT = 110;
σύντομο segD_OUT = 110;
σύντομο segE_OUT = 110;
σύντομο segF_OUT = 110;
σύντομο segG_OUT = 110;
σύντομο segA_IN = 90;
σύντομο segB_IN = 90;
σύντομο segC_IN = 90;
σύντομο segD_IN = 90;
σύντομο segE_IN = 90;
σύντομο segF_IN = 90;
σύντομο segG_IN = 90;
int TIME = 2000;
DateTime datePast;
DateTime dateNow;
// φύλαξη σπιτιών
άκυρη ρύθμιση () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.just (DateTime (__ DATE__, __TIME__)).
datePast = RTC.now ();
}}
// main loop
void loop () {
dateNow = RTC.now ();
αν (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}}
}}
// Λαμβάνοντας έναν αριθμό, εμφανίζουμε 10:22
// Μετά τη διέλευση από τους 4 αριθμούς, η οθόνη αφήνεται απενεργοποιημένη
void displayNumber (int στην εμφάνιση) {
για (int ψηφίο = 4, ψηφίο> 0, ψηφίο -) {
lightNumber (στοDisplay% 10, ψηφίο);
toDisplay / = 10;
}}
// έναρξη κίνησης
Serial.print ("T"), Serial.println (TIME).
}}
άκυρη μετακίνηση (int σερβο, θέση int) {
Serial.print ("#");
Serial.print (σερβο);
Serial.print ("P");
Serial.print (θέση);
}}
// Λαμβάνοντας έναν αριθμό, ενεργοποιεί αυτά τα τμήματα
// Εάν ο αριθμός == 10, τότε απενεργοποιήστε τον αριθμό
void lightNumber (int αριθμόςToDisplay, τμήμα int) {
int offset = (τμήμα - 1) * 7;
διακόπτης (numberToDisplay) {
περίπτωση 0:
μετακίνηση (segA + offset, segA_OUT);
μετακίνηση (segB + offset, segB_OUT);
μετακίνηση (segC + offset, segC_OUT);
μετακίνηση (segD + offset, segD_OUT);
μετακίνηση (segE + offset, segE_OUT);
μετακίνηση (segF + offset, segF_OUT);
μετακίνηση (segG + offset, segG_IN);
διάλειμμα.
περίπτωση 1:
μετακίνηση (segA + offset, segA_IN);
μετακίνηση (segB + offset, segB_OUT);
μετακίνηση (segC + offset, segC_OUT);
μετακίνηση (segD + offset, segD_IN);
μετακίνηση (segE + offset, segE_IN);
μετακίνηση (segF + offset, segF_IN);
μετακίνηση (segG + offset, segG_IN);
διάλειμμα.
περίπτωση 2:
μετακίνηση (segA + offset, segA_OUT);
μετακίνηση (segB + offset, segB_OUT);
μετακίνηση (segC + offset, segC_IN);
μετακίνηση (segD + offset, segD_OUT);
μετακίνηση (segE + offset, segE_OUT);
μετακίνηση (segF + offset, segF_IN);
μετακίνηση (segG + offset, segG_OUT);
διάλειμμα.
περίπτωση 3:
μετακίνηση (segA + offset, segA_OUT);
μετακίνηση (segB + offset, segB_OUT);
μετακίνηση (segC + offset, segC_OUT);
μετακίνηση (segD + offset, segD_OUT);
μετακίνηση (segE + offset, segE_IN);
μετακίνηση (segF + offset, segF_IN);
μετακίνηση (segG + offset, segG_OUT);
διάλειμμα.
περίπτωση 4:
μετακίνηση (segA + offset, segA_IN);
μετακίνηση (segB + offset, segB_OUT);
μετακίνηση (segC + offset, segC_OUT);
μετακίνηση (segD + offset, segD_IN);
μετακίνηση (segE + offset, segE_IN);
μετακίνηση (segF + offset, segF_OUT);
μετακίνηση (segG + offset, segG_OUT);
διάλειμμα.
περίπτωση 5:
μετακίνηση (segA + offset, segA_OUT);
μετακίνηση (segB + offset, segB_IN);
μετακίνηση (segC + offset, segC_OUT);
μετακίνηση (segD + offset, segD_OUT);
μετακίνηση (segE + offset, segE_IN);
μετακίνηση (segF + offset, segF_OUT);
μετακίνηση (segG + offset, segG_OUT);
διάλειμμα.
περίπτωση 6:
μετακίνηση (segA + offset, segA_OUT);
μετακίνηση (segB + offset, segB_IN);
μετακίνηση (segC + offset, segC_OUT);
μετακίνηση (segD + offset, segD_OUT);
μετακίνηση (segE + offset, segE_OUT);
μετακίνηση (segF + offset, segF_OUT);
μετακίνηση (segG + offset, segG_OUT);
διάλειμμα.
περίπτωση 7:
μετακίνηση (segA + offset, segA_OUT);
μετακίνηση (segB + offset, segB_OUT);
μετακίνηση (segC + offset, segC_OUT);
μετακίνηση (segD + offset, segD_IN);
μετακίνηση (segE + offset, segE_IN);
μετακίνηση (segF + offset, segF_IN);
μετακίνηση (segG + offset, segG_IN);
διάλειμμα.
περίπτωση 8:
μετακίνηση (segA + offset, segA_OUT);
μετακίνηση (segB + offset, segB_OUT);
μετακίνηση (segC + offset, segC_OUT);
μετακίνηση (segD + offset, segD_OUT);
μετακίνηση (segE + offset, segE_OUT);
μετακίνηση (segF + offset, segF_OUT);
μετακίνηση (segG + offset, segG_OUT);
διάλειμμα.
περίπτωση 9:
μετακίνηση (segA + offset, segA_OUT);
μετακίνηση (segB + offset, segB_OUT);
μετακίνηση (segC + offset, segC_OUT);
μετακίνηση (segD + offset, segD_OUT);
μετακίνηση (segE + offset, segE_IN);
μετακίνηση (segF + offset, segF_OUT);
μετακίνηση (segG + offset, segG_OUT);
διάλειμμα.
περίπτωση 10:
μετακίνηση (segA + offset, segA_IN);
μετακίνηση (segB + offset, segB_IN);
μετακίνηση (segC + offset, segC_IN);
μετακίνηση (segD + offset, segD_IN);
μετακίνηση (segE + offset, segE_IN);
μετακίνηση (segF + offset, segF_IN);
μετακίνηση (segG + offset, segG_IN);
διάλειμμα.
}}
}}
Όλα λειτουργούν:
Έτσι, η μηχανική απεικόνιση ενός μη τετριμμένου σχεδίου είναι έτοιμη.