Con el fin de poder leer un sensor infrarrojo del tipo diodo (aunque realmente es un transistor con una base fotosensible) de manera digital, se realizará el siguiente montaje que utiliza un amplificador operacional:

Funcionamiento
El amplificador operacional compara el voltaje analógico que establece el sensor infrarrojo con un voltaje configurable mediante el potenciómetro de 4,7Mohms.
Cuando el voltaje fijado por el sensor es mayor que el fijado por el potenciómetro, el amplificador operadional pone a su salida un 1 lógico (5V).
Cuando el voltaje fijado por el pontenciómetro es mayor que el del sensor, el amplificador operacional pone a su salida un 0 lógico (0V).
Base teórica
El circuito del sensor (a la izquierda) se comporta exáctamente igual que el circuito para la lectura analógica, mientras que el potenciómetro permite configurar un potencial con el que comparar.
En el diagrama se muestra un potenciómetro de 3 patas, esto es, en el terminal intermedio se dispone del valor y potencial configurados, mientras que entre los terminales de los extremos se dispone de toda la resistencia y la totalidad de diferencia de potencial.
Como se puede observar, el potenciómetro es de 4,7Mohms. Mejor cuanto mayor sea el valor, ya que sólo nos importa el potencial en el punto configurado y con una resistencia muy grande evitaremos gastar batería porque circulará menos corriente (punto importante si estamos alimentando todo el rato el potenciómetro).
Para el potenciómetro se han utilizado 3 voltios (en realidad 3,3V del Arduino). Esto permite afinar más el voltaje seleccionado con el potenciómetro, ya que el sensor infrarrojo no va a dar más de 2,5 voltios de diferencia de potencial al ser estimulado por un emisor infrarrojo (por una llama sí) y se desperdiciaría rango de configuración si se usasen 5 voltios.
Código
El siguiente código simplemente escribe en el puerto digital 13 el valor leído en el puerto digital 2.
|
<strong>void setup() {</strong> <span style="color: #993300;"> pinMode</span>(<span style="color: #3366ff;">2</span>,<strong>INPUT</strong>); <span style="color: #993300;"> pinMode</span>(<span style="color: #3366ff;">13</span>,<strong>OUTPUT</strong>); <strong>} </strong> <strong>void loop() {</strong> <span style="color: #993300;"> digitalWrite</span>(<span style="color: #3366ff;">13</span>,<span style="color: #993300;">digitalRead</span>(<span style="color: #3366ff;">2</span>)) ; <strong>}</strong> |
(Código no probado)