Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT

Componentes e Materiais

Componente Quantidade
Arduino UNO 1
Espressif ESP8266 ESP-01 1
Arduino Proto Shield (ou protoboard comum) 1
Sensor de Temperatura DHT22 1
Seeed Grove - Sensor de Luz 1
Seeed Grove - Sensor UV 1
Seeed Grove - Sensor Barômetro 1
Seeed Grove - Sensor de Poeira 1
Resistor 1k ohm 2
Resistor 10k ohm 1
Resistor 4,75k ohm 1
Jumpers (genéricos) 1 conjunto

Aplicativos e Serviços Online

Sobre o Projeto

Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT

Esta é a primeira geração da minha mini-estação meteorológica baseada em Arduino com conexão Wi-Fi, capaz de postar dados publicamente online usando a plataforma ThingSpeak.

A estação meteorológica coleta os seguintes dados relacionados ao clima e ambiente usando diferentes sensores:

O objetivo é fazer uma estação meteorológica pequena e simples, usando hardware aberto.

Vamos começar e nos divertir!

Componentes Eletrônicos

Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT
Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT
Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT
Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT
Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT
Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT
Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT

Você não precisará de ferramentas específicas para a montagem. Todos os componentes podem ser encontrados online na sua loja de e-commerce favorita.

O circuito é alimentado pela porta USB (conectada a computador ou carregador de celular comum), mas você também pode adicionar fonte DC externa ou bateria conectada ao conector de alimentação do Arduino.

Um gabinete para o circuito da estação meteorológica está fora do escopo deste projeto.

Conectando as Peças

Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT
Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT

Conecte todos os componentes conforme o esquemático. Você precisará de alguns jumpers para conectar cada sensor à protoboard. Pode usar um protoshield (para circuito mais compacto), uma protoboard comum, ou projetar seu próprio shield Arduino.

Conecte o cabo USB ao Arduino Uno e prossiga para o próximo passo.

Código

Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT

Assumindo que você já instalou o Arduino IDE mais recente, baixe e instale as seguintes bibliotecas:

Para instruções de como adicionar bibliotecas ao Arduino IDE, verifique o guia do Arduino.

Baixe o código 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 pela chave de escrita da API do seu canal ThingSpeak (veja como obter no próximo passo).

Conecte a placa Arduino à porta USB do computador e faça upload do código.

Configuração do ThingSpeak

Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT
Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT
Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT
Mini Estação Meteorológica Arduino UNO – Hub de Sensores DIY com ESP8266 IoT

Especifique o nome e descrição da sua estação meteorológica. Atribua os seguintes canais e salve:

Copie a chave de escrita da API. É usada no passo anterior no código Arduino. Quando a estação ligar, os valores dos sensores serão enviados ao canal periodicamente. Você pode configurar visualizações públicas e privadas de cada variável.

Exemplo de canal público: https://thingspeak.com/channels/35540

Usando App Android

Você poderá visualizar dados da estação meteorológica em qualquer navegador. Mas também pode verificar no seu smartphone Android e visualizar quando quiser.

Divirta-se!

Código

weatherBox.ino
#include <stdlib.h>
#include <SoftwareSerial.h>
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>

#define SSID "XXXXX" // substitua XXXXX pelo SSID do seu roteador
#define PASS "YYYYY" // substitua YYYYY pela senha do seu roteador
#define IP "184.106.153.149" // IP do thingspeak.com
#define DHT22_PIN 2

String GET = "GET /update?key=ZZZZZ&field1="; // substitua ZZZZZ pela chave de escrita do seu canal ThingSpeak
SoftwareSerial monitor(10, 11); // Comunicação serial com módulo ESP8266 (RX, TX)
dht DHT;
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);

// Variáveis
int luminancePin = A0;
int uvPin = A1;
int dustPin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
unsigned long delay_time = 60000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;

void setup() {
  Serial.begin(9600);
  monitor.begin(9600);
  Serial.println("Inicializando...");
  pinMode(dustPin, INPUT);
  Serial.println("Detectando sensor de pressão BMP085...");
  if (!bmp.begin()) {
    Serial.println("Sensor BMP085 não detectado. Verifique conexões ou endereço I2C!");
    while (1);
  }
  Serial.println("BMP085 detectado!");
  monitor.flush();
  monitor.println("AT");
  delay(2000);
  if (monitor.find("OK")) {
    Serial.println("Comunicação com módulo ESP8266: OK");
  } else {
    Serial.println("ERRO no módulo ESP8266");
  }
  connectWiFi();
  Serial.print("Amostragem (");
  Serial.print(sampletime_ms / 1000);
  Serial.println("s)...");
  starttime = millis();
}

void loop() {
  duration = pulseIn(dustPin, LOW);
  lowpulseoccupancy += duration;
  
  if ((millis() - starttime) >= sampletime_ms) {
    ratio = lowpulseoccupancy / (sampletime_ms * 10.0);
    concentration = 1.1 * pow(ratio, 3) - 3.8 * pow(ratio, 2) + 520 * ratio + 0.62;
    lowpulseoccupancy = 0;
    
    char buffer[10];
    float luminance = analogRead(luminancePin);
    float uv = analogRead(uvPin);
    uv = uv * 0.0049; // converte para volts
    uv = uv * 307;    // converte para mW/m²
    uv = uv / 200;    // calcula índice UV
    
    int chk = DHT.read22(DHT22_PIN);
    float humidity = DHT.humidity;
    float temperature = DHT.temperature;
    
    sensors_event_t event;
    bmp.getEvent(&event);
    float pressure = 0;
    float temperature1 = 0;
    if (event.pressure) {
      pressure = event.pressure;
      bmp.getTemperature(&temperature1);
    }
    
    String luminanceStr = dtostrf(luminance, 4, 1, buffer); luminanceStr.replace(" ", "");
    String uvStr = dtostrf(uv, 4, 1, buffer); uvStr.replace(" ", "");
    String humidityStr = dtostrf(humidity, 4, 1, buffer); humidityStr.replace(" ", "");
    String temperatureStr = dtostrf(temperature, 4, 1, buffer); temperatureStr.replace(" ", "");
    String dustStr = dtostrf(concentration, 4, 1, buffer); dustStr.replace(" ", "");
    String pressureStr = dtostrf(pressure, 4, 1, buffer); pressureStr.replace(" ", "");
    String temperature1Str = dtostrf(temperature1, 4, 1, buffer); temperature1Str.replace(" ", "");
    
    updateSensors(luminanceStr, humidityStr, temperatureStr, uvStr, dustStr, pressureStr, temperature1Str);
    
    Serial.print("Aguarde ");
    Serial.print(delay_time / 1000);
    Serial.println("s para próxima amostragem");
    Serial.println();
    delay(delay_time);
    Serial.println();
    Serial.print("Amostragem (");
    Serial.print(sampletime_ms / 1000);
    Serial.println("s)...");
    starttime = millis();
  }
}

void updateSensors(String luminanceStr, String humidityStr, String temperatureStr, String uvStr, String dustStr, String pressureStr, String temperature1Str) {
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  monitor.println(cmd);
  delay(2000);
  
  cmd = GET;
  cmd += luminanceStr;
  cmd += "&field2=";
  cmd += humidityStr;
  cmd += "&field3=";
  cmd += temperatureStr;
  cmd += "&field4=";
  cmd += uvStr;
  cmd += "&field5=";
  cmd += dustStr;
  cmd += "&field6=";
  cmd += pressureStr;
  cmd += "&field7=";
  cmd += temperature1Str;
  cmd += "\r\n";
  delay(1000);
  
  int strsize = cmd.length();
  monitor.println("AT+CIPSEND=" + String(strsize));
  delay(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("SEND: ");
  Serial.println(cmd);
  monitor.println(cmd);
}

boolean connectWiFi() {
  Serial.println("Conectando Wi-Fi...");
  String cmd = "AT+CWMODE=1";
  monitor.println(cmd);
  delay(2000);
  monitor.flush();
  cmd = "AT+CWJAP=\"";
  cmd += SSID;
  cmd += "\",\"";
  cmd += PASS;
  cmd += "\"";
  monitor.println(cmd);
  delay(5000);
  if (monitor.find("OK")) {
    Serial.println("Conexão bem-sucedida!");
    return true;
  } else {
    Serial.println("Falha na conexão!");
    return false;
  }
  Serial.println();
}
GitHub - Biblioteca DHT

https://github.com/adafruit/DHT-sensor-library

GitHub - Biblioteca BMP085

https://github.com/adafruit/Adafruit-BMP085-Library

Processo de manufatura

  1. Construa Estação Meteorológica Raspberry Pi que Envia Dados Diários por Email
  2. Robô de Detecção Humana Baseado em Arduino Uno: Integração de Sensores Passo a Passo
  3. Sensor K30 CO₂: Monitoramento de Qualidade do Ar Interno em Tempo Real
  4. Construa um Estadiómetro Digital: Acompanhe a Altura com Arduino e Sensor a Laser
  5. Servidor Web Arduino Uno WiFi: Controle LED via Navegador
  6. Construa uma Calculadora Básica com Arduino UNO – Projeto Fácil
  7. Construa uma Torre de Sensores com Arduino Cloud: Monitoramento de Temperatura, Movimento e Gás
  8. Display Portátil de Persistência da Visão com Arduino UNO e ATtiny85
  9. Estação Meteorológica Arduino Nano: Kit de Sensores e Display OLED
  10. Estação Inteligente de Monitoramento de Saúde: Arduino, Bluetooth e Sensores