Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa...

69
Curso Arduino Iniciativa Focus Miguel Ángel Torres de la Cámara http://openmechatronics.wordpress.com/iniciativa-focus-uma/

Transcript of Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa...

Page 1: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Curso Arduino Iniciativa FocusMiguel Ángel Torres de la Cámara

http://openmechatronics.wordpress.com/iniciativa-focus-uma/

Page 2: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Índice● Introducción● ¿Qué es Arduino?● ¿Cómo se programa Arduino?● Primer programa en Arduino● Manejo de leds● Manejo de los pulsadores● Aprender a usar los servomotores● Manejo del mando de la wii● Trucar un servomotor● Manejo de motores

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 3: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

¿Quiénes somos?● Iniciativa Focus (Formación Cultura y Solidaridad)● Buscamos difundir el conocimiento libre

En la universidad de Málaga: http://openmechatronics.wordpress.com/iniciativa-focus-uma/

A nivel mundial en:http://iniciativafocus.org/

Agradecimientos a: Juan Antonio Infantes y a Óscar Ramírez :)

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 4: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Introducción a los microcontroladores● Es un circuito integrado programable, capaz de ejecutar las órdenes

grabadas en su memoria. ● Bajo consumo● Podemos manejar multitud de actuadores, sensores...

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 5: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Introducción a los microcontroladores● ¿Cómo se programan?● Entornos de desarrollo a medida para cada micro● Precios caros● Placas de desarrollo caras.

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 6: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Solución => Arduino● Arduino se presenta como la solución para iniciarse al mundo de la

electrónica/robótica con un bajo coste.● Utiliza Software y Hardware libre, con lo que igual nos sirve para un diseño

pequeño que para un sistema que va a controlar algo importante.● Tiene una comunidad muy grande desarrollando librerías, lo que la hacen

un buen punto de partida.

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 7: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Arduino● Está compuesto de:

○ Entorno de desarrollo (software)○ Placa de desarrollo

■ Microcontrolador■ Circuitería necesaría para acceder rápidamente a las E/S

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 8: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Entorno de Arduino

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 9: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Arduino● Microcontrolador ATmega328● Voltaje de operación: 5V● Voltaje (recomendado): 7-12V● Voltaje (limite): 6-20V● Pines digitales I/O: 14● (6 PWM)● Pines Analógicos: 6● Intensidad por I/O Pin: 40 mA● Intensidad del pin 3.3V: 50 mA● Memoria flash: 32 KB● SRAM: 2 KB● EEPROM 1 KB● Velocidad Reloj: 16 MHz● Montaje superficial o dual in● line

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 10: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Focusduino● 5 Botones:

○ 1 Reset○ 1 digital(pin 2)○ 3 analógicos(pin analogico 0)

● Control de 2 Motores● Entradas de 2 Servos● Pines conector nunchuck (I2C)● 5 Leds superficie controlables● 6 PWM en los puertos 3,5,6,9,10 y 11 ● 6 entradas analógicas

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 11: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Extensiones para Arduino● Comunicaciones:

○ Placa Bluetooth○ Zigbee○ Ethernet○ Wifi○ RS 232

● Sensores: luz, temperatura, movimiento, sonido, ultrasonido, IR...

● Actuadores: control de motores, controlador servos...● Pantallas...

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 12: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

¿Qué podemos hacer con Arduino?

Controlar nuestra casa:○ opendomotica.wordpress.com (Juan Antonio Infantes)

Cualquier proyecto de robótica:○ openmechatronics.wordpress.com (Miguel Ángel Torres)

Todo lo que se nos ocurra:○ arduino.cc (Comunidad Arduino)

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 13: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Programación de ArduinoFunciones principales de Arduino:● void setup()

○ Define las condiciones iniciales del microcontrolador, es decir especifica que pines se van a utilizar y con qué fin (Entrada o Salida).

○ También se usa para inicializar las conexiones, por ejemplo para la comunicación serial, o bluetooth por ejemplo.

● void loop()○ Define la lógica del programa que queremos ejecutar (main).

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 17: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Programación de ArduinoFunciones:

● Digitales:○ pinMode() ○ digitalWrite()○ digitalRead()

● Analógicas○ analogRead()○ analogWrite()

● Time○ delay()○ delayMicroseconds()

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 18: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Programación de ArduinopinMode():

Se utiliza para definir si el puerto (pin) va a ser utilizado para entrada de datos (INPUT) o salida (OUTPUT).Va dentro del setup, ya que no podremos utilizar un pin hasta que no esté indicado si es de entrada o de salida.

Ejemplo:

short int led = 13;

void setup(){ pinMode(led,OUTPUT);}

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 19: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Programación de ArduinodigitalWrite():

Se utiliza para sacar un valor lógico por un pin, es decir, poner a valor alto (HIGH) o bajo (LOW) un pin.Ejemplo:short int Led = 13;---if (alarma==true){ digitalWrite(Led,HIGH);}else{ digitalWrite(Led,LOW); }

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 20: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Programación de ArduinodigitalRead():

Devuelve un valor lógico leido desde un pin, es decir, leemos un valor HIGH (5V) o un valor LOW (0V).Ejemplo:short int Led = 13;int Alarma = 12;int val = 0;---val = digitalRead(Alarma);if (val){ digitalWrite(Led,HIGH);}else{ digitalWrite(Led,LOW);}

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 21: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Programación de ArduinoanalogRead():

Función para leer valores analógicos por los pines correspondientes.Ejemplo:

void loop(){int valor = analogRead(0); //La variable valor corresponde a la entrada analogica 0if(valor > 250){

digitalWrite(13, HIGH);}else {

digitalWrite(13, LOW);}}

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 22: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Ejemplo//Encender el led 13.

void setup(){pinMode(13, OUTPUT); // Vamos a usar el pin 13 en modo salida}

void loop(){digitalWrite(13, HIGH); //Configura el pin digital 13 a 1 (high)}

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 23: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Manejo de leds● Tenemos 5 led en la placa que podemos controlar de la siguiente forma:

○ Led 10 -> Pin digital 10○ Led 9 -> Pin digital 9○ Led 6 -> Pin digital 6○ Led 5 -> Pin digital 5○ Led L -> Pin digital 13

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 24: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Nuestro primer programa● Siguiendo la estructura explicada anteriormente:

void setup(){pinMode(13, OUTPUT); // Vamos a usar el pin 13 en modo salida}

void loop(){digitalWrite(13, HIGH); //Configura el pin digital 13 a 1 (high = encendido)}

Hacer parpadear el LED 6 con una frecuencia de 1.5 segundosSabiendo que la función retardo es: delay("tiempo en milisegundos")

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 25: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Segundo programa● Hacer parpadear todos los leds de forma desfasada (una feria!)

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 26: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Serial Monitor● Para ver desde el ordenador qué está pasando en Arduino podemos

mostrar a través del Monitor Serial una variable, un estado, un texto...● Para inicializar el Serial debemos configurarlo en void setup()

void setup(){Serial.begin(9600); // Inicializa el Serial y establece la velocidad a 9600 baud}

● Para comunicarnos con el ordenador siempre vamos a usar 9600 baud de velocidad, para otros dispositivos dependerá de las especificaciones.

● Baud = bits por segundo

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 27: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Serial Monitor II● Una vez inicializado podremos leer o escribir:

int lectura; // Declaramos la variable para almacenar el número que leemos

void setup(){Serial.begin(9600); // Inicializa el Serial y establece la velocidad a 9600 baud}

void loop(){Serial.print("Bienvenidos al curso. ") //Imprime "Bienvenidos al curso"lectura = Serial.read(); //Almacena en lectura un entero leidoSerial.println(lectura); //Imprime el valor de lectura y hace retorno de carro}

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 28: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Programa 3.1. Mostrar por puerto serie el valor analógico de pulsar cada uno de los

pulsadores conectados al puerto 0 analógico.

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 29: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Pulsadores● Nuestra placa tiene 5 pulsadores:

○ 1 Reset (esencial en todos los prototipos autónomos)

○ 1 Pulsador digital (correspondiente al pin digital 2 si lo pulsamos manda un 1 sino un 0.

○ 3 Pulsadores Analógicos correspondiente al pin analógico 0 (dependiendo cuál pulsemos dejaremos pasar más o menos, desde 0 a 1023)

● Podemos usar los pulsadores para interactuar con la placa.

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 30: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Pulsadores II● ¿Cómo usar los pulsadores analógicos?● Función para saber si está pulsado el pulsador 2.

boolean pulsado(int pulsador){ int valor = analogRead(0); //Lectura analógica del pin 0if(pulsador == 2 && (valor < 280 && valor > 10)){

return true; }return false;

}

void loop {int pulsador2 = 2;if (pulsado(pulsador2)) //Si está pulsado el pulsador 2 devolverá true.

Serial.println("Se ha pulsado el pulsador 2");}

Completar la función para los pulsadores 3 y 4 3 -> (280, 500) 4-> (500, 1023)

Curso Arduino Iniciativa Focus

Miguel Ángel Torres

Page 31: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Función pulsadores● Función completa para pulsadores analógicos

Seguiría este formato: /* if(pulsado(pulsador5){ } */

boolean pulsado(int pulsador){ int valor = analogRead(0); //Lectura analógica del pin 0if(pulsador == 1 && (valor < 280 && valor > 10)){

return true; }else if(pulsador == 2 && (valor > 280 && valor < 500)){

return true;}else if(pulsador == 3 && (valor > 500)){

return true;}

else {return false;

}} Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 32: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Programa 5● Ahora que ya sabemos manejar los pulsadores podemos hacer programas

más interactivos.

● Programar la placa para que mientras esté pulsado el pulsador analógico se encienda un led:○ pulsador 1 -> led 5○ pulsador 2 -> led 6○ pulsador 3 -> led 9○ pulsador digital -> led 10

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 33: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

ComunicaciónExisten muchas formas de comunicar dos arduinos, o una red entera, lo podemos hacer mediante Zigbee, I2C, RS232, Bluetooth...

Pero existe una forma muy rudimentaria pero que no necesita ningún controlador de comunicación. Simplemente enviando una señal cuadrada (1 y 0) podemos comunicar dos placas estableciendo nuestro propio protocolo.

Por ejemplo, recibo 1 durante 200 ms después 0 durante 50 ms entonces eso significa que debo encender el led 10.

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 34: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Programa 4 (un poco más complejo)

Comunicar vuestro Arduino con el de un compañero, establecer para ello un emisor (el Arduino que va a enviar la señal) y un receptor (Arduino que leerá la señal establecida).

Esta será la señal: si pulso el pulsador 2 envío HIGH durante 200 ms después 0 durante 50 ms entonces eso significa que debo encender el led 10.

4.a -> Programa en el arduino emisor, envía a través del pin 8 la señal si se pulsa el pulsador 2.

4.b -> Programa en el arduino receptor, recibe a través del pin 4 la señal y enciende el LED 10 si la señal es la esperada.

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 35: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Resumen● Dos funciones principales void setup() y void loop()● Declaramos lo que vamos a usar en void setup: pinMode(led5, OUTPUT);● Control de los pines digitales:

○ digitalWrite(npin, HIGH);○ digitalWrite(npin, LOW);

● Podemos mostrar por pantalla variables o lo que queramos:○ Serial.begin(9600);○ Serial.read();○ Serial.println(variable);

● Lecturas analógicas para los pulsadores por ejemplo:○ variable_lectura = analogRead(pinanalogico);

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 36: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Servomotores

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Motor DC

Controlador

Reductora

Page 37: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Servomotores II● El servo tiene 3 cables:

Marrón -> GNDRojo -> 5vAmarillo -> Señal

● Se controla mediante PWM (modulación por ancho de pulso). Variando la anchura del pulso se puede controlar el sentido de giro y la posición.

● Tiene un campo de giro de 180 º● Lo podemos convertir en un motor

de movimiento continuo conmucha fuerza.

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 38: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Nuestro servomor● Tiene 1.6 kg de torque máximo.● Tiene un tamaño reducido.● Es barato: 7€ en cooking-hacks.

com: http://www.cooking-hacks.com/index.php/shop/robotics/servos/mini-servo-mystery-9g-1-3-kg-torque.html

● Tiene un campo de giro de 180 º● Lo podemos conectar a nuestro

Focusduino● Lo controlamos mediante la librería

Servo.h● Lo podemos convertir en un motor

DC conmucha fuerza.

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 39: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Conexión con Arduino● Podremos conectarlo a las dos

entradas queexisten en nuesta placa. Comprobaremos en primerlugar que se corresponda la pata de GND con el cable marrón.

● Podremos conectar 2 servos.● El servo1 se corresponde con el pin

digital 3.● El servo2 se corresponde con el pin

digital 11.● En un arduino convencional lo

conectaremosa cualquier pin digital con PWM (~)● Para programarlo usaremos la

librería:<Servo.h>

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 40: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Programación servos

Curso Arduino Iniciativa FocusMiguel Ángel Torres

#include <Servo.h> //Librería Servo s1; //Declaramos servo 1Servo s2; //Declaramos servo 2 int pos1 = 0; // Posicion servo 1 (0º/180º) void setup() { s1.attach(3); // s1 se controla con el pin 3 en nuestra placa s2.attach(11); // s2 se controla con el pin 11 en nuestra placa} void loop() { s1.write(pos1); // coloca el servo en la posicion indicada}

Page 41: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Problema 6Ahora que ya sabemos cómo controlar la posición de los servos, hacer un programa que haga moverse el servo1 desde 0º hasta 180º y vuelta (de 10 en 10 grados cada 200 ms), y el servo2 igual pero desfasado 180º.

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 42: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Problema 6 bControlar la posición de los servos mediante los pulsadores:

Si se pulsa el pulsador 1 -> servo s1 -> 0ºSi se pulsa el pulsador 2 -> servo s1 -> 90ºSi se pulsa el pulsador 3 -> servo s1 -> 180º

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 43: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Nunchuck● Acelerómetro● Joystick● 2 botones

Podremos conectarlo a nuestro arduino y leer todos los datos.

Para ello necesitaremos el adaptador.

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 44: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Conexión nunchuckPara conectar el nunchuck con nuestro focusduino es tan fácil como conectar la clavija en el adaptador que hemos preparado, prestando especial atención en que coincida siempre GND con GND del adaptador (tiene que quedar hacia fuera)

Quienes tengan un Arduino convencional tendrán que hacer uso de la protoboard.

Page 45: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuckPara leer los valores del mando necesitaremos hacer uso de la librería WiiNchuck. La podréis descargar desde la página del curso:

openmechatronics.wordpress.com/iniciativa-focus-uma/

Para poder usar la librería WiiNchuck hay que incluirla en la ruta ~/libraries/ de nuestra carpeta de Arduino y reiniciar el programa de Arduino.

Page 46: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuckUtilidades de la librería WiiNChuck.h:

● void begin() ● void update()● int JoyX()● int JoyY()● int AccelX()● int AccelY()● int AccelZ()● bool CButton()● bool ZButton()

Page 47: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuckPara pintar los datos por serie:

● void Print_All()● void Print_Space()● void Print_JoyX()● void Print_JoyY()● void Print_AccelX()● void Print_AccelZ()● void Print_CButton()● void Print_ZButton()

Page 48: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuck● void begin()

Con este método inicializamos el nunchuck para empezar a enviar. Siempre se coloca en la parte de configuración. Ej.:WiiNChuck chuck; //chuck va a ser nuestro mando

void setup(){chuck.begin(); //empieza a enviar

}

Page 49: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuck● void update()

Con este método actualizamos los valores recibidos desde el nunchuck. Siempre se coloca en la parte de ejecución. Ej.:WiiNChuck chuck;

void setup(){chuck.begin();

} void loop(){chuck.update(); }

Page 50: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuckEstructura básica para utilizar la libreria:

#include <WiiNChuck.h>#include <Wire.h> //esta librería está incluida y nos permite comunicarnos por el puerto I2C

WiiNChuck chuck;void setup(){ Wire.begin(); chuck.begin();}void loop(){

chuck.update();//utilización del nunchuck}

Page 51: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuck● int JoyX():

Este metodo nos devuelve el valor leido del eje X del joystick.

Se usa despues de usar el metodo update().Ej.:

WiiNChuck chuck;int ejeX;void setup(){ Wire.begin();

chuck.begin();} void loop(){ chuck.update(); ejeX=chuck.JoyX();}

Page 52: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuck● int JoyY():

Este metodo nos devuelve el valor leido del eje Y del joystick.

Se usa despues de usar el metodo update().Ej.:

WiiNChuck chuck;int ejeY;void setup(){ Wire.begin();

chuck.begin();} void loop(){ chuck.update(); ejeY=chuck.JoyY();}

Page 53: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuck● int AccelX():

Este metodo nos devuelve el valor leido del eje X del acelerómetro.

Se usa despues de usar el metodo update().Ej.:

WiiNChuck chuck;int accelX;void setup(){ Wire.begin();

chuck.begin();} void loop(){ chuck.update(); accelX=chuck.AccelX();}

Page 54: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuck● int AccelY():

Este metodo nos devuelve el valor leido del eje Y del acelerómetro.

Se usa despues de usar el metodo update().Ej.:

WiiNChuck chuck;int accelY;void setup(){ Wire.begin();

chuck.begin();} void loop(){ chuck.update(); accelY=chuck.AccelY();}

Page 55: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuck● int AccelZ():

Este metodo nos devuelve el valor leido del eje Z del acelerómetro.

Se usa despues de usar el metodo update().Ej.:

WiiNChuck chuck;int accelZ;void setup(){ Wire.begin();

chuck.begin();} void loop(){ chuck.update(); accelZ=chuck.AccelZ();}

Page 56: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuck● bool CButton():

Este metodo nos devuelve el valor leido del botón C, 1 si está pulsado y 0 si está suelto Se usa despues de usar el metodo update().Ej.:

WiiNChuck chuck;int botC;void setup(){ Wire.begin();

chuck.begin();} void loop(){ chuck.update(); botC=chuck.CButton();}

Page 57: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Librería nunchuck● void Print_All()

Todas las funciones que empiezan por Print usan el protocolo Serie para mostrar los valores. Ej.:void setup(){Wire.begin();chuck.begin();Serial.begin(9600);}void loop(){chuck.Print_All();}

Page 58: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Ejercicios nunchuck● 1.- Mostrar y apuntar los valores máximos y minimos de nuestro nunchuck

mostrando los valores por Serie.● ● 2.- Encender un led diferente con cada botón pulsado.● ● 3.-Mover los 2 servo motores con el joystick uno conectado al eje X y otro al eje

Y

Page 59: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Trucar un servomotor

Curso Arduino Iniciativa FocusMiguel Ángel Torres

1. Debemos quitarle los 4 tornillos inferiores2. Sacamos la tapa superior.3. Extraemos el primer rodamiento que

podemos sacar, el que genera el último movimiento.

4. En el rodamiento encontramos un saliente que hace de tope, lo eliminamos con un cúter o una tenaza, limamos la zona para que esté totalmente lisa,

5. Ya tenemos eliminada la parte mecánica ahora, sólo falta la electrónica.

6. Sacamos la placa controladora y a su vez el potenciómetro.

7. Cortamos los cables, y soldamos el negro y el rojo a las patillas del motor.

8. Volvemos a ensamblarlo todo, y listo!

Page 60: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Control de Motores

Curso Arduino Iniciativa FocusMiguel Ángel Torres

● Los motores cambian su velocidad según el voltaje que se les suministre.

● Los motores cambian su sentido invirtiendo su polaridad.● Para mover un motor en un sentido hay que meter en un pin un valor

bajo (LOW) y en el otro un valor alto (HIGH).● Para cambiar la velocidad del motor se usa las entradas

correspondientes con la función analogWrite(pin,num), pudiendo cambiar el numero entre 0 y 255.

Para nuestros servos es necesario más de 50 para empezar a moverse

Page 61: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Control de Motor 1

Curso Arduino Iniciativa FocusMiguel Ángel Torres

● Controlar la dirección de giro (pines 5 y 6)

int m11=5, m12=6; //motor1dirección1 = pindig5 <-> motor1dirección2 = pindig6 void setup(){

pinMode(m11,OUTPUT);pinMode(m12,OUTPUT);

}void loop(){ digitalWrite(m11,LOW); digitalWrite(m12,HIGH); delay(1000); //avanza hacia delante 1 seg digitalWrite(m11,HIGH); digitalWrite(m12,LOW); delay(2000); //avanza hacia atrás 2 seg}

Page 62: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Control de Motor 1

Curso Arduino Iniciativa FocusMiguel Ángel Torres

● Controlar la velocidad de giro (pines 5 y 6)

int m11=5, m12=6; //motor1dirección1 = pindig5 <-> motor1dirección2 = pindig6int vel = 150; //configura la velocidad del motor void setup(){

pinMode(m11,OUTPUT);pinMode(m12,OUTPUT);

}void loop(){ digitalWrite(m11,LOW); analogWrite(m12, vel); //Avanza a velocidad = vel delay(1000); //avanza hacia delante 1 seg analogWrite(m11, vel); //Retrocede a velocidad = vel digitalWrite(m12,LOW); delay(2000); //avanza hacia atrás 2 seg}

Page 63: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Control de Motor 2

Curso Arduino Iniciativa FocusMiguel Ángel Torres

● Controlar la dirección de giro (pines 9 y 10)

int m21=9, m22=10; //motor2dirección1 = pindig9 <-> motor2dirección2 = pindig10 void setup(){

pinMode(m21,OUTPUT);pinMode(m22,OUTPUT);

}void loop(){ digitalWrite(m21,LOW); digitalWrite(m22,HIGH); delay(1000); //avanza hacia delante 1 seg digitalWrite(m21,HIGH); digitalWrite(m22,LOW); delay(2000); //avanza hacia atrás 2 seg}

Page 64: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Control de Motor 2

Curso Arduino Iniciativa FocusMiguel Ángel Torres

● Controlar la velocidad de giro (pines 9 y 10)

int m21=9, m22=10; //motor2dirección1 = pindig9 <-> motor2dirección2 = pindig10int vel = 190; //configura la velocidad del motor void setup(){

pinMode(m21,OUTPUT);pinMode(m22,OUTPUT);

}void loop(){ digitalWrite(m21,LOW); analogWrite(m22, vel); //Avanza a velocidad = vel delay(1000); //avanza hacia delante 1 seg analogWrite(m21, vel); //Retrocede a velocidad = vel digitalWrite(m22,LOW); delay(2000); //avanza hacia atrás 2 seg}

Page 65: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Control de Motor 2

Curso Arduino Iniciativa FocusMiguel Ángel Torres

● Controlar la velocidad de giro (pines 9 y 10)

int m21=9, m22=10; //motor2dirección1 = pindig9 <-> motor2dirección2 = pindig10int vel = 190; //configura la velocidad del motor void setup(){

pinMode(m21,OUTPUT);pinMode(m22,OUTPUT);

}void loop(){ digitalWrite(m21,LOW); analogWrite(m22, vel); //Avanza a velocidad = vel delay(1000); //avanza hacia delante 1 seg analogWrite(m21, vel); //Retrocede a velocidad = vel digitalWrite(m22,LOW); delay(2000); //avanza hacia atrás 2 seg}

Page 66: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Ejercicio Motores

Curso Arduino Iniciativa FocusMiguel Ángel Torres

1. Mover el motor 1 hacia adelante y el 2 hacia atrás, cuando se pulsa el botón digital se cambian los sentido.

2. Hacer avanzar el motor 1 a velocidad baja (80) mientras esté pulsado el pulsador 1, si está pulsado el pulsador 2 cambiar a velocidad 150 y si está pulsado el 3 avanzar a máxima velocidad (255).

3. Controlar con el acelerómetro Y del nunchuck que avance o retrocedan los dos motores, y con el acelerómetro X que avance el motor derecho o izquierdo.

Page 67: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Montaje del robot

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Page 68: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Referencias

Curso Arduino Iniciativa FocusMiguel Ángel Torres

● Curso Arduino Iniciativa Focus año 2010 (Juan Antonio y Óscar)● www.arduino.cc● openmechatronics.wordpress.com

Page 69: Iniciativa Focus Curso Arduino · Índice Introducción ¿Qué es Arduino? ¿Cómo se programa Arduino? Primer programa en Arduino Manejo de leds Manejo de los pulsadores

Gracias!

Curso Arduino Iniciativa FocusMiguel Ángel Torres

Todos los ejercicios, librerías, esta presentación y muchos más proyectos con arduino estarán en la página:

openmechatronics.wordpress.com

Desde Iniciativa Focus: Miguel Ángel Torres de la Cámara