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