seminario de arduino deustotech
Post on 04-Feb-2015
3.765 Views
Preview:
DESCRIPTION
TRANSCRIPT
Seminario de Arduino
Juan José Echevarría, Adolfo García
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
Seminario Arduino
¿Qué es Arduino?
Plataforma Electrónica
Software/Lenguaje de Programación
Sistema Open Source
USO FÁCIL E INTUITIVO
www.arduino.cc
¿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!!!!
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,…
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
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
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
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
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
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-sle
ep-part.html
Power (AVR) http://www.nongnu.org/avr-libc/user-manual/group__avr__power.html
PREGUNTAS
Seminario Arduino
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.
top related