O princípio de operação da exibição proposta, que foi criada e construída por Instructables sob o apelido alstroemeria, é a seguinte: segmentos avançados por servos projetam uma sombra, o que os torna visíveis. Os demais segmentos, localizados no mesmo plano com o plano de fundo, se fundem a ele.
 
Está claro que 
caseiro Isso acaba sendo caro, porque para ela o mestre adquire até 28 desses servos:
E um módulo de gerenciamento que se conecta a 
Arduino assim:
O módulo de relógio em tempo real (RTC) nesse contexto parece ser uma despesa muito pequena.
Tendo adquirido todos os componentes necessários, o mestre até agora os coloca de lado para trabalhar em modelos para fazer a parte mecânica da tela. Ele recebe quatro arquivos: 
1, 
2, 
3, 
4. O assistente exibe os arquivos 1 e 3 duas vezes em uma plotadora de corte e 2 e 4, um de cada vez, todos em uma escala de 1: 1 e obtém seis partes, algumas das quais se assemelham a cartões perfurados antigos. Você também pode imprimir, também em uma escala de 1: 1 e nas mesmas quantidades, e cortar manualmente.
A Dremel corta pinos de metal ocos com um comprimento de 20 mm e tubos com um diâmetro externo um pouco maior que o diâmetro externo do pino com um comprimento de 10 mm:
Cola camadas com fita dupla face grossa, adiciona tubos:
Ele adiciona segmentos móveis colados aos pinos passados pelos tubos, no verso cola os empurradores de fio de aço nos mesmos pinos, e é aí que os pinos são ocos:
Dobra empurradores, cola servos e se conecta a eles:
Fecha os servos com a folha perfurada restante:
O módulo de servocontrole é conectado de acordo com o esquema fornecido no início do artigo. As próprias unidades são conectadas ao módulo na ordem correspondente às designações de segmento padrão:
O módulo RTC se conecta da seguinte maneira: SDA - pino 4 Arduino, SCL - pino 5, mais energia e fio comum - paralelo às linhas correspondentes do Arduino. Aqui está o resultado:
O assistente define o horário no módulo RTC com este esboço (você precisa da biblioteca RTClib):
#include
#include "RTClib.h"
RTC_DS1307 RTC;
configuração nula () {
    Serial.begin (57600);
    Wire.begin ();
    RTC.begin ();
  
    if (! RTC.isrunning ()) {
    Serial.println ("O RTC NÃO está sendo executado!");
    RTC.adjust (DateTime (__ DATE__, __TIME__));
    }
}
Em seguida, preenche o esboço principal que requer a mesma biblioteca:
#include 
#include "RTClib.h"
RTC_DS1307 RTC;
segA curto = 0; // Pino de exibição 14
segB curto = 1; // Pino de exibição 16
segC curto = 2; // Pino de exibição 13
segD curto = 3; // Pino de exibição 3
segE curto = 4; // Pino de exibição 5
segF curto = 5; // Pino de exibição 11
segG curto = 6; // Pino de exibição 15
curto segA_OUT = 110;
curto segB_OUT = 110;
curto segC_OUT = 110;
segD_OUT curto = 110;
curto segE_OUT = 110;
segF_OUT curto = 110;
segG_OUT curto = 110;
segA_IN curto = 90;
segB_IN curto = 90;
segC_IN curto = 90;
segD_IN curto = 90;
segE_IN curto = 90;
segF_IN curto = 90;
segG_IN curto = 90;
int TEMPO = 2000;
DateTime datePast;
DateTime dateNow;
// manutenção da casa
configuração nula () {
  Serial.begin (9600);
  Wire.begin ();
  RTC.begin ();
  RTC.adjust (DateTime (__ DATE__, __TIME__));
  datePast = RTC.now ();
}
// laço principal
loop vazio () {
  dateNow = RTC.now ();
  if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
  {
    displayNumber (dateNow.hour () * 100 + dateNow.minute ());
    datePast = dateNow;
  }
}
// Dado um número, exibimos 10:22
// Depois de percorrer os 4 números, o visor fica desligado
void displayNumber (int toDisplay) {
  for (dígito int = 4; dígito> 0; dígito--) {
    lightNumber (toDisplay% 10, dígito);
    toDisplay / = 10;
  }
  // inicia movimento
  Serial.print ("T"); Serial.println (TIME);
}
movimento nulo (int servo, posição int) {
  Serial.print ("#");
  Serial.print (servo);
  Serial.print ("P");
  Serial.print (posição);
}
// Dado um número, ativa esses segmentos
// Se número == 10, desative o número
void lightNumber (int numberToDisplay, int segment) {
  int offset = (segmento - 1) * 7;
  switch (numberToDisplay) {
  caso 0:
    mover (segA + deslocamento, segA_OUT);
    mover (segB + deslocamento, segB_OUT);
    mover (segC + deslocamento, segC_OUT);
    mover (segD + deslocamento, segD_OUT);
    mover (segE + deslocamento, segE_OUT);
    mover (segF + deslocamento, segF_OUT);
    mover (segG + deslocamento, segG_IN);
    quebrar;
  caso 1:
    mover (segA + deslocamento, segA_IN);
    mover (segB + deslocamento, segB_OUT);
    mover (segC + deslocamento, segC_OUT);
    mover (segD + deslocamento, segD_IN);
    mover (segE + deslocamento, segE_IN);
    mover (segF + deslocamento, segF_IN);
    mover (segG + deslocamento, segG_IN);
    quebrar;
  caso 2:
    mover (segA + deslocamento, segA_OUT);
    mover (segB + deslocamento, segB_OUT);
    mover (segC + deslocamento, segC_IN);
    mover (segD + deslocamento, segD_OUT);
    mover (segE + deslocamento, segE_OUT);
    mover (segF + deslocamento, segF_IN);
    mover (segG + deslocamento, segG_OUT);
    quebrar;
  caso 3:
    mover (segA + deslocamento, segA_OUT);
    mover (segB + deslocamento, segB_OUT);
    mover (segC + deslocamento, segC_OUT);
    mover (segD + deslocamento, segD_OUT);
    mover (segE + deslocamento, segE_IN);
    mover (segF + deslocamento, segF_IN);
    mover (segG + deslocamento, segG_OUT);
    quebrar;
  caso 4:
    mover (segA + deslocamento, segA_IN);
    mover (segB + deslocamento, segB_OUT);
    mover (segC + deslocamento, segC_OUT);
    mover (segD + deslocamento, segD_IN);
    mover (segE + deslocamento, segE_IN);
    mover (segF + deslocamento, segF_OUT);
    mover (segG + deslocamento, segG_OUT);
    quebrar;
  caso 5:
    mover (segA + deslocamento, segA_OUT);
    mover (segB + deslocamento, segB_IN);
    mover (segC + deslocamento, segC_OUT);
    mover (segD + deslocamento, segD_OUT);
    mover (segE + deslocamento, segE_IN);
    mover (segF + deslocamento, segF_OUT);
    mover (segG + deslocamento, segG_OUT);
    quebrar;
  caso 6:
    mover (segA + deslocamento, segA_OUT);
    mover (segB + deslocamento, segB_IN);
    mover (segC + deslocamento, segC_OUT);
    mover (segD + deslocamento, segD_OUT);
    mover (segE + deslocamento, segE_OUT);
    mover (segF + deslocamento, segF_OUT);
    mover (segG + deslocamento, segG_OUT);
    quebrar;
  caso 7:
    mover (segA + deslocamento, segA_OUT);
    mover (segB + deslocamento, segB_OUT);
    mover (segC + deslocamento, segC_OUT);
    mover (segD + deslocamento, segD_IN);
    mover (segE + deslocamento, segE_IN);
    mover (segF + deslocamento, segF_IN);
    mover (segG + deslocamento, segG_IN);
    quebrar;
  caso 8:
    mover (segA + deslocamento, segA_OUT);
    mover (segB + deslocamento, segB_OUT);
    mover (segC + deslocamento, segC_OUT);
    mover (segD + deslocamento, segD_OUT);
    mover (segE + deslocamento, segE_OUT);
    mover (segF + deslocamento, segF_OUT);
    mover (segG + deslocamento, segG_OUT);
    quebrar;
  caso 9:
    mover (segA + deslocamento, segA_OUT);
    mover (segB + deslocamento, segB_OUT);
    mover (segC + deslocamento, segC_OUT);
    mover (segD + deslocamento, segD_OUT);
    mover (segE + deslocamento, segE_IN);
    mover (segF + deslocamento, segF_OUT);
    mover (segG + deslocamento, segG_OUT);
    quebrar;
  caso 10:
    mover (segA + deslocamento, segA_IN);
    mover (segB + deslocamento, segB_IN);
    mover (segC + deslocamento, segC_IN);
    mover (segD + deslocamento, segD_IN);
    mover (segE + deslocamento, segE_IN);
    mover (segF + deslocamento, segF_IN);
    mover (segG + deslocamento, segG_IN);
    quebrar;
  }
}
Tudo funciona:
Portanto, a exibição mecânica de um design não trivial está pronta.