Edison motoriserade plattform (Intel IoT) (1 / 2 steg)
Steg 1: Kod för plattform
Node.js på Edison
Jag använde en enkel node.js ansökan för programmet. Inte mycket sofistikerad; Jag skrev det allt i linje, men det gjorde allt som vi ville ha det till. Koden från början vände på en blå LED att Visa systemet fungerade, då sätta upp en webbserver som tjänade upp grundläggande HTML-sidan. Här öppnas en web socketanslutning till servern och kunde skicka några kommandon i systemet.
Webbsidan var bara för att testa, så var inte mycket sofistikerad. Den hade tre knappar för varje kommando och skulle logga svar som var precis samma kommandon studsade tillbaka. Edison måste vara ansluten till wifi tillgängliga. Detta gjordes med hjälp av den ssh-anslutning med XDK. Detta är ganska lätt och behöver bara göras en gång. Det kommer ihåg anslutningen. Om systemet är stängs av och startas om, startar programmet automatiskt igen. En gång började, kunde flera personer kontakt med deras smartphone webbläsare och skicka ett meddelande till rotera den roterande skivan. Enkel men tilltalande demo.
Det är lätt att öppna en webbserver med hjälp av "http" modul; det behövde inte någon routing anläggning, som vi tjänade bara en enda sida. Den sidan var förladdade till en sträng, "huvudsidan", och när webbläsaren är riktad till url "localhost:1337". Om andra bibliotek behövs, läggs de till i konfigurationsfilen och XDK kommer att ladda ner dem till Edison innan du kör programmet, gör en "npm installera".
Starta web-tjänst
var http = require('http');
var app = http.createServer (funktion (req, res) {
'Använd strikt';
res.writeHead (200, {"Content-Type": "text/html"});
Res.End(mainPage);
{}) .listen(1337);
Console.log ("Web lyssnar på port 1337");
Uttaget web används koden för att plocka upp tre olika meddelanden. Kommandona "a" och "b" användes för att vända motorer, "c" användes för att sätta systemet i "centrera justering" läge. Jag använde "socket.io" biblioteket för att öppna en socket webblyssnare.
Skapa socket.io server
var io = require('socket.io')(app);
Console.log ("enkel socket.io meddelanden...").
Bifoga en "anslutning" händelsehanterare till servern
IO.on ("anslutning", funktion (socket) {
'Använd strikt';
Console.log ("en användare anslutna');
Avger en händelse samt ett meddelande som
socket.Emit ansluten ("", "Välkommen");
Bifoga en 'meddelande' händelsehanterare till uttaget / / a och b kommandon kommer in med en nummerparameter rotation
socket.on ('meddelande', funktion (msg) {
Console.log ('meddelande ->' + msg);
var args = msg.split("");
var delta = parseInt(args[1]);
Console.log ("värde:" + delta);
om (delta! = 0) {
Switch(args[0]) {
fallet "a":
rotate(motorA, delta);
bryta;
fallet "b":
rotate(motorB, delta);
bryta;
fallet "c":
Centre();
bryta;
standard:
standard koden kloss, gör ingenting
}
}
socket.Emit ('meddelande', msg);
});
Motorerna sätts upp med denna kod att upprätta anslutningen och hastighet; Detta anger stiften som motorn är ansluten till och hastigheten. Siffrorna är stiften visas på expansionskort.
var Uln200xa_lib = require('jsupm_uln200xa');
Instansiera en stegmotor på en ULN200XA Darlington Motor Driver
Detta testades med den Grove inriktad steg Motor med förare
Instansiera en ULN2003XA stepper objekt
var motorA = ny Uln200xa_lib. ULN200XA (4096, 8, 9, 10, 11);
var motorB = nya Uln200xa_lib. ULN200XA (4096, 4, 3, 5, 6);
motorA.angle = 0;
motorB.angle = 0;
var setSpeed = funktion (motor, hastighet) {
motor.setSpeed(speed); 5 varv
}
När kommandona "a" och "b" anländer de använder parametern för att ange hur mycket av en vinkel att vända; negativa delta vinkel används för att vända riktning. Denna funktion kallas från web socket koden när ett meddelande anländer. Stepper motor tar värdet 4096 att vända ett fullt varv. Det skulle förmodligen vara mer logiskt tur detta i en vinkel i grader.
var rotera = funktion (motor, delta) {
om (delta > 0) {
motor.setDirection (Uln200xa_lib. ULN200XA. DIR_CW);
} annat {
motor.setDirection (Uln200xa_lib. ULN200XA. DIR_CCW);
}
motor.stepperSteps(Math.abs(delta));
motor.Angle += delta;
}
När kommandot "c" kom, sätta jag systemet i ett center-läge, där jag kunde använda joysticken flytta två motorerna till en uppsättning startposition. X och Y rörelser motsvarar varje motor. Ett enkelt tryck på knappen användes för att återgå till normalläget.
Hack day koden är på min GitHub sidor. Det kan inte vara särskilt snyggt, men kan vara bra att visa hela. https://github.com/happyt/Edison-Platform