Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Curso de Arduino – Uso de los pines digitales como entrada (INPUT)

pines digitales

Por Félix Maocho
29/5/2016.

Objetivo de este capítulo

Aprender a utilizar los pines digitales como detectores del paso de corriente por otros circuitos.

Familiarizarse con la funciones que ya hemos aprendido y aprender algunas nuevas relacionadas con el uso de los pines como entrada.

Material necesario

  • Tarjeta Arduino y cable de conexión al PC
  • Tarjeta de prototipado o “protoboard”
  • 8 Cables de conexiones, (Preferiblemente, no imprescindible,  5 rojos, 2 grises, y 1 verde)
  • 2 Resistencia de 220 Ω
  • 2 leda (es indiferente el color)
  • 1 Pulsador o Psh Button

Conocimientos previos necesarios

  • Saber utilizar los pines digitales de Arduino como salida OUPUT
  • Uso de las funciones del sistema “pinMode”, “digitalWrite” y “delay”
  • Saber escribir, compilar y cargar en la Tarjeta Arduino un programa
  • Saber que es y como funcilna un pulsador

Todos estos conocimientos se explican en detalle en los capítulos anteriores del Uso de los pines digitales como salida (OUTPUT)“ y “Interruptores, pulsadores, conmutadores y relés utilizados en electrónica

Pines digitales como entrada (INPUT)

En el capítulo Uso de los pines digitales como salida (OUTPUT) practicamos el uso de los pin digitales como puntos de control de la salida de corrientes de 5V y manejamos el más sencillo de los actuadores, el led, que luce cuando se permite el paso de la corriente y permanece apagado cuando no pasa corriente. En estese capitulo, vamos a aprender a manejar sensores, que son los aparatos que “avisan” a Arduino, de los cambios ocurrido en su entorno, para que en función de esos cambios, “decida” que acción ha de ejecutar y en función de ello, ponga en marcha los “actuadores” necesarios para llevarla a cabo.

Con ello entramos en un nuevo mundo, el de la automática y la robótica, donde los objetos que creemos, dejen de ser meros autómatas que repiten incansablemente aquello que les hayamos programado, como ocurría en los ejemplos del faro y el semáforo que vimos en capítulos anteriores, para entrar en la confección de objetos que “reaccionan” a los cambios de su entorno, actuando de forma diferente, de acuerdo a lo que “deducen“ de los cambios observados.

El más sencillo de los “sensores”, el equivalente al led en los actuadores, es el pulsador, botón, o “push button”, que por todos estos nombres se conoce, habitualmente lo llamaré pulsador, pero si hay que buscar en Internet. utilice la palabra “push button” pues es como localizará mas fácilmente toda la información que hay (generalmente en inglés), sobre el tema.

pulsador-nc-y-noDe los interruptores, de los que el pulsador es uno de los tipos  hablamos en el capítulo anterior. Quedamos en que había varios tipos de pulsadores que se pueden agrupar en dos grandes familias los “pulsadores NO”, o normalmente abiertos (Open), cuyo esquema se corresponde a la imagen inferior y los “pulsadores  NC” o normalmente cerrados (Closed), cuyo esquema se corresponde a la imagen superior. Los primeros cuando no se los pulsa no dejan pasar la corriente (normalmente abiertos) y los segundos si (normalmente cerrados), cambiando de fase al oprimir el pulsador.

,
Por ello lo primero sera estudiar que tipo de pulsadores manejamos. Como indiqué lo más sencillo es hacer unos circuitos que partiendo de el pin 5V (5 voltios) pasa por una conector del pulsador y sacar un cable de otro conector y después de pasar por el led y una resistencia de 220 Ω mere en el pin de tierra GRD, Así de esta forma se prueban como funcionan los contactos del pulsador y que ocurre cuando se oprime el botón. Les dejo el esquema del pulsador mas complejo que se pueden encontrar pues es a la vez NO y NC según se conecten sus bornes.

Y el esquema del circuito para probarlo rápidamente cambiando simplemente de posición los cables azules

6_1_pulsador_2_circuito_5v_bb

En mi caso concreto encontré que siempre actuaba como un pulsador NO, (normalmente abierto), y que las dos patas de cada uno de los lado estaban conectadas entre si, por lo que era indiferente a que bornes nos conectáramos siempre que los cables se conectaran en lados opuestos

esquema-pulsador

No lo he hecho, pero muy posiblemente si abrimos el pulsador, nos encontramos con algo muy semejante al esquema que les muestro Dos cables en U que forman las cuatro patas del pulsador y sobre ellos un circulo de metal pegado a una esponja de goma, que es el muelle que separa el circulo de metal de los dos cables cuando dejamos de oprimir como indica este esquema. Por ello el esquema mas claro par este tipo de pulsadores es el que sigue:

Manejo de los pulsadores en los circuitos digitales.

Conociendo ya como es nuestro pulsador, podemos pasar a estudiar como le podemos utilizar. Indudablemente como ocurre en este ejemplo que hemos montado, un uso del pulsador es poder abrir y cerrar un circuito con un LED, zumbador o un motor, a voluntad, de forma que el aparato funcione o no según apretemos el botón. Posiblemente en algún montaje queramos tener controlado un aparato por un botón, no obstante, este uso será minoritario y raro, pues teniendo una placa especializada en abrir y cerrar circuitos, resulta claramente innecesario el uso de un pulsador manual, que por otra parte si es NO, nos obliga a estar oprimiendo el botón durante todo el tiempo que deseemos tener el circuito cerrado.

Para ese trabajo es más eficaz el conmutador, como las llaves de la luz que un pulsador. De hecho en la vida real se utilizan de esa forma muy poco los pulsadores, que y recuerde, en los timbres, las minipimer y los taladros, en la inmensa mayoría de los aparatos, se instala un conmutadores del tipo i/O que en una posición permite de forma continuada el paso de la electricidad y en ella otra posición impide el paso, como por ejemplo pasa en los conmutadores de las lámparas.

interruptores rojopush-button

Rebote de un corte de la corriente.

Cuando activamos o desactivamos la corriente eléctrica, no importa si cortamos la luz mediante un interruptor, o mediante un pulsador, el corte de la corriente no es tan drástico como parece, sino que se producen una serie de rebotes o fluctuaciones, (ruido), que se van atenuando hasta que se alcanza definitivamente el voltaje que se pretende alcanzar al actuar en el interruptor o el pulsador.

Mas o menos, la gráfica del voltajes que se alcanzan en los momentos posteriores a interrumpir o dar la corriente eléctrica es como indica esta imagen

rebotes

La fluctuación dura poco tiempo. del orden de unos milisegundos, algo que en principio parece que no nos debiera importar, pero tenemos que tener en cuenta la alta velocidad de procesamiento de Arduino. Pudiera ser que en ese tiempo se dieran varias vueltas a la función “loop”. por lo que Arduino. pudiera interpretar los diferentes voltajes leídos en cada vuelta, como que activemos y desactivemos la corriente y “deducir” de ello. que hemos encendido y apagado diferentes veces el interruptor, o en el caso del pulsador, que lo hemos presionado diferentes veces.

Por ello, debemos poner alguna medida que elimine este problema. La mas sencilla, (hay otras muchas), es anteponer un pequeño “delay” a la lectura del voltaje, de modo que garantice que leemos el voltaje una vez estabilizado. Suele ser suficiente que esta interrupción dure 100 mili segundos, una fracción de tiempo ,que pasa desapercibida en el funcionamiento del programa, pero que evita el riesgo de producir diferentes lecturas en el periodo de rebotes del interruptor

(En este enlace  Mariano del Campo explica otra solución más profesional).

Aunque no lo parezca, el pulsador se utiliza mucho más, como la forma de indicar a un aparato que realice una tarea que ya tiene programada, pesemos por ejemplo en las botoneras de un ascensor, en el pulsador de la luz de la escalera, y los cien botones de un telemando. Un pulsador se utiliza habitualmente como elemento comunicador con las máquinas de lo que deseamos hacer, es por ello un sencillo sensor de la maquina, mediante el interruptor la máquina siente la presión que se ejecuta.

Un uso lógico del interruptor es utilizarlo para indicar a la tarjeta, cuando queremos iniciar o finalizar una acción determinada. Por ejemplo, cuando queremos encender una luz y cuando la queremos apagar. Si conseguimos que la tarjeta detecte cuando hemos oprimido el pulsador, podemos hacer que si el LED esté apagado, se encienda, y si esta encendido, se apague, sin necesidad que durante todo el rato que esté encendido estemos apretando el botón del pulsador. En resumen podemos utilizar el/los, pulsador/es para indicar a la máquina cuando deber modificar su forma de funcionamiento.

En este uso, el interruptor como hardware tiene que venir acompañado en el software de un mandato condicional del tipo “Si oprimió el botón, haz tal cosa”: Entonces lo primero que tenemos que saber es como se entera la tarjeta que hemos oprimido el botón.

Que hace un pin como INPUT 

pulsar-ek-botonHasta ahora e hemos utilizado los pin en modo salida..es decir indicando con la función “pinMode” y el parámetro “OUTPUT”, que permitiera la salida de una corriente de 5V cundo se lo indicábamos con una función “digitalWrite” y el parámetro “HIGH” (alto) o que lo impidiera si poníamos el mandato “LOW” (bajo), pero también podamos utilizar la función “pinMode” con el mandato “INPUT” ¿Que hace esa función?

Esa función hace que el pin actúe como un VOLTIMETRO es decir como un aparato que mide la intensidad de la corriente que pasa por un punto, Y, ¿Para qué queremos tal cosa? – Si conseguimos que al apretear un boton cambie un circuito de estar a ov a pasar a 5V, (o viceversa), habremos construido un “sensor de presión”. Por este sistema la ´tarjeta Arduino, se puede “enterar” cuando alguien ha pulsado un botón e iniciar lo que esté previsto hacer cuando eso ocurra.e

El método que se utiliza es el siguiente, cuando se lo mande el programa, se lee el voltaje del cable que se introduce en el pin y si el voltaje es superior a 3,5 voltios avisa que hay “voltaje alto” (>3,5 V) y la funcion devuelve el valor “1”, si el voltaje es “bajo” (<3,5V) informa “0”, pues como es un pin digital solo tiene capacidad de decir si o no, en forna de 1 y 0.

Ejemplo de utilizacion del pin en INPUT

Hemos modificado un poco el último esquema sacando un cable verde que conecta también con la salida del pulsador y termina en el PIN4 que abriremos como “INPUT” y un led que parte del PIN3 que abriremos como OUPUT.

El objeto es el siguiente. Como el pulsador es de tipo NO (nor5malmente abierto), si no oprimimos el pulsador, el cable verde que muere en el PIN4 estará a 0V porque a través de la “protoboard” conecta con tierra (GRD). Pero cuando apretemos el pulsador, su voltaje aumentará pues recibirá parte de los 5V (excepto el voltaje que reduzca la resistencia del led que es mínima), por lo que el segmento que está anterior a la resistencia debe estar entonces a casi 5V.

El esquema del hardware es como sigue:

montaje-pull-down_bb

Cuando Arduino detecte que el voltaje es bajo (0), mantenemos apagado el led, pero si es alto (1), lo encenderá. Por tanto el programa será como el que sigue;

/* Sketch 3 Detectar cundo oprimen en pulsador
* Montaje Pull Down
* 1º Leer el pin4*
* 2º Si la lectura es “1” encender el led que sale del pin 3
* 3º Si la lecturas es “0” apagar el led que sale del pin 3
* Repetir el ciclo*/

// Área de definición de variables y parámetros
int pinout = 3;
int pininp = 4;
int valor = 0; // variable para guardar el valor de la lectura 0 = LOW 1 = HIGH

// Función setup

void setup() {
pinMode(pinout, OUTPUT);   // Pin abierto como OUTPUT enciende led
pinMode(pininp, INPUT);      // Pin abierto como INPUT, lee pulsador
}

// Función loop
void loop() {
// 1º Leer el pin4 y deposita el resultado en “valor”

delay (100)   // para evitar los rebotes del pulsador
valor = digitalRead(pinint);
// 2º Si la lectura es “1” encender el led que sale del pin 4
if (valor == 1) {

digitalWrite(pinout, HIGH); // enciende el led
}

// 3º Si la lectura es “0” apaga el led que sale del pin 4
if (valor == 0) {

digitalWrite(pinout, LOW); // apaga el led
}

// Repetir el ciclo

}

Creo que ya debe ser sencillo entender este sketch pues gran parte de las cosas ya las conocen, además que por si mismo es muy sencillo.

Obvio explicar nada del encabezamiento pues a estas alturas deben saber todo sobre los comentarios, así pues paso directamente al “Área de definición de variables y parámetros” que como única novedad creo que por primera vez definimos una variable “Valor” que dentro del programa tomará el valor de la lectura del voltaje que haga el pin 4, solo puede tomar dos valores posibles o y uno por lo que podemos definiría como entero “int” pero es que así es como espera encontrarse la variable la función de lectura de la tensión.

La diferencia entre variable y parámetro es meramente conceptual, para la tarjeta son idénticas, Denominamos variables, aquellos elementos res que cambian, o pueden cambiar de valor  a lo largo del programa como es en muestro caso ·”valor” que puede valer 0 o 1 según sea la respuesta de la función, mientras que denominamos parámetros aquellos elementos a los que se les da en la funcion Setup un valor y se mantienen sin cambiar siempre, como ocurre en nuetro caso con los parámentros  “pininp· y “pinout”   .

Pasamos a la función “setup” que ha configurado el pin 3 como “OUPUT” y el pin 4 como “INPUT”. Podíamos no haber configurado el PIN4 como “INPUT” porque de fabrica todos los pines están configurados como INPUT por lo que realmente solo hace falta configurar los OUPUT. (aconsejo que lo compruebe, sólo así se aprende), sin embargo aconsejo escribirlo pues es solamente una linea más por Pin que haya que configurar como INPUT y añade mucha claridad al programa, pues resalta la función de cada pin algo que no queda claro en los esquemas.

La función que se utiliza para configurar un pin como INPUT es “pinMode”, exactamente la misma que se utiliza para abrirlos como OUPUT, pero claro esta cambiando el parámetro de salida con la siguiente sintaxis

pinMode(numpin, INPUT)

Entramos en la función “loop” que platea un poco mas de novedades en primer lugar esta la forma de hacer la lectura de la tensión del cable que penetra en el pin la función “digitalRead”, que cuando el sketch se la encuentre leerá el voltaje de cable que penetra en el pin indicado, que previamente ha de ser configurado como “INPUT” y si encuentra que la tensión es menor que 3,5V (en una tarjeta que funcione a 5V como la Arduino UNO) devuelve un “0” y si es mayor devuelve un “1”, Su sintaxis es como sigue

val = DigitalRead(PinInput)

“val” es una variable que puede tener cualquier nombre, (en nuestro caso se llama “valor”), que previamente ha sido definida como variable numérica y entera y que solo puede recibir de la función “DigitalRead” los valores “0” y “1” según la tensión de cable que entra en el pin sea menor o mayor que 3,5V.

“DigitalRead” es una función del sistema que lee el voltaje de un pin. Se escribe exactamente así con las mayúsculas que se indica

“PinInput” numero o una variable con un valor correspondiente al pin digital que se quiere leer el voltaje que soporta que previamente se ha configurado como “OUPUT”

Función condicional if

Utilizamos también una nueva función que pertenece al grupo de la funciones condicionales, lo que quiere decir que los comandos que abarcan esta función y que quedan entre dos corchetes *{….}” solo se ejecutan si se cumple una condición especificada La función se llama “if” (si) y su sintaxis es como sigue ;

if (var comp val) {
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
}

“if” es una función del sistema del tipo condicional, es decir que solo se ejecuta si se cumple la condición especificada entre los paréntesis (….) que vienen a continuación

La condición consta de tres elementos ;

“var” una variable definida previamente que tiene un cierto valor, (en nuestro caso ha adquirido el valor que devuelva la función “DigitalRead”

“comp” es la comparación que hay que cumplir. Las condiciones aceptadas son

  • == igualdad (x== y) (x es igual a y)
  • != no igual (x != y) (x no es igual a y)
  • > mayor (x > y) (x es mayor que y)
  • < menor (x > y) (x es menor que y)
  • >= Mayor o igual (x>= y) (x es mayor o igual y)
  • <= Menor o igual (x<= y) (x es menor o igual y)

En nuestro caso utilizamos la igualdad (==). Observe que son dos signos igual (=) seguidos

¿Por qué son dos “igual” y no uno ?

Recuerda que estás en “clase de informática” y no de “clase de matemáticas”. aquí el signo igual no es el “signo de equivalencias”, sino mas bien el “signo de transferencia”.

¿Que quiere decir eso? – Que el valor de la expresión que está a la derecha si sustituye el valor que tuviera hasta ese momento las variable que está a la izquierda

Por ejemplo

var = 3 ;

Indica que la variable  “var”, (que habremos definido en “setup” muy posiblemente con un valor inicial, adquiere el valor 3, desde el momento que en la función “loop” se ejecute esta línea, si posteriormente encontramos una expresión que dice

var = var +1;

la variable “var” pasa de valer 3 como valía hasta aquí, a valer 4 a partir de este momento, porque se ha transferido a valor la operación matemática “var = (3 + 1)” o sea 4

Observe que esta última expresión, es una “expresión informática”. pero no “expresión matemática”. donde esta linea seria en matemáticas un claro error, o en caso de aparecer en una hipótesis, la demostración al absurdo, porque “valor = valor +1” “matemática” se simplificaría quedando solo “0 = 1”, lo cual es imposible.

Realmente lo más correcto seria utilizar en vez del caracter “=” haber utilizado el caracter “←” que sería mucho más adecuado, ¿Por qué no se usa?.- Habria que remontarse a la historia del PC a los Amstrand y Spectrun, esos ordenadores tnían muchas limitaciones gráficas y solo utilizaban un teclado similar al de la máquina de escribir antiguas en ellos no existian caracteres como el “Ω” o el “←” y los programadores se tenían que apañar con lo que tenían, sasi que echarn mano del signo de igualdad o identidad para expresar  la transferencia de valores

Por eso una linea del tipo “variable1 = variable2 + variable3” tiene sentido en una expresión informática, independientemente del valor que para entonces tenga “variable1”, en cambio la linea inversa “variable2 + variable3 = variable1” no tiene “sentido informático” aunque lo pueda tener “matemático” pues el programa intentara traspasar el valor de “variable1” al otro lado de el símbolo “igual” pero no sabrá como repartirlo entre las dos variables

Por eso cuando queremos utilizar en el lenguaje de programación de Arduino el concepto de “identidad”, el que tiene siempre tiene en “matemáticas”, ponemos dos iguales (==) que quieren indicar que “lo de la derecha es igual a lo de la izquierda”

También y por el mismo motivo es diferente el signo de desigual que habitualmente en “matemáticas” se indica con el carácter “≠” y que aquí se expresa como (!=) y que quiere decir “lo de la derecha no es igual a lo de la izquierda”

Si se cumple la condición impuesta ( en ingles if), entonces se ejecutan las líneas incluidas entre los dos corchetes ({…. }), cualquiera que sea el contenido incluido entre los corchetes, pero si la condición no se cumple, entonces el programa se salta todas esas líneas de programa y continúa en la siguiente línea que venga a continuación de el último corchete de cierre “}” . Por eso es una función condicional, solo se ejecuta si se cumple la condición. Estas c funciones condicionales son las que permiten que la programación sea muy elástica, tanto como lo desee el programar, pues siempre puede mandar hacer cosas sólo “si ocurre tal cosa”.

Funciones condicionales anidadas

Aunque aquí no se haga, ni se lo pongo para no complicar más la cosa, simplemente como información, añadiré que una función “if” puede tener en las lineas que controla cualquier cosa, como indicamos, incluso otra función “if”, esto se llama tener “anidada” otra función condicional que se ejecutarán o no las funciones comprendidas entre los correspondientes corchetes ({…}) según se cumple la condición que contiene la segunda función “if”. Por esta razón los corchetes siempre vienen por parejas y de estar anidados, los más interiores son los que forman un bloque y los mas exteriores son los que forman el bloque de funciones que contiene al “If” anidada.

Como ven, es un poco lioso. así que de momento pasamos de explicarlo con detalle simple mente pondré un ejemplo literal para que se entienda el concepto.

Imaginemos que estamos un “Robot Machista” es decir un robot grosero que siempre que se crece con una mujer de mas de 170 cm y sea rubia diga ·TIA BUENA”, El esquema de la programación seria algo parecido a los siguiente los sensores detectarian la presencia de personas a su alrededor su tamaño, sexo y color del pelo y en un momento el programa haría algo parecido a esto

if ( “alguien cerca” == si){

if(“sexo” == hembra) {

if{ estatura >= 170 cm) {

if ¨(pelo == rubio)

Di (¡¡¡ TIA BUENA !!!)

}

}

}

}

Solamente si se cumplen todas las condiciones el robot diría  ¡¡¡ TIA BUENA !!! No es un ejemplo muy fino lo reconozco pero pero espero que valga para entender el concepto de Funciones condicionales anidadas,

También de momento, a modo de anticipo, les informo que la función “if”(si) puede asociarse a otra función llamada “else”(en otro caso). En este caso habrá por un lado un conjunto de instrucciones comprendidas entre los corchetes ({…}) del “if” y a continuación el otro conjunto situado entre lo corchetes ({…}) del “else” y o se ejecuta el primero, si se cumpla la condición exigida o se ejecuta el segundo si no se cumple, pero siempre se ejecuta uno de los dos conjuntos de instrucciones,

Pongo un ejemplo, tambien un poco sencillo para que se entienda el mecanismo del funcionamiento. Apretamos un pulsador y si esta apagado un Led lo encendemos, “en otro caso lo apagamos. El esquema de la programación seria algo parecido a los siguiente

if ( “apretaron el botón” == si){

if (“led apagado ” == si) {

Encender el led

}

Else {

Apagar el led

}

}

Como digo sólo apunto las posibilidades que tiene la función “ie” hay otras funciones condicionales semejantes que iremos utilizando en su momento pues son la herramienta mas adecuada para conseguir que los objetos hechos con la Tarjeta Arduino actúen como automatismos o como robots, que es el uso lógicvo de los aparatos que utilizan la Tarjeta Arduino para su control.

Otra cosa el indentado no es obligatorio, pero conviene hacerlo porque facilita mucho entender de un vistazo lo que hace cada una de las funciones condicionales.

Así que volviendo a nuestra nuncio “loop” su sentido es el siguiente .

* 1º Leer el pin*
* 2º Si la lectura es “1” encender el led que sale del pin 3
* 3º Si la lecturas es “0” apagar el led que sale del pin 3

Montaje Pull down y Pull up

El montaje que hemos hecho para averiguar el voltaje de una linea es el más habitual y se denomina montaje PULL DOWN, (tirar abajo. o derribar, quiere decir que el voltaje está normalmente a 0 voltios).que como se ve en el esquema, el orden de los elementos que interviene en el circuito a investigar es 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

montaje-pull-down_bb

Lo mas importante es que el punto de donde salga el cable que va al Pin abierto en INPUT tiene que estar situado entre el interruptor y la mayoria de las resistencias para que estemos seguros que cuando el pulsador no se oprina esté a 0V 0porque permanece unido a tierra,  pero aumenta a , (cerca de), 5V cundo se oprima el pulsador, En este cso sera un poco menos pues el Led aunque pequeña ofrece una cierta resistencia.

pulluppulldown

Sin embargo como vemos, hay otro montaje posible, donde resistencia y pulsador permutan sus puestos. Es el montaje PULL UP, (tirar arriba o subir, o que el voltaje esta habitualmente a 5voltios).

  • 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

En este caso lo mas importante es que el punto de donde salga el cable que va al Pin abierto en INPUT tiene que estar situado antes de la mayoria de las resistencias y del pulsador para que estemos seguros que cuando el pulsador no se oprina esté a 0V 0porque permanece unido a tierra,  pero aumenta a , (cerca de), 5V cundo se oprima el pulsador, En este cso sera un poco menos pues el Led aunque pequeña ofrece una cierta resistencia.

montaje-pull-up_bb

Comparen con el montaje que hay, La diferencia es mínima La mayor diferencia es que el lugar donde conectamos para estudiar el voltaje a que esta sometido el circuito, pasa de estar entre el interruptor y la tierra (GRD) a estar entre el interruptor y el alimentador de tensión (5V) y que por tanto al estar cortado el circuito esta parte del cable de conexión esta a 5voltios habitualmente pero baja a cero voltios por estar DESPUES de la resistencia y en conexión con tierra (GRD)

En este tipo de montajes, si realmente existe corriente a 5V (PULL UP) el segmento de cable donde investigamos qué voltaje, estará habitualmente a 5 voltios, puesto que esta conectado con el Pin 5V,  pero tan pronto como apretemos el pulsador caerá a cero la lectura pues toda la carga que haya en ese segmento de cable se irá a tierra (GRD).

Generalmente y de ser indiferente por otros motivos uno u otro montaje, es preferible el montaje PULL DOWN pues al final sabemos lo mismo, cundo alguien oprime el pulsador, pero en el PULL UP someternos a la tarjeta a mayor stress eléctrico, sin embargo el montaje PULL UP es imprescindible cuando el objeto del control no es tanto detectar si pasa o no electricidad por un determinado circuito, como si en ese circuito que estamos controlando ocurre una caída de tensión.

Por ejemplo, imaginemos que querenos establecer alguna alarma para cuando falla la luz en un circuito, por ejemplo, queremos encender luces de emergencia, con un montaje PULL DOWN, si el origen la corriente cesa, no detectaremos el fallo, pero si lo haremos un montaje PULL UP , pues cuando falle la corriente detectaremos que el segmento queda a 0V aunque nadie haya apretado el pulsador.

Hagamos un ejemplo en el que tratemos de  detectar tanto si alguien a oprime el pulsador como si por un fallo de la energía no pasa corriente por ese circuito. Utilizando el montaje Pull Down que proponemos podremos hacerlo..

Mantenemos el led que nos informa si pasa o no corriente por el circuito, también colocamos la resistencia de 220 homios y a continuación el interruptor. Es decir los componentes que utilizamos son exactamente los mismos tan solo varia el orden de alguno de ellos. Cambien cambia es el punto donde se saca a derivación que se lleva al pin para que Arduino nos diga si el voltaje es alto (>3,5V) o bajo (>3,5V) . en este caso se “pincha” entre la resistencia y el interruptor. En tanto no pulsemos el interruptor, el segmento esta con voltaje alto, pero tan pronto apretemos el interruptor el voltaje desciende pues conectaremos ese pedazo de cable a los 0V de la tierra (GND).

Por tanto si pretendemos en este caso encender un led cuando pase corriente por ese circuito deberemos encender el led 3 cuando detectemos que el segmento que estudiamos esté en baja y viceversa por tanto el programa será.

/* Sketch 4 Detectar cundo oprimen en pulsador o si falla el suministro
* Montaje Pull Up
* 1º Leer el pin4*
*>2º Si la lectura es “0” encender el led que sale del pin 3
* 3º Si la lecturas es “1” apagar el led que sale del pin 3
* Repetir el ciclo*/

// Área de definición de variables y parámetros
int pinout = 3;
int pininp = 4;
int valor = 0; // variable para guardar el valor de la lectura 0 = LOW 1 = HIGH

// Función setup

void setup() {
pinMode(pinout, OUTPUT); // Pin abierto como OUTPUT enciende led
pinMode(pininp, INPUT); // Pin abierto como INPUT, lee pulsador
}

// Función loop
void loop() {
// 1º Leer el pin y deposita el resultado en “valor”

delay (100)   // para evitar los rebotes del pulsador

valor = digitalRead(pinint);
// 2º Si la lectura es “0” encender el led que sale del pin 4
if (valor == 0) {

digitalWrite(pinout, HIGH); // enciende el led
}

        // 3º Si la lectura es “1” apaga el led que sale del pin 4
if (valor == 1) {

digitalWrite(pinout, LOW); // apaga el led
}

// Repetir el ciclo

}

Como ven las diferencias entre amboa hardware y sodware son bastante cosméticas el cambio de orden de las resistencias y los pulsadores y que encienda en un caso cuando detecta subida de tensión (“valor =1”) y en el siguiente caso, al contrario cuando hay una caida de tensión (“valor =0”) . Sin embargo.en el segundo caso, acambio de someter a mayor stress a la Tarjeta (normalmente se encuetra el circuito a 5V), detecta no solo las pulsaciones sino además las caidas de tensión, si desconoectis el cable del Pin V5 en el primer caso la tarjeta no lo detecta y en el segundo si.

Practicar

No conozco otro sistema más eficaz de aprender el manejo de la Tarjeta Arduino que el practicar. Os dejo los ficheros de ambos sketsh sin caracteres de eedicion para que podais hacer copy/paste directamente sin que cometais errores de escritura. Cargar cada uno de esos ficheros en la tarjeta y ver los resultados, cometer deliberadamente erorres para ver que pasa, (olvidaros algún “}” o cosas parecidas,  dasconectar los componentes etc, hasta que estéis seguros que habéis comprendido bien lo que he explicado.

´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´

/* Sketch 3 Detectar cundo oprimen en pulsador
* Montaje Pull Down
* 1º Leer el pin4*
* 2º Si la lectura es “1” encender el led que sale del pin 3
* 3º Si la lecturas es “0” apagar el led que sale del pin 3
* Repetir el ciclo*/

// Área de definición de variables y parámetros
int pinout = 3;
int pininp = 4;
int valor = 0;    // variable para guardar el valor de la lectura 0 = LOW 1 = HIGH

pinMode(pinout, OUTPUT); // Pin abierto como OUTPUT enciende led
pinMode(pininp, INPUT);     // Pin abierto como INPUT, lee pulsador
}

// Función loop
void loop() {
// 1º Leer el pin4 y deposita el resultado en “valor”
delay(100) // Para evitar los rebotes
valor = digitalRead(pinint);
// 2º Si la lectura es “1” encender el led que sale del pin 4
if (valor == 1) {
digitalWrite(pinout, HIGH); // enciende el led
}
// 3º Si la lectura es “0” apaga el led que sale del pin 4
if (valor == 0) {
digitalWrite(pinout, LOW); // apaga el led
// Repetir el ciclo

/* Sketch 4 Detectar cundo oprimen en pulsador o si falla el suministro
* Montaje Pull Up
* 1º Leer el pin4*
*>2º Si la lectura es “0” encender el led que sale del pin 3
* 3º Si la lecturas es “1” apagar el led que sale del pin 3
* Repetir el ciclo*/

// Área de definición de variables y parámetros
int pinout = 3;
int pininp = 4;
int valor = 0;     // variable para guardar el valor de la lectura 0 = LOW 1 = HIGH

// Función setup

void setup() {
pinMode(pinout, OUTPUT); // Pin abierto como OUTPUT enciende led
pinMode(pininp, INPUT);     // Pin abierto como INPUT, lee pulsador
}// Función loop
void loop() {
// 1º Leer el pin4 y deposita el resultado en “valor”
Delay(100) // Pera evitar rebotes
valor = digitalRead(pinint);
// 2º Si la lectura es “0” encender el led que sale del pin 4
if (valor == 0) {
// enciende el led

    digitalWrite(pinout, LOW); // apaga el led
}

  // Repetir el ciclo

}

Repaso

Como repaso final te diré lo que has aprendido hoy

  • Que se un sensor
  • Cómo se maneja y un pulsador
  • Qué es el efecto rebote en pulsadores e interruptores
  • Como se corriger el efecto rebote
  • Para que se utiliza un pulsador en a mayoría de los casos
  • Definir un pin como OUTPUT
  • Uso de los pines de Ardiuino como sensores del voltaje de un circuito
  • Montaje Pull Down
  • Montaje Pull Up
  • La función condicional “If”
  • Las diferentes comparaciones que se admiten en la función “IF”
  • El símbolo = como asignación de un valor a una variable1
  • El símbolo == como comparación de identidad de dos variables
  • Es símbolo != como compararon de diferencia de dos variables

Ejercicios para resolver

Si ha llegado a este punto con razonable aprovechamiento deberá saber resolver estos ejercicios que le propongo

1 – Simplificar el software del Semáforo con el uso de la función “if”

Utilizar la función “if” para reducir el número de líneas del 2º Ejercicio de uso de pinesódigitales de Salida OUPUT – Semáforo

=================================================================
Puede encontrar resuelto este ejercicio en:
1º Ejercicio de uso de pines digitales de entrada INPUT – Semáforo utilizando “if”
=================================================================

2 – Luces de emergencia

Se desea encender la luz de emergencia en el momento en que falle el circuito principal y se vaya la luz.

=================================================================
Puede encontrar resuelto este ejercicio en:
2º Ejercicio de uso de pines digitales de entrada INPUT – Luces de emergencia
=================================================================

3 – Temporizador luminoso

Para un descansillo de una escalera se desea que cuando se pulse el botón la luz se mantenga encendida un minuto, apagándose a continuación.

=================================================================
Puede encontrar resuelto este ejercicio en:
3º Ejercicio de uso de pines digitales de entrada INPUT– Temporizador luminoso
=================================================================

4 – Luces de alarma intermitentes

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

5 – Linterna multiuso

Queremos construir una linterna nultiuso que funcione de la siguiente forma

  • La primera vez que se pulse el botón se enciende un led blanco
  • La segunda vez que se presiones se encienden a la vez tres leds blancos
  • La tercera vez que se presione se enciende un led rojo
  • La cuarta el led rojo se pone intermitente
  • La quinta apaga todas las luces de la linterna

Estos ejemplos los presentaré resueltos próximamente. Posiblemente mi solución sea diferente a la suya, porque hay muchas formas de hacer lo mismo. Si la tuya funciona de acuerdo con las especificaciones que he dado, tu respuesta es válida. No obstante, hay siempre una solución que es más elegante que las otras, y posiblemente esa sea la mía, porque tengo más experiencia, pero no es seguro, puede que haya quien encuentre una solución mejor.

¿Que hace que una solución sea elegante? – La economía de medios y la claridad, la solución más corta, que menos y mas pobres medios utiliza de la tarjeta y la que es mas clara y está mejor documentada es más elegante. Tenga en cuenta que lo que yo escriba, tu tienes que entenderlo, es fundamental ser claro, porque programar suele ser labor de equipo y el equipo, tiene que comunicarse perfectamente.

Con mucho gusto recibiré en mi buzón sus soluciones, mandame el texto completo de tu sketch (haga copia /pega en su email) y si es posible mandame una filmación del resultado de la prueba. Aquí tiene mi dirección e mail faocho@gmail.com.

Por último ¿Se da cuenta de la velocidad con que se aprende Arduino? Creería posible que con solo tres lecciones y conociendo únicamente seis funciones pudiera hacer una linterna multiuso, un temporizador y unas luces de emergencia.

Félix Maocho

indice

29 septiembre 2016 - 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: