Principiul de funcționare al afișajului propus, care a fost realizat și construit de Instructables sub porecla alstroemeria, este următorul: segmentele avansate de servos aruncă o umbră, ceea ce le face vizibile. Restul segmentelor, localizate în același plan cu fundalul, se îmbină cu acesta.
Este clar că
produs home-made Se dovedește a fi scump, pentru că stăpânul achiziționează până la 28 de astfel de servos:
Și un modul de management care se conectează la
Arduino asa:
Modulul de ceas în timp real (RTC) pe acest fundal pare a fi o cheltuială foarte mică.
După ce au achiziționat toate componentele necesare, maestrul le pune până acum deoparte pentru a lucra la șabloane pentru realizarea părții mecanice a afișajului. Primeste patru dosare:
1,
2,
3,
4. Vrăjitorul afișează fișierele 1 și 3 de două ori pe un plotter de tăiere, și 2 și 4, unul câteodată, toate pe o scară de 1: 1 și primește șase părți, dintre care unele seamănă cu niște cărți de perforare vechi. Puteți tipări, de asemenea, pe o scară de 1: 1 și în aceleași cantități și puteți tăia manual.
Dremel taie pini metalici tubulari cu lungimea de 20 mm și tuburi cu un diametru extern puțin mai mare decât diametrul extern al acvulului cu o lungime de 10 mm:
Lipeste straturi cu bandă dublă față, adaugă tuburi:
Adăugă segmente mobile lipite de pinii trecuți prin tuburi, pe partea din spate lipiciurile de împrăștiere a sârmei de oțel la aceiași ace și aici este locul în care ace sunt goale:
Îndoaie împingătorii, lipi servosurile și se conectează la ele:
Închide servos-urile cu foaia perforată rămasă:
Modulul servo-control se conectează în conformitate cu schema dată la începutul articolului. Unitățile proprii sunt conectate la modul în ordinea corespunzătoare denumirilor de segment standard:
Modulul RTC se conectează astfel: SDA - pinul 4 Arduino, SCL - pin 5, plus puterea și cablul comun - paralel cu liniile Arduino corespunzătoare. Iată rezultatul:
Expertul stabilește ora în modulul RTC cu această schiță (aveți nevoie de biblioteca RTClib):
#include
#includeți „RTClib.h”
RTC_DS1307 RTC;
void setup () {
Serial.begin (57600);
Sârmă.begin ();
RTC.begin ();
if (! RTC.isrunning ()) {
Serial.println ("RTC NU rulează!");
RTC.adjust (DateTime (__ DATA__, __TIME__));
}
}
Apoi completează schița principală care necesită aceeași bibliotecă:
#include
#includeți „RTClib.h”
RTC_DS1307 RTC;
scurta segA = 0; // Afisajul 14
segB scurt = 1; // Afisarea 16
segC scurt = 2; // Afisajul 13
segD scurt = 3; // Afisajul 3
segE scurt = 4; // Afisajul 5
segF scurt = 5; // Afișarea afișajului 11
segG scurt = 6; // Afisaj 15
scurt segA_OUT = 110;
scurt segB_OUT = 110;
scurt segC_OUT = 110;
scurt segD_OUT = 110;
scurt segE_OUT = 110;
scurt segF_OUT = 110;
scurt segG_OUT = 110;
scurt segA_IN = 90;
scurt segB_IN = 90;
scurt segC_IN = 90;
scurt segD_IN = 90;
scurt segE_IN = 90;
scurt segF_IN = 90;
scurt segG_IN = 90;
int TIME = 2000;
DateTime datePast;
DateTime dateNow;
// menținerea casei
void setup () {
Serial.begin (9600);
Sârmă.begin ();
RTC.begin ();
RTC.adjust (DateTime (__ DATA__, __TIME__));
datePast = RTC.now ();
}
// bucla principală
void loop () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dataNow;
}
}
// Dat fiind un număr, afișăm 10:22
// După rularea celor 4 numere, afișajul este stins
void displayNumber (int toDisplay) {
for (int digit = 4; digit> 0; digit--) {
lightNumber (toDisplay% 10, cifră);
toDisplay / = 10;
}
// începeți mișcarea
Serial.print ("T"); Serial.println (TIME);
}
void move (int servo, poziție int) {
Serial.print ("#");
Serial.print (servo);
Serial.print ("P");
Serial.print (poziție);
}
// Dat fiind un număr, pornește acele segmente
// Dacă numărul == 10, atunci opriți numărul
void lightNumber (număr int IntoDisplay, segment int) {
compensare int = (segment - 1) * 7;
switch (numberToDisplay) {
cazul 0:
muta (segA + decalare, segA_OUT);
muta (segB + decalare, segB_OUT);
muta (segC + decalare, segC_OUT);
muta (segD + decalare, segD_OUT);
muta (segE + decalare, segE_OUT);
muta (segF + decalare, segF_OUT);
muta (segG + decalare, segG_IN);
pauză;
cazul 1:
deplasare (segA + decalare, segA_IN);
muta (segB + decalare, segB_OUT);
muta (segC + decalare, segC_OUT);
muta (segD + decalare, segD_IN);
muta (segE + decalare, segE_IN);
muta (segF + decalare, segF_IN);
muta (segG + decalare, segG_IN);
pauză;
cazul 2:
muta (segA + decalare, segA_OUT);
muta (segB + decalare, segB_OUT);
muta (segC + decalare, segC_IN);
muta (segD + decalare, segD_OUT);
muta (segE + decalare, segE_OUT);
muta (segF + decalare, segF_IN);
muta (segG + decalare, segG_OUT);
pauză;
cazul 3:
muta (segA + decalare, segA_OUT);
muta (segB + decalare, segB_OUT);
muta (segC + decalare, segC_OUT);
muta (segD + decalare, segD_OUT);
muta (segE + decalare, segE_IN);
muta (segF + decalare, segF_IN);
muta (segG + decalare, segG_OUT);
pauză;
cazul 4:
deplasare (segA + decalare, segA_IN);
muta (segB + decalare, segB_OUT);
muta (segC + decalare, segC_OUT);
muta (segD + decalare, segD_IN);
muta (segE + decalare, segE_IN);
muta (segF + decalare, segF_OUT);
muta (segG + decalare, segG_OUT);
pauză;
cazul 5:
muta (segA + decalare, segA_OUT);
muta (segB + decalare, segB_IN);
muta (segC + decalare, segC_OUT);
muta (segD + decalare, segD_OUT);
muta (segE + decalare, segE_IN);
muta (segF + decalare, segF_OUT);
muta (segG + decalare, segG_OUT);
pauză;
cazul 6:
muta (segA + decalare, segA_OUT);
muta (segB + decalare, segB_IN);
muta (segC + decalare, segC_OUT);
muta (segD + decalare, segD_OUT);
muta (segE + decalare, segE_OUT);
muta (segF + decalare, segF_OUT);
muta (segG + decalare, segG_OUT);
pauză;
cazul 7:
muta (segA + decalare, segA_OUT);
muta (segB + decalare, segB_OUT);
muta (segC + decalare, segC_OUT);
muta (segD + decalare, segD_IN);
muta (segE + decalare, segE_IN);
muta (segF + decalare, segF_IN);
muta (segG + decalare, segG_IN);
pauză;
cazul 8:
muta (segA + decalare, segA_OUT);
muta (segB + decalare, segB_OUT);
muta (segC + decalare, segC_OUT);
muta (segD + decalare, segD_OUT);
muta (segE + decalare, segE_OUT);
muta (segF + decalare, segF_OUT);
muta (segG + decalare, segG_OUT);
pauză;
cazul 9:
muta (segA + decalare, segA_OUT);
muta (segB + decalare, segB_OUT);
muta (segC + decalare, segC_OUT);
muta (segD + decalare, segD_OUT);
muta (segE + decalare, segE_IN);
muta (segF + decalare, segF_OUT);
muta (segG + decalare, segG_OUT);
pauză;
cazul 10:
deplasare (segA + decalare, segA_IN);
muta (segB + decalare, segB_IN);
muta (segC + decalare, segC_IN);
muta (segD + decalare, segD_IN);
muta (segE + decalare, segE_IN);
muta (segF + decalare, segF_IN);
muta (segG + decalare, segG_IN);
pauză;
}
}
Totul funcționează:
Deci, afișarea mecanică a unui design non-banal este gata.