Taller básico de programación de dispositivos Arduino
Transcripción
Taller básico de programación de dispositivos Arduino
Taller básico de programación de dispositivos Arduino ! Gabriel Astudillo Muñoz Escuela de Ingeniería Civil en Informática Universidad de Valparaíso, Chile http://informatica.uv.cl Descripción del kit entregado Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 2 informatica.uv.cl Inventario Diodo LED Rojo (x1) Cables de conexión (x10) Resistencia 330[Ω] (x1) Resistencia 10[KΩ] (x1) Fotoresistencia (x1) Potenciómetro (x1) Botón (x1) Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 3 informatica.uv.cl Inventario Placa Sparkfun (x1) Protoboard (x1) Cable USB A-‐miniB Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 4 informatica.uv.cl Terminología Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 5 informatica.uv.cl Terminología específica Digital CanWdades discretas Ejemplo: valor de un bit. conjunto de números enteros entre 0 y 1023. conjunto de números enteros entre 0 y 255. Rango de temperatura entre 10o y 20o, medido en medios grados. (10o, 10.5o, …) Ejemplo: temperatura ambiente medida con mercurio. conjunto de número reales ente 0 y 1023. conjunto de números reales entre 0 y 255. Taller básico de programación de dispositivos Arduino – Análogo CanWdades Reales (ℝ) Ingeniería Civil Informática 6 informatica.uv.cl Terminología específica Cuan3zar Los computadores no pueden interpretar directamente las señales analógicas Sensor de temperatura Taller básico de programación de dispositivos Arduino Sistema computacional – No se puede realizar directamente Ingeniería Civil Informática 7 informatica.uv.cl Terminología específica Cuan3zar Los computadores no pueden interpretar directamente las señales analógicas Sensor de temperatura A/D Debe exisWr un bloque de conversión. Este bloque debe cuanWzar la medición análoga y asignarle un valor binario Taller básico de programación de dispositivos Arduino – Sistema computacional Resolución de la conversión Ingeniería Civil Informática 8 informatica.uv.cl Terminología específica Cuan3zar Ejemplo: la resolución es de 10 bits. Esto significa que el bloque de conversión puede asignar 1024 (210) valores disWntos a la variable análoga. Valor Análogo 0 0,005 0,010 0,015 . . . 4,990 4,995 5 Valor entero 0 1 2 3 . . . 1021 1022 1023 Taller básico de programación de dispositivos Arduino Sensor de temperatura Voltaje [ 0,5[V] ] – A/D Sistema computacional entero {0,1,2,…, 1023} Ingeniería Civil Informática 9 informatica.uv.cl Microcontrolador (μC) Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 10 informatica.uv.cl Arduino Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 11 informatica.uv.cl Arquitectura de Arduino Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 12 informatica.uv.cl Descripción General Es hardware open source Especificaciones y diagramas son de acceso público El socware con que se programa es open source. Existen muchas implementaciones de la placa original. Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 13 informatica.uv.cl Descripción del Hardware Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 14 informatica.uv.cl Descripción del Hardware Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 15 informatica.uv.cl Descripción del Hardware Entradas/ Salidas Digitales Entradas/ Salidas Análogas Entradas Análogas Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 16 informatica.uv.cl Descripción del Hardware 14 pines de I/O Digitales 6 pines de salidas análogas Velocidad: 16[MHz] Almacenamiento: 32[KB] en flash RAM: 2[KB] Alimentación: por USB o fuente externa de 7[V] a 15[V]. E/S Digital Con respecto a E/S HIGH : 5[V] LOW : 0[V] Todas las E/S operan a 5[V]. Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 17 informatica.uv.cl Descripción del Hardware Pueden uWlizar como entrada o salida: pinmode(pin, modo); pin: nº del pin que se quiere usar. modo: {OUTPUT, INPUT}. Ej.: pinmode(9, OUTPUT); Como E/S digital: valor = digitalRead(pin); digitalWrite(pin,valor); Ej.: digitalWrite(9, HIGH); Como Salida análoga: analogWrite(pin,valor); Los pines ~X Wenen una resolución de 8 bits valor={0,1,2, …, 255). El valor entero 255 corresponde a 5[V]. Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 18 informatica.uv.cl Descripción del Hardware Las 6 entradas análogas proporcionan una resolución de 10 bits. El valor conWnuo ingresado puede ser representado por un nro entero entre 0 y 1023. valor = analogRead(pin); pin: valor del pin (A0, A1, …,A5). valor: nro entero entre 0 y 1023. Un valor 1023 representa 5[V] Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 19 informatica.uv.cl Descripción del Hardware Protoboard Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 20 informatica.uv.cl Descripción del Hardware Protoboard Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 21 informatica.uv.cl Software necesario Integrated Development Environment (IDE) para Arduino hmp://arduino.cc/en/Main/Socware Disponible para: Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 22 informatica.uv.cl Modalidad de trabajo Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 23 informatica.uv.cl Arquitectura del IDE para Arduino Compila el código y lo transfiere a la placa Verifica el código Monitor serial ! Área de Edición de Código Área de Mensajes Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 24 informatica.uv.cl Forma de programar Declaraciones Globales setup() loop() Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 25 informatica.uv.cl Forma de programar Encendido de la placa Reset Carga de un programa Declaraciones Globales //Sección Global setup() void setup(){ instruccion 1; instruccion 2; ... ... instrucción k; – void loop(){ instruccion 1; instruccion 2; ... ... instrucción j; } Taller básico de programación de dispositivos Arduino loop() instruccion 1; instruccion 2; ... ... instrucción j; } Ingeniería Civil Informática 26 informatica.uv.cl Modalidad de trabajo esperado IDEA Diseño a nivel de Sistema Diseño Hardware (electrónica) SI Implementación Diseño Sofware (lógica de la solución) ¿Es lo que se esperaba? Fin de la etapa de prototipado NO Revisión de los diseños Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 27 informatica.uv.cl Comunicación Arduino-Computador Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 28 informatica.uv.cl Monitor serial Scketch Monitor Serial Datos enviados desde la placa Arduino hacia el computador a través del puerto USB Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 29 informatica.uv.cl Funciones de comunicación Serial.begin(velocidad) Establece velocidad de conexión en baudios. Por omisión velocidad=9600[baudios]1. Serial.available() void setup() { Serial.begin(9600); } ! void loop() { if (Serial.available() > 0) {//Si hay datos disponibles //Codigo relacionado con la lectura de datos //del puerto serie. } } 1 Las velocidades permiWdas (en baudios) son: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200. Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 30 informatica.uv.cl Funciones de comunicación Serial.print(valor[,formato]) Serial.println(valor[,formato]) Envía datos al puerto serie como texto ASCII. Serial.read() int incomingByte = 0; ! // dato serial que llega void setup() { Serial.begin(9600); } ! void loop() { if (Serial.available() > 0) {//Si hay datos // leer el byte que llega incomingByte = Serial.read(); ! } } // Mostrar el dato recibido Serial.print("Dato recibido: "); Serial.println(incomingByte, DEC); Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 31 informatica.uv.cl Primer prototipo Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 32 informatica.uv.cl Idea inicial Se quiere realizar un sistema, basado con Arduino, que prenda y apague un LED cada 1 segundo 1) Diseño del Sistema Software (lógica de la solución) OUT Arduino LED pin 10 Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 33 informatica.uv.cl Diseño 2) Diseño del Hardware PIN 10 330[Ω] hmp://www.instructables.com Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 34 informatica.uv.cl Diseño 2) Diseño del Hardware Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 35 informatica.uv.cl Diseño 3) Diseño del Socware SW debe alinearse con el HW. PIN 10 void setup() { pinMode(10, OUTPUT); } 330[Ω] Observación: el código DEBE comentarse void setup() { pinMode(10, OUTPUT); //pin 10 como Salida } Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 36 informatica.uv.cl Diseño 3) Diseño del Socware Inicio Poner en nivel ALTO el pin 10 Esperar 1[seg] Poner en nivel BAJO el pin 10 Esperar 1[seg] Sin SW, el HW no sirve Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 37 informatica.uv.cl Diseño 3) Diseño del Socware Inicio Poner en nivel ALTO el pin 10 Esperar 1[seg] Poner en nivel BAJO el pin 10 void loop() { digitalWrite(10, HIGH);// prenda el LED delay(1000); // espere 1[seg] // (1000 milisegundos digitalWrite(10, LOW); // apague el LED delay(1000); // espere 1[seg] } Esperar 1[seg] Sin SW, el HW no sirve Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 38 informatica.uv.cl Diseño 4) Solución final int pinLed = 10; //Pin asociado al LED //que se va a prender/apagar int duracion = 1000; //duracion del parpadeo ! void setup() { pinMode(pinLed, OUTPUT); //Se inicializa el //pin como salida } ! void loop() { digitalWrite(pinLed, HIGH);// prenda el LED delay(duracion); // espere 1[seg] digitalWrite(pinLed, LOW); // apague el LED delay(duracion) // espere 1[seg] } Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 39 informatica.uv.cl Ejemplo 2 Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 40 informatica.uv.cl Se quiere realizar un sistema, basado con Arduino, que prenda y apague un LED cada 1/2 segundo (500ms), sólo cuando el usuario presione un botón. 1) Diseño del Sistema IN OUT Arduino LED Parpadea cuando el botón está presionado Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 41 informatica.uv.cl Antecedentes eléctricos 2) Diseño del Hardware IN OUT 5[V] PIN 1 10[KΩ] PIN 13 Diagrama Símbolo Eléctrico Taller básico de programación de dispositivos Arduino – Si (Vpin13 = 0[V]) Botón presionado else Botón normal Ingeniería Civil Informática 42 informatica.uv.cl Diseño 2) Diseño del Hardware IN OUT 5[V] PIN 10 10[KΩ] 330[Ω] PIN 13 Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 43 informatica.uv.cl Diseño 2) Diseño del Hardware IN OUT 5[V] PIN 10 10[KΩ] 330[Ω] PIN 13 Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 44 informatica.uv.cl Diseño 3) Diseño del Socware Inicio Poner en nivel ALTO el pin 10 Configurar pines Esperar 500[mseg] estadoBoton <- Leer estado del botón NO Si (Vpin13 = 0[V]) Botón presionado else Botón normal SI Poner en nivel BAJO el pin 10 botón presionado? Esperar 500m[seg] Taller básico de programación de dispositivos Arduino – Si (Estadopin13 = LOW) Botón presionado else Botón normal Ingeniería Civil Informática 45 informatica.uv.cl Diseño 3) Diseño del Socware int pinLed = 10; //Pin asociado al LED //que se va a prender/apagar int duracion = 500; //duracion del parpadeo int pinBoton = 13; int estadoBoton; ! void setup() { //... } ! void loop() { estadoBoton = digitalRead(pinBoton); ! ! //... } Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 46 informatica.uv.cl Diseño 3) Diseño del Socware int pinLed = 10; //Pin asociado al LED //que se va a prender/apagar int duracion = 500; //duracion del parpadeo int pinBoton = 13; int estadoBoton; ! void setup() { pinMode(pinLed, OUTPUT);//pin como salida pinMode(pinBoton, INPUT) } ! void loop() { estadoBoton = digitalRead(pinBoton); if(estadoBoton == LOW){ digitalWrite(pinLed, HIGH);// prenda delay(duracion); // espere digitalWrite(pinLed, LOW); // apague delay(duracion) // espere } } Taller básico de programación de dispositivos Arduino – el LED 1[seg] el LED 1[seg] Ingeniería Civil Informática 47 informatica.uv.cl Ejemplo 3 Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 48 informatica.uv.cl Manejo de puertos Arduino Wene tres puertos: Cada puerto está controlado por tres registros (variables) de 8 bits: Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 49 informatica.uv.cl Manejo de puertos DDRB Ejemplo Configura como pines Digitales INPUT o OUTOUT 8 al 13 los PORTB Pin Digital 13 HIGH Pin Digital 8 HIGH Pin Digital 10 HIGH Taller básico de programación de dispositivos Arduino – Pone valores ALTO o BAJO en pines Digitales 8 al 13 Ingeniería Civil Informática 50 informatica.uv.cl Idea Se quiere realizar un sistema, basado con Arduino, que implemente un secuenciador de 6 LEDs. Cada LED debe durar prendido 1 segundo. Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 51 informatica.uv.cl Idea Se quiere realizar un sistema, basado con Arduino, que implemente un secuenciador de 6 LEDs. Cada LED debe durar prendido 1 segundo. Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 52 informatica.uv.cl Idea Se quiere realizar un sistema, basado con Arduino, que implemente un secuenciador de 6 LEDs. Cada LED debe durar prendido 1 segundo. #define DELAY 1000 ! void setup() { DDRB = B00111111; } ! void loop() { PORTB = 0; //Todos los led apagados } for(int i=0; i<=5; i++){ PORTB = ..............; delay(DELAY); } Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 53 informatica.uv.cl Idea Se quiere realizar un sistema, basado con Arduino, que implemente un secuenciador de 6 LEDs. Cada LED debe durar prendido 1 segundo. #define DELAY 1000 ! void setup() { DDRB = B00111111; } ! void loop() { PORTB = 0; //Todos los led apagados } for(int i=0; i<=5; i++){ PORTB = (1 << i); delay(1000); } Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 54 informatica.uv.cl Ejemplo 4 Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 55 informatica.uv.cl Idea Se quiere realizar un sistema, basado con Arduino, que prenda y apague un LED, cuya frecuencia de parpadeo sea controlable a través de un potenciómetro 1) Diseño del Sistema Potenciómetro IN OUT Nivel de rotación de la perilla (α) LED Parpadea según el nivel de rotación: izq-> lento der-> rápido 10[KΩ] Taller básico de programación de dispositivos Arduino Arduino – Ingeniería Civil Informática 56 informatica.uv.cl Diseño 2) Diseño del Hardware IN 5[V] A 10[KΩ] 5[V] Vout=(1-α)•5[V] A Vout=(1-α)•5[V] C 10[Ω] PIN A3 C PIN A3 B B Diagrama de conexiones Taller básico de programación de dispositivos Arduino Símbolo eléctrico – Ingeniería Civil Informática 57 informatica.uv.cl Diseño 2) Diseño del Hardware IN OUT 5[V] Vout=(1-α)•5[V] A 10[Ω] PIN 10 330[Ω] C PIN A3 B Símbolo eléctrico Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 58 informatica.uv.cl Diseño 2) Diseño del Hardware Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 59 informatica.uv.cl Diseño 3) Diseño del Socware Problema: variar el Wempo de parpadeo según el ángulo de giro del potenciómetro. Analizar los posibles valores de entrada Si 0o≤α≤180o ➡ 5[V]≥Vout≥0[V] ¿cuál es el rango del valor de entrada de A3? Si 0o≤α≤180o ➡ 1023≥A3≥0 Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 60 informatica.uv.cl Diseño 3) Diseño del Socware Inicio Configurar pines duracion <- Leer A3 Poner en nivel ALTO el pin 10 Esperar duracion[seg] Poner en nivel BAJO el pin 10 Esperar duracion[seg] int sensorPin = A3;//El potenciometro esta conectado // al pin analogo A0 int ledPin = 10; // El LED esta conectado al // pin digital 10 int duracion; ! void setup() { pinMode(sensorPin, INPUT); //pin como entrada pinMode(pinLed, OUTPUT); //pin como salida } ! void loop() { duracion = analogRead(sensorPin); ! } //... Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 61 informatica.uv.cl Diseño 3) Diseño del Socware Inicio Configurar pines int sensorPin = A3;//El potenciometro esta conectado // al pin analogo A0 int ledPin = 10; // El LED esta conectado al // pin digital 10 int duracion; ! duracion <- Leer A3 Poner en nivel ALTO el pin 10 Esperar duracion[seg] Poner en nivel BAJO el pin 10 Esperar duracion[seg] void setup() { pinMode(sensorPin, INPUT); //pin como entrada pinMode(pinLed, OUTPUT); //pin como salida } ! void loop() { duracion = analogRead(sensorPin); //Por tratarse de una entrada analogica //duracion esta entre 0 y 1023 digitalWrite(pinLed, HIGH);// prenda el LED delay(duracion); // espere digitalWrite(pinLed, LOW); // apague el LED delay(duracion) // espere } Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 62 informatica.uv.cl Ejemplo 5 Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 63 informatica.uv.cl Idea La idea de este sistema es que un LED se encienda en ausencia de luz ambiental. Si hay luz ambiente, el LED debe permanecer apagado. 1) Diseño del Sistema IN OUT Sensor de luz Arduino Sensor de luz Rsensor[Ω] Fotoresistencia Taller básico de programación de dispositivos Arduino LED – Ingeniería Civil Informática 64 informatica.uv.cl Antecedentes eléctricos 2) Diseño del Hardware (Ausencia total de Luz) Rsensor Rsensor[Ω] Configuración propuesta: (Luz directa) Rsensor Input 5[V] A Rsensor[Ω] Vout C 10[KΩ] PIN Análogo B Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 65 informatica.uv.cl Antecedentes eléctricos 2) Diseño del Hardware (Ausencia total de Luz) Rsensor Rsensor[Ω] Configuración propuesta: 5[V] Input A 10[KΩ] Rsensor[Ω] IN Vout C PIN A0 B (Luz directa) Rsensor En ausencia total de luz: Vout=1,25 Fines prácWcos: Vout<1,5 indica penumbra o ausencia de luz Vout=1,5 es equivalente a un número entero de 307 aprox. Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 66 informatica.uv.cl Antecedentes eléctricos 2) Diseño del Hardware Configuración propuesta: PIN 10 330[Ω] Output Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 67 informatica.uv.cl Solución 5[V] PIN 10 A 330[Ω] 10[KΩ] Rsensor[Ω] Vout C 2) Diseño del Hardware IN PIN A0 B Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 68 informatica.uv.cl Diseño 3) Código final int sensorPin = A0; //Fotoresistencia conectada // al pin analogo A0 int pinLed = 10; // El LED esta conectado al // pin digital 10 int intensidad; Inicio Configurar pines ! intensidad <- Leer Sensor de luz void setup() { pinMode(sensorPin, INPUT); //pin como entrada pinMode(pinLed, OUTPUT); //pin como salida } SI ¿hay luz ambiental ? ! NO Prenda el LED Apague el LED void loop() { intensidad = analogRead(sensorPin); //Si hay luz==>haga algo, ( intensidad > 307) //Si no, haga otra cosa //... } Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 69 informatica.uv.cl Diseño 3) Código final int sensorPin = A0; //Fotoresistencia conectada // al pin analogo A0 int pinLed = 10; // El LED esta conectado al // pin digital 10 int intensidad; Inicio Configurar pines ! void setup() { pinMode(sensorPin, INPUT); //pin como entrada pinMode(pinLed, OUTPUT); //pin como salida } intensidad <- Leer Sensor de luz SI ! ¿hay luz ambiental ? NO Prenda el LED Apague el LED void loop() { intensidad = analogRead(sensorPin); //Por tratarse de una entrada analogica //intensidad esta entre 0 y 1023 if(intensidad > 307) //hay luz ambiente digitalWrite(pinLed, LOW);//apague el LED else digitalWrite(pinLed, HIGH); //prenda el LED } Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 70 informatica.uv.cl Preguntas claves como desarrollador Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 71 informatica.uv.cl Deben preguntarse Qué sensor me permite cumplir con los objeWvos de mi solución. Dicho sensor, cómo lo conecto a la placa Arduino. Qué rango de valores entrega y cuáles de ellos me sirve. Con qué disposiWvo logro que la salida de la placa interactúe con el medio. Taller básico de programación de dispositivos Arduino – Ingeniería Civil Informática 72 informatica.uv.cl