Como referenciar este texto: ‘Monitoramento ambiental com arduino e ThingSpeak: Um projeto de IoT educacional’. Rodrigo Terra. Publicado em: 25/05/2025. Link da postagem: https://www.makerzine.com.br/educacao/monitoramento-ambiental-com-arduino-e-thingspeak-um-projeto-de-iot-educacional/.
Conteúdos que você verá nesta postagem
O que é este projeto?
Este projeto propõe a construção de um sistema de monitoramento ambiental com Arduino, integrando sensores de temperatura, umidade, pressão, qualidade do ar e radiação ultravioleta. Os dados coletados são enviados automaticamente à plataforma ThingSpeak, permitindo visualização remota em tempo real. Ideal para atividades educativas com foco em Internet das Coisas (IoT), ciências e sustentabilidade, o projeto combina eletrônica, programação e análise de dados.
Quais sensores são utilizados?
O sistema monitora cinco variáveis ambientais utilizando os seguintes sensores:
Como o projeto funciona?
O código-fonte do Arduino realiza a leitura periódica dos sensores e envia os dados para o ThingSpeak a cada 15 segundos. Veja a lógica simplificada do funcionamento:
Inicialização dos sensores e do módulo Wi-Fi.
Leitura dos dados ambientais: temperatura, umidade, pressão, qualidade do ar e índice UV.
Montagem de uma requisição HTTP GET contendo os valores dos sensores.
Envio dos dados ao ThingSpeak via comunicação serial com o ESP-01S.
Reset do módulo Wi-Fi e repetição do ciclo após 15 segundos.
Esse processo permite que os dados sejam armazenados e visualizados em tempo real no canal do projeto no ThingSpeak:
Como montar esse projeto?
Você vai precisar dos seguintes componentes:
Componente | Função |
---|---|
Arduino Uno R3 | Placa microcontroladora principal |
Protoboard | Conexão dos componentes |
Jumpers | Cabos de ligação |
DHT11 | Sensor de temperatura e umidade |
BMP180 | Sensor de pressão atmosférica |
MQ135 | Sensor de qualidade do ar |
UVM-30A | Sensor de radiação UV |
ESP-01S (ESP8266) | Módulo Wi-Fi para envio de dados |
Resistores de 1kΩ | Divisor de tensão para o ESP-01S |
Esquema de conexão (Pinagem no Arduino):
BMP180: SDA → A4, SCL → A5
DHT11: Data → pino 7
MQ135: AOUT → A0
UVM-30A: OUT → A1
ESP-01S:
RX (via divisor de tensão) → pino 2 (TX Arduino)
TX → pino 3 (RX Arduino)
VCC e CH_PD → 3.3V
GND → GND
Código-fonte
#include
#include
#include // Biblioteca para o BMP 180.
#include // Biblioteca para o DHT11
#include // Biblioteca para o MQ135
// Definições de pinos para os sensores
#define DHTPIN 7 // Pino digital do DHT11
#define DHTTYPE DHT11 // Tipo de sensor DHT11
#define MQ135PIN A0 // Pino analógico para o MQ135
#define UV_PIN A1 // Pino analógico para o sensor UVM-30A
String apiKey = "CHAVE-API"; // Chave da API do ThingSpeak
SoftwareSerial SoftSer(11,10); // RX - pino 2; TX - pino 3
// Inicialização dos sensores
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP085 bmp;
MQ135 mq135(MQ135PIN);
void setup()
{
Wire.begin();
// Inicializando o sensor BMP180
if (!bmp.begin()) {
Serial.println("BMP180 não encontrado!");
while (1); // Trava o código se o sensor não for encontrado
}
// Inicializando o sensor DHT11
dht.begin();
// Inicializa a comunicação serial
Serial.begin(9600);
SoftSer.begin(115200);
}
void loop()
{
// Definição das variáveis que armazenam as leituras
float temperatura = dht.readTemperature();
String strTemperatura = String(temperatura,1);
float umidade = dht.readHumidity();
String strUmidade = String(umidade,1);
float pressao = bmp.readPressure() / 100.0F; // Convertendo para hPa
String strPressao = String(pressao,1);
float qualidadeAr = mq135.getPPM();
String strQualidadeDoAr = String(qualidadeAr,1);
float coletadoIndiceUV = analogRead(UV_PIN); // Leitura do valor analógico do UVM-30A
float IndiceUV = coletadoIndiceUV * (5.0 / 1023.0); // Conversão de valor analógico para tensão (0-5V)
IndiceUV = IndiceUV * 21; // Conversão aproximada para índice UV
String strIndiceUV = String(IndiceUV,1);
// Conexão TCP com o ThingSpeak
String cmd = "AT+CIPSTART=\"TCP\",\"184.106.153.149\",80"; // Endereço do ThingSpeak
SoftSer.println(cmd);
if (SoftSer.find("Error")) {
Serial.println("Erro AT+CIPSTART");
return;
}
// Monta a string GET para enviar ao ThingSpeak
String getStr = "GET /update?api_key=";
getStr += apiKey;
getStr += "&field1=";
getStr += String(strTemperatura);
getStr += "&field2=";
getStr += String(strUmidade);
getStr += "&field3=";
getStr += String(strPressao);
getStr += "&field4=";
getStr += String(strQualidadeDoAr);
getStr += "&field5=";
getStr += String(strIndiceUV);
getStr += "\r\n\r\n"; // Fechamento da conexão
// Envia o comprimento da string de dados
cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
SoftSer.println(cmd);
if (SoftSer.find(">")) {
SoftSer.print(getStr); // Envia os dados
} else {
SoftSer.println("AT+CIPCLOSE");
Serial.println("AT+CIPCLOSE - Dados não enviados"); // Se isso aparecer, os dados não foram enviados
}
// Reseta o ESP8266
SoftSer.println("AT+RST");
// Aguarda 15 segundos antes de realizar a próxima leitura
delay(15000);
}
Por que usar em sala de aula?
Este projeto é um excelente exemplo de aplicação prática de conceitos de:
Ciências da Natureza: estudo do ar, clima e radiação solar.
Tecnologia e Computação: introdução à IoT, sensores, protocolos de rede e automação.
Matemática: leitura de dados, gráficos e medidas.
Educação Ambiental: discussão sobre poluição, radiação e mudanças climáticas.
Além disso, promove aprendizagem ativa, trabalho em grupo, resolução de problemas reais e uso de recursos digitais gratuitos.
Se você acha que este conteúdo pode ser útil para alguém, compartilhe!
Ao divulgar os textos do MakerZine, você contribui para que todo o material continue acessível e gratuito para todas as pessoas.