Índice:

Mais uma estação meteorológica inteligente, mas : 6 etapas (com fotos)
Mais uma estação meteorológica inteligente, mas : 6 etapas (com fotos)

Vídeo: Mais uma estação meteorológica inteligente, mas : 6 etapas (com fotos)

Vídeo: Mais uma estação meteorológica inteligente, mas : 6 etapas (com fotos)
Vídeo: Videoaula: A evolução das estações meteorológicas 2024, Novembro
Anonim
Image
Image
Mais uma estação meteorológica inteligente, mas …
Mais uma estação meteorológica inteligente, mas …
Mais uma estação meteorológica inteligente, mas …
Mais uma estação meteorológica inteligente, mas …
Mais uma estação meteorológica inteligente, mas …
Mais uma estação meteorológica inteligente, mas …

OK, eu sei que existem tantas estações meteorológicas disponíveis em todos os lugares, mas dedique alguns minutos para ver a diferença …

  • Baixa potência
  • 2 monitores de papel eletrônico …
  • mas 10 telas diferentes!
  • Baseado em ESP32
  • acelerômetro e sensores de temperatura / umidade
  • Atualização de wi-fi
  • Caixa impressa em 3D

e muitos outros truques úteis …

A ideia principal é exibir várias informações em ambos os visores, dependendo da orientação da caixa. A caixa tem o formato de uma caixa paralelepipédica, uma pedra de calçada, com uma espécie de cinto que serve de pé.

Suprimentos

Como você pode ver, o sistema consiste em 2 telas de e-paper e uma caixa impressa em 3D. Mas há muitas coisas nele:

  • Um ESP32
  • Um acelerômetro MPU6050
  • Um sensor DHT22
  • Uma bateria LiPo
  • Um PCB para conectar tudo
  • Tópicos duPont caseiros

e uma conexão Wi-Fi. Na verdade, três redes são declaradas, o sistema as testa uma por uma até conseguir se conectar.

Etapa 1: Por que outra estação meteorológica?

Por que outra estação meteorológica?
Por que outra estação meteorológica?
Por que outra estação meteorológica?
Por que outra estação meteorológica?
Por que outra estação meteorológica?
Por que outra estação meteorológica?
Por que outra estação meteorológica?
Por que outra estação meteorológica?

A ideia é exibir vários tipos de informações nas duas telas, dependendo da orientação da caixa. A caixa tem o formato de uma caixa paralelepipédica, uma pedra de calçada, com uma espécie de cinta que serve de suporte para a sua sustentação.

O acelerômetro detecta movimento e orientação e dispara telas.

Para economizar energia, escolhi as telas de e-paper (ver referências abaixo) que mantêm o display mesmo que não estejam mais ligadas. Da mesma forma para o ESP32, escolhi o módulo Lolin32 (conhecido por sua frugalidade) e tive que aprender a administrar o sono profundo e o despertar na interrupção gerada pelo acelerômetro.

As telas são conectadas através de SPI, procurei bastante antes de encontrar os pinos certos para conectá-las ao ESP32, sabendo que também preciso de um I2C para o acelerômetro, um pino para ler o DHT22 e outros 2 para a medição da tensão da bateria. O ESP32 está quase totalmente carregado! Sabendo que alguns pinos são somente leitura (usei aqueles para o sensor DHT), outros não podem ser usados junto com Wifi, foi um pouco complicado encontrar a configuração certa.

A caixa pode ser orientada em 4 direções, além de plana. Em suma, 4 * 2 + 2 = 10 tipos possíveis de informações a serem exibidos com apenas 2 telas. Portanto, permite que você exiba muitas coisas:

  • A data e o santo do dia
  • A hora atual
  • Previsão do tempo para hoje
  • Previsões do tempo para as próximas horas
  • Previsões do tempo para os próximos dias
  • O nível de carga da bateria
  • E como ainda tinha espaço, uma citação aleatória de um site especializado.

Etapa 2: O que você precisa?

O que você precisa ?
O que você precisa ?
O que você precisa ?
O que você precisa ?
O que você precisa ?
O que você precisa ?
  • ESP32: Módulo Lolin32 (potência muito baixa, equipado com um conector de bateria, pode carregar a bateria através de USB plus)
  • 2 ecrãs de ePaper: 4,2 polegadas e 2,9 polegadas. Escolhi os modelos da loja Good Display.
  • Sensor DHT22
  • Acelerômetro MCU6050 - sensor girômetro I2C
  • Uma bateria LiPo
  • Para medição de tensão de bateria: 2 resistores de 10k, 1 resistor de 100k, 1 capacitor 100nF, 1 transistor MOSFET
  • Solda e ferro de solda, placa de circuito impresso
  • Acesso a uma impressora 3D para o caso

A imagem anexada mostra a posição de todos os componentes na placa de circuito impresso: Tive que economizar espaço para caber na caixa, que não deve ser muito grande.

Para obter os dados meteorológicos, você também precisa se registrar nas APIs meteorológicas e colocar suas chaves nos locais corretos no arquivo 'Variables.h' (veja abaixo).

Sites de meteorologia:

  • apixu
  • accuweather

Etapa 3: Este projeto me fez pensar e aprender muito …

Este projeto me fez pensar e aprender muito …
Este projeto me fez pensar e aprender muito …
Este projeto me fez pensar e aprender muito …
Este projeto me fez pensar e aprender muito …
Este projeto me fez pensar e aprender muito …
Este projeto me fez pensar e aprender muito …

Este sistema deveria ter baixo consumo de energia, então você não precisa carregar a bateria todas as noites … Para economizar energia, escolhi as telas de papel eletrônico que mantêm o display mesmo que não estejam mais ligadas. Da mesma forma para o ESP32, escolhi o módulo Lolin32 (conhecido por sua frugalidade) e tive que aprender a administrar o sono profundo e a chamada de despertar na interrupção gerada pelo acelerômetro.

A caixa pode ser orientada em 4 direções, mais planas. Em suma, isso torna 4 * 2 + 2 = 10 possíveis tipos de informação a serem exibidos. Portanto, ele permite que você faça muitas coisas: a data e o santo do dia, a hora, a previsão do tempo para hoje, as previsões do tempo para as próximas horas ou dias, o nível de carga da bateria e uma cotação aleatória de um site especializado.

É muito o que procurar na Internet, e como você sabe: WiFi é o inimigo da economia de energia …

Portanto, temos que gerenciar a conexão, a fim de exibir informações atualizadas, mas sem perder muito tempo conectando. Outro problema bastante complexo: manter uma hora bastante precisa. Não preciso de um RTC, pois posso encontrar a hora na internet, mas o relógio interno do ESP32 oscila um pouco, principalmente durante os períodos de sono. Tive que encontrar uma maneira de ser preciso o suficiente, enquanto esperava para acertar o relógio pela internet. Eu ressincronizo na internet a cada hora.

Portanto, há uma compensação entre a autonomia (a frequência das conexões com a Internet) e a precisão das informações exibidas.

Outro problema a ser resolvido é a memória. Quando o ESP32 está em hibernação profunda, a memória é perdida, exceto a chamada RTC RAM. Esta memória tem 4 MB de largura, dos quais apenas 2 podem ser usados para o programa. Nessa memória, devo armazenar as várias variáveis do programa que devem ser mantidas de uma execução para a próxima, após uma fase de sono: previsões do tempo, hora e data, nomes de arquivos de ícones, citações, etc. Tive que aprender a lidar com isso.

Falando em ícones, eles são armazenados no SPIFFS, o sistema de arquivos ESP32. Após o encerramento da API meteorológica Wunderground gratuita, tive que procurar outros provedores de dados meteorológicos gratuitos. Selecionei dois: um para o clima do dia atual, com previsões de 12 horas, e outro para previsões de vários dias. Os ícones não são os mesmos, então isso me causou dois novos problemas:

  • Escolha um conjunto de ícones
  • Combine esses ícones com os códigos de previsão dos 2 sites

Essa correspondência também foi armazenada no RTC RAM para que não precise ser recarregada todas as vezes.

Último problema com ícones. Impossível armazenar todos eles no SPIFFS. O espaço é muito pequeno para todos os meus arquivos. Era necessário fazer compressão de imagem. Eu escrevi um script em Python que lê meus arquivos de ícone e os compacta em RLE e, em seguida, armazena os arquivos compactados em SPIFFS. Lá estava ele.

Mas a biblioteca de exibição de papel eletrônico aceita apenas arquivos do tipo BMP, não imagens compactadas. Então, eu tive que escrever uma função adicional para poder exibir meus ícones a partir desses arquivos compactados.

Os dados lidos na Internet costumam estar no formato json: dados meteorológicos, Santo do dia. Eu uso a (ótima) biblioteca arduinoJson para isso. Mas as citações não são assim. Eu os tiro de um site dedicado, então tenho que lê-los olhando diretamente para o conteúdo da página da web. Tive que escrever um código específico para isso. Todos os dias, por volta da meia-noite, o programa vai a este site e lê cerca de dez citações aleatórias e as armazena no RTC RAM. Um é exibido aleatoriamente entre eles quando a caixa está orientada para a tela grande para cima.

Passo a vocês o problema da exibição de caracteres acentuados (desculpe, mas as citações são em francês)….

Quando a pequena tela está levantada, a tensão da bateria é exibida, com um desenho para ver melhor o nível restante. Foi necessário fazer uma montagem eletrônica para ler a tensão da bateria. Como a medição não deve descarregar a bateria, usei um diagrama encontrado na internet, que usa um transistor MOSFET como chave para consumir corrente apenas quando a medição for feita.

Para poder fazer esse circuito e encaixar tudo na caixa, que eu queria do menor tamanho possível, tive que fazer uma placa de circuito impresso para conectar todos os componentes do sistema. Este é meu primeiro PCB. Tive sorte porque tudo funcionou bem da primeira vez deste lado …

Ver mapa de implantação: a "zona proibida" é uma área reservada para a conexão do cabo USB. O módulo Lolin32 permite recarregar a bateria via USB: a bateria é carregada se o cabo USB estiver conectado e o módulo funciona ao mesmo tempo.

Último ponto: as fontes. De tamanhos diferentes, em negrito ou não, eles tiveram que ser criados e armazenados. A biblioteca Adafruit GFX cuida disso muito bem, uma vez que você tenha instalado os arquivos de fontes no diretório correto. Para criar os arquivos, usei o site do Font Converter, muito prático!

Certifique-se de selecionar:

  • Tela de visualização: TFT 2,4"
  • Versão da biblioteca: Fonte Adafruit GFX

Resumindo: um grande projeto, que me permitiu aprender muitas coisas

Etapa 4: Usando monitores de papel eletrônico

Usando monitores de papel eletrônico
Usando monitores de papel eletrônico

A principal desvantagem dessas telas é claramente visível no vídeo: a atualização do display leva um ou dois segundos e é feita a piscar (exibição alternativa das versões normal e invertida das duas telas). Isso é aceitável para informações meteorológicas porque não as atualizo com muita frequência (a cada hora, exceto para uma mudança de orientação da caixa). Mas não por enquanto. É por isso (e para limitar o consumo) eu ainda uso o display HH: MM (não os segundos).

Então eu tive que procurar outra maneira de atualizar a tela. Essas telas (algumas delas) suportam uma atualização parcial (aplicada a uma área da tela ou a toda a tela …) mas não foi bom para mim porque minha tela grande (que exibe as horas) guarda fantasmas dos pixels que são substituídos. Por exemplo, ao passar de 10:12 para 10:13, o '2' fica um pouco visível dentro do '3' e fica ainda mais visível depois do '4', do '5' etc. para apontar que este é o caso da minha tela: conversei com o autor da biblioteca de exibição de papel eletrônico GxEPD2 que me disse que não observou esse fenômeno com suas próprias telas. Tentamos mudar os parâmetros sem conseguir caçar fantasmas.

Então tivemos que encontrar outra solução: propus fazer um refresco duplo parcial, que resolveu o problema (pelo menos é satisfatório para mim). As horas passam sem a tela piscando e não há fantasmas. No entanto, a mudança não é imediata: leva um pouco mais de um segundo para mudar a hora.

Etapa 5: Fazendo isso

Fazendo isto
Fazendo isto
Fazendo isto
Fazendo isto
Fazendo isto
Fazendo isto
Fazendo isto
Fazendo isto

Para garantir que nada se mova para dentro quando a orientação muda, os diferentes componentes (visores, módulos eletrônicos, PCBs, baterias) são colados com uma pistola de cola. Para passar os fios sob a placa de circuito impresso, instalei em pernas feitas com espaçadores, o mesmo vale para a bateria.

Em breve irei instalar um conector de microfone externo USB para não ter que abrir o gabinete para recarregar a bateria.

Talvez eu também esteja interessado em atualizar pela OTA para aperfeiçoar tudo….

Etapa 6: o código e os arquivos

Image
Image

Três arquivos de arquivo são fornecidos:

  • Weather station.zip: o código do Arduino, para fazer upload usando o IDE do Arduino
  • Boite ecran.zip: os arquivos CAD e 3D da impressora para o caso
  • data.zip: os arquivos a serem carregados no SPIFFS do ESP32.

Se você não sabe como fazer upload de arquivos no SPIFFS do ESP32, basta ler este tutorial, que apresenta um plugin muito útil e como usá-lo no IDE do Arduino.

A programação do sono profundo é bem diferente da programação padrão de um Arduino. Para o ESP32, significa que o ESP32 desperta e executa a configuração e, em seguida, entra em hibernação. Portanto, a função de loop está vazia e nunca é executada.

Alguma fase de inicialização deve ser executada apenas uma vez na primeira execução (como obter a hora, os dados meteorológicos, cotações, etc), então o ESP32 precisa saber se o despertar atual é o primeiro ou não: para isso, o A solução é armazenar uma variável no RTC RAM (que permanece ativa mesmo durante as fases de sono profundo) que é aumentada a cada despertar. Se for igual a 1 então é a primeira execução e o ESP32 executa a fase de inicialização, caso contrário esta fase é ignorada.

Para ativar o ESP32, existem várias possibilidades:

  • Despertar com temporizador: o código calcula a duração do sono profundo antes de ir dormir. Isso é usado para atualizar a hora (a cada 1, 2, 3 ou 5 minutos) ou os dados meteorológicos (a cada 3 ou 4 horas) das cotações e santo do dia (a cada 24 horas)
  • Interromper o despertar: o acelerômetro envia um sinal que é usado para despertar o ESP32. Isso é usado para detectar uma mudança de orientação e atualizar as telas
  • Despertar com sensor de toque: o ESP32 está equipado com vários pinos que atuam como sensores de toque, mas eles não podem ser usados com despertador com temporizador, então não usei isso.

Existem outros truques de programação em outras partes do código, para manter o tempo preciso enquanto economiza energia (ou seja, não conectar o servidor NTP a cada minuto), para remover os acentos que não são suportados pela biblioteca Adafruit GFX, para evitar atualizar um display se não é necessário definir os parâmetros do acelerômetro especialmente para interromper o despertar, calcular com precisão o tempo para dormir em caso de despertar do cronômetro, evitar usar o console serial se não estiver conectado ao IDE (para economizar energia novamente), desconectar o wi-fi quando não for necessário, etc… e o código está cheio de comentários que ajudam a entender as funções.

Obrigado por ler este Instructable (meu primeiro). Espero que gostem e gostem de fazer esta estação meteorológica

Concurso de Sensores
Concurso de Sensores

Vice-campeão no concurso de sensores

Recomendado: