Documente Academic
Documente Profesional
Documente Cultură
Iniciativa Focus
Miguel ngel Torres de la Cmara
http://openmechatronics.wordpress.com/iniciativa-focus-uma/
ndice
Introduccin
Qu es Arduino?
Cmo 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 Focus
Miguel ngel Torres
Quines somos?
Introduccin a los
microcontroladores
Introduccin a los
microcontroladores
Cmo se programan?
Entornos de desarrollo a medida para cada micro
Precios caros
Placas de desarrollo caras.
Arduino
Placa de desarrollo
Microcontrolador
Entorno de Arduino
Arduino
Microcontrolador ATmega328
Voltaje de operacin: 5V
Voltaje (recomendado): 7-12V
Voltaje (limite): 6-20V
Pines digitales I/O: 14
(6 PWM)
Pines Analgicos: 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
Focusduino
5 Botones:
1 Reset
1 digital(pin 2)
3 analgicos(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 analgicas
Comunicaciones:
Placa Bluetooth
Zigbee
Ethernet
Wifi
RS 232
Programacin de Arduino
Funciones 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).
Tambin se usa para inicializar las conexiones, por ejemplo para la
comunicacin serial, o bluetooth por ejemplo.
void loop()
Programacin de Arduino
Constantes:
INPUT: Entrada
OUTPUT: Salida
true: Verdadero
false: Falso
Programacin de Arduino
Variables:
boolean
char
byte
int
double
long
Programacin de Arduino
Secuencias:
if
if...else
for
switch case
while
do... while
Programacin de Arduino
Funciones:
Digitales:
pinMode()
digitalWrite()
digitalRead()
Analgicas
analogRead()
analogWrite()
Time
delay()
delayMicroseconds()
Programacin de Arduino
pinMode():
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 Focus
Miguel ngel Torres
Programacin de Arduino
digitalWrite():
Se utiliza para sacar un valor lgico 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);
}
Programacin de Arduino
digitalRead():
Devuelve un valor lgico 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 Focus
Miguel ngel Torres
Programacin de Arduino
analogRead():
Funcin para leer valores analgicos por los pines correspondientes.
Ejemplo:
void loop(){
int valor = analogRead(0); //La variable valor corresponde a la entrada analogica 0
if(valor > 250){
digitalWrite(13, HIGH);
}
else {
digitalWrite(13, LOW);
}
}
Curso Arduino Iniciativa Focus
Miguel ngel Torres
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)
}
Manejo de leds
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)
}
Segundo programa
Serial Monitor
Serial Monitor II
Programa 3.
1.
Mostrar por puerto serie el valor analgico de pulsar cada uno de los
pulsadores conectados al puerto 0 analgico.
Pulsadores
Pulsadores II
void loop {
int pulsador2 = 2;
if (pulsado(pulsador2)) //Si est pulsado el pulsador 2 devolver true.
Serial.println("Se ha pulsado el pulsador 2");
}
Funcin pulsadores
Funcin completa para pulsadores analgicos
Seguira este formato:
/* if(pulsado(pulsador5){
} */
Programa 5
Comunicacin
Existen 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 ningn
controlador de comunicacin. Simplemente enviando una seal cuadrada (1 y
0) podemos comunicar dos placas estableciendo nuestro propio protocolo.
Por ejemplo, recibo 1 durante 200 ms despus 0 durante 50 ms entonces eso
significa que debo encender el led 10.
Resumen
Servomotores
Reductora
Motor DC
Controlador
Curso Arduino Iniciativa Focus
Miguel ngel Torres
Servomotores II
Nuestro servomor
Programacin servos
#include <Servo.h> //Librera
Servo s1; //Declaramos servo 1
Servo 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);
posicion indicada
}
// coloca el servo en la
Curso Arduino Iniciativa Focus
Miguel ngel Torres
Problema 6
Ahora que ya sabemos cmo controlar la posicin 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.
Problema 6 b
Controlar la posicin 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
Nunchuck
Acelermetro
Joystick
2 botones
Conexin nunchuck
Para conectar el nunchuck con nuestro focusduino es tan fcil como conectar
la clavija en el adaptador que hemos preparado, prestando especial atencin
en que coincida siempre GND con GND del adaptador (tiene que quedar hacia
fuera)
Quienes tengan un Arduino convencional tendrn que hacer uso de la
protoboard.
Librera nunchuck
Para leer los valores del mando necesitaremos hacer uso de la librera
WiiNchuck. La podris descargar desde la pgina del curso:
openmechatronics.wordpress.com/iniciativa-focus-uma/
Para poder usar la librera WiiNchuck hay que incluirla en la ruta ~/libraries/ de
nuestra carpeta de Arduino y reiniciar el programa de Arduino.
Librera nunchuck
Utilidades de la librera WiiNChuck.h:
void begin()
void update()
int JoyX()
int JoyY()
int AccelX()
int AccelY()
int AccelZ()
bool CButton()
bool ZButton()
Librera nunchuck
Para 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()
Librera nunchuck
void begin()
Librera nunchuck
void update()
Librera nunchuck
Estructura bsica para utilizar la libreria:
#include <WiiNChuck.h>
#include <Wire.h> //esta librera est incluida y nos permite comunicarnos por el
puerto I2C
WiiNChuck chuck;
void setup(){
Wire.begin();
chuck.begin();
}
void loop(){
chuck.update();
//utilizacin del nunchuck
}
Librera 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();
}
Librera 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();
}
Librera nunchuck
int AccelX():
Este metodo nos devuelve el valor leido del eje X del acelermetro.
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();
}
Librera nunchuck
int AccelY():
Este metodo nos devuelve el valor leido del eje Y del acelermetro.
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();
}
Librera nunchuck
int AccelZ():
Este metodo nos devuelve el valor leido del eje Z del acelermetro.
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();
}
Librera nunchuck
bool CButton():
Este metodo nos devuelve el valor leido del botn 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();
}
Librera 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();
}
Ejercicios nunchuck
3.-Mover los 2 servo motores con el joystick uno conectado al eje X y otro al eje
Y
Trucar un servomotor
1.
2.
3.
4.
5.
6.
7.
8.
Control de Motores
Control de Motor 1
Control de Motor 1
Control de Motor 2
Control de Motor 2
Control de Motor 2
Ejercicio Motores
1.
2.
3.
Referencias
Gracias!
Todos los ejercicios, libreras, esta presentacin y muchos ms proyectos con
arduino estarn en la pgina:
openmechatronics.wordpress.com