seminario de arduino deustotech

34
Seminario de Arduino Juan José Echevarría, Adolfo García

Upload: adolfo-garcia

Post on 04-Feb-2015

3.765 views

Category:

Education


3 download

DESCRIPTION

Seminario introductorio a la plataforma Arduino

TRANSCRIPT

Page 1: Seminario de arduino DeustoTech

Seminario de Arduino

Juan José Echevarría, Adolfo García

Page 2: Seminario de arduino DeustoTech

Seminario Arduino

Í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

Page 3: Seminario de arduino DeustoTech

Seminario Arduino

¿Qué es Arduino?

Plataforma Electrónica

Software/Lenguaje de Programación

Sistema Open Source

USO FÁCIL E INTUITIVO

www.arduino.cc

Page 4: Seminario de arduino DeustoTech

¿Cómo surge Arduino?

Seminario 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!!!!

Page 5: Seminario de arduino DeustoTech

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,…

Page 6: Seminario de arduino DeustoTech

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

Page 7: Seminario de arduino DeustoTech

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)

Page 8: Seminario de arduino DeustoTech

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

Page 9: Seminario de arduino DeustoTech

Seminario Arduino

Placas: Arduino LilyPad y Seeeduino Film

Page 10: Seminario de arduino DeustoTech

Seminario Arduino

Shields Arduino

Ethernet XBEE

Wifi Relés

Page 11: Seminario de arduino DeustoTech

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

Page 12: Seminario de arduino DeustoTech

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

Page 13: Seminario de arduino DeustoTech

Seminario Arduino

Arduino IDE

Page 14: Seminario de arduino DeustoTech

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

Page 15: Seminario de arduino DeustoTech

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

Page 16: Seminario de arduino DeustoTech

Seminario Arduino

Ejemplo

Page 17: Seminario de arduino DeustoTech

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();

Page 18: Seminario de arduino DeustoTech

Seminario Arduino

Ejemplo

Page 19: Seminario de arduino DeustoTech

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)

Page 20: Seminario de arduino DeustoTech

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)

Page 21: Seminario de arduino DeustoTech

Seminario Arduino

Ejemplo

Page 22: Seminario de arduino DeustoTech

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

Page 23: Seminario de arduino DeustoTech

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]);

Page 24: Seminario de arduino DeustoTech

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

Page 25: Seminario de arduino DeustoTech

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

Page 26: Seminario de arduino DeustoTech

Seminario Arduino

SPI SPI.setDataMode(modo);//polaridad y fase

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

SPI.end();

Modo Polaridad reloj

Fase reloj

SPI_MODE0

0 0

SPI_MODE1

0 1

SPI_MODE2

1 0

SPI_MODE3

1 1

Page 27: Seminario de arduino DeustoTech

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

Page 28: Seminario de arduino DeustoTech

Seminario Arduino

Wire Wire.endTransmission();//fin

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

Interrupciones de servicio

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

Page 29: Seminario de arduino DeustoTech

Seminario Arduino

Ejemplo

Page 30: Seminario de arduino DeustoTech

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-sle

ep-part.html

Power (AVR) http://www.nongnu.org/avr-libc/user-manual/group__avr__power.html

Page 31: Seminario de arduino DeustoTech

PREGUNTAS

Page 32: Seminario de arduino DeustoTech

Seminario Arduino

PAUSA

Page 33: Seminario de arduino DeustoTech

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

Page 34: Seminario de arduino DeustoTech

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.