Za upravljanje enosmernega motorja potrebujemo H-most ("H-bridge"); uporabili bomo H-most DRV883 "Single Brushed DC Motor Driver Carrier, Pololu #2990". Električna shema priklopa H-mostu je prikazana na naslednji sliki:
Izgled vezja iz zgornje strani je prikazan na naslednji sliki:
Izgled realizacije na ploščici za prototipiranje je prikazan na naslednji sliki:
Izgled vezave in postavitev je prikazana na naslednji sliki:
Pogled na H-most:
Pri programju najprej inicializiramo ploščo:
var board = new firmata.Board("/dev/ttyACM0", function(){ console.log("Aktiviramo pin 2"); board.pinMode(2, board.MODES.OUTPUT); // pin za smer na H-mostu console.log("Aktiviramo pin 3"); board.pinMode(3, board.MODES.PWM); // Pulse Width Modulation - hitrost});Nato definiramo nove funkcije znotraj vtičnika ("socket"):
io.sockets.on("connection", function(socket){ socket.on("pošljiPWM", function(pwm){ board.analogWrite(3,pwm); // zapišem hitrost pwm na pin 3 console.log("PWM poslan." + pwm); }); socket.on("levo", function(vrednost) { board.digitalWrite(2,vrednost); }); socket.on("desno", function(vrednost) { board.digitalWrite(2,vrednost); }); socket.on("stop", function(vrednost) { board.analogWrite(3,vrednost); }); });Na strani klienta ustvarimo dodatne gumbe in vnosno polje za določitev vrednosti PWM ("Pulse Width Modulation") na nožici 3:
PWM: <input id="pwm" value=100 /><button id="gumbPošljiPWM" onClick="pošljiPWM()">Pošlji PWM</button><button id="gumbLevo" onClick="levo()">Levo</button><button id="gumbDesno" onClick="desno()">Desno</button><button id="gumbStop" onClick="stop()">Stop</button>Nato zapišemo funkcije, ki jih poženemo s pritiskom na zgoraj ustvarjene gumbe:
function pošljiPWM () { vrednostPWM = document.getElementById("pwm").value; socket.emit("pošljiPWM", vrednostPWM);}function levo () { socket.emit("levo", 1);}function desno() { socket.emit("desno", 0);}function stop() { socket.emit("stop", 0);}Izgled uporabniškega vmesnika je prikazan na naslednji sliki:
Koda primera 13, .js
var http = require("http").createServer(handler); // ob zahtevi req -> handlervar firmata = require("firmata");var fs = require("fs"); // knjižnjica za delo z datotekami (File System fs)var io = require("socket.io").listen(http); // knjiž. za komunik. prek socket-a console.log("Priklop Arduina");var board = new firmata.Board("/dev/ttyACM0", function(){ console.log("Aktiviramo pin 2"); board.pinMode(2, board.MODES.OUTPUT); // pin za smer na H-mostu console.log("Aktiviramo pin 3"); board.pinMode(3, board.MODES.PWM); // Pulse Width Modulation - hitrost});function handler(req, res) { fs.readFile(__dirname + "/primer13.html", function(err, data) { if (err) { res.writeHead(500, {"Content-Type": "text/plain"}); return res.end("Napaka pri nalaganju html strani!"); } res.writeHead(200); res.end(data); });}http.listen(8080); // strežnik bo poslušal na vratih 8080var želenaVrednost = 0; // želeno vrednost postavimo na 0console.log("Zagon sistema"); // izpis sporočila o zagonuboard.on("ready", function(){ console.log("Plošča pripravljena"); board.analogRead(0, function(value){ želenaVrednost = value; // neprekinjeno branje pina A0 }); io.sockets.on("connection", function(socket){ socket.on("pošljiPWM", function(pwm){ board.analogWrite(3,pwm); // zapišem hitrost pwm na pin 3 console.log("PWM poslan." + pwm); }); socket.on("levo", function(vrednost) { board.digitalWrite(2,vrednost); }); socket.on("desno", function(vrednost) { board.digitalWrite(2,vrednost); }); socket.on("stop", function(vrednost) { board.analogWrite(3,vrednost); }); }); }); // konec board.on("ready")Koda primera 13., .html:
<!DOCTYPE html><meta charset = utf8><html><head> <title>Primer z grafom</title></head><body><p></p>PWM: <input id="pwm" value=100 /><button id="gumbPošljiPWM" onClick="pošljiPWM()">Pošlji PWM</button><button id="gumbLevo" onClick="levo()">Levo</button><button id="gumbDesno" onClick="desno()">Desno</button><button id="gumbStop" onClick="stop()">Stop</button><script type="text/javascript" src="/socket.io/socket.io.js"></script><script type="text/javascript">var socket = io.connect("192.168.1.136:8080"); // povezava na strež.function pošljiPWM () { vrednostPWM = document.getElementById("pwm").value; socket.emit("pošljiPWM", vrednostPWM);}function levo () { socket.emit("levo", 1);}function desno() { socket.emit("desno", 0);}function stop() { socket.emit("stop", 0);}</script></body></html>