Вы находитесь на странице: 1из 34

Seminario de Arduino

Juan José Echevarría, Adolfo García


Índice
 ¿Qué es Arduino?
 Historia
 Placas
 Configuración
 Programación
 Interacción pines digitales/analógicos
 Acceso a memoria
 Timers
 Interrupciones
 UART/SPI/I2C
 Sleep/Power
 Ejercicios

Seminario Arduino
¿Qué es Arduino?
 Plataforma Electrónica

 Software/Lenguaje de Programación

 Sistema Open Source

 USO FÁCIL E INTUITIVO

www.arduino.cc

Seminario Arduino
¿Cómo surge Arduino?
 2005 ->Instituto de Diseño Interactivo Ivrea (Italia)
 David Cuartielles y Massimo Banzi
 Problemas existentes
 Limitación tecnológica
 Usuario no experto
 Plataformas existentes ->complejas, especializadas o cerradas
 Limitación económica
 Solución
 Plataforma OpenSource
 ¡¡¡La comunidad Arduino tiene más de 120 mil
usuarios!!!!

Seminario Arduino
¿Por qué usar Arduino?
 Sencilla Programación
 Rápido Prototipado
 Grabación mediante USB
 Gran extensibilidad todo tipo de sensórica y
comunicaciones. “SHIELDS”

 SHIELD: Módulo extra para añadir funciones:


 Ethernet, Wifi, Zigbee, GPRS,…

Seminario Arduino
Placas: Arduino Uno
 uC ATmega 328 a 16MHz
 Flash 32KB
 RAM 2KB
 EEPROM 1KB
 5 entradas Analógicas [0-5V]
 14 Pines E/S Digitales
 6 PWM
 Puerto serie (0,1)
 I2C (4,5)
 SPI (10, 11, 12, 13)

Seminario Arduino
Placas: Arduino Mega2560
 uC ATmega 2560 a 16MHz
 Flash 256KB
 RAM 8KB
 EEPROM 4KB
 15 entradas Analógicas [0-5V]
 54 Pines E/S Digitales
 14 PWM
 4 Puertos series (0-1,19-18,17-16,15-
14)
 I2C (20,21)
 SPI (50,51,52,53)

Seminario Arduino
Placas: Arduino Fio y Nano
 Fio
 Orientado a aplicaciones inalámbricas
 Atmega328P a 8MHz
 14 Entradas/Salidas digitales
 6 PWM
 Pines de alimentación de 3.3V
 Conector para baterías
 Conector para módulos xbee

 Nano
 Idénticas características que Duemilanove
 Alimentación a través de mini-USB
 Pensado para aplicaciones embebidas

Seminario Arduino
Placas: Arduino LilyPad y Seeeduino Film

Seminario Arduino
Shields Arduino
Ethernet XBEE

Wifi Relés

Seminario Arduino
Características entorno Arduino
 Basado en C/C++

 Librerías-> programación
por objetos (C++)
 Serial.begin(9600);
 Servo servo1;
 Librerías familia AVR

 Entorno propio de desarrollo

Seminario Arduino
Arduino IDE: configuración
 Descargar la última publicación de la página web ->
www.arduino.cc
 Descomprimir fichero
 Conectar Arduino mediante USB
 Si los drivers no se instalan automáticamente, instalar
manualmente en …/arduino/drivers
 Ejecutar aplicación
 Seleccionar el puerto serie
 Seleccionar la placa Arduino en uso

Seminario Arduino
Arduino IDE

Seminario Arduino
Programación
 Estructura:
 setup( )
 Al inicio de un programa
 Inicia variables, configura los pins, librerías, ...
 loop()
 Función principal del programa
 Bucle infinito
 Estructuras de control, operadores, tipos de datos…
 C/C++
 Constantes propias
 HIGH/LOW
 INPUT/OUTPUT

Seminario Arduino
Funciones E/S
 Funciones E/S digitales:
 pinMode(pin, modo); Inicialización
 digitalWrite(pin, estado); Activación de una salida
 Val=digitalRead(pin); Lectura de una entrada
 Funciones E/S analógicas y PWM:
 analogWrite(pin, valor); Salida en PWM
 Val=analogRead(pin); Entrada
 Val= map(Val,init,fin,init2,fin2) Mapear valor
 Función espera:
 delay(ms) Retraso en milisegundos

Seminario Arduino
Ejemplo

Seminario Arduino
UART
 Arduino Uno
 Serial: Pines 0 (Rx) y 1 (Tx) -> compartido con USB
 Arduino Mega
 Serial: Pines 0 (Rx) y 1 (Tx) -> compartido con USB
 Serial1: Pines 19 (Rx) y 18 (Tx)
 Serial2: Pines 17 (Rx) y 16 (Tx)
 Serial3: Pines 15 (Rx) y 14 (Tx)
 Funciones
 byte=Serial.read(); Recepción serie
 Serial.print(a)/Serial.println(a); Imprimir en pantalla
 Serial.write(a); Envío de un dato
 Serial.begin(baudios); Inicialización serie
 num=Serial.available(); Comprobar si hay datos
 Serial.end();

Seminario Arduino
Ejemplo

Seminario Arduino
Interrupciones
 Externas
 Arduino Uno
 0 (pin digital 2)
 1 (pin digital 3)
 Arduino Mega
 0 (pin digital 2)
 1 (pin digital 3)
 2 (pin digital 21)
 3 (pin digital 20)
 4 (pin digital 19)
 5 (pin digital 18)

Seminario Arduino
Interrupciones
 Externas
 attachInterrupt(interrupción, función, modo)
 interrupción-> número interrupción
 0 o 1 -> Arduino Uno
 0 a 5 -> Arduino Mega
 función-> función a la que se salta cuando ocurre
 modo-> cuándo ocurre
 LOW-> pin está a valor bajo (LOW)
 CHANGE-> pin cambia de valor
 RISING-> pin pasa de valor bajo (LOW) a alto (HIGH)
 FALLING-> pin cambie de valor alto (HIGH) a bajo (LOW)

Seminario Arduino
Ejemplo

Seminario Arduino
Timers
 Librerías
 Timer1 -> http://www.arduino.cc/playground/Code/Timer1
 Descargar y copiar librería al directorio ‘/arduino-
1.0/libraries/’
 Incluirla en la clase principal (.ino)
 #include <TimerOne.h>
 Uso básico
 Timer1.initialize(periodo);//iniciar timer con tiempo en ms
 Timer1.attachInterrupt(función,periodo);//llamada a interrupción
al desbordarse el timer (periodo opcional)
 Precisión
 Timer1->16 bits (65536) y el preescaler /256 (16MHz/256)
=65536/62500 = 1.048576s

Seminario Arduino
PROGMEM
 Utilizar memoria flash para almacenar y leer
variables
 No se pueden grabar datos durante ejecución, sólo
lectura
 Incluir en cabecera
 #include <avr/pgmspace.h>
 Guardar datos en memoria
 char array[] PROGMEM={“hola”};
 Leer (byte a byte en un bucle)
 char=pgm_read_byte(&array[pos]);

Seminario Arduino
EEPROM
 Escribir/leer en memoria EEPROM
 Arduino Uno-> 1kB
 Arduino Mega-> 4kB
 #include <EEPROM.h>
 EEPROM.write(dirección, valor);//valor de 0 a 255
 Dirección de 0-1023: Arduino Uno
 Dirección de 0-4095: Arduino Mega
 EEPROM.read(dirección);//lee un byte de una
posición
 100.000 ciclos lectura/escritura
 Permite uso durante ejecución
Seminario Arduino
SPI
 Arduino como maestro
 Arduino Uno
 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
 Arduino Mega
 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
 Funciones
 #include <SPI.h>
 SPI.begin();//Iniciar librería SPI
 SPI.transfer(byte);//Envía/recibe un byte vía SPI
 SPI.setClockDivider(divisor);//Divisor de reloj relativo al reloj del
sistema

Seminario Arduino
SPI
 SPI.setDataMode(modo);//polaridad y fase
Modo Polaridad Fase reloj
reloj
SPI_MODE0 0 0

SPI_MODE1 0 1

SPI_MODE2 1 0

SPI_MODE3 1 1

 SPI.setBitOrder(orden);//orden bits
 LSBFIRST
 MSBFIRST
 SPI.end();

Seminario Arduino
Wire
 Comunicación I2C
 Arduino Uno
 A4 (SDA) y A5 (SCL)
 Arduino Mega
 20 (SDA) and 21 (SCL)
 Funciones
 Wire.begin(dirección);//unirse bus I2C->dirección esclavo
7 bits opcional, si no se especifica es maestro
 Wire.beginTransmission(dirección);//empezar a
comunicarse con esclavo
 Wire.write(val);//datos a enviar

Seminario Arduino
Wire
 Wire.endTransmission();//fin
Retorno Significado
0 Éxito

1 Datos no entran en búfer de tx

2 NACK en tx. de la dirección

3 NACK en tx. de los datos

4 Otro

 Wire.requestFrom(dirección,cantidad);//pedir datos al
esclavo
 Wire.available();//cantidad de datos
 Wire.read();//leer un byte
 Interrupciones de servicio

Seminario Arduino
Ejemplo

Seminario Arduino
Otras librerías
 Comunicación con módulos XBee
 http://code.google.com/p/xbee-arduino/
 Twitter
 http://arduino.cc/playground/Code/TwitterLibrary
 Servos
 http://arduino.cc/en/Reference/Servo
 NewSoftSerial
 http://arduiniana.org/libraries/newsoftserial/
 Sleep (AVR)
 http://www.nongnu.org/avr-libc/user-manual/group__avr__sleep.html
 http://donalmorrissey.blogspot.com/2010/04/putting-arduino-diecimila-to-
sleep-part.html
 Power (AVR)
 http://www.nongnu.org/avr-libc/user-manual/group__avr__power.html

Seminario Arduino
PREGUNTAS
PAUSA

Seminario Arduino
Shield desarrollada
 Conexiones
 LDR: pin A0
 Led rojo: pin 3
 Led amarillo: pin 5
 Led verde: pin 6
 Pulsador 1: pin 4
 Pulsador 2: pin 7
 RFID: pin RX
 Jumper desconectado para grabación
 Jumper conectado para ejecución

No conectar el jumper
en los pines superiores

Seminario Arduino
Ejercicios
 Desarrollar una aplicación que obtenga datos de un
sensor de luz (LDR) y active un led
proporcionalmente al reducir la iluminación.

 Desarrollar una aplicación que lea 2 tarjetas RFID,


de forma que al pasar una de ellas encienda los
leds, y al pasar la otra los apague.

Seminario Arduino

Вам также может понравиться