Controla tu Ventilador de Techo con Alexa: Guía Paso a Paso
Componentes y materiales
| Componente | Cantidad |
|---|---|
| Raspberry Pi 3 Model B | 1 |
| Arduino UNO | 1 |
| Relé (genérico) | 1 |
| Regulador de ventilador | 1 |
Herramientas y máquinas necesarias
- Soldador (genérico)
Aplicaciones y servicios online
- Arduino IDE
- Amazon Alexa Skills Kit
- Ngrok
Sobre el proyecto
Detallo cómo convertí mi ventilador de techo normal en uno inteligente integrando Amazon Alexa para control de velocidad. Usamos Alexa Skill Kit para iniciar el cambio de velocidad, y el servicio de túnel ngrok para enrutar la petición a nuestro servidor RPi local, que ordena al Arduino UNO activar el relé correspondiente.
Configurar servidor local Raspberry Pi
Servicios necesarios:
- Python PIP:
sudo apt-get install python-pip(en Python 2.7/3 ya viene) - Flask:
pip install flask - flask-ask:
pip install flask-ask(extensión Flask para Alexa) - pyserial:
sudo apt-get install pyserial - libpython2.7-dev:
sudo apt-get install libpython2.7-dev
Script Python para el servidor:
from flask import Flask
from flask_ask import Ask, statement
import requests
import json
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("Ventilador de techo encendido.")
@ask.intent("FanOff")
def off():
ser.write(b'0')
return statement("Ventilador de techo apagado.")
@ask.intent("FanLevelUp")
def up():
ser.write(b'+')
return statement("Velocidad del ventilador aumentada.")
@ask.intent("FanLevelDown")
def down():
ser.write(b'-')
return statement("Velocidad del ventilador disminuida.")
if __name__ == "__main__":
app.run(debug=True)
Ejecuta este script y añádelo al inicio automático de tu RPi.
3. Descargar Ngrok
Ngrok es plataforma de túnel seguro para poner tu dispositivo online. Descarga para ARM en https://ngrok.com/. Descomprime y ejecuta:
./ngrok http 5000
Alexa Skill
Ve a Amazon Developer y regístrate. Entra en Developer Console > Alexa Skills Kit > Add new skill.
Nombre de la skill y nombre de invocación (cumple condiciones).
Intents:
{
"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
Guarda y continúa. En endpoint selecciona HTTPS y pega el link seguro generado por ngrok. Elige segunda opción para certificado SSL.
Para probar: asegúrate que ngrok y script Python estén corriendo. Verás que los servidores reciben peticiones y actualizan.
Código Arduino
Sube el sketch adjunto a tu Arduino y conéctalo a la Raspberry Pi como en el esquemático.
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
Conecta el hardware como se muestra en el esquemático.
¡Feliz creación! Haz cualquier otro electrodoméstico activable por voz de forma similar :)
Código
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);
}
Código Servidor Python
from flask import Flask
from flask_ask import Ask, statement
import requests
import json
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)
Esquemático
Así se conectan los dispositivos entre sí
Proceso de manufactura
- Construya una Red de Sensores Inalámbrica Económica para su Hogar
- Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
- Centro de Control de Potencia Arduino: N-FET, P-FET, Relé y RTC
- Controla LEDs con Alexa mediante Raspberry Pi – Guía paso a paso fácil
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Controlador de Humidificador DIY con Arduino y Relé: Configuración Segura de Alto Voltaje
- Controla Dos Motores Paso a Paso con Arduino Nano y Joystick - Tutorial Sencillo
- Controlar un LED de Arduino con Cortana vía Bluetooth en Windows 10
- Controla tu TV con Alexa mediante Arduino IoT Cloud: Guía Paso a Paso
- Integra tu calefacción central con Arduino para control inteligente
- Control de Ventilador PWM de 4 Pines a 25 kHz con Arduino Uno – Montaje, Código y Pruebas