Alexa Controlled Smart Fan
Created by Alvin O'garro and Clay Eckman
Introduction
Alexa Controlled Smart Fan allows the user to use voice commands via Alexa to remotely control a fan. Available commands include those to turn the fan on/off, control fan speed, and set the fan to mode which sets fan speed based on temperature feedback.
Commands
- Turn off
- Turn on manual mode
- Turn up speed
- Turn down speed
- Turn on temperature feedback mode
- Set target temperature to "__"
Wiring
Mbed | TB6612FNG H Bridge Breakout Board | DC Motor/Fan | TMP36 Temp Sensor | RJ45 Ethernet Port | External 5V |
p5 | AIN2 | ||||
p6 | AIN1 | ||||
p15 | Vout | ||||
RU- | p8 | ||||
RU+ | p7 | ||||
TU- | p2 | ||||
TU+ | p1 | ||||
Vout | Vcc, STBY | Vs | |||
GND | GND | GND | |||
p23 | PWMA | ||||
AO1 | Lead+ | ||||
AO2 | Lead- | ||||
VMOT | X |
Video Demo
Alexa Code
Alexa Intent Code:
/* eslint-disable func-names */ /* eslint quote-props: ["error", "consistent"]*/ /** * This sample demonstrates a simple skill built with the Amazon Alexa Skills * nodejs skill development kit. * This sample supports multiple lauguages. (en-US, en-GB, de-DE). * The Intent Schema, Custom Slots and Sample Utterances for this skill, as well * as testing instructions are located at https://github.com/alexa/skill-sample-nodejs-fact **/ 'use strict'; const http = require('http'); var stringify = require('querystring').stringify; const Alexa = require('alexa-sdk'); //const APP_ID = undefined; // TODO replace with your app ID (OPTIONAL). const serverResponses = { 'TurnOnFan' : '11', 'TurnOffFan' : '01', 'SpeedUp' : '11', 'SlowDown' : '10', 'EnterControlMode' : '20', 'ExitControlMode' : '10' } const alexaResponses = { 'TurnOnFan' : 'Turning On Fan', 'TurnOffFan' : 'Turning Off Fan', 'SpeedUp' : 'Turning Up Fan', 'SlowDown' : 'Turning Down Fan', 'EnterControlMode' : 'Entering Control Mode', 'ExitControlMode' : 'Exiting Control Mode' }; //helper method to send data to server var sendCommand = function (command, alexaContext) { var data = stringify({ 'command' : command}); var options = { //host: 'http://webhook.site/e9291d8d-4142-4e02-9c20-d12208762c49', host: '104.236.83.105', //port: '5000', path: '/', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var callback = function(response) { var str = '' response.on('data', function (chunk) { str += chunk; }); response.on('end', function () { console.log(str); alexaContext.emit(':tell', alexaResponses[command]); }); } var req = http.request(options, callback); req.on('error', function(e) { alexaContext.emit("i could not connect to m bed server"); }); req.write(data); req.end(); }; const handlers = { 'LaunchRequest': function () { //this.emit('GetFact'); this.emit('TurnOnFan'); }, 'TurnOnFan': function () { sendCommand('TurnOnFan', this); }, 'TurnOffFan': function () { sendCommand('TurnOffFan', this); }, 'SpeedUp': function () { sendCommand('SpeedUp', this); }, 'SlowDown': function () { sendCommand('SlowDown', this); }, 'EnterControlMode': function () { sendCommand('EnterControlMode', this); }, 'ExitControlMode': function () { sendCommand('ExitControlMode', this); }, 'AMAZON.HelpIntent': function () {/* const speechOutput = this.t('HELP_MESSAGE'); const reprompt = this.t('HELP_MESSAGE'); this.emit(':ask', speechOutput, reprompt);*/ }, 'AMAZON.CancelIntent': function () {/* this.emit(':tell', this.t('STOP_MESSAGE')); */ }, 'AMAZON.StopIntent': function () {/* this.emit(':tell', this.t('STOP_MESSAGE')); */ }, }; exports.handler = function (event, context) { const alexa = Alexa.handler(event, context); //alexa.APP_ID = APP_ID; // To enable string internationalization (i18n) features, set a resources object. //alexa.resources = languageStrings; alexa.registerHandlers(handlers); alexa.execute(); }; lambdafunction.txt Open with Google Docs Displaying lambdafunction.txt.
Mbed Code
Import programFinal_Project_Alvin_Clay
Alexa Smart Fan
Please log in to post comments.