Funktionsprincipen för den föreslagna skärmen, som gjordes och byggdes av Instructables under smeknamnet alstroemeria, är som följer: segment avancerade av servos kastar en skugga, vilket gör dem synliga. De återstående segmenten, som ligger i samma plan med bakgrunden, smälter samman med det.
Det är uppenbart
hemgjorda produkt Det visar sig vara dyrt, för föraren förvärvar så många som 28 sådana servor:
Och en hanteringsmodul som ansluter till
Arduino så här:
Modulen realtidsklocka (RTC) mot denna bakgrund verkar vara en mycket liten kostnad.
Efter att ha skaffat alla nödvändiga komponenter, lägger befälhavaren hittills dem åt sidan för att arbeta med mallar för att göra den mekaniska delen av skärmen. Han får fyra filer:
1,
2,
3,
4. Guiden visar filer 1 och 3 två gånger på en skärplotter, och 2 och 4, en i taget, alla på en skala 1: 1, och får sex delar, av vilka vissa liknar gamla stanskort på något sätt. Du kan också skriva ut, även på en skala från 1: 1 och i samma mängder, och klippa manuellt.
Dremel skär ihåliga metallstift med en längd på 20 mm och rör med en yttre diameter som är något större än den yttre diametern på stiftet med en längd på 10 mm:
Limma lager med tjockt dubbelsidig tejp, lägger till rör:
Den lägger till rörliga segment som är limmade på stiften som passeras genom rören, på baksidan limmar ståltrådpressar till samma stift, och det är här stiften är ihåliga:
Den böjer pushers, limmar servos och ansluter till dem:
Stänger servos med återstående perforerat ark:
Servokontrollmodulen ansluts enligt schemat som ges i början av artikeln. Själva enheterna är anslutna till modulen i den ordning som motsvarar standardsegmentbeteckningarna:
RTC-modulen ansluts enligt följande: SDA - stift 4 Arduino, SCL - stift 5, plus ström och gemensam tråd - parallellt med motsvarande Arduino-linjer. Här är resultatet:
Guiden ställer in tiden i RTC-modulen med den här skissen (du behöver RTClib-biblioteket):
#include
# inkludera "RTClib.h"
RTC_DS1307 RTC;
ogiltig installation () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
if (! RTC.isrunning ()) {
Serial.println ("RTC kör INTE!");
RTC.adjust (DateTime (__ DATE__, __TIME__));
}
}
Sedan fyller den i huvudskiss som kräver samma bibliotek:
#include
# inkludera "RTClib.h"
RTC_DS1307 RTC;
kort segA = 0; // Displaystift 14
kort segB = 1; // Displaystift 16
kort segC = 2; // Displaystift 13
kort segD = 3; // Displaystift 3
kort segE = 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;
// husvård
ogiltig installation () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.adjust (DateTime (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// huvudslinga
void loop () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// Med tanke på ett nummer visar vi 10:22
// Efter att ha kört igenom de fyra siffrorna lämnas displayen av
void displayNumber (int toDisplay) {
för (int-siffra = 4; siffra> 0; siffra--) {
lightNumber (toDisplay% 10, digit);
toDisplay / = 10;
}
// starta rörelse
Serial.print ("T"); Serial.println (TIME);
}
void move (int servo, int position) {
Serial.print ("#");
Serial.print (servo);
Serial.print ("P");
Serial.print (position);
}
// Med ett nummer, aktiverar du segmenten
// Om nummer == 10, stäng sedan av numret
void lightNumber (int numberToDisplay, int segment) {
int offset = (segment - 1) * 7;
switch (numberToDisplay) {
fall 0:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_OUT);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_IN);
break;
fall 1:
flytta (segA + offset, segA_IN);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_IN);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_IN);
flytta (segG + offset, segG_IN);
break;
fall 2:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_IN);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_OUT);
flytta (segF + offset, segF_IN);
flytta (segG + offset, segG_OUT);
break;
fall 3:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_IN);
flytta (segG + offset, segG_OUT);
break;
fall 4:
flytta (segA + offset, segA_IN);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_IN);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_OUT);
break;
fall 5:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_IN);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_OUT);
break;
fall 6:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_IN);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_OUT);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_OUT);
break;
fall 7:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_IN);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_IN);
flytta (segG + offset, segG_IN);
break;
fall 8:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_OUT);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_OUT);
break;
fall 9:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_OUT);
break;
fall 10:
flytta (segA + offset, segA_IN);
flytta (segB + offset, segB_IN);
flytta (segC + offset, segC_IN);
flytta (segD + offset, segD_IN);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_IN);
flytta (segG + offset, segG_IN);
break;
}
}
Allt fungerar:
Den mekaniska displayen med en icke-trivial design är klar.