Índice:

Estação meteorológica local: 8 etapas (com fotos)
Estação meteorológica local: 8 etapas (com fotos)

Vídeo: Estação meteorológica local: 8 etapas (com fotos)

Vídeo: Estação meteorológica local: 8 etapas (com fotos)
Vídeo: Previsão do Tempo – Ciências – 8º ano – Ensino Fundamental 2024, Julho
Anonim
Estação meteorológica local
Estação meteorológica local

Como eu estava procurando por um grande projeto para fazer para o meu projeto de escola do primeiro ano, eu tinha muitas idéias do que fazer, mas nenhuma delas eu achei desafiadora.

Mais tarde pensei em fazer uma Estação Meteorológica que tivesse algo especial. Eu queria ser capaz de armazenar todos os meus dados e depois usar isso para estatísticas. Este projeto seria feito especialmente para pessoas que têm interesse em meteorologia e querem uma estação meteorológica feita em casa e que não custe tanto quanto as disponíveis no mercado. O projeto também é feito para manter a capacidade de adicionar ou remover sensores a qualquer momento.

Fiquei muito feliz quando vi meu resultado final, que saiu melhor do que o esperado.

É feito de um Linux Raspberry Pi 4 rodando.

  • Site do Apache (html css js)
  • Eventlet (site do servidor de backend)
  • MariaDB (servidor de banco de dados)

Suprimentos

  • Raspberry Pi 4:

    cartão SD (min 16gb)

  • Sensores:

    1. Sensor de velocidade do vento QS-FS
    2. Sensor de vento Saída de sinal de jardim Liga de alumínio Sensor de direção do vento Instrumento de medição de velocidade do cata-vento https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminum-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Measuring-Instrument-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (umidade)
    4. BMP280 (pressão do ar)
    5. DS18B20 (temperatura)
  • Fonte de alimentação

    • Fonte de alimentação 5v (RPi)
    • Fonte de alimentação 9v (em uma fonte de alimentação externa da placa de ensaio)
  • Placa de ensaio (x2)

    T-cobbler plus para RPi 4

  • fios de ligação
  • IC's

    • MCP3008
    • PCF8574AN
  • Display LCD 16x2
  • LED (vermelho
  • Invólucro (opcional)

    • engradados de vinho
    • poste de madeira (2m)
    • prancha de madeira (1m)

Etapa 1: Preparando as coisas

É sempre muito importante obter todos os itens necessários antes de começar a trabalhar em uma etapa. Isso vai economizar muito tempo enquanto você trabalha com ele.

Então, primeiro, O que você precisa:

  • Raspberry Pi 4:

    cartão SD (min 16gb)

  • Sensores:

    1. Sensor de velocidade do vento QS-FS
    2. Sensor de vento Saída de sinal de jardim Liga de alumínio Sensor de direção do vento Instrumento de medição de velocidade do cata-vento
    3. DHT22 (umidade)
    4. BMP280 (pressão do ar)
    5. DS18B20 (temperatura)
  • Fonte de alimentação

    • Fonte de alimentação 5v (RPi)
    • Fonte de alimentação 9v (em uma fonte de alimentação externa da placa de ensaio)
  • Placa de ensaio (x2)
  • T-cobbler plus para RPi 4
  • fios de ligação
  • IC's

    • MCP3008
    • PCF8574AN
  • Display LCD 16x2
  • LED (vermelho)
  • Invólucro (opcional)

    • engradado de vinho
    • prancha de madeira (1m)
    • poste (2m)

Você pode encontrar todos os links onde comprei na seção de suprimentos abaixo da introdução.

Etapa 2: Configurando o RPi

Configurando o RPi
Configurando o RPi

Para o nosso projeto, precisamos de um RPi com o software fornecido instalado.

  • Site do Apache (html css js)
  • Flask Socket-IO (site do servidor de back-end)
  • MariaDB (servidor de banco de dados)

Antes de instalar, é sempre útil verificar se você possui o software mais recente instalado em seu RPi. Para fazer isso, basta executar o seguinte comando:

atualização do apt sudo

Apache:

Primeiro, vamos falar sobre o Apache. Apache é um servidor web usado em todo o mundo. Ele executa seu site na perfeição. A única coisa que você precisa fazer é instalá-lo, colocar seu site na pasta certa e pronto.

sudo apt install apache2 -y

É isso!

Para ter certeza de que tudo está instalado corretamente, navegue até o endereço IP do raspberry pi em seu navegador e veja se obtém o site padrão. Se você tiver algum problema com relação a esta etapa, pode verificar o site do RPi aqui.

Eventlet:

Agora vamos instalar o Eventlet. Ele executará nosso servidor de back-end e fará a conexão de nossos sensores ao nosso site. Para isso, precisamos de alguns pacotes.

Flask-socketIO:

pip3 instalar flask-socketio

Eventlet:

pip3 install eventlet

Gevent:

pip3 instalar gevent

Mariadb:

Mariadb é um banco de dados baseado em MySQL que faz bancos de dados relacionais. É muito usado no RPi e, portanto, há muita ajuda que você pode encontrar na internet. Para mais informações, você pode acessar este link.

apt install mariadb-server

Etapa 3: Conectando Sensores e Adicionando Código

Conectando Sensores e Adicionando Código
Conectando Sensores e Adicionando Código
Conectando Sensores e Adicionando Código
Conectando Sensores e Adicionando Código
Conectando Sensores e Adicionando Código
Conectando Sensores e Adicionando Código

Para conectar os sensores ao nosso RPi, podemos usar um T-Cobbler plus. Esta é uma pequena ferramenta útil que torna possível usar todos os seus pinos em seu RPi em uma placa de ensaio.

No meu projeto, tenho 5 sensores:

  1. Sensor de velocidade do vento QS-FS
  2. Sensor de vento Saída de sinal de jardim Liga de alumínio Sensor de direção do vento Instrumento de medição de velocidade do cata-vento
  3. DHT22 (umidade)
  4. BMP280 (pressão do ar)
  5. DS18B20 (temperatura)

Sensor de velocidade do vento:

Em primeiro lugar, comecei com o sensor de velocidade do vento porque estava mais animado com ele. É um sensor com sinal analógico de saída 0-5v e precisa de uma tensão mínima de 7 volts para funcionar. Eu escolhi o adaptador de 9 volts para alimentá-lo.

Para ler neste sensor usei um MCP3008 que é um IC para ler sinais analógicos. O IC pode funcionar com 3,3 V ou 5 V, mas escolhi 3,3 V para torná-lo compatível com o RPi. Isso significava que eu precisava mudar a tensão de saída de 5 V para 3,3 V. Fiz isso adicionando um divisor de tensão criado por 2 resistores (2k e 1k ohm).

Sensor de direção do vento:

A direção do vento é tão importante quanto a velocidade do vento, portanto, conectarei isso a seguir.

Este sensor possui as mesmas especificações do sensor de velocidade do vento. Ele também funcionará com 9 V e tem uma tensão de saída de 5 volts. Além disso, conectaremos esse sensor ao MCP3008 por meio de um divisor de tensão.

DHT22 (umidade):

O DHT22 lê a umidade. Ele fornece um valor em porcentagem e seu valor pode ser lido usando o protocolo I2C no RPi. Portanto, você deve habilitar as portas I2C no Raspi-config. Mais informações aqui.

BMP280 (pressão do ar):

O BMP280 é usado para ler a pressão do ar. Seu valor é lido por meio do barramento SPI no RPi. Este protocolo também precisa ser habilitado no Raspi-config. Para o meu código, usei a biblioteca Adafruit.

DS18B20 (temperatura):

O último sensor mede a temperatura. este sensor é de Dallas e se você já teve alguma experiência com Dallas, provavelmente já deve saber que eles usam o barramento 1Wire. Não se surpreenda se eu disser que este protocolo também precisa ser habilitado no Raspi-config.

Como conectei os sensores:

Como pdf eu carreguei um esquema elétrico e protoboard para tornar um pouco mais fácil.

Depois de conseguir conectar os sensores com sucesso e adicionar o código necessário para ler todos os sensores, você pode prosseguir e ir para a próxima etapa. Se você quiser deixar um sensor para trás ou quiser adicionar mais, pode fazê-lo.

Etapa 4: projetando uma interface do usuário da web

Projetando uma interface do usuário da web
Projetando uma interface do usuário da web
Projetando uma interface do usuário da web
Projetando uma interface do usuário da web
Projetando uma interface do usuário da web
Projetando uma interface do usuário da web

Agora que conectamos os sensores, precisamos de um design para nosso site.

Queremos que o site crie uma aparência fácil enquanto exibe todos os dados em tempo real dos sensores.

Também queremos ser capazes de ver o histórico desses valores medidos por intervalo de tempo.

Então, primeiro comecei a procurar na web um pouco de inspiração. Acima de tudo, eram apenas sites de informações maiores, sem realmente o design que eu procurava. As estações meteorológicas que já estavam no mercado provavelmente tinham um display. E dessa exibição veio minha inspiração. A maioria dos monitores tem um design com aparência de grade. Isso me deu a ideia de criar a página inicial onde todos os sensores seriam exibidos.

Mas, também disse que queria fazer uma página onde você pudesse ver o histórico de cada sensor e seus valores.

Por esse motivo também fiz uma 2ª página no meu design contendo isso. Nesta página pude ver algumas informações extras sobre o meu sensor que não seriam mostradas na minha página inicial e, fora do curso, na parte do histórico.

Depois de algumas horas, eu tinha todo o meu design elaborado!

O design foi feito em Adobe XD.

Etapa 5: Criação de banco de dados

Criando Banco de Dados
Criando Banco de Dados

Para interromper a parte de design, comecei no meu banco de dados.

Este banco de dados conteria todos os sensores (5), todos os atuadores (2) e os valores que esses sensores tinham.

O banco de dados é bastante fácil e possui poucas relações.

Você pode ver o modelo do banco de dados na foto.

Etapa 6: Codificando o site: front-end (html Css)

De volta ao site!

Agora que tenho um design, posso começar a codificá-lo como css html para realmente usá-lo.

Na página inicial:

Comecei considerando cada sensor como um elemento do meu site. Para que mais tarde eu pudesse deixar essa parte gerar pelo meu código Javascript.

Eu também inseri classes aleatórias de detentores de JS nos elementos. Isso tornaria possível alterar o conteúdo desse elemento

Isso me levou muito tempo porque eu não sou muito bom neste idioma em particular.

Depois de fazer a página inicial, era hora de começar na página de histórico.

Na página de história:

Esta página foi um pouco mais fácil de recriar. Nesta página também havia js-holder para obter as informações sobre o sensor, um slot de valor em tempo real e exibir a tabela com todos os valores medidos.

Para criar uma opção de guia em meu site para escolher entre Tabela ou Gráfico, tive que adicionar um pouco de Javascript para fazer com que os elementos não fossem exibidos ou fossem exibidos.

Agora temos um site incrível, mas não podemos mostrar nada nele? Vamos consertar isso.

Você pode encontrar meu código no meu repositório github:

Etapa 7: Codificando o site: Back-end (eventlet) + Coding Frontend (javascript)

Processo interno:

Embora o servidor de back-end já esteja instalado, ainda precisamos implementar isso em nosso projeto. Primeiro, precisamos adicionar algumas importações para fazer tudo funcionar corretamente.

from flask import Flask, request, jsonify from flask_socketio import SocketIO from flask_cors import CORS

Para fazer o servidor inicializar, precisamos adicionar o seguinte:

socketio.run (app, debug = False, host = '0.0.0.0')

Agora o servidor está online, mas não será capaz de falar com o frontend.

Não recebe nem devolve nada. Vamos mudar isso.

Para solicitar todos os sensores no banco de dados, vamos adicionar uma rota:

@ app.route (endpoint + '/ sensores', methods = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () return jsonify (sensores = s), 200

Este código usa uma classe chamada DataRepository e fala com o banco de dados. Aqui, ele nos devolve os sensores que solicitamos.

Também precisamos de uma rota para pedir as informações sobre 1 sensor específico e outro para os valores de um determinado sensor.

Todas essas são rotas, mas para tornar os dados em tempo real possíveis. Precisamos enviar a cada intervalo os dados que os sensores acabaram de ler. Para fazer isso, usamos a conexão Socket-IO. É uma conexão estabelecida a partir do momento que alguém carrega o site com JS e mantém essa conexão aberta. Esta é uma conexão full-duplex, o que significa que é uma conexão que funciona nos dois sentidos (envio e recebimento) ao mesmo tempo. Para usar isso, precisamos adicionar o seguinte código.

@ socketio.on ('conectar') def initial_connection (): print ('Um novo cliente conectar') socketio.send ("U bent geconnecteerd") # # Envie para o cliente!

Essa parte do código é executada quando um cliente se conecta.

Para obter qualquer mensagem do front-end, você pode usar este código.

@ socketio.on ('mensagem') def message_recieved (): pass

Você também pode enviar mensagens. Isso é feito da seguinte maneira.

socketio.emit ('Update_RTD', dict_results, broadcast = True)

O primeiro argumento fornecido pode ser qualquer coisa que você quiser, mas corresponderá ao que você colocou em seu JS e você também pode enviar objetos com ele. Isso é opcional.

Javascript:

É importante adicionar um pouco de JS para conectar o servidor ao servidor de back-end para poder exibir os dados atuais e obter informações do banco de dados.

Chamaremos as funções socketIO que criamos para receber e enviar dados.

Quando recebemos dados como um objeto Json, iremos desmontá-los para obter as informações que desejamos e, em seguida, colocá-los nos suportes JS que colocamos em nosso site.

Você pode encontrar meu código no meu repositório github:

Etapa 8: Fazendo um revestimento

Fazendo um Invólucro
Fazendo um Invólucro
Fazendo um Invólucro
Fazendo um Invólucro
Fazendo um Invólucro
Fazendo um Invólucro
Fazendo um Invólucro
Fazendo um Invólucro

O revestimento deu muito trabalho e pode ser feito da maneira que você quiser. É assim que eu fiz.

Peguei alguns engradados de vinho.

Um deles eu usei como a caixa para conter meu RPi e a maioria dos meus sensores.

O sensor de velocidade do vento e o sensor de direção do vento, é claro, não foram colocados dentro, mas em cima de uma barra transversal colocada em um poste. Neste poste pendurei aquela caixa de vinho onde também fiz uma porta para.

Você pode ver como terminei meu projeto olhando as fotos.

Este é, obviamente, um exemplo de como você pode fazer isso. Você pode fazer o que quiser com ele.

Recomendado: