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

Documentos relacionados