Taller de Hardware Libre con Arduino Pablo Suárez Hernández
[email protected]
Adrián Rodríguez Vargas
[email protected] Oficina de Software Libre - http://osl.ull.es Universidad de La Laguna
Cursos ISLA: Mayo 2010
Índice Introducción Microcontroladores ¿Qué es Arduino? ¿Por qué Arduino? Versiones de Arduino ¿Qué puedo hacer con Arduino?
Manos a la obra Requisitos Instalación del IDE de Arduino ¡A cacharrear!
Índice (II) Ejercicios: Control de LED Sensores digitales Sensores analógicos Actuadores Comunicación con Arduino
Realización de pequeño proyecto
Microcontroladores Circuito integrado o chip Bajo coste y consumo energético Tres unidades: –
CPU
–
Memoria (RAM y ROM/EPROM/EEPROM/FLASH)
–
E/S
Microcontroladores Principales Fabricantes: Intel (8008, 8086) Microchip (Piccard) Motorola (68HC11) Freescale (PowerPC) Atmel (AVR)
¿Qué es Arduino? Placa de programable E/S analógicas y digitales Conexión RS-232 o USB Chip Atmega8 Arduino = Intel 286
¿Qué es Arduino?
¿Por qué Arduino? ¡Es libre! Multiplataforma (Linux, Windows, Mac) Rápido Prototipado Bootloader Extensible Bajo coste (25 € aprox.) Abundante documentación Comunidad
Versiones de Arduino LilyPad
Nano
Duemilanove
Mini
Mega
Arduino Duemilanove Características Técnicas: 14 pines E/S digitales 6 pines E/S analógicos 6 pines Salida PWM 16Kb o 32Kb memoria FLASH 1Kb RAM (actualmente 2 Kb) ATMega168 a 16Mhz Alimentación USB o Pila 9V
¿Qué hacer con Arduino? Objetos interactivos Sensores digitales: ●
Interruptor
●
Termostato
●
Switches (electromagnéticos, de luz)
Sensores analógicos: ● ●
Termistor (temperatura) LDR (luz)
Actuadores: ● ●
Leds Motores PaP
Conseguir Arduino España: Libelium: www.libelium.com BricoGeek: www.bricogeek.com e-lioness: www.e-lioness.com TuxBrain: www.tuxbrain.com Cana Kit: www.canakit.es Electan: www.electan.com Listado completo (Internacional): arduino.cc/en/Main/Buy
Primeros pasos Descargar el software http://arduino.cc/en/Main/Software
Descomprimir Abrir IDE de Arduino
Arduino IDE Compilar
Parar
Nuevo
Abir
Guardar
Subir Serial Monitor
Estructura #Definición de variables void setup(){ #Definición de pines } void loop(){ #Lógica de nuestro Arduino }
HelloLed: Montaje
HelloLed: Código #Definición de variables int ledPin =
13;
void setup(){ #Inicializamos el pin13 como salida pinMode(ledPin, OUTPUT); } void loop(){ #Se pone a HIGH (5 v) el pin13 digitalWrite(ledPin, HIGH); }
BlinkLed #Definición de variables int ledPin =
13;
void setup(){ #Inicializamos el pin13 como salida pinMode(ledPin, OUTPUT); } void loop(){ digitalWrite(ledPin, HIGH); #Ponemos a HIGH (5v) el pin13 delay(1000); #Esperamos 1 segundo digitalWrite(ledPin, LOW); #Ponemos a LOW (0v) el pin13 delay(1000); #Esperamos 1 segundo }
Pulsador: Montaje
Pulsador: Código const int ledPin =
13;
const int buttonPin = 2; void setup(){ pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop(){ buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
Sensores Analógicos: Termistor LDR Potenciometro
Salidas Analogicas Salida Digital: 0 v, 5 v Salidas Analógicas: valor numérico Ejemplo Fadding (Fade in - Fade out) www.arduino.cc/en/Tutorial/Fading
Comunicación I: Serial Led RGB:
Comunicación I: Serial Serial.begin(9600);
← Establece comunicación a 9600 bauds
Serial.available();
← Devuelve el número de bytes por leer
Serial.read();
← Lee un byte del Serial
¿Cómo podemos leer un mensaje de más de 1 byte? http://arduino.cc/en/Reference/Serial
Comunicación I: Serial Formas de leer mensajes:
if( Serial.available() ) { val1 = Serial.read(); while( !Serial.available() ); val2 = Serial.read(); // and so on }
// protocol is "CCaaaa", two bytes of command, four bytes of args If (Serial.available() >= 6) { // command length is 6 bytes cmd0 = Serial.read(); cmd1 = Serial.read(); arg0 = Serial.read(); arg1 = Serial.read(); // ...etc... }
http://arduino.cc/en/Reference/Serial
Comunicación I: Serial Almacenar mensaje en buffer: const int BUFFER_SIZE = 100; char buffer[BUFFER_SIZE]; void loop() { ... memset(buffer, '\0', BUFFER_SIZE); while (Serial.available() > 0) { buffer[count] = Serial.read(); count++; delay(10); }
... }
http://arduino.cc/en/Reference/Serial
Comunicación II: Consola Comunicación desde programa externo: import serial print "Conectando a Arduino...", try: ser = serial.Serial("/dev/ttyUSB0", 9600) except: print "ERROR - No se ha podido conectar" print "OK" … ser.write(input)
← Escribe “input” en el puerto serial.
ser.read(n)
← Lee “n” bytes del puerto serial.
ser.close()
← Cierra la conexión con el puerto serial.
Comunicación III: IR Comunicación INFRAROJA:
http://tthheessiiss.wordpress.com/2009/08/05/dirt-cheap-wireless/
Motores PaP ¿Qué es un motor PaP? ¿Para qué usarlo? ¿Cómo funcionan? ¿Dónde comprarlos reciclarlos? Proyectos con motores PaP ●
Brazo robot
●
CNC's
Motores PaP
Motores PaP ●
Librería Stepper.h de Arduino #include miMotor Stepper(steps, pin1, pin2); miMotor Stepper(steps, pin1, pin2, pin3, pin4) miMotor.step(100);
●
Ejercicio
Relés ●
¿Para que sirve un relé?
●
¿Cómo funciona?
●
Distintos relés
I2C Protocolo de Comunicación en Serie Librería wiring.h: ●
●
●
Permite establecer una comunicación serial usando 2 pines digitales (SDA, SCL). El protocolo acepta múltiples dispositivos conectados al mismo bus. (ADDR). Modo estandar a 100Kbits por segundo.
Shifting ●
¿Qué es el shifting?
●
Tipos (Shift-in Shift-out)
●
¿Qué puede hacer por mi y cuando?
●
Integrado 74HC595N
●
Ejemplos
●
www.arduino.cc/es/Tutoriales/74HC595
●
www.arduino.cc/en/Tutorial/ShiftIn
Evaluación Están todos suspendidos, ...
...de momento
Otras herramientas ●
Fritzing (http://fritzing.org)
●
Pure Data (http://puredata.info)
●
Processing (http://processing.org)
Comunidades Arduino ●
Arduino.cc
●
Canarnova:
http://groups.google.com/group/canarnova
Bibliografía
●
Arduino.cc :)
Taller de Hardware Libre con Arduino Pablo Suárez Hernández Adrián Rodríguez Vargas
-
[email protected]
-
[email protected]
Oficina de Software Libre - http://osl.ull.es Universidad de La Laguna
¡Gracias por venir! Cursos ISLA: Mayo 2010