Quarentena Maker – Dia 2: O tempo

As horas não passam. As horas estão em todo o lugar; no computador, no celular, no Chromecast. E eu não me detenho em olhar as horas; preciso contar o tempo para não parecer um perdido no vazio do universo.

Quarentena Maker – Dia 2: Contar o tempo

Já que é inevitável saber em que micro-fração da quarentena estamos, vou tornar isso prazeroso. Ainda preciso cortar alguns relógios mecânicos que crio, mas o que preciso agora é de algo futurista, para sonhar com um futuro. Um display transparente mostrando as horas deve ajudar nisso.

O acrílico e a luz

O acrílico é incrível em todas suas características. Além dos acrílicos especiais feitos pela Sinteglas, os acrílicos “cristal” também oferecem suas propriedades atraentes. O fenômeno do transporte da luz é uma dessas propriedades.

Devido à sua cristalinidade, o acrílico consegue transportar uma grande quantidade de luz, semelhante à fibra ótica. Acontece que se houver ruído no caminho, a luz se destaca. Claro que o trabalho com luz no acrílico não foi uma descoberta minha, isso é utilizado em dispositivos cujo circuito estejam distantes do case, para transportar a luz do LED até a fachada. Mas a ideia de fazer um relógio de 7 segmentos utilizando o acrílico, essa sim é uma ideia minha (tomara já não haja outro).

Algumas CNC laser oferecem a capacidade de gravar sobre o material, além de cortar. Se gravarmos sobre o acrílico e emitirmos luz perpendicular, a parte gravada se destacará. Para provar o conceito, cortei apenas um dígito e testei sobre o LED da Waldunano. Funcionou!

contar o tempo

Características do dígito

Não dá pra gravar tudo em uma única placa; bem, até dá, só que se perde o controle. Para ter o devido controle sobre os segmentos, cada um deles foi gravado em sua respectiva posição em uma placa exclusiva, de modo que um não deve interferir no outro. A sobreposição dessas placas forma o dígito, que por sua vez deve receber uma combinação de LEDs sob a base de cada placa, formando então o número iluminado.

Os desafios

Primeiramente, deve-se desenhar o dígito. Eu utilizo o QCAD para fazer meus projetos. Depois, deve-se copiar cada segmento para uma nova placa. Grava-se e então vem o ponto crucial; distribuir a luz sob a base de forma que ela não se esparrame para as demais placas.

Para fazer a iluminação adequada, os LEDs devem obrigatoriamente ser SMD. Dá pra fazer com LED 3mm ou 5mm? Dá, mas o trabalho para acoplar a luz será enorme.

Tendo distribuído adequadamente os LEDs SMD sob cada segmento, é hora de controlá-los. Cada dígito tem 7 segmentos, portanto será necessário adicionar um controlar de 8 bits pra cada dígito. Estou utilizando o PCF8574, pois é I2C e permite conectá-los em série, de modo que com 4 PCF8574 teremos o controle dos 4 dígitos, além de 4 bits para outros controles.

Como ajustar a hora? Bem, tratando-se de um relógio doméstico, não há razão para não utilizar a atualização de horas pela Internet com um servidor NTP rodando em um ESP8266 ou ESP32. Só não dá pra ficar preso em casa com um Arduino.

Prova de conceito

Tendo definido todos os parâmetros necessários, hora de montar o dígito. Para compor o circuito, utilizei LEDs SMD azul e pernas de resistores para soldar os LEDs. Veio a calhar, já que a fita condutiva não estava fácil de cortar fino e alinhado.

Wiring

Utilizei o GPIO22 para SCL e GPIO21 para SDA no ESP32. Esse projeto pode ser usado em qualquer placa; Arduino, ESP8266, STM32, Raspberry e tudo o mais, basta configurar o I2C a contento.

Alimentei o PCF8574 em 5V da placa de desenvolvimento, mas alimentei os LEDs em 3v3, então não ficou tão luminoso.

A gambiarra pra prova de conceito ficou assustadoramente feio, mas antes de ir para um circuito é necessário comprovar o funcionamento:

circuito em papelão - O tempo

Parece um pouco bagunçada a mesa, mas na verdade está “muito” bagunçada. Enfim, nessa imagem já estou multiplexando. Isso significa que os LEDs são acessos alternadamente, apesar de parecerem ligados ao mesmo tempo. Desse modo, não preciso de uma fonte potente para alimentar os 20mA de cada LED.

Tive um problema justo com o LED do meio, que por infelicidade não suportou minha gambiarra e desprendeu-se da solda porca que fiz sobre o papelão. Não importa, eu já havia testado o segmento central em outra oportunidade.

Fiz um vídeo mostrando a mudança dos dois segmentos de forma lenta, em seguida mostrei multiplexado. Vou editar e subir no canal, talvez com alguma explicação extra.

Se não sabe nada sobre (ou não lembra) multiplexação, sugiro a leitura desse artigo, onde explico sobre multiplexação e POV (Persistence Of Vision).

Se quiser um pouco mais de teoria, pode dar uma olhada nesse material sobre multiplexação.

Código

Fiz um código bem rápido para teste. O endereço no meu PCF8574 usado para o teste é 0x22. Criei uma função para multiplexar e uma função de seleção de estado do segmento. No loop apenas chamo a função multiplex() passando como parâmetro o tempo entre o ligamento e desligamento em milisegundos.

#include <Arduino.h>
#include <Wire.h>

#define PCF_ADDR 0x22
#define ON  LOW
#define OFF HIGH

uint8_t digitSeg = 0;

void segment(uint8_t seg, uint8_t level){
    uint8_t status = level > 0 ? digitSeg|(1<<seg) : digitSeg^(1<<seg); 
    Serial.println(status);
    Wire.beginTransmission(0x22);
    Wire.write(status);
    Wire.endTransmission();
}

void multiplex(uint16_t value){
    Serial.println("multiplex 0");
    segment(0,ON);
    vTaskDelay(pdMS_TO_TICKS(value));
    segment(0,OFF);
    segment(1,ON);
    vTaskDelay(pdMS_TO_TICKS(value));
    segment(1,OFF);
    segment(2,ON);
    vTaskDelay(pdMS_TO_TICKS(value));
    segment(2,OFF);
}

void setup(){
    Wire.begin();
    Serial.begin(9600);
    Wire.beginTransmission(0x22);
    Wire.write(0xFF);
    Wire.endTransmission();
}

void loop(){
    multiplex(10);
}

 

O tempo - 7 segmentos em acrílico

O brilho está suave porque a tensão não é a correta; está em 3v3 com resistor de 330Ohms, mas vai brilhar muito com tensão e resistor corretos.

E para quem não viu, repare no teste feito sobre o LED de 5mm, quanta interferência de luz teve por exceder os limites:

O tempo

Como o LED embaixo era 5mm, interferiu um bocado nas pontas dos segmentos, por isso fui para um teste mais próximo do real, com LEDs SMD com largura de 1.6mm, que fica dentro da tolerância do acrílico cristal de 2.4mm. Agora resta produzir o relógio para contabilizar o tempo restante de quarentena.

Quarentena Maker – Dia 2: Acabaram as cervejas e a Coca 0. Dizem que a Coca 0 é mais letal que o Corona Vírus, mas ainda sinto minha resistência alta. Além do mais, limpei os rins com cerveja.
Consegui superar a abstinência com a prova de conceito do relógio digital.
Dia 2 superado com sucesso.

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.