- 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
Bucle Inicial | Principal | Final |
---|---|---|
- Windows/OSX: Instalar drivers de USB CH340G (Linux vienen por defecto)
- Instalar Arduino IDE
- 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.
- Ir a Fichero > Ejemplos > Basics > Blink
- 'Subir' codigo al Arduino
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'
Se usa para conectar componentes. Se puedan crear varias conexiones en cada uno de los pines.
- 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.
- 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
Controlar la brilleza del LED usando la fotoresistencia
- 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.
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.
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.
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.
- 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.
Introduccion a Serialport y Node.js
Vamos 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.
- 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)))
- 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
}
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 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
Pinchar aqui: