Zasada działania proponowanego wyświetlacza, który został stworzony i zbudowany przez Instructables pod pseudonimem alstroemeria, jest następujący: segmenty posuwane przez serwa rzucają cień, dzięki czemu są widoczne. Pozostałe segmenty, znajdujące się w tej samej płaszczyźnie z tłem, łączą się z nim.
Oczywiste jest, że
domowej roboty Okazuje się, że jest drogie, ponieważ dla niej mistrz nabywa aż 28 takich serwomechanizmów:
I moduł zarządzania, który się łączy
Arduino jak to:
Moduł zegara czasu rzeczywistego (RTC) na tym tle wydaje się być bardzo małym wydatkiem.
Po uzyskaniu wszystkich niezbędnych komponentów mistrz do tej pory odkłada je na bok, aby opracować szablony do tworzenia mechanicznej części wyświetlacza. Dostaje cztery pliki:
1,
2,
3,
4. Kreator wyświetla pliki 1 i 3 dwa razy na ploterze tnącym oraz 2 i 4, po jednym na raz, wszystkie w skali 1: 1, i otrzymuje sześć części, z których niektóre w pewien sposób przypominają stare karty dziurkowania. Możesz także drukować, również w skali 1: 1 iw tych samych ilościach, i ciąć ręcznie.
Dremel tnie puste metalowe kołki o długości 20 mm i rurki o średnicy zewnętrznej nieco większej niż zewnętrzna średnica kołka o długości 10 mm:
Przyklej warstwy grubą dwustronną taśmą, dodaje rurki:
Dodaje ruchome segmenty przyklejone do kołków przechodzących przez rurki, z drugiej strony przykleja popychacze z drutu stalowego do tych samych kołków, i tutaj kołki są puste:
Zagina popychacze, klei serwomechanizmy i łączy się z nimi:
Zamyka serwomechanizmy pozostałym perforowanym arkuszem:
Moduł sterowania serwo łączy się zgodnie ze schematem podanym na początku artykułu. Same napędy są podłączone do modułu w kolejności odpowiadającej standardowym oznaczeniom segmentów:
Moduł RTC łączy się w następujący sposób: SDA - pin 4 Arduino, SCL - pin 5, plus zasilanie i wspólny przewód - równolegle do odpowiednich linii Arduino. Oto wynik:
Kreator ustawia czas w module RTC za pomocą tego szkicu (potrzebujesz biblioteki RTClib):
#include
#include „RTClib.h”
RTC_DS1307 RTC;
void setup () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
if (! RTC.isrunning ()) {
Serial.println („RTC NIE działa!”);
RTC.adjust (DateTime (__ DATE__, __TIME__));
}
}
Następnie wypełnia główny szkic wymagający tej samej biblioteki:
#include
#include „RTClib.h”
RTC_DS1307 RTC;
krótki segA = 0; // Wyświetlacz pin 14
krótki segB = 1; // Wyświetlacz pin 16
krótki segC = 2; // Wyświetlacz pin 13
krótki segD = 3; // Wyświetlacz pin 3
krótki segE = 4; // Wyświetlacz pin 5
krótki segF = 5; // Wyświetlacz pin 11
krótki segG = 6; // Wyświetlacz pin 15
krótki segA_OUT = 110;
krótki segB_OUT = 110;
krótki segC_OUT = 110;
krótki segD_OUT = 110;
krótki segE_OUT = 110;
krótki segF_OUT = 110;
krótki segG_OUT = 110;
krótki segA_IN = 90;
krótki segB_IN = 90;
krótki segC_IN = 90;
krótki segD_IN = 90;
krótki segE_IN = 90;
krótki segF_IN = 90;
krótki segG_IN = 90;
int CZAS = 2000;
DateTime datePast;
DateTime dateNow;
// prowadzenie domu
void setup () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.adjust (DateTime (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// główna pętla
void loop () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// Biorąc pod uwagę liczbę, wyświetlamy 10:22
// Po przejrzeniu 4 liczb wyświetlacz pozostaje wyłączony
void displayNumber (int toDisplay) {
dla (int cyfra = 4; cyfra> 0; cyfra--) {
lightNumber (toDisplay% 10, cyfra);
toDisplay / = 10;
}
// rozpocznij ruch
Serial.print („T”); Serial.println (TIME);
}
void move (int servo, int position) {
Serial.print („#”);
Serial.print (serwo);
Serial.print („P”);
Serial.print (pozycja);
}
// Biorąc pod uwagę liczbę, włącza te segmenty
// Jeśli liczba == 10, wyłącz numer
void lightNumber (int numberToDisplay, int segment) {
int offset = (segment - 1) * 7;
przełącznik (numberToDisplay) {
przypadek 0:
move (segA + offset, segA_OUT);
move (segB + offset, segB_OUT);
move (segC + offset, segC_OUT);
move (segD + offset, segD_OUT);
move (segE + offset, segE_OUT);
move (segF + offset, segF_OUT);
move (segG + offset, segG_IN);
przerwa;
przypadek 1:
move (segA + offset, segA_IN);
move (segB + offset, 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);
przerwa;
przypadek 2:
move (segA + offset, segA_OUT);
move (segB + offset, segB_OUT);
move (segC + offset, segC_IN);
move (segD + offset, segD_OUT);
move (segE + offset, segE_OUT);
move (segF + offset, segF_IN);
move (segG + offset, segG_OUT);
przerwa;
przypadek 3:
move (segA + offset, segA_OUT);
move (segB + offset, segB_OUT);
move (segC + offset, segC_OUT);
move (segD + offset, segD_OUT);
move (segE + offset, segE_IN);
move (segF + offset, segF_IN);
move (segG + offset, segG_OUT);
przerwa;
przypadek 4:
move (segA + offset, segA_IN);
move (segB + offset, 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);
przerwa;
przypadek 5:
move (segA + offset, segA_OUT);
move (segB + offset, segB_IN);
move (segC + offset, segC_OUT);
move (segD + offset, segD_OUT);
move (segE + offset, segE_IN);
move (segF + offset, segF_OUT);
move (segG + offset, segG_OUT);
przerwa;
przypadek 6:
move (segA + offset, segA_OUT);
move (segB + offset, segB_IN);
move (segC + offset, segC_OUT);
move (segD + offset, segD_OUT);
move (segE + offset, segE_OUT);
move (segF + offset, segF_OUT);
move (segG + offset, segG_OUT);
przerwa;
przypadek 7:
move (segA + offset, segA_OUT);
move (segB + offset, 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);
przerwa;
przypadek 8:
move (segA + offset, segA_OUT);
move (segB + offset, segB_OUT);
move (segC + offset, segC_OUT);
move (segD + offset, segD_OUT);
move (segE + offset, segE_OUT);
move (segF + offset, segF_OUT);
move (segG + offset, segG_OUT);
przerwa;
przypadek 9:
move (segA + offset, segA_OUT);
move (segB + offset, segB_OUT);
move (segC + offset, segC_OUT);
move (segD + offset, segD_OUT);
move (segE + offset, segE_IN);
move (segF + offset, segF_OUT);
move (segG + offset, segG_OUT);
przerwa;
przypadek 10:
move (segA + offset, segA_IN);
move (segB + offset, 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);
przerwa;
}
}
Wszystko działa:
Mechaniczny wyświetlacz niebanalny projekt jest gotowy.