Felix Maocho

Para quien le interese lo que a nosotros nos interesa

4º Ejercicio de uso de pines digitales de entrada INPUT– Luces de alarma intermitentes

Conocimientos que se precisandetector_apertura_puerta_alarmaPor Félix Maocho
7/1/2017,

Objetivo

Construir un aparato que encienda una luz intermitente cundo se h abra la puerta.

Conocimientos que se precisan

Para realizar este ejercicio tal como aquí se resuelve, sólo se necesitan los conocimientos que se han ido explicando hasta el capítulo dedicado al “Uso de los pines digitales como entrada (IN PUT)”, explicados con anterioridad, por lo que ante cualquier duda conviene repasar los capítulos anteriores.

Los conocoimientos precisos los podemos resumir en los  siguientes puntos:

  • Saber escribir un programa, “subir” a la Tarjeta Arduino un sketch o programa
  • Conocer las funciones “int”, “pinMode”, “digitalWrite”, e “if”

Enunciado del problema

Mientras se abre y se cierra una puerta queremos que permanezcan encendidas unas intermitentes luces de peligro

Material necesario

  • Tarjeta Arduino y cable de conexiones
  • Tarjeta de prototipado o “protoboard”
  • 5 Cables de conexiones macho/macho (preferiblemente 2 rojos, 2 grises y 1 verde)
  • 1 Resistencia de 220 Ω
  • 1 Resistencia de 1000 Ω
  • 1 Led
  • 1 pulsadores o Push button y/o 1 inter4ruptor

Objetivos

  • Ejercitarse en el uso de los pines digitales de entrada o INPUT
  • Maneko de pulsadores NC y NO
  • Manejo de los montajes PULL DOWN y PULL UP ventajas e inconvenientes de cada uno de ellos
  •  Detectar los problemas que puede dar el uso dela ·función “delay”

Especificaciones

Tenemos una puerta, por ejemplo de un un garaje y queremos que desde el momento que se comienza a abrir la puerta hasta el momento que se cierre totalmente, luzcan unas luces intermitentes que a modo de precaución, avisando que la puerta se esta abriendo, por lo que hay que tener precaución en su proximidad.

Para ello instalaremos un sensor en la puerta que en cuanto se inicie la apertura de la puerta lo informa a la Tarjeta Arduino por un pin abierto como INPUT y que cuando esto ocurra, por otro pin abierto como OUTPUT se alimente intermitemente un led que se mantendrá en ese estado, en tanto el sensor de la puerta informe que la puerta no se ha cerrado totalmente.

Como hacer el sensor

Un sensor de este tipo es muy fácil de montar, basta poner un extremo de un cable unido a la puerta que contacte con otro extremo en el marco de la puerta, de modo que cuando esta comience a abrirse se separen ambos extremos y el circuito quede roto. Una mejora de este sistema es colocar una pletina al borde la puerta que al estar esta cerrada oprime un botón situado en el marco de la puerta de modo que cuando la puerta se abra deje de oprimirlo. Consideramos este sistema más prácticos porque ello libera poner cables en la puerta y centra toda la instalación en el marco.

El modelo que enseñamos en la imagn del comienzo, es solo una variacion mas sofist6icada de este sistema. En este caso el elemento inferior atornillada en el borde la puerta y que se desplaza con la puerta es un iman. Este imán que atrae para abajo de una pletina flexible que hay en la parte superior, atornillada al marco de la puerta. Cuando la puerta se abre, el imán se aleja con la puerta y la pletina vuelve a su posición de reposo que es cerrando un circuito eléctrico. Esta es una solución real, económica y muy habitual, de sensores que detectan si una puerta está abierta o cerrada. Por ejemplo, en esta pagina anuncian un modelo de este tipo con un coste de 11 €

pulsador-nc-y-noComo ven el interruptor que seleccionamos es un PushButon del tipo “NC“ (Normalmente cerrado o “Normaly Closed”) o sea el contrario del NO ( Normalmente abiertos o “Normly Open”), que hemos utilizado hasta este momento. EL interruptor NC  estará abierto en tanto que el imán separela pletina de los polos eléctricos.

La ventaja del uso en este caso de este tipo de interruptores NC, es que nos permite hacer un montaje PULL DOWN es decir montajes en el que la situación habitual (puerta cerrada), oprime constantemente el botón por lo que mantiene el circuito eléctrico abierto (0 voltios) y solo cuando se abre la puerta (dejamos de apretar el botón) el voltaje se eleva (5V).

Igualmente lo podríamos hacer con un interruptor NO que al estar la puerta cerrada, mantuviera el botón oprimido y por tanto el circuito cerrado (5 voltios) pasando a cortar el circuito (0 v) cuando la puerta se abriera. La diferencia es que en este caso tendríamos que montar un circuito PULL UP que detectara la caída de tensión.

La ventaja del PULL DOWN es que no precisa consumo de corriente cuando la puerta está cerrada, que es lo que se considera más probable en este caso, aparte evitar el mayor desgaste de la Tarjeta Arduino, pues lo que mide habitualmente el pin en INPUT es 0v y además tenemos un consumo mayor de energía eléctrica pues habitualmente no fluirá la corriente.

esquema SwitchPara este ejercicio es indiferente utilizar pulsadores o Interruptores, si utilizamos un pulsador permanecerán continuadamente pulsado mientras la puerta este cerrada.

Pero igual podemos poner, un simple interruptor de los que tiene una clavija con dos estados, una posición abierta y otra cerrada, que se ajusta a un esquema como el que ponemos, Si al abrir la puerta se pusiera en ON y al cerrarla en OFF el proceso sería exactamente lo mismo que en el caso de tener un Pushbutton tipo NO que en estado de reposo con la puerta, mantendría “pisado” el botón y con ello abierto el circuito.

O si fuera al revés que el interruptor se pusiera en ON al abrir la puerta sería similar al caso con el Push Button tipo NC. Como pueden observar un mismo problema se puede resolver por distintos medios tanto de hardware como de software.

Solución con sensor pulsador/interruptor del tipo NO

Inicialmente mostramos una la solución teniendo un sistema de tipo NO pues es el más adecuado ya que permite nontaje PULL DOWN (Igual daria tener un interruptor que se pusiera en ON cuando se abriera la puerta)

Hardware

El esquema es el habitual, dos circuitos uno alimentado por el pin 12 que contiene la habitual resistencia de 220 Ω y un led y otro circuito que contiene el sensor de la puerta, en este caso un push button del tipo NO (normalmente abierto), es decir que cuando se pulsa corta el paso de la electricidad y cuando queda libre, (Se abre la puerta), cierra el circuito y el voltaje sube a 5V-

Como vamos a hacer un montaje PULL DOWN el orden de los elementos será el siguiente:

  • Fuente de corriente eléctrica a 5V
  • Pulsador
  • Segmento de cable que acaba en el Pin que hará la lectura del voltaje
  • Resistencia del circuito
  • Tierra

El esquema de las conexiones sera así:

Hardware

control-de-puertas-no

No voy a entrar en detalles porque el circuito es básicamente igual al que hemos visto con anterioridad donde se pone una resistencia de 1000 Ω suficientes para frenar el cortocircuito que se produciría en el circuito del botón si no la estuviera, pues uniríamos un pin a 5v con tierra sin tener ninguna resistencia por medio.

al ser el interruptor NO el cable verde que lleva al pin en INPUT presentarçia en “reposo” 5 voltios ( puerta abierta) mientras que al se oprimido el pushbutton recibirá 0v . De haber puesto un interruptor , debería estas cerrado el circuito cuando se simula que la puerta esta cerrada y abrirse cuando se simula que se abre

<por ello al hacer las pruebas nuestro dedo tendrá que simular que la puerta está cerrada oprimiendo de forma continua el botón con lo que se cortará el paso de corriente.

Software

También será el habitual

/* Sketch E6.41 Sensor de puertas (Montaje PULL DOWN )
* Con sensor del tipo NO o con interrutor abierto cuando la puerta esté abierta
* 1º Comprobar el voltaje de pin 2 y dejar en la variable “corriente”
* 2º Si (corriente = 1) // (Han abierto la puerta o dejado de comprimir el pulsador)
* 2.1 Encender las luces durante un tiempo
* 2.2 apagar las luces un tiempo
* 3º Repetir el ciclo
*/
// Área de definición de variables y parámetros
int pinout = 12; // pin que se abre en OUTPUT
int pininp = 2; // pin que se abre en INPUT
int corriente = 0; // Si hay 5V toma el valor 1 , si hay 0V, 0
int tiempo = 2000; // tiempo para el delay de 2 segundos
// Función setup
void setup() {
pinMode(pinout, OUTPUT); // Pin abierto como OUTPUT enciende led
pinMode(pininp, INPUT); // Pin abierto como INPUT, lee el voltaje
}

// Función loop
void loop() {
delay (100) ; // Retardo para evitar los problemas de “rebote” de los interruptores
corriente = digitalRead(pininp); // 1º comprobar el voltaje
if (corriente == 1) { // 2º (han abierto la puerta o liberado el pulsador)
digitalWrite(pinout, HIGH); // 2.1 Encender las luces durante un tiempo
delay (tiempo); // parada durante un tiempo
digitalWrite(pinout, LOW); // 2.2 apagar las luces
delay (tiempo); // parada durante un tiempo
} // Cierre del “if” encendida
} // cierre de la función loop 3º Repetir el ciclo

Solución con sensor pulsador/interruptor del tipo NC

Igualmente si el sensor fuera de tal forma que permite la corriente cuando está cerrada la puerta y la corta cuando se abre, (o ponemos un interruptor que esta encendido cuando la puerta esta cerrada y se apaga cuando se abre), podremos igualmente hacer trabajar la Tarjeta Arduino sólo que en este caso tendremos que hacer un montaje PULL UP es decir que lo que interviene en el circuito interruptor se ordena en sentido contrario:

  • Fuente de corriente eléctrica a 5V
  • Resistencia del circuito
  • Segmento de cable que acaba en el Pin que hará la lectura del voltaje
  • Pulsador
  • Tierra

Hardware

control-de-puertas-nc

Como ven las diferencias con el anterior están  en la forma de alimentar el sensor, en nuestro caso un pulsador y la situacion de la resistencia de 1000 Ω.

Software

Tampoco el software tiene muchos cambios, la única es que aquí la accion se realiza cuando el PIN2 detecta que el voltaje ha pasado de los habituales 5V a 0V

/* Sketch E6.42 Sensor de puertas (Montaje PULL UP)
* Con sensor del tipo NC o con interrutor abierto cuando la puerta esté cerrada
* 1º Comprobar el voltaje de pin 2 y dejar en la variable “corriente”
* 2º Si (corriente = 0) // (Han abierto la puerta o dejado de comprimir el pulsador)
* 2.1 Encender las luces durante un tiempo
* 2.2 apagar las luces un tiempo
* 3º Repetir el ciclo
*/
// Área de definición de variables y parámetros
int pinout = 12; // pin que se abre en OUTPUT
int pininp = 2; // pin que se abre en INPUT
int corriente = 0; // Si hay 5V toma el valor 1 , si hay 0V, 0
int tiempo = 2000; // tiempo para el delay de 2 segundos
// Función setup
void setup() {
pinMode(pinout, OUTPUT); // Pin abierto como OUTPUT enciende led
pinMode(pininp, INPUT); // Pin abierto como INPUT, lee el voltaje
}
// Función loop
void loop() {
delay (100) ; // Retardo para eviat los problemas de “rebote” de los interruptores
corriente = digitalRead(pininp); // 1º comprobar el voltaje
if (corriente == 0
) { // 2º (han abierto la puerta o liberado el pulsador)
digitalWrite(pinout, HIGH); // 2.1 Encender las luces durante un tiempo
delay (tiempo); // parada durante un tiempo
digitalWrite(pinout, LOW); // 2.2 apagar las luces
delay (tiempo); // parada durante un tiempo
} // Cierre del “if” encendida
} // cierre de la función loop 3º Repetir el ciclo

Si observan con detalle el único cambio es que ahora lanzamos la intermitencia cuando el Pin 2 detecta un O, ‘que no aprietan el botón de tipo NC) Todo lo demás es exactamente igual aparentemente, porque en este segundo caso hay dos pequeños inconvenietes, si lo habitual es que la puerta este cerrada, lo habitual sera leer que hay 5 voltios en la linea algo más duro para la tarjeta que leer que el cable está a cero voltios, pero es que ademas mientras que la puerta está cerrada (que suponemos que es lo que ocurre en la mayoría del tiempo), el circuito del pulsador esta cerrado es GASTANDO ENERGIA mientras que en el caso anterior estaba cerrado es decir no gastaba energía.

Por tanto optaremos por esta solución en los casos es que lo habitual sea que la puerta se mantenga abierta, por ejemplo en el caso de las puertas que se cierran automáticamente en caso de incendio, pero que habitualmente permanecen abiertas.

Problemas con el mandato “delay”

Como hemos indicado, cuando la función “loop” se introduce en un mandato “delay” entra en una especie de estado letárgico que no le permite hacer absolutamente nada. Este programa tiene en tres “delay” repartidos por la funcion “loop”. Sólo el primero se ejecuta siempre, mientras que el segundo y tercero, se ejecutan solamente si la luz parpadea. El primero tiene una duración de una décimas de segundo, y se realiza antes de efectuar la lectura del pulsador, para dar tiempo a que se amortigüe. Los otros dos “delay”, marcan los tiempos de parpadeo de la luz. Por tanto le ciclo completo de “loop” cuando la luz esta encendida, dura mas de 4 segundos y cuando esta apagada no dura mas de dos décimas de segundo.

Como la lectura del voltaje se realiza en este caso sólo una vez por “loop”, en el peor de los casos al cerrar la puerta, la bombilla no reaccionará hasta pasados cuatro segundos, que sera cuando haya acabado una intermitencia, se inicie otro loop y se entere de ello la Tarjeta Arduino. En este caso que la luz intermitente s mantenga cuatro segundos después de cerrar la puerta, no tiene importancia, por lo que la solución dada es admisible.

Pero podríamos no haber programado que en un loop en vez de una solo intermitencia, se hicieran 1000 intermitencias. Entonces el loop duraría 4000 segundos, es decir 66 minutos, mas de 1 hora. O sea, que una vez cerrada la puerta, aun podría estar luciendo una hora mas en el peor de lo casos la intermitencia. Algo que sería inaceptable.

El mandato “delay” retarda la funcion “loop”. Cuando utilicemos funciones “delay” hemos de preocuparnos de estudiar que su uso no ralenticen tanto el programa tanto, que lo deje inoperable e o que impida al programa efectuar las lecturas del estado de sus sensores y por tanto le dejen desinformado de como esta cambiando el entorno a su alrededor.

Prácticas

  • Sustituir en un caso y el otro le pulsador por un interruptor y experimentar lo que ocurre.
  • Cambiar la resistencia de 1000 Ω por un led y una resistencia de 220 Ω  de esa forma podréis ver cuando por ese circuito pasa o no pasa corriente.

Repaso

Como repaso final te diré lo que has aprendido hoy

  • Ejercitarte en el uso de los pin digitales
  • Leer si el voltaje está alto o bajo en un punto
  • Monntajes PULL DOWN y PULL UP
  • Problemas que puede producir el mandato “delay”
  • Uso de la función “if”
  • Símbolo de igualdad y asignación

Félix Maocho

indice

 

 

7 enero 2017 - Posted by | Curso de Arduino, Robotica | , , ,

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: