El
CNY70 de Vishay es uno de los sensores que más se suele usar
para los robots seguidores de línea, es el primer sensor
empezando por la izquierda, el cuadrado de 7mm de lado aproximadamente.
Está compuesto por un fotodiodo y un fototransistor como se
puede ver en el dibujo sacado del datasheet.
El fotodiodo se encarga de emitir luz cuya intensidad es función
de la resistencia que pongamos en serie con él y la
tensión a la que le alimentemos. El fototransistor se encarga de
recibir esta luz cuando se refleja sobre alguna superficie, y
dependiendo de la cantidad de luz recibida trabaja en sus distintas
regiones y pasa más o menos intensidad por él. Por lo que
podemos detectar distintas superficies en función de la luz que
reflejen, y así es como seguimos una línea negra sobre un
fondo blanco, o viceversa. Cuando el sensor se encuentre sobre la parte
negra (la línea) esta absorberá gran parte de la luz
emitida por el diodo, por lo que nuestro transistor estará en
corte y apenas tendrémos intensidad a través de
éste, cuando el sensor se sitúa sobre una superficie
blanca, gran parte de la luz emitida por el diodo será reflejada
al fototransistor, pasando éste de su región de corte a
la de activa o saturación y teniendo una intensidad bastante
mayor.
Para poder detectar la cantidad de luz recibida por el transistor
sólo necesitaremos una resistencia en serie con éste, el
valor de tensión leído será función de la
intesidad que pasa por el transistor, es decir función de la luz
recibida. Por lo que el circuito más simple sería el
siguiente:
Salida = Vcc - Ic*R
Una resistencia se encarga de limitar la intensidad y luz emitida por
el diodo. La otra resistencia nos proporciona un valor de
tensión, por ejemplo si el transistor no reibiese luz
(está sobre negro), pasaria una intensidad muy muy baja, por lo
que la caída de tensión en la resistencia sería
muy pequeña y en la salida tendríamos aproximadamente el
valor de Vcc. Ahora el caso contrario, el transistor se encuentra en
saturación porque recibe mucha luz, la Ic es muy grande y el
valor de la salida sería la Vce de saturación del
transistor 0.3 V.
En el caso de que recibiesemos luz sin llegar a saturación, los
valores de nuestra salida oscilarían entre los dos valores
anteriores. En principio podemos usar este circuito tan simple, cuando
el sensor se encuentre sobre negro tendrá un valor
próximo a Vcc y cuando se encuentre sobre blanco próximo
a los 0.3 V, por lo que podríamos enganchar esta salida a la
entrada digital y que reconozca ambos niveles lógicos. Pero
también nos podemos encontrar con niveles de tensión por
encima del nivel de umbral de cero de la lógica y por debajo del
nivel de umbral del 1. Es decir si nuestra lógica por ejemplo
toma un 1 a partir de 4 V, y un cero cuando la entrada es menor de 1 V , que interpretaría la lógica cuando la salida fuese 3 voltios?
Para solucionar esto lo mejor es usar un disparador Schmitt, se encarga
de proporcionar una señal de 0 ó 5 voltios al
microcontrolador en función del valor de la salida de nuestro
sensor con una histéresis. Por lo que es la mejor
solución cuando vamos a leer los sensores en digital,
además muchos microcontroladores incorporan ya este disparador
en sus entradas, por lo que sólo hay que ver si el puerto lo
lleva y conectar el circuito anterior, si no lo lleva es mejor ponerlo
externo.
En este dibujo se muestra el disparador, por lo general un 74HCT14, en
este caso la resistencia se coloca en el emisor en lugar del colector,
por lo que cuando estemos sobre blanco leemos un 1 en Q y un cero
cuando estemos sobre negro. Aquí: Salida= Re*Ie, y lo que hace
el 74HCT es que cuando la tensión en Re sea mayor de cierto
valor nos da 5V en Q, y cuando sea menor a otro valor próximo
pone Q a 0 V, por lo que evitamos meterle niveles intermedios a la
lógica.
Los valores de las resistencias tenemos que calcularlos en
función de varios parámetros. Si queremos que el diodo
emita mucha luz, la resistencia en serie tendrá que ser lo menor
posible, Rd
= (Vcc - 1.25)/ Id, siendo el valor mayor de Id máximo de 50 mA,
Por lo que cuanto mayor sea la intensidad de luz emitida por el diodo
más llegará al transistor y menor tendrá que ser
la resisntecia en serie con este, pero hacer que la corriente sea
máxima para obtener la mayor señal reflejada no es
siempre la mejor solución, hay que tener en cuenta otros
factores como la distancia, la temperatura, las frecuencias del sensor,
el consumo total..
De la distancia del sensor a la superficie depende
la cantidad de luz recibida por el transistor y por tanto la intensidad
que pasa por él. Si nos vamos al datasheet vemos una
gráfica que nos da como cambia la intensidad del colector en
función de la distancia para una tensión de
alimentación de 5V y una corriente de diodo de 20 mA.
Como se puede ver en la gráfica lo ideal es llevar los sensores
lo más cerca posible del suelo, cuánto más
alejados estén necesitaremos emitir más luz (mayor
consumo), una R de transistor mayor (mayores tiempos de encendido y
apagado) y nos afectará más la luz ambiente. Ahí
se puede ver como a partir de 6 mm la intensidad ha caído
más de un 80% del valor inicial.
La luz ambiente es el mayor problema que nos podemos encontrar en un
concurso, podemos llevar nuestro robot más que probado en el
garaje de casa, llegar al concurso y encontrarnos con algún foco
o luz del día que sature nuestros sensores y el robot
está ciego, no será capaz de leer la línea, y todo
el trabajo realizado se habrá perdido en este punto. Una luz
constante sobre los sensores disminuye la sensibilidad de estos,
tendríamos una corriente constante de transistor que nos
daría un valor apreciable continuo en la salida, y si este valor
es lo suficientemente grande no detectaríamos los cambios de
blanco y negro, tendríamos siempre un 1 o un cero en la salida.
Para la luz ambiente hay varias soluciones. La primera es llevar los
sensores lo más pegados posibles al suelo de esta forma la luz
ambiente reflejada es menor, muy pegados se evita totalmente,
además es normal ver como los concursantes cubren por los lados
sus placas de sensores para que les llegue menos luz reflejada del
exterior.
Otra opción es modular la señal de diodo y filtrar la
salida del transistor. En lugar de alimentar el diodo de forma
continua, ahora metemos una señal pulsatoría en
éste, y la salida del transistor la pasamos por un filtro para
obtener la señal producida por el diodo y evitar los efector de
la luz ambiente siempre que no sature el sensor. Esta solución
implíca mucha electrónica adicional. Habría que
generar una señal en pulso para los diodos, que esto en
principio no requiere de muchos componentes, con un transistor a una
pata del micro bastaría. Pero el inconveniente viene en la
salida, que hay que montar un filtro para cada transistor, y si
llevamos unos cuantos sensores requiere bastantes componente
adicionales que cuestan y ocupan espacio, además de la tarea de
realizar el filtro. También se podría demultiplexar.
La tercera opción que se suele ver y la usa mucha gente es leer
en analógico. Para ello necesitamos usar un conversor
analógico digital (adc) del micro, teniendo los sensores
apagados leeríamos el valor del adc en cada transistor, una vez
leído procedemos a ir encendiendo los diodos uno a uno y leemos
el valor analógico en el transistor, la diferencia entre el
valor leído con el diodo encendido y el valor leído con
el diodo apagado nos proporciona la cantidad de luz reflejada por la
superficie, evitaríamos la luz ambiente siempre que ésta
no sea capaz de saturar el sensor. De igual forma aquí tenemos
que usar electrónica adicional, como puede ser algún
demultiplexor analógico, además debemos de tener en
cuenta los tiempos de conversión del ADC. Esta es la mejor
opción de las posibles, ya que nos proporciona un valor
analógico real que se corresponde con la posición de la
línea entre dos o más sensores y por tanto
tendríamos una sensibilidad mayor.
Lo más rápido y fácil es la primera opción,
leemos nuestros sensores en digital pasados por un trigger smichtt y
nos preocupamos de llevarlos lo más cerca posible del suelo y
bien tapaditos para que no les afecte mucho la luz ambiente, y con unos
buenos valores de resistencia y condensador no tendrémos
problemas de saturación. La gente que lleva un tiempo
participando en concursos y con robots competitivos tiran para la
tercera opción, hay mucho más trabajo en
electrónica y código, pero para ganar hay que trabajar...
Yo por supuesto me decanto por la primera opción...
Si queremos apagar y encender diodos tenemos que tener en cuenta los
tiempos de apagado y encendido del sensor, y aquí juega un papel
fundamental la resistencia de transistor y la capacitancia base
colector. Cuanto mayor sea la resistencia mayores serán los
tiempos de encendido y apagado, y si el transistor entra en
saturación óptica el tiempo de apagado será
bastante mayor que el de encendido, por lo que si disminuimos la R
perdemos sensibilidad pero ganamos en tiempos. Aquí hay que
sacar lapiz y papel y junto con el tiempo de conversión del adc
ver cuanto tardamos en leer cada sensor, la placa total de sensores, y
el espacio recorrido en este tiempo.
Por tiempo de apagado y encendido del sensor se entiende el tiempo que
tarda la salida del sensor en alcanzar su valor. Por ejemplo estas
imagenes son de una señal cuadrada conectada al diodo, y en azul
la salida del transistor con una resistencia de emisor de 15k sobre un
fondo blanco.
Si usamos una resistencia mayor de transistor 47k.
Amarillo: diodo. Azul: Vre Re=47k
Tiempo de subida.
Tiempo de bajada.
El tiempo aumenta considerablemente al aumentar la resistencia de
carga, por lo que si queremos encender y apagar diodos para realizar
mediciones debemos tenerlos en cuenta para calcular que distancia
representa y ver si se puede despreciar.
Por último podemos usar un CNY para leer un encoder, y
aquí es importante su resolución, la distancia
mínima de línea que puede leer, además de los
tiempos anteriores. Si miramos la gráfica encontramos que la
posición del sensor respecto al desplazamiento de la
línea y su distancia a ésta condiciona su
resolución.
Por lo que si tenemos un encoder con líneas finas la
colocación del cny nos puede influir bastante a la hora de ser
capaz de leerlo.
A la hora de poner las resistencias hay que pensar en todo lo anterior
(y más...), la placa de cny que voy a montar en el miniz va a
ser leída en digital, como resistencias voy a usar 120 Ohmios de
diodo y 15k de transistor, lo que me da un consumo de diodo muy elevado
de 42 mA. Mi idea es que la intensidad del diodo sea la máxima
posible para minimizar los efectos de la luz ambiente al poder
permitirme llevar una resistencia de colector lo más baja
posible, además mejoro el tema de tiempos (aunque puede que esto
resulte despreciable a la velocidad a la que voy), que aunque leo en
digital apago y enciendo los diodos en el periodo para minimizar el
consumo total, ya que voy a montar 16 cny (640 mA) en la placa de
sensores, uno pegado a otro, de tal forma que obtengo una buena
resolución, ya que siempre voy a tener 3 sensores sobre la
línea, o incluso 4 si esta pasa de los 20mm. La placa que voy a
montar y probar es la siguiente, a ver si la paso por el ácido y
veo como sale la idea.
Bueno aquí dejo colgado el pequeño resumen sobre el cny,
que si no cada vez que tengo que usarlo me toca leerme los datasheet.
Agradezco cualquier correción en lo que me haya podido
equivocar, ya que tampoco es que tenga mucha experiencia con este
sensor.
Gracias. Saludos.