Sesión 2-2

Construye tu Estación Meteorológica

Sensores Digitales

En esta sesión trabajaremos con los sensores digitales.

Los sensores digitales son dispositivos de entrada que pueden estar en dos estados, alto o bajo, encendido o apagado.

Con estos sensores podemos poner en un estado, alto o bajo, verdadero o falso, a los pines de entrada, GPIOs, de nuestro microcontrolador, que en este caso serán entradas de 3.5 volts en alto y de 0 volts en bajo.

De esta manera podemos usar estos sensores para checar el estado de algún dispositivo y que entonces el microcontrolador realice algún tipo de acción dependiendo del estado del pin de entrada donde tenemos conectado el sensor. Podemos también enviar una señal al microcontrolador, para que haga algo cuando detecte un cambio en el estado del pin de entrada donde está conectado el sensor digital.

Hay que ser muy cuidadoso con los voltajes de entrada, pues hay dispositivos que trabajan con 5 volts de salida y si conectáramos uno de estos dispositivos a un pin del microcontrolador, que trabaja con 3.5 volts, podríamos dañar este pin o a todo el microcontrolador.

El botón

El botón es uno de los sensores digitales más utilizado para trabajar en multiples proyectos, por su facilidad de uso, la facilidad de su conexión y por la gran cantidad de botones de todo tipo que tenemos disponibles.

Por lo mismo es también el mejor ejemplo para introducir el funcionamiento de los sensores digitales.

Por su diversidad podemos encontrar todo tipo de botones para los mas diversos propósitos y todo tipo de circunstancias en las que serán utilizados.

Componentes

Los componentes que utilizaremos en este proyecto son:

  • El protoboard con el microcontrolador
  • 1 botón
  • 1 led
  • 1 resistencia de 220 Ohms (naranja, naranja, cafe)
  • 1 resistencia de 10 KOhms (cafe, negro, naranja)
  • Jumpers para la interconexión

Circuito

Los botones generalmente tienen un pin de entrada y un pin de salida.

El pin de entrada es el que estará conectado a una fuente de alimentación que le proporcionará un voltaje alto. En nuestros primeros proyectos utilizaremos la salida de voltaje que tiene nuestro microcontrolador como fuente de alimentación de nuestros botones.

El pin de salida es un pin que generalmente está a cero volts y cuando oprimimos el botón, cambia de estado, poniendose al mismo voltaje que el pin de entrada. Cuando oprimimos el botón, cerramos el circuito de este componente y tendremos que el voltaje de salida será igual al voltaje de entrada.

Esto nos presenta un problema que tenemos que resolver de algún modo. Si el pin de salida estuviese conectado a tierra, al oprimir el botón y cerrar su circuito, conectariamos directamente el voltaje de entrada a tierra, causando lo que se conoce como un corto circuito.

Si por otro lado, dejamos el pin de salida del botón sin conexión, sería un pin que estaría volando, sin una conexión fija y por lo tanto, sin un valor determinado de voltaje. En estas condiciones, nuestro pin de entrada del microcontrolador no podría saber exactamente que valor tiene el pin de nuestro sensor, ya que éste estaría cambiando aleatoriamente entre alto y bajo.

Para resolver este problema es que tenemos que usar lo que se conoce como una resistencia pull-down. Esta resistencia estará conectada entre el pin de salida de nuestro botón y tierra, de esta manera este pin estará conectado a tierra a través de la resistencia y así lo tendremos en un valor bajo fijo. Al oprimir el botón y cerrar su circuito, esta resistencia evitará el corto ciruito, ya que la corriente se irá hacia el pin del microcontrolador, donde no encontrará ninguna resistencia y con esto evitamos el corto circuito.

Todo esto también lo podemos ver en modo inverso. Nuestro pin de entrada del microcontrolador podría estar conectado a un voltaje alto, con lo que tendriamos en éste un voltaje positivo. Al conectar este pin a la entrada del botón y con la conexión de salida del botón conectada a tierra, al oprimir el botón cambiaría de estado y estaría al voltaje cero de la tierra. Como ya lo habrán podido deducir, esto produciría también un corto circuito, aquí lo que se utiliza entonces es una resistencia pull-up para evitar este corto circuito.

Los botones que tenemos en nuestro kit son botones con cuatro patas, pero en realidad solo son 2, ya que es una misma lámina la que forma las 2 patas de uno u otro lado del botón. Solo tenemos que tener cuidado en la orientación del mismo al conectarlo en el protoboard.

Esta es la imágen de nuestro circuito.

Diagrama

Este es el diagrama de nuestro circuito.

Código

Desde la ventana con el prompt del REPL en el Thony, podemos ver como funcionará el botón al oprimirlo, checando el estado del pin al que está conectado con los siguientes comandos:

Primero importamos la biblioteca machine, para poder trabajar con los pines de nuestro microcontrolador.

Despues definimos un objeto, pin_boton, que será el pin al que estará conectado el botón, en este caso usaremos el pin 15, que será un pin de entrada.

     import machine
     pin_boton = machine.Pin(15, machine.Pin.IN)

para checar el estado del pin usaremos la instrucción print(), con la que mandaremos a imprimir a la pantalla el valor del estado del pin de entrada donde tenemos conectado el botón:

     print(pin_boton.value())

si no tenemos oprimido el boton estará en un valor de voltaje 0 y nos imprimirá un 0. Si oprimimos el botón y mientras lo mantenemos oprimido, repetimos esta intrucción, nos imprimirá un 1, ya que el pin estará en un voltaje alto.

Resistencias pull-up y pull-down internas

Ya que las resistencias pull-up y pull-down son muy utilizadas, muchos de los nuevos microcontroladores, como los que estamos usando, ya tienen sus propias resistencias integradas en el microcontrolador para cada uno de los pines. Con estas resistencias internas ya no nos será necesario ponerle una resistencia pull-down a nuestros botones y el circuito quedará entonces así:

Y este será el nuevo diagrama

Ahora, para volver a checar el estado de nuestro pin, utilizando estas resistencias internas, tendremos que declarar nuestro objeto para el pin del botón de la siguiente forma:

 import machine
 pin_boton = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_DOWN)

de esta manera hemos declarado nuestro pin 15 como un pin de entrada al que le hemos habilitado la conexión a la correspondiente resistencia pull-down interna.

Vamos ahora a programar nuestro nuevo circuito con un script que escribiremos en la ventana de programación del Thonny, con este script podremos estar checando el estado de nuestro botón.

Para hacerlo, vamos a usar el comando if que nos permite checar una condición y ver si es verdadera o falsa y de acuerdo a este valor, realiazar ciertas acciones. En este caso checaremos el valor del pin de entrada conectado al botón y de ser positivo, igual a 1, imprimiremos un mensaje.

   import machine   # importamos la biblioteca machine
   import utime     # importamos la biblioteca utime para los tiempos

   pin_boton = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_DOWN)
     
   while True:      # iniciamos un loop infinito con un while
       if pin_boton.value() == 1:    # checa si el valor del pin es 1
           print('El boton ha sido presionado')   # imprime un mensaje
           utime.sleep(2)    # espera 2 sgs antes de volver a hacerlo 

Como podrás ver en el codigo del if, utilizamos el operador == para checar la igualdad. Hacerlo con el operador =, usando un solo simbolo = que es el operador para asignar un valor a una variable, es un error muy común de programación, que no siempre es fácil de encontrar.

Y también verás que despues de imprimir el mensaje hemos puesto a dormir al microcontrolador por unos segundos, de no hacerlo así, es tan rápida la ejecución del programa, que mientras mantenemos oprimido el botón, se enviarían una gran cantidad de mensajes.

Variantes

Ahora que ya vimos como checar el estado de un pin de entrada, en este caso un pin conectado a un botón, vamos a combinarlo con lo que vimos en la sesión anterior, con un actuador digital, un led.

Vamos a hacer un circuito en el cual tendremos conectados un botón de entrada y un led de salida.

Y lo vamos a programar para que cuando oprimamos el botón se encienda el led.

Circuito

Este es el circuito donde tendremos conectados el botón y el led:

Diagrama

Y este es el diagrama del circuito:

Código

El código será una combinación de los códigos anteriores.

Declararemos ambos objetos para el control del botón y del led.

Y en un ciclo infinito con un while, checaremos el estado del pin de entrada del botón.

Cuando este pin esté en alto, encenderemos el led y de no ser así, el led permanecerá apagado..

   import machine   # importamos la biblioteca machine
   import utime     # importamos la biblioteca utime para los tiempos

             # definimos el pin de salida del led
   pin_led = machine.Pin(15, machine.Pin.OUT) 
             # definimos el pin del boton con una resistencia pull_down
   pin_boton = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN) 
                        
   while True:      # iniciamos un loop infinito con un while
       if pin_boton == 1:    # checamos el estado del boton
           pin_led.value(1)  # si es verdadero encendemos el led
           utime.sleep(1)    # y esperamos un segundo 
   pin_led.value(0)          # apagamos el led
        

Referencias

El comando if nos permite verificar el valor, verdadero o falso, de una expresión.

Ésta puede ser por ejemplo el valor de una variable, el resultado de la comparacíon entre dos valores, el de una variable y una constante o entre dos variables y otro tipo de expresiones.

De ser cierta la expresión se ejecutará el código comprendido en la instrucción if

https://www.w3schools.com/python/python_conditions.asp

https://docs.python.org/2.7/reference/compound_stmts.html#the-if-statement

https://pythonexamples.org/python-if-example/

Deslizar arriba