Estas diapositivas: slides.cuban.tech/nodebots.html
Red: cubantech
Contraseña: meet-ups
- Este taller se basa en gran medida en un taller de NY-Javascript (ver bit.ly/nyjs-nodebots)
- ... que se basa en gran medida en un taller de Francis Gulotta y Rick Waldron
- Puede encontrar las diapositivas para ese taller en gul.ly/3tjj
- Puedes inscribirte en uno de sus talleres en la página Nodebots NYC Meetup page
Ser excelente el uno con el otro
Próximos Eventos CubanTech
Si tiene problemas para encontrar un componente, háganoslo saber y le conseguiremos un reemplazo.
- LEDs (diodos emisores de luz)
- Botones
- Servos
Siéntase libre de seleccionar los componentes que más le gusten y completar los retos que más le interesen.
--
Descarga Node desde LAN
--
mkdir nodebots
cd nodebots
--
npm install johnny-five
.... con ....
--
TODO : Instalación de Document Docker
- Permite a Johnny-Five comunicarse con el Arduino a través de USB
- La mayoría de los Arduinos ya tienen instalados los Estándar Firmatas de talleres anteriores
- Vamos a comprobar que tu Arduino ya tiene instalado el Estándar Firmata!
Crear el fichero
- Ve a tu directorio de nodebots
- Cree un archivo llamado test.js
- Copie el código que aparece a continuación y guarde
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(13);
led.blink(500);
});
Ejecute el código
node test.js
Si funciona, ¡continúe! →
Si no es así, pulsa ↓ para obtener instrucciones sobre cómo flashear tu Arduino con Estándar Firmata
--
- Descargue elArduino IDE
- Asegúrate de que tu Arduino está conectado vía USB
- Abra el IDE de Arduino
- Seleccione: Archivo > Ejemplos > Firmata > StandardFirmataPlus
- Seleccione: Herramientas > Tablero > Arduino/Genuino Uno
- Seleccione: Herramientas > Puerto >
- Haga clic en el botón Upload
- Vuelva a intentar hacer que el LED parpadee
- LEDs (diodos emisores de luz)
- Botones
- Servos
- El pin largo es positiva (y pone en energía)
- El pin corto es negativo (y va a tierra)
Guarde esto en un archivo y ejecútelo
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(11);
// "blink" the led in 500ms on-off phase periods
led.blink(500);
});
node blinky.js
- Probablemente notó que la luz parpadea cada 0,5 segundos.
- Cambie el código para que parpadee a una velocidad diferente y luego vuelva a ejecutarlo para asegurarse de que funciona.
- Si está atascado, presione ↓ para ver una solución potencial
--
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(11);
// "blink" the led in 3000ms on-off phase periods
led.blink(3000);
});
node blinky.js
- Significa Read Evaluate Print Loop (Leer Evaluar ciclo de impresión )
- Nos permite escribir el código en nuestro terminal y ver cómo afecta a nuestros robots.
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(11);
this.repl.inject({
led: led
});
});
node led-boss.js
> led.on();
> led.off();
> led.blink();
> led.stop();
> led.pulse();
La razón por la que podemos acceder al objeto led en el REPL es por este bit de código en el ejemplo anterior. Expone el objeto led a nuestra sesión REPL.
this.repl.inject({
led: led
});
Ahora ejecute uno de sus programas anteriores y asegúrese de que el LED siga parpadeando
Ahora que tiene los fundamentos de los LEDs, puede pasar al siguiente componente o trabajar en algunos desafíos de los LEDs.
- Pulse → para pasar al siguiente componente
- Pulse ↓ para desplazarse por los desafíos de los LEDs
--
¡Intenta resolverlos tú mismo antes de mirar la solución!
Pulse ↓ para desplazarse por los siguientes retos (y posibles soluciones)
- Múltiples luces
- Luces navideñas
- Contador binario
--
Haga que 2 (o más) luces se alternen parpadeando
--
--
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led1 = new five.Led(10);
var led2 = new five.Led(11);
var flag = false;
setInterval(function() {
if (flag) {
led1.on();
led2.off();
} else {
led1.off();
led2.on();
}
flag = !flag;
}, 500);
});
--
Haz que un LED (o varios LEDs) pasen por diferentes configuraciones, como hacen algunas luces navideñas. Debería cambiar el ajuste cada pocos segundos. A continuación se muestran algunos ejemplos de configuración. Puede ver un ejemplo en la siguiente diapositiva.
- Apagado
- Sólido
- Parpadeando
- Pulsos (desvanecimiento hacia adentro y hacia afuera)
- Diferentes velocidades de parpadeo, pulsación o alternancia
- Alternando qué luces están encendidas
--
--
--
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(11);
var setting = 0;
setInterval(function() {
led.stop(); // Si llamamos al pulso, tenemos que detenerlo
switch (setting) {
case 0:
led.pulse();
break;
case 1:
led.off();
break;
case 2:
led.on();
break;
}
setting = (setting + 1) % 3;
}, 3000);
});
--
- Exponer una función a la REPL que le permite cambiar a la siguiente configuración desde la REPL
- Añada un botón que, al pulsarlo, pase a la siguiente configuración (Nota: debe completar las diapositivas del componente de botones antes de intentarlo).
--
--
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(11);
var setting = 0;
function changeSetting() {
led.stop(); // If we call pulse, we need to stop it
switch (setting) {
case 0:
led.pulse();
break;
case 1:
led.off();
break;
case 2:
led.on();
break;
}
setting = (setting + 1) % 3;
}
this.repl.inject({
cs: changeSetting // Now we can call cs() from the REPL
});
});
--
¡Estás por tu cuenta en esto!
--
Usando 3 LEDs, cuente de 0 a 7 en binario como se muestra a continuación. Encendido(On) representa 1 y apagado(off) representa 0.
--
--
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led1 = new five.Led(9);
var led2 = new five.Led(10);
var led3 = new five.Led(11);
var num = 0;
setInterval(function() {
var binary = num.toString(2);
binary.slice(-1) === "1" ? led1.on() : led1.off();
binary.slice(-2, -1) === "1" ? led2.on() : led2.off();
binary.slice(-3, -2) === "1" ? led3.on() : led3.off();
num = (num + 1) % 8;
}, 1000);
});
--
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var leds = [new five.Led(9), new five.Led(10), new five.Led(11)];
var num = 0;
setInterval(function() {
var mask = 1;
for (var i = 0; i < leds.length; ++i, mask <<= 1) {
var led = led[i];
num & mask ? led.on() : led.off();
}
num = (num + 1) % 8;
}, 1000);
});
--
Permite al usuario introducir un número a través de la REPL y mostrarlo en binario en los LEDs.
--
¡Estás por tu cuenta en esto!
- LEDs (diodos emisores de luz)
- Botones
- Servos
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var button = new five.Button(2);
button.on("press", function() {
console.log("Button Pressed!");
});
button.on("hold", function() {
console.log("Button Held!");
});
button.on("release", function() {
console.log("Button Released!");
});
});
node button.js
Intente presionar, soltar y mantener presionado el botón
Debería ver alguna salida como esta en el REPL
>> Botón pulsado!
Botón liberado!
Botón pulsado!
Botón liberado!
Botón pulsado!
Botón retenido!
Botón retenido!
Botón liberado!
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(11);
var button = new five.Button(2);
button.on("press", function() {
led.on();
});
button.on("hold", function() {
led.blink(50);
});
button.on("release", function() {
led.stop().off();
});
});
node button_led.js
El LED debe encenderse al presionar, apagarse al soltarlo y parpadear al mantenerlo presionado.
Ahora que tiene los conceptos básicos de los botones, puede pasar al siguiente componente o trabajar en algunos desafíos de botones.
- Pulse → para pasar al siguiente componente
- Presione ↓ para desplazarse por los desafíos del botón
--
¡Intenta resolverlos tú mismo antes de mirar la solución!
Pulse ↓ para desplazarse por los siguientes retos (y posibles soluciones)
- Interruptor de luz
- Clave de acceso
- Luces navideñas
--
Haga que al presionar un botón alternativamente encienda y apague un LED
--
--
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(11);
var button = new five.Button(2);
var on = false;
button.on("press", function() {
if (on) {
led.off();
} else {
led.on();
}
on = !on;
});
});
--
Dispone de 2 botones y 1 LED. Hágalo de manera que tenga que presionar los botones en cierto orden para encender el LED.
--
--
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(11);
var button1 = new five.Button(2);
var button2 = new five.Button(4);
var passcode = "12112";
var presses = "";
button1.on("press", function() {
presses += "1";
if (presses.indexOf(passcode) > -1) {
led.on();
}
});
button2.on("press", function() {
presses += "2";
if (presses.indexOf(passcode) > -1) {
led.on();
}
});
});
--
Haz que un LED (o varios LEDs) pasen por diferentes configuraciones, como hacen algunas luces navideñas. Debe cambiar el ajuste cada vez que se pulsa el botón. A continuación se muestran algunos ejemplos de configuración.
- Apagado
- Sólido
- Parpadeando
- Pulsos (desvanecimiento hacia adentro y hacia afuera)
- Diferentes velocidades de parpadeo, pulsación o alternancia
- Alternando qué luces están encendidas
--
¡Estás por tu cuenta en esto!
- LEDs (diodos emisores de luz)
- Botones
- Servos
Toma tu servo y añádele uno de los adjuntos.
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var servo = new five.Servo(11);
this.repl.inject({
servo: servo
});
});
node servo.js
s
Escribe estos comandos en la REPL y observa cómo reacciona el servo
> servo.to(10); // Mover a 10 grados
> servo.to(200); // Mover a 200 grados
> servo.value; // Obtener la posición actual
> servo.min();
> servo.max();
> servo.range;
> servo.center();
> servo.sweep();
Ahora que tienes los fundamentos de los servos, puedes pasar al siguiente componente o trabajar en algunos desafíos de los servos.
Pulse → para pasar al siguiente componente Pulse ↓ para desplazarse por los desafíos de los servos
--
¡Intenta resolverlos tú mismo antes de mirar la solución!
Pulse ↓ para desplazarse por los siguientes retos (y posibles soluciones)
- Rociador
- Flechas
- Botón
--
Haz que el servo gire de un lado a otro como si fuera un aspersor.
--
--
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var servo = new five.Servo(11);
var min = servo.range[0];
var max = servo.range[1];
var value = min;
function step() {
servo.to(value);
value = (value + 45) % max;
setTimeout(step, 500);
}
step();
});
--
Haz que al presionar el botón de flecha izquierda gire el servo en una dirección y al presionar el botón de flecha derecha gire en la otra dirección.
--
--
var five = require("johnny-five");
var keypress = require("keypress");
var board = new five.Board();
board.on("ready", function() {
var servo = new five.Servo(11);
process.stdin.on("keypress", function(ch, key) {
if (key && key.name === "left") {
servo.min();
} else if (key && key.name === "right") {
servo.max();
}
});
process.stdin.setRawMode(true);
process.stdin.resume();
});
--
Haz que el servo barra mientras se mantiene pulsado un botón
--
--
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var servo = new five.Servo(11);
var button = new five.Button(2);
button.on("press", function() {
servo.sweep();
});
button.on("release", function() {
servo.stop();
});
});
Uh oh oh! Nos quedamos sin diapositivas! Siéntase libre de probar algunos de los otros componentes de su kit mientras nosotros añadimos más!
- Gracias por venir!
- Nos encantaría conocer su opinión: bit.ly/nodebots-feedback
- Por favor, guarde los kits (puede comprar los suyos propios aquí)