Je plafondventilator bedienen met Alexa: Stap-voor-stap handleiding
Onderdelen en benodigdheden
| Raspberry Pi 3 Model B | × | 1 |
| Arduino UNO | × | 1 |
| Relais (standaard) | × | 1 |
| Ventilatorregelaar | × | 1 |
Benodigde tools en machines
- Soldeerbout (standaard)
Apps en online diensten
- Arduino IDE
- Amazon Alexa Alexa Skills Kit
- Ngrok
Over dit project
Hier leg ik uit hoe ik mijn gewone plafondventilator slim maakte door Amazon Alexa te integreren voor snelheidsregeling. We gebruiken de Alexa Skills Kit voor de spraakcommando's en ngrok als tunneling-service om verzoeken naar de lokale Raspberry Pi-server te sturen, die de Arduino UNO aanstuurt om het juiste relais in te schakelen.

Lokale Raspberry Pi-server instellen
Benodigde pakketten:
- Python PIP:
sudo apt-get install python-pip(standaard in Python 2.7/3) - Flask:
pip install flask - flask-ask:
pip install flask-ask(Alexa-vriendelijke extensie) - pyserial:
sudo apt-get install pyserial - libpython2.7-dev:
sudo apt-get install libpython2.7-dev
Python-script voor de server:
from flask import Flask
from flask_ask import Ask, statement
import serial
ser = serial.Serial("/dev/ttyAMA0", 9600)
app = Flask(__name__)
ask = Ask(app, '/')
@ask.launch
@ask.intent("FanOn")
def on():
ser.write(b'1')
return statement("Plafondventilator aangezet.")
@ask.intent("FanOff")
def off():
ser.write(b'0')
return statement("Plafondventilator uitgezet.")
@ask.intent("FanLevelUp")
def up():
ser.write(b'+')
return statement("Plafondventilator sneller.")
@ask.intent("FanLevelDown")
def down():
ser.write(b'-')
return statement("Plafondventilator langzamer.")
if __name__ == "__main__":
app.run(debug=True)
Draai dit script en voeg toe aan autostart van de RPi.
Ngrok installeren
Ngrok maakt je lokale server publiek bereikbaar. Download de ARM-versie van ngrok.com, pak uit en start:
./ngrok http 5000
Alexa Skill aanmaken
- Registreer op Amazon Developer Console.
- Kies "Alexa Skills Kit" → "Add new skill".
- Geef een naam en invocation name (bijv. "ventilator").
- Definieer intents en sample utterances:
{
"intents": [
{ "intent": "FanOn" },
{ "intent": "FanOff" },
{ "intent": "FanLevelUp" },
{ "intent": "FanLevelDown" }
]
}
Sample utterances:
FanOn say fan on
FanOn say on
FanOff say off
FanOff say fan off
FanLevelUp say fan level up
FanLevelUp say increase fan speed
FanLevelDown say fan level down
FanLevelDown say decrease fan speed


Bij "Endpoint" kies HTTPS en plak de Ngrok-URL. Kies voor SSL-certificaat optie 2.
Test of Ngrok en Python-script draaien. Controleer of verzoeken binnenkomen.
Arduino-code
Upload de sketch en sluit de Arduino aan op de Raspberry Pi volgens het schema.
int Fan[] = {13,12,11,10,9,8};
int n=0;
void reset();
void set(char);
void setup() {
for(int i=0;i<6;i++) pinMode(Fan[i], OUTPUT);
Serial.begin(9600);
}
void loop() {
char x;
if (Serial.available()) {
x=Serial.read();
reset();
set(x);
}
}
void reset() {
for(int i=0;i<6;i++) digitalWrite(Fan[i], LOW);
}
void set(char x) {
switch (x) {
case '1': n=1; break;
case '+': n++; break;
case '-': n--; break;
case '0': n=0; break;
}
digitalWrite(Fan[n],HIGH);
}
Hardware
Sluit de hardware aan volgens het schema.

Veel plezier! Maak andere apparaten op dezelfde manier spraakgestuurd.
Code
Arduino sketch Arduino
int Fan[] = {13,12,11,10,9,8};
int n=0;
void reset();
void set(char);
void setup() {
for(int i=0;i<6;i++) pinMode(Fan[i], OUTPUT);
Serial.begin(9600);
}
void loop() {
char x;
if (Serial.available()) {
x=Serial.read();
reset();
set(x);
}
}
void reset() {
for(int i=0;i<6;i++) digitalWrite(Fan[i], LOW);
}
void set(char x) {
switch (x) {
case '1': n=1; break;
case '+': n++; break;
case '-': n--; break;
case '0': n=0; break;
}
digitalWrite(Fan[n],HIGH);
}
Python Server code Python
from flask import Flask
from flask_ask import Ask, statement
import serial
ser = serial.Serial("/dev/ttyAMA0", 9600)
app = Flask(__name__)
ask = Ask(app, '/')
@ask.launch
@ask.intent("FanOn")
def on():
ser.write(b'1')
return statement("Ceiling Fan turned on.")
@ask.intent("FanOff")
def off():
ser.write(b'0')
return statement("Ceiling Fan turned off.")
@ask.intent("FanLevelUp")
def up():
ser.write(b'+')
return statement("Ceiling Fan speed up.")
@ask.intent("FanLevelDown")
def down():
ser.write(b'-')
return statement("Ceiling Fan speed down.")
if __name__ == "__main__":
app.run(debug=True)
Schema's

Productieproces
- Een Betaalbaar Draadloos Sensornetwerk Bouwen voor Uw Huis
- Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
- Arduino Power Control Center: N-FET, P-FET, Relais & RTC Kit
- LED's bedienen met Alexa via Raspberry Pi – Eenvoudige stapsgewijze handleiding
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
- Twee Stappenmotors Sturen met Arduino Nano & Joystick – Simpele Tutorial
- Een Arduino LED besturen met Cortana via Bluetooth op Windows 10
- Je TV bedienen met Alexa via Arduino IoT Cloud – stapsgewijze handleiding
- Centrale Verwarming Slim Maken met Arduino en OpenTherm
- 25 kHz 4-pins PWM-ventilatorbesturing met Arduino Uno – Bouw, Code & Test