Siūlomo ekrano, kurį pagamino ir pastatė „Instructables“ slapyvardžiu alstroemeria, veikimo principas yra toks: servo pagalba išplėsti segmentai meta šešėlį, kuris juos daro matomus. Likę segmentai, esantys toje pačioje plokštumoje su fonu, susilieja su juo.
Akivaizdu, kad
naminis Tai pasirodo brangu, nes jai meistras įsigyja net 28 tokius servo variantus:
Ir valdymo modulis, jungiantis prie
Arduino kaip šis:
Panašu, kad realiojo laiko laikrodžio (RTC) modulis, atsižvelgiant į tai, yra labai mažos išlaidos.
Įsigijęs visus reikalingus komponentus, meistras iki šiol juos atiduoda darbui prie šablonų, skirtų mechaninei ekrano daliai padaryti. Jis gauna keturias bylas:
1,
2,
3,
4. Vedlys du kartus rodo pjaustymo braižytuve 1 ir 3 failus, 2 ir 4 failus po vieną, visus 1: 1 masteliu, ir gauna šešias dalis, kai kurios iš jų kažkokiu būdu primena senas perforatoriaus korteles. Taip pat galite spausdinti tokiu pačiu mastu, 1: 1 formatu, ir pjaustyti rankiniu būdu.
„Dremel“ pjauna tuščiavidurius metalinius kaiščius, kurių ilgis yra 20 mm, ir vamzdžius, kurių išorinis skersmuo yra šiek tiek didesnis nei išorinis kaiščio, kurio ilgis yra 10 mm, skersmuo:
Klijuojame sluoksnius su stora dvipuse juosta, pridedame vamzdelius:
Jame pridedami judamieji segmentai, priklijuoti prie kaiščių, praeinančių per vamzdžius, kitoje pusėje klijuojami plieninių vielų stūmikliai prie tų pačių kaiščių, o štai kaiščiai yra tuščiaviduriai:
Jis lenkia stūmiklius, klijuoja servas ir jungiasi prie jų:
Uždaromos servos su likusiu perforuotu lakštu:
Servo valdymo modulis jungiasi pagal schemą, nurodytą straipsnio pradžioje. Pačios pavaros yra sujungtos su moduliu ta tvarka, kuri atitinka standartinius segmentų pavadinimus:
RTC modulis jungiamas taip: SDA - Arduino 4 kaištis, SCL - 5 kaištis, pridėjus maitinimą ir bendrą laidą - lygiagrečiai atitinkamoms Arduino linijoms. Štai rezultatas:
Vedlys nustato laiką RTC modulyje naudodamas šį eskizą (jums reikia RTClib bibliotekos):
# įtraukti
#include „RTClib.h“
RTC_DS1307 RTC;
negaliojanti sąranka () {
Serialas.beginas (57600);
Viela.beginas ();
RTC.begin ();
if (! RTC.srunning ()) {
„Serial.println“ („RTC NĖRA vykdomas!“);
RTC.adjust (DateTime (__ DATE__, __TIME__));
}
}
Tada jis užpildo pagrindinį eskizą, kuriam reikalinga ta pati biblioteka:
# įtraukti
#include „RTClib.h“
RTC_DS1307 RTC;
trumpasis segA = 0; // 14 rodymo kaištis
trumpas segB = 1; // 16 rodymo kaištis
trumpas segmentas = 2; // 13 rodymo kaištis
trumpas segmentas = 3; // 3 rodymo kaištis
trumpas segmentas = 4; // 5 rodymo kaištis
trumpas segmentas = 5; // 11 ekrano kaištis
trumpas segmentas = 6; // 15 rodymo kaištis
trumpas segmentA_OUT = 110;
trumpas segB_OUT = 110;
trumpas segC_OUT = 110;
trumpas segD_OUT = 110;
trumpas segE_OUT = 110;
trumpas segF_OUT = 110;
trumpas segG_OUT = 110;
trumpas segmentA_IN = 90;
trumpas segB_IN = 90;
trumpas segC_IN = 90;
trumpas segD_IN = 90;
trumpas segmentE_IN = 90;
trumpas segF_IN = 90;
trumpas segmentG_IN = 90;
vidinis laikas = 2000;
„DateTime“ dataPast;
DateTime dateNow;
// namų tvarkymas
negaliojanti sąranka () {
„Serial.begin“ (9600);
Viela.beginas ();
RTC.begin ();
RTC.adjust (DateTime (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// pagrindinė kilpa
tuščia kilpa () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// Pateikus skaičių, rodome 10:22
// Paleidus 4 numerius, ekranas paliekamas išjungtas
void displayNumber (int toDisplay) {
už (vidinis skaitmuo = 4; skaitmuo> 0; skaitmuo--) {
„lightNumber“ („ekrano% 10“, skaitmuo);
toDisplay / = 10;
}
// pradėti judėti
„Serial.print“ („T“); Serial.println (TIME);
}
void move (int servo, int pozicija) {
Serijos spausdinimas („#“);
Serial.print (servo);
Serial.print („P“);
Serial.print (padėtis);
}
// Pateikus numerį, įjungia tuos segmentus
// Jei skaičius == 10, tada išjunkite numerį
void lightNumber (int numberToDisplay, int segmentas) {
int ofsetas = (segmentas - 1) * 7;
jungiklis („numberToDisplay“) {
0 atvejis:
perkelti (segmentA + poslinkis, segmentA_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segC + poslinkis, segC_OUT);
perkelti (segD + poslinkis, segD_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segG + poslinkis, segG_IN);
pertrauka;
1 atvejis:
perkelti (segmentA + poslinkis, segmentA_IN);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segC + poslinkis, segC_OUT);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_FIN);
perkelti (segG + poslinkis, segG_IN);
pertrauka;
2 atvejis:
perkelti (segmentA + poslinkis, segmentA_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segC + poslinkis, segC_IN);
perkelti (segD + poslinkis, segD_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segmentas + poslinkis, segmentas_FIN);
perkelti (segG + poslinkis, segG_OUT);
pertrauka;
3 atvejis:
perkelti (segmentA + poslinkis, segmentA_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segC + poslinkis, segC_OUT);
perkelti (segD + poslinkis, segD_OUT);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_FIN);
perkelti (segG + poslinkis, segG_OUT);
pertrauka;
4 atvejis:
perkelti (segmentA + poslinkis, segmentA_IN);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segC + poslinkis, segC_OUT);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segG + poslinkis, segG_OUT);
pertrauka;
5 atvejis:
perkelti (segmentA + poslinkis, segmentA_OUT);
perkelti (segmentas + poslinkis, segmentas_BIN);
perkelti (segC + poslinkis, segC_OUT);
perkelti (segD + poslinkis, segD_OUT);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segG + poslinkis, segG_OUT);
pertrauka;
6 atvejis:
perkelti (segmentA + poslinkis, segmentA_OUT);
perkelti (segmentas + poslinkis, segmentas_BIN);
perkelti (segC + poslinkis, segC_OUT);
perkelti (segD + poslinkis, segD_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segG + poslinkis, segG_OUT);
pertrauka;
7 atvejis:
perkelti (segmentA + poslinkis, segmentA_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segC + poslinkis, segC_OUT);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_FIN);
perkelti (segG + poslinkis, segG_IN);
pertrauka;
8 atvejis:
perkelti (segmentA + poslinkis, segmentA_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segC + poslinkis, segC_OUT);
perkelti (segD + poslinkis, segD_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segG + poslinkis, segG_OUT);
pertrauka;
9 atvejis:
perkelti (segmentA + poslinkis, segmentA_OUT);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segC + poslinkis, segC_OUT);
perkelti (segD + poslinkis, segD_OUT);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_OUT);
perkelti (segG + poslinkis, segG_OUT);
pertrauka;
10 atvejis:
perkelti (segmentA + poslinkis, segmentA_IN);
perkelti (segmentas + poslinkis, segmentas_BIN);
perkelti (segC + poslinkis, segC_IN);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_IN);
perkelti (segmentas + poslinkis, segmentas_FIN);
perkelti (segG + poslinkis, segG_IN);
pertrauka;
}
}
Viskas veikia:
Taigi mechaninis ne trivialios konstrukcijos ekranas yra paruoštas.