Aposto que você já deve ter assistido (ou, ao menos, ouvido falar) a série Stranger Things, correto? Afinal, trata-se de uma série muito popular que agrada tanto quem assiste SÉRIES ocasionalmente quanto os mais nerds e também os fãs da cultura pop dos anos 80. O que acha de fazer um gadget baseado num item presente na série, o alfabeto do Stranger Things? É justamente o que você aprenderá neste artigo! Aqui, será mostrado como você poderá fazer seu próprio alfabeto do Stranger Things (se você não se lembrar como ele é, veja a figura 1) controlado pela Internet. No caso, as mensagens nele mostradas com as luzes individuais para cada letra virão da Internet, via MQTT, dando a impressão que alguém diretamente do mundo de Demogorgon está entrando em contato com você!
Este projeto fará uso do módulo WiFi LoRa 32(V2), o qual possui um ESP32 (com conectividade Bluetooth e Internet via Wi-Fi) e conectividade LoRa. Você é livre para utilizar qualquer Arduino com conectividade à Internet para fazer este projeto, porém se desejar saber mais do módulo WiFi LoRa 32(V2), eu gostaria de indicar a leitura do meu livro “Projetos com ESP32 e LoRa”, Para saber mais sobre ele e adquiri-lo, veja o quadro abaixo.
Gostou do projeto? Mãos à obra!
Material necessário
- Para fazer este projeto, você precisará de:
- Um módulo WiFi LoRa 32(V2)
- Um protoboard (de 400 pontos ou maior)
- Fonte DC Chaveada 5V/2A Micro USB
- Um módulo conversor de nível lógico 3,3-5V bidirecional
- Um cabo flat colorido de 1 metro de comprimento (20 vias)
- Jumpers macho-macho e macho-fêmea
- Uma fita de LEDs RGB de 1 metro do tipo WS2812
- Alfabeto Stranger Things customizado para o projeto impresso numa folha A4. Você pode obtê-lo do repositório oficial do livro no Github, através do endereço http://bit.ly/2xAGPnz
- Um pedaço de plástico, isopor ou papelão firme de tamanho igual ou maior a uma folha A4, para servir de base ao alfabeto impresso
- Fita adesiva (transparente)
- Tesoura de ponta fina
Além disso, você precisará dispor de uma rede Wi-Fi com conectividade à Internet no local em que o projeto ficará.
O que é o alfabeto Stranger Things?
Para melhor contextualizar você. o melhor é começar explicando o que é Stranger Things. Stranger Things é uma série americana de TV (até o momento da escrita deste livro, exibida exclusivamente pelo Netflix) de ficção científica. A série se passa na década de 80, sendo sua história majoritariamente ligada entre o mundo de Demogorgon (monstro/vilão da série) e o “mundo real”, envolvendo nisso mistérios, desaparecimento e retorno de personagens para o mundo paralelo e, o objeto de interesse deste artigo, comunicação entre o mundo real e o paralelo via um alfabeto peculiar.
Este alfabeto (aqui chamado de alfabeto Stranger Things) pode ser visto na figura 1. Ele consiste de um indicador luminoso para cada letra do alfabeto, de forma que o remetente consiga montar mensagens completas observando a sequência de luzes ligadas.
Na história, este alfabeto é usado para comunicar um dos personagens com sua mãe, sendo que o personagem em questão está preso no mundo paralelo de Demogorgon. Neste projeto, você irá dispor de um alfabeto Stranger Things que recebe as mensagens via Internet (usando MQTT), dando a impressão que alguém do mundo paralelo de Demogorgon está falando com você! É um gadget muito interessante para se ter no seu local de trabalho ou até mesmo para impressionar seus amigos.
Fita LED - o que é?
A fita LED trata-se de um objeto na forma de fita, contendo vários LEDs igualmente espaçados, permitindo com que um ou mais LEDs sejam acionados mediante programação. Quanto aos LEDs da fita LED, as cores, espaçamento e tipo de LED dependem do modelo comercial da fita LED.
As fitas LED são normalmente vendidas por metro, na forma de rolos, podendo inclusive ser à prova d’água. Observe na figura 2 um exemplo de fita LED comercial.
As fitas LED possuem um grande destaque hoje na tecnologia, uma vez que permitem a realização de projetos em iluminação, decoração e sinalização de forma simples, relativamente barata e com impacto visual muito positivo. No quesito de projetos eletrônicos com fitas LED, dentre as principais vantagens, destacam-se:
Facilidade de acionamento e programação de iluminação: as fitas LED apresentam 3 ou 4 conexões somente, já contando as utilizadas para comunicação e alimentação. Dessa forma, microcontroladores com poucos GPIOs podem fazer uso de fitas de LED de quaisquer comprimentos, utilizando 1 ou 2 GPIOs para isso.
Podem ser fragmentadas: é permitido se cortar a fita LED (em pontos indicados / destinados a isso) e emendar novamente. Logo, uma mesma fita LED pode ser separada em vários fragmentos, expandindo assim o leque de possibilidades de uso.
Ampla gama de cores: há modelos de fitas LED disponíveis no mercado que apresentam todos os LEDs sendo LEDs RGB (como a fita LED utilizada no projeto deste artigo). Dessa forma, pode-se produzir várias cores de iluminação com uma mesma fita LED
Uniformidade na iluminação: por apresentarem espaçamentos fixos entre si e tecnologias de construção e montagens idênticas, não é comum ver falhas de iluminação (ou intensidades de iluminação diferentes) entre os LEDs, o que causa um efeito visual agradável.
Dimensões físicas (largura e espessura) reduzidas: por utilizarem LEDs SMD, a largura e espessura das fitas LED não costuma ser um problema / empecilho mecânico, aumentando assim ainda mais sua aplicabilidade.
Baixa dispersão de luz: LEDs são conhecidos por serem fontes de luz com baixa dispersão, ou seja, o ângulo de iluminação deles é mais fechado, de forma que se um observador não estiver olhando diretamente para o LED a percepção luminosa é baixa. Desta forma, o uso de fitas de LED em sinalização e painéis informativos é algo muito interessante. Isso já pode ser visto de forma comum hoje na sinalização dos degraus de uma escada em ambiente com pouca iluminação (como em salas de cinema, por exemplo).
Baixo consumo energético: das fontes de luminosidade / tipos de lâmpadas disponíveis atualmente, o LED é a que apresenta o menor consumo energético, Logo, seu uso em dispositivos movidos à bateria, como os emergentes dispositivos vestíveis (wearables), por exemplo, é viável. Ainda, devido ao baixo consumo, em casos de aplicações em estabelecimentos comerciais e industriais, o LED é uma das tecnologias em iluminação que apresenta o menor payback (em termos gerais, significa que o tempo para o projeto se pagar com a economia que proporciona, em relação ao uso de outras tecnologias correlatas, é menor), sendo, portanto algo financeiramente interessante também.
Alta vida útil: das fontes de luminosidade / tipos de lâmpadas disponíveis atualmente (na data de escrita deste livro), o LED é a que também apresenta uma das maiores vidas úteis. Isso significa que a necessidade de manutenções (tanto preventivas quanto corretivas) é menor se comparada a outras fontes de iluminação, o que significa uma boa relação custo benefício a longo prazo.
A fita LED acesa tem um aspecto similar ao mostrado na figura 3.
No caso da fita LED deste projeto, esta dispõe de 3 fios / conexões:
DOUT/DIN: trata-se do fio / conexão utilizada para comunicação do microcontrolador com a fita LED. Nesta comunicação, o nível de tensão é 5V.
Observação: como o módulo WiFi LoRa 32(V2) não possui GPIOs tolerantes a 5V (tolera somente 3,3V), será utilizado um circuito de compatibilização de nível de sinal (voltage level shifter) entre o módulo e a fita LED na parte de comunicação.
5V: alimentação (+5V).
GND: terra
É importante ressaltar que, como este projeto utiliza apenas um LED ligado por vez (e, ainda, por pouco tempo), a corrente máxima da fonte que proverá os 5V não precisa ser alta. Para aplicações em que vários (ou até mesmo todos) os LEDs irão ficar acesos, é preciso dimensionar uma fonte capaz de suprir a corrente demandada por estes LEDs. Logo, o correto dimensionamento da fonte é um ponto de atenção quanto ao uso de fitas LED.
Fita LED no projeto: como prepará-la para o projeto?
Conforme vimos no tópico anterior, as fitas LED podem ser fragmentadas. Ou seja, podemos cortá-las de um tamanho desejado e compatível e, se for preciso, podemos emendá-las novamente. Este projeto fará utilização disso, uma vez que o alfabeto utilizado possui três linhas (a primeira, indo de A até I; a segunda, indo de J até Q; por fim, a última indo de R até Z) e iremos utilizar uma única fita LED de 1 metro (contendo 27 LEDs) para o projeto. Cada LED será correspondente a uma letra do alfabeto, de forma que o último LED da fita sobrará (ficará sem uso).
Portanto, uma vez com a fita LED do projeto (fita LED RGB de 1 metro do tipo WS2812) em mãos, siga o procedimento abaixo:
1. Toda fita LED possui um início e um fim. Normalmente, há uma seta presente durante toda a fita (em sua face frontal / face dos LEDs) que indica o sentido do primeiro para o último LED. A fita LED utilizada neste projeto possui essa marcação, logo o primeiro passo é buscar o primeiro LED da fita.
2. Encontrado o primeiro LED da fita, é preciso cortá-la com uma tesoura de modo a se obter o fragmento a ser usado na primeira linha contendo nove LEDs (de A até I). A este fragmento, será dado o nome de Linha 1.
IMPORTANTE: a fita deve ser cortada SOMENTE nas linhas verticais (indicado por uma tesoura na figura 4). Se isso for desobedecido, o funcionamento de toda a fita LED ficará comprometido.
3. Seguindo as mesmas orientações de corte da fita LED, na porção restante da fita (com 18 LEDs), corte com uma tesoura um outro fragmento contendo 8 LEDs (para as letras de J até Q). A este fragmento, será dado o nome de Linha 2.
4. A porção final da fita, com 10 LEDs não precisa ser modificada. Porém, se desejar, pode cortar com a tesoura o último LED dela, uma vez que desta porção (com 10 LEDs) serão utilizados somente 9 LEDs (para as letras de R até Z).
A este fragmento, será dado o nome de Linha 3.
5. Imprima o alfabeto Stranger Things. Você pode obtê-lo através do repositório oficial do livro no Github, no endereço http://bit.ly/2xAGPnz
6. Utilizando um estilete ou tesoura de ponta fina, corte os quadradinhos acima de cada letra. Os LEDs da fita LED ficarão sob a folha, logo os LEDs serão vistos através desses buracos na folha de papel.
7. Com um rolo de cabo flat colorido de 1 metro de comprimento (20 vias), separe dois segmentos (do comprimento total, 1m) com 3 fios cada.
Uma dica para facilitar a montagem do projeto: faça com que os dois segmentos contenham fios das mesmas 3 cores (ou seja, de modo que sejam dois segmentos com fios de sequência de cores iguais).
8. Descasque (nao mais que 0,5 cm) as pontas dos fios dos dois segmentos (de três fios cada) do cabo flat obtidos no item anterior.
Como dica, sugiro “estanhar” (depositar um pouco de estanho) as pontas descascadas, o que irá facilitar posteriormente a montagem do projeto
9. Emende, utilizando um dos segmentos do cabo flat (com 3 fios) o fim da Linha 1 com o começo da Linha 2.
IMPORTANTE: faça isso com muita atenção, de modo a não inverter nenhuma ligação ou curto-circuitar as conexões!
10. Seguindo as mesmas orientações do item anterior, emende, utilizando o outro segmento do cabo flat (com 3 fios) o fim da Linha 2 com o começo da Linha 3.
11. Vire a folha impressa com o alfabeto (já com os quadradinhos correspondentes a iluminação de cada letra conforme o item 6) e, utilizando fita adesiva transparente, cole a Linha 1 sob a linha das letras de A até I, de modo que o primeiro LED deste fragmento coincida com a letra A.
Da mesma forma, cole a Linha 2 sob a linha das letras de J até Q, de modo que o primeiro LED deste fragmento coincida com a letra Q. Por fim, também da mesma forma, cole a Linha 3 sob a linha das letras de R até Z, de modo que o primeiro LED deste fragmento coincida com a letra R.
12. Utilizando fita adesiva, elásticos ou pequenos pedaços de arames plastificados (similares aos encontrados em embalagens de pão tipo Puhlmann), junte o excedente de cabo flat entre as emendas das Linhas 1 e 2 e Linhas 2 e 3.
IMPORTANTE: preste atenção para não forçar demais / deixar muito justo de forma a curto-circuitar as conexões ou romper as soldas.
13. Coloque o papelão / isopor / plástico firme no espaço entre a folha com as fitas LED coladas e os fios.
14. Cole a folha nesta base firme de papelão / isopor / plástico utilizando fita adesiva.
Instalação das bibliotecas necessárias
Este projeto faz uso de duas bibliotecas:
- PubSubClient (biblioteca para comunicação MQTT), a qual pode ser instalada conforme mostrado no tópico “Instalação da biblioteca para comunicação MQTT” neste artigo do site.
- FastLED: biblioteca para comunicação de um dispositivo compatível com Arduino (neste caso, um módulo WiFi LoRa 32 V2) com uma fita LED RGB.
Para a instalação da biblioteca Fast LED, siga o procedimento abaixo:
1. Abra a Arduino IDE e entre no Gerenciador de Bibliotecas (Sketch > Include Library > Manage Libraries...)
2. No gerenciador de bibliotecas, digite no campo de busca a palavra “fastled” (sem aspas). A tela da figura 5 deve surgir:
3. Selecione a opção referente à biblioteca FastLED, escolha a versão mais recente da biblioteca e clique em “Instalar”
4. Aguarde a instalação ser concluída e feche o gerenciador de bibliotecas.
Feito isso, você tem todas as bibliotecas necessárias para fazer o projeto do alfabeto Stranger Things.
Circuito esquemático
O circuito esquemático do projeto pode ser visto na figura 6. O circuito montado no protoboard faz uso do módulo conversor de nível lógico 3,3-5V bidirecional. Este módulo tem como objetivo compatibilizar / converter o nível de tensão do módulo (3,3V) com o requerido pela fita LED (5V).
Código-fonte
O código-fonte do projeto está abaixo. Leia atentamente os comentários para melhor compreensão do mesmo.
Nota: o código-fonte deste exemplo e de todos os outros do livro estão também presentes no repositório Github oficial do livro: http://bit.ly/30imjEM
IMPORTANTE:
Se você quiser utilizar o módulo WRL-15006 (do fabricante SparkFun), no código fonte abaixo você deve alterar a linha:
#define DATA_PIN 13 /* GPIO do módulo que será ligado ao Data Pin */
Para:
#define DATA_PIN 23 /* GPIO do módulo que será ligado ao Data Pin */
E também instalar as bibliotecas e programar o módulo conforme orientações deste link.
#include #include #include /* Defines gerais*/ #define BAUDRATE_SERIAL_DEBUG 115200 #define SIM 1 #define NAO 0 #define OFFSET_CONVERSAO_CHAR 0x41 #define TEMPO_ACENDIMENTO_LED 500 //ms /* Defines da Fita LED */ #define NUM_LETRAS_ALFABETO 26 /* A, B, C, ... Z */ #define NUM_LEDS NUM_LETRAS_ALFABETO /* Número de LEDs do projeto */ #define DATA_PIN 13 /* GPIO do módulo que será ligado ao Data Pin */ #define LED_TYPE WS2811 /* Tipo de fita led do projeto */ #define ORDEM_DAS_CORES GRB #define COR_LEDS CRGB::Blue /* Cor que os LEDs devem ter ao acender */ #define LED_APAGADO CRGB::Black /* Defines de id mqtt e tópicos para publicação e subscribe */ #define TOPICO_SUB "MQTTStrangerThingsMsg" /* tópico MQTT de escuta */ #define ID_MQTT "StrangerThingsINCB" /* id mqtt (para identificação de sessão) */ /* IMPORTANTE: este deve ser único no broker (ou seja, se um client MQTT tentar entrar com o mesmo id de outro já conectado ao broker, o broker irá fechar a conexão de um deles). */ /* Variáveis globais */ /* Variáveis gerais */ CRGB leds_projeto[NUM_LEDS]; int ha_mensagem_a_ser_escrita = NAO; /* Mensagem a ser escrita */ String msg_a_ser_escrita = ""; /* WIFI */ const char* SSID_WIFI = " "; /* Coloque aqui o SSID_WIFI / nome da rede WI-FI que deseja se conectar */ const char* PASSWORD_WIFI = " "; /* Coloque aqui a senha da rede WI-FI que deseja se conectar */ /* MQTT */ const char* BROKER_MQTT = "broker.hivemq.com"; /* URL do broker MQTT que se deseja utilizar */ int BROKER_PORT = 1883; /* Porta do Broker MQTT */ WiFiClient espClient; /* cria o objeto espClient */ PubSubClient MQTT(espClient); /* objeto PubSubClient */ /* Prototypes */ void init_serial_debug(void); void init_wifi(void); void init_MQTT(void); void connect_wifi(void); void init_outputs(void); void mqtt_callback(char* topic, byte* payload, unsigned int length); void verifica_conexoes_wifi_e_MQTT(void); void escreve_mensagem_alfabeto(void); /* Implementações */ /* Função: inicializa comunicação serial com baudrate 115200 (para fins de monitorar no terminal serial o que está acontecendo. Parâmetros: nenhum - Retorno: nenhum */ void init_serial_debug(void) { Serial.begin(BAUDRATE_SERIAL_DEBUG); } /* Função: inicializa e conecta-se na rede WI-FI desejada - Parâmetros: nenhum - Retorno: nenhum */ void init_wifi(void) { delay(10); Serial.println("------Conexao WI-FI -----"); Serial.print("Conectando-se na rede: "); Serial.println(SSID_WIFI); Serial.println("Aguarde"); connect_wifi(); } /* Função: inicializa parâmetros de conexão MQTT(endereço do broker, porta e seta função de callback) - Parâmetros: nenhum - Retorno: nenhum */ void init_MQTT(void) { MQTT.setServer(BROKER_MQTT, BROKER_PORT); //informa qual broker e porta deve ser conectado MQTT.setCallback(mqtt_callback); //atribui função de callback (função chamada quando qualquer informação de um dos tópicos subescritos chega) } /* Função: função de callback esta função é chamada toda vez que uma informação de um dos tópicos subescritos chega) - Parâmetros: nenhum - Retorno: nenhum */ void mqtt_callback(char* topic, byte* payload, unsigned int length) { String msg_recebida; int i; /* Se o tamanho estiver dentro dos limites permitidos, obtem a string do payload recebido */ for(i = 0; i < length; i++) { char c = (char)payload[i]; msg_recebida += c; } Serial.println("Mensagem recebida: "); Serial.print(msg_recebida); /* Faz o upper case da string */ msg_recebida.toUpperCase(); msg_a_ser_escrita = msg_recebida; ha_mensagem_a_ser_escrita = SIM; } /* Função: reconecta-se ao broker MQTT (caso ainda não esteja conectado ou em caso de a conexão cair) em caso de sucesso na conexão ou reconexão, o subscribe dos tópicos é refeito. - Parâmetros: nenhum - Retorno: nenhum */ void reconnectMQTT() { while (!MQTT.connected()) { Serial.print("* Tentando se conectar ao Broker MQTT: "); Serial.println(BROKER_MQTT); if (MQTT.connect(ID_MQTT)) { Serial.println("Conectado com sucesso ao broker MQTT!"); MQTT.subscribe(TOPICO_SUB); } else { Serial.println("Falha ao reconectar no broker."); Serial.println("Havera nova tentativa de conexao em 2s"); delay(2000); } } } /* Função: reconecta-se ao WiFi Parâmetros: nenhum Retorno: nenhum */ void connect_wifi(void) { /* se já está conectado a rede WI-FI, nada é feito. Caso contrário, são efetuadas tentativas de conexão */ if (WiFi.status() == WL_CONNECTED) return; WiFi.begin(SSID_WIFI, PASSWORD_WIFI); // Conecta na rede WI-FI while (WiFi.status() != WL_CONNECTED) { delay(100); Serial.print("."); } Serial.println(); Serial.print("Conectado com sucesso na rede "); Serial.print(SSID_WIFI); Serial.println("IP obtido: "); Serial.println(WiFi.localIP()); } /* Função: verifica o estado das conexões WiFI e ao broker MQTT. Em caso de desconexão (qualquer uma das duas), a conexão é refeita. Parâmetros: nenhum Retorno: nenhum */ void verifica_conexoes_wifi_e_MQTT(void) { connect_wifi(); //se não há conexão com o WiFI, a conexão é refeita if (!MQTT.connected()) reconnectMQTT(); //se não há conexão com o Broker, a conexão é refeita } /* Função: escreve mensagem recebida no alfabeto stranger things Parâmetros: nenhum Retorno: nenhum */ void escreve_mensagem_alfabeto(void) { int i; int led_para_acender=0; char caracter_msg=0x00; for(i=0; i < msg_a_ser_escrita.length(); i++) { /* Obtem qual led da fita deve acender Ex: A: led 0; B: led 1; ... ; Z: led 25 */ caracter_msg = msg_a_ser_escrita.charAt(i); /* Qualquer caracter fora do range A..Z é ignorado */ if ( (caracter_msg < 'A') && (caracter_msg > 'Z') ) continue; led_para_acender = int(caracter_msg) - OFFSET_CONVERSAO_CHAR; leds_projeto[led_para_acender] = COR_LEDS;
FastLED.show(); delay(TEMPO_ACENDIMENTO_LED); leds_projeto[led_para_acender] = LED_APAGADO; FastLED.show(); delay(TEMPO_ACENDIMENTO_LED); } } /* Função de setup */ void setup() { /* Inicializa serial de debug / serial monitor */ init_serial_debug(); /* Inicializa wifi e MQTT */ init_wifi(); init_MQTT(); /* Inicializa biblioteca de LEDs para operar com fita led do projeto (WS2811) */ FastLED.addLeds<LED_TYPE, DATA_PIN, ORDEM_DAS_CORES>(leds_projeto, NUM_LEDS).setCorrection(TypicalLEDStrip); } void loop() { int i; /* Verifica se o wi-fi e MQTT estão conectados */ verifica_conexoes_wifi_e_MQTT(); /* Verifica se há mensagem a ser excrita. Se sim, faz a escrita no alfabeto Stranger Things */ if (ha_mensagem_a_ser_escrita == SIM) { escreve_mensagem_alfabeto(); ha_mensagem_a_ser_escrita = NAO; msg_a_ser_escrita = ""; } /* Faz o keep-alive do MQTT */ MQTT.loop(); }
Teste do projeto
Para testar o projeto, você pode utilizar um cliente MQTT qualquer (como o MQTTLens, visto neste artigo do site). Basta publicar a mensagem que deseja mostrar no alfabeto no tópico definido em TOPICO_SUB no código, lembrando que o alfabeto aceita somente letras de A a Z (quaisquer outros caracteres serão ignorados). Você não precisa se preocupar em escrever tudo em maiúsculo: o próprio código-fonte do projeto já faz o upper case (converte a mensagem automaticamente para ter todos os caracteres maiúsculos).
Veja abaixo um gif animado do projeto funcionando. A palavra escrita no alfabeto Stranger Thngs é “NOVIDADE”.
Conclusão
Neste artigo, você aprendeu a como fazer um projeto de um gadget interessante para seu local de trabalho: um alfabeto aos moldes do visto na série americana Stranger Things. Para iluminar cada letra é utilizado um LED de uma fita LED e, além disso, as mensagens a serem escritas vêm por Internet (via MQTT).
Este projeto mostra como interfacear uma fita LED - um dos artefatos mais populares no mundo maker - com o nosso já conhecido módulo WiFi LoRa 32(V2). Desta forma, além de divertido, este projeto pode servir de base para projetos maiores, seja na área de segurança (como sinalização), projetos luminotécnicos para decoração ou até mesmo nos dispositivos vestíveis (os tão falados wearables).
Para ter acesso a lista de alguns materiais deste projeto acesse https://br.mouser.com/ProjectManager/ProjectDetail.aspx?AccessID=1659746157