IoT-Smart-Straßenbeleuchtung: Intelligentes, energieeffizientes LED-System
Komponenten und Materialien
| Komponente | Anzahl |
|---|---|
| Arduino UNO WiFi Rev.2 | 1 |
| LED (Standard, z. B. 1 W Power-LED) | 1 |
| LDR (Lichtabhängiger Widerstand), 1 MΩ | 1 |
| IR-Näherungssensor (z. B. Digilent IR Proximity) | 1 |
| ESP8266 ESP-12E WiFi-Modul | 1 |
| Widerstand 1 kΩ | 1 |
Benötigte Werkzeuge und Maschinen
- Steckbrett 170 Pin
Apps und Online-Dienste
- Arduino IDE
- ThingSpeak API
Projektbeschreibung
Problembeschreibung
Straßenbeleuchtung ist in vielen Städten ein riesiger Kostenfaktor. Natriumdampflampen verbrauchen viel Energie. Die Kosten könnten für andere Entwicklungsmaßnahmen genutzt werden. Derzeit wird manuell geschaltet: abends an, morgens aus. Zwischen Ein- und Ausschalten wird viel Energie verschwendet. Ein automatisches System reduziert diesen Verlust und spart Geld.
Nachteile des bestehenden Systems
- Manuelles Ein-/Ausschalten
- Hoher Energieverbrauch
- Hohe Kosten
- Hoher Personalaufwand
Vorteile des vorgeschlagenen Systems
- Automatisches Schalten der Straßenlaternen
- Reduzierte Wartungskosten
- CO₂-Einsparung
- Reduzierung von Lichtverschmutzung
- Drahtlose Kommunikation
- Energieeinsparung
- Weniger Personalaufwand
A. LDR-Eingang (Lichtsensor)
Ein lichtabhängiger Widerstand (LDR), auch Photowiderstand genannt, ändert seinen Widerstand in Abhängigkeit der elektromagnetischen Strahlung. Er verhält sich ähnlich wie das menschliche Auge. Weitere Bezeichnungen: Photoleiter, Photozelle. Material: Halbleiter mit hohem Dunkelwiderstand.
Funktionsprinzip: Photoleitfähigkeit – die Leitfähigkeit steigt bei Lichteinfall. Fällt Licht auf den LDR, sinkt der Widerstand, Strom fließt in die Basis des ersten und dann des zweiten Transistors. Ein einstellbarer Vorwiderstand (Trimmpotentiometer) justiert die Empfindlichkeit. Der LDR sendet sein Signal an den Arduino.



B. IR-Sensor (Bewegungserkennung)
Ein Infrarotsensor detektiert Umgebungsmerkmale durch Aussenden und/oder Empfangen von Infrarotstrahlung. Er kann Wärme messen und Bewegung erkennen. IR-Wellen sind für das Auge unsichtbar. Im elektromagnetischen Spektrum liegt IR zwischen sichtbarem Licht (längere Wellenlänge) und Mikrowellen (kürzer), ca. 0,75–1000 µm.
IR-Sensoren wandeln IR-Licht in Strom um, der über Spannungs-/Stromdetektoren ausgelesen wird. Der IR-Sensor sendet sein Signal an den Arduino.
C. LED (Lichtquelle)
Eine Leuchtdiode (LED) ist eine Sperrschichtdiode, die bei Durchlassspannung Licht emittiert. Elektronen rekombinieren mit Löchern, Energie wird als Photonen (Licht) freigesetzt. Zweipoliger Halbleiter-Lichtquelle.
Die LED stellt unser Beleuchtungssystem dar. Die abgegebene Lichtmenge korreliert mit der Umgebungshelligkeit: Bei Dunkelheit volle Intensität, bei Helligkeit gedimmt/aus.
D. ESP8266 (WiFi-Kommunikation)
Der ESP8266 ist ein WiFi-fähiges System-on-Chip (SoC) von Espressif, weit verbreitet für IoT-Embedded-Anwendungen.
Fähigkeiten:
- 2,4 GHz WiFi (802.11 b/g/n, WPA/WPA2)
- 16 GPIO
- I²C, SPI, I²S (DMA), UART (dediziert + TX-only auf GPIO2)
- 10-bit ADC
- PWM
32-Bit RISC CPU (Tensilica Xtensa L106), 80 MHz (übertaktbar auf 160 MHz). 64 KB Boot ROM, 64 KB Instruction RAM, 96 KB Data RAM. Externer Flash via SPI.
Kostengünstiges Standalone-Wireless-Modul für Endpunkt-IoT.
Kommunikation per AT-Befehle über UART (festes Baudrate). Viele Drittanbieter-Module mit unterschiedlicher Pin-Belegung:
- ESP-01: 8 Pins (2 GPIO), PCB-Antenne
- ESP-02: 8 Pins (3 GPIO), U.FL-Anschluss
- ESP-03: 14 Pins (7 GPIO), Keramikantenne
- ESP-04: 14 Pins (7 GPIO), keine Antenne

ESP8266-01 Pin-Belegung
- 3V3: 3,3 V Versorgung
- GND: Masse
- RST: Aktiver Low Reset
- EN: Aktiver High Enable
- TX: UART Senden
- RX: UART Empfangen
Code
IOT smart light (Arduino – Hauptsteuerung)
int smooth; int LDR; int threshold = 40; // Sonnenintensitätsschwelle
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; // Glättungsfaktor
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() {
// LDR-Glättung (Tiefpass)
smooth = smooth - (beta * (smooth - analogRead(A0)));
delay(1);
LDR = round(((float)smooth / 1023) * 100); // 0-100%
// Helligkeit aus LDR ableiten
if (LDR <= 40) brightness = 0;
else brightness = map(LDR, 40, 100, 0, 255);
checkSensors(); // IR-Sensoren prüfen
if (carPresent == 1) { // Auto erkannt
ledState = 1;
digitalWrite(led, HIGH); digitalWrite(led1, HIGH);
analogWrite(led, brightness); analogWrite(led1, brightness);
} else if (carPresent == 0) { // Kein Auto
ledState = 0;
digitalWrite(led, HIGH);
analogWrite(led, ledState);
if (carPresent1 == 1) { // Nachfolgendes Auto?
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);
}
}
// Daten für ESP8266/ThingSpeak vorbereiten
String data = (String)ledState + "," + (String)brightness + ";";
Serial.print(data);
delay(100);
}
void checkSensors() {
// 3 IR-Sensoren entlang der Straße: sensor1, sensor2, sensor3
if (digitalRead(sensor1) == 0) { // Auto bei Sensor 1
if (digitalRead(sensor2) == 1) carPresent = 1; // Noch nicht bei Sensor 2
} else if (digitalRead(sensor2) == 0) { // Auto bei Sensor 2
if (digitalRead(sensor1) == 1) { carPresent = 0; carPresent1 = 1; } // Kein Auto mehr bei 1
else { // Zwei Autos hintereinander
analogWrite(led, brightness); analogWrite(led1, brightness); analogWrite(led2, brightness);
digitalWrite(led, HIGH); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH);
}
} else if (digitalRead(sensor3) == 0) { // Auto bei Sensor 3
if (digitalRead(sensor2) == 1) { carPresent = 0; carPresent1 = 0; }
else { carPresent = 0; carPresent1 = 1; }
}
}
Code part 2 (ESP8266 → ThingSpeak)
#include
const char* ssid = "ardent";
const char* password = "12345678";
String ledState = "";
String brightness = "";
char thingSpeakAddress[] = "api.thingspeak.com";
String writeAPIKey = "NUEBLW9OA58DLL4N"; // IHR Write API Key!
WiFiClient client;
void setup() {
Serial.begin(115200);
connectWifi();
}
void loop() {
filterData();
HTTPPost();
delay(15000); // ThingSpeak Limit: 15 s
}
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;
}
}
Schaltpläne
Herstellungsprozess
- Intelligente Ampel: Adaptive Straßenbeleuchtung per IoT
- Multi-Position Temperatursensor-System für Smart-Home-Integration
- MotionSense: Smarte Einbruchserkennung mit Arduino & ESP8266
- 3D-Drucker Brandschutz: Intelligentes Sensorsicherheitssystem
- Smart-Home Pflanzenbewässerungssystem mit Arduino Nano
- Arduino-basierte abstoßende Magnetschwebung: Einfache Schaltung & DIY-Anleitung
- Fortgeschrittener ferngesteuerter Greifer-Roboter für präzises Handling
- Fortgeschrittenes Mikrocontroller-Labor: ESP32, Arduino, PIC und Sensormodule
- DIY Persistence-of-Vision (POV) Globe – LED-Kugel mit Arduino Mega
- CoroFence Thermaldetektor: PIR-Sensor & IoT-Integration mit Panasonic GridEye