Prinsippet for driften av den foreslåtte skjermen, som ble laget og bygget av instruktører under kallenavnet alstroemeria, er som følger: segmenter avansert av servoer kaster en skygge, noe som gjør dem synlige. De resterende segmentene, som ligger i samme plan med bakgrunnen, smelter sammen med det.
Det er klart det
hjemmelaget produkt Det viser seg å være dyrt, for for henne skaffer mesteren så mange som 28 slike servoer:
Og en styringsmodul som kobles til
Arduino som dette:
RTC-modulen i sanntid mot denne bakgrunnen ser ut til å være en veldig liten utgift.
Etter å ha anskaffet alle nødvendige komponenter, legger master så langt dem til side for å jobbe med maler for å lage den mekaniske delen av skjermen. Han får fire filer:
1,
2,
3,
4. Veiviseren viser filene 1 og 3 to ganger på en skjæreplotter, og 2 og 4, en om gangen, alle i en 1: 1-skala, og får seks deler, hvorav noen ligner gamle slagkort på en eller annen måte. Du kan også skrive ut, også i en skala fra 1: 1 og i samme mengder, og kutte manuelt.
Dremel skjærer hule metallpinner med en lengde på 20 mm og rør med en ytre diameter litt større enn den ytre diameteren til tappen med en lengde på 10 mm:
Limer lag med tykt tosidig tape, tilfører rør:
Den legger til bevegelige segmenter limt på pinnene som føres gjennom rørene, på baksiden limer ståltrådpressere til de samme pinnene, og det er her pinnene er hule:
Den bøyer pushere, limer servoer og kobles til dem:
Lukker servoer med det gjenværende perforerte arket:
Servokontrollmodulen kobles til i henhold til skjemaet gitt i begynnelsen av artikkelen. Stasjonene er koblet til modulen i den rekkefølgen som tilsvarer standard segmentbetegnelser:
RTC-modulen kobles til som følger: SDA - pinne 4 Arduino, SCL - pinne 5, pluss strøm og felles ledning - parallelt med de tilsvarende Arduino linjene. Her er resultatet:
Veiviseren angir tiden i RTC-modulen med denne skissen (du trenger RTClib-biblioteket):
#include
# inkluder "RTClib.h"
RTC_DS1307 RTC;
ugyldig oppsett () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
hvis (! RTC.isrunning ()) {
Serial.println ("RTC kjører IKKE!");
RTC.adjust (DateTime (__ DATE__, __TIME__));
}
}
Deretter fyller den inn hovedskissen som krever det samme biblioteket:
#include
# inkluder "RTClib.h"
RTC_DS1307 RTC;
kort segA = 0; // Skjermpinne 14
kort segB = 1; // Skjermstift 16
kort segC = 2; // Skjermpinne 13
kort segD = 3; // Skjermpinne 3
kort segment = 4; // Skjermstift 5
kort segF = 5; // Skjermstift 11
kort segG = 6; // Skjermstift 15
kort segA_OUT = 110;
kort segB_OUT = 110;
kort segC_OUT = 110;
kort segD_OUT = 110;
kort segE_OUT = 110;
kort segF_OUT = 110;
kort segG_OUT = 110;
kort segA_IN = 90;
kort segB_IN = 90;
kort segC_IN = 90;
kort segD_IN = 90;
kort segE_IN = 90;
kort segF_IN = 90;
kort segG_IN = 90;
int TID = 2000;
DateTime datePast;
DateTime dateNow;
// husholdning
ugyldig oppsett () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.adjust (DateTime (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// hovedsløyfe
void loop () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// Gitt et nummer, viser vi 10:22
// Etter å ha kjørt gjennom de fire tallene, blir displayet slått av
void displayNumber (int toDisplay) {
for (int-siffer = 4; siffer> 0; siffer--) {
lightNumber (toDisplay% 10, digit);
toDisplay / = 10;
}
// starte bevegelse
Serial.print ("T"); Serial.println (TIME);
}
void move (int servo, int position) {
Serial.print ("#");
Serial.print (servo);
Serial.print ("P");
Serial.print (posisjon);
}
// Gitt et tall, slår på disse segmentene
// Hvis nummer == 10, slår du av nummeret
void lightNumber (int numberToDisplay, int segment) {
int offset = (segment - 1) * 7;
switch (numberToDisplay) {
sak 0:
flytte (segA + forskyvning, segA_OUT);
flytte (segB + forskyvning, segB_OUT);
move (segC + offset, segC_OUT);
flytte (segD + forskyvning, segD_OUT);
move (segE + offset, segE_OUT);
move (segF + offset, segF_OUT);
move (segG + offset, segG_IN);
break;
sak 1:
flytte (segA + forskyvning, segA_IN);
flytte (segB + forskyvning, segB_OUT);
move (segC + offset, segC_OUT);
move (segD + offset, segD_IN);
move (segE + offset, segE_IN);
move (segF + offset, segF_IN);
move (segG + offset, segG_IN);
break;
sak 2:
flytte (segA + forskyvning, segA_OUT);
flytte (segB + forskyvning, segB_OUT);
move (segC + offset, segC_IN);
flytte (segD + forskyvning, segD_OUT);
move (segE + offset, segE_OUT);
move (segF + offset, segF_IN);
move (segG + offset, segG_OUT);
break;
sak 3:
flytte (segA + forskyvning, segA_OUT);
flytte (segB + forskyvning, segB_OUT);
move (segC + offset, segC_OUT);
flytte (segD + forskyvning, segD_OUT);
move (segE + offset, segE_IN);
move (segF + offset, segF_IN);
move (segG + offset, segG_OUT);
break;
sak 4:
flytte (segA + forskyvning, segA_IN);
flytte (segB + forskyvning, segB_OUT);
move (segC + offset, segC_OUT);
move (segD + offset, segD_IN);
move (segE + offset, segE_IN);
move (segF + offset, segF_OUT);
move (segG + offset, segG_OUT);
break;
sak 5:
flytte (segA + forskyvning, segA_OUT);
flytte (segB + forskyvning, segB_IN);
move (segC + offset, segC_OUT);
flytte (segD + forskyvning, segD_OUT);
move (segE + offset, segE_IN);
move (segF + offset, segF_OUT);
move (segG + offset, segG_OUT);
break;
sak 6:
flytte (segA + forskyvning, segA_OUT);
flytte (segB + forskyvning, segB_IN);
move (segC + offset, segC_OUT);
flytte (segD + forskyvning, segD_OUT);
move (segE + offset, segE_OUT);
move (segF + offset, segF_OUT);
move (segG + offset, segG_OUT);
break;
sak 7:
flytte (segA + forskyvning, segA_OUT);
flytte (segB + forskyvning, segB_OUT);
move (segC + offset, segC_OUT);
move (segD + offset, segD_IN);
move (segE + offset, segE_IN);
move (segF + offset, segF_IN);
move (segG + offset, segG_IN);
break;
sak 8:
flytte (segA + forskyvning, segA_OUT);
flytte (segB + forskyvning, segB_OUT);
move (segC + offset, segC_OUT);
flytte (segD + forskyvning, segD_OUT);
move (segE + offset, segE_OUT);
move (segF + offset, segF_OUT);
move (segG + offset, segG_OUT);
break;
sak 9:
flytte (segA + forskyvning, segA_OUT);
flytte (segB + forskyvning, segB_OUT);
move (segC + offset, segC_OUT);
flytte (segD + forskyvning, segD_OUT);
move (segE + offset, segE_IN);
move (segF + offset, segF_OUT);
move (segG + offset, segG_OUT);
break;
sak 10:
flytte (segA + forskyvning, segA_IN);
flytte (segB + forskyvning, segB_IN);
move (segC + offset, segC_IN);
move (segD + offset, segD_IN);
move (segE + offset, segE_IN);
move (segF + offset, segF_IN);
move (segG + offset, segG_IN);
break;
}
}
Alt fungerer:
Så den mekaniske visningen av en ikke-triviell design er klar.