Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Relógio Flip Arduino com Matriz LED 8×8 – Projeto DIY de Relógio em Tempo Real

Componentes e Materiais

ComponenteQuantidade
Arduino Nano R31
Maxim Integrated DS3231M – RTC I2C (±5ppm)1
Matriz LED 8×8 com driver MAX72191
LED RGB Difuso Cátodo Comum1
Resistor 220 Ω2
Encoder Rotativo com Botão1

Ferramentas Necessárias

Aplicativos e Serviços Online

Sobre o Projeto

Este relógio com matriz LED 8×8 foi desenvolvido por Adrian Jones. O horário é exibido por rolagem da esquerda para a direita ou, sob controle de software, de cima para baixo. Cada dígito desliza da direita, para momentaneamente quando centralizado e brilha levemente, depois rola para a esquerda enquanto o próximo dígito entra. O ciclo repete com um breve atraso.

Para inverter a rolagem (topo para base), altere no código:

static boolean top2bottom = false;

para:

static boolean top2bottom = true;

Conforme comentários no código, diversos parâmetros podem ser ajustados: velocidade de rolagem, linhas em branco entre caracteres, exibição 12/24 horas, intervalo entre caracteres, brilho, etc.

O ajuste de hora é feito facilmente via encoder rotativo. Um LED de duas cores indica o modo de ajuste (minutos, horas ou normal). O relógio foi acomodado em uma caixa de duas peças, facilitando o acesso interno.

Relógio Flip Arduino com Matriz LED 8×8 – Projeto DIY de Relógio em Tempo Real

Código

Código Principal (Arduino)

//*****************************************************************************************//
// MATRIX CLOCK
// Adrian Jones, March 2014
// - permite rolagem esquerda-direita e topo-base
//*****************************************************************************************//
#include <Wire.h>
#include <RTClib.h>

// Registros e pinos do MAX7219
#define max7219_reg_noop 0x00
#define max7219_reg_digit0 0x01
... // (demais defines)

#define dataIn 12 // DIN
#define load 10   // CS
#define clock 11  // CLK

char alphanum[][8] = { ... }; // tabela de caracteres 8x8

// RTC
RTC_DS1307 RTC;

// Encoder, botão e LEDs
#define enc_PinA 2
#define enc_PinB 4
#define enc_Switch 3
#define mode_Pin 8
#define min_Pin 9

// Variáveis de controle
unsigned char enc_A, enc_B, enc_A_prev=0;
static boolean rotating = false;
static boolean clockwise = false;
static boolean updateFlag= false;
static int mode = 0; // 0=nada, 1=ajuste hora, 2=ajuste min

// Strings de exibição
#define max_array_size 100
char ac[max_array_size] = {};
byte rc[8] = {};
String display_message = "";
int arraylen;

// Parâmetros operacionais
#define delay_line 75
#define delay_char 400
#define delay_mess 500
#define cblanks 1
#define eblanks 0

// Recursos de exibição
static boolean top2bottom = false;
static boolean hour24 = false;
static boolean charHI = true;
static boolean doSerial = true;

//*****************************************************************************************//
// Setup Inicial
//*****************************************************************************************//
void setup () {
  Wire.begin();
  Serial.begin(57600);
  if(doSerial) Serial.print("MATRIX Clock - Adrian Jones, Mar. 2014");

  pinMode(dataIn, OUTPUT);
  pinMode(clock, OUTPUT);
  pinMode(load, OUTPUT);
  initMatrix();

  pinMode(mode_Pin, OUTPUT); digitalWrite(mode_Pin, 1);
  pinMode(min_Pin, OUTPUT); digitalWrite(min_Pin, 1);

  pinMode(enc_PinA, INPUT_PULLUP); digitalWrite(enc_PinA, HIGH);
  pinMode(enc_PinB, INPUT_PULLUP); digitalWrite(enc_PinB, HIGH);
  pinMode(enc_Switch, INPUT_PULLUP); digitalWrite(enc_Switch, HIGH);

  attachInterrupt(0, rotEncoder, CHANGE);
  attachInterrupt(1, swEncoder, CHANGE);

  RTC.begin();
  if (! RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
    if(doSerial) Serial.println(" (RTC reset)");
  } else {
    if(doSerial) Serial.println(" (RTC running)");
  }
}

//*****************************************************************************************//
// Loop Principal
//*****************************************************************************************//
void loop () {
  DateTime now = RTC.now();
  display_message = createMessage(now);
  arraylen = initDisplayString(display_message);
  if(updateFlag) { show_time_and_date(now); updateFlag = false; }

  while(rotating) {
    delay(1);
    adjTime(now, clockwise);
    show_time_and_date(RTC.now());
    display_message = createMessage(now);
    arraylen = initDisplayString(display_message);
    delay(1);
    rotating = false;
  }
  delay(5);
  for (int i = 0; i < (arraylen-7); i++) {
    for (int j = 1; j < 9; j++) {
      maxSingle(j, ac[i+8-j]);
    }
    if(i%(8+cblanks) == 0) {
      if(charHI) maxSingle(max7219_reg_intensity, 0x01);
      newDelay(delay_char);
    } else {
      maxSingle(max7219_reg_intensity, 0x00);
      newDelay(delay_line);
    }
  }
  if(mode == 0) newDelay(delay_mess);
}

// Rotinas de interrupção, operações, funções auxiliares...
// (Código completo disponível na fonte original)

Esquemático

Relógio Flip Arduino com Matriz LED 8×8 – Projeto DIY de Relógio em Tempo Real

Processo de manufatura

  1. Relógio POV com Arduino: Construa um Display LED de Persistência de Visão
  2. Construa um Relógio Retrô Numitron com Arduino: Simples, Confiável e Eficiente
  3. Construa um Relógio Mestre LED Personalizado com Alarme – Visível a 12 Metros
  4. Construa um Jogo Tetris com Arduino Nano em Matriz LED 16×8 DIY
  5. MotionSense: Detecção Inteligente de Intrusão com Arduino e ESP8266
  6. Display Interativo de Matriz LED na Porta com Sensor PIR – Saudação de Férias Arduino
  7. Construa um Robô Quadrúpede Inteligente com Arduino: Guia Passo a Passo
  8. Controle Suave de Brilho de LED com Bolt IoT e Arduino UNO
  9. Crie um Medidor IoT Web com Arduino, Yaler e IFTTT
  10. Levitação Magnética Repulsiva com Arduino: Circuito Simples e Guia DIY