Arduino & NeoPixel-Optokoppler: Effiziente Steuerung mehrerer Relais
Komponenten und Zubehör
| Komponente | Menge | Hinweis |
|---|---|---|
| WS2812B LED-Strip (5 m, 300 LED, 60 LED/m, 5050 RGB) | 1 | Davon 10 LEDs abschneiden, 4 nutzen |
| Widerstand 27 kΩ | 4 | In Reihe mit LDR |
| Fotowiderstand (LDR) | 4 | Lichtabhängiger Widerstand |
| Relais-Modul 5 V (4-Kanal) | 1 | z. B. RobotGeek oder Conrad 095841 |
| LED-Lampe 230 V | 1 | Last für Demo |
| Arduino UNO (oder NodeMCU ESP32) | 1 | Jeder Arduino-Typ möglich |
Benötigte Werkzeuge
- Lötkolben
- Allgemeines Werkzeug (Haushalt/Werkstatt)
Apps und Online-Dienste
- Video-Demonstration
Projektbeschreibung
Dieses Projekt zeigt, wie man mehrere Relais (oder andere Aktoren) von einem einzigen Arduino-Ausgangspin steuert. Ideal, wenn nicht genügend Pins vorhanden sind.
Funktionsprinzip: Ein NeoPixel-LED-Strip (WS2812B) wird so verwendet, dass jede LED zusammen mit einem LDR ein DIY-Optokoppler bildet. Damit wird eine Serial-zu-Parallel-Wandlung realisiert (1 Pin → viele Kanäle). Jede LED wird einzeln über die Adafruit-NeoPixel-Bibliothek adressiert. Der LDR (in Reihe mit 27 kΩ) steuert ein 5 V-Relais. Statt Relais können auch andere Aktoren angesteuert werden.
Im Beispiel wird ein ESP32 (NodeMCU) verwendet, ein Arduino Uno funktioniert ebenso. Der ESP32 arbeitet mit 3,3 V-Logik, der LED-Strip benötigt 5 V. Der ESP32 wird über USB (5 V) versorgt; der Strip und die Relais erhalten 5 V direkt vom 5 V-Pin des ESP32.
Schritt 1: NeoPixel-Optokoppler bauen
Material:
- 10-LED-Stück vom WS2812-Strip (4 werden genutzt)
- Dunkelgrauer Schaumstoff
- Steckbrett-Streifen
- Schwarzes Gewebeband


Wichtig: Licht jedes LED muss vom eigenen LDR getrennt werden („Light Cross-Talk“). In der Praxis kaum perfekt machbar, daher wird die LED-Helligkeit per Software sehr niedrig gesetzt.

Schritt 2: Elektronischer Aufbau
Steckbrett-Aufbau mit ESP32 (NodeMCU). Fritzing-Schaltplan:


Nur ein Ausgangspin (GPIO 21) steuert 4 Relais parallel. Theoretisch bis zu 300 Kanäle (5 m Strip).
Schritt 3: Software
Die loop() besteht aus for-Schleifen, die verschiedene Schaltmuster demonstrieren. Kernfunktion:
void ControlRelais(int RelaisNo, bool RelaisState) {
strip.setPixelColor(RelaisNo, RelaisState*15, RelaisState*15, RelaisState*15);
strip.show();
Serial.print(" RelaisNo "); Serial.print(RelaisNo);
Serial.print(" = "); Serial.println(RelaisState);
}
Die LED wird nur schwach (Wert 15) angesteuert – gerade genug, um das Relais über den LDR zu schalten, und vermeidet Cross-Talk.
Ein Video zeigt das Ergebnis.
Quellcode
/* Steuerung mehrerer Relais über einen Arduino-Pin mittels NeoPixel-Optokopplern
Pierre Pennings, Dez. 2018 – GPL3+ */
#include <Adafruit_NeoPixel.h>
#define NUM_LEDS 10
const int RelaisPin = 21; // GPIO 21 am ESP32
int RelaisNo = 0;
bool RelaisState = false;
int r = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, RelaisPin, NEO_RGB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
pinMode(RelaisPin, OUTPUT);
strip.begin();
for (int t = 0; t < 10; t++) {
strip.setPixelColor(t, 15, 15, 15); // Test aller LEDs beim Start
strip.show();
delay(500);
strip.setPixelColor(t, 0, 0, 0);
}
}
void loop() {
for (int r = 1; r < 5; r++) { // 1→4 ein/aus
delay(500); ControlRelais(r, true);
delay(500); ControlRelais(r, false);
}
for (int k = 4; k > 0; k--) { // 4→1 ein/aus
delay(500); ControlRelais(k, true);
delay(500); ControlRelais(k, false);
}
for (int r = 1; r < 5; r++) { // Muster
for (int k = 4; k > 0; k--) {
delay(500);
ControlRelais(r, true); ControlRelais(k, true);
delay(500);
ControlRelais(r, false); ControlRelais(k, false);
}
}
}
void ControlRelais(int RelaisNo, bool RelaisState) {
strip.setPixelColor(RelaisNo, RelaisState*15, RelaisState*15, RelaisState*15);
strip.show();
Serial.print(" RelaisNo "); Serial.print(RelaisNo);
Serial.print(" = "); Serial.println(RelaisState);
}
Schaltpläne
Fritzing-Datei: neopixel_optocoupler_relais__hNIrhGIMtD.fzz
Herstellungsprozess
- Sensor-gesteuerte Audio-Effekte mit dem Satellite CCRMA Kit bauen
- Arduino Nano Flight Simulator 2020 Kontrollpanel – LCD & CDI Display
- Arduino-basiertes Schalter- & LED-Panel für Microsoft Flight Simulator 2020
- Interaktives Gyroskop-LED-Display mit NeoPixel-Ring & Arduino
- Intelligente Jalousien: Automatische Lichtsteuerung mit Arduino & Solarenergie
- LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
- Einfachen Hindernissensor mit Arduino bauen – IR-LED & Photodiode Tutorial
- Roomba Create 2 per Arduino & Android steuern – Schritt-für-Schritt
- Intelligenten Arduino-Vierbeiner-Roboter bauen: Schritt-für-Schritt-Anleitung
- Arduino & MPU6050: Präzise Servomotor-Steuerung mit SG90 & MG996R