Il principio di funzionamento del display proposto, che è stato realizzato e costruito da Instructables sotto il soprannome di alstroemeria, è il seguente: i segmenti avanzati dai servi proiettano un'ombra, che li rende visibili. I segmenti rimanenti, situati sullo stesso piano con lo sfondo, si fondono con esso.
È chiaro che
prodotto fatto in casa Risulta essere costoso, perché per lei il maestro acquisisce ben 28 di questi servi:
E un modulo di gestione che si collega a
Arduino in questo modo:
Il modulo orologio in tempo reale (RTC) su questo sfondo sembra essere una spesa molto piccola.
Dopo aver acquisito tutti i componenti necessari, il master finora li mette da parte per lavorare su modelli per realizzare la parte meccanica del display. Ottiene quattro file:
1,
2,
3,
4. La procedura guidata visualizza i file 1 e 3 due volte su un plotter da taglio e 2 e 4, uno alla volta, tutti su una scala 1: 1 e ottiene sei parti, alcune delle quali assomigliano in qualche modo alle vecchie schede perforate. Puoi anche stampare, anche in scala 1: 1 e nelle stesse quantità, e tagliare manualmente.
Dremel taglia i perni metallici cavi con una lunghezza di 20 mm e tubi con un diametro esterno leggermente più grande del diametro esterno del perno con una lunghezza di 10 mm:
Incolla strati con uno spesso nastro biadesivo, aggiunge tubi:
Aggiunge segmenti mobili incollati ai perni passati attraverso i tubi, sul retro incolla i pulsanti in filo d'acciaio agli stessi perni, ed è qui che i perni sono cavi:
Piega i pulsanti, incolla i servi e si collega a loro:
Chiude i servi con il foglio perforato rimanente:
Il modulo di servocomando si collega secondo lo schema indicato all'inizio dell'articolo. Gli azionamenti stessi sono collegati al modulo nell'ordine corrispondente alle designazioni di segmento standard:
Il modulo RTC si collega come segue: SDA - pin 4 dell'Arduino, SCL - pin 5, più alimentazione e filo comune - parallelo alle corrispondenti linee Arduino. Ecco il risultato:
La procedura guidata imposta l'ora nel modulo RTC con questo schizzo (è necessaria la libreria RTClib):
#include
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
if (! RTC.isrunning ()) {
Serial.println ("RTC NON è in esecuzione!");
RTC.adjust (DateTime (__ DATE__, __TIME__));
}
}
Quindi riempie lo schizzo principale che richiede la stessa libreria:
#include
#include "RTClib.h"
RTC_DS1307 RTC;
breve segA = 0; // Visualizza pin 14
breve segB = 1; // Visualizza pin 16
breve segC = 2; // Visualizza pin 13
breve segD = 3; // Visualizza pin 3
breve segE = 4; // Visualizza pin 5
breve segF = 5; // Visualizza pin 11
breve segG = 6; // Visualizza pin 15
short segA_OUT = 110;
short segB_OUT = 110;
short segC_OUT = 110;
short segD_OUT = 110;
short segE_OUT = 110;
short segF_OUT = 110;
short segG_OUT = 110;
short segA_IN = 90;
short segB_IN = 90;
short segC_IN = 90;
short segD_IN = 90;
short segE_IN = 90;
short segF_IN = 90;
breve segG_IN = 90;
int TIME = 2000;
DateTime datePast;
DateTime dateNow;
// pulizie domestiche
void setup () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.adjust (DateTime (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// loop principale
void loop () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// Dato un numero, visualizziamo 10:22
// Dopo aver eseguito i 4 numeri, il display viene lasciato spento
void displayNumber (int toDisplay) {
per (int digit = 4; digit> 0; digit--) {
lightNumber (da visualizzare% 10, cifra);
visualizzare / = 10;
}
// avvia il movimento
Serial.print ("T"); Serial.println (TIME);
}
void move (int servo, int position) {
Serial.print ("#");
Serial.print (servo);
Serial.print ("P");
Serial.print (posizione);
}
// Dato un numero, attiva quei segmenti
// Se numero == 10, disattiva il numero
void lightNumber (int numberToDisplay, int segment) {
int offset = (segmento - 1) * 7;
switch (numberToDisplay) {
caso 0:
sposta (segA + offset, segA_OUT);
sposta (segB + offset, segB_OUT);
sposta (segC + offset, segC_OUT);
sposta (segD + offset, segD_OUT);
sposta (segE + offset, segE_OUT);
sposta (segF + offset, segF_OUT);
sposta (segG + offset, segG_IN);
break;
caso 1:
sposta (segA + offset, segA_IN);
sposta (segB + offset, segB_OUT);
sposta (segC + offset, segC_OUT);
sposta (segD + offset, segD_IN);
sposta (segE + offset, segE_IN);
sposta (segF + offset, segF_IN);
sposta (segG + offset, segG_IN);
break;
caso 2:
sposta (segA + offset, segA_OUT);
sposta (segB + offset, segB_OUT);
sposta (segC + offset, segC_IN);
sposta (segD + offset, segD_OUT);
sposta (segE + offset, segE_OUT);
sposta (segF + offset, segF_IN);
sposta (segG + offset, segG_OUT);
break;
caso 3:
sposta (segA + offset, segA_OUT);
sposta (segB + offset, segB_OUT);
sposta (segC + offset, segC_OUT);
sposta (segD + offset, segD_OUT);
sposta (segE + offset, segE_IN);
sposta (segF + offset, segF_IN);
sposta (segG + offset, segG_OUT);
break;
caso 4:
sposta (segA + offset, segA_IN);
sposta (segB + offset, segB_OUT);
sposta (segC + offset, segC_OUT);
sposta (segD + offset, segD_IN);
sposta (segE + offset, segE_IN);
sposta (segF + offset, segF_OUT);
sposta (segG + offset, segG_OUT);
break;
caso 5:
sposta (segA + offset, segA_OUT);
sposta (segB + offset, segB_IN);
sposta (segC + offset, segC_OUT);
sposta (segD + offset, segD_OUT);
sposta (segE + offset, segE_IN);
sposta (segF + offset, segF_OUT);
sposta (segG + offset, segG_OUT);
break;
caso 6:
sposta (segA + offset, segA_OUT);
sposta (segB + offset, segB_IN);
sposta (segC + offset, segC_OUT);
sposta (segD + offset, segD_OUT);
sposta (segE + offset, segE_OUT);
sposta (segF + offset, segF_OUT);
sposta (segG + offset, segG_OUT);
break;
caso 7:
sposta (segA + offset, segA_OUT);
sposta (segB + offset, segB_OUT);
sposta (segC + offset, segC_OUT);
sposta (segD + offset, segD_IN);
sposta (segE + offset, segE_IN);
sposta (segF + offset, segF_IN);
sposta (segG + offset, segG_IN);
break;
caso 8:
sposta (segA + offset, segA_OUT);
sposta (segB + offset, segB_OUT);
sposta (segC + offset, segC_OUT);
sposta (segD + offset, segD_OUT);
sposta (segE + offset, segE_OUT);
sposta (segF + offset, segF_OUT);
sposta (segG + offset, segG_OUT);
break;
caso 9:
sposta (segA + offset, segA_OUT);
sposta (segB + offset, segB_OUT);
sposta (segC + offset, segC_OUT);
sposta (segD + offset, segD_OUT);
sposta (segE + offset, segE_IN);
sposta (segF + offset, segF_OUT);
sposta (segG + offset, segG_OUT);
break;
caso 10:
sposta (segA + offset, segA_IN);
sposta (segB + offset, segB_IN);
sposta (segC + offset, segC_IN);
sposta (segD + offset, segD_IN);
sposta (segE + offset, segE_IN);
sposta (segF + offset, segF_IN);
sposta (segG + offset, segG_IN);
break;
}
}
Tutto funziona:
Quindi la visualizzazione meccanica di un design non banale è pronta.