Funktionsprincippet for den foreslåede skærm, som blev lavet og bygget af instruktører under kælenavnet alstroemeria, er som følger: segmenter, der er fremskaffet af servoer, kaster en skygge, hvilket gør dem synlige. De resterende segmenter, der er placeret i samme plan med baggrunden, smelter sammen med det.
Det er klart
hjemmelavet produkt Det viser sig at være dyrt, for for hende erhverver mesteren så mange som 28 sådanne servoer:
Og et styringsmodul, der opretter forbindelse til
Arduino som dette:
RTC-modulet i realtid på denne baggrund ser ud til at være en meget lille udgift.
Efter at have anskaffet alle de nødvendige komponenter, lægger masteren hidtil dem til side for at arbejde på skabeloner til fremstilling af den mekaniske del af displayet. Han får fire filer:
1,
2,
3,
4. Guiden viser filer 1 og 3 to gange på en skæreplotter, og 2 og 4, en ad gangen, alle i en 1: 1-skala, og får seks dele, hvoraf nogle ligner gamle stempelkort på en eller anden måde. Du kan også udskrive, også på en skala fra 1: 1 og i samme mængder og klippe manuelt.
Dremel skærer hule metalstifter med en længde på 20 mm og rør med en udvendig diameter lidt større end den udvendige diameter af stiften med en længde på 10 mm:
Limer lag med tykt dobbeltsidet tape, tilføjer rør:
Det tilføjer bevægelige segmenter, der er limet på stifterne, der føres gennem rørene, på bagsiden limes ståltrådskubber til de samme stifter, og det er her stifterne er hule:
Den bøjer pushere, limer servoer og forbindes til dem:
Lukker servoer med det resterende perforerede ark:
Servostyringsmodulet tilsluttes i henhold til det skema, der er givet i begyndelsen af artiklen. Selve drevene er forbundet til modulet i den rækkefølge, der svarer til standard segmentbetegnelser:
RTC-modulet tilsluttes som følger: SDA - pin 4 på Arduino, SCL - pin 5, plus strøm og fælles ledning - parallelt med de tilsvarende Arduino linjer. Her er resultatet:
Guiden indstiller tiden i RTC-modulet med denne skitse (du har brug for RTClib-biblioteket):
#include
#include "RTClib.h"
RTC_DS1307 RTC;
ugyldig opsætning () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
hvis (! RTC.isrunning ()) {
Serial.println ("RTC kører IKKE!");
RTC.adjust (DateTime (__ DATE__, __TIME__));
}
}
Derefter udfylder den hovedskitse, der kræver det samme bibliotek:
#include
#include "RTClib.h"
RTC_DS1307 RTC;
kort segA = 0; // Displaystift 14
kort segB = 1; // Displaystift 16
kort segC = 2; // Displaystift 13
kort segment = 3; // Display pin 3
kort segment = 4; // Displaystift 5
kort segF = 5; // Displaystift 11
kort segG = 6; // Displaystift 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 opsætning () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.adjust (DateTime (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// hovedsløjfe
void loop () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNummer (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// Givet et nummer, viser vi 10:22
// Efter at have kørt gennem de 4 numre, er displayet slået fra
void displayNumber (int toDisplay) {
for (int ciffer = 4; ciffer> 0; ciffer--) {
lightNumber (toDisplay% 10, digit);
toDisplay / = 10;
}
// start bevægelse
Serial.print ("T"); Serial.println (TIME);
}
void move (int servo, int position) {
Serial.print ("#");
Serial.print (servo);
Serial.print ("P");
Serial.print (position);
}
// Givet et nummer, tænder for disse segmenter
// Hvis nummer == 10, skal du slukke for nummeret
void lightNumber (int numberToDisplay, int segment) {
int offset = (segment - 1) * 7;
switch (numberToDisplay) {
sag 0:
flyt (segA + offset, segA_OUT);
flyt (segB + offset, segB_OUT);
flyt (segC + offset, segC_OUT);
flyt (segD + offset, segD_OUT);
flyt (segE + offset, segE_OUT);
flyt (segF + offset, segF_OUT);
flyt (segG + offset, segG_IN);
break;
sag 1:
flyt (segA + offset, segA_IN);
flyt (segB + offset, segB_OUT);
flyt (segC + offset, segC_OUT);
flyt (segD + offset, segD_IN);
flyt (segE + offset, segE_IN);
flyt (segF + offset, segF_IN);
flyt (segG + offset, segG_IN);
break;
sag 2:
flyt (segA + offset, segA_OUT);
flyt (segB + offset, segB_OUT);
flyt (segC + offset, segC_IN);
flyt (segD + offset, segD_OUT);
flyt (segE + offset, segE_OUT);
flyt (segF + offset, segF_IN);
flyt (segG + offset, segG_OUT);
break;
sag 3:
flyt (segA + offset, segA_OUT);
flyt (segB + offset, segB_OUT);
flyt (segC + offset, segC_OUT);
flyt (segD + offset, segD_OUT);
flyt (segE + offset, segE_IN);
flyt (segF + offset, segF_IN);
flyt (segG + offset, segG_OUT);
break;
sag 4:
flyt (segA + offset, segA_IN);
flyt (segB + offset, segB_OUT);
flyt (segC + offset, segC_OUT);
flyt (segD + offset, segD_IN);
flyt (segE + offset, segE_IN);
flyt (segF + offset, segF_OUT);
flyt (segG + offset, segG_OUT);
break;
sag 5:
flyt (segA + offset, segA_OUT);
flyt (segB + offset, segB_IN);
flyt (segC + offset, segC_OUT);
flyt (segD + offset, segD_OUT);
flyt (segE + offset, segE_IN);
flyt (segF + offset, segF_OUT);
flyt (segG + offset, segG_OUT);
break;
sag 6:
flyt (segA + offset, segA_OUT);
flyt (segB + offset, segB_IN);
flyt (segC + offset, segC_OUT);
flyt (segD + offset, segD_OUT);
flyt (segE + offset, segE_OUT);
flyt (segF + offset, segF_OUT);
flyt (segG + offset, segG_OUT);
break;
sag 7:
flyt (segA + offset, segA_OUT);
flyt (segB + offset, segB_OUT);
flyt (segC + offset, segC_OUT);
flyt (segD + offset, segD_IN);
flyt (segE + offset, segE_IN);
flyt (segF + offset, segF_IN);
flyt (segG + offset, segG_IN);
break;
sag 8:
flyt (segA + offset, segA_OUT);
flyt (segB + offset, segB_OUT);
flyt (segC + offset, segC_OUT);
flyt (segD + offset, segD_OUT);
flyt (segE + offset, segE_OUT);
flyt (segF + offset, segF_OUT);
flyt (segG + offset, segG_OUT);
break;
sag 9:
flyt (segA + offset, segA_OUT);
flyt (segB + offset, segB_OUT);
flyt (segC + offset, segC_OUT);
flyt (segD + offset, segD_OUT);
flyt (segE + offset, segE_IN);
flyt (segF + offset, segF_OUT);
flyt (segG + offset, segG_OUT);
break;
sag 10:
flyt (segA + offset, segA_IN);
flyt (segB + offset, segB_IN);
flyt (segC + offset, segC_IN);
flyt (segD + offset, segD_IN);
flyt (segE + offset, segE_IN);
flyt (segF + offset, segF_IN);
flyt (segG + offset, segG_IN);
break;
}
}
Alt fungerer:
Den mekaniske visning af et ikke-trivielt design er klar.