Kit de taller
- Arduino Nano 5V 16MHz
- Cable USB Mini
- Breadboard 400 pin
- Jumper Cables
- Servomotor SG90
- Piezo Buzzer
- LEDs
- Potentiometer
- Switches
- 330 Ohm Resistor
- 10K Ohm Resistor
- Photoresistor
- TMP36
Presentaciones
Bucle Inicial | Principal | Final |
---|---|---|
Como Empezar
Instalar Software
- Windows/OSX: Instalar drivers de USB CH340G (Linux vienen por defecto)
- Instalar Arduino IDE
Conectar el Arduino
- Conectar el Arduino por USB
- Ir a Herramientas y selecionar
Arduino Nano
,ATMEGA328P
, y el puerto que corresponda.
OJO! Algunos arduinos necesitan el ATMEGA328P (Old Bootloader)
, prueba ese si el otro no funciona.
Para subir un codigo basico al Arduino
- Ir a Fichero > Ejemplos > Basics > Blink
- 'Subir' codigo al Arduino
Herramientas: Arduino Nano
El nano tiene un LED ya conectado con el pin 13 con la letra 'L', se puede cambiar la velocidad con el programa de 'blink'
Herramientas: Placa
Se usa para conectar componentes. Se puedan crear varias conexiones en cada uno de los pines.
Desafío 1: Blink
- Conectar LED al pin D13: PATA LARGA es POSITIVO y va hacia el ARDUINO
- La PATA CORTA del LED se conecta con el NEGATIVO y as su vez, con el pin GND (Groud = Tierra = Negativo).
- Se puede usar una resistencia de 330 Ohm en el LED D13 pero es opcional, ya que el Arduino ya lleva una internamente.
Desafío 2: Fotoresistencia
- Conectar Fotoresistencia al pin A0.
- Usar
int valor = analogRead(A0);
para leer el valor de la fotoresistencia, que sera entre 0 y 1023. - Abrir
Herramientas > Monitor de Serie
para ver los valores que manda la fotoresistencia al PC por USB
PUNTOS EXTRA
Controlar la brilleza del LED usando la fotoresistencia
Desafío 3: Zumbador (Buzzer)
- Conectar el Zumbador a un pin con PWM (Ver #donde-estan-los-pines-con-pwm)
- Usar
tone(PIN, FREQUENCY, DURATION)
para generar un tono basado en la fotoresistencia.
Como crea el arduino sonido?
Encendiendo y apagando un pin muy rapidamente.
Cuanto más rápido enciende y apaga (mas alta la frequencia), más agudo será el sonido.
Desafío 4: Servomotor
El servomotor tiene 3 cables:
-
Electricidad POLO POSITIVO (rojo)
-
Electricidad POLO NEGATIVO (marron o negro)
-
Señal (en amarillo)
-
Conectar el Servomotor pins 5V (rojo), GND (marron) y un pin con PWM como el D9 (amarillo)
-
Usar
analogWrite(pin, val)
para controlar el servomotor,val
puede tener valor entre 0 y 255.
Donde estan los pines con PWM?
Que es el PWM? (cuanto se enciende y se apaga por ciclo)
USAR LA LIBRERIA
La libreria Servo.h
reduce codigo y nos abstrae el controlar el servo con PWM.
Hace lo mismo que analogWrite()
pero tiene mayor compatibilidad con diferentes placas.
Desafío 5: Servomotor controlado por botones
- Conectar 2 botones para recibir senales digitales a pines D2 y D4.
- Usar el modo especial
INPUT_PULLUP
para leer los botons sin resistencia - Un boton mueve el servomotor hacia un lado, otro hacia el otro.
Serialport y Node.js
Introduccion aVamos a controlar el Arduino a traves de Node.js con nuestro PC.
- Bajarse e Instalar Node.js
- Bajarse un editor de texto (VS Code)
- Crear un nuevo projecto.
- Abrir la terminal e inicializar projecto (
npm init -y
) - Instalar Serialport (
npm i serialport
)
A menudo hay problemas instalando serialport
, si no funciona prueba a usar la ultima version de nodejs e instalar otra vez.
Vamos a hacer una prueba con el siguiente programa en nodejs
// list-ports.js
const SerialPort = require('serialport')
SerialPort.list().then(ports => ports.forEach(port => console.log(port)))
Para ejecutar el programa hacemos lo siguiente desde la consola
$ node list-ports.js
Esto nos dara un listado de puertos seriales (En windows COM5
etc, en unix/mac /dev/cu.wchusbserial
).
Ya sabemos que funciona bien.
Desafío 6: Leer datos del arduino.
- El arduino manda datos a traves de
Serial.write()
. - Usar node.js y serialport para leer el estado de los botones en el ultimo desafio.
// read-serial.js
const SerialPort = require('serialport')
const port = new SerialPort('COM5') // <--- PUERTO DONDE ESTA CONECTADO EL ARDUINO
port.on('data', data => console.log(Number(data)))
Desafío 7: Mandar datos al arduino.
- El arduino lee datos a traves de
Serial.read()
. - Vamos a controlar el servomotor leyendo el teclado con node.js.
// write-serial.js
const SerialPort = require('serialport')
const port = new SerialPort('COM5') // <--- PUERTO DONDE ESTA CONECTADO EL ARDUINO
const stdin = process.stdin;
const RIGHT_ARROW = '\u001B\u005B\u0043';
const LEFT_ARROW = '\u001B\u005B\u0044';
const CTRL_C = '\u0003';
stdin.setRawMode(true);
stdin.resume();
stdin.setEncoding('utf8');
stdin.on('data', function(key){
if (key == RIGHT_ARROW) {
process.stdout.write('-->\n');
port.write([0]); // Aqui mandamos un byte de `0`
}
if (key == LEFT_ARROW) {
process.stdout.write('<--\n');
port.write([180]); // Aqui mandamos un byte con `180`
}
if (key == CTRL_C) { process.exit(); }
});
Y luego en el arduino usamos Ejemplos > Servo > Knob otra vez, pero leyendo con Serial.read()
.
loop() {
if (Serial.available()) {
// get the new byte:
int angle = (int)Serial.read(); // <--- el valor de 0 o 180 llega de node.js
// set the servo to that angle
myservo.write(angle);
}
delay(100); // espera a que el servo comienze a moverse
}
Desafío FINAL: Dispara a tu compi!
Igual que en el ultimo desafio. Pero vamos a controlar el servomotor con el raton del PC y hacer un zumbido cuando le des al boton.
APUNTAAAA Y DISPARA!
Necesitamos:
- Servomotor conectado al Arduino (pin D9)
- Zumbador conectado al Arduino (pin D6)
- Nodejs con
npm install iohook
yserialport
const ioHook = require('iohook');
const SerialPort = require('serialport');
const port = new SerialPort('COM5');
ioHook
.on("mousemove", event => {
console.log(event);
// remember angle max is 180
let pos = Math.round(event.x/6);
if (pos<0) pos = 0;
if (pos>180) pos = 180;
port.write([pos]);
})
.on("mouseclick", event => {
console.log(event);
port.write([255]);
})
.start();
Instala Firmata y usa Johnny Five.
Instala Firmata usando el ejemplo de Arduino en el grafico superior.
Luego, abre una consola e instala Johnny Five: npm i -g johnny-five
.
Y crea un fichero de javascript asi:
// blink.js
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", () => {
// Create an Led on pin 13
var led = new five.Led(13);
// Blink every half second
led.blink(500);
});
Y ejecutalo con node blink.js
Robot luchador
Pinchar aqui: