Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Curso de Arduino – Utilizar los pin digitales como INPUT para el control de la corriente

Por Félix Maocho
4/12/2015

Objetivo de este post

Repaso de los pin digitales de Arduino utilizados como INPUT es decir como entradas, esto se hace para averiguar si por determinado punto de un circuito eléectrico pasa o no corriente elétrica, también se repasan algunas de las instrucciones o mandatos más habituales.

Para las prácticas de este post se necesita la tarjeta controladora Arduino, la tarjeta de prototipado protoboard, un PC ,el cable de conexión a Arduino, dos led de diferente color, (uno rojo u otro blanco en nuestro caso, pero puede ser de cualquier color), dos resistencias de 220 homios y una de 660 homios, un pulsador o pushbotton,  así como suficientes cables de conexión , (macho/macho si se trabaja con tarjetas protoboard).

Párrafo para inexpertos , (puedes saltarlo si eres mínimamente usuario de Arduino)

La tarjeta Arduino es una controladora de circuitos eléctricos, es decir un sistema capaz de activar o mantener apagados diversos circuitos eléctricos a corriente continua de 5 voltios. Por tanto su misión principal es encender y apagar según le indiquen algunas instrucciones alguna de sus múltiples salidas/entradas.

En el post anterior estudiamos las diferentes formas de salida, es decir las diferentes formas de ceder o no una intensidad de corriente de 40 mili amperios, a un circuito que se iniciaba en uno del pin numerados de 2 a 13 y que se cerraba el circuito en el pin de tierra o GMD. Según se le mandaba por software al PIN actuar como LOW o HIGH, actuaba como un interruptor de corriente que cortaba el circuito o o dejaba pasar la corriente. Pero ¿sino hay algo tan llamativo como un led, que se enciende o se apaga, si por ejemplo lanzamos una emisión de radio por una antena. ¿Como podemos saber si el circuito emite o no radiaciones?.

Para eso está la posibilidad de utilizar el pin en INPUT y leer (READ) si por un determinado circuito circula corriente próxima a 5 Voltios y LOW si circula corriente próxima a O voltios, en una palabra para utilizarlo como un polarímetro con solo dos posiciones pasa corriente HIGH o no pasa o LOW.

En este post nos centraremos en el uso como ENTRADA o INPUT de sus salidas/entradas digitales es decir las marcadas con los números 2 al 13 que solo tienen dos estados posibles o fusionar como OUPUT, o sea como interruptora y estar abierto o cerrados, para permitir o no, el paso de corriente por un circuito o para funcionar como detectores del paso de corriente por un circuitos, cambiando el valor de una variables al valor que proceda, HIGH si detecta el paso de corriente o LOW si no detecta paso de corriente.

El valor que tenga esa variable, puede posteriormente utilizarse en el programa para actuar como sea conveniente en función de que en ese circuito fluye o no las energía eléctrica.

En la imagen de entrada se encuentran en el borde superior de la tarjeta Arduino, La salida 0 y 1 tiene los usos específicos Entrada/salida de datos para comunicarse con otros aparatos. Las entadas numeradas A1 a A5 son entradas digitales de las que hablaremos en otro post

También utilizaremos alguna entradas y salidas no programables es decir que siempre y en cualquier caso actúan de la misma forma, como la 5V que cede siempre una corriente a 5 voltios y la GND que siempre funciona como tierra.

Entradas digitales

Como indicamos en el post anterior, los pins vienen configurados como de entrada por defecto. El motivo es que así protegen mejor la placa si por error reciben una descarga de 5 volts, pues en INPUT, es eso exactamente lo que se espera que midan. Cuando se configuran como de salida y por error reciben una descarga eléctrica de 5 volts, posiblemente resulta dañada la placa. Por ese motivo y como medida de precaución cualquier pin de salida o OUTPUT se le pone en serie habitualmente una resistencia de unos 220 homios como protección.

Sin embargo cuando se configuran como entrada no hace falta tomar tal precaución, pues por defecto internamente están conectados a un resistencia de 20 KΩ a las que incluso se puede acceder mediante software, de forma que se elimina el riesgo de daño al recibir una descarga procedente de otro pin de Arduino pues solo lleva como máximo 40 miliamperimetros de energía, que al encontrarse con las proporcionalmente gran resistencia interna, disipa el riesgo de cortocircuito.

Vamos a dedicar este post a estudiar el uso de los pin en INPUT, para ello partiremos de un ejemplo simple de entender encender y apagar un led mediante un botón. Es decir al apretar el botón se cierra un circuito que enciende un led, cuando se levanta el dedo se corta el paso de corriente y el led se apaga.

Para esto no hay que programar absolutamente nada solo hay que montar un circuito como el que indica el esquema siguiente.

Interruptor

interruptor

El pin V5 suministra una corriente continua a 5 voltios que va a parar a una de las patas del pulsador (pushbutton) que en posición normal mantiene el circuito abierto pero que al pulsarlo conecta le corriente que llega al ánodo del Led cuyo cátodo esta conectado a una resistencia de prevención de 220 homs conectada a su vez con el pin de tierra GND

Párrafo para inexpertos , (puedes saltarlo si eres mínimamente usuario de Arduino)

La placa protoboard, o placa de pruebas o prototipado  permite el montaje y desmontaje de componentes electrónicos sin necesidad de soldaduras, lo que la hace mas rápida y permite el reciclado de componentes. Lo importante de la protoboard son las conexiones internas que enlazan los orificios por su interior según la pauta que se ve en el esquema, las filas de puntos exteriores marcadas con lineas roja y azul en horizontal y trasversales grupos de cinco orificios.

El Pushbutton o pulsador es simplemente una arandela de metal puesta sobte un muelle que al decender hace que se pongan en contacto los dos lados del pulsador-

Software

No hace falta escribir ningún programa pues basta oprimir el pulsador para cerrar la corriente y que el piloto se encienda. En este caso la tarjeta controladora Arduino tan solo vale para proporcionar una corriente eléctrica de 5 voltios.

Si embargo el led solo funcionará mientras estemos pulsando el botón tan pronto como levantemos el dedo se apagara el led. Su pongamos que queremos un interruptor tal, que si el Led esta apagado lo enciende y si esta encendido lo apaga.

Claro está que existen llaves de la luz con dos posiciones, como las que tenemos todos en las paredes de nuestras casas, que hacen eso exactamente pero también podemos hacerlo con un pulsador, e incluso podríamos hacer una serie de cosas consecutivas, como encender la luz blanca y cambiarla a rojo fijo, apretando otra vez y finalmente apagar todo con un solo pulsador, algo que no podríamos hacer con un solo interruptor.

Veamos como, pero vayamos por partes y comencemos encendiendo y apagando una luz blanca cada vez que se pulse el botón.

Encender y apagar con un pulsador

(Corregido, espero que definitivamente, un error original referido a los pins utilizados en el ejemplo. gracias a la ayuda de un lector que me lo avisó en un comentario. Muchas gracias)

Al circuito anterior le vamos a añadir una luz blanca que va a ser gobernada por el pin 13 y el pin 11 valdrá para en INPUT averiguar si por el circuito que alimenta el pin rojo pasa corriente o no.

Por tanto el nuevo hardware quedará :

encendr y apagar con pulsador

 

  • Alimentamos el pulsador desde el pin V5
  • Leemos la tensión por el pin 11 de un punto situado entre el pulsador y la resistencia que tendrá O voltios cuando esté abierto el pulsador y 5V cuando esté cerrado
  • Alimentamos el led blanco desde el pin 13
  • A tierra se va por el pin GND que esta unido al bus horizontal que recorre el borde superior de la placa protoboard pintado de azul

Veamos ahora el software

encendr y apagar con pulsador software (2)

Observen

  • El indentado de de lo contenido entrelos caractres de apertura y cierre de mandatos ( {…. } ) facilitan mucho la comprensión del texto a los humanos, pero la máquina no los necesita si no los ponemos, la máquina no tendra problemas, los problemas los tendremos nosotros a la hora de depurar el programa para corregir errores.
  • La instrucción pinMode(entrada, INPUT); // Pin 11 como INPUT es superflua porque por defecto todos los pines vienen definidos como INPUT por tanto no es necesaria, la pueden eliminar y seguirá funcionando igual el programa pero facilita la compren ion del programa el ponerla en la función “setup”
  • El pin rojo solo se enciende cuando se aprieta la luz roja
  • Si mantenemos el botón apretado mas de tres segundos, la maquina entiende que se ha apretado varias veces
  • Como en este caso “estado” solo puede ser 0 o 1 funcionaran igual si “if estado =1” lo hubiéramos sustituido por un “else”, lo mantenemos así pues en el siguiente ejemplo estado puede tener diversos valores y los if consecutivos permiten hacer en cada caso lo que corresponda.
  • Sin embargo en el if/else final si es imprescindible utilizar este sistema porque si pusiéramos dos if seguidos, como en el primero cambiamos el valor de el elemento de comparación “estado” entraría también en el segundo “if” algo que no ocurre al poner un “else”
  • Esta forma de colocar un pulsador y controlar la tensión de su circuito se denomina PULL DOWN (bajar) y es la mas normal, se caracteriza porque el orden de los componentes es V5 – Pulsador – Derivación para tomar la tensión del circuito – Resistencia – GMD o “tierra”, Si se aprieta el botón hay 5 voltios sino se aprieta hay cero
  • Otra posible forma de colocar el pulsador es PULL UP (subir) en este caso el orden es es V5 – Resistencia – Derivación para tomar la tensión del circuito – Pulsador – GMD o “tierra”. El circuito pasa por la gran resistencia interior del chip y se cierra, por eso el segmento de circuito donde pinchamos antes de la resistencias está a 5 volts, mientra que cuando puede atravesar el pulsador disminuye el voltaje de ese segmento a casi 0 volts. La desventaja de este tipo de montaje, es que se consume algo de energía cuando no esta apretado el botón y generalmente hay más tiempo sin apretar que apretando. pero es cuando no pasa corriente por el circuito que controlamos cuando interesa actuar en algunos casos, por ejemplo para encender luces de emergencia, esperaremos a que el detector nos indique que el circuito se ha quedado sin corriente.

Encender dos leds consecutivamente apretando un solo botón

Por ultimo vamos hacer lo que nos habíamos propuesto hacer con un solo pulsador, encender la luz blanca y cambiarla a rojo fijo, con apretar otra vez y finalmente apagar todo nuevamente con una pulsación más, desde un solo pulsador.

Como ya hemos comprobado que por del circuito del  pulsador pasa o no pasa corriente según se apriete o no el pulsador, esta luz nos sobra, así que la sustituimos por una resistencia más grande (de 600 Ω) y la “reciclamos” para este muevo ejercicio (esta es la ventaja de la placa protoboard que se aprovechan todos los componentes y que se monta y demonta muy rápido), en un nuevo circuito, con su correspondiente resistencia protectora, que parte del pin 9

El hardware queda así.

luces roja y blanca

 

  • Alimentamos el pulsador desde el pin V5
  • Leemos la tensión por el pin 7 de un punto situado entre el pulsador y la resistencia que tendrá O voltios cuando esté abierto el pulsador y 5V cuando esté cerrado
  • Alimentamos el Led rojo desde el pin 9
  • Alimentamos el led blanco desde el pin 11
  • El pin de tierra GND esta conectado al bus horizontal que corre el borde superior de de la protoboard, todos los circuitos terminan en orificios de ese bus

El nuevo software será así:

luces roja y blanca (2)

Observen

  • No hemos escrito la instrucción pinMode(entrda, INPUT); // Pin 7 como INPUT porque no es necesaria.
  • Como en este caso “estado” puede tener varios valores posibles hay que hacer un “if” con cada uno de ellos y hacer dentro de cada “if” lo que corresponda.
  • He tenido o que cambiar el if/else final por otra estructura sumar 1 primero y cierre el ciclo cambiando el valor 3 por un 0.
  • Nuevamente el pulsador le hemos colocado en la forma de denominada PULL DOWN V5 – Pulsador – Derivación para lectura de la tensión . Resistencia – GMD o “tierra”
  • Por supuesto si no se toca el pulsador no hay que hacer nada.

Con conocer estas dos posibilidades saber cuando alguien pulsa determinado pulsador y abrir y cerrar circuitos podemos ya realizar muchos proyectos, por poner un ejemplo un comentarista del post anterior me envía esta consulta

Hola que tal como vas…
necesito hacer lo siguiente…
accionar un codillo o selector (no pulsador) a diferencia de los pulsadores estos codiilos o selectores quedan accionados o sea no vuelven a su estado normal como el pulsador.

¿Que quiero hacer? al accionar el pulsador se debe accionar un ventilador por 3 segundos luego se debe apagar e inmediatamente encenderse otro ventilador.
OJO no puede estar los 2 al mismo tiempo!!
aL MOMENTO DE VOLVER EL CODILLO A SU ESTADO ORIGINAL SE DEBE APAGAR TODO.

Entiendo de lo que llama un “codillo” es lo que nosotros llamamos una llave de la luz normal y corriente como la pongo en la imagen más arriba.

Lo primero que tendremos que hacer es “traducir” de 220 voltios a 5 voltios y viceversa. Un sencillo cargador telefónico ue tenga de salida 5 voltios,  nos puede informar si se enciende la llave la la luz pues la energía que trasmite cesará al cesar la corriente, por tanto basta enchufarlo al circuito de la llave de modo que cuando se abra la llave comience a enviar corriente a 5 voltios y cuando se corte la electricidad deje de enviar a señal. Por otra parte las señales de salidas tendrán que ir a unos relés que abran o cierren circutos a 220 voltios con los 40 miliamperios que producen las salidas de los pin, que sera la ecorriente que utilizaran los ventiladores. Asi es como corrientemente podemos con Arduino manipular el mundo real, transformadores que reducen la corriente eléctrica a 5 Voltios y relés que trasladan la señal de 5 voltios a circuitos a 220 voltios.

Hecho esto, el circuito es mas o menos el mismo el último utilizado donde el circuito del Pushbutton se transformara en la corriente procedente del cargador telefónico y las luces blancas y rojas se sustituirán por los relés que alimentan los ventiladores.

En este caso cuando se da la corriente hay que poner en marcha los ventiladores y cuando se corta se apaga.

El programa quedara

encender ventiladores

Espero que todos hayan entendido el programa sin dificultad.

Observen que el primer ciclo después de encender la corriente dura como mimimo 3 segundos pues es el espacio de tiempo que ha solicitado esperar el consultante para encender el segundo ventilador. Por tanto el pin 7 no vuelve a saber si el voltaje es alto o bajo en tres segundos lo cual no es mucho. Pero imaginemos que el tiempo marcado en vez de tres segundos fueran dos horas. El pin 7 igualmente tardaría dos horas en volver a averiguar si se ha apagado la corriente, lo cual es excesivo. Para resolver ese problema hay otros métodos que veremos en otra ocasión.

Resumimos las funciones de Arduino que hemos utilizado de no entender el funcionamiento o la sintaxis de alguna buscarla en el Manual en español en PDF

Documentación

  • Párrafo /* ………. */
  • Comentario // …………

Declaración de variables y parámetros

  • Declaración de numero entero int parva = valor

Ciclo de trabajo de Arduino

  • Función Setup que solo se ejecuta al incoo del programa void setup() { ……….}
  • Función Loop que se repite indefinidamente void loop() { ……………….}

Mandatos en la función setup

  • Definir pin como salida pinMode(salida, OUTPUT)
  • Definir pin como entrada pinMode(entrada, INPUT)

Mandatos en la función loop

  • Condicional if if variable = valor {….}
  • Condicionales if anidados if var1 = valor1 {…. if var2 = valor2 {…. }….}
  • Condicionales if else if variable = valor {….} else {….}
  • ( Tanto la parte “if” como la “else” admiten en su interior otras funciones if o if else anidadas
  • Abrir un pin digital digitalWrite(pin, HIGH);
  • Cerrar un pin digital digitalWrite(pin, LOW);
  • Leer el voltaje de un circuito valor = digitalRead(entrada)
  • Pausa delay(tiempo);
  • Incrementar una viable var = var +1

Félix Maocho

Anuncios

4 diciembre 2015 - Posted by | General, Robotica | , , ,

4 comentarios »

  1. Hola! Te felicito por tu blog, nos ayudas a muchos que recien estamos comenzando!

    Tengo una duda. En la primera imagen, que sentido tiene colocar una resistencia entre el cátodo y GND? En todo caso, no tendríamos que proteger el LED en vez de la placa (dado que la placa ya tiene resistencia interna)?

    Ah! Y además cuando comienzas la sección “Encender y apagar con un pulsador” continúa otra imagen con un LED rojo y otro blanco. En la misma se aprecia que el LED rojo esta conectado GND-ánodo y resistencia-cátodo, no estaría mal eso? Agrego también que las referencias situadas debajo de la imagen hablan de pin 7 y 11, y en realidad estás usando pines 11 y 13.

    Comentario por Emiliano | 16 febrero 2016 | Responder

  2. Vayamos por partes.

    Primera imagen, Hay una resistencia en serie con el led.

    La ley fundamental de la electricidad es la Ley de Hom que dice I=V/R

    Aqui estamos conectando una salida a 5 voltios por en Pin V5, a tierra GND. Por tanto estamos creando un circuito que de no tener esa resistencia, solo tendría la muy pequeña del Led, lo que daría lugar a una intensidad de la corriente considerable, que produciría un cortocircuito que posiblemente dañara la placa.

    SI ponemos una resistencia, no importa antes o después del Led, pero si en el mismo circuito, el decir en serie, se suma a la resistencia del Led, de modo que la R del circuito aumenta y como el voltaje es igual hace que descienda el valor de la I, con lo que al ser la intensidad de la corriente mucho más manejable y se puede absorber tanto por el Led como por la tarjeta.

    La intensidad de la corriente en una bombilla normal viene reducida por el filamento de la bombilla, que es en si misma una resistencia, Cuando se provoca un cortocircuito, se funde el casquillo de cobre, porque la intensidad de a corriente se descarga con toda su fuerza al desaparecer una resistencia de cierta entidad que la reduzca.

    La segunda parte, lo de los pines utilizados. Creo que tienes toda la razón hay una incongruencia entre lo que escribo (Pines 7 y 11) y la imagen que presento (Pines 11 y 13)a. Voy a repasar todo el texto y arreglarlo en el post

    Muchas gracias por avisarme.

    Comentario por felixmaocho | 16 febrero 2016 | Responder

    • Ahora lo entiendo! Muchas gracias.

      Comentario por Emiliano | 16 abril 2016 | Responder

      • Gracias por comunicarme el error que tenía el post, De veras le agradezco su participación.

        Comentario por felixmaocho | 16 abril 2016


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: