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.

Buzzer-IEC-Symbol.svg

Resultado de imagen de zumbador activo

Resultado de imagen de zumbador activo

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
Las condiciones se expresan con comparadores (mayor que, igual…) estos son los más comunes
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

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.

TAREA 1

Dibujar un diagrama de flujo para dos de las opciones (obligatoria) o para mas de dos opciones (puntos extras). 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.

TAREA 2

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

Modificar el código para que:

a) El zumbador se active solo si la humedad es superior al 95% y la temperatura superior a 20º

b) Incorporar un LED azul que se encienda si la temperatura es inferior a 10º y la humedad relativa inferior a 75%.

Práctica 6 – Zumbador activo, Condicionales y diagramas de flujo

7 pensamientos en “Práctica 6 – Zumbador activo, Condicionales y diagramas de flujo

    • junio 11, 2018 a las 5:19 pm
      Enlace permanente

      ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
      ░░░░░░░▄░▄▄░░░░░░░░░░░░░░░░░░░░
      ░░░░░░█░██░█▀▀▄░░░░░░░░░░░░░░░░
      ░░░░░█░░█▀█▄▀▄░▀▄░░░░░░░░░░░░░░
      ░░░░░█░▄█▄░█▄▀█▄▀█▄░░░░░░░░░░░░
      ░░░░█░░█░▀█░▀▄░▀█░▀█▄░░░░░░░░░░
      ░░░░█░░█░░▀█░▀█▄░█▄░█▄█▀█░░░░░░
      ░░░▄▀░▄░█░░▀█░░▀▄░▀▄░█░░█░░░░░░
      ░░░█░░█░▀█░░░█░░█▄░▀▄▀█░█░░░░░░
      ░░█░░░█░░░█░░░█░░█▄░░░▀░░█░░░░░
      ░░█░░░█░░░░█░░▀▀░░░░░░░░░▀█░░░░
      ░░▀▄░░░█░░░█▄░░░░░░░░░░░░░░█░░░
      ░░░▀▄░░▀▄░░░█░░░░░░░░░░░░░░█░░░
      ░░░░▀░░░▀░░░█░░░░░░░░░░░░░░█░░░
      ░░░░░█░░░░░░▀█░░░░░░░░░░░░░█░░░
      ░░░░░░▀░░░░░░▀█░░░░░░░░░░░░█▄░░
      ░░░░░░░▀▄░░░░░▀█░░░░░░░░░░░░▀▄░
      ░░░░░░░░░█▄░░░░▀█▄░░░░░░░░░░░░░
      ░░░░░░░░░░▀▀▄▄▄░░░▀█▄░░░░░░░░░░
      ░░░░░░░░░░░░░░░▀░░░░▀░░░░░░░░░░

      Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *