Вы находитесь на странице: 1из 58

Clase 5: Comunicación

Humano-Máquina
Fundamentos de Programación
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
¿Por Dónde?
¿En 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

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
¿Por Dónde?
¿En Dónde?

Valor del
Emisor
uC Mensaje Nosotros
Receptor
Sensor
¿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
¿Por Dónde?
¿En Dónde?

Valor del
uC Nosotros
Sensor
¿Quién? ¿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

Mientras más grande, más


Solo se ocupan leds
complejo
Ocupa muchas salidas del
Barato
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
¿Por Dónde?
¿En Dónde?

Valor del
uC Nosotros
Sensor
¿Quién? ¿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

Se limita la cantidad de
escalones según la
Fácil de Armar
calidad del parlante y
capacidad auditiva
Solo es necesario un Conocer con anterioridad
buzzer 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
¿Por Dónde?
¿En Dónde?

Valor del
uC Nosotros
Sensor
¿Quién? ¿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


Difícil de Armar
hasta 32 digitos
No es necesario explicar Más caro que las
el código 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

Cables/
¿?
Pantalla
Clase
¿Por Dónde?
¿En Dónde?

Valor del
uC Nosotros
Sensor
¿Quién? ¿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 Es necesario una placa


que quieras arduino
No es necesario explicar Más caro que las
el código 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