No momento, você está visualizando Monitoramento ambiental com arduino e ThingSpeak: Um projeto de IoT educacional

Monitoramento ambiental com arduino e ThingSpeak: Um projeto de IoT educacional

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:

DHT11 – Mede temperatura e umidade relativa do ar.

BMP180 – Sensor barométrico que fornece pressão atmosférica e também temperatura.

MQ135 – Sensor de gás que avalia a qualidade do ar (nível de poluentes).

UVM-30A – Mede a intensidade da radiação ultravioleta (índice UV).

ESP-01S (ESP8266) – Módulo Wi-Fi responsável por enviar os dados à nuvem (ThingSpeak).

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:

  1. Inicialização dos sensores e do módulo Wi-Fi.

  2. Leitura dos dados ambientais: temperatura, umidade, pressão, qualidade do ar e índice UV.

  3. Montagem de uma requisição HTTP GET contendo os valores dos sensores.

  4. Envio dos dados ao ThingSpeak via comunicação serial com o ESP-01S.

  5. 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:

https://thingspeak.mathworks.com/channels/2690209.

Como montar esse projeto?

Você vai precisar dos seguintes componentes:

ComponenteFunção
Arduino Uno R3Placa microcontroladora principal
ProtoboardConexão dos componentes
JumpersCabos de ligação
DHT11Sensor de temperatura e umidade
BMP180Sensor de pressão atmosférica
MQ135Sensor de qualidade do ar
UVM-30ASensor 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 <SoftwareSerial.h>
#include <Wire.h>
#include <Adafruit_BMP085.h> // Biblioteca para o BMP 180.
#include <DHT.h>         	// Biblioteca para o DHT11
#include <MQ135.h>       	// 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.

Rodrigo Terra

Com formação inicial em Física, especialização em Ciências Educacionais com ênfase em Tecnologia Educacional e Docência, e graduação em Ciências de Dados, construí uma trajetória sólida que une educação, tecnologias ee inovação. Desde 2001, dedico-me ao campo educacional, e desde 2019, atuo também na área de ciência de dados, buscando sempre encontrar soluções focadas no desenvolvimento humano. Minha experiência combina um profundo conhecimento em educação com habilidades técnicas em dados e programação, permitindo-me criar soluções estratégicas e práticas. Com ampla vivência em análise de dados, definição de métricas e desenvolvimento de indicadores, acredito que a formação transdisciplinar é essencial para preparar indivíduos conscientes e capacitados para os desafios do mundo contemporâneo. Apaixonado por café e boas conversas, sou movido pela curiosidade e pela busca constante de novas ideias e perspectivas. Minha missão é contribuir para uma educação que inspire pensamento crítico, estimule a criatividade e promova a colaboração.

Deixe um comentário