Felix Maocho

Para quien le interese lo que a nosotros nos interesa

2º Ejercicio de uso de pines digitales de entrada INPUT – Luces de emergencia

DirectindustryPor Félix Maocho
21/10/2016

Conocimientos que se precisan

Para realizar este ejercicio tal como aquí se resuelve solo se necesitan los conocimientos que se han ido explicando hasta el capítulo dedicado al Uso de los pines digitales como entrada (IN PUT), que podemos resumir en los siguientes puntos:

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

Enunciado del problema

Se desea encender la luz de emergencia tan pronto como falle la luz en el circuito principal.

Material necesario

  • Tarjeta Arduino y cable de conexiones
  • Tarjeta de prototipado o “protoboard”
  • 8 Cables de conexiones macho/macho (preferiblemente 3 rojos  a 5V, 3 azules  uno verde y otro amarillo)
  • 2 Resistencias de 220 Ω
  • 2 Led (preferible de color rojo y azul )

Para posteriormente trabajar en real (no imprescindible para este ejercicio

  • Batería de 9 voltios o conjunto de baterías equivalentes con su chasis
  • Conector de baterías con Tarjeta Arduino
  • Cargador de teléfonos o similar a 5 voltios ( por ejemplo los que tiene salida por USB o cargador regulable
  • Conexión entre cargador de teléfonos y buses de la tarjeta protoboard

Especificaciones

Se supone que existe un circuito principal, que funciona en corriente alterna a 220 voltios y adicionalmente, para cuando falla el suministro, existen unas luces que funcionan con la energía suministrada con unas baterías, que se pondrán en marcha automáticamente cuando se “va la luz”, o sea, cuando hay un corte en el suministro, por fallo de la central eléctrica o porque ha saltado un automático porque se ha producido un cortocircuito u otra causa similar.

En nuestro caso, tendremos dos circuitos independientes. uno alimentado por una batería eléctrica que alimentara a la tarjeta Arduio y las luces de emergencia y otro que parte de un cargador similar a los que se utilizan en telefonía, enchufado a la red eléctrica de 220 volts. El que vamos a utilizar, se diferencia de los habituales, que estos sólo producen corriente a un único voltaje, mientras que el nuestro, girando una pequeña rueda, puede producir corriente a diferentes voltajes.

Creamos con ello el prototipo de un aparato realmente operativo y no una maqueta, pues la corriente que alimenta a la tarjeta Arduino, puede perfectamente proceder de una batería convencional de automóvil de 12 voltios, que a su vez podrían ser muy adecuadas para alimentar varias luces de emergencia. Hasta el momento,hemos unida a un PC a la tarjeta Arduino, mediante un cable USB. que la alimenta a 5 Voltios, pero esta diseñada para actuar autónomamente, una vez puesto a punto y cargado el “sketch”, alimentándose por el “jack” situado al lado de la entrada USB, que admite voltajes entre 6 y 12V pues internamente. hay un regulador de tensión que reduce el voltaje recibido al voltaje de trabajo de la tarjeta, (5V en la Arduino UNO y en la mayoría de modelos, o 3.3V (en determinados modelos como el DUE).

¿Cómo es que admite voltajes entre 6 y 12 voltios, si lo que genera es (normalmente) 5 voltios?

Porque toma lo que necesita y el resto lo transforma retiene aunque en parte se trasforma en calor. Lo cual no es grave, pero no es conveniente, por ello, lo mejor es colocar una resistencia antes de la entrada de Arduino que reduzca, según la ley de Hom, el voltaje a entre 7 y 9 voltios que es lo ideal para Arduino, En nuestro caso no va a ser necesario porque ya partiremos de una pila de 9 voltios, con lo que nos ahorramos el trabajo de reducir su voltaje.

Por tanto, necesitaremos una batería de 9 voltios, (o seis baterías de un 1,5 V en un chasis adecuado),  como seven en la imagen, con un cable que las conecte convenientemente a la entrada de la tarjeta, tal v como se ve en las imágenes.caable9-voltios-arduino

bateria-9-voltios

6-baterias-de-15v

 

Si se fijan tanto el conector del cable como la batería tiene un borne macho y otro hembra, lo que obliga a conectar la pila al conector, de una forma específica, sin la posibilidad de hacerlo al contrario. Con ello se asegura que el polo positivo vaya a la entrada correcta de la tarjeta Arduino, pues como es sabido, en electrónica la dirección de la circulación de la corriente es fija, si la cambiamos, en la mayoría de los casos no funcionara el aparato e incluso hay muchas posibilidades de que dañemos la tarjeta. Por esa misma razón, la tarjeta USB entra de un determinado lado pero si la giramos no conseguimos introducirla.

El circuito eléctrico a vigilar sera uno real de corriente alterna a 220Volts, del que sacamos una regleta normal con un enchufe donde enchufamos nuestro alimentador variable del que hemos hablado. Tal como se ven en la imagen

 

regleta

cargador-regulableComo ven en el cargador de la imagen tienen un botón amarillo que se puede girar hasta poner la ranura con el voltaje que nos interese, habitualmente tiene un rango entre 6 y 12 voltios, nosotros lo pondremos a estos 5 voltios, pues ese es el voltaje que puede controlar Arduino UNO sin el menor problema. También observaremos que el “kit”. posee distintas piezas con los “enchufes” más habituales en máquinas digitales.

Una forma de probar la polaridad

El problema es que aquí tendremos que enchufar un cable al bus rojo y otro al azul pero ¿Como? –

Muy sencillo, haremos una prueba con el fin de saber que cable suministra voltaje y cual suministra tierra. Construimos un circuito que sólo tenga una resistencia de 220 Ω y un led. Como les dije, la dirección de la corriente tiene mucha importancia en electrónica, si al enchufar los cables que proceden del cargador, luce el led quiere decir que los cables loa hemos conectado correctamente y que el que contiene 5V es el del lado en el que esta la pata + o cátodo (la pata más larga)

Si nos hemos confundido, en este caso no pasa nada grave porque la resistencia no tiene polaridad y el led es un diodo, (que emite luz), y como tal si la corriente viene del lado cambiado, simplemente no la deja pasar , (actúa a modo de válvula de rueda de bicicleta, deja pasar la corriente en una sola dirección,)

Hecha la prueba sabremos cual es el cable con 5V y lo conectaremos al bus rojo y el cable con 0V lo conectamos al bus azul.

Hardware

De momento y en la fase de pruebas vamos a alimentar nuestro aparato de la forma tradicional, la tarjeta se alimenta mediante el cable USB que la une al ordenador, pero acabado el Sketch y cargado en la tarjeta Arduino, nada impediría que funcionara igualmente alimentando la tarjeta por el jack situado a izquierda de la entrada USB, desde una pila que suministrara entre 6 y 12 voltios a la tarjeta, (lo ideal es mas o menos 7 voltios).

Descripción general

A la derecha de la tarjeta Arduino, tenemos colocamos las luces de emergencia, un led de color rojo, (con la correspondiente resistencia de 220 Ω) que se encenderá cuando el pin 2 detecte que no hay voltaje (cuando el voltaje sea menos de 3,5), por que la red eléctrica cesa de funcionar, (corte de luz) volviéndose a apagar cuando esta vuelva. Partirá de un pin digital en OUTPUT y el sketch sera quien mande encenderlo o apagarlo.

sketch-62-alarma_bb

A la izquierda tenemos la información del estado de la red eléctrica, Un piloto azul hecho con un led azul, con su habitual montaje en serie con una resistencia de 220 Ω), nos informa visualmente si hay corriente, (luce el led), o no la hay (luz apagada) En este circuito estudiaremos el voltaje en el segmento de entrada con un cable verde que acaba en el pin 2 de la tarjeta Arduino.

El montaje ha ser del tipo PULL UP, es decir pinchamos en un segmento que habitualmente esta a 5V y que solo cambie a 0V cuando se vaya la luz. Es decir el cable que va al Pin INPUT ha de salir de un punto ANTERIOR a las resistencias que tenga el circuitos.

Como se ve en el esquema el led azul está alimentado por el bus rojo del lado superior y el circuito finaliza en el bus azul del lado superior. Estos buses que en pruebas se alimentan de los pines 5V y GND, serian los que trabajando en real se alimentarían del cargador conectado a la red.

Un cable verde parte de un punto que si tiene tensión sera a 5V y acaba en el pin 2 que abriremos de INPUT,

Por otra parte las luces de emergencia se alimentan del Pin 5 y el circuito acaba en un pin GND de la tarjeta Arduino, que indistintamente se puede alimentar de el PC mediante un cable USB o de una batería por el conector situado a la izquierda de la tarjeta.

Software

La alarma funcionará de la siguiente forma si “se va la luz” el Pin2 detectará la caída de tensión y encenderá las luces de emergencia que seguirán encendidas hasta que vuelva la luz. Por tanto el sketch hará lo siguiente:

* Comprobar el voltaje de pin 2 y dejar en la variable “corriente”
* Si (corriente = 1) // (hay corriente)
* Si (encendidas =1) // (si están encendidas las luces de emergencia)
* Apagar las luces de emergencia
* encendidas = 0 // recordamos que hemos apagado la luz de emergencia
* En caso contrario
* Si (encendidas = 0 ) // (si están encendidas las luces de emergencia)
* Encender las luces de emergencia
* encendidas = 1 // recordamos que hemos encendido la luz de emergencia
* Repetir el ciclo

Y el sketch que manejaba el hardware será como sigue

/* Sketch E6.1 Luces de emergencia
* 1º Comprobar el voltaje de pin 2 y dejar en la variable “corriente”
* 2º Si (corriente = 1) // (5V en bus rojo)
* 2.1º Si (encendida =1) // (si están encendidas las luces de emergencia)
* 2.11 Apagar las luces de emergencia
* 2,12 encendida = 0 // recordamos que hemos apagado la luz de emergencia
* 3º En caso contrario
* 3.1º Si (encendida = 0 ) // (si están encendidas las luces de emergencia)
* 3.11 Encender las luces de emergencia
* 3.12 encendida = 1 // recordamos que hemos encendido la luz de emergencia
* 4º Repetir el ciclo
*/

// Área de definición de variables y parámetros
int pinout = 5; // pin que se abre en OUTPUT
int pininp = 2; // pin que se abre en INPUT
int corriente = 0; // Si hay luz toma el valor 1 , si hay apagón 0
int encendida = 0; // Si esta encendido el led rojo, valor 1 si apagado 0

// 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() {
corriente = digitalRead(pininp); // 1º comprobar el voltaje
if (corriente == 1) { // 2º (5V en bus rojo)
if (encendida == 1) { // 2.1º encendida la luz de emergencia
digitalWrite(pinout, LOW); // 2.11 apagar luces de emergencia
encendida = 0; // 2.12 recordar que apagado la luz de emergencia
} // Cierre del “if” encendida
} // Cierre del “if” corriente
else { // 3º En otro caso, (0V en bus rojo)
if (encendida == 0) { // 3.1º no encendida la luz de emergencia
digitalWrite(pinout, HIGH); // 3.11 encender luces de emergencia
encendida = 1; // 3.12 recordar que encendida la luz de emergencia
} // Cierre del “if” encendida
} // Cierre del else del “if” corriente1
} // cierre de la función loop 4º Repetir el ciclo

Este es un ejemplo bastante completo de la función “if”. Lo primero que quiero resaltar es que el indentado aun no siendo obligatorio facilita mucho la comprensión de sketch por lo que es muy recomendable utilizarlo.

Lo habitual es indentar o poner un poco mas a la derecha todas los mandatos que entran entre los caracteres “{” y “}” du una función un !if” o un “else” o cualquier otro mandato que utilice estos identificadores de comienzo y final de mandatos controlados por una función o mandato. Con ello gr´qafica se puede ver de un solo vistazo donde acaba y termina el párrafo controlado por los caracteres “{” y “}”.

Desgraciadamente con el editor de Word Press que utilizo para redactar estye post,, no lo puedo realizar sin introducir una serie de caracteres de edicion que harian imposible que Ved hiciera con el software copiar y pegar, por lo que hwe prescindido de hacerlo. Sin embargo el programa correctamente editado tendria el aspecto de lo que pongo a continuacion que es una imafen del testo que compiloen el IDE de Arduino,

imagen-sketch-61-alarma_bb                                                                                                          “}·

Observe como el indentado facilita enormemente ver los bloques de mandatos que se ejecutan bajo el control de otras funciones y mandatos. Aconsejo utilizar estos indentados pues simplifican mucho el trabajo de puesta a punto.

“is” anidados

El primer mandato “if”, (el que explora si no hay corriente), tiene dentro de él, o dicho técnicamente tiene “anidado”, otro mandato “if” que verifica si no hemos encendido la luz.

Si ambos mandatos se cumplen a la vez, procedemos a ejecutar dos mandatos contenidos entre el símbolo “{“ y el primer símbolo “}”, o sea encender el led rojo y cambiar el valor de la variable “encendido” para recordarlo en el siguiente ciclo.

Si la primera condición no se cumple nada de lo que haya entre los “{“ y su correspondiente “}” se ejecuta, el programa ni entrará a ver si se cumple la segunda, directamente saltara todos los mandatos controlados por el “if”. Observe lo útil que son los indentados para observar de un golpe de vista cuales funciones son controladas por un determinado “If”.

Manejo del signo = Igualdad (==) y asignación (=)

Fíjense en otra cosa en la diferencia entre el doble igual IGUALDAD (==) y el simple igual o ASIGNACION Mientras que en los mandatos “if” se utiliza “==” porque estamos comparando dos elementos a derecha e izquierda del signo “==”, cuando queremos asignar un valor a una variable, es decir cambiar el valor que tenía por un nuevo valor utilizamos solo “=” como puede verse tanto en la linea de lectura del voltaje como en las líneas donde asignamos nuevos valores a la variable “encendida” para recordarlo en otro ciclo del programa.

“if! / “else”

Inmediatamente acabado de ejecutar este ·primer “if “ encontramos el mandato “else” (en otro caso), que indica que si se ha ejecutado el primer “if “ se salten estas instrucciones pero si no se han ejecutado se hagan estas. En nuestro caso si no se “ha ido la luz” hará estas, que simplemente con otro “if” anidados chequea si se mandó encender las luces de emergencia y como ya hay corriente las apaga.

Traspasar un valor de un loop a otro posterior 

Otro punto en el que nos debemos fijar es el “truco” para “recordar” en siguientes “loops” del programa lo que hicimos en programas anteriores..

El mismo prob gerama pero muy simplificado

Podíamos haber simplificado el programa diciendo simplemente si no hay luz enciende las lucas de emergencia y si la hay las apagas, pero ello obligaría al sistema a apagar o encender innecesariamente luces por estar estas ya previamente apagadas o encendidas . Lo cual simplifica el sketch pero “castiga innecesariamente a la tarjeta que con la ayuda de ese recuerdo, solo actúa cuando es necesario.

Para que comprueben que lo que digo es cierto. les dejo aquí el programa simplificado

/* Sketch E6.1.bis Luces de emergencia (simplificado)
* 1º Comprobar el voltaje de pin 2 y dejar en la variable “corriente”
* 2º Si (corriente = 1) // (hay corriente)
* 2.11 Apagar las luces de emergencia
* 3º En caso contrario
* 3.11 Encender las luces de emergencia
* 4º Repetir el ciclo
*/

// Área de definición de variables y parámetros
int pinout = 5; // pin que se abre en OUTPUT
int pininp = 2; // pin que se abre en INPUT
int corriente = 0; // Si hay luz toma el valor 1 , si hay apagón 0

// 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() {
corriente = digitalRead(pininp); // 1º comprobar el voltaje
if (corriente == 1) { // 2º (5V en bus rojo)
digitalWrite(pinout, LOW); // 2.11 apagar luces de emergencia
} // Cierre del “if” corriente
else { // 3º En otro caso, (0V en bus rojo)
digitalWrite(pinout, HIGH); // 3.11 encender luces de emergencia
} // Cierre del else del “if” corriente
} // cierre de la función loop 4º Repetir el ciclo

Les dejo igualmente la imagen real del Sketch escrito en el escritorio IDE para que observen nuevamente el indentado

imagen-sketch-622-alarma_bb
,

Observen que el programa es mucho más corto y no utiliza la variable “encendido”. En cambio en cada “loop· o obliga a encender o apagar las luces según haya o no corriente aunque estas estén ya encendidas o apagadas, y si bien no tiene consecuencias es obligar a trabajar innecesariamente un conmutador interno.

Generalmente consideramos que sis dos programas hacen lo mismo, el más corto es el más perfecto y el que damos mejor puntuación pues sera mucho mas sencillo de poner a punto y mantener cuandi hqya que modificarlo o arreglarlo, Sin embargo como en todo hay excepciones y uno de ellas es no hacer trabajar inutlmente a mustros delicados circuitos electrónicos.

Puntuación

Como de costumbre procedo a puntuar este software. No me cansaré de repetir que una misma forma de actuar de la tarjeta Arduino se puede conseguir de muchas formas y que de todas ellas la mejor y por tanto la que yo le concedo la más alta puntuación, es aquella que es mas sencilla, mas corta y precisa de menos medios. En este caso pese a tener menos lineas de texto la segunda forma considero más acertada la primera por ahorrar uso de Hardware,

A mi modo de ver el primer sketch es de buena calidad. No me atrevo a puntuarlo muy alto, pues siempre habrá alguien que lo realice con menos lineas, como yo lo he hecho, y además conservando la calidad del proceso, Le pongo de nota un notable, pero elijo un 7 en vez de un 8 porque podía sin menoscabo haber ahorrado medios utilizando una pin menos valioso.

Habrá observado que al lado de los números que indican el pin digital que se trata algunos tiene un misterioso gusanito tal como este “~“ que habrán visto utilizar para expresar que dos cantidades son más o menos iguales. En este caso no tiene ese significado sino que ese pin tiene la posibilidad de emitir la energía en forma de ondas, algo que estudiaremos con detalle pronto cuando veamos el uso de pines analógicos. Bástenos de momento saber que algunos pines digitales en concreto en la tarjeta UNO tiene capacidades que otros no tienen, En concreto, los pines 3, 5 6, 9, 10 y 11 pueden actuar de salida emitiendo ondas o PWM iniciales de Pulse Width Modulation (pulsaciones con modulación) y los pines 0 y 1 que tiene la capacidad de comunicarse, es decir emitir y recibir información asíncrona con otro aparatos que puedan recibir este tipo de comunicaciones, algo que también enseñaremos más adelante.

Pruebas del aparato

Cargado cualquiera de los sketch en la tarjeta, si no funciona el prototipo es que tiene algún error en el montaje de los cables o componentes o ha conectado a algún pin erróneo, pues el software le he probado y funciona a la perfección.

Cuando todo funcione haga las siguientes pruebas:

  • Desconecte el cabe que va a pin 5V, Observará que ocurren las siguientes cosas
    • El pin azul deja de lucir pues se ha “caído la luz”
    • El pin rojo (o sea las luces de emergencia), se enciende automáticamente,
  • Estado así es decir con el pin 5v desconectado y las luces de emergencia conectadas apriete el botón rojo de RESET.
    • Observara que después de parpadear un momento los leds de la tarjeta (señal de que está rearrancando), vuelve a encenderse las luces de emergencia, porque la tarjeta ha detectado que no funcionan las luces de la red, (lus azul apagada)
  • Ahora vuelva a colocar el cable rojo en el pin 5V, es decir vuelve a haber electricidad en el bus rojo y ocurre que vuelve todo como al principio, se enciende el led azul y se apaga el rojo.
  • Apriete nuevamente el botón rojo de RESET.
    • Veremos parpadear los leds de la tarjeta, pero aparentemente no pasa nada, sigue encendida la luz azul y apagada la luz rojas, porque la tarjeta a rearancar encuentra que todo está normal.
  • Por último saque el cable azul que acaba en pin GRD o tierra y observe que se apaga le led azul pero NO SE ENCIENDEN las luces de emergencia.

Y eso ¿por qué?

Porque un pin en INPUT funciona como un voltímetro dice si un segmente de cable tiene un voltaje de 5V o de 0V pero no mide realmente si PASA corriente. Al sacar el cable del PIN 5V se corta la corriente pero TAMBIEN el bus rojo, pasa de estar a 5V o estar 0V y eso lo detecta el voltímetro en el que hemos trasformado nuestro Pin 2

Pro al desconectar el Pin GRD, dejamos abierto el circuito que permitía dar luz al led Azul pero pese a ello el bus rojo sigue unido a el pin 5V y por tanto hasta donde se corta el circuito está a 5V y nuestro voltímetro no nota la diferencia, por lo que no manda encender las luces rojas.

¿Como solucionarlo ?

Si quisiéramos controlar este bus habríamos de poner por ejemplo un cable amarillo que fuera desde el bus azul a por el ejemplo el pin 3 e investigar que es lo que pasa en este segundo punto del circuitos

Les dejo el esquema y el programa pero ya no les doy mas explicaciones porque todo es igual pero al revés y deben poder entenderlo sin problema.

sketch-622-alarma_bb

 

/* Sketch E6.3 Luces de emergencia
* Primera parte Comprobar el voltaje del bus rojo
* 1.1º Comprobar el voltaje de pin 2 y dejar en la variable “corriente”
* 1.2º Si (corriente1 = 1) // (5V en bus rojo)
* 1.2.1º Si (encendida1 =1) // (si están encendidas las luces de emergencia)
* 1.2.11 Apagar las luces de emergencia
* 1,2,12 encendida1 = 0 // recordamos que hemos apagado la luz de emergencia
* 1.3º En caso contrario (0V en bus rojo)
* 1,3.1º Si (encendida1 = 0 ) // (si están encendidas las luces de emergencia)
* 1,3.11 Encender las luces de emergencia
* 1,3.12 encendida1 = 1 // recordamos que hemos encendido la luz de emergencia
* Segunda parte Comprobar el voltaje del bus azul
* 2º Comprobar el voltaje de pin 3 y dejar en la variable “corriente”
* 2,2º Si (corriente2 = 0) // (0V en bus azul)
* 2.2.1º Si (encendida2 =1) // (si están encendidas las luces de emergencia)
* 2.2.11 Apagar las luces de emergencia
* 2..2,12 encendida2 = 0 // recordamos que hemos apagado la luz de emergencia
* 3º En caso contrario (5V en bus azul)
* 3.1º Si (encendida2 = 0 ) // (si están encendidas las luces de emergencia)
* 3.11 Encender las luces de emergencia
* 3.12 encendida2 = 1 // recordamos que hemos encendido la luz de emergencia
* 4º Repetir el ciclo
*/

// Área de definición de variables y parámetros
int pinout = 5; // pin que se abre en OUTPUT
int pininp1 = 2; // pin que se abre en INPUT
int pininp2 = 3; // pin que se abre en INPUT
int corriente1 = 0; // Si hay luz toma el valor 1 , si hay apagón 0
int encendida1 = 0; // Si esta encendido el led rojo, valor 1 si apagado 0
int corriente2 = 0; // Si hay luz toma el valor 1 , si hay apagón 0
int encendida2 = 0; // Si esta encendido el led rojo, valor 1 si apagado 0

// Función setup
void setup() {
pinMode(pinout, OUTPUT); // Pin abierto como OUTPUT enciende led
pinMode(pininp1, INPUT); // Pin abierto como INPUT, lee el voltaje bus rojo
pinMode(pininp2, INPUT); // Pin abierto como INPUT, lee el voltaje bus azul
}

// Función loop
void loop() {
//* Primera parte Comprobar el voltaje del bus rojo
corriente1 = digitalRead(pininp1); // 1.1º comprobar el voltaje
if (corriente1 == 1) { // 1,2º hay 5V en bus rojo
if (encendida1 == 1) { // 1.2.1º encendida la luz de emergencia
digitalWrite(pinout, LOW); // 1.2.11 apagar luces de emergencia
encendida1 = 0; // 1.2.12 recordar que apagado la luz de emergencia
} // Cierre del “if” encendida1
} // Cierre del “if” corriente1
else { // 1,3º En otro caso, (0V en bus rojo)
if (encendida1 == 0) { // 1,3.1º no encendida la luz de emergencia
digitalWrite(pinout, HIGH); // 1.3.11 encender luces de emergencia
encendida1 = 1; // 1.3.12 recordar que encendida la luz de emergencia
} // Cierre del “if” encendida1
} // Cierre del else del “if” corriente1
//* Segunda parte Comprobar el voltaje del bus rojo
corriente2 = digitalRead(pininp2); // 2.1º comprobar el voltaje
if (corriente2 == 0) { // 2.2º 0V en bus azul
if (encendida2 == 1) { // 2.2.1º encendida la luz de emergencia
digitalWrite(pinout, LOW); // 2.2.11 apagar luces de emergencia
encendida2 = 0; // 2.2.12 recordar que apagado la luz de emergencia
} // Cierre del “if” encendida
} // Cierre del “if” corriente
else { // 3º En otro caso, (5V en bus azul)
if (encendida2 == 0) { // 3.1º no encendida la luz de emergencia
digitalWrite(pinout, HIGH); // 3.11 encender luces de emergencia
encendida2 = 1; // 3.12 recordar que encendida la luz de emergencia
} // Cierre del “if” encendida2
} // Cierre del else del “if” corriente2
} // cierre de la función loop 4º Repetir el ciclo

Como ven he abienrto otro pin en INPUT y he duplicado las variables de corriente y encendido para saber si el problema lo tenía en el bus rojo o en el azul, el resto es todo prácticamente igual.

Vuelva a sacar los cables que van al V5 y a GRD y apriete RESET para ver si ahora va todo bien,

¿Es necesario este seugundo control?

Pues no estoy seguro hasta que lo pruebe. Por un lado me hace el efecto que si se va la corriente alterna falla tanto la una fase como la otra, Ppero por otra parte, me ha entrado la duda de como funcionan los cargadores de las pilas, es posible que solo se queden con una de las fases de la luz, puesto que tienen que eliminar la otra para producir corriente continua, pero además la luz alterna va en ondas, por lo que el voltaje va fluctuando de 120V a cero por una fase y la otra.

corriente-alterna-3-638

tension_rectificada_onda_completa

Es posible , aun no lo se, si esa media onda que deja pasar hace que el voltaje del bus rojo varíe entre 0 y 5V sesenta veces como la luz eléctrica, en cuyo caso este aparato utilizado como fuente sin otro paso intermedio que iguale el voltaje no nos valga, Cuando haga el experimento se lo contaré. Pero es posible que rectificando la corriente , es decir poniéndola sólocomo venida de una fase, el voltaje se mantenfa inestable y el sensor que al fin y al cabo solo es un voltímetro se vuelva un poco errático. Soño probando lo solucionaremos, pero eso lo haré otro dia.

Prácticas

Ejercitarse en utilizar otros pines y en hacer los “if”/”else” al contrario, por ejemplo preguntando si la luz de emergencia esta encendida, y comprobar en ese caso que el pin2 detecta 5V y el tres 0V en cuyo caso hay que apagar la luz de emergencia porque todo es normal, la variable encendida a 0, o en caso contrario no e hacer nada, y viceversa, si la luz esta apagada y alguno de los penes en INPUT denotan algo raro encenderla y cambiar la variable encendida a 0

Repaso

  • Como repaso final te diré lo que has aprendido hoy
  • Manejo de pin digital como INPUT
  • Leer si el voltaje está alto o bajo en un punto
  • Función “if”
  • Función “if” – “else”
  • Funciones condicionales anidadas
  • Símbolo de igualdad y asignación
  • La existencia de pines con capacidad PWM (Pulse Width Modulation) y pines para comunicaciones asincronas (TX y RX).

Félix Maocho

 

indice

22 octubre 2016 - Posted by | Curso de Arduino, Robotica | , , ,

2 comentarios »

  1. eres muy inteligente pues te sigo en la mayoría de tus artículos pues en micaso somos tres generaciones de electricistas y mi hijo y yo te admiramos mucho . también he tenido varias consultas en temas de huerta que es lo poco que ago por mi edad también te dire que la huerta este año muy mal pos los calores aquí en la sierra de guadarr.. UN SA LUDO FELIX no se si hotras veces he salido como majuvio ho mariano

    Comentario por mariano | 22 octubre 2016 | Responder

    • No soy normal de inteligencia, pero siento mucha ganas por conocer y he tenido la suerte de trabajar en empresas que no solo me han facilitado que pudiera formarme, sino que incluso me han pagado cursos de formación, de ese modo aprendí informática con 30 años.

      Haz lo que puedas para que tu hijo se forme, Arduino puede ser una forma sencilla y entretenida y le puede valer para mucho en su vida profesional y en cualquier caso en su tiempo libre. Si de paso aprendes tú tampoco te vendrá mal. Un saludo

      Comentario por felixmaocho | 23 octubre 2016 | Responder


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: