Después de hacer algunas pruebas con el microcontrolador 16f628A y los LDR, he llegado a la conclusión de que la mejor manera de hacer una comparación entre dos LDR o al menos la que me ha funcionado a mi es la siguiente configuración con la que solo añadiendo unos condensadores cerámicos extra que hacen que señal no tenga tanto "ruido":
Eston condensadores son de tipo ceramico, los que tienen forma de lenteja, con un valor 0.1uF.
Programa PBP para comparar dos fotoresistencias LDR
Para probar este circuito con los sensores podemos hacer un programa en PBP con el que encender y apagar LED conectado en el Portb.0 con 2 sensores LDR conectados en los puertos Portb.1 y Portb.2.
La instrucción POT
Esta instrucción es específica del lenguaje PBP y se usa para leer valores analógicos de un pin del microcontrolador.
Una de las particularidades de POT es que solo necesita un pin digital para que funcione. No importa si es un pin de tipo analógico o no.
POT
| Parte | Valor | Explicación |
|---|---|---|
| Comando | POT | Instrucción de PIC Basic Pro para leer un valor analógico (potenciómetro, LDR, etc.). |
| Pin | ldr1 | Variable que define el pin RB1 del microcontrolador PIC. Es donde está conectado el sensor LDR. |
| Escala máxima | 255 | Valor máximo de la escala. El resultado estará entre 0 y 255 (8 bits). Es el valor máximo de un BYTE. |
| Destino | b0 | Variable BYTE donde se guarda el valor convertido. Puede ser de 0 (mínimo) a 255 (máximo). |
POT lee el voltaje analógico del pin ldr1, lo convierte a un número de 0 a 1023 (ADC de 10 bits) y luego lo reescala proporcionalmente al rango 0-255, guardándolo en b0.
Declaración de pines y variables:
- Asignamos el pin RB0 para controlar un LED.
- Asignamos los pines RB1 y RB2 para leer los dos sensores de luz (LDR).
- Creamos tres variables (b0, b1, b2) para almacenar números.
Bucle principal Inicio:
- Lee el valor del primer LDR y lo guarda en b0 (rango 0-255).
- Lee el valor del segundo LDR y lo guarda en b1 (rango 0-255).
Primera comparación:
- Si b0 es igual a b1 → el LED se enciende (ledon).
- Si b0 es diferente a b1 → se va a la subrutina apaga.
Subrutina apaga:
Calcula la diferencia absoluta entre b0 y b1, guardándola en b2.
- Si esa diferencia es mayor que 15 → apaga el LED (ledoff).
- Si la diferencia es menor o igual a 15 → enciende el LED (ledon).
Subrutina ledon:
- Pone el pin del LED a nivel ALTO (enciende el LED).
- Vuelve al bucle principal para seguir leyendo los sensores.
Subrutina ledoff:
- Pone el pin del LED a nivel BAJO (apaga el LED).
- Vuelve al bucle principal para seguir leyendo los sensores.
Y ahora el programa completo en PBP:
led var Portb.0 ; // Llamamos led al puerto B0
ldr1 var Portb.1 ; // Llamamos ldr1 al puerto B1
ldr2 var Portb.2 ; // Llamamos ldr2 al puerto B2
b0 var BYTE
b1 var BYTE
b2 var BYTE
Inicio:
POT ldr1, 255, b0
POT ldr2, 255, b1
if b0 = b1 then ledon ; // Si b0 es = a b1 ir a ledon
if b0 > b1 then apaga ; // Si b0 es mayor que b1 ir a apaga
if b1 > b0 then apaga ; // Si b1 es mayor que b0 ir a apaga
ledon:
high led ;Enciende el led
goto inicio ; // Vuelve al inicio
apaga:
if b0 > b1 then ; Si b0 es mayor
b2 = b0 - b1
else ; Si b1 es mayor o igual
b2 = b1 - b0
endif
if b2 > 15 then ledoff
goto ledon
ledoff:
low led ; // Apaga el puerto B2 (led apagado)
goto inicio ; // Vuelve al inicio
end ; // Fin del programa
Bueno espero que a la gente como yo, un recién llegado a esto de los microcontroladores, esta información les pueda hacer un poco más sencilla la implementación de sensores LDR con los microcontroladores PIC!
Saludos a todos y todas!!!
Los siguientes enlaces sobre microcontroladores te pueden interesar:


No hay comentarios :
Publicar un comentario