Archivo de la categoría: Robótica

Global Robot Expo 2017

Un año más he acudido a la Robot Global Expo que se celebra estos días en Madrid. Repiten expositores del año pasado y también hay nuevos.

Pongo algunas fotografías que me han parecido interesantes, no están todos los que son, pero si son todos los que están.

Humanoides

Brazos

Drones

Rovers

Acuáticos

Asistencia

Exoesqueletos

Para el hogar

Impresoras 3D grandes

Otros

Sensor laser omnidireccional

Diseño del Hiperloop de la Universidad Politécnica de Valencia

El software de CAD 3D

Sensores acoplables

Humanoids 2014

BannerRobots

 

Del martes 18 al jueves 20 de Noviembre se celebrará en el hotel Melía Castilla de Madrid la conferencia Humanoids 2014. Este evento, organizado por la Universidad Carlos III y el IEEE Robotics & Automation Society, estará enfocado este año en la iteración entre máquinas antropomorfas y humanos.

También se dará esos días la competición HUMABOT, donde robots humanoides competirán por ser el perfecto asistente en el hogar.

Como visitas técnicas, se podra ver la sede AIRBUS en Getafe, la fábrica de PSA (Peugeot – Citröen) en Madrid, el Robotics Lab de la Universidad de Carlos III y el Centro de Automática y Robótica del CSIC-UPM.

Bilbot

bilbot

Un nuevo evento sobre robótica se celebrará probablemente en Junio de este año. En esta ocasión será en Bilbao y estará centrado en lucha de robots, o como más se conoce Robot Wars.

El evento se llama Bilbot y la empresa encargada de organizarlo es BlowOut Events. Aún no se conocen fechas ni el lugar exacto, pero se puede hacer la pre-reserva (no obliga a nada a los interesados, no es vinculante, ni requiere aportación económica de reserva) para competir en este evento enviando los siguientes datos a blowoutbilbao@gmail.com:

  • Nombre “artístico” del equipo de creadores
  • Nombre del robot concursante
  • Universidad, Escuela, o Asociación a la que pertenezcan
  • Datos de los componentes del equipo, correo electrónico y otras formas de contacto.

Los premios son los siguientes:

  • 1º Clasificado: 4.000 Euros, trofeo y regalo promocional
  • 2º Clasificado: 2.000 Euros, trofeo y regalo promocional
  • 3º Clasificado: 1.000 Euros, trofeo y regalo promocional
  • 4º Clasificado:    500 Euros, diploma y regalo promocional
  • 5º Clasificado:    400 Euros, diploma y regalo promocional
  • 6º Clasificado:     300 Euros, diploma y regalo promocional
  • 7º Clasificado:     200 Euros, diplpoma y regalo promocional
  • 8º Clasificado:     100 Euros, diploma y regalo promocional
  • Resto de participantes: Diploma y regalo promocional

Las reglas de participación son estas:

  1. Los robots podrán fabricarse con cualquier material no peligroso, y su masa máxima no podrá superar los 10 kg.
  2. Como sistemas de propulsión, movimiento y motorización, se podrán usar mecanismos y acumuladores eléctricos, cinéticos, hidráulicos o neumáticos, así como cualquier dispositivo electrónico digital o analógico, palancas, engranajes, correas y demás sistemas mecánicos.No se pueden emplear motorizaciones de explosión ni nucleares.
  3. No se permite el uso de elementos basados en explosivos, gases inflamables o que contengan ácidos corrosivos, materiales radiactivos u otras sustancias peligrosas.
  4. Se permite el uso de gases inertes o inócuos, tales como Helio, Dióxido de Carbono, aire comprimido, Nitrógeno, etc,   incluso  contenidos en un depósito a presión, siempre que la misma no supere los 50 bar (51 atm), teniendo que ser su masa, inferior a 90 gr.
  5. Las eliminatorias se llevarán a cabo mediante el sistema de liguillas.
  6. Los combates tendrán una duración máxima de 4 minutos, al final de los cuáles, si ninguno de los robots es eliminado, se decidirá el ganador mediante decisión arbitral, atendiendo al mayor dominio de alguno de los competidores, los daños causados a su adversario y otros criterios similares.
  7. Gana el robot que consiga inutilizar a su adversario, bien por destrucción total, por inmovilización o neutralización durante 30 segundos o por haberlo sacado del área de combate, que consistirá en un cuadrado de 8 por 8 metros, limitado por una protección transparente, rodeando una zona de confinamiento de 1 por 1 metros. Caer en dicha zona, supone la pérdida del combate.

Para ir abriendo boca, un vídeo de cómo son las robot wars:

Ejemplo de cómo hacer un robot de combate

Una tienda donde comprar componentes (no tenemos ningún contrato ni nada parecido con ella).

¿Os atreveis a competir?

Calcular el torque de los motores para un robot velocista o de sumo

Siguiendo con las calculadoras online, en esta ocasión pongo a vuestra disposición una calculadora para que podáis calcular qué motores necesitáis en vuestro robot velocista o de sumo para que se pueda mover a la velocidad deseada. Está basada en los conceptos de dinámica de la Society Of Robots, más concretamente en la calculadora RMF, pero simplificándolo bastante.

Cantidad de motores
Peso que el robot tiene que mover
Velocidad requerida
Aceleración requerida
Diámetro de la rueda
Velocidad del motor
Eficiencia del motor %
Torque del motor

Si borráis el campo de velocidad del motor, se recalculará para daros el valor más aproximado.

Conversor online de torque

Cuando queremos comprar un motor para nuestro robot una de las primeras cosas en que nos fijamos es el torque (o par motor), dicho de otro modo queremos saber la fuerza que tiene ese motor para girar un eje con una masa determinada a una distancia concreta. La medida estándar es el newton/metro pero existen otras medidas para representarlo, por eso en este artículo ofrezco un sencillo conversor (o calculadora como prefiráis) para hacer las conversiones entre las medidas más usadas. El uso de la sección de potencia es opcional y afectará directamente a los valores original y resultado. Espero que os sea útil:

Potencia
Velocidad
Masa Distancia
Original
Resultado

Si veis que falta alguna medida podéis pedirla en los comentarios para incluirla.

Cuentavueltas y cronómetro para robots velocistas

Cuando has fabricado un robot velocista y has hecho una pista para probarlo siempre es necesario medir los tiempos que emplea en dar una vuelta a la pista. Así podrás comprobar en cuantas décimas de segundo has mejorado tu robot. Ya sea porque le has cambiado el código de control, has ajustado alguna constante o porque hayas modificado algo de la mecánica; esas décimas que ahorres en dar una vuelta son cruciales para mejorar su rendimiento de cara a las competiciones. Puedes medirlo a mano con un cronómetro, pero nunca tendrás la precisión suficiente y el margen de error cuando quieres medir las mejoras en décimas de segundo es grande. En este artículo voy a explicar cómo fabricar un medidor de vueltas o cuentavueltas sencillo.

IMGP2895

El cuentavueltas se compone de dos módulos. El módulo principal contiene los siguientes materiales:

  • Un microcontrolador PIC16F628A.
  • Un display HD44780.
  • Un módulo bluetooth HC06.
  • Un regulador de tensión 7805.
  • Un LDR.
  • Un botón.
  • Un diodo led.
  • Un buzzer.
  • Un cristal de cuarzo de 20Mhz.
  • Dos condensadores de 22pF.
  • Un condensador de 0,1uF.
  • Un condensador de 0,22uF.
  • Una resistencia variable de 10K Ω.
  • Una resistencia de 220 Ω.
  • Una batería Lipo de 7,4V o 5 pilas de 1,5V o una pila de 9V.

cronometro

El módulo secundario en un puntero laser de 0,5mW. Es importante que su potencia sea de 0,5mW (NO 5mW como muchos) ya que valores mayores son peligrosos para la vista si por algún casual el haz de láser hace contacto con la retina de tus ojos (directamente o por reflejo especular). Úsalo bajo tu responsabilidad y con las medidas de seguridad adecuadas.

La idea es sencilla: el láser está apuntando constantemente hacia el LDR a pie de pista. Cuando el robot velocista pasa por delante corta el haz de láser y se registra en el sistema una vuelta. El sistema puede estar monitorizado tanto desde el propio display del módulo principal como remotamente desde un ordenador a través de bluetooth.

El LDR tiene un caperuzón negro hecho con cartulina negra para que no le afecte la luz de ambiente. El conjunto está pegado a una base de cartón para apoyarlo en el suelo y evitar que se mueva.

IMGP2902

El puntero láser tiene otro caperuzón negro hecho con la misma cartulina, pero está completamente tapado excepto por un agujero donde saldrá un haz de laser muy pequeño, pudiendo así ser cortado más fácilmente por el robot cuando pase por delante. El conjunto está igualmente pegado a una base de cartón para apoyarlo en el suelo y evitar que se mueva.

IMGP2904

Al principio hay que apuntar el láser hacia el LDR moviendo el puntero. Cada vez que el haz de láser incida sobre el LDR el diodo led se encenderá y se oirá un pitido en el buzzer. Así sabremos que está apuntando correctamente.

IMGP2900

Se pulsa el botón, se apaga el led y a continuación muestra los datos de la última carrera que ha grabado en la eeprom del microcontrolador.

IMGP2901

De izquierda a derecha y de arriba a abajo:

  • Tiempo de la vuelta actual (a 0 por que ahora no está corriendo).
  • Tiempo de la última vuelta dada.
  • Número de vueltas hechas.
  • Tiempo total de la carrera.

Se vuelve a pulsar de nuevo el botón, se enciende el led y se ponen los contadores a 0, esperando a que el robot corte por primera vez el haz del láser para empezar la cuenta.

IMGP2905

Cuando el robot pasa a través del haz de láser, se apaga el led y empieza a contar automáticamente.

IMGP2903

Cada vez que el robot corta el haz de láser, suena un pitido, se pone a 0 el contador de la vuelta actual, se actualiza el valor de la vuelta anterior y se suma 1 al número de vueltas. Así hasta que se pulse el botón o se llegue a la vuelta 10, momento en el que el cronómetro se parará para poder visualizar los resultados y guardarlos en la eeprom del microcontrolador.

Si se quiere volver a medir sólo hay que pulsar el botón de nuevo, se enciende el led, se ponen los contadores a 0 y se espera a que el robot corte el haz de láser de nuevo.

Todos los datos son enviados por bluetooth a 115200 bps, por lo que se puede hacer un seguimiento desde un ordenador usando Processing sin tener que estar cerca del display o para visualizarlo en una pantalla panorámica en un evento con espectadores.

cuantavueltas

El sketch de processing: Cuentavueltas_Processing

El código fuente y el .hex del programa del microcontrolador PIC. Está hecho en PCW CCS: Cronometro_PIC

MakerBeam: Construye tus propias estructuras

Cuando queremos construir una estructura (chasis, soporte, etc) nos encontramos con que a veces es complicado conseguir unir las piezas que la conforman. De hecho muchas veces tenemos piezas planas que queremos juntar para formar un objeto con volúmen.

En mi caso, para construir un robot de sumo podía añadir los motores y la electrónica a una base plana, pero al querer juntar dos palas haciendo ángulo en ambos extremos y un techo ya la cosa se volvía complicada, sobre todo teniendo en cuenta que no tengo herramientas para cortar, doblar o moldear aluminio.

Para estos menesteres hay una solución llamada MakerBeam, la cual ofrece una serie de barras de aluminio (ellos lo llaman vigas) en forma de X y unos ángulos (o escuadras) de acero para poder crear estructuras. Recuerda un poco al Meccano, pero estas piezas están basadas en el estándar industrial T-slot, usado ampliamente para fabricar automatismos, robots y armazones para máquinas. Basándose en ese estándar, Sam Putman diseñó unas piezas más pequeñas y las categorizó como Mini-T. Estas barras son de distintos tamaños y los ángulos de distinta inclinación permitiendo crear estructuras juntando unas con otras o atornilladas a una base.

La longitud de estas barras es variable pudiendo crear diferentes estructuras, pero su altura y anchura es de 10mm, por lo que encajan a la perfección unas con otras. Tienen forma de X para tener canales donde se meten los tornillos M3 y unir unas con otras mediante ángulos, sujetando el conjunto con tuercas.

Las ventajas de usarlo son:

  • Componentes y módulos compatibles entre si.
  • Tiempo de diseño y de montaje menor.
  • Todos los elementos pueden ser combinados.
  • Conexiones roscadas para un fácil montaje y desmontaje.
  • Todos los elementos pueden ser reutilizados.
  • Estructuras de poco peso con alta capacidad de carga.
  • Los perfiles de aluminio proporcionan un diseño atractivo.
  • El color negro anodizado es útil para la fotografía, además evita la abrasión y la corrosión.
  • Se pueden meter cables de pequeños grosor por los canales.

En su página web se pueden comprar componentes sueltos o, como en mi caso, un kit de iniciación, que por 100€ tienes varios tipos de barras y ángulos, tornillos y tuercas. Recomiendo también adquirir por 4 € más un destornillador de tuercas. Los gastos de envío son de 10€ para España (sin contar las islas Canarias).

En la anterior foto se pueden ver:

  • Bolsa de tornillos M3.
  • Bolsa de tuercas M3.
  • Bolsa de 24 ángulos de 90º.
  • Bolsa de 12 ángulos de 60º.
  • Bolsa de 12 ángulos de 45º.
  • Bolsa de 12 ángulos esquinados.
  • 4 barras de 300 mm.
  • 8 barras de 200 mm.
  • 6 barras de 150 mm.
  • 16 barras de 100 mm.
  • 8 barras de 60 mm.
  • 8 barras de 40 mm.
  • Desatornillador de tuercas.

Editado 27/08/2012: En Bricogeek sale actualmente un pelín más barato pedirlo y el transporte es más rápido, aunque estamos a expensas de ver si se sube el precio por el IVA en Septiembre, la gente de MakerBeam me han comentado que ellos también tendrán una subida similar en Octubre.

Leer múltiples sensores de infrarrojos con un sólo pin analógico / Read several infrared sensors with an unique analogic pin

Cuando queremos crear un robot que distinga el blanco del negro de una superficie tenemos que leer la posición en la que se encuentra con varios sensores infrarrojos.

To make a robot that distinguishes a black area between a white one, we need to know the position of the robot by reading the information of several infrared sensors.

Muchas veces los microcontroladores que usamos para estos robots tienen un número muy ajustado de pines de entrada y salida, y si tenemos que usar uno de estos por cada sensor infrarrojo que utilicemos vamos a tener problemas para añadirle funcionalidades a nuestro robot: Comunicaciones serie, acelerómetros, giroscopios, i2c, sensores de distancia, bumpers, botones, motores, leds, etc.

Many times the microcontrollers used for these robots have a very limited number of in/out pins, so if we have to use one of those for each infrared sensor, we will find problems to add functionalities to our robot as Serial Communications, accelerometers, gyroscopes, i2c, distance sensors, bumpers, buttons, motors, LEDs, etc..

En los robots rastreadores se usan dos sensores infrarrojos como mínimo, en los de sumo se usan 4, en los velocistas suelen ser 6 sensores o más. Todo esto provoca que tengamos que “desaprovechar” pines de nuestro micro para leer los sensores. Sin embargo hay una forma de leer varios sensores de infrarrojos usando sólo un pin analógico del microcontrolador.

Tracker robots at least use two infrared sensors; sumo robot 4 and line follower robot tend to have 6 or more sensors. All this causes the “waste” of the pins of our micro to read sensors. However, there is a way of reading several infrared sensors using only one analog pin microcontroller.

La idea proviene de este artículo, donde se explica cómo se puede leer un teclado matricial de 4 filas x 3 columnas con un sólo pin analógico de un microcontrolador PIC.  El objetivo es usar varias resistencias para que, dependiendo de la tecla que se pulse, el pin del micro reciba una tensión distinta y poder discernir cuál es la que se ha pulsado. Aquí tendremos un inversor Schmitt trigger en cuyas salidas pondremos resistencias en serie de distintos valores unidas a un punto en común. Desde ese punto se medirá el valor de la tensión, que será distinto dependiendo del sensor activo, pudiendo conocer así la posición del robot.

The idea comes from this article, which explains how to read a keypad matrix of 4 rows x 3 columns with only one analog pin of the PIC microcontroller. The objective is to use several resistors for, depending on which key is pressed, the micro pin receives a different voltage discerning this way which key has been pressed. At this point, we will have a Schmitt trigger inverter whose output have resistors connected in series of different values attached to a common point. From this point the voltage value is measured, which will be different depending on the active sensor, being able to know the position of the robot.

Primera ventaja: Tener varios sensores CNY70 o un array QTR-8A ya no es un problema porque podemos leer todos los valores  con un sólo pin de nuestro microcontrolador y dejar el resto para otras tareas.

First advantage: Having multiple CNY70 sensors or a QTR-8A array is no longer a problem because we can read the values with a single pin of our microcontroller and leave the rest for other tasks.

Segunda ventaja: Por cada sensor que se leía con un pin analógico se provocaba una pausa, ya que la lectura de un ADC tarda un tiempo en hacerse, multiplicado por el número de sensores. Con esta solución sólo se hace una lectura.

Second advantage: Each sensor read with an analog pin causes a pause, since the reading of an ADC takes a while to execute, and this pause must be multiplied by the number of sensors. Using this solution takes only one reading.

Tercera ventaja: Como vamos a usar un inversor schmitt trigger y este sólo nos da una señal alta (5 v.) o baja (0 v.) en sus salidas, con las resistencias siempre vamos a obtener los mismos resultados de tensión aunque cambiemos de entorno (pistas de competición o caseras con distinta iluminación), por tanto no hay que calibrar.

Third advantage: As it is use a Schmitt trigger inverter which only gives a high level (5 V) or low one (0 V) in their outputs, the resistors are always going to get the same voltage if you change the environment (race tracks with different lighting or home), so there is no need to calibrate.

Cuarta ventaja: Con las resistencias correctas sólo es necesario tener un ADC de 8 bits (0-255) para medir el voltaje (en tramos de 0,02 V. aproximadamente) con una referencia de 5 V.

Fourth advantage: With the proper resistors it is only necessary an ADC of 8 bits (0-255) to measure the voltage (0.02 V steps approximately) with a 5 V reference.

Voy a poner como ejemplo 8 sensores infrarrojos que leen una hoja que tiene fondo blanco (devuelven valor cercano a 0) y la línea de color negro (devuelven un voltaje mayor). Como inversor schmitt trigger podemos usar un 40106 o un 74HCT14 que tienen 6 entradas/salidas. Como se necesitan 2 entradas más para alcanzar las 8 hay que poner otro chip inversor (recomiendo distribuirlos en 4 + 4 en vez de 6 + 2). También necesitaremos 8 diodos y 9 resistencias.

Let me give an example of 8 infrared sensors that distinguish a white background (return value close to 0) and the black line on it (that return a higher voltage). As the Schmitt trigger inverter it can be used a 40106 or 74HCT14 which has 6 inputs / outputs. Since it takes 2 more entries to reach the 8 sensor, another chip inverter is necessary (I recommend distribute 4 + 4 instead of 6 + 2). We also need 8 diodes and 9 resistors.


La salida de cada CNY70 o de cada elemento del array QTR-8A va dirigido a una de las entradas de uno de los inversores.

The output of each CNY70 or each element of the QTR-8A array is routed to one input of one of the inverters.

La salida correspondiente de ese inversor va a un diodo enfrentado. Esto es necesario ya que al juntar al final todas las salidas evitamos que si una salida esta a 5 v. y otra a 0 v. se derive la corriente entre ellas.

The corresponding output of each inverter is routed to a faced diode. This is necessary since it prevents the pass of current among outputs in different states (one output in 5V and another at 0V).

Después del diodo viene la resistencia, que dependiendo del valor que tenga hará que la tensión caiga más o menos. El valor de la resistencia debe ser único con respecto al de las otras para que la caida de tensión sea diferente.

After the diode, it is placed the resistor, which depending on its value, the voltage will decrease more or less. Each resistor value must be unique in the set so the final voltage was different.

Finalmente se unen todas las salidas en otra resistencia para crear lo que se denomina un divisor de tensión. En ese punto se debe poner la línea que une al pin analógico del microcontrolador para que este pueda medir el voltaje total y diferenciar qué sensor o sensores están activos. Esta resistencia final que une al resto va a alimentación (Vcc). Esta configuración esta diseñada para poder leer el fondo blanco con una línea negra siempre y cuando los sensores nos den un valor cercano a 0 para cuando leen el fondo blanco y un valor mucho mayor para cuando leen la línea negra. Si se necesita cambiar este comportamiento, se puede conectar la resistencia final a masa e invertir los diodos.

Finally, all outputs are joined together in another resistor to create what is called a voltage divider. In that point you may put the line connected to the microcontroller’s analog pin so the total voltage can be measured and distinguish which sensor or sensors are active. This final resistor that joins the other ones must be connected to Vcc. This configuration is designed to read a black line on the white background as long as the sensors give us a value close to 0 when reading the white background and a much greater value when reading the black line. If you need to change this behavior, you can connect the ending resistor to ground and reverse the diodes.

Ahora que ya recibimos distintas tensiones en el pin analógico de nuestro microcontrolador dependiendo de los sensores que estén activos o no, debemos plantearnos cuántas medidas posibles podemos tener. Como he puesto un ejemplo de un velocista podemos tener los siguientes casos:

  • Todos los sensores leen el fondo blanco.
  • Un sensor lee la línea negra y el resto el fondo blanco.
  • Dos sensores leen la línea negra y el resto el fondo blanco.

Now that we got different voltages in the analog pin of our microcontroller depending on the sensors that are active or not, we must consider how many possible measures can we have. As continuing with the example of the line follower, we have the following cases:

  • All sensors read white background.
  • One sensor reads the black line and the rest, white background.
  • Two sensors read the black line and the rest, white background.

Así pues según la combinatoria, debemos multiplicar el número de sensores por 2. En total tenemos 16 medidas posibles (y diferentes) para todos los estados que pueden tener nuestros sensores. Pongo un esquema con los distintos estados, el voltaje resultante según una simulación y su valor de ADC de 8 bits:

Using Combinatory, we must multiply the number of sensors by 2. In total there are 16 possible (and different) measures for all states which can have in our sensors. I put a scheme with the states, the resulting voltage according to a simulation and its value in 8-bit ADC:

Aquí dejo un vídeo de una simulación en proteus sobre la activación de varios sensores (verlo en HD y a pantalla completa):

Here I show a video of a simulation in proteus on the activation of multiple sensors (see this in HD and full screen):

Para uno de sumo ya no valdría el cálculo anterior ya que habría 7 combinaciones posibles con sus 4 sensores y el fondo es negro con una línea blanca:

For a sumo robot the previous situation is no longer valid as it would be 7 combinations with 4 sensors and the background is black with a white line:

Ahora sólo quedaría medir una primera vez los distintos valores de los sensores y luego programar en nuestro microcontrolador una tabla con esos valores que nos servirá para siempre. Por supuesto como los valores de las resistencias tienen un margen de error y la caída de tensión de los diodos no suele ser siempre el mismo, sólo podremos hablar de valores orientativos y únicamente podemos sacar los valores correctos midiéndolos directamente con un polímetro o que el microcontrolador nos lo diga a través del puerto serie. Yo he probado con valores consecutivos de resistencias comerciales y me ha funcionado bien.

Last action to take is to measure the different sensor values and then program a table in our microcontroller with those values that will be correct for us forever. Of course, the values of the resistors have a margin of error and the voltage drop across the diodes is not usually the same: we are talking only about approximate values and we can only get the correct values by measuring directly with a multimeter or with the microcontroller and sending it trough the serial port. I’ve tried commercial consecutive values of resistors and it has worked well.

Finalmente comentar que si nuestro micro no tiene pin analógico pero si tres pines digitales libres podemos usar un ADC0831.

Finally, I would like to remark that if our micro does not have an analog pin but three digital pins, we can use an ADC0831.

Gracias a Maiki por la traducción / Thanks to Maiki for translation

Robot EVA

Tenía pendiente publicar el modo en el que había construido mi robot Eva. Este robot hizo el segundo mejor tiempo en la clasificación del cosmobot de 2011 y quedó entre los 8 primeros, desbancado por su hermano VELORP (otro de los robot Zero) en cuartos de final. Básicamente comparte muchas características del robot Zero ya que ha sido también probado en el medialab y se han sacado las mismas conclusiones, sin embargo la placa es distinta y la programación también.

Los componentes que tienen en común son:

Sin embargo las ruedas son las del miniz, ya que logran poner el chasis más pegado al suelo y derrapan menos.

La batería no es una Lipo 1S sino 2S (7,4 V.) enchufada directamente a la baby orangutan. Esta se encuentra entre los motores para dejar el centro de gravedad en medio y centrar más el peso en las ruedas.

Como no tiene conversor DC-DC que mantenga un voltaje continuo hacia los motores, he usado un divisor de tensión que mide el voltaje de la batería y así puede calcular el PWM que tengo que enviar a los motores según esté más o menos cargada la batería. Esto se consigue con la siguiente fórmula:

PWM * 7,4 / batería

  • PWM: Es el PWM que queremos enviar al motor.
  • 7,4: Es el voltaje normal que tiene una batería de Lipo 2S.
  • batería: Es el voltaje que tiene la batería en un momento dado.

Así si le meto 180 de PWM y tengo 8,4 voltios en la batería al final mando al motor 159 de PWM.
Si en el anterior caso en la batería tengo 7,4 voltios entonces da los 180 exactos de PWM.
Si la batería está a 7 voltios le metería al final 190 de PWM.

Como la tensión de la batería no es constante sino que tiene picos, es mejor tener 10 valores de tensión y luego calcular la media arimética para tener un valor más coherente.

El divisor de tensión también es útil para saber cuando la batería está cerca de agotarse y parar el robot, salvando así que las celdas pasen por debajo de los 3 voltios.

Este es el esquema de la placa:

A comentar:

  • Tiene un pin auxiliar por si fuese necesario usarlo para algo.
  • Tiene unos pines para añadirle un módulo bluetooth (se baja la tensión con un par de diodos para lograr 3,6 V.).
  • Usa un 7805 para alimentar los sensores y el bluetooth.

El código fuente que he desarrollado lo expongo a continuación. Este implementa el control Proporcional Derivativo y hace uso de las librerías que provee Pololu para poder manejarse con los sensores y con la baby orangutan.

velocistaB_2.h

velocistaB_2.c

Como habeis podido leer en el código fuente tiene un sistema de calibrado por el cual guarda en la EEPROM los valores minimos y máximos de los sensores la primera vez que se calibra y ya no es necesario hacerlo en futuras ocasiones a no ser que cambien las condiciones de iluminación.

La calibración consiste en dejar el robot en la pista, pulsar el botón y que de unas vueltas sobre sí mismo, lea los valores de blanco y negro y los guarde además en la EEPROM. Las siguientes veces que pulsemos el botón ya no se hará la calibración y empezará a correr el robot.

Para realizar la calibración la EEPROM debe estar vacía, y eso se consigue con el siguiente programa:

Y por último un video (gracias Puck2099) de cómo funcionó en la cosmobot (tuve que bajarle un poco el PWM porque al final derrapa un poco y cambia de sentido):