Het werkingsprincipe van het voorgestelde display, dat is gemaakt en gebouwd door Instructables onder de bijnaam alstroemeria, is als volgt: segmenten die worden vooruitgeschoven door servo's werpen een schaduw, waardoor ze zichtbaar worden. De resterende segmenten, die zich in hetzelfde vlak met de achtergrond bevinden, gaan ermee samen.
Dat is duidelijk
zelfgemaakt Het blijkt duur te zijn, want voor haar verwerft de meester maar liefst 28 van dergelijke servo's:
En een beheermodule die aansluit op
Arduino zoals dit:
De real-time klok (RTC) -module tegen deze achtergrond lijkt een zeer kleine uitgave te zijn.
Nadat hij alle benodigde componenten heeft verworven, legt de meester ze tot nu toe opzij om aan sjablonen te werken om het mechanische deel van het scherm te maken. Hij krijgt vier bestanden:
1,
2,
3,
4. De wizard geeft bestanden 1 en 3 tweemaal weer op een snijplotter, en 2 en 4, één voor één, allemaal op een schaal van 1: 1, en krijgt zes delen, waarvan sommige op de een of andere manier op oude ponskaarten lijken. U kunt ook printen, ook op een schaal van 1: 1 en in dezelfde hoeveelheden, en handmatig snijden.
Dremel snijdt holle metalen pinnen met een lengte van 20 mm en buizen met een buitendiameter die iets groter is dan de buitendiameter van de pin met een lengte van 10 mm:
Lijmt lagen met dikke dubbelzijdige tape, voegt buizen toe:
Het voegt beweegbare segmenten toe die zijn gelijmd aan de pinnen die door de buizen zijn gegaan, aan de achterkant lijmt staaldraadduwers aan dezelfde pinnen, en dit is waar de pinnen hol zijn:
Het buigt pushers, lijmt servo's en sluit erop aan:
Sluit de servo's met het resterende geperforeerde vel:
De servobesturingsmodule wordt aangesloten volgens het schema aan het begin van het artikel. De aandrijvingen zelf zijn aangesloten op de module in de volgorde die overeenkomt met de standaard segmentaanduidingen:
De RTC-module wordt als volgt aangesloten: SDA - pin 4 Arduino, SCL - pin 5, plus voeding en gemeenschappelijke draad - parallel aan de overeenkomstige Arduino-lijnen. Dit is het resultaat:
De wizard stelt de tijd in de RTC-module in met deze schets (je hebt de RTClib-bibliotheek nodig):
#include
#include "RTClib.h"
RTC_DS1307 RTC;
ongeldige setup () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
if (! RTC.isrunning ()) {
Serial.println ("RTC is NIET actief!");
RTC.adjust (DateTime (__ DATE__, __TIME__));
}
}
Vervolgens vult het de hoofdschets in die dezelfde bibliotheek vereist:
#include
#include "RTClib.h"
RTC_DS1307 RTC;
korte segA = 0; // Display pin 14
korte segB = 1; // Display pin 16
korte segC = 2; // Display pin 13
korte segD = 3; // Display pin 3
korte segE = 4; // Display pin 5
korte segF = 5; // Display pin 11
korte segG = 6; // Display pin 15
kort segA_OUT = 110;
short segB_OUT = 110;
kort segC_OUT = 110;
short segD_OUT = 110;
short segE_OUT = 110;
kort segF_OUT = 110;
kort segG_OUT = 110;
korte segA_IN = 90;
short segB_IN = 90;
short segC_IN = 90;
short segD_IN = 90;
short segE_IN = 90;
short segF_IN = 90;
short segG_IN = 90;
int TIME = 2000;
DateTime datePast;
DateTime dateNow;
// huishoudpersoneel
ongeldige setup () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.adjust (DateTime (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// hoofdlus
leegte lus () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// Gegeven een getal geven we 10:22 weer
// Na het doorlopen van de 4 cijfers blijft het display uitgeschakeld
ongeldig displayNumber (int toDisplay) {
voor (int cijfer = 4; cijfer> 0; cijfer--) {
lightNumber (toDisplay% 10, cijfer);
toDisplay / = 10;
}
// begin beweging
Serial.print ("T"); Serial.println (TIME);
}
ongeldige beweging (int servo, int positie) {
Serial.print ("#");
Serial.print (servo);
Serial.print ("P");
Serial.print (positie);
}
// Gegeven een nummer, zet die segmenten aan
// Als nummer == 10, schakel nummer dan uit
leegte lightNumber (int numberToDisplay, int segment) {
int offset = (segment - 1) * 7;
schakelaar (numberToDisplay) {
geval 0:
verplaatsen (segA + offset, segA_OUT);
verplaatsen (segB + offset, segB_OUT);
verplaatsen (segC + offset, segC_OUT);
verplaatsen (segD + offset, segD_OUT);
verplaatsen (segE + offset, segE_OUT);
verplaatsen (segF + offset, segF_OUT);
verplaatsen (segG + offset, segG_IN);
breken;
geval 1:
verplaatsen (segA + offset, segA_IN);
verplaatsen (segB + offset, segB_OUT);
verplaatsen (segC + offset, segC_OUT);
verplaatsen (segD + offset, segD_IN);
verplaatsen (segE + offset, segE_IN);
verplaatsen (segF + offset, segF_IN);
verplaatsen (segG + offset, segG_IN);
breken;
geval 2:
verplaatsen (segA + offset, segA_OUT);
verplaatsen (segB + offset, segB_OUT);
verplaatsen (segC + offset, segC_IN);
verplaatsen (segD + offset, segD_OUT);
verplaatsen (segE + offset, segE_OUT);
verplaatsen (segF + offset, segF_IN);
verplaatsen (segG + offset, segG_OUT);
breken;
geval 3:
verplaatsen (segA + offset, segA_OUT);
verplaatsen (segB + offset, segB_OUT);
verplaatsen (segC + offset, segC_OUT);
verplaatsen (segD + offset, segD_OUT);
verplaatsen (segE + offset, segE_IN);
verplaatsen (segF + offset, segF_IN);
verplaatsen (segG + offset, segG_OUT);
breken;
geval 4:
verplaatsen (segA + offset, segA_IN);
verplaatsen (segB + offset, segB_OUT);
verplaatsen (segC + offset, segC_OUT);
verplaatsen (segD + offset, segD_IN);
verplaatsen (segE + offset, segE_IN);
verplaatsen (segF + offset, segF_OUT);
verplaatsen (segG + offset, segG_OUT);
breken;
geval 5:
verplaatsen (segA + offset, segA_OUT);
verplaatsen (segB + offset, segB_IN);
verplaatsen (segC + offset, segC_OUT);
verplaatsen (segD + offset, segD_OUT);
verplaatsen (segE + offset, segE_IN);
verplaatsen (segF + offset, segF_OUT);
verplaatsen (segG + offset, segG_OUT);
breken;
geval 6:
verplaatsen (segA + offset, segA_OUT);
verplaatsen (segB + offset, segB_IN);
verplaatsen (segC + offset, segC_OUT);
verplaatsen (segD + offset, segD_OUT);
verplaatsen (segE + offset, segE_OUT);
verplaatsen (segF + offset, segF_OUT);
verplaatsen (segG + offset, segG_OUT);
breken;
geval 7:
verplaatsen (segA + offset, segA_OUT);
verplaatsen (segB + offset, segB_OUT);
verplaatsen (segC + offset, segC_OUT);
verplaatsen (segD + offset, segD_IN);
verplaatsen (segE + offset, segE_IN);
verplaatsen (segF + offset, segF_IN);
verplaatsen (segG + offset, segG_IN);
breken;
zaak 8:
verplaatsen (segA + offset, segA_OUT);
verplaatsen (segB + offset, segB_OUT);
verplaatsen (segC + offset, segC_OUT);
verplaatsen (segD + offset, segD_OUT);
verplaatsen (segE + offset, segE_OUT);
verplaatsen (segF + offset, segF_OUT);
verplaatsen (segG + offset, segG_OUT);
breken;
zaak 9:
verplaatsen (segA + offset, segA_OUT);
verplaatsen (segB + offset, segB_OUT);
verplaatsen (segC + offset, segC_OUT);
verplaatsen (segD + offset, segD_OUT);
verplaatsen (segE + offset, segE_IN);
verplaatsen (segF + offset, segF_OUT);
verplaatsen (segG + offset, segG_OUT);
breken;
zaak 10:
verplaatsen (segA + offset, segA_IN);
verplaatsen (segB + offset, segB_IN);
verplaatsen (segC + offset, segC_IN);
verplaatsen (segD + offset, segD_IN);
verplaatsen (segE + offset, segE_IN);
verplaatsen (segF + offset, segF_IN);
verplaatsen (segG + offset, segG_IN);
breken;
}
}
Alles werkt:
Dus de mechanische weergave van een niet-triviaal ontwerp is klaar.