Controle seu Ventilador de Teto com Alexa: Guia Passo a Passo
Componentes e Materiais
| Raspberry Pi 3 Model B | × | 1 |
| Arduino UNO | × | 1 |
| Relé (genérico) – 5V para interface direta com Arduino ou placa de relé | × | 1 |
| Regulador de Ventilador – qualquer tipo com terminais acessíveis; sugere-se modelos antigos resistivos | × | 1 |
Ferramentas Necessárias
- Ferro de Solda (genérico)
Aplicativos e Serviços Online
- Arduino IDE
- Amazon Alexa Skills Kit
- Ngrok (túnel seguro para expor servidor local)
Sobre o Projeto
Detalho como transformei meu ventilador de teto comum em um ventilador inteligente controlado por Amazon Alexa para ajuste de velocidade. Usamos Alexa Skills Kit para iniciar a mudança de velocidade, e o serviço de túnel ngrok para rotear a requisição ao servidor Raspberry Pi local, que comanda o Arduino UNO a acionar o relé correspondente.
Configurando o Servidor Local no Raspberry Pi
Serviços necessários:
- Python PIP:
sudo apt-get install python-pip(já incluso no Python 2.7/3) - Flask:
pip install flask– microframework web Python - Flask-Ask:
pip install flask-ask– extensão para skills Alexa - PySerial:
sudo apt-get install python-serial– comunicação serial - libpython2.7-dev:
sudo apt-get install libpython2.7-dev
Script Python (alexa_fan.py) – servidor Flask + Flask-Ask:
from flask import Flask
from flask_ask import Ask, statement
import serial
ser = serial.Serial("/dev/ttyAMA0", 9600) # Serial para Arduino
app = Flask(__name__)
ask = Ask(app, '/')
@ask.launch
@ask.intent("FanOn")
def on():
ser.write(b'1')
return statement("Ventilador de teto ligado.")
@ask.intent("FanOff")
def off():
ser.write(b'0')
return statement("Ventilador de teto desligado.")
@ask.intent("FanLevelUp")
def up():
ser.write(b'+')
return statement("Velocidade do ventilador aumentada.")
@ask.intent("FanLevelDown")
def down():
ser.write(b'-')
return statement("Velocidade do ventilador diminuída.")
if __name__ == "__main__":
app.run(debug=True)
Execute este script e adicione ao autostart do RPi.
Ngrok – Túnel Seguro
Baixe ngrok para ARM em ngrok.com. Descompacte e execute:
./ngrok http 5000
Isso gerará uma URL HTTPS pública (ex: https://abc123.ngrok.io) que encaminha para localhost:5000 do RPi.
Criando a Alexa Skill
- Cadastre-se em Amazon Developer Console
- Entre no console → Alexa Skills Kit → Add New Skill
- Nome da skill + Invocation Name (ex: "ventilador")
- Defina Intents e Sample Utterances:
{
"intents": [
{ "intent": "FanOn" },
{ "intent": "FanOff" },
{ "intent": "FanLevelUp" },
{ "intent": "FanLevelDown" }
]
}
FanOn ligar ventilador
FanOn ventilador on
FanOff desligar ventilador
FanOff ventilador off
FanLevelUp aumentar velocidade
FanLevelUp ventilador mais rapido
FanLevelDown diminuir velocidade
FanLevelDown ventilador mais devagar
- Em Configuration: selecione HTTPS, cole a URL do ngrok (ex:
https://abc123.ngrok.io) - SSL Certificate: escolha segunda opção (meu certificado é assinado por autoridade confiável – ngrok usa Let's Encrypt)
- Teste: certifique-se que ngrok e script Python estão rodando. Use o simulador no console Alexa.
Código Arduino
Carregue no Arduino UNO e conecte ao Raspberry Pi via serial (GPIO UART /dev/ttyAMA0) conforme esquemático.
int Fan[] = {13, 12, 11, 10, 9, 8}; // Pinos para 6 velocidades (relés)
int n = 0; // Velocidade atual (0=off, 1-5=velocidades)
void reset() {
for (int i = 0; i < 6; i++) digitalWrite(Fan[i], LOW);
}
void set(char cmd) {
switch (cmd) {
case '1': n = 1; break; // Liga velocidade 1
case '+': n++; break; // Aumenta velocidade
case '-': n--; break; // Diminui velocidade
case '0': n = 0; break; // Desliga
}
if (n > 5) n = 5; // Limite máximo
if (n < 0) n = 0; // Limite mínimo
digitalWrite(Fan[n], HIGH); // Ativa relé correspondente
}
void setup() {
for (int i = 0; i < 6; i++) pinMode(Fan[i], OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
char cmd = Serial.read();
reset();
set(cmd);
}
}
Hardware – Ligações
Conforme esquemático: Arduino controla 6 relés (um por velocidade do regulador). O regulador original do ventilador é mantido; os relés comutam os taps do enrolamento resistivo (ou triacs em modelos modernos).
Dica: Use relés de 5V com driver (transistor/optacoplador) ou módulo relé pronto. Isolamento da rede elétrica é essencial para segurança!
Pronto!
Agora diga: "Alexa, peça ao ventilador para aumentar a velocidade" ou "Alexa, diga ao ventilador para ligar". Adapte para outros eletrodomésticos!
Códigos
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); }
Servidor Python (Flask-Ask)
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("Ventilador de teto ligado.")
@ask.intent("FanOff") def off(): ser.write(b'0'); return statement("Ventilador de teto desligado.")
@ask.intent("FanLevelUp") def up(): ser.write(b'+'); return statement("Velocidade do ventilador aumentada.")
@ask.intent("FanLevelDown") def down(): ser.write(b'-'); return statement("Velocidade do ventilador diminuída.")
if __name__ == "__main__": app.run(debug=True)
Esquemático
Processo de manufatura
- Construa uma Rede de Sensores Sem Fio Acessível para Sua Casa
- Mealheiro Inteligente: Controlar Aceitador de Moedas com Arduino Nano
- Central de Controle de Potência Arduino: N-FET, P-FET, Relé e Kit RTC
- Controlar LEDs com Alexa via Raspberry Pi – Guia Passo a Passo Fácil
- Controlar um LED via Bluetooth com Arduino – Guia DIY Simples
- Controlador de Umidificador DIY com Arduino e Relé – Configuração Segura de Alta Tensão
- Controle Dois Motores de Passo com Arduino Nano e Joystick – Tutorial Simples
- Controle de LED Arduino com Cortana via Bluetooth no Windows 10
- Controle sua TV com Alexa via Arduino IoT Cloud – Guia Passo a Passo
- Controle de Ventoinha PWM 4 Pinos 25 kHz com Arduino Uno – Montagem, Código e Teste