Archivo por meses: noviembre 2019

Sensores reflectivos QTR para siguelíneas

¿Quién dice que la electrónica no es linda? Este lo que se ve en la imagen de abajo es un sensor por reflexión a utilizar en un robot sigue-líneas avanzado, para que pueda seguir líneas a alta velocidad…

Sensor QTR-8RCSensor QTR-8RC

Por ahora el robot didáctico utilizará con unos sensores más básicos que se llaman CNY70, porque el primer paso en el aprendizaje es hacer que los chicos entiendan bien el concepto. ¡Pero después vamos a hacer el robot que VUELE sobre las pistas!

Ejemplo: VIDEO

Sensor CNY70Sensor CNY70

Estos son sensores individuales para robots siguelíneas de la misma familia, cada uno equivalente al CNY70. El tamaño del sensor en sí es mucho más pequeño; en este caso, están montados sobre un módulo que ya contiene la electrónica necesaria para adaptar y conectar el sensor al microcontrolador.

Sensores QTR-1RCSensores QTR-1RC

Sensor QTR-1RC

Escala del sensor comparada con un fósforo

Los pequeños rectangulitos negros son un conjunto de emisor de infrarrojo y receptor, que emiten un haz contra el suelo y detectan el brillo (o capacidad reflectiva) que tiene éste. Utilizando esta medición y los algoritmos correspondientes en el programa de manejo, el robot puede desplazarse con precisión sobre una línea trazada en el suelo. Los sensores vienen en pares porque va uno de cada lado de la línea guía a seguir.

Sensores QTR-8RC

El sensor para siguelíneas de alta velocidad, en lugar de tener dos sensores (uno a cada lado de la línea) lleva una hilera de 8 (cuatro a cada lado). Esto permite que el robot siga la línea a gran velocidad y con un andar de regulación sobre la línea menos abrupto que cuando trabaja con dos únicos sensores.

Sensor QTR-8RCQTR-8RC

Sensor QTR-8RC / escala con un fósforoQTR-8RC comparado con fósforo

El resistor es para cambiar si se quiere una salida analógica o una salida de pulso (midiendo la longitud del pulso se sabe cuánto está reflejando el sensor, en el caso de que la salida sea analógica, hay que utilizar un convertidor A/D = analógico a digital).


La medición de longitud de pulsos es una opción recomendable, ya que se puede hacer por software o utilizando módulos internos del microcontrolador que son específicos para medir longitud de pulsos. Por esta razón los LEDs no están alimentados todo el tiempo; existe una línea que permite que el funcionamiento del sensor sea pulsado en lugar de poseer una alimentación constante. En la configuración con salida analógica, los LEDs podrían estar alimentados siempre (aunque esto produce un consumo mayor de energía de las baterías). Cuando el circuito está basado en pulsos RC, el funcionamiento debe ser sí o sí pulsado, para que la carga y descarga del capacitor a través del resistor produzca el pulso proporcional a la calidad del reflejo en el objeto inferior, la banda colocada sobre el piso que debe seguir el siguelíneas. No se obtendrían pulsos con una alimentación constante.

DetallesQTR-(RC
QTR-(RC

El conjunto de 8 sensores tiene una marca a lo largo de la cual es posible cortar sin dañar el circuito, lo que lo convierte en un conjunto de 6 sensores por un lado, y uno de dos por el otro.

Sensor QTR-8RCQTR-8RC

CircuitoCircuito

El sensor se instala en el frente del robot, como se observa en las fotografías que siguen con diversos modelos de robots. Obsérvese la escala, teniendo en cuenta que el sensor de reflexión QTR tiene sólo 7 cm de longitud y 12,5 mm de ancho.

Robots con sensores QTR-8RCRobot 1
Robot 2
Robot 3
Robot 4

Para más detalles se pueden leer los datos de los fabricantes.






Robots: Visión estereoscópica en tiempo real por medio de una cámara única

Este escueto artículo, basado en un original en inglés de Nelson Bridwell (Mirage Robotics, LLC). Lamentablemente su artículo ya no está en internet, o no lo encuentro en el enlace que tenía), aporta, creo yo, algunos conceptos interesantes, y nos muestra una idea aplicable a nuestros trabajos.

Una de las dificultades de la visión estereoscópica en tiempo real, para nada trivial, es lograr la adquisición simultánea de imágenes sincronizadas a partir de dos cámaras en dos posiciones separadas.

La posibilidad de lograr esto con una cámara única y un espejo, ubicados en una disposición de geometría simple, es una solución poco conocida.

Vista lateral de la distribución geométrica del espejo y la cámara

Vista lateral de la distribución geométrica del espejo y la cámara

Estéreo cabeza abajo

Debido a que los obstáculos y objetos de interés por lo general no están ubicados por encima de un robot móvil, puede ser una buena idea montar la cámara en la parte superior, debajo de un espejo cuya parte reflectora apunta hacia el piso. Esto nos aportará una visión estéreo despejada del espacio de navegación.

Imagen de ejemplo

Imagen de ejemplo

Esta disposición puede tener el beneficio adicional de aislar la cámara del resplandor de la luz del ambiente, lo que resultará en un mayor rango de intensidades en los objetos de alrededor.

También debería minimizar el oscurecimiento del espejo a causa de la acumulación de polvo en su superficie.

Vista lateral del montaje sobre un robot

Vista lateral del montaje sobre un robot

Visión estereoscópica múltiple

Visión múltiple

Existiendo una variedad de bibliotecas de procesamiento de imagen, la determinación de distancia y posición no debería ser una gran dificultad si se programa en un microcontrolador con capacidad suficiente para recibir los cuadros de video y compararlos. Por ejemplo, habría que echarle una mirada a MATLAB_Arduino. Otra opción (mucho más simple porque la cámara ya se ocupa del procesamiento de las imágenes) sería utilizar una cámara Pixy para medir distancia, ya que solo es necesario comparar valores aportados por la Pixy en formato texto, con las posiciones XY de un polígono; o un par de cámaras para obtener posición en el entorno y distancia. Todo en tiempo real.

La cámara Pixy es provista con un cable especial para enchufarla directamente en un Arduino, y un cable USB para conectarla a una Raspberry Pi, para que se pueda comenzar rápidamente. Y si no trabaja con Arduino o Raspberry Pi, no hay problema. La Pixy tiene varias interfaces (SPI, I2C, UART y USB), y sus comunicaciones son simples, por lo que en poco tiempo se logra la comunicación de la cámara con el microcontrolador elegido.

Más adelante publicaré un artículo con mis experiencias y diseños realizados en base a la cámara Pixy.




Actuadores – Músculos neumáticos

Los músculos neumáticos son un tipo de dispositivo relativamente nuevo que produce un movimiento lineal utilizando aire a presión, pero no utiliza pistones como los actuadores neumáticos e hidráulicos habituales. Se contrae cuando se lo activa, como los músculos biológicos.

Estos músculos son fáciles de usar, no son muy costosos, y según quienes los fabrican, para ciertos usos (como por ejemplo en miembros manipuladores de robots) son más eficaces que los cilindros neumáticos estándar.


Demostración: al contraerse, un músculo neumático de 30 mm puede doblar un grueso clavo de hierro;

Haciendo algún tipo de comparación, en cierto modo los músculos neumáticos son similares a los alambres de nitinol, más que nada por su capacidad de contraerse cuando se los activa.

Una comparación rápida entre las dos opciones da estos resultados:

El alambre de nitinol sólo se contrae 5 a 7% de su longitud. El músculo neumático se contrae normalmente un 25% de su longitud, y puede llegar a un 40%. El alambre de nitinol consume mucha energía eléctrica y genera calor que se debe hacer disipar de algún modo.

Aunque el tiempo de reacción de un músculo de alambre puede ser rápido, su tiempo de ciclo (calefacción-enfriamiento-calefacción) suele ser muy largo. El músculo neumático funciona con aire comprimido. Aún cuando se consume energía eléctrica para comprimir el aire, este aire comprimido se puede almacenar. La respuesta de los músculos neumáticos es rápida y el ciclo es veloz.

Hacer una comparación de fuerza y del consumo total de energía es difícil. Un músculo neumático pequeño puede levantar 3 kg, mucho más que un alambre estándar de nitinol. El alambre de nitinol es más delicado, pero solamente cuando los diámetros de estos alambres son pequeños. Un alambre grueso de nitinol —no se fabrican muy gruesos porque serían muy costosos— tendría una fuerza de contracción de centenares de kilogramos (incluso millares), aunque consumiría una enormidad de corriente eléctrica.

El músculo neumático es un tubo alargado construido con una malla de plástico negro. Dentro de él hay un tubo de goma blanda. En los extremos posee unos clips de metal que lo cierran. La red plástica toma forma de lazos en cada extremo, que se sujetan con los clips del metal. Los lazos se utilizan para fijar el músculo neumático a un dispositivo. En los tamaños mayores, los fabricantes utilizan uniones sólidas en lugar de los lazos.

Cuando se presuriza un músculo neumático, la cámara de goma se infla. La cámara presiona contra la red de sujeción de plástico negro, que también se extiende. Al aumentar el grosor de la red plástica, su longitud se acorta. Esto causa que la longitud total del músculo neumático se reduzca, produciendo la contracción.

Figura

Diámetro de la cobertura trenzada

Longitud

Tamaño de la conexión de aire

Fuerza de tracción con 3,5 bar de presión

Fuerza máxima de tracción

6 mm

150 mm (estirado)

4 mm

3 kg

7 kg

20 mm

210 mm (estirado)

4 mm

12 kg

20 kg

30 mm

290 mm (estirado)

6 mm

35 kg

70 kg



Una aplicación bien sofisticada y exigente de estos músculos es una mano robótica que fabrican los mismos que producen estos actuadores (Shadow Robot Company), la mano Shadow Dextrous. Este miembro para robots es manejado por 36 músculos neumáticos.

Más datos:

      Air Muscles
      Cómo fabricar su propio músculo neumático (inglés)




Servos: características básicas

En primer lugar quiero aclarar que, si bien hoy se utiliza ampliamente la palabra abreviada «servo», la verdadera denominación de lo que voy a describir aquí es «servomotor». Existen otra clase de servos (o mejor expresado, servomecanismos) que no son precisamente motores. También hay servos no giratorios.

Diversas clases de servos, incluyendo lineales


Por ejemplo, los sistemas que poseen cilindros hidráulicos pueden ser servocontrolados. Estos cilindros hidráulicos o neumáticos, en su versión más simple, se mueven de extremo a extremo. Pero no siempre es así. En muchos casos es necesario que posean realimentación, lo que les permite ubicarse con precisión en cualquier lugar de su recorrido. Para esto se utilizan sensores de recorrido lineales, como potenciómetros lineales, sistemas ópticos o unos dispositivos llamados LVDT.

De modo que, aclaremos, un actuador mecánico controlado no siempre debe ser rotativo, aunque la mayoría de las veces así es.

Definamos, ahora:

Un servomotor es un motor eléctrico que consta con la capacidad de ser controlado, tanto en velocidad como en posición.

Un servomecanismo es un actuador mecánico —generalmente un motor, aunque no exclusivamente—, que posee los suficientes elementos de control como para que se puedan monitorizar los parámetros de su actuación mecánica, como su posición, velocidad, torque, etc.

Por la explicación que he encontrado en otros sitios parecería que sólo se le llamaría «servo» a aquellos motores con reducción y control de posición que se utilizan extensivamente en modelismo, para efectivizar los movimientos controlados por radio (incluyendo en la entrada correspondiente de la Wikipedia, por lo menos por ahora). Por supuesto que no es así.

En realidad se utilizan muchos otros tipos de servos (o servomotores, mejor) en equipos industriales y comerciales, desde una diskettera en nuestra computadora —o en la videocassettera hogareña—, a las unidades de almacenaje y entrada y salida de datos de grandes sistemas de computación (hoy, más que nada, discos magnéticos), y hasta en los ascensores en edificios. El motor de un ascensor, junto con su equipo de control y detectores de posicionamiento, no es ni más ni menos que un servomotor. El mecanismo que saca para afuera el porta-CD de la lectora de CD de su computadora es un servomotor.

¿Qué convierte un motor en servomotor? O mejor dicho ¿por qué se considera que algunos motores son servomotores y otros no? La respuesta no es demasiado complicada: un servomotor tiene integrado o adosado al menos un detector que permita conocer su posicionamiento y/o velocidad. A los detectores de posición se les llama «encoders».

Aclarado esto, pasaré a esos servos a los que se refieren en los sitios que dije antes. Hablo de los servos para radiocontrol de modelos, como los de marca Futaba, Hitec, etc. Se trata de elementos para control de posición de alerones, timón, dirección (en autos), alimentación de combustible, etc, para modelos a escala, que se han vuelto populares en robótica porque entre los disponibles en el comercio hay algunos bastante económicos, lo que los hace de más fácil acceso cuando se trata de la construcción de proyectos personales de robótica y automatización casera.

De estos servos de modelismo, comencemos con los servos que se conocen como «analógicos».

Servo RC

Servo analógico para modelismo

Estos servomotores se componen, en esencia, de un motor de corriente continua, un juego de engranajes para la reducción de velocidad, un potenciómetro ubicado sobre el eje de salida (que se usa para conocer la posición) y una plaqueta de circuito para el control.

Como una imagen vale más que mil palabras, veamos un despiece.


Si lo que se desea controlar es la posición de un servomecanismo, como en este caso, en lugar de un tacómetro (que es para medir velocidad) necesitamos un encoder de posición.

Si hablamos de un servo cuyo movimiento es giratorio, será necesario un encoder (un detector que codifica la posición) que nos dé un valor diferente a su salida según cual sea su posición en grados.

Los servos que se usan en modelismo son de este tipo. Como dije antes, por lo general poseen un motor de CC, que gira a velocidad alta, una serie de engranajes para producir la reducción de velocidad de giro y acrecentar su capacidad de torque, un potenciómetro conectado al eje de salida (que es ni más ni menos que el encoder) y un circuito de control de la realimentación.

Estos servos reciben señal por tres cables: alimentación para el motor y la pequeña plaqueta de circuito del control (a través de dos cables, positivo y negativo/masa), y una señal controladora que determina la posición que se requiere. La alimentación de estos servos es, normalmente, de entre 4,8 y 6 voltios.




El estándar de esta señal controladora para todos los servos de este tipo, elegido para facilitar el uso en radiocontrol, es un pulso de onda cuadrada de 1,5 milisegudos que se repite a un ritmo de entre 10 a 22 ms. Mientras el pulso se mantenga en ese ancho, el servo se ubicará en la posición central de su recorrido. Si el ancho de pulso disminuye, el servo se mueve de manera proporcional hacia un lado. Si el ancho de pulso aumenta, el servo gira hacia el otro lado. Generalmente el rango de giro de un servo de éstos cubre entre 90° y 180° de la circunferencia total, o un poco más, según la marca y modelo.

Señal y posiciones del servo

Servo digital para modelismo

Los servos digitales tienen, al igual que los analógicos, un motor de corriente continua, un juego de engranajes reductores, un potenciómetro para la realimentación de posición y una electrónica de control embebida dentro del servo. La diferencia está en la placa de control, en la que han agregado un microprocesador que se hace cargo de analizar la señal, procesarla y controlar el motor.

La diferencia más grande de rendimiento está en la velocidad a la que reacciona el servo a un cambio en la señal. En un mismo lapso, el servo digital puede recibir cinco o seis veces más pulsos de control que un analógico. Como resultado la respuesta del servo a un cambio en la orden de posición es mucho más veloz. Este ritmo mayor de pulsos también produce mejoras en el rendimiento electromecánico del motor (mayor velocidad y más fuerza). Esto se debe a que en cualquier servo (de ambos tipos) el motor recibe, para su control, una alimentación conmutada. En los servos analógicos, la señal está conmutada a un ritmo de entre 10 y 22 ms. Si el ajuste que se requiere es muy pequeño (un ángulo pequeño de giro), los pulsos son muy delgados y están muy separados (10 a 22 ms). La integración de estos pulsos es la que da la alimentación de potencia al motor, y en consecuencia la que lo hace mover. Una integración de pulsos delgados y muy separados puede dar resultados erráticos. Suele ocurrir que cuando llega el otro pulso, el motor se ha pasado de la posición y deba reajustarse, algo que ocurre constantemente. En los servos digitales la señal llega mucho más seguido y por esto la integración es más estable y la variación de corriente de control es más firme.

En los servos digitales, la señal está separada por unos 3,3 ms. La separación entre pulsos varía en cada marca de servo digital, pero el ritmo de llegada de los pulsos es de al menos 300 veces por segundo versus 50 a 100 en un analógico.

La ventaja de los digitales se reduce un poco cuando se habla de consumo (algo muy importante en, por ejemplo, un avión radiocontrolado, pero también en los robots), ya que el consumo del circuito y de los ajustes más continuados produce un gasto mayor de energía, y también un mayor desgaste del motor.

Los servos digitales son capaces de memorizar parámetros de programación, que varían de acuerdo a cada fabricante pero en general son:

  • 1 – Se puede programar el sentido de giro como «normal» o «inverso».
  • 2 – Se puede variar la velocidad de respuesta del servo.
  • 3 – Se puede programar una posición central (o posición neutra) diferente, sin afectar los radios de giro.
  • 4 – Se pueden determinar diferentes topes de recorrido para cada lado.
  • 5 – Es posible programar qué debe hacer el servo en caso de sufrir una pérdida de señal.
  • 6 – Es posible programar la resolución, es decir cuánto se mueve el control en el radio sin obtener un movimiento en el servo.

Estos valores pueden ser fijados en los servos utilizando aparatos destinados a la programación, que son específicos para cada marca.


Manejo de potencia para motores con el integrado L293D

El integrado L293D incluye cuatro circuitos para manejar cargas de potencia media, en especial pequeños motores y cargas inductivas, con la capacidad de controlar corriente hasta 600 mA en cada circuito y una tensión entre 4,5 V a 36 V.

L293D

Los circuitos individuales se pueden usar de manera independiente para controlar cargas de todo tipo y, en el caso de ser motores, manejar un único sentido de giro. Pero además, cualquiera de estos cuatro circuitos sirve para configurar la mitad de un puente H.

El integrado permite formar, entonces, dos puentes H completos, con los que se puede realizar el manejo de dos motores. En este caso el manejo será bidireccional, con frenado rápido y con posibilidad de implementar fácilmente el control de velocidad.

Diagrama detallado del circuito interno

Diagrama simplificado

Las salidas tienen un diseño que permite el manejo directo de cargas inductivas tales como relés, solenoides, motores de corriente continua y motores por pasos, ya que incorpora internamente los diodos de protección de contracorriente para cargas inductivas.

Las entradas son compatibles con niveles de lógica TTL. Para lograr esto, incluso cuando se manejen motores de voltajes no compatibles con los niveles TTL, el chip tiene patas de alimentación separadas para la lógica (VCC1, que debe ser de 5V), y para la alimentación de la carga (VCC2, que puede ser entre 4,5V y 36V).

Las salidas poseen un circuito de manejo en configuración «totem-pole» (término en inglés que se traduce como «poste de tótem», nombre que, gráficamente, nos remite a un «apilamiento» de transistores, como las figuras en los famosos totems indígenas).

En esta estructura, unos transistores en configuración Darlington conducen la pata de salida a tierra y otro par de transistores en conexión seudo Darlington aporta la corriente de alimentación desde VCC2. Las salidas tienen diodos incorporados en el interior del chip para proteger al circuito de manejo de potencia de las contracorrientes de una carga inductiva.

Estos circuitos de salida se pueden habilitar en pares por medio de una señal TTL. Los circuitos de manejo de potencia 1 y 2 se habilitan con la señal 1,2EN y los circuitos 3 y 4 con la señal 3,4EN.

Las entradas de habilitación permiten controlar con facilidad el circuito, lo que facilita la regulación de velocidad de los motores por medio de una modulación de ancho de pulso. En ese caso, las señales de habilitación en lugar de ser estáticas se controlarían por medio de pulsos de ancho variable.




Las salidas actúan cuando su correspondiente señal de habilitación está en alto. En estas condiciones, las salidas están activas y su nivel varía en relación con las entradas. Cuando la señal de habilitación del par de circuitos de manejo está en bajo, las salidas están desconectadas y en un estado de alta impedancia.

Conexionado para un motor con giro en ambos sentidos (lado izquierdo) y con motores con giro en sentido único en dos salidas (lado derecho)


Por medio de un control apropiado de las señales de entrada y conectando el motor a sendas salidas de potencia, cada par de circuito de manejo de potencia conforma un puente H completo, como se ve en el diagrama de arriba, lado izquierdo. En la tabla de funcionamiento que sigue se puede observar los niveles TTL que corresponden a cada situación de trabajo:

Ejemplo de circuito en forma de puente H (para control bidireccional del motor) y su tabla de manejo

Disipador

Las patas centrales de la cápsula del chip están pensadas para proveer el contacto térmico con un dispador que permitirá lograr la potencia máxima en el manejo del integrado. En la figuras que siguen se observa la distribución de pines afectados a esta disipación, el área de cobre que se deja en el circuito impreso por debajo y a los lados del chip, y el diseño del disipador que propone el fabricante. La hoja de datos aporta una curva que permite una variación de estos tamaños según la potencia a manejar.

Shield de Arduino

Esta plaqueta posee dos L293D, o sea que permite controlar 4 motores de CC o dos motores paso a paso. Tiene aparte otras salidas.

Diagrama de la placa

Utiliza estos pines en el Arduino UNO:

Digital 4 – DIR_CLK
Digital 7 – DIR_EN
Digital 8 – DIR_SER
Digital 12 – DIR_LATCH
Digital 11 – PWM_Motor1
Digital 3 – PWM_Motor2
Digital 6 – PWM_Motor3
Digital 5 – PWM_Motor4
Digital 9 – Servo_1
Digital 10 – Servo_2

Descargamos ahora una librería de Adafruit para manejar el Shield directamente, ya que si no el manejo podría resultar bastante complicado.

La librería que necesitamos es esta adafruit-Adafruit-Motor-Shield-library-8119eec, y para instalarla seguimos el procedimiento habitual.

Para iniciar la plaqueta, necesitamos incluir este par de instrucciones:

La primera línea incluye la librería de AdaFruit en el programa. La segunda crea una instancia de un motor conectado a la puerta M1. La inicialización se define con el parámetro que le pasamos, que puede ir del 1 = M1 al 4 = M4.

Para establecer la velocidad del motor:

La primera línea define la velocidad el motor a 200. El valor 255 sería el máximo de RPM. La segunda línea indica que deseaemos dejar el motor en punto muerto.

Para que el motor avance usamos:

Y para que retroceda:

Es todo lo necesario para controlar un motor.

Si queremos hacer un primer programa sencillo que haga avanzar el motor unos segundos y después retroceda, he aquí el programa:

En caso de querer controlar cuatro motores:

Enlaces: L293D, Hoja de datos – Quadruple Half-H Drivers

Artículos relacionados:
Uso de la placa L298N para motores de CC
Puente H: Placa controladora de motores L9110S
Guía rápida de placas de control de motores
Manejo de potencia para motores con el integrado L293D
Control de motores de CC por Ancho de Pulso (PWM)