Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Este projeto começou como um despertador para meu filho. Fiz para parecer o circuito do tempo de Volta para o Futuro. O display pode mostrar a hora em vários formatos, incluindo o dos filmes, é claro. É configurável por meio dos botões na parte superior do gabinete, mas também por meio de uma página da web servida pelo Raspberry Pi Zero dentro. Em um dos modos de exibição, ele mostrará o clima local (da minha estação meteorológica com Arduino), bem como a previsão e quaisquer lembretes diários, configurados por meio da interface da web. Também possui áudio graças a um DAC e fará streaming de música usando o protocolo AirPlay. O som do alarme pode ser qualquer arquivo de áudio que você escolher. O visor escurecerá e aumentará o brilho automaticamente em determinados momentos do dia (por exemplo, amanhecer e anoitecer).
Etapa 1: Plano de fundo
No ano passado, eu estava procurando um novo projeto Arduino, tendo acabado de terminar meu primeiro, uma estação meteorológica doméstica. Meu filho de 11 anos tinha acabado de assistir aos filmes De Volta para o Futuro pela primeira vez, então achei que seria divertido construir para ele um despertador que se parecesse com o circuito do tempo do Delorean para seu aniversário. Esta não é uma ideia nova, existem alguns projetos semelhantes por aí (este, por exemplo), então achei que seria um bom projeto aprender com os outros e adquirir algumas novas habilidades.
A primeira versão funcionou muito bem (não estava pronta para o aniversário dele: eu a fiz no Natal), mas fiquei bastante ambicioso no que queria fazer e descobri que meu esboço continuava atingindo o limite de memória do Arduino. Eu também tinha vários pequenos módulos de hardware externos (WiFi, MP3 player, amplificador de áudio, RTC etc), então tudo estava ficando um pouco pesado. No final, decidi mudar para uma plataforma Raspberry Pi que simplificou o hardware e me permitiu incluir muito mais funcionalidades e recursos.
Etapa 2: Componentes principais de hardware
Dentro da caixa
Aqui estão os componentes eletrônicos que usei. A maioria deles eram fontes da Core Electronics na Austrália, mas é claro que eles estão prontamente disponíveis em outros lugares também:
- 4 x visor alfanumérico quádruplo - verde-amarelo
- Raspberry Pi Zero W
- Pimoroni pHAT DAC para Raspberry Pi Zero
- Amp de áudio (PAM8403 IC)
- Fonte de alimentação Raspberry Pi 3+
- 4 x fio de jumper - 0,1 ", 5 pinos, 12"
- Cabo de fita de 40 pinos (2 x 20)
- Raspberry Pi GPIO Masculino Cabeçalho
- Raspberry Pi Modelo B - Cabeçalho envolto em GPIO (2X20)
- Cabeçalho de empilhamento GPIO para Pi A + / B + / PI 2 / PI 3 - extra longo 2X20
- Cabeçalho macho de 4 x 5 pinos
- 2 alto-falantes pequenos de 3 W
- 2 cabos coaxiais para conexão de áudio analógico DAC para Amp
- Veraboard ou PCB personalizado para lidar com Rpi para um amplificador, LED, botões
- 5 x interruptores de botão momentâneos
- 4 blocos de terminais de parafuso montáveis em PCB de 2 vias
A Caixa
- Pedaços e pedaços de MDF, parafusos e porcas para fazer o 'chassis'
- Perspex tingido de verde, fornecedor local
- Estireno, cola de modelagem, tinta spray (cor de alumínio) de uma loja local de passatempo
-
Adesivos (arquivo disponível a pedido - impresso por Redbubble)
Etapa 3: juntando tudo
O display LED para o relógio consiste em displays alfanuméricos de 16x14 segmentos, felizmente o mesmo número de caracteres que o circuito de tempo de Volta para o Futuro. Embora apenas os três primeiros caracteres precisem ser alfanuméricos e o resto possam ser monitores numéricos de 7 segmentos para emular o adereço do filme, decidi torná-los todos alfanuméricos para permitir alguma flexibilidade no que poderia ser exibido e para mantê-los todos parecendo mesmo. As mochilas quádruplas Adafruit são uma ótima solução aqui e podem ser executadas no barramento I2C do Raspberry Pi. Mais informações sobre essas unidades e como conectá-las podem ser encontradas aqui no site da Adafruit. A única coisa um pouco fora do padrão que tive que fazer foi mudar o endereço de três deles para que cada mochila fosse única.
Para reproduzir áudio (em estéreo), incluí o Pimoroni pHAT DAC e um amplificador de áudio estéreo 2 x 3W baseado no chip PAM8403. O pHAT DAC é realmente fácil de conectar ao Pi. Coloquei um conector macho de 2 x 20 pinos no Pi e um cabeçalho de empilhamento GPIO no DAC para que eles pudessem ser conectados um ao outro. Os pinos de cabeçalho machos passam pela parte superior do DAC, permitindo-me passar um cabo de fita com conectores fêmeas, inicialmente para um breakout do Raspberry Pi para teste de protoboard, mas, em última análise, para um cabeçalho envolto em um PCB feito sob medida.
Para o amplificador de áudio, existem várias opções (incluindo apenas obter o chip e montar o seu próprio). Este tem a opção de silenciar a saída apenas alterando o estado de um dos pinos (alto está ligado, baixo está desligado) e eu o conectei para que isso pudesse ser controlado a partir do Pi. Em minhas tentativas iniciais de conectar isso, descobri muitos ruídos de fundo quando o áudio estava ligado. Depois de muito brincar com o aterramento, finalmente tentei mover a tensão de alimentação de entrada de 5 V do Pi para 3,3 V e isso consertou. Eu acho que há muito ruído gerado pelos vários sinais digitais voando ao redor, mas parece que a alimentação de 3,3 V está de alguma forma isolada.
Outras conexões incluem o áudio analógico do DAC para o amplificador (usei um cabo coaxial aqui para ajudar a gerenciar a captação de ruído) e a saída de áudio para um par de pequenos alto-falantes de 3W que cabem no gabinete. Existem também conexões GPIO para os quatro interruptores momentâneos na parte superior da caixa e eu conectei um botão momentâneo aos pinos de reinicialização "RUN" (consulte a seção Conexões adicionais nesta página). O botão de reinicialização está montado fora da vista na parte traseira do gabinete. Aqui está um diagrama mostrando as conexões:
Etapa 4: um PCB personalizado
Embora não haja nada muito complicado no circuito, há um pouco de fiação e uma placa de ensaio pode parecer espaguete muito rapidamente. Portanto, projetei um PCB para manter tudo sob controle. É uma prancha caseira de um lado e tenho um amigo para me ajudar a prepará-la. Depois que foi feito e conectado, percebi que esqueci de incluir as conexões para os blocos de terminais do áudio e mais tarde fiz uma alteração para mover a fonte do amplificador de áudio de 5V para 3,3V, então não é o ideal e tive que adicionar algum Veroboard para permitir as conexões de áudio. Além disso, as pinagens da placa do amplificador de áudio estão em uma separação fora do padrão (eles variam até mesmo entre os pinos), então a conexão para o PCB principal é um pouco horrível com 11 fios de conexão curtos de ~ 1 cm.
Se eu fizesse outra placa, incluiria todas essas modificações e também mudaria o conector dos quatro botões para algo um pouco melhor. O DAC e o Pi seriam empilhados em cima, de forma que nenhum cabo plano seria necessário. O diagrama acima mostra como pode ser.
Etapa 5: o gabinete
Eu queria fazer um recinto que se parecesse com uma linha do circuito do tempo do filme. Três filas de telas de LED seriam demais para um despertador e aumentariam significativamente o custo. Pensei em fazer o invólucro de alumínio, mas não tenho nenhuma habilidade nessa área. Eu fiz alguns modelos de plástico na minha vida, porém, e tenho alguma experiência em carpintaria, então decidi fazer uma moldura usando MDF para montar os LEDs e alto-falantes e fixar o perspex na frente, em seguida, cubra-o com um estireno de 5 lados Caixa com moldura frontal pintada com tinta spray metálica de alumínio. O plástico e a tinta foram obtidos em uma loja de modelos local. Dei uma olhada nas etiquetas do adereço do filme e fiz o meu melhor para copiar as cores, tipo de fonte e tamanho. Usei o Photoshop para construir as etiquetas e as imprimi como adesivos da Redbubble.
As imagens acima mostram:
- A parte frontal do chassi de MDF. As mochilas com 4 LEDs são montadas na frente com perspex tingido de verde
- Dentro da caixa. Mochilas todas montadas e alinhadas, Raspberry Pi e PCB personalizado, alto-falantes de cada lado.
- Fiação instalada e casca externa pronta para continuar. Foi um pouco apertado!
Etapa 6: Configurando o Raspberry Pi
Tive alguns problemas de compatibilidade com o Raspbian Stretch (que poderiam ser resolvidos se eu tivesse persistido), mas Jessie funciona bem com ele, então decidi continuar.
Eu configurei o Pi como uma unidade sem cabeça com acesso VNC e SSH. Isso poderia ter sido feito sem nunca conectar um teclado ou monitor, mas eu apenas peguei emprestado a TV e remexi em um teclado, e o deixei sem cabeça muito rapidamente. Daí em diante, eu praticamente usei o VNC a partir de então.
Meu código de relógio usa Python 2.7.9 e depende de algumas bibliotecas, listadas abaixo. Além disso, estou executando um servidor da web Flask e MQTT para controle remoto e Shairplay para streaming de música. Eu apenas segui as notas de instalação on-line para tudo isso e não tive nenhum problema. Aqui estão as bibliotecas Python e outros pacotes etc. que precisei instalar com links para notas de instalação ou apenas o comando que você precisa executar para obtê-lo:
Bibliotecas Python
- Adafruit_LED_Backpack
- Rpi. GPIO (apt-get install python-rpi.gpio)
- alsaaudio
- paho.mqtt.client (pip install paho-mqtt)
- flask (apt-get install python-flask)
Outros pacotes etc
- mosquito (apt-get install mosquito)
- Shairport
- O site da Pimoroni tem uma boa documentação sobre como configurar o DAC, então acabei de executá-la.
Etapa 7: Software
O código do relógio foi escrito em Python e usa threading para reproduzir o alarme e bips ocasionais em segundo plano sem bloquear as atualizações de exibição. Usei a biblioteca ConfigParser e o arquivo de configuração que ela mantém é lido e escrito pelo código do relógio, bem como o aplicativo da web Flask, de forma que sempre que a configuração for alterada por meio da interface da web ou do relógio, ele seja sincronizado. O software do relógio também inclui um intermediário MQTT para permitir o controle do modo de exibição e o silenciamento sejam controlados remotamente. Meu motivo ulterior é, eventualmente, escrever um aplicativo iOS para o controle remoto, mas a interface da web funciona bem o suficiente por agora.
A primeira imagem acima mostra a aparência do relógio em seus vários modos de exibição, e há um breve vídeo mostrando-o no modo de rolagem.
Embora o código não seja bonito de se ver, ele é bom e estável. Fico feliz em enviar para quem solicitar e colocarei online quando estiver mais bem organizado e comentado.
O aplicativo da web
A próxima imagem mostra como é a interface da web para o relógio. Existem também páginas de configuração e de controle, que tornam muito mais fácil jogar com o relógio sem muito barulho de botões:-).
Etapa 8: O que vem a seguir?
Há um decodificador de metadados Python shareport disponível, então acho que vou adicionar algum código para exibir informações como título e artista quando a música estiver sendo tocada. Também seria muito fácil calcular as horas do nascer e do pôr do sol, de forma que a tela possa ser automaticamente iluminada e escurecida, em vez de configurá-la manualmente. Talvez adicionar um recurso de rádio pela Internet também seja divertido. A exibição de rolagem também pode ser mais configurável.