Sensores


CNY70 y BUMPERS


 

Introducción y funcionamiento:

Gracias al conjunto de led-fototransistor CNY70 (Ver su datasheet: cny70.pdf) podremos detectar niveles de luz midiendo el reflejo sobre una superficie ( a unos pocos milímetros de ella).

Los finales de carrera (bumpers) le permitirán al robot detectar objetos cuando choquen contra ellos y el conmutador se active.

Estos datos analógicos debemos convertirlos a señales digitales (0V / 5V) antes de enviarlos a Arduino. Para ello vamos a construir una placa PCB que albergue los materiales necesarios.

En nuestro caso usaremos un CI trigger schimtt, que nos depurará la señal para evitar ruido no deseado. (Ojea el datasheetdatasheet trigger schimtt.pdf)

Así que usaremos 3 CNY (2 para seguir una linea y el 3º para usar un encoder que vaya vigilando las vueltas que dan las ruedas y por tanto nos indique la distancia que ha recorrido), y 2 bumpers situados en los laterales del robot para detectar choques.

 

 

Materiales:

 

Esquema del circuito:

 

 

Construcción:

Creamos una placa usando el software RealPCB:

Pincha para descargar el fichero RealPCB: CNYv3.0.pcb

 

Una vez creada la placa, y soldados los componentes quedará algo parecido a esto:

 

Las entradas (2 finales de carrera y 3 CNYs) están en la parte superior de la PCB y las salidas en la inferior. La alimentacióin de la placa se hace desde la Arduino con 5v 

 

Una vez finalizada la conectamos a Arduino:

 

Video Demo:

YouTube plugin error

 

Ejemplo de programa:

Un código de ejemplo para comprobar la placa y los sensores puede ser el siguiente:

Se basa en 2 CNY de entrada y 2 bumpers. Las salidas de estos, una vez convertidas a señales digitales se conctan a Arduino y unos LEDs conectados a pines como salida digital nos muestran la actividad de los sensores.

 

/*

* Como tester tenemos un LED en la salida 13.

 

* Las entradas de Arduino provienen de las salidas digitales provistas por la PCB

*/

 

int ledPin = 13;               // LEDs conectado a las salidas 13, 12, 11 y 10

int ledPin2 = 12;

int ledPin3 = 11;

int ledPin4 = 10;

int inCNY1 = 7;                //Pines del 3 al 7 conectados a las salidas de los

int inCNY2 = 6;                //CNY y bumpers de la placa PCB

int inFDC1 = 4;

int inFDC2 = 3;

int valCNY1 = 0;              // Valores utilizados para depurar las salidas digitales usando el monitor serie

int valCNY2 = 0;

int valFDC1 = 0;

int valFDC2 = 0;

void setup()                    // Ejecución incial, declaramos las varables

{

  pinMode(ledPin, OUTPUT);      // Establece los pin como salida

  pinMode(ledPin2, OUTPUT);    

  pinMode(ledPin3, OUTPUT);

  pinMode(ledPin4, OUTPUT);

  pinMode(inCNY1, INPUT);      // Establece los pin como entrada

  pinMode(inCNY1, INPUT);

  pinMode(inCNY2, INPUT);

  pinMode(inCNY3, INPUT);

  pinMode(inFDC1, INPUT);

  pinMode(inFDC2, INPUT);

  Serial.begin(9600);          // Inicialización del puerto serie a 9600 bauds

}

void loop()                     // Ejecución en bucle infinito

{

  valCNY1= digitalRead(inCNY1);    // Lectura de la entrada digital del CNY1

  digitalWrite(ledPin, valCNY1);   // Escribe el valor en el pin de salida del LED

  Serial.print(valCNY1);           // Imprimimos el valor digital para verlo por el monitor serie

  valCNY2= digitalRead(inCNY2);    //Lectura de la entrada digital del CNY2

  digitalWrite(ledPin2, valCNY2);  // Escribe el valor en el pin de salida del LED

  Serial.print(valCNY2);           //

  valFDC1= digitalRead(inFDC1);    //Lectura de la entrada digital del FDC1

  digitalWrite(ledPin3, valFDC1);  // Escribe el valor en el pin de salida del LED

  Serial.print(valFDC1);           //

  valFDC2= digitalRead(inFDC2);    //Lectura de la entrada digital del FDC2

  digitalWrite(ledPin4, valFDC2);  // Escribe el valor en el pin de salida del LED

  Serial.print(valFDC2);           //

}