TV per Alexa steuern mit Arduino IoT Cloud – Schritt-für-Schritt
Komponenten und Zubehör
| Arduino Nano 33 IoT | × | 1 |
| Widerstand 330 Ω | × | 1 |
| IR-Empfänger (z. B. VS1838B) | × | 1 |
| IR-Sender (IR-LED) | × | 1 |
| Jumper-Wires | × | 1 Set |
| Breadboard | × | 1 |
Apps und Online-Dienste
- Arduino Web Editor
- Arduino IoT Cloud
- Arduino Amazon Alexa Skill (Offiziell)
Projektbeschreibung
Hinweis: Dieses Tutorial könnte veraltet sein. Aktuelle Version hier.
Teil 1: TV per Infrarot steuern
Der einfachste Weg: Arduino mimikt die originale IR-Fernbedienung. Dazu Signale der Fernbedienung mit IR-Empfänger aufzeichnen, dann per IR-LED wieder senden.
Schaltung aufbauen (IR-Empfänger an Pin 2, IR-LED mit 330 Ω an Pin 3). Sketch hochladen, Seriellen Monitor öffnen (9600 Baud), Fernbedienung auf Empfänger richten und Tasten drücken:
- POWER / STANDBY
- KANAL 1–9
- LAUTER / LEISER
- STUMM
- KANAL + / KANAL –
Im Monitor erscheinen rawData-Arrays (unsigned int[67]). Diese notieren und benennen (chan1…chan9, volUp, volDown, chanUp, chanDown, onoff, mute). Beispielwerte (Samsung-TV):
const unsigned int chan1[67] = {4450,4500, 550,1700, 500,1700, ... };
const unsigned int chan2[67] = {4500,4500, 550,1700, 500,1700, ... };
// ... chan3 bis chan9, volUp, volDown, chanUp, chanDown, onoff, mute
Teil 2: Arduino IoT Cloud einrichten
- Auf Arduino IoT Cloud → Neues Thing → Name: TVRemoteController.
- Board wählen: Arduino Nano 33 IoT (andere kompatible Boards möglich).
- Property hinzufügen: Kategorie Smart Home → Typ TV → Read & Write → Update: When the value changes.
Teil 3: Arduino Web Editor – Code ergänzen
EDIT SKETCH klicken → Web Editor öffnet sich mit Grundgerüst. Folgendes ergänzen:
Bibliothek & IR-Daten
#include <IRremote.h>
const unsigned int chan[9][67] = { {chan1}, {chan2}, {chan3}, {chan4}, {chan5}, {chan6}, {chan7}, {chan8}, {chan9} };
const unsigned int volUp[67] = { ... };
const unsigned int volDown[67] = { ... };
const unsigned int chanUp[67] = { ... };
const unsigned int chanDown[67] = { ... };
const unsigned int onoff[67] = { ... };
const unsigned int mute[67] = { ... };
IRsend irsend;
const int freq = 38; // 38 kHz Trägerfrequenz
IR-Sende-Funktion
void sendIR(const unsigned int buf[]) {
digitalWrite(LED_BUILTIN, HIGH);
irsend.sendRaw(buf, 67, freq);
delay(300); // Je nach TV anpassen
digitalWrite(LED_BUILTIN, LOW);
}
Callback onTvChange() vervollständigen
Wird aufgerufen, wenn Alexa die TV-Property ändert. Logik: Volume/Channel/ Mute/Power auswerten & passende IR-Sequenz senden.
void onTvChange() {
Serial.println("==================");
Serial.println("Switch: " + String(tv.getSwitch()));
Serial.println("Volume: " + String(tv.getVolume()));
Serial.println("Channel: " + String(tv.getChannel()));
Serial.println("Mute: " + String(tv.getMute()));
Serial.println("==================");
if (first) { // Initialisierung
prevSwitch = tv.getSwitch();
prevVolume = tv.getVolume();
prevChannel = tv.getChannel();
prevMute = tv.getMute();
first = false;
return;
}
// Volume geändert
if (tv.getVolume() > prevVolume) {
tv.setMute(false); prevMute = false;
for (int k = prevVolume + 1; k <= tv.getVolume(); k++) {
sendIR(volUp);
Serial.println("Volume requested:" + String(tv.getVolume()) + " Set:" + String(k));
}
prevVolume = tv.getVolume();
} else if (tv.getVolume() < prevVolume) {
tv.setMute(false); prevMute = false;
for (int k = prevVolume - 1; k >= tv.getVolume(); k--) {
sendIR(volDown);
Serial.println("Volume changed:" + String(tv.getVolume()) + " Set:" + String(k));
}
prevVolume = tv.getVolume();
}
// Mute geändert
if (tv.getMute() != prevMute && tv.getMute()) {
prevMute = tv.getMute(); sendIR(mute);
Serial.println("Mute changed:" + String(tv.getMute()));
} else if (tv.getMute() != prevMute && !tv.getMute()) {
prevMute = tv.getMute(); sendIR(mute);
Serial.println("Mute changed:" + String(tv.getMute()));
}
// Kanal geändert
if (tv.getChannel() != prevChannel) {
int newChannel = tv.getChannel();
if (newChannel > 0 && newChannel < 10) {
sendIR(chan[newChannel - 1]); // Direkte Zifferntaste
} else if (newChannel > 9) {
if (newChannel > prevChannel) {
for (int ch = prevChannel; ch < newChannel; ch++) {
sendIR(chanUp); Serial.println("Chan requested:" + String(newChannel) + " Set:" + String(ch));
}
} else {
for (int ch = prevChannel; ch > newChannel; ch--) {
sendIR(chanDown); Serial.println("Chan requested:" + String(newChannel) + " Set:" + String(ch));
}
}
}
prevChannel = newChannel;
Serial.println("Channel changed:" + String(tv.getChannel()));
}
// Ein/Aus geändert
if (tv.getSwitch() != prevSwitch) {
prevSwitch = tv.getSwitch();
if (tv.getSwitch()) sendIR(chan[6]); // Beispiel: Kanal 7 als "Ein" (anpassen!)
else sendIR(onoff);
Serial.println("Switch changed:" + String(tv.getSwitch()));
}
}
Teil 4: Amazon Alexa einrichten
- Amazon Alexa App installieren (iOS/Android), anmelden.
- In Skills & Spiele nach „Arduino“ suchen → Offizieller Arduino Skill aktivieren.
- Mit Arduino-Account verknüpfen (Login im Web-Editor).
- Geräte suchen → TVRemoteController wird gefunden.
- Gerät benennen (z. B. „Wohnzimmer TV“).
Bildfolge der Einrichtung (Screenshots in Originalartikel).
Sprachbeispiele
- „Alexa, mach den Fernseher lauter.“
- „Alexa, stummschalten.“ / „Alexa, Ton an.“
- „Alexa, nächster Kanal.“
- „Alexa, schalte den Fernseher ein/aus.“
Viel Spaß mit Alexa & IoT Cloud! Fragen in den Kommentaren.
Herstellungsprozess
- Deckenventilator per Alexa steuern – Schritt-für-Schritt-Anleitung
- Ultraschall-Schwebegerät mit Arduino bauen – Akustische Levitation Schritt für Schritt
- Universelle Android-Fernbedienung mit Arduino, 1Sheeld & IR-Steuerung
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
- Fernsteuerung eines Roboterarms per IoT: Eigenbau mit Arduino MKR1000
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- Heimtemperatur weltweit überwachen: Arduino Cloud Integration mit TMP36
- Arduino Rover per Firmata & Xbox One Gamepad steuern
- DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation