Fotodiodo, Fototransistor y sensor IR con Arduino

Tabla de Contenidos

Descripción:

Fotodiodo, fototransistor y sensor IR con Arduino: Un fotodiodo es un dispositivo que, cuando es excitado por la luz, produce en el circuito un flujo de corriente proporcional (y medible). De esta manera, se pueden hacer que sirvan como sensores de luz, aunque, si bien es cierto que hay fotodiodos especialmente sensibles a la luz visible, la gran mayoría son especialmente en luz infrarroja.

Hay que tener en cuenta que, a pesar de tener un comportamiento en apariencia similar a los RDRs, una diferencia muy importante de estos (además de sensibilidad a otras longitudes de onda) es el tiempo de respuesta a los cambios de oscuridad a iluminación, y viceversa, que en los fotodiodos es mucho menor.

Al igual que los diodos estándar, los fotodiodos tienen un ánodo y un cátodo, Pero tenga cuidado, para que funcione como deseamos, un fotodiodo siempre debe conectarse al circuito en polaridad inversa. Por supuesto, al igual que con los diodos comunes, normalmente el ánodo es más largo que el cátodo (si son de igual longitud, el cátodo debe marcarse de alguna manera).

Su funcionamiento interno es el siguiente: cuando el fotodiodo está polarizado en directo, la luz que cae sobre él no tiene un efecto apreciable y, por lo tanto, ambos dispositivos se comportan como un diodo común. Cuando se polariza en reversa y no llega radiación de luz, también se comporta como un diodo normal, ya que los electrones que fluyen a través del circuito no tienen suficiente energía para atravesarlo, por lo que el circuito permanece abierto. Pero en el momento en que el fotodiodo recibe radiación de luz dentro de un rango de longitud de forma de onda, los electrones reciben suficiente energía para poder “saltar” la barrera de fotodiodo inversa y continuar su camino.

Ejemplo 1: cómo comprobar el comportamiento del fotodiodo

Para probar su comportamiento, podemos usar el circuito a continuación. Este circuito es idéntico al que vimos con los LDRS, reemplazándolos por un fotodiodo (que se identifica con un nuevo símbolo que no habíamos visto hasta ahora). El valor de su divisor de voltaje dependerá de la cantidad de luz (infrarroja) presente en el entorno: las resistencias más altas mejoran la sensibilidad cuando solo hay una fuente de luz y las resistencias más bajas la mejoran cuando hay muchas (el sol en sí o las lámparas son fuentes de infrarrojos); un valor de 100 KΩ puede estar bien para empezar. También notemos que es el cátodo del fotodiodo (el terminal más corto, recuerde) el que se conecta a la fuente de alimentación.

El funcionamiento de este circuito es el siguiente: mientras el fotodiodo no detecte luz infrarroja, a través de la entrada analógica de la placa Arduino (en este caso el número 0) se medirá una tensión de 0V porque el circuito actuará como un circuito abierto. A medida que aumenta la intensidad de la luz en el fotodiodo, aumentará el número de electrones que pasan a través de él (es decir, la intensidad de la corriente). Esto implica que, como la resistencia” desplegable ” es fija, por Ley de Ohm, la tensión medida en el pin de entrada analógica también aumentará, hasta un momento en el que al recibir mucha luz, el fotodiodo no causa casi ninguna resistencia al paso de los electrones y, por lo tanto, la placa Arduino lee una tensión máxima de 5 V.

Fotodiodo, fototransistor, sensor IR

Hemos agregado un LED conectado al pin de salida PWM # 5, como hicimos cuando vimos que los LDRs tenían una forma visible (juego de palabras) de detectar la incidencia de luz infrarroja en el fotodiodo. Como puede observar en el código utilizado (que se muestra a continuación), hemos hecho la intensidad de brillo del LED de la cantidad de luz infrarroja detectada por el fotodiodo: cuanta más radiación infrarroja reciba, más brillante será el LED.

Programación:

1
2
3
4
5
6
7
8
9
10
11
12

int photodiode_value;
int bright_LED;
void setup (void) {
Serial.comenzar(9600);
}
void loop(void) {
photodiode_value = analogRead(0);
Serial.println(photodiode_value);
bright_LED = map(photodiode_value, 0, 1023, 0, 255);
analogWrite(5, bright_LED);
retraso(100);
}

Programación explicación:

Primero de todo, Para recibir el fotodiodo valor que definir la variable de tipo entero

1
int photodiode_value;

Luego defino la variable de tipo entero para led de valor “Valor que se envía al LED”

1
int bright_LED;

En la función de bucle vacío, primero recibo el valor usando la función analogRead y almaceno estos valores en la variable photodiode_value y luego uso serial.println para imprimir valores en el monitor serial

1
2
3

photodiode_value = analogRead(0);
Serial.println (valor de fotodiodo);

El brillo de los LED es proporcional a la cantidad de luz infrarroja recibida

1
2
3

bright_LED = map(photodiode_value, 0, 1023, 0, 255);
analogWrite(5, bright_LED);

fototransistor:

Otro tipo de sensores de luz, además de los fotodiodos, se denominan fototransistores, es decir, transistores sensibles a la luz (también normalmente infrarrojos). Su funcionamiento es el siguiente: cuando la luz cae sobre su base, genera una corriente que lleva al transistor a un estado conductor. Por lo tanto, un fototransistor es igual a un transistor común con la única diferencia de que la corriente base Ib depende de la luz recibida. De hecho, hay fototransistores que pueden funcionar de ambas maneras: ya sea como fototransistores o como transistores comunes con un Ib de corriente base específico dado.

El fototransistor es mucho más sensible que el fotodiodo (debido al efecto de ganancia del propio transistor), ya que las corrientes que se pueden obtener con un fotodiodo son realmente limitadas. De hecho, se puede entender un fototransistor como una combinación de fotodiodo y amplificador, así que en realidad si quisiéramos construir un fototransistor casero, sería suficiente agregar a un transistor común un fotodiodo, conectando el cátodo del fotodiodo al colector del transistor y el ánodo a la base. En esta configuración, la corriente suministrada por el fotodiodo (que circularía hacia la base del transistor) se amplificaría β veces.

En muchos circuitos podemos encontrar un fototransistor a corta distancia de un LED emisor de infrarrojos de una longitud de onda compatible. Este par de componentes es útil para detectar la interposición de un obstáculo entre ellos (debido a la interrupción del haz de luz) y, por lo tanto, actuar como interruptores ópticos. Se pueden utilizar en multitud de aplicaciones, como en detectores del paso de una tarjeta de crédito (en un cajero automático) o la introducción del papel (en una impresora) o como tacómetros, entre muchas otras. Un tacómetro es un dispositivo que cuenta los giros por minuto realizados por un obstáculo sujeto a una rueda o cuchilla que gira (generalmente debido al funcionamiento de un motor); es decir, se utiliza para medir la velocidad de rotación de un objeto.

el fototransistor consiste en dos terminales correspondientes al ánodo y al cátodo del LED, y dos terminales correspondientes al colector y emisor de un fototransistor NPN. En general, desearemos conectar los terminales del LED a un circuito cerrado de alimentación continua (ánodo a fuente, cátodo a tierra), el terminal colector del interruptor fotográfico a una fuente de alimentación y el terminal emisor del interruptor fotográfico a una entrada digital de nuestra placa Arduino, para poder detectar así la aparición de corriente cuando se recibe iluminación. Por otro lado, tanto esta entrada de placa Arduino como el emisor deben conectarse a tierra a través de la misma resistencia desplegable, para obtener lecturas más estables (un valor típico de 10 KΩ puede funcionar, pero dependiendo del circuito puede necesitar valores más altos).

También podemos encontrar el par de fototransistores LED infrarrojos plus en algunos componentes llamados “optoacopladores”u ” optoisoladores”. La representación esquemática suele ser así:

 Fotodiodo, fototransistor, Sensor IR

En términos generales, un optoacoplador actúa como un circuito cerrado cuando la luz proviene del LED a la base del transistor y se abre cuando el LED está apagado. Su función principal es controlar y al mismo tiempo aislar dos partes de un circuito que normalmente funcionan a diferentes voltajes (al igual que lo haría un transistor común, pero de una manera algo más segura). Físicamente, generalmente son chips que ofrecen al menos cuatro pines (lo mismo que los interruptores de fotos): dos correspondientes a los terminales del LED y dos correspondientes al colector y emisor del fototransistor (aunque pueden tener un pin más correspondiente a la base si se permite controlar la intensidad que fluye a través de ella también de serie). Ejemplos de optoacopladores son el 4N35 o el CNY75, fabricados por varias empresas.

El par LED-fototransistor también es útil para detectar objetos ubicados a pequeñas distancias de él. Estudiaremos esto en la sección correspondiente a sensores de distancia.

Cómo hacer que el control remoto use un sensor IR:

Una utilidad práctica inmediata de un par emisor-receptor de infrarrojos (como un LED y un fotodiodo / fototransistor) ubicado a cierta distancia es el envío de “mensajes” entre ellos. Es decir, dado que la luz infrarroja no es visible (y por lo tanto, no “molesta”), se pueden emitir pulsos de cierta duración y / o frecuencia que se pueden recibir y procesar a varios metros de distancia sin que se note.”El dispositivo que los recibe debe programarse para realizar diferentes acciones dependiendo del tipo de lectura de pulso.

De hecho, cualquier dispositivo que funcione con un “mando a distancia” Funciona de manera similar porque en su parte frontal tengo que tener un sensor sensores infrarrojos (también llamados sensores “IR”, del inglés “infrarrojo”) que reciben las señales infrarrojas emitidas por el mando a distancia. Y lo que hay dentro de esto es básicamente un LED que emite pulsos de luz infrarroja siguiendo un cierto patrón que indica al dispositivo el orden que debe llevarse a cabo: hay un código de parpadeo para encender el televisor, otro para cambiar de canal, etc.

arriba hablamos de “sensores IR” y no de fotodiodos / fototransistores porque los primeros son algo más sofisticados. En concreto, los sensores IR no detectan ninguna luz infrarroja, sino solo la que (gracias a la incorporación de un filtro de paso de banda interno y un demodulador) está modulada por una onda portadora con una frecuencia de 38 kHz + 3 kHz. Esto básicamente significa que solo se leerán las señales cuya información es transportada por una forma de onda de 38 kHz. Esto es para evitar que los sensores IR se vuelvan “locos” cuando reciben la luz infrarroja que existe proveniente de todos los lados (sol, luz eléctrica.de esta manera solo responden a muy concreto ya estandarizado.

Otra diferencia con los fotodiodos / fototransistores es que los sensores IR ofrecen una respuesta binaria: si detectan una señal IR de 38 kHz, el valor que se puede leer de ellos en la mayoría de los casos es BAJO (0 V), y si no detectan nada, su lectura da un valor ALTO (5 V). Este comportamiento es lo que generalmente se llama ” Bajo activo “o” bajo activo”.

Ejemplos de sensores IR pueden ser TSOP32838 o el GP1UX311QS. Como características, las más destacadas tienen que su rango de sensibilidad se encuentra entre longitudes de onda de 800 nm a 1100 nm con una respuesta máxima a 940 nm y que necesitan alrededor de 5 V y 3 mA para funcionar.

El chip TSOP32838 ofrece tres pines: mirando hacia su parte posterior hemisférica, el pin más a la izquierda es la salida digital proporcionada por el sensor, el pin central debe estar conectado a tierra y el pin más a la derecha debe estar conectado a tierra. conecte a la fuente de alimentación (entre 2,5 V y 5,5 V).

Ejemplo2:

cómo encender el led con control remoto usando Arduino y, Sensor IR TSOP32838:

Para probar su funcionamiento, podríamos diseñar un circuito como el siguiente. El divisor de tensión para el LED puede estar entre 200 y 1000 ohmios.

 Fotodiodo, fototransistor, sensor IR

La idea es encender brevemente el LED cuando el sensor ir detecta una señal infrarroja. Pero ten cuidado, no solo cualquier señal infrarroja es válida, sino solo la modulada a 38 kHz. Por lo tanto, para probar este circuito, no podemos usar ningún LED infrarrojo: debemos usar un mando a distancia que tengamos a mano (desde un televisor, un reproductor de DVD, un ordenador, etc.).). Una vez cargado en la placa Arduino el boceto presentado a Continuación, si apuntamos ese control remoto al sensor IR y presionamos algunos de sus botones, deberíamos ver que el LED se ilumina. De esta manera, utilizaremos el sensor IR como si fuera un interruptor, que ilumina el LED mientras detecta esa señal y la apaga cuando ya no se detecta.

la salida del sensor está conectada a la entrada digital pin2 de la placa Arduino y el LED está conectado a su salida digital pin12):

Programación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

int irPin=2;
int ledPin=12;
void setup() {
pinMode(irPin,INPUT);
pinMode(ledPin,OUTPUT);
}
void loop() {
si(pulseIn(irPin,BAJO) > 0) {
delay(100);
digitalWrite(ledPin,HIGH);
retraso(200);
digitalWrite(ledPin,LOW);
}
}

Programación explicación:

Primero debo definir variable de tipo entero para IR sensor y led

1
2
3

int irPin=2;
int ledPin=12;

en función de configuración I conjunto de sensor de INFRARROJOS como entrada y led como salida

1
2
3

pinMode(irPin,INPUT);
pinMode(ledPin,OUTPUT);

Dado que la señal emitida por el sensor es normalmente ALTA, cuando el botón de un control remoto es presionado, los cambios a la BAJA. Lo que la función pulseIn() es pausar el boceto hasta que se detecte una señal BAJA, cuya duración no nos interesa realmente, pero lógicamente siempre será mayor que cero. Por lo tanto, si la condición del fi significa que se presionó un botón en un control remoto

1
if (pulseIn (irPin, BAJA) > 0) {

Es necesario esperar un tiempo determinado (que dependerá del modelo de control remoto específico) después de la detección de la primera señal BAJA, ya que cada pulsación de botón produce múltiples oscilaciones entre valores ALTOS y BAJOS. Aunque físicamente no tiene nada que ver, podemos entender esta espera como si fuera una forma de evitar un “rebote” (fenómeno estudiado cuando tratamos los botones pulsadores). Una vez transcurrido este tiempo de espera, la señal del sensor debería haber vuelto a su estado de reposo (valor ALTO).

1
retraso(100);

seguimos con el LED encendido durante unos milisegundos. Durante este tiempo, el croquis no podrá detectar otras pulsaciones de teclas procedentes del mando a distancia. También podríamos haber enviado un mensaje al” Monitor serie ” notificando la pulsación.

1
2
3
4
5
6
7
8
9

digitalWrite(ledPin,HIGH);
retraso(200);
digitalWrite(ledPin,LOW);
}
}

Ejemplo3:

cómo recibir el comando de control remoto en el monitor serie utilizando el sensor IR TSOP32838 con Arduino:

En primer lugar, descargue la biblioteca requerida para el sensor IR

Biblioteca irremotable de Arduino

Diagrama de circuito:

Fotodiodo, fototransistor, Sensor IR

Programación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

#include <IRremote.h>
int receiverPin = 11;
IRrecv irrecv(receiverPin);
decode_results results;
void setup(){
Serial.comenzar(9600);
irrecv.Enableirina();
}
void loop() {
if (irrecv.decodificación (& resultados)!=0) {
if (resultados.decode_type = = NEC) {
Serial.impresión (“NEC: “);
} si no (resultados.decode_type = = SONY) {
Serial.imprimir (“SONY: “);
} si no (resultados.decode_type = = RC5) {
Serial.impresión (“RC5: “);
} si no (resultados.decode_type = = RC6) {
Serial.impresión (“RC6: “);
} si no (resultados.decode_type = = UNKNOWN) {
Serial.print(“Desconocido: “);
}
Serial.println (results.valor, hexadecimal);
irrecv.curriculum vitae();
}
}

Programación explicación:

en Primer lugar, he de importación de la biblioteca requiere

1
#include <IRremote.h>

Luego defino digital pin de entrada para el receptor

1
int receiverPin = 11;

Entonces puedo crear un objeto llamado “irrecv” de tipo IRrecv

1
IRrecv irrecv(receiverPin);

a Continuación, declaro una variable de un tipo especial, “decode_results”.

1
decode_results resultados;

Luego me pongo el receptor anulará la función de paso de

1
irrecv.enableIRIn();

Luego, en el bucle vacío, miro para ver si se ha detectado algún patrón IR modulado. Si es así, lo leo y lo guardo completamente en la variable especial “resultados”, en forma de número hexadecimal

1
if (irrecv.decodificación (& resultados)!=0) {

Luego miro a qué tipo de patrón comercial es, si es de uno reconocido por la biblioteca

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

si (los resultados.decode_type = = NEC) {
Serial.impresión (“NEC:”);
} else if (resultados.decode_type = = SONY) {
Serial.imprimir (“SONY: “);
} si no (resultados.decode_type = = RC5) {
Serial.impresión (“RC5: “);
} si no (resultados.decode_type = = RC6) {
Serial.impresión (“RC6: “);
} si no (resultados.decode_type = = UNKNOWN) {
Serial.print(“Desconocido: “);
}

Y, a continuación, muestro el recibido patrón (en formato hexadecimal) en la serie de canal

1
Serial.println (results.valor, HEX);

una Vez que el patrón ha sido descifrada, reactivar la escucha para detectar la posible siguiente patrón

1
2
3

irrecv.reanudar();
}

Ejemplo 4:

cómo hacer el control remoto usando el sensor IR TSOP32838 con Arduino:

En primer lugar, descargue la biblioteca requerida para el sensor IR

Biblioteca irremotora Arduino

Use el mismo circuito que usé en el proyecto anterior

Diagrama de circuito:

Fotodiodo, fototransistor, Sensor IR

Programación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

#include <IRremote.h>
int receiverPin = 11;
IRrecv irrecv(receiverPin);
decode_results resultados;
void setup(){
Serial.comenzar(9600);
irrecv.enableIRIn();
}
void loop(){
int i;
si (irrecv.decodificación (& resultados)!=0) {
action ();
for (i = 0; i< 2; i++) {
irrecv.curriculum vitae();
}
}
}
void action() {
switch(los resultados.value) {
case 0x37EE: Serial.println(“Favorites”); break;
case 0xA90: Serial.println(“On/off”); break;
case 0x290: Serial.println(“Mute”); break;
case 0x10: Serial.println(“1”); break;
case 0x810: Serial.println(“2”); break;
case 0x410: Serial.println(“3”); break;
case 0xC10: Serial.println(“4”); break;
case 0x210: Serial.println(“5”); break;
case 0xA10: Serial.println(“6”); break;
case 0x610: Serial.println(“7”); break;
case 0xE10: Serial.println(“8”); break;
case 0x110: Serial.println(“9”); break;
case 0x910: Serial.println(“0”); break;
case 0x490: Serial.println(“Increase volume”); break;
case 0xC90: Serial.println(“Decrease volume”); break;
case 0x90: Serial.println(“Increase channel”); break;
case 0x890: Serial.println(“Decrease channel”); break;
default: Serial.println(“Other button”);
}
delay(500);
}

Leave a Reply