Proyecto B.L.T.V. (Black Line Tracking Vehicule)

Introducción:

Este proyecto pretende desarrollar un vehiculo que sea capaz de seguir de forma autónoma una trayectoria, que será representada por una línea oscura, sin salirse de dicha ruta.

Para ello:
  • Usaré restos de eléctronica que posiblemente todos podamos encontrar a un precio asequible y cuya eléctronica no sea demasiado compleja de realizar.
  • El desarrollo lo iré actualizando independientemente de los resultados del progreso, de forma que al final aparecerán todas las propuestas e intentos realizados con sus pros y contras.
 La idea es usar como detector de la ruta (trk=tracking) el sensor de un ratón de bola que reflejará la señal cuando ésta sea blanca, de modo que llegará un pulso al circuito de control que avisará al BLTV de la necesidad de corregir la trayectoria. Esta corrección se realizará usando un servo de RC  Futaba S3000 o similar) (PVP= 10€). La idea inicial es simple, pero mi intención es que el resultado final permita fáciles modificaciones para hacer el equipo más complejo y que detecte ciertos obstáculos y que así no choque con otros vehículos en una supuesta carrera.

Funcionamiento:

S.S.R.- Sensor-Detector
C.D.V (C..L.D.).- Comparador de Ventana / Circuito Lógico Digital
D.S.L.G.- Driver Servo Levo Giro
D.S.D.G.-Driver Servo Dextro Giro



Mientras el sensor detecte línea negra, para ello se dispondrán dos parejas de sensores en los extremos frontales del vehículo, seguirá derecho puesto que la salida al CDV será OFF(= 0V). Cuando se detecte un pulso en el SSR, (el vehículo estará saliéndose de la trayectoria), la salida será ON(=5V) y el CDV decidirá cúal es el sensor que ha detectado un cambio para corregir la trayectoria aplicando una señal al servo a través del Driver del Servo (DS).

Componentes:
 El servo.- Trabajará en modo de Motor de Rotación continua, manteniendo su electrónica y controlándolo a través de la señal de control (cable amarillo). La frecuencia de la señal de control es de 50Hz, sufientemente rápido para que los tiempos de decisión le permitan permanecer en la línea negra. El ángulo de giro se gobierna con una señal cuadrada de una duración determinada en el pulso positivo (ON=5V) que será generada por el DS (implementado en un N555).

(Más información: Trucar un servo)

El N555.- Trabajará en modo astable con frecuencia 50Hz (duración de ciclo: T1+T2=20ms) y seleccionando una de las resistencias de carga se seleccionará la duración del periodo ON, para que el giro sea a derechas, o a izquierdas, que será función de la duración de T1. Más info: Temporizador con N555

El C.L.D.- Finalmente me he decidido por realizar este circuito con lógica digital, pues la salida del mismo me permitirá inhibir la actuación del N555, y así seleccionar el circuito que mande la señal al servo, por descarte de las otras dos.


Desarrollo:
Voy a empezar con el control del Servo e iré actualizando la información con los resultados obtenidos.

1.- Control del Servo: D.S.L.G. / D.S.D.G.

¿Cómo se le da la información al servo para que gire? Mediante una señal de control (PCM: Pulse Code Modulation) en la que el ángulo está determinado por la duración del pulso que se aplica al cable de control.

 
El servo espera ver un pulso cada 20 ms (50Hz), y la longitud del pulso determinará los giros de motor.
 Para controlar un servo se le ordena un cierto ángulo, medido desde 0º. Cualquier ángulo entre los dados genera una giro de ángulo intermedio proporcional.

El tiempo OFF no es crítico y puede estar alrededor de los 20ms (entre 10-30ms), pero siempre < 50ms: Modo SLEEP, entraría a funcionar en pasos pequeños y el rendimiento no sería el óptimo.

Podemos fijar un ángulo intermedio para que gire el servo en cada corrección y que no sea tan bruso como 90º/-90º, de modo que fijaremos 30º. Para ello, la longitud del ancho de pulso para futaba sería (1,3 + 0,33 ms /30º) = 1,63 ms; Para una giro de -30º, sería (0,3+0,33 ms/3)=0,63 ms.

De este modo con el primer pulso corregirá 30º/-30º, con el siguiente pulso se irá a 60º/-60º y así sucesivamente mientras reciba la orden de giro. Si hay una fuerza externa que intenta bloquearlo, el servo intentará resistir activamente (el servo dará entradas al motor para corregir el error). Cuando ambos detectores estén sobre el negro y se quiera que la dirección del vehículo sea lineal, deberá de enviarse un pulso de valor Ton = 1,3ms (de f=50Hz).

El circuito Driver del Servo quedaría como sigue: 

Fijando C1=0,47 uF (470 nF) Ton= 0,693*C1*(R1)=> R1=5,1k Ohm y Tpulso=0,693*C1*(R1+R2) = 20ms => R2 = 56k Ohm.





Para el DSDG: R1= 56k    R2= 5,1k

Para el DSLG: R1= 59k    R2= 2k

Para posición neutra R1=57k   R2= 4k

Es decir, habrá que realizar 3 circuitos para que las salidas de los SSR activen la decisión más apropiada según la circunstancia.

El circuito de salida con el transistor en funcionamiento de interruptor, se usa para invertir la Out del N555, que el servo requiere positiva. Cuando el transistor están en saturación (ON), como  la resistencia interna Rce = 0 => Vc (out to servo) vale 0V. Cuando el transistor está en corte (OFF), la Vc= Vcc porque no hay circulación de corriente a través de R4 y no hay por tanto caída de tensión en R4.

Finalmente me he decidido por otro montaje, combinación de dos circuitos con N555, más preciso, aunque más elaborado, usando un N556 (Dual Timer): El primero funcionará como astable, mientras que el segundo como monoestable, de modo que el primero manda la señal de activación del monoestable, actuando sobre la patilla TRIGGER (Disparo) del monoestable. Es decir, que si inhibo este segundo N555, esta misma señal puede actuar sobre otro N555, también como monoestable, calibrado para una diferente actuación del servo.



Otro inconveniente que me he encontrado es que el servo que tengo es de Jamara XT-mini, y aunque los cables están en el mismo orden que los Futaba & Co. he tenido que ensayar para encontrar las frecuencias óptimas de funcionamiento.

Oscilador Monoestable: Fijando C1=0,047 uF (47 nF): Duración del pulso Ton= 0,693*C2*(R3)=> R3=22k Ohm  (t = 0,7 ms) para que se vaya a la posición 0º ; R4= 40k Ohm (t=1,4 ms) para que el servo se vaya a -90º; y R5= 4 kOhm  (0,13 ms) para que gire hasta los +90º. Si usas valores intermedios, léase 36k y 12k, los giros serán hasta -45º y +45º respectivamente (la posición neutra no la queremos cambiar).

Tiene una ventaja sobre el diseño previo: ya no necesito invertir la salida de N555 con el Transistor.

Aquí os dejo el enlace: Driver Servo Jamara XT-mini


2.- Funcionamiento del Sensor / Detector.: S.S.R.


He pensado hacerlo con un sensor de desplazamiento X/Y basado en un foto resistor de un ratón de bola antiguo.

La reflexión de la luz del LED emisor, la captará el fototransistor cuando se refleje sobre la superficie blanca y no deberá de reflejarse cuando la superficie bajo el emisor sea negra. (esto está aún por probar).



Cada receptor tiene dos Transistores de captación para detectar la dirección de avance o retroceso del ratón, de modo que en función del Tr que envíe antes la señal, el chip de control del ratón detecta si el incremento es positivo o negativo.

Si no se usa el chip, es decir, se toma la señal única de uno de los dos fototransistores (SSR), suponiendo que el vehículo no tendrá marcha atrás, se simplifica bastante el diseño. Esta señal, en teoría, es de 5V cuando está activa y 0V cuando está inactiva.
De momento, las primeras pruebas con un circuito de un viejo ratón de bola, me ha dado que cuando el SSR no recibe señal del diodo I-Red, da una salida de 0V, pero cuando recibe señal, me da una salida de 1,70 V (Posiblemente derivado de no usar el circuito integrado de control del ratón). Esto me obligará a poner un transistor de salida en configuración EC y salida por colector y replantear el sistema de detección. Según me apunta mi amigo Javi, la solución podría ser que los sensores sólo me comuniquen un 1, cuando no haya reflejo de señal (el SRR se encontrará sobre la delgada línea negra bajo el vehículo).


De esa forma cuando la salida sea de 1,75V, el transistor estará en ON y la tensión en el colector será 0V (Gnd), y viceversa, cuando la salida del SSR sea 0V (0 lógico), el transistor de salida no conducirá (OFF) y la tensión en el colector de Tr será de 5V (1 lógico).


El dispositivo elegido permite la disposición representada en la imagen, en la que el diodo emisor y el fototransistor, se encuentran en paralelo. La distancia de reflexión probada es de 1 ó 2 cm; cuanto más cerca, mayor la tensión generada en el Tr.
Con la disposición en paralelo, la tensión generada en el fototransistor es de 1,56V, mientras que cuando no recibe señal de IR es de 0,8V. El transistor usado para invertir es un C3198.

Con ayuda del transistor configurado como Switch, se consigue que, cuando la tensión es pequeña (0,68V), no sea capaz de meter en saturación al TR, de modo que la tensión de salida por el colector sea la Vcc=5V.

Cuando el Tr entra en saturación, la Vce=0,2 V, tira abajo la Vc = 50 mV, lo cual es en la práctica 0V (GND).

El foto-TR necesita que el diodo IR tenga una señal mínima, en mi caso con una R=330 Ohm (aprox. 13mA) he conseguido que el foto-Tr trabaje rápido como switch. La Rcolector = 660 Ohm y la Rbase = 12 kOhm. Estas pruebas me han confirmado dos salidas del SSR. Una de V=2,2V, y otra de 0,68V.
Lo he conectado a la señal RESET del N556 y el servo no actuaba, tal y como se esperaba.

Ver test: Circuito Sensor - Switch SSR


Por tanto, como se expone más adelante, este circuito será el que se use para inhibir las señales de los N555.




3.- Circuito Lógico Digital:  C.L.D.


Esta será la tabla de lógica de actuación según se detecte en A ó B un pulso positivo o negativo procedente del sensor. En caso de que B reconozca un uno, se activará la señal S2 (D.S.D.G.); si fuera el sensor A el que detecta un nivel alto, se activará S3 (D.S.L.G.) ; si ambos detectores se encuentran en la senda correcta, ambos marcarán 1 lógico (V=5V) y la salida en 5V será la S1, que mantendrá la senda del vehículo.
El circuito 7400 está compuesto por 4 puertas NAND de dos entradas.
El circuito 7404 está formado por 6 puertas inversoras.

El circuito siguiente desarrolla dicha tabla:


Pero hoy me he levantado con otra idea. Al inhibirse las señales de salida de los N555, éstas se van a cero. Si se dispone una puerta OR de tres entradas, una para cada salida de los N555, que se correpondían a las frecuencias que determinan el movimiento del servo, se podrían "sumar" con una puerta OR de modo que la salida del mismo reproduzca la señal de entrada activa, recordemos que una puerta OR da una salida 1 siempre que exista un 1 en cualquiera de sus entradas y los ceros de la "señal cuadrada" de frecuencia serán ceros igualmente, reproduciendo fielmente las señales de entrada activas, es decir no inhibidas por los correspondientes SSR. El circuito lógico es mucho más sencillo.

Aprovechando esta circunstancia, la filosofía del C.L.D. cambia, pues no será éste el que decida sobre que N555 actuar, inhibiendo las señales RESET de los N555, sino que será el que haga las funciones de acoplamiento de las señales de salida de los N555 hacia el servo, mediante la señal de salida de una puerta OR o NOR, de tres entradas, correspondientes en este caso, a las salidas de los N555. Y dejaré para los circuitos de respuesta SSR la función de inhibir las señales de los N555. De modo que la señal de salida de la puerta OR/NOR será una fiel copia de una de las 3 señales de entrada, en concreto la que no esté inhibida por el SSR que no haya detectado cambios en su entrada.

Antes de seguir, voy a intentar probar esta disposición en la placa de pruebas.

Correcto, el circuito NOR de tres entradas cumple el cometido de sumar tres entradas, sólo que he de usar un segundo sumador para invertir la señal, si, he dicho un sumador al que le he puesto a cero dos de las entradas y la tercera es la salida del primero. Para completar el circuito, falta inhibir la señal del N555 que manda al servo a la posición central, y que no lleva SSR, y al haber eliminado el circuito lógico de tres entradas, hay que decidir cuándo debe ir a esa posición; Pues la solución que he ideado es igual de sencilla. EL circuito 7427 dispone de tres NOR de tres entradas (3-Input 3-NOR gates), pues voy a usar la tercera puerta (Gate) para inhibir el N555 de puesta a 0º con la siguiente implementación: Las salidas de colector de los circuitos de adaptación de los SSR, serán 0 cuando el SSR detecte el haz del diodo IR, de modo que cuando las conecte a las dos entradas del tercer NOR, poniendo la tercera a cero, la salida será 1, y esta señal la envío al RST del N555 haciéndolo funcionar siempre que cualquiera de los otros no de una señal válida. Si cualquiera de los otros SSR da un 1, la salida del tercer NOR, será cero y desactivará al N555, permitiendo la salida única del SSR activado por el diodo IR.

En resumen:Descripción del funcionamiento:

- Cuando el SSR no refleje (fondo negro) su salida será 0,68V, no suficiente para activar (ON) el TR switch y su Vcolector = 5V=Vcc (alimentación), por lo que su correspondiente señal S1/S2 habilitará la salida del N555 al que está conectado a través de su RESET pin.(RST).

       SSR :    0,68 V = No refleja  (OFF)              2,2 V = Refleja (ON)
       TR switch:   0 = 0V: Saturación                     1 = 5V : Corte


- El primer N556 usará un timer como monoestable con C1, R1 y R2; y el segundo como astable para posición neutra (0º) con C2 y R3=22k.
- El segundo N556 usará un timer como astable para giro a dcha (90º) con C3 y R4=8k,  y su segundo timer también como astable para giro a izq (-90º) con C4 y R5=40k.

S1: Dextrogiro: RST: pin 4 (2º N556): 1: habilitado (enable) / 0:desabilitado (Disable): Sout = pin 5.
S2: Levogiro: RST: pin 9 (2º N556): 1: enable / 0: Disable: Sout = pin 8.
2Y: Neutro: RST: pin 9 (1er N556): 1:  enable / 0: Disable: Sout = pin 8.



4.- Construcción del vehículo.

Me he hecho con un meccano, que es perfecto para desarrollar esta parte del proyecto. El problema es que tiene un motor de 3V que no se si podrá tirar del sistema. Ya probaré con 5V, a ver si aguanta. Aprovechando que tiene inversión de polaridad en el motor, podría generar una circuito con switches electrónicos para cambiar el setido de giro del motor y cambiar el sentido de avance del B.L.T.V. en función de otro sesor que detecte obstáculos. (Ya se verá).

5.- Pruebas.

Llegados a esta fase del proyecto, voy a ir definiendo las etapas de prueba:

- Montar el circuito de generacion de señales de control sobre placa con soldaduras y probar.
- Montar los sensores SSR sobre placas independientes y calibrar.
- Montar el circuito lógico (C.L.D.) sobre la placa y probar.
- Probar alimentaciones del motor.





 

Comentarios