Skip to content
Rubén Espino San José edited this page Feb 18, 2020 · 47 revisions

Éste es un listado de preguntas frecuentes que han surgido a usuarios de Cyclops- Project. Si tienes cualquier duda y no consigues resolverla con esta wiki, puedes plantearla en la pestaña de issues.

A medida que la lista vaya creciendo es probable que sea difícil encontrar preguntas concretas acerca de un tema, por lo que se recomienda utilizar el buscador con Ctrl+F e introducir palabras clave para localizar más fácilmente las preguntas de interés.

Índice de contenido:

  • Arduino Nano
  • Conversor DC-DC
  • Batería lipo
  • Cargador de batería lipo
  • Circuito de monitorización de batería
  • Motores
  • Soportes de motores
  • Ruedas y apoyos
  • Encoders
  • Bluetooth
  • Sensores de línea
  • Sensores de distancia
  • Cámara
  • Montaje del robot
  • Programación / firmware
  • Seguimiento de línea

Arduino Nano

¿Sirve la Arduino Nano con el microcontrolador ATmega168?

Sí, siempre y cuando tenga memoria suficiente como para albergar el programa que se desea cargar.

A la hora de cargar el programa deberás tener en cuenta que en el menú de herramientas del IDE de Arduino hay que seleccionar el procesador ATmega168.

¿A qué tensión debería estar el pin Vin de la Arduino?

En caso de que no hayas utilizado el conversor DC-DC de 5V para alimentar la Arduino y sus periféricos, habrás tenido que soldar el jumper JP1. Por lo tanto, el pin Vin de la Arduino estará a la tensión de la batería, que son 8,4V máximo, y el pin de +5V será una salida de alimentación para el resto de circuitos. En la siguiente imagen puede verse el esquema de alimentación:

Pero si has empleado el DC-DC habrás tenido que dejar sin soldar el jumper JP1. Entonces Vin queda al aire, sin nada conectado, pero en la práctica le llegará una tensión de retorno procedente del pin +5V a través del regulador de 5V inutilizado de la Arduino. En este caso el pin +5V de la Arduino es una entrada de alimentación.

He soldado los conectores cortos de la Arduino y ahora quiero añadir el extra de sensores. ¿Cómo hago para alargarle los pines a la Arduino?

Por compatibilidad del diseño sin tener que desconectar la Arduino cada vez que se quiera cargar por cable hubo que elevarla con conectores macho de pines alargados, ya que los sensores de distancia bloqueaban el conector mini USB de la Arduino Nano.

Para no tener dos Arduinos con diferentes conectores macho puedes utilizar como adaptadores estos conectores hembra típicos de Arduino Uno para apilar shields:

Tienen el mismo paso de 2,54mm y unos pines de 11mm de largo. Puedes encontrarlos en las tiras que se necesitan de 15 pines en Aliexpress.

Conversor DC-DC

¿Por qué se utiliza un conversor DC-DC en vez de aprovechar el regulador de 5V de la Arduino?

Porque en caso de alimentar un robot completo con sensores de línea, de distancia, cámara, bluetooth... es probable que el regulador de la Arduino no aporte suficiente corriente a todo el sistema y el robot no funcione correctamente e incluso se resetee.

El conversor DC-DC empleado es capaz de aportar 3A a su salida.

¿Por qué hay que hacer el corte y soldar el jumper en el conversor DC-DC?

Si has seguido los pasos indicados en el tutorial 3 para la adaptación del conversor DC-DC, verás que hay que cortar un jumper y soldar otro para obtener una tensión de 5V a su salida.

Fijándonos con detenimiento, el conversor incorpora una resistencia diferente para cada posible salida de tensión fija (1.8V, 2.5V, 3.3V, 5V, 9V y 12V) y un potenciómetro para la salida variable (ADJ). Por defecto viene conectada la salida variable controlada por el potenciómetro, por lo que hay que cortar ese jumper para evitar establecer una salida de diferente tensión y que se queme la electrónica.

Tras cortar el jumper ADJ, se sueldan los dos pines del jumper de 5V para tener una tensión de salida fija de 5V.

Si tienes conectados dos jumpers, por ejemplo el ADJ y el de 5V, la tensión que aportará a su salida el DC-DC seguramente no sea ni la regulada con el potenciómetro, ni la de 5V, sino una combinación de ambas por tener el potenciómetro de ADJ en paralelo con la resistencia de 5V. Por eso hay que asegurarse de que el potenciómetro no va a influir en la salida de 5V cortando el jumper ADJ.

¿Puedo prescindir del conversor DC-DC?

Sí, siempre y cuando no sobrepases la corriente máxima que es capaz de aportar el regulador de la Arduino. Debes tener en cuenta la corriente que va a necesitar el robot para alimentar todos sus periféricos.

Si sólo tienes el kit básico con bluetooth no es necesario el DC-DC. En caso de no querer ponerlo deberás puentear los pines del jumper JP1 que hay junto al zócalo de la Arduino.

Batería lipo

¿Qué batería lipo debería ponerle al robot?

Si aún no lo has hecho, comienza por leer el tutorial 1 sobre baterías lipo.

Los kits distribuidos suelen llevar esta batería, pero si quieres adquirir otra por tu cuenta has de fijarte en varias características:

  • Número de celdas: 2S, para que aporte un máximo de 8,4V
  • Peso: si es demasiado pesada el robot llevará mucha inercia en las curvas, y si es demasiado ligera durara poco y/o aportará poca corriente
  • Corriente de salida en continua y en pico: mínimo aconsejable de 4 o 5A en continua para evitar problemas. Se puede recurrir al apartado de cálculo de parámetros del tutorial 1 para saber la corriente que aportará la batería seleccionada
  • Duración: en función de la duración que cada uno desee. Por ejemplo, en las competiciones de velocistas las rondas no duran más de 3 minutos y se suele cambiar la batería entre ronda y ronda. Estaría bien que aguantase un par de rondas (6 minutos) por tener un poco de margen. Se puede recurrir al apartado de cálculo de parámetros del tutorial 1 para saber la duración de la batería seleccionada
  • Conector: Es necesario que lleve el típico conector JST-XH blanco de carga balanceada para enchufarla al robot

¿Por qué se alimenta el robot a través del conector de balanceo de la batería?

En teoría no debería hacerse, pero los cables del conector de balanceo de las baterías que estamos utilizando soportan perfectamente la corriente que pasa a través de ellos para alimentar todo el robot (aproximadamente 4 amperios). La razón por la que se ha decidido utilizar el conector de balanceo es porque se puede encontrar su conector macho correspondiente para soldar en la PCB directamente, mientras que para el de potencia habría que soldar un cable y dejar el conector colgando.

Cargador de batería lipo

¿Qué cargador necesito para la batería lipo?

La norma principal, aparte de que sea un cargador de baterías lipo con conector de enchufe europeo, es que sea balanceado, es decir, que sea capaz de igualar la tensión entre todas las celdas de la batería para que no se descompensen entre ellas, lo cual podría hacer que se estropeara.

Si vas a utilizar poco el cargador, quizá no compense comprar uno demasiado caro. Este cargador por USB podría estar bien.

Fíjate siempre en la corriente de salida y en el número de celdas de la batería a cargar. La corriente que aporte el cargador nunca debe superar la indicada en mAh en la batería.

Si vas a utilizarlo a menudo y quieres controlar la corriente de carga y otros parámetros, puedes adquirir el imax b6. Este cargador suele venderse sin la fuente de alimentación, por lo que hay que comprarla aparte. Si te decides por el imax b6, ten en cuenta que puedes encontrar artículos originales y copias, que no tienen por qué dar las mismas prestaciones, aunque en apariencia son idénticos. Para las baterías que se suelen utilizar en Cyclops es más que suficiente con el cargador copia del imax b6.

Para más información sobre el uso del cargador imax b6 y el mantenimiento de las baterías lipo puedes acudir al tutorial 1.

Circuito de monitorización de batería

¿Para qué sirve el diodo 1N4001 del monitor / divisor de batería?

Partimos de que en un pin de la Arduino no pueden caer más de 5V ni menos de 0V porque si no se estropearía.

El diodo D3 es un diodo de seguridad, para que el pin de la Arduino (BAT) no reciba más de 5V en caso de que haya algún problema en el divisor, como por ejemplo que se estropee la resistencia R6 que va a masa (llegaría la tensión VDD al pin, que equivale a hasta 8,4V con la batería totalmente cargada) o que se hayan soldado las resistencias equivocadas y le pueda llegar más tensión de 5V al pin.

Por eso el diodo se coloca conectado con el cátodo a 5V, para que cuando el pin BAT sobrepase esa tensión, el diodo conmute de estar en corte a conducir y establezca la tensión máxima permitida a 5V, evitando que la Arduino se dañe. Realmente la tensión que caería en el pin es los 5V más la tensión de codo del diodo, que es muy baja.

Adicionalmente se puede colocar otro diodo entre el pin BAT y masa (con el ánodo conectado a masa) por sea caso la tensión del pin bajase de 0V, pero como no trabajamos con tensiones negativas y suponemos que no va a soldar nadie el conector de alimentación del revés al estar dibujado en la PCB, no es necesario.

Motores

¿En qué orden sueldo / conecto los cables de motores y encoders? ¿Por qué los motores giran del revés?

Es posible que al soldar los pines de los motores, éstos giren del revés. Para solucionarlo puedes cambiar el orden de los cables o modificar las variables en el programa, como se indica en el tutorial 5. Igual pasa con los canales de los encoders. Si te fijas en el diseño de la PCB verás las iniciales C C G V M M junto a los conectores de los motores:

  • C corresponde a un canal de encoder
  • G es masa
  • V es 5V
  • M corresponde a uno de los pines del motor

Como a lo largo de las conjuntas se ha tenido que ir variando el modelo de motor por problemas con los distribuidores, el orden de pines no quedó totalmente establecido, por lo que quedó abierta la posibilidad de que cada uno soldase los pines C y M en el orden que quisiera. Ahora se está empezando a dar los buses de cables empalmados para que funcionen todos igual y no vayan los cables soldados directamente a la PCB:

Aún distribuyendo los cables para que en todos los kits lleven el mismo orden e intentar que giren del derecho con la programación por defecto, es probable que los motores giren del revés. Esto se debe a que el fabricante ha soldado el motor del revés, lo cual se puede solucionar por software siguiendo el tutorial 5, como se menciona al principio del apartado.

¿Por qué los motores no funcionan?

En primer lugar asegúrate de haber conectado bien los cables del motor y de estar alimentando el robot a través de la batería, accionando el interruptor. Si lo alimentas por USB, con el interruptor apagado, los motores no se moverán aunque esté conectada la batería.

Una vez descartada la alimentación e independientemente de si los motores giran en sentido correcto o no, los motores deberían funcionar al cargar el programa de test. Si no es así, revisa la pregunta siguiente sobre problemas de motor y la de "Por qué algunos programas de test no funcionan" del apartado de programación más abajo.

¿Por qué suena raro el motor? ¿Es posible que el motor esté estropeado?

  • El disco del encoder, acoplado al eje trasero del motor, puede estar rozando los pines del motor o algún componente cercano al girar.
  • Si el soporte de motores es la versión impresa, puede que haya algún defecto de la impresión por el que esté rozando internamente con la reductora del motor. Para saber si puede ser eso hay que quitar la sujeción y ver si sigue haciendo el mismo ruido.
  • Si el motor se ha usado con demasiados movimientos bruscos a lo largo de bastante tiempo es posible que las escobillas se hayan carbonizado. Un síntoma de ello es que el motor sea capaz de girar en un sentido pero no en el otro, e incluso que a veces gire y a veces no. En ese caso convendría cambiarlo por otro nuevo.
  • Quizá las correcciones aplicadas al motor en la programación sean bastante bruscas y el motor vibre en exceso, lo cual acorta su vida útil. Conviene no subir demasiado las constantes del PID. Para saber si es éste el motivo del ruido se puede desconectar el motor y alimentar con una fuente constante de tensión a 6V, sin PWM.

¿Sirven unos motores que tengan diferente reductora que la que se utiliza en los kits distribuidos?

Sí, sirve cualquier micro motor igual en apariencia a los originales y que encaje en el soporte diseñado, pero hay que tener en cuenta que la velocidad y la fuerza del motor no serán las mismas, por lo que habrá que modificar la velocidad y las constantes del PID en la programación. Los algoritmos programados no se modifican.

Además, el chasis de Cyclops está pensado para poder adaptar el robot a diferentes pruebas, que pueden ser más lentas o rápidas en función del circuito. En ese caso puede interesar cambiar los motores por otros con diferente reductora.

Soportes de motores

¿Por qué se deforman los soportes de motores?

Se debe al calor disipado por los motores. Puede ser por:

  • Correcciones bruscas en el seguimiento de línea que obligan a los motores a corregir constantemente por tener unas constantes altas en el PID.
  • Motores de la primera conjunta de kits distribuídos, que se calientan con más facilidad. Casi todos se distribuyeron con la versión 1 de la Main_board.

Los soportes de motores que habitualmente se emplean en este kit están impresos en 3D, concretamente en PLA. Si el motor se calienta demasiado (a partir de 60 grados para PLA) es posible que termine deformando o derritiendo el soporte.

Para evitar la deformación de los soportes se puede:

  • Imprimir los soportes en ABS.
  • Cambiar los soportes por unos comerciales de Pololu.
  • Sustituir los motores por otros de mejor calidad.
  • Disminuir las constantes del PID, sobretodo la Kp, para no estresar los motores con demasiadas correcciones.

Ruedas y apoyos

¿Por qué se utilizan tornillos para apoyar el morro?

  • Para aligerar peso en el morro respecto a la utilización de una rueda adicional. Se minimiza el efecto de cabeceo en las curvas.
  • Porque el rozamiento de un par de tornillos con los circuitos de lona de PVC es despreciable, y más aún si los tornillos son de plástico. Pero conviene que sean de cabeza redondeada y no avellanada para que no se enganchen si la línea se hiciese con cinta aislante.
  • Porque son mucho más baratos que una rueda. Cyclops-Project está pensado para facilitar la adquisición de un kit velocista o de carreras a un bajo coste.

¿Cómo puedo mejorar la adherencia de las ruedas?

Las ruedas de Cyclops están pensadas para abaratar los costes del kit sin quitar prestaciones de velocidad. Con ellas es posible alcanzar más de 2,5 m/s, teniendo en cuenta la reductora de los motores que se han seleccionado.

En competición se suelen emplear ruedas más anchas y con mayor adherencia. Si no quieres cambiar las ruedas puedes forrarlas con trozos de globo cortados transversalmente, quedando en forma de aros cortados. Deben quedar tensos, pero no vale cualquier globo; notarás al tacto que unos agarran más que otros.

Otra opción de ruedas es el cambio por unas de espuma. Son de competición de mini-z y necesitan adherente para que puedan agarrar mejor en el PVC que se utiliza normalmente para hacer los circuitos.

Encoders

¿Para qué sirve un encoder?

Un encoder acoplado a un motor sirve para calcular la velocidad de éste y el número de revoluciones transcurridas desde un determinado momento. Con los parámetros de la rueda y la reductora del motor podrá calcularse la velocidad y distancia recorrida por la rueda. Y teniendo en cuenta que el robot tiene dos ruedas con tracción diferencial se podrá calcular la velocidad lineal, la velocidad angular y la distancia recorrida por el robot. Es lo que se conoce como odometría.

En el caso de Cyclops, el encoder que incorporan los motores está formado por un disco de imanes y dos sensores de efecto hall (en cuadratura) que detectan su paso. De tal manera que cada vez que pasa un imán por delante del sensor, hace cambiar la señal de salida de 0 a 5V y viceversa, ya que los imanes adyacentes están colocados para emitir una polaridad opuesta. Así se consigue una señal cuadrada a la salida de cada sensor, de la cual pueden extraerse la velocidad de la rueda (a partir del periodo de la onda cuadrada o con la cuenta de pulsos en un determinado periodo de tiempo) y la distancia recorrida (proporcional al número de pulsos detectados).

¿Para qué se necesitan los encoders en cuadratura?

Un encoder simple puede aportar la velocidad y distancia recorridas por la rueda, pero no el sentido de giro. Es por eso por lo que se utilizan dos encoders en cuadratura, es decir, desfasados uno del otro 90º. Fijándose en la secuencia de 1's y 0's de ambas señales cuadradas se puede conocer el sentido de giro de la rueda.

Con este tutorial podrás entender mejor el funcionamiento de los encoders en cuadratura.

Bluetooth

¿Por qué el bluetooth no se comunica con el ordenador?

Que el led del bluetooth parpadee suele ser sinónimo de que no esté estropeado. En ese caso, si no se comunica con el ordenador revisa lo siguiente:

  • Si tienes la versión 2 de la Main_board revisa que hayas puesto el diodo D4. A veces la gente no pide el extra de bluetooth porque ya tiene un HC-05, pero luego se encuentra con que no tiene el diodo 1N4148
  • Selección de velocidad del bluetooth. En los tutoriales y programas es de 38400 para simplificar todo y no tener que ir variando porque es la velocidad de programación mediante comandos AT del bluetooth HC-05
  • Selección de velocidad (BAUDRATE) en el programa cargado en la Arduino. Para la UART del bluetooth debe ser la misma que la programada mediante comandos AT en el bluetooth
  • Sincronización del bluetooth en el ordenador para que sea detectado posteriormente. Es el primer paso antes de intentar conectar a través de un terminal
  • Selección de velocidad en el terminal con el que se intente comunicar, como por ejemplo Monitor Serial del IDE de Arduino. Debe ser la misma que la de los puntos anteriores

¿Para qué sirve el diodo del bluetooth?

En la versión 2 de la Main_board se incluye un diodo tal y como muestra la siguiente figura:

donde las señales BT_Tx y BT_Rx se conectan directamente a Rx y Tx de la Arduino, respectivamente.

Debido a la limitación de pines disponibles se ha decidido compartir la UART entre el bluetooth y el USB de carga por cable. Para que pueda haber comunicación tanto por cable como por bluetooth, la conexión de los pines del bluetooth con la Arduino es la misma que entre el CH340G y la Arduino, es decir, que los pines Tx del bluetooth y el CH340G coinciden, al igual que los pines de Rx:

El diodo D4 da prioridad a la transmisión del CH340G frente a la del bluetooth, de tal manera que permite mantener conectado el bluetooth durante la carga por cable sin que haya conflicto entre ambos.

Una vez se desconecta el cable del USB, el bluetooth tiene control sobre la UART.

Sensores de línea

¿Cómo sé si un sensor de línea está estropeado?

Que un sensor de línea no funcione puede deberse a muchas cosas, pero para saber si realmente el sensor está estropeado realiza las siguientes comprobaciones, tomando como ejemplo la placa Sensors_board (válido también para Sensors_board_V2):

  • Enfoca con la cámara del móvil a los sensores de línea mientras el robot está encendido. La cámara es capaz de ver la luz infrarroja del sensor. Si el led del sensor emite luz, no estará estropeado.
  • Si el sensor no luce comprueba que el polímetro es capaz de reconocer el led. Para ello, con el robot apagado y el polímetro en la posición que señala el diodo, sitúa la sonda roja en el ánodo del led y la negra en el cátodo (observar imagen con el sensor 1 como ejemplo). Si el sensor está bien debería dar un número positivo que se corresponderá con la Vf del led, que en el caso del CNY70 ronda algo más de 1V.

Lo lógico es que si algún sensor no funciona, tampoco lo haga uno de los sensores adyacentes. Esto es porque están alimentados con los leds en serie, agrupados de dos en dos (el 1 con el 2; el 3 con el 4; el 5 con el 6).

¿Por qué los sensores de línea no leen?

Principalmente puede deberse a las siguientes causas:

  • Sensor estropeado: revisa la pregunta anterior para comprobarlo
  • Resistencias mal puestas: ha habido casos de confusión entre las resistencias de 82 ohmios de los sensores y la de 82K del divisor de la batería. Intercambiarlas hace que dos de los sensores no funcionen y que el divisor sature a 5V
  • Malas soldaduras: revisar continuidad y repasar soldaduras

¿Por qué los leds de los sensores de línea comparten alimentación entre ellos?

Para disminuir la potencia consumida y no estresar innecesariamente al dispositivo que esté entregando la alimentación. La desventaja de esto es que si el led de un sensor se estropea, deja de funcionar también el que comparte alimentación con él.

Para los CNY70, según el fabricante puede caer una Vf de hasta 1,6V en el led, aunque la Vf típica es de 1,25V. En el robot la alimentación es de 5V, por lo que en teoría podríamos llegar a poner hasta 3 sensores con sus leds en serie. Ésto correspondería a una suma máxima de sus Vf de 4,8V, pero es un valor demasiado cercano a 5V, por lo que es mejor no arriesgar y poner solamente 2 sensores compartiendo alimentación. De esta manera tendremos 3 grupos de 2 sensores cada uno para la placa Sensors_board (4 grupos para la placa Sensors_board_V2).

Ahora, suponiendo una Vf típìca de 1,25V para los leds, tendremos que la corriente entregada será la If típica (50mA) multiplicada por el número de grupos de sensores. Serían 150mA para Sensors_board, frente a los 300mA que hubiera supuesto el hecho de alimentar los sensores individualmente. Por tanto, estamos ahorrando 150mA de ser entregados por la alimentación, alargando también un poco la duración de la batería.

Sensores de distancia

¿Por qué detectan algo los sensores de distancia si no hay nada delante?

Cuando el robot está corriendo sobre la pista es posible que encuentre obstáculos "inexistentes". Puede ser por:

  • Arrugas en la pista
  • Obstáculos cercanos que no nos hayamos dado cuenta de que estaban ahí (el robot llega a detectar hasta 80cm con su sensor frontal y 35cm con los laterales)
  • El sensor que detecta está demasiado inclinado hacia abajo y ve el suelo

Para solucionarlo asegúrate de que la pista esté lisa, que no haya obstáculos cercanos (paredes, patas de sillas o mesas,...) y que el los sensores estén bien encajados en el soporte. De esta manera no debería haber problemas de detección. Pero si aún así siguiese viendo el suelo, puedes imprimir unas viseras para los sensores GP2Y que tapan la visión con el suelo.

¿Cómo linealizo la función de los sensores de distancia?

Los sensores GP2Y analógicos como los que lleva Cyclops tienen una curva de detección que no es lineal, como muestra la siguiente figura del GP2Y0A21:

Es posible que queramos linealizar la función de tensión-voltaje para poder hacer un control PID sobre la distancia, por ejemplo para:

  • Hacer el seguimiento del oponente con el sensor frontal en las pruebas de carreras cuando no se puede cambiar de carril
  • Seguir paredes con los sensores laterales en pruebas de laberinto

Para ello puedes recurrir a este otro repositorio, donde se realiza una aproximación a una función lineal mediante una fórmula matemática.

Cámara

Montaje del robot

¿Cómo sé qué valor tiene cada resistencia del kit?

En primer lugar, nunca debes fiarte de los colores de las fotos del tutorial porque puede estar jugando una mala pasada el contraste de la pantalla o la calidad de la foto.

Puedes medir los valores de resistencia con un polímetro, pero si no dispones de uno también puedes guiarte por las bandas de color. Hay diferentes "nomenclaturas" utilizadas por los fabricantes en función del número de bandas de color. Echa un vistazo a esta web, que seguro que te lo aclara, además de tener una calculadora para ver los valores.

Si no te cuadran los colores, quizá sea porque tienes la resistencia dada la vuelta.

Programación / firmware

¿Por qué no consigo cargar un programa desde el IDE de Arduino?

  • En el menú herramientas, selecciona:
    • Placa: "Arduino Nano"
    • Procesador: "ATmega328P (Old Bootloader)" (A no ser que estés utilizando otro)
    • Puerto: el correspondiente a tu Arduino
  • Si utilizas Windows 10 es posible que tengas que ejecutar el IDE de Arduino como administrador, pinchando con el botón derecho en el icono y seleccionando "Ejecutar como administrador"
  • Si utilizas MAC OS, sigue este tutorial para que el PC reconozca el CH340 de la Arduino Nano

¿Puedo cargar el firmware por bluetooth?

Sí, se puede, pero para ello tienes que cambiar el bootloader de tu Arduino. Al final del tutorial 4 se indican las instrucciones a seguir para poder llevarlo a cabo. Es muy aconsejable si pretendes hacer muchas pruebas y carga del programa con el robot sobre la pista, sin siquiera tener que tocarlo.

¿Qué significan los valores (120+82)/120 en la programación? ¿De dónde salen?

120 y 82 son los valores de las resistencias del divisor de la batería en kiloOhmios. Al ser una división de dos factores no es necesario multiplicarlos por 1000, porque se anularán entre numerador y denominador. Pero estos valores deben ser altos, del rango de kiloOhmios, para minimizar la corriente que pase por el divisor resistivo

Como la batería tiene 8,4V máximo (VDD en la imagen), hay que bajarlo a 5V máximo (en BAT) con un divisor para no quemar el pin de la Arduino, que admite hasta 5V, siendo 120k y 82k los valores que he calculado.

¿Por qué algunos programas de test no funcionan?

Si has seguido correctamente el tutorial de primeras pruebas no debería haber problemas de programación. Asegúrate de haber instalado la librería SoftWire indicada y especificado correctamente la velocidad de la UART, la dirección del expansor I2C, el sentido de los motores y el orden de los encoders. Si eso está bien, el problema debería ser de hardware.

Los problemas que puede haber de hardware son muchos, tantos que no se pueden contemplar todos. En líneas generales comprueba lo siguiente:

  • Batería cargada (si alimentas por batería)
  • Funcionamiento correcto de la Arduino y sus pines cuando se carga un programa básico mientras está desconectada del robot
  • Conectividad entre los pines de la Arduino y los periféricos cuando está conectada en el robot. Pueden llegar a darse casos extremadamente raros como que los conectores hembra estén defectuosos y los pines de los distintos componentes del robot no lleguen a hacer contacto cuando están pinchados
  • Compilación y carga correcta del programa
  • Funcionamiento correcto del periférico (que los leds y los sensores no estén fundidos, los motores estropeados, las resistencias del divisor mal soldadas...)
  • Integrados DIP-8 (multiplexor y expansor I2C) en sus posiciones correctas, que no estén intercambiados ni orientados incorrectamente (es bastante probable que eso haga que se quemen)
  • Que los integrados DIP-8 no estén quemados por sobrecalentamiento al soldar (en caso de que no se utilicen zócalos para montar los integrados DIP-8)

Seguimiento de línea

¿Por qué el robot no es capaz de seguir la línea?

En principio, si el robot pasa todos los test satisfactoriamente según lo indicado en el tutorial 5, debería ser capaz de seguir la línea. Si no pasa los test, acude a la pregunta "Por qué algunos programas de test no funcionan", del apartado de programación.

Posibles causas de que no siga la línea:

  • Los sensores están mal calibrados: sigue las indicaciones del programa de seguimiento de línea. No levantes los sensores de la pista durante la calibración
  • La pista no es lo suficientemente homogénea y tiene manchas o reflejos que engañan a los sensores
  • Las constantes del PID no son las adecuadas: modifica Kp, Ki y Kd siguiendo las indicaciones de la pregunta "Cómo calibro el PID para seguir la línea" de este mismo apartado

¿Por qué el robot se sale de la línea?

Si el robot es capaz de reconocer y seguir la línea, el hecho de que la siga o se salga dependerá en general de los siguientes factores:

  • Velocidad del robot: está pensado para que se pueda acelerar en rectas, lo que conlleva tener unos motores sobredimensionados en velocidad y que no se puedan tomar las curvas de radio mínimo a una velocidad del 100%
  • Radio de las curvas: en las normativas clásicas de velocistas suele haber un radio mínimo de 40 cm
  • Adherencia de ruedas: de goma, espuma, silicona, poliuretano... cada rueda es diferente y no agarra igual para una determinada superficie. Este kit incorpora unas ruedas básicas de goma, pero se pueden mejorar siguiendo algunos consejos mencionados más arriba en el apartado de ruedas
  • Superficie del circuito: las ruedas no agarran igual en lona de PVC (suele ser la superficie típica de competición), papel, parqué, el suelo de la cocina...
  • Parámetros del PID: una kp demasiado baja hará que no siga la línea por tardar en responder; una ki demasiado alta hará oscilar el robot en curvas cerradas hasta que se salga; etc. Hay que conseguir una buena calibración del PID, que variará según los puntos anteriores

¿Cómo calibro el PID para seguir la línea?

  1. Pon Kp, Ki y Kd a cero
  2. Ve aumentando poco a poco Kp
  3. Cuando el robot empiece a cabecear, baja un poco el valor de Kp y déjalo fijo
  4. Realiza los pasos 2 y 3 para calibrar Ki y Kd

La respuesta varía si se modifica la velocidad lineal del robot, por lo que habrá que hacer la calibración para cada una de las velocidades que se vayan a emplear.

En el caso del seguimiento de línea no es imprescindible la utilización de la parte integral. Podría prescindirse de ella estableciendo Ki a cero.

Clone this wiki locally