Mini-estação meteorológica Arduino UNO
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
| ||||
|
Sobre este projeto
Esta é a primeira geração da minha mini estação meteorológica baseada em Arduino com conexão Wi-Fi, que é capaz de postar dados publicamente online usando a plataforma ThingSpeak.
A estação meteorológica coleta os seguintes dados relacionados ao clima e ao meio ambiente usando diferentes sensores:
- Temperatura
- Umidade
- Pressão atmosférica
- Intensidade da luz
- índice UV
- Concentração de poeira
O objetivo é fazer uma pequena e simples estação meteorológica, usando hardware aberto.
Vamos começar e nos divertir!
Componentes eletrônicos
Você não precisará de ferramentas específicas para a montagem deste projeto. Todos os componentes podem ser encontrados online em sua loja de comércio eletrônico favorita.
O circuito é alimentado pela porta USB (conectada a um computador ou carregador de telefone comum), mas você também pode adicionar uma fonte de alimentação DC externa ou uma bateria conectada ao conector de alimentação do Arduino.
Um caso para o circuito de estação meteorológica está fora do escopo deste projeto.
Conectando as peças
Conecte todos os componentes de acordo com o esquema. Você precisará de alguns fios de jumper para conectar cada sensor à placa de ensaio. Você pode usar um proto-escudo (para um circuito mais compacto), uma placa de ensaio comum ou projetar seu próprio escudo Arduino.
Conecte o cabo USB à placa Arduino Uno e prossiga para a próxima etapa.
Código
Supondo que você já tenha instalado o IDE Arduino mais recente, baixe e instale as seguintes bibliotecas:
- biblioteca DHT22
- Biblioteca Adafruit BMP085
Para obter instruções sobre como adicionar as bibliotecas ao Arduino IDE, verifique o seguinte guia do Arduino.
Baixe o código do Arduino (
weatherBox.ino
) incluído na seção de código. Substitua XXXXX
pelo SSID do seu roteador WiFi, YYYYY
pela senha do roteador e ZZZZZ
por seu canal ThingSpeak escreva a chave API (veja como obtê-la na próxima etapa). Conecte a placa Arduino à porta USB do seu computador e faça o upload do código.
Configuração ThingSpeak
- Crie uma conta ThingSpeak
- Crie um novo canal
Especifique o nome e a descrição da sua estação meteorológica. Atribua os seguintes canais e salve o canal:
- canal 1 =luz
- canal 2 =umidade
- canal 3 =temperatura (de DHT22)
- canal 4 =índice UV
- canal 5 =concentração de poeira
- canal 6 =pressão
- canal 7 =temperatura (de BMP085)
Copie a chave de escrita da API. Ele é usado na etapa anterior no código do Arduino. Quando a estação é ligada, os valores do sensor serão carregados para o canal periodicamente. Você pode configurar visualizações públicas e privadas de cada variável.
Exemplo de um canal público:https://thingspeak.com/channels/35540
Usando o aplicativo Android
Você poderá visualizar os dados da estação meteorológica em qualquer navegador. Mas você também pode verificar em seu smartphone com Android e visualizá-lo quando quiser.
- Baixe e instale o aplicativo ThingsView da Google Play Store em seu dispositivo Android
- No aplicativo, insira o número do ID do seu canal e clique em adicionar. Você encontrará o ID na configuração do canal ThingSpeak
- Os valores atuais de cada variável serão exibidos em um gráfico
Divirta-se!
Código
- weatherBox.ino
weatherBox.ino Arduino
#include#include #include #include #include #include #define SSID "XXXXX "// substitua XXXXX pelo SSID do roteador # define PASS" YYYYY "// substitua YYYYY pela senha do roteador # define IP" 184.106.153.149 "// thingspeak.com IP # define DHT22_PIN 2String GET =" GET / update? key =ZZZZZ &field1 ="; // substitua ZZZZZ por seu monitor de gravação keySoftwareSerial do canal ThingSpeak (10, 11); // Comunicação serial para o módulo ESP8266 (RX, TX) dht DHT; Adafruit_BMP085_Unified bmp =Adafruit_BMP085_Unified (10085); // Variablesint luminancePin =A0; int uvPin =A1; int dustPin =8; longa duração sem sinal; tempo de início longo sem sinal; sampletime_ms =30000; unsigned long delay_time =60000; unsigned long lowpulseoccupancy =0; float ratio =0; float concentração =0; // setupvoid setup () {// iniciar comunicações seriais Serial.begin (9600); monitor.begin (9600); Serial.println ("Inicializando ..."); // configura os pinos do Arduino pinMode (dustPin, INPUT); // inicializa o sensor de pressão Serial.println ("Detecção do sensor de pressão BMP085 ..."); if (! bmp.begin ()) {Serial.println ("O sensor BMP085 não foi detectado. Verifique suas conexões ou ADDR I2C!"); enquanto (1); } Serial.println ("BMP085 detectado!"); // comunicação com módulo wi-fi monitor.flush (); monitor.println ("AT"); atraso (2000); if (monitor.find ("OK")) {Serial.println ("Comunicação com módulo ESP8266:OK"); } else {Serial.println ("ERRO do módulo ESP8266"); } // conectar roteador wi-fi connectWiFi (); Serial.print ("Amostragem ("); Serial.print (sampletime_ms / 1000); Serial.println ("s) ..."); // inicializa o temporizador starttime =millis ();} void loop () {// medindo a duração das partículas de poeira =pulseIn (dustPin, LOW); ocupação de pulso baixa =ocupação de pulso baixa + duração; // ciclo de 30 segundos if ((millis () - starttime)> =sampletime_ms) {ratio =lowpulseoccupancy / (sampletime_ms * 10.0); // porcentagem (de 0 a 100%) concentração =1,1 * pow (proporção, 3) -3,8 * pow (proporção, 2) + 520 * proporção + 0,62; // da planilha de dados lowpulseoccupancy =0; // lê outros sensores char buffer [10]; // sensor de luz float luminance =analogRead (luminancePin); // Sensor UV float uv =analogRead (uvPin); uv =uv * 0,0049; // converter valores em volts uv =uv * 307; // converter para mW / m² uv =uv / 200; // calcula o índice de UV // temperatura e umidade int chk =DHT.read22 (DHT22_PIN); umidade flutuante =DHT.umidade; temperatura flutuante =DHT.temperatura; // pressão e temperatura1 sensores_event_t evento; bmp.getEvent (&event); pressão flutuante =0; temperatura flutuante1 =0; if (event.pressure) {pressure =event.pressure; bmp.getTemperature (&temperature1); } // converte os valores do sensor em strings String luminanceStr =dtostrf (luminance, 4, 1, buffer); luminanceStr.replace ("", ""); String uvStr =dtostrf (uv, 4, 1, buffer); uvStr.replace ("", ""); String umidadeStr =dtostrf (umidade, 4, 1, buffer); umidadeStr.replace ("", ""); String temperaturaStr =dtostrf (temperatura, 4, 1, buffer); temperaturaStr.replace ("", ""); String dustStr =dtostrf (concentração, 4, 1, tampão); dustStr.replace ("", ""); String pressureStr =dtostrf (pressão, 4, 1, buffer); pressureStr.replace ("", ""); String temperatura1Str =dtostrf (temperatura1, 4, 1, buffer); temperatura1Str.replace ("", ""); // envia dados para ThingSpeak updateSensors (luminanceStr, moistStr, temperatureStr, uvStr, dustStr, pressureStr, temperature1Str); // espera o próximo ciclo de amostragem Serial.print ("Wait"); Serial.print (delay_time / 1000); Serial.println ("s para a próxima amostragem"); Serial.println (); atraso (atraso_tempo); // inicializa o novo ciclo Serial.println (); Serial.print ("Amostragem ("); Serial.print (sampletime_ms / 1000); Serial.println ("s) ..."); hora de início =milis (); }} // Enviar dados para ThingSpeakvoid updateSensors (String luminanceStr, String umidadeStr, String temperatureStr, String uvStr, String dustStr, String pressureStr, String temperature1Str) {String cmd ="AT + CIPSTART =\" TCP \ ", \" "; cmd + =IP; cmd + ="\", 80 "; monitor.println (cmd); atraso (2000); cmd =GET; cmd + =luminanceStr; cmd + ="&field2 ="; cmd + =umidadeStr; cmd + ="&field3 ="; cmd + =temperaturaStr; cmd + ="&field4 ="; cmd + =uvStr; cmd + ="&field5 ="; cmd + =dustStr; cmd + ="&field6 ="; cmd + =pressãoStr; cmd + ="&field7 ="; cmd + =temperatura1Str; cmd + ="\ r \ n"; atraso (1000); int strsize =cmd.length (); monitor.println ("AT + CIPSEND =" + String (strsize)); atraso (2000); monitor.print (cmd); if (monitor.find ("OK")) {Serial.println ("Transmissão concluída com sucesso"); } else {Serial.println ("Falha na transmissão!"); }} void sendDebug (String cmd) {Serial.print ("ENVIAR:"); Serial.println (cmd); monitor.println (cmd);} boolean connectWiFi () {Serial.println ("Conectando wi-fi ..."); String cmd ="AT + CWMODE =1"; monitor.println (cmd); atraso (2000); monitor.flush (); // limpar buffer cmd ="AT + CWJAP =\" "; cmd + =SSID; cmd + =" \ ", \" "; cmd + =PASS; cmd + =" \ ""; monitor.println (cmd); atraso (5000); if (monitor.find ("OK")) {Serial.println ("Conexão bem-sucedida!"); return true; } else {Serial.println ("Falha na conexão!"); retorna falso; } Serial.println ();}
Github
https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-libraryGithub
https://github.com/adafruit/Adafruit-BMP085-Libraryhttps://github.com/adafruit/Adafruit-BMP085-LibraryProcesso de manufatura
- Estação meteorológica Raspberry Pi
- Sistema de detecção de humanos usando Arduino Uno
- Monitoramento de CO2 com Sensor K30
- Qual é sua altura?
- WebServerBlink usando Arduino Uno WiFi
- Calculadora UNO simples
- Arduino Cloud Sensor Tower
- Persistência da visão
- Estação meteorológica local
- Estação de Monitoramento de Saúde