TEORÍA: Zumbador activo, Condicionales y diagramas de flujo.
En esta práctica nos centramos en entender y mejorar la utilidad de los programas que diseñamos o modificamos.
Zumbador activo
Zumbador, buzzer en inglés, es un transductor electroacústico que produce un sonido o zumbido continuo o intermitente de un mismo tono (generalmente agudo). Sirve como mecanismo de señalización o aviso y se utiliza en múltiples sistemas, como en automóviles o en electrodomésticos, incluidos los despertadores. Inicialmente este dispositivo estaba basado en un sistema electromecánico que era similar a una campana eléctrica pero sin el badajo metálico, el cual imitaba el sonido de una campana.
Su construcción consta de dos elementos, un electroimán y una lámina metálica de acero. El zumbador puede ser conectado a circuitos integrados especiales para así lograr distintos tonos. Cuando se acciona, la corriente pasa por la bobina del electroimán y produce un campo magnético variable que hace vibrar la lámina de acero sobre la armadura.
Los buzzer activos son dispositivos que generan un sonido de una frecuencia determinada y fija cuando son conectados a tensión. Mientras que los pasivos pueden variar dicha frecuencia.
Programación condicional
En programación, una sentencia condicional es una instrucción o grupo de instrucciones que se pueden ejecutar o no en función del valor de una condición.
Los tipos más conocidos de sentencias condicionales son el SI..ENTONCES (if..then), el SI..ENTONCES..SI NO (if..then..else) y el SEGÚN (case o switch)
if… then
if() es una función de control que nos permite actuar si alguna condición en particular se cumple, es decir, si las condiciones escritas dentro del if() son verdaderas (TRUE) entonces las instrucciones determinadas en el contenido de la función se ejecutarán. Ejemplo:
if( a > 100) digitalWrite(pin,HIGH);
if… else viene a ser un estructura que se ejecuta en respuesta a la idea «si esto no se cumple haz esto otro». Por ejemplo, si se desea probar una entrada digital, y hacer una cosa si la entrada fue alto o hacer otra cosa si la entrada es baja, usted escribiría que de esta manera:
if (a >= 0) { instruccionesA; } else { instruccionesB; }
La condición es que «a» sea mayor que cero, si se cumple se ejecutan las instruccionesA (todo lo que haya dentro de las llaves), si no se cumple la condición se ejecutan las intruccionesB (todo lo que haya dentro de las llaves). else puede ir precedido de otra condición de manera que se pueden establecer varias estructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma que sean mutuamente excluyentes pudiéndose ejecutar a la vez.
condiciones
X | = | Y | if( X = Y ) // SI X es igual a Y entonces … |
X | != | Y | if( X != Y ) // Si X es dintinto a Y entonces … |
X | > | Y | if( X > Y ) // Si X es mayor que Y entonces … |
X | < | Y | if( X < Y ) // Si X es menor que Y entonces … |
X | <= | Y | if ( X <= Y ) // Si X es menor o igual que Y entonces… |
X | >= | Y | if( X >= Y ) // Si X es mayor o igual que Y entonces … |
Más teoría en http://www.arduino.utfsm.cl/referencia/if-y-comparadores/ y en http://playground.arduino.cc/ArduinoNotebookTraduccion/Flowcontrol
Condiciones AND y OR
Si quiero que se cumplan dos condicones a la vez (una y otra simultáneas) debo usar doble paréntesis y usar && entre ellos
if ((val > 100) && (val < 140)) { .... }
De la misma forma puedo usar OR poniendo || en lugar de &&. Además hay otras opciones
and &&
and_eq &=
bitand &
bitor |
not !
not_eq !=
or ||
or_eq |=
xor ^
xor_eq ^=
Diagramas de flujo
El diagrama de flujo o diagrama de actividades es la representación gráfica del algoritmo o proceso. Se utiliza en disciplinas como programación, economía, procesos industriales y psicología cognitiva.
Diagrama de flujo para usar una lámpara.
Diagrama de flujo para usar un coche.
Las formas que se usan en un diagrama básico son:
Óvalo o Elipse: Inicio y Final (Abre y cierra el diagrama).
Rectángulo: Actividad / proceso (Representa la ejecución de una o más actividades o procedimientos).
Rombo: Decisión (Formula una pregunta o cuestión que será respondida como si/no TRUE/FALSE)
Reglas Básicas Para la Construcción de un Diagrama de Flujo
-Todos los símbolos han de estar conectados
-A un símbolo de proceso (Rectángulo) pueden llegarle varias líneas
-A un símbolo de decisión (Rombo) pueden llegarle varias líneas, pero sólo saldrán dos (Si o No, Verdadero o Falso).
-A un símbolo de inicio nunca le llegan líneas.
-De un símbolo de fin no parte ninguna línea.
Estos diagramas son útiles para diseñar, entender y depurar programas informáticos.
EJEMPLOS (OPC 2PTS)
Dibujar un diagrama de flujo para dos de las opciones. Se valorará el nivel de detalle, los símbolos y sus formas y las sentencias condicionales y el nivel de detalle de estas. Se hace en un folio y se entrega antes de empezar la siguiente práctica.
a) Hacer el diagrama de un programa que al recibir 2 números (x, y) nos diga cuál es el mayor.
b) Llegar al colegio tras salir de casa cogiendo el ascensor y bajando al bajo, comprobando el buzón y cogiendo correo si lo hubiere, cruzando la calle por un paso de cebra, luego girando la primera a la derecha y la segunda a la izquierda para acabar cruzando un semáforo para entrar en el colegio.
c) Hacer el diagrama de un programa que al recibir 3 números (x, y, z) nos diga cuál es el mayor.
d) Dado un número (x) decir si es divisible de 12.
CIRCUITO 1 (6PTS)
Construye un circuito que avise con señales lumínicas si la humedad relativa excede de 50% (led amarillo), si excede de 75% (led rojo y amarillo) y si excede de 95% (ledes rojo y amarillo y zumbador). Si es menor de 50% debe encenderse el led verde.
CONSTRUYE EL CIRCUITO
CÓDIGO A CARGAR
Es una ampliación del código que usamos para la práctica del dht11 con los 3 ledes y el zumbador incluidos para que se activen en función a la humedad relativa [si la humedad relativa excede de 50% (led amarillo), si excede de 75% (led rojo y amarillo) y si excede de 95% (ledes rojo y amarillo y zumbador). Si es menor de 50% debe encenderse el led verde.]
// vamos a dar un nombre a cada led indicando a que pin esta conectado int rojo = 3; //el led rojo esta conectado al pin 3... int amarillo = 4;//el led amarillo esta conectado al pin 4... int verde = 5;//el led verde esta conectado al pin 5... // vamos a dar un nombre al pin del zumbador int zumb = 8; #include <SimpleDHT.h> //Incluye la librería que nos va a ayudar a manejar el sensor int pinDHT11 = 2; //define el pin 2 como el pin donde tenemos conectado el sensor SimpleDHT11 dht11; //le especifica a la libreria que sensor estamos usando. void setup() { Serial.begin(9600); // abre un puerto serie con la frecuencia estándar (9600 baudios) pinMode(rojo, OUTPUT); pinMode(amarillo, OUTPUT); pinMode(verde, OUTPUT); pinMode(zumb, OUTPUT); } void loop() { Serial.println("================================="); // imprime en el monitor lo que está entre las comillas (vale para separar datos) desde el comienzo de una línea (Serial.println) Serial.println("Sensor de temperatura y humedad DHT11"); // imprime en el monitor lo que está entre las comillas desde el comienzo de una línea (Serial.println) // lee los datos byte temperature = 0; byte humidity = 0; byte data[40] = {0}; if (dht11.read(pinDHT11, &temperature, &humidity, data)) { Serial.print("La lectura del DHT11 ha fallado"); // imprime en el monitor un mensaje de error si los datos obtenidos no son correctos return; } // LED VERDE if(humidity<50) {digitalWrite(verde,HIGH);} //si la humedad es menos de 50% enciende el led verde else {digitalWrite(verde,LOW);} //si NO es menos de 50% lo apaga // LED AMARILLO if(humidity>=50) {digitalWrite(amarillo,HIGH);} //si la humedad es mayor del 50% enciende el led amarillo else {digitalWrite(amarillo,LOW);} //si la humedad NO es mayor del 50% lo apaga // LED ROJO if(humidity>=75) {digitalWrite(rojo,HIGH);} //si la humedad es mayor del 75% enciende el led rojo else {digitalWrite(rojo,LOW);} //si la humedad NO es mayor del 75% lo apaga // ZUMBADOR if(humidity>=85) { digitalWrite(zumb,HIGH); delay(500);//wait for 500ms digitalWrite(zumb,LOW); delay(500);//wait for 500ms } //si la humedad es mayor apaga y enciende el buzzer para emitir sonido else {digitalWrite(zumb,LOW);} //si la humedad NO es mayor del 75% lo apaga Serial.println(""); // imprime en el monitor lo que está entre las comillas, //nada en este caso, pero se lleva el cursor al comienzo de una línea (Serial.println) Serial.print("Datos procesados: "); // ahora va a imprimir en el monitor pero sin empezar una línea, va a hacerlo desde donde se quedó el cursor (Serial.print) Serial.print((int)temperature); Serial.print(" *C, "); // ahora va a imprimir el valor medido en centígrados (Serial.print) y luego “*C” (unidades) para luego volver a una línea nueva (Serial.println) Serial.print((int)humidity); Serial.println(" %"); // ahora va a imprimir el valor medido de humedad relativa (Serial.print) y luego “%” (unidades) para luego volver a una línea nueva (Serial.println)s //el DHT11 puede funcionar una vez por segundo (1 hercio) por lo que le hacemos esperar 1000ms delay(1000); }
TAREA EXTRA (4PTS)
Modificar el código para que:
a) El zumbador se active solo si la humedad es superior al 45% y la temperatura superior a 25º
b) Incorporar un LED azul que se encienda si la temperatura es inferior a 10º y la humedad relativa inferior a 35%.
kike no entiendo nada
¿Nada?
Si no eres más precisa sólo te puedo recomendar que empieces por esto
kike is real?
what do u think?
Hola Kike estamos haciendo el trabajo, reza a Jesus.
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░▄░▄▄░░░░░░░░░░░░░░░░░░░░
░░░░░░█░██░█▀▀▄░░░░░░░░░░░░░░░░
░░░░░█░░█▀█▄▀▄░▀▄░░░░░░░░░░░░░░
░░░░░█░▄█▄░█▄▀█▄▀█▄░░░░░░░░░░░░
░░░░█░░█░▀█░▀▄░▀█░▀█▄░░░░░░░░░░
░░░░█░░█░░▀█░▀█▄░█▄░█▄█▀█░░░░░░
░░░▄▀░▄░█░░▀█░░▀▄░▀▄░█░░█░░░░░░
░░░█░░█░▀█░░░█░░█▄░▀▄▀█░█░░░░░░
░░█░░░█░░░█░░░█░░█▄░░░▀░░█░░░░░
░░█░░░█░░░░█░░▀▀░░░░░░░░░▀█░░░░
░░▀▄░░░█░░░█▄░░░░░░░░░░░░░░█░░░
░░░▀▄░░▀▄░░░█░░░░░░░░░░░░░░█░░░
░░░░▀░░░▀░░░█░░░░░░░░░░░░░░█░░░
░░░░░█░░░░░░▀█░░░░░░░░░░░░░█░░░
░░░░░░▀░░░░░░▀█░░░░░░░░░░░░█▄░░
░░░░░░░▀▄░░░░░▀█░░░░░░░░░░░░▀▄░
░░░░░░░░░█▄░░░░▀█▄░░░░░░░░░░░░░
░░░░░░░░░░▀▀▄▄▄░░░▀█▄░░░░░░░░░░
░░░░░░░░░░░░░░░▀░░░░▀░░░░░░░░░░