En la imagen, con el array de Leds UV activo, podemos ver la disposición hexagonal de los leds (60) en primer plano y, detrás, el temporizador, pudiendo observar los dos condensadores (izda), el circuito integrado 555 (centro) y el relé (dcha) que conecta la tensión de 12Vcc.
Pero con un rotulador indeleble no puedes ambicionar fabricarte circuitos impresos de precisión y con acabado profesional. A lo mucho que puedes aspirar es a diseñar unas placas como las que hice para la insoladora en donde los componentes están suficientemente espaciados y las pistas pueden ser de un grosor aceptable y espaciadas suficientemente.
El temporizador lo he diseñado con dos escalas de tiempo y con ciertas posibilidades de calibración. Las dos escalas de tiempo permitían unos rangos de temporización teóricos de a) 1 a 5 minutos y de b) 2 a 20 minutos, más o menos. Pero ¿cómo podía saber con exactitud los rangos reales y calibrarlos a valores próximos a los teóricos? Pues, muy sencillo: utilizando las posibilidades de la Raspberry, que me permite leer el estado de unas entradas digitales, la de ciertos pines del conector de expansión de 2x13 pines. Y eso es lo que hice.
Consideraciones
El array de leds está alimentado a 12Vcc, voltaje que es proporcionado por el cierre de una salida del relé del temporizador. Teniendo en cuenta esto, haremos un montaje teórico con Fritzing, sustituyendo la salida del relé por un pulsador. En el montaje real, utilizaremos la salida del relé.Descripción del circuito
- el pin 18 (GPIO24) como entrada.
- el pin 22 (GPIO25) como salida.
La tensión que le llega a la entrada GPIO24 la vamos a reducir mediante un divisor de tensión. Hemos de tener en cuenta que lo que queremos comprobar es la presencia, o no, de una tensión de 12Vcc, y los pines del conector del Raspberry trabajan a 3,3Vcc. No es conveniente, por tanto, que superemos esta tensión. Por tanto, el divisor de tensión estará formado por dos resistencias en serie. Por un extremo conectaremos 12Vcc (el pulsador), el otro extremos lo pondremos a tierra; y el punto de unión de las dos resistencias será la que conectaremos al pin 18 (GPIO24) de la Raspberry.
+12Vcc <=====> 10k ohms <=== pin 18 RaspPi ===>; 2k2 ohms <=====> GND
(12Vcc-2Vcc)/20mA = 500 ohms
, pero pongo una de 1k ohms al no tener ni los 500 ohms que me resulta en el cálculo ni el valor comercial de 560 ohms. He puesto la más próxima que tenía con un valor por encima de los 560. No puedo poner un valor menor, pues superaríamos los 20mA máximos que admite el diodo y nos lo fundiríamos.
¡¡¡¡ATENCIÓN!!! A la hora de montar el divisor de tensión habrá que extremar las precauciones. Yo me he cargado una entrada del Raspberry Pi. Afortunadamente cuento con otras para probar el montaje.
Hasta aquí el diseño de entrada. Vamos a repetir la entrada del pin 18 replicando su valor en la salida del pin 22, también mediante un Led, serializado con una resistencia, que irá replicando el estado del otro Led, como resultado de la lectura que se haga con un programa. El cálculo de la resistencia a serializar es similar a los cálculos anteriores, cambiando la tensión que actuará sobre el Led+resistencia: (3,3Vcc-2Vcc)/20mA = 65 ohms
, valor no comercial, pero pondremos el valor superior más próximo a este valor, resultando ser 75 ohms. En el esquema teórico aparece 220 ohms que también es válido, aunque el Led lucirá menos, pero se encenderá.Programa de comprobación
Podemos hacer una comprobación del funcionamiento de los dos pines mediante la utilidad gpio. En Controlando un relé con una salida del conector GPIO del Raspberry Pi se muestra el modo de instalar esta utilidad, utilidad que viene incluida en la libreria WiringPi.Lo primero que haremos será definir los dos pines, por lo que ejecutaremos:
gpio -g mode 25 out gpio -g mode 24 in
gpio -g write 25 1 gpio -g write 25 0
gpio mode 22 out gpio mode 18 in gpio write 22 1 gpio write 22 0
gpio -g read 24 gpio read 18
from datetime import datetime import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(18, GPIO.IN) GPIO.setup(22, GPIO.OUT) state = 0 st = datetime.now() while True: # state toggle button is pressed if ( GPIO.input(18) == True ): if (state == 0): st = datetime.now() state = 1 GPIO.output(22, GPIO.HIGH) print "START: ", st.strftime("%H:%M:%S") if ( GPIO.input(18) == False): if (state == 1): state = 0 GPIO.output(22, GPIO.LOW) st2 = datetime.now() print "STOP: ",st2.strftime("%H:%M:%S"), (st2-st)
En la siguiente imagen podemos observar el programa funcionando, mostrando los tiempos de inicio y final del temporizador, en las dos escalas implementadas.
Con este programa podemos ir ajustando un potenciómetro interior, y así ir calibrando el tiempo mínimo de una de las escalas con las que cuenta el temporizador. Para ajustar exactamente los tiempos de las dos escalas, mínimo y máximo, tendría que modificar el diseño e incluir más potenciómetros. Pero así me es suficiente para insolar una placa fotosensible, ya que estamos hablando de tiempos de insolación de alrededor de 3 minutos, valor que está dentro del rango de la escala pequeña.
En la siguiente imagen podemos ver el montaje funcionando.
Y eso es todo. Como ya he dicho, en cuanto pueda publicaré un par de artículos sobre la insoladora y sobre el temporizador, incluyendo los resultados de las pruebas realizadas.
Enlaces
- WiringPi- raspberry-gpio-python
- Librería RPi.GPIO 0.5.4
- LED calculator for single LEDs
- timertest.py
- Controlando un relé con una salida del conector GPIO del Raspberry Pi
No hay comentarios:
Publicar un comentario