martes, 11 de junio de 2013

PROGRAMANDO LED


OBJETIVOS
  • Crear un programa Shell que encienda un LED, introducido por el usuario, mediante sysfs.
  • Crear un programa Shell que apague un LED, introducido por el usuario,  mediante sysfs.
  • Crear un programa Shell que encienda un LED, introducido por el usuario,  mediante el comando gpio de la librería WiringPi.
  • Crear un programa Shell que apague un LED, introducido por el usuario,  mediante el comando gpio de la librería WiringPi.
  • Crear un programa en C que encienda un LED, introducido por el usuario,  mediante la librería WiringPi.
  • Crear un programa en C que apague un LED, introducido por el usuario,  mediante la librería WiringPi.
CONSTRUCCIÓN DEL CIRCUITO
Para construir el circuito, se va a montar primero el circuito con el pin que da voltaje de manera continua  de 3.3v  (PIN 1), de esta modo, cuando luzca el led, se tendrá la certeza de que el circuito está bien montado y por tanto, sólo habrá que cambiar el cable que está conectado del pin 1 al pin que se desee programar.
Debido al excesivo voltaje suministrado por el pin, será necesario incorporar una resistencia, en caso contrario se fundiría. Para determinar el valor de la resistencia, se debe tener en cuenta la “Ley de Ohm” que relaciona voltaje, intensidad y resistencia. La Ley de Ohm dice que el voltaje que circula en un circuito cerrado es directamente proporcional a la intensidad que lo atraviesa y la resistencia del material.</
>
Según la fuente consultada, los valores de voltajes de los LED varían y finalmente se ha tomado como referencia la tabla de valores de Wikipedia.
LED
VOLTAJE
Rojo
 1,8 a 2,2 voltios.
Anaranjado
 2,1 a 2,2 voltios.
Amarillo
2,1 a 2,4 voltios.
Verde
 2 a 3,5 voltios.
Azul
3,5 a 3,8 voltios.
Blanco
 3,6 voltios.
El Circuito que se va a utilizar en los ejemplos es bastante sencillo,  con un único LED. En este circuito intervendrán el pin 1 de 3.3v, el pin 6 Tierra (GND), el led y una resistencia de 220 o 330 Ω. Especialmente importante  será conectar bien el LED ya que en caso contrario no lucirá, para ello, la corriente deberá entrar por la parte más larga (línea de pin 1) y salir por la pata más corta (línea tierra).
Una vez ya comprobado el correcto funcionamiento del circuito, quitaremos el extremo del cable que está conectado al pin de 3.3 v y se conectará a uno de los pines programables.
El algoritmo para encender un led es bastante sencillo. Una vez construido el circuito, al poner un pin programable de tipo output o salida a 1, este genera corriente continua y por tanto se enciende el led, y cuando está a 0 no, no encendiéndose el led en este caso.
Programa enciendeLEDsysfs.sh
 
##!/bin/bash
#################################################################
##                                                             ##
## enciendeLEDsysfs.sh                                         ##
##                                                             ##
## Este script enciende el led que indica el usuario           ##
## mediante sysfs                                              ##
##                                                             ##
## Autor: M.Alvarez (miguelwarez@gmail.com) 2013               ##
## Más ejemplos en http://rpiplus.sourceforge.net              ##
##                                                             ##
## License GPLv3 http://www.gnu.org/licenses/gpl-3.0.html      ##
##                                                             ##
## Para ejecutar hay que ser root (sudo su) y escribir         ##
## ./enciendeLEDsysfs.sh                                       ##
##                                                             ##
#################################################################
#obtener led a encender
read -p "Introduce el led que deseas encender siguiendo la numeracion BCM" LED
echo "Encendiendo el LED $LED"
#comprobar que el led no se esta utilizando
if [ -e /sys/class/gpio/gpio$LED ]
then
      TIPO=`cat /sys/class/gpio/gpio$LED/direction`
      echo "Esta siendo utilizado el pin en una operacion $TIPO"
      VALOR=`cat /sys/class/gpio/gpio$LED/value`
      echo "El valor actual del pin es $VALOR"
      exit
fi
#encender el led
`echo $LED >/sys/class/gpio/export`
`echo out >/sys/class/gpio/gpio$LED/direction`
`echo 1 >/sys/class/gpio/gpio$LED/value`
`echo $LED >/sys/class/gpio/unexport`
Programa apagaLEDsysfs.sh
 
#!/bin/bash
#################################################################
##                                                             ##
## apagaLEDsysfs.sh                                            ##
##                                                             ##
## Este script apaga el led que indica el usuario              ##
## mediante sysfs                                              ##
##                                                             ##
## Autor: M.Alvarez (miguelwarez@gmail.com) 2013               ##
## Más ejemplos en http://rpiplus.sourceforge.net              ##
##                                                             ##
## License GPLv3 http://www.gnu.org/licenses/gpl-3.0.html      ##
##                                                             ##
## Para ejecutar hay que ser root (sudo su) y ejecutar         ##
## ./apagaLEDsysfs                                             ##
##                                                             ##
#################################################################
#obtener led a encender
read -p "Introduce el led que deseas encender segun numeracion BCM " LED
echo "Apagando el LED $LED"
#comprobar que el led se esta utilizando
if [ -e /sys/class/gpio/gpio$LED ]
then
        TIPO=`cat /sys/class/gpio/gpio$LED/direction`
        echo "Esta siendo utilizado el pin en una operacion $TIPO"
        VALOR=`cat /sys/class/gpio/gpio$LED/value`
        echo "El valor actual del pin es $VALOR"
        exit
fi
#apagar el led
`echo $LED >/sys/class/gpio/export`
`echo out >/sys/class/gpio/gpio$LED/direction`
`echo 0 >/sys/class/gpio/gpio$LED/value`
`echo $LED >/sys/class/gpio/unexport`
Programa enciendeLEDgpio.sh
 
#!/bin/bash
#################################################################
##                                                             ##
## enciendeLEDgpio.sh                                          ##
##                                                             ##
## Este script enciende el led que indica el usuario           ##
## mediante el comando gpio facilitado por la libreria         ##
## wiring PI                                                   ##
##                                                             ##
## Autor: M.Alvarez (miguelwarez@gmail.com) 2013               ##
## Más ejemplos en http://rpiplus.sourceforge.net              ##
##                                                             ##
## License GPLv3 http://www.gnu.org/licenses/gpl-3.0.html      ##
##                                                             ##
## Para ejecutar ./enciendeLEDgpio.sh                          ##
##                                                             ##
#################################################################
#obtener led a encender
read -p "Introduce el led que deseas encender siguiendo la numeracion BCM " LED
echo "Encendiendo el LED $LED"
#comprobar que el led no estuviera encendido
READ=`gpio -g  read $LED`
if [ $READ -eq 1 ]
then
      echo "El LED ya estaba encendido"
else
      gpio -g mode $LED out
      gpio -g write $LED 1
fi
Programa apagaLEDgpio.sh
 
#!/bin/bash
#################################################################
##                                                             ##
## apagaLEDgpio.sh                                             ##
##                                                             ##
## Este script apaga el led que indica el usuario              ##
## mediante el comando gpio facilitado por la libreria         ##
## wiring PI                                                   ##
##                                                             ##
## Autor: M.Alvarez (miguelwarez@gmail.com) 2013               ##
## Más ejemplos en http://rpiplus.sourceforge.net              ##
##                                                             ##
## License GPLv3 http://www.gnu.org/licenses/gpl-3.0.html      ##
##                                                             ##
## Para ejecutar ./apagaLEDgpio.sh                             ##
##                                                             ##
#################################################################
#obtener led a encender
read -p "Introduce el led que deseas apagar siguiendo la numeracion BCM " LED
echo "Apagando el LED $LED"
#comprobar que el led no estuviera encendido
READ=`gpio -g  read $LED`
if [ $READ -eq 0 ]
then
      echo "El LED ya estaba apagado"
else
      gpio -g write $LED 0
fi
Programa enciendeLED.c
 
/****************************************************************
**                                                             **
** enciendeLED.c                                               **
**                                                             **
** Este programa enciende el led que indica el usuario         **
** mediante la libreria Wiring Pi. Para la ejecución del       **
** es necesario que sea ejecutado como root                    **
**                                                             **
** Autor: M.Alvarez (miguelwarez@gmail.com) 2013               **
** Más ejemplos en http://rpiplus.sourceforge.net              **
**                                                             **
** License GPLv3 http://www.gnu.org/licenses/gpl-3.0.html      **
**                                                             **
** Para compilar:                                              **
** gcc -o enciendeLED -l wiringPi enciendeLED.c                **
**                                                             **
** Para ejecutar:                                              **
** sudo ./enciendeLED                                          **
**                                                             **
****************************************************************/
#include <wiringPi.h>
#include<stdio.h>
main(){
      int led;
      printf("Introduce el led que deseas encender\n");
      scanf("%d",&led);
      printf("Encendiendo el led %d\n",led);
      if (wiringPiSetupGpio() == -1){
            perror("Error de inicializacion\n");
            exit (1) ;
      }
      pinMode (led, OUTPUT) ;
      if(digitalRead(led)!=0)
            printf("El led ya estaba encendido\n");
      else
            digitalWrite(led,1);
}
PROGRAMA apagaLED.c
 
/****************************************************************
**                                                             **
** apagaLED.c                                                  **
**                                                             **
** Este programa apaga el led que indica el usuario            **
** mediante la libreria Wiring Pi. Para ello es necesario      **
** que sea ejecutada con una cuenta root                       **
**                                                             **
** Autor: M.Alvarez (miguelwarez@gmail.com) 2013               **
** Más ejemplos en http://rpiplus.sourceforge.net              **
**                                                             **
** License GPLv3 http://www.gnu.org/licenses/gpl-3.0.html      **
**                                                             **
** Para compilar:                                              **
** gcc -o apagaLED -l wiringPi apagaLED.c                      **
**                                                             **
** Para ejecutar:                                              **
** sudo ./apagaLED                                             **
**                                                             **
****************************************************************/
#include <wiringPi.h>
#include<stdio.h>
main(){
      int led;
      printf("Introduce el led que deseas apagar\n");
      scanf("%d",&led);
      printf("Apagando el led %d\n",led);
      if (wiringPiSetupGpio() == -1){
            perror("Error de inicializacion\n");
            exit (1) ;
      }
      pinMode (led, OUTPUT) ;
      if(digitalRead(led)!=1)
            printf("El led ya estaba apagado\n");
      else
            digitalWrite(led,0);
}

No hay comentarios:

Publicar un comentario