Select Page

El dispositivo CNY70 es un sensor óptico infrarrojo, de un rango de corto alcance (menos de 5 cm) que se utiliza para detectar colores de objetos Lds y superficies. Su uso más común es para construir pequeños robots seguidores de línea. Contiene un emisor de luz infrarroja -fotodiodo- y un receptor -fototransistor-. El fotodiodo emite un haz de radiación infrarroja, el fototransistor recibe ese haz de luz cuando se refleja sobre alguna superficie u objeto.

Dependiendo de la cantidad de luz recibida por el fototransistor el dispositivo envía una señal de retorno a Arduino.

El sensor CNY70 Puede utilizarse como entrada digital o analógica. . Cuando el sensor está orientado hacia una superficie u objeto de color negro éste absorbe gran parte de la luz emitida  por el diodo. Entonces el sensor enviará un valor alto (HIGH – 1) a Arduino. A su vez cuando el sensor se sitúa sobre una superficie u objeto de color blanco gran parte de la luz emitida por el diodo será reflejada al fototransistor.

Entonces, el sensor enviará un valor alto (LOW- 0) a Arduino.

Características Técnicas CNY70

  • Alimentación: 5v.
  • Consumo: 1mA.
  • Longitud de onda del emisor: 960 nm 
  • Tamaño:  (L x W x H in mm): 7mm x 7mm x 6mm.
  • Distancia de sensado: 0.3 a 5mm
  • Intensidad del diodo emisor Iak=50mA.
  • Intensidad de colector Ic=50mA.
  • Tensión colector emisor Ice=32V
  • Tensión emisor colector Vec=7V.
  • Consumo aproximado de 200mW.

PinOut CNY70

Sensor Óptico Infrarrojo CNY70 2

Cálculo de Resistencias

Para sacarle el máximo jugo al sensor debemos hacer que el haz de luz llegue lo más lejos posible y depende de la corriente que se le suministre al diodo LED emisor. Por ejemplo, para tener la máxima distancia de detección posible, se requiere que al led se le proporcione una corriente de 20mA según la hoja de datos del cny70.

Para calcular la resistecía del led de acuerdo a este valor, se usa la Ley de ohm. Entonces la formula que aplica es la siguiente:

Corriente CNY70, I = V/R

Es decir que la corriente depende de la razón del voltaje y la resistencia.

Si queremos calcular la resistencia para obtener 20mA, entonces despejamos de la primera ecuación.

R = V/I  = (5V – 1.25V)/20mA = 187.5 Ohms.

El voltaje de 1.25V es el voltaje de caída del diodo emisor. Este valor depende de cada CNY70 y según la hoja de datos, puede ir desde 1.25V hasta 1.6V. Entonces para el sensor que use de prueba resulto ser de 1.25V. El valor comercial más cercano es 180 Ohms o 200 Ohms.

Con 180R, tendremos:   Corriente(I) = (5V-1.25V)/180 = 20.83mA.

Y también con 200 Ohms, tendremos:  Corriente = (5V-1.25V)/200 = 18.75mA.

Lo recomendable es usar una resistencia de 180Ohms si queremos obtener la máxima distancia de reflexión.

Conexión CNY70 con Arduino

Para usar el CNY70 con Arduino, podemos hacerlo funcionar de dos formas: digitalmente (0,1) para distancias de 0 a 10mm. Y la segunda forma es con una entrada analógica y midiendo la señal que proporciona el sensor dependiendo de la situación que se desee.

Sensor Óptico Infrarrojo CNY70 3

Productos Necesarios para la Utilización

Arduino Uno

Sensor CNY70

Código de Programación CNY70

int pinReceptor = A0; //Establecemos el pin a leer
int sensorVal; //Declaramos una variable para almacenar el valor de la lectura

void setup(){
Serial.begin(9600); // Abrimos comunicación Serial
}

void loop(){
sensorVal = analogRead(pinReceptor); //Guardamos la lectura del pin Analógico
Serial.println(sensorVal); //Sacamos la lectura por serial
delay(500);  //Pequeña pausa de medio segundo
}

Links

Datasheet.

CNY70 SEGUIDOR DE LINEA CON ARDUINO 

El siguiente código es una modificación del código anterior. Para este caso se utilizaron dos variables para calibrar la referencia, se requiere el valor de la lectura cuando no hay superficie (20) y el valor cuando se detecta la linea negra (100),  estos son valores cercanos a la imagen anterior.

A través de estructuras de control se detectan tres rangos de valores y se determina si existe o no una linea, si esto se hace muy rápido se puede tomar decisiones para mover al robot hacia la izquierda o derecha.

unsigned int referenciaBlanco = 100;
unsigned int referenciaSinSuperficie = 20;
unsigned int lecturaCNY70 = 0;

void setup() {
  Serial.begin(9600); //Configuracion de la velocidad serial

}

void loop() {
  lecturaCNY70 = analogRead(A0);

  if((lecturaCNY70 >= 0) && (lecturaCNY70 <= referenciaSinSuperficie )) {
    Serial.println("Sin Superficie");
  }
  else if((lecturaCNY70 > referenciaSinSuperficie) && (lecturaCNY70 < referenciaBlanco )) {
    Serial.println("Linea Negra");
    
  }
  else if(lecturaCNY70 >= referenciaBlanco){
    Serial.println("Superficie Blanca");
  }
  //Serial.print("Lectura: ");
  //Serial.println(lecturaCNY70); //Imprime el valor de la lectura del canal A0
  delay(1000); //retardo de 2 segundos entre lectura
}
A %d blogueros les gusta esto: