Iluminação Pública Inteligente IoT: Sistema LED Eficiente com Arduino
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino UNO WiFi Rev.2 | 1 |
| LED (genérico, representa luminária) | 1 |
| LDR 1MΩ (Sensor de Luz) | 1 |
| Sensor IR Proximidade (Detecta veículos) | 1 |
| Módulo ESP8266 ESP-12E | 1 |
| Resistor 1kΩ | 1 |
Ferramentas Necessárias
- Protoboard 170 pinos
- Jumpers
Software e Serviços
- Arduino IDE
- ThingSpeak API (registro de dados na nuvem)
Sobre o Projeto
Definição do Problema
Iluminação pública é uma das maiores despesas das cidades. Lâmpadas de vapor de sódio consomem muita energia. O sistema manual (ligar ao entardecer, desligar ao amanhecer) desperdiça energia no período de transição. A automação reduz desperdício, custos e mão de obra.
Desvantagens do Sistema Atual
- Liga/desliga manual
- Alto consumo de energia
- Alto custo
- Muita mão de obra
Vantagens do Sistema Proposto
- Liga/desliga automático
- Redução de custo de manutenção
- Redução de emissão de CO₂
- Redução de poluição luminosa
- Comunicação sem fio
- Economia de energia
- Redução de mão de obra
Funcionamento dos Sensores
A. LDR (Sensor de Luz)
Resistor dependente de luz (fotorresistor): resistividade varia com radiação eletromagnética. Funciona como olho humano. Feito de semicondutor de alta resistência. Princípio: fotocondutividade — condutividade aumenta quando luz é absorvida. Luz no LDR → resistência cai → corrente flui → sinal ao Arduino. Preset ajusta sensibilidade.
B. Sensor IR (Proximidade)
Instrumento eletrônico que detecta características do ambiente emitindo/detectando radiação infravermelha. Mede calor e detecta movimento. Ondas IR não são visíveis (espectro: 0.75–1000µm). Luz IR → corrente elétrica → detector de tensão/corrente → sinal ao Arduino.
C. LED (Luminária)
Diodo emissor de luz: emite fótons quando polarizado diretamente. Fonte de luz de dois terminais. Intensidade emitida relaciona-se com luz ambiente: pouca luz externa → LED brilho máximo; muita luz externa → LED apagado/dim.
D. ESP8266 (Comunicação IoT)
SoC Wi-Fi da Espressif para IoT. Recursos: Wi-Fi 2.4GHz (802.11 b/g/n, WPA/WPA2), 16 GPIO, I²C, ADC 10-bit, SPI, I²S, UART, PWM. CPU 32-bit RISC Tensilica Xtensa L106 @ 80/160 MHz. 64KB boot ROM, 64KB RAM instrução, 96KB RAM dados. Flash externo via SPI. Módulo transceiver de baixo custo para endpoints IoT. Comunicação via comandos AT (UART, baud rate definido).
Pinagem ESP8266-01 (8 pinos, 2 GPIO, antena PCB)
- 3V3: Alimentação 3.3V
- GND: Terra
- RST: Reset ativo baixo
- EN: Enable ativo alto
- TX: UART Transmit
- RX: UART Receive
Código: Parte 1 — Arduino UNO WiFi Rev.2 (Controle Local)
int smooth; int LDR; int threshold = 40; // limiar luminosidade
int brightness = 0; int ledState = 0;
int sensor1 = 11; int sensor2 = 8; int sensor3 = 9;
int led1 = 5; int led = 6; int led2 = 2;
int carPresent = 0; int carPresent1 = 0;
float beta = 0.65; // fator suavização leitura LDR
void setup() {
Serial.begin(115200);
pinMode(sensor1, INPUT); pinMode(sensor2, INPUT); pinMode(sensor3, INPUT);
pinMode(led, OUTPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT);
}
void loop() {
// Suavização exponencial da leitura LDR
smooth = smooth - (beta * (smooth - analogRead(A0)));
delay(1);
LDR = round(((float)smooth / 1023) * 100); // 0-100%
// Mapeia luminosidade para PWM (0-255)
if (LDR <= 40) brightness = 0;
else brightness = map(LDR, 40, 100, 0, 255);
checkSensors(); // Verifica sensores IR (veículos)
if (carPresent == 1) { // Carro no setor 1
ledState = 1;
digitalWrite(led, HIGH); digitalWrite(led1, HIGH);
analogWrite(led, brightness); analogWrite(led1, brightness);
} else if (carPresent == 0) {
ledState = 0;
digitalWrite(led, HIGH);
analogWrite(led, ledState);
if (carPresent1 == 1) { // Carro no setor 2
ledState = 1;
if (ledState == 1) {
analogWrite(led1, brightness); analogWrite(led2, brightness);
}
} else if (carPresent1 == 0) {
ledState = 0;
digitalWrite(led1, HIGH); digitalWrite(led2, HIGH);
analogWrite(led1, ledState); analogWrite(led2, ledState);
}
}
// Envia dados para ESP8266 via Serial
String data = (String)ledState + "," + (String)brightness + ";";
Serial.print(data);
delay(100);
}
void checkSensors() {
// Lógica de 3 sensores IR para detectar presença de veículos em sequência
if (digitalRead(sensor1) == 0) { // Carro no sensor 1
if (digitalRead(sensor2) == 1) carPresent = 1; // Ainda não chegou no sensor 2
} else if (digitalRead(sensor2) == 0) { // Carro no sensor 2
if (digitalRead(sensor1) == 1) { carPresent = 0; carPresent1 = 1; }
else { // Carros em ambos sensores
analogWrite(led, brightness); analogWrite(led1, brightness); analogWrite(led2, brightness);
digitalWrite(led, HIGH); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH);
}
} else if (digitalRead(sensor3) == 0) { // Carro no sensor 3
if (digitalRead(sensor2) == 1) { carPresent = 0; carPresent1 = 0; }
else { carPresent = 0; carPresent1 = 1; }
}
}
Código: Parte 2 — ESP8266 (Envio para ThingSpeak)
#include
const char* ssid = "ardent";
const char* password = "12345678";
String ledState = "";
String brightness = "";
char thingSpeakAddress[] = "api.thingspeak.com";
String writeAPIKey = "NUEBLW9OA58DLL4N"; // SUBSTITUA PELA SUA CHAVE
WiFiClient client;
void setup() {
Serial.begin(115200);
connectWifi();
}
void loop() {
filterData();
HTTPPost();
delay(15000); // ThingSpeak aceita 1 update/15s
}
int connectWifi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(2500);
}
}
void HTTPPost() {
if (client.connect(thingSpeakAddress, 80)) {
String PostData = "api_key=" + writeAPIKey;
PostData += "&field1=" + ledState;
PostData += "&field2=" + brightness;
client.println("POST /update HTTP/1.1");
client.println("Host: api.thingspeak.com");
client.println("Connection: close");
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Content-Length: " + String(PostData.length()));
client.println();
client.println(PostData);
client.stop();
}
}
void filterData() {
if (Serial.available()) {
String buffer = "";
buffer = Serial.readStringUntil(';');
int i1 = buffer.indexOf(',');
ledState = buffer.substring(0, i1);
buffer.remove(0, i1 + 1);
brightness = buffer;
}
}
Esquemático
Conexões: LDR no A0, 3 sensores IR nos pinos 8,9,11, 3 LEDs (PWM) nos pinos 2,5,6. Serial (pinos 0/1) conecta ao ESP8266 (TX/RX cruzados).
Considerações Finais
- Substitua credenciais WiFi e API Key do ThingSpeak pelas suas.
- Use regulador 3.3V dedicado para ESP8266 (o pino 3.3V do Arduino pode não fornecer corrente suficiente).
- Adicione capacitor 100µF entre VCC e GND do ESP8266 para estabilidade.
- Para produção, use PCB customizada e luminárias LED de alta potência com driver adequado.
Processo de manufatura
- Semáforo Inteligente: Iluminação Pública Adaptativa com IoT
- Sistema Multi-Posição de Sensores de Temperatura para Integração em Casa Inteligente
- MotionSense: Detecção Inteligente de Intrusão com Arduino e ESP8266
- Prevenção de Incêndio em Impressoras 3D: Sistema de Segurança com Sensor Inteligente
- Sistema Inteligente de Rega de Plantas com Arduino Nano
- Levitação Magnética Repulsiva com Arduino: Circuito Simples e Guia DIY
- Robô Garra Controlado Remotamente para Manipulação de Precisão
- Laboratório Avançado de Microcontroladores: ESP32, Arduino, PIC e Módulos de Sensores
- Globo POV DIY: Arte LED com Arduino Mega – Persistência da Visão
- CoroFence Detector Térmico: Sensor PIR Avançado & Integração IoT