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.