Comunicación Humano-Máquina
Transcripción
Comunicación Humano-Máquina
Clase 5: Comunicación Humano-Máquina Conviértete en un Joven Inventor PENTA UC – TAV 2014 Contenidos Comunicación Humano-Máquina • La Comunicación • Problema: “Debugear” el uC • Solución: • Leds • Buzzer • LCD • Comunicación Serial • Desafío Contenidos Comunicación Humano-Máquina • La Comunicación • Problema: “Debugear” el uC • Solución: • Leds • Buzzer • LCD • Comunicación Serial • Desafío La Comunicación Comunicación Humano-Máquina La Comunicación Comunicación Humano-Máquina Canal Contexto ¿En Dónde? ¿Por Dónde? Emisor Mensaje Receptor ¿Quién? ¿Qué? ¿Para Quién? Código ¿Cómo? Contenidos Comunicación Humano-Máquina • La Comunicación • Problema: “Debugear” el uC • Solución: • Leds • Buzzer • LCD • Comunicación Serial • Desafío Problema: “Debugear el uC” Comunicación Humano-Máquina • Contexto: Ocupar un Potenciometro Problema: “Debugear el uC” Comunicación Humano-Máquina • El uC lee la posición del potenciometro a través del ADC. 1 2 3 • Problema: ¿Cómo comprobamos que lo está haciendo bién? • “Debugeamos” Problema: “Debugear el uC” Comunicación Humano-Máquina • “Debugear”: Revisar el correcto funcionamiento de algún proceso que está realizando el uC. • Aprendamos a “Debugear” con distintos métodos Problema: “Debugear el uC” Comunicación Humano-Máquina Canal ¿? Contexto Clase ¿En Dónde? ¿Por Dónde? Emisor uC Valor del Mensaje Sensor Nosotros Receptor ¿Quién? ¿Qué? ¿Para Quién? Código ¿? ¿Cómo? Contenidos Comunicación Humano-Máquina • La Comunicación • Problema: “Debugear” el uC • Solución: • Leds • Buzzer • LCD • Comunicación Serial • Desafío Leds Comunicación Humano-Máquina • Debugear con leds Leds Comunicación Humano-Máquina Aire ¿? Clase ¿En Dónde? uC ¿Quién? ¿Por Dónde? Valor del Sensor Nosotros ¿Qué? ¿Para Quién? Luces ¿? ¿Cómo? Leds Comunicación Humano-Máquina • Funciones a Ocupar: • sensorValue = analogRead(sensorPin); • pinMode(led, OUTPUT); • digitalWrite(led, LOW/HIGH); • delay(10) • valor2= map (valor1, menor1, mayor1, menor2 , mayor2); Leds Comunicación Humano-Máquina • for( valor inicial; ¿se cumple?; haga esto){ //código } int a= 0; int i= 0; for( int i = 0; i<= 10; i++){ a = a +i; } Leds Comunicación Humano-Máquina • Arreglo int arreglo[] = { 10, 20, 4, 9 }; arreglo[0] = 10 arreglo[1] = 20 arreglo[2] = 4 arreglo[3] = 9 Leds Comunicación Humano-Máquina Problema: Hacer el circuito y programa en el cual se prendan los leds según la posición del potenciometro. Tiene que usar el comando for(){} y arreglos. Leds Comunicación Humano-Máquina Hint: int arreglo[] = { 10, 20, 4, 9 }; for( int i = 0; i<= 10; i++){ a = a +i; } Leds Comunicación Humano-Máquina • A armar! Leds Comunicación Humano-Máquina • Código: #define analogPin A0 #define ledCount 8 int ledPins[] = { 2, 3, 4, 5, 6, 7, 8, 9 }; void setup() { for (int thisLed = 0; thisLed < ledCount; thisLed++) { pinMode(ledPins[thisLed], OUTPUT); } } Leds Comunicación Humano-Máquina void loop() { int sensorReading = analogRead(analogPin); int ledLevel = map(sensorReading, 0, 1023, 0, ledCount); for (int thisLed = 0; thisLed < ledCount; thisLed++) { if (thisLed < ledLevel) { digitalWrite(ledPins[thisLed], HIGH); } } } else { digitalWrite(ledPins[thisLed], LOW); } Leds Comunicación Humano-Máquina Ventajas Desventajas Fácil de Armar Muy poco preciso Solo se ocupan leds Mientras más grande, más complejo Barato Ocupa muchas salidas del uC Se puede agrandar según Conocer con anterioridad cantidad de salidas y leds el código de Luces Contenidos Comunicación Humano-Máquina • La Comunicación • Problema: “Debugear” el uC • Solución: • Leds y Botones • Buzzer • LCD • Comunicación Serial • Desafío Buzzer Comunicación Humano-Máquina • Debugear con Buzzer Buzzer Comunicación Humano-Máquina Aire ¿? Clase ¿En Dónde? uC ¿Quién? ¿Por Dónde? Valor del Sensor Nosotros ¿Qué? ¿Para Quién? Sonido ¿? ¿Cómo? Buzzer Comunicación Humano-Máquina • Funciones a Ocupar: • tone(pin, frecuencia); • tone(pin, frecuencia, duración); + - + pin: el pin en el que generar el tono frecuencia: la frecuencia del tono en hercios. duración: la duración del tono en milisegundos (opcional) La función tone genera un PWM de duty 50% que puede cambiar la frecuencia ¿Diferencia con analogWrite()? NOTA: las frecuencias audibles por el oído humano van de los 20Hz a los 20KHz por lo que el parámetro "frecuencia" debería estar comprendido entre estos dos valores. Buzzer Comunicación Humano-Máquina Problema: Hacer el circuito y programa en el cual suene un tono más agudo(mayor frecuencia) cuando el potenciometro este en los 5 [V] y un tono más grave(menor frecuencia) cuando el potenciometro este en los 0[V]. + hint: tone(pin, frecuencia, duración); - + Buzzer Comunicación Humano-Máquina • Esquemático Buzzer Comunicación Humano-Máquina • A armar! Buzzer Comunicación Humano-Máquina • Código: #define sensorPin A0 #define buzzer 9 int sensorValue = 0; int frecuencia= 0; void setup() { pinMode(buzzer, OUTPUT); } void loop() { sensorValue = analogRead(sensorPin); frecuencia = map(sensorValue, 0, 1023, 20, 20000); tone(buzzer, frecuencia); } Buzzer Comunicación Humano-Máquina Ventajas Desventajas Fácil de Armar Se limita la cantidad de escalones según la calidad del parlante y capacidad auditiva Solo es necesario un buzzer Conocer con anterioridad el código de sonidos Barato Contenidos Comunicación Humano-Máquina • La Comunicación • Problema: “Debugear” el uC • Solución: • Leds y Botones • Buzzer • LCD • Comunicación Serial • Desafío LCD Comunicación Humano-Máquina • Liquid Crystal Display (LCD) LCD Comunicación Humano-Máquina Pantalla ¿? Clase ¿En Dónde? uC ¿Quién? ¿Por Dónde? Valor del Sensor Nosotros ¿Qué? ¿Para Quién? ACII ¿? ¿Cómo? LCD Comunicación Humano-Máquina • Funciones a Ocupar: • #include <LiquidCrystal.h> Se incluye la libreria de display de cristal liquidos. • LiquidCrystal lcd(12,11,5,4,3,2); Se crea el objeto “lcd” que ocupa los pines 12, 11, 5, 4, 3 y 2. • lcd.begin(16,2); Si inicia el “lcd” que posee 16 espacios de ancho y 2 de alto. • lcd.print(“hola”); Escribe la palabra “hola” en el lcd, donde esta el cursor LCD Comunicación Humano-Máquina Problema: Poder mostrar en la pantalla de la “LCD” Hola, Mundo Inventor. LCD Comunicación Humano-Máquina • Esquemático LCD Comunicación Humano-Máquina • A armar! (Pág. 77) LCD Comunicación Humano-Máquina • Código: #include <LiquidCrystal.h> LiquidCrystal lcd(12,11,5,4,3,2); void setup(){ lcd.begin(16, 2); lcd.clear(); lcd.print(“Hola, Mundo Inventor"); } void loop(){ } LCD Comunicación Humano-Máquina • Desafio: • Eliminar contenido(clear()) y volver al inicio con el cursor (home()) • Eliminar (cursor(), noCursor()), hacer blink(blink(), noBlink()) y colocar donde quieras(setCursor()) el cursor. • Mover el contenido del display de derecha a izquierda o viceversa (autoscroll(), noAutoscroll(), leftToRight(), rightToLeft()) • Apagar el display (display(), noDisplay()) • Crear un icono propio (createChar()) http://arduino.cc/es/Reference/LiquidCrystal LCD Comunicación Humano-Máquina Ventajas Desventajas Resolución puede ser de hasta 32 digitos Difícil de Armar No es necesario explicar el código Más caro que las soluciones anteriores Interacción monodireccional Contenidos Comunicación Humano-Máquina • La Comunicación • Problema: “Debugear” el uC • Solución: • Leds y Botones • Buzzer • LCD • Comunicación Serial • Desafío Comunicación Serial Comunicación Humano-Máquina • Serial Comunicación Serial Comunicación Humano-Máquina Clase ¿En Dónde? uC ¿Quién? Cables/ ¿? Pantalla ¿Por Dónde? Valor del Sensor Nosotros ¿Qué? ¿Para Quién? ACII ¿? ¿Cómo? Comunicación Serial Comunicación Humano-Máquina • Funciones a ocupar: • Serial.begin(9600); • Serial.println(sensorValue); • Monitor Serial Comunicación Serial Comunicación Humano-Máquina • Funciones a ocupar: • Serial.begin(9600); Establece la velocidad de datos en bits por segundo (baudios) para la transmisión de datos en serie • Serial.println(“hola”); Imprime los datos al puerto serie como texto ASCII Comunicación Serial Comunicación Humano-Máquina Problema: Mostrar en el monitor serial el valor del potenciometro. Comunicación Serial Comunicación Humano-Máquina • A armar! Comunicación Serial Comunicación Humano-Máquina • Código: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } void loop() { int sensorValue = analogRead(A0); Serial.println(sensorValue); delay(1);} Comunicación Serial Comunicación Humano-Máquina • Funciones a ocupar: • Serial.available(); Devuelve el número de bytes (caracteres) disponibles para ser leidos por el puerto serie. Se refiere a datos ya recibidos y disponibles • Serial.read(); Lee los datos entrantes en el buffer de comunicación. • http://arduino.cc/es/Reference/serial Comunicación Serial Comunicación Humano-Máquina Problema: Mostrar en el LCD lo que envíe por el monitor serial Comunicación Serial Comunicación Humano-Máquina • A armar! Comunicación Serial Comunicación Humano-Máquina • Código: #include <LiquidCrystal.h> LiquidCrystal lcd(12,11,5,4,3,2); void setup() { Serial.begin(9600); Serial.println(“Comunicación Serial funcionando”); lcd.begin(16, 2); lcd.clear(); lcd.print(“LCD funcionando"); } Comunicación Serial Comunicación Humano-Máquina void loop(){ if (Serial.available()) { delay(100); lcd.clear(); while (Serial.available() > 0) { lcd.print(Serial.read()); } } } Comunicación Serial Comunicación Humano-Máquina Ventajas Desventajas Resolución puede ser la que quieras Es necesario una placa arduino No es necesario explicar el código Más caro que las soluciones anteriores Interacción bidereccional Contenidos Comunicación Humano-Máquina • La Comunicación • Problema: “Debugear” el uC • Solución: • Leds y Botones • Buzzer • LCD • Comunicación Serial • Desafío Desafio: Juego Snake Comunicación Humano-Máquina DESAFIO! Logren la comunicación bidireccional! Que el microcontrolador verifique que letra se esta ingresando. Si esta letra es “l” que prenda un led, si es “p” que parpade el led y si es ”a” que apague el led. Resumen Comunicación Humano-Máquina • La Comunicación • Problema: “Debugear” el uC • Solución: • Leds y Botones • Buzzer • LCD • Comunicación Serial • Desafío Clase 5: Comunicación Humano-Máquina Conviértete en un Joven Inventor PENTA UC – TAV 2014