Sergi Tur Badenas / @acacha1
Temes: Black -
White (default) -
League -
Sky -
Simple
Moon
Arduino és una plataforma open-source per a la electrònica amb un hardware i software fàcil d'utilitzar:
Un microcontrolador és un petit i simple computador.
$ sudo apt-get install gcc-avr avr-libc
$ cd && mkdir arduino && cd arduino
$ wget https://downloads.arduino.cc/arduino-1.6.6-linux64.tar.xz
$ sudo apt-get install xz-utils
$ tar xf arduino-1.6.6-linux64.tar.xz
$ cd arduino-1.6.6
$ sudo usermod -aG dialout
$ ./arduino
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Hardware Open Source i electrònica fàcil https://www.makeblock.es/
Basada en Arduino Uno. Me orion
vs
Mbot robot educacional!
Mcore és la placa integrada al robot Mbot
Permet connexió USB o per bluetooth o Wifi (mochila wifi) amb mòduls intercanviables
Mòdul per a Scratch. Programació per blocs
No està per Linux però funciona en Wine (tot i que no he aconseguit fer anar ports sèrie). Es pot copiar el codi a Arduino IDE i instal·lar
Requeriments per poder programar la IoT amb Javascript:
$ cd
$ wget https://nodejs.org/dist/v4.4.4/node-v4.4.4-linux-x64.tar.xz
$ tar xvzf node-v4.4.4-linux-x64.tar.gz
$ editor .bashrc
export PATH=~/node-v4.4.4-linux-x64/bin:${PATH}
$ bash
$ which npm
/home/sergi/node-v4.4.4-linux-x64/bin/npm
$ which node
/home/sergi/node-v4.4.4-linux-x64/bin/node
$ npm -v
2.14.7
$ node -v
v4.4.4
$ npm install cylon cylon-firmata
var Cylon = require('cylon');
Cylon.robot({
connections: {
arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }
},
devices: {
led: { driver: 'led', pin: 13 }
},
work: function(my) {
every((1).second(), my.led.toggle);
}
}).start();
/dev/ttyS0 -> serial normal
/dev/ttyUSB0 -> Serial USB. Bluetooth emparellar amb:
$ sudo apt-get install blueman
$ blueman-manager
/dev/rfcomm0 -> Serial Bluetooth
Firmware multipropòsit que permet executar software al microcontrolador des de fora del microcontrolador. No cal actualitzar/instal·lar firmware al microcontrolador per cada programa que fem.
Protocol utilitzat per accedir a microcontroladors executant codi des d'un ordinador.
El programa JavaScript s'executa al host machine utilitzant Node.js. El programa transmet operacions bàsiques de I/O al microcontrolador utilitzant el protocol Firmata a través d'una connexió sèrie.
Firmata converteix el microcontrolador en un thin client.
El podem instal·lar desde la IDE d'Arduino
Programa per testejar protocol firmata i dispositius amb el firmware Firmata instal·lat. Firmata test
$ wget http://www.pjrc.com/teensy/firmata_test/firmata_test.64bit_2
$ sudo chmod +x firmata_test.64bit_2
$ ./firmata_test.64bit_2
Board preparada! Ara podem utilitzar Javascript per interactuar amb el microcontrolador. De fet podem utilitzar múltiples idiomes de programació com Python, Java, PHP vegeu Firmata client libraries.
JavaScript Robotics i IoT programming framework. Creat per Rick Waldron. Requeriments:
$ npm install johnny-five
Codi a github https://github.com/acacha/javascript-bots: blink_led_j5.js
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(13);
led.blink(500);
});
Més exemples$ node blink_led_j5.js
1463669542289 Device(s) /dev/ttyUSB1
1463669542296 Connected /dev/ttyUSB1
1463669545805 Repl Initialized
new five.Board({ port: "/dev/rfcomm0" });
$sudo node blink_led_j5_bt.js
1463669857246 Connected /dev/rfcomm0
var five = require("johnny-five");
var max_speed_l = 255;
var max_speed_r = 255;
// set up the input
var stdin = process.openStdin();
require('tty').setRawMode(true);
var board = new five.Board({port: process.argv[2]});
var l_motor = r_motor = null;
board.on("ready", function(err) {
if (err){
console.log(err);
return;
}
l_motor = new five.Motor({pins: {pwm: 6, dir: 7}});
r_motor = new five.Motor({pins: {pwm: 5, dir: 4}});
console.info("Board connected. Robot set up. LRUD to control");
});
stdin.on('keypress', function(chunk, key) {
// process the keypresses
if (key) {
switch (key.name) {
case "up":
l_motor.reverse(max_speed_l);
r_motor.forward(max_speed_r);
break;
case "down":
r_motor.reverse(max_speed_r);
l_motor.forward(max_speed_l);
break;
case "left":
l_motor.forward(max_speed_l);
r_motor.forward(max_speed_r);
break;
case "right":
r_motor.reverse(max_speed_r);
l_motor.reverse(max_speed_l);
break;
case "space":
l_motor.stop();
r_motor.stop();
break;
}}});
$ sudo su
cd /home/sergi/Code/Mbot/mbot_nodebots/examples
nvm install v0.12.7
nvm list
v0.12.7
nvm use v0.12.7
node -v
v0.12.7
rfcomm connect 0 // Només si encara no teniu connectat el dispositiu per bluetooth. Potser ja l'heu connectat utilitzant les eines de Gnome per bluetooth o Blueman manager
node motors.js /dev/rfcomm0
“Write once deploy everywhere!“
https://github.com/rwaldron/johnny-five/blob/master/docs/repl.md
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
console.log("Ready event. Repl instance auto-initialized!");
var led = new five.Led(13);
led.on();
this.repl.inject({
// Allow limited on/off control access to the
// Led instance from the REPL.
on: function() {
led.on();
},
off: function() {
led.off();
}
});
});
>> on() // will turn on the LED
// or
>> off() // will turn off the LED
$ npm install socket.io express --save
URL: http://localhost:3000
// server.js
var express = require('express');
var app = express();
var httpServer = require("http").createServer(app);
var five = require("johnny-five");
var io=require('socket.io')(httpServer);
var port = 3000;
app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res) {
res.sendFile(__dirname + '/public/index.html');
});
httpServer.listen(port);
console.log('Server available at http://localhost:' + port);
var led;
//Arduino board connection
var board = new five.Board();
board.on("ready", function() {
console.log('Arduino connected');
led = new five.Led(13);
});
//Socket connection handler
io.on('connection', function (socket) {
console.log(socket.id);
socket.on('led:on', function (data) {
led.on();
console.log('LED ON RECEIVED');
});
socket.on('led:off', function (data) {
led.off();
console.log('LED OFF RECEIVED');
});
});
console.log('Waiting for connection');
Al client (navegador/pàgina web o app standalone node.js) només cal executar:
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
var socket = io('http://localhost:3000');
socket.emit('led:on');
socket.emit('led:off');
Permeten treballar de forma asíncrona
/**
* Go Forward
*/
var go = function(dir,time) {
return new Promise( function resolve) {
//go code here
});
this.repl.inject({
go: go
});
};