EXTREME OFFROADER


CON NXT Y 8 LEDs


Extreme Offroader con LEGO Mindstorm NXT y 8 Leds

down-naranja-flecha

DESCRIPCION


En este proyecto he combinado una colección de cosas. He partido del Set 8297 de Lego y lo he modificado. En las modificaciones, ha dejado de funcionar la marcha atrás (patinan los engranajes) y el motor que arrastra la polea.






Para compensar, he incorporado un NXT, un motor XL de Power Functions (PF) para la dirección y otro motor PF para la tracción y 8 Leds. La dirección se mueve via remota por infrarrojos (IR) también de PF. El motor de tracción está conectado directamente al NXT mediante los conectores de conversión correspondientes y se controla mediante un segundo NXT via Bluetooth (BT), recibiendo las señales de un Potenciómetro Analógico.


Los ocho Leds se controlan con los botones del NXT: los intermitentes a izquierda (delantero y trasero) con el botón izquierdo. Otro tanto con los de la derecha y su botón. Los faros con el botón naranja. Y los frenos se activan automáticamente cuando se reduce la velocidad. Para este montaje he usado un circuito digital.


El programa es algo complejo y largo, así que resulta complicado subirlo. En realidad, son 2 programas, el del NXT emisor y el del receptor. Cada acción sobre el emisor se guarda en una variable que se envía vía BT al receptor que la ejecuta.


Por cuestión de espacio, he tenido que suprimir el segundo asiento para poner el receptor de IR del PF.


Al final tienes unas fotos del montaje y un apéndice con las direcciones, conexiones del circuito y algún que otro dato como las funciones del mado de RC.


EL PROGRAMA


Aunque no voy a subir el programa, pondré trozos de cómo lo he programado yo. Los nombres de las variables son especialmente liosos. Usa los tuyos propios.


Haz el programa por fases y comprueba que funcionan antes de pasar a incorporar otra fase. Primero los 2 faros, luego los intermitentes de un lado, etc.


Empezaremos con el programa alojado en el emisor.


EMISOR

He programado todas las luces para que se enciendan cuando pulse un botón del NXT y se apaguen cuando lo apriete de nuevo. Para eso, usaré una variable lógica (luces), ya que sólo puede estar en 2 estados posibles, 0 o 1, encendido o apagado. Cada vez que apriete el botón del NXT, el operador lógico "NOT" le cambiará el valor de uno al otro.

Con los otros 2 botones de intermitente a derecha y a izquierda haremos lo mismo.


a0

El valor de esta variable lógica, que le dirá al receptor si debe encender o apagar los faros, lo enviaremos a través de bluetooth. Para esto, usamos la "Conexión 3". Cuando emparejes los 2 NXTs, usa esa conexión nº 3 para la comunicación o no llegarán los mensajes!!.


Seleccionas tipo de mensaje "logic" y enviamos el mensaje a través del buzón 1. Habrá que leer este mismo buzón en el BT de recepción para que le llegue la señal.


a1

He hecho esto mismo para el resto de variables, derecha para unos intermitentes e izquierda para los otros. El proceso es el mismo.


La señal del acelerador es algo diferente porque no es del tipo lógico (si/no), sino que es un valor numérico. Ahora hay que escalar el valor de la potencia del motor según el valor máximo de la resistencia del potenciómetro. En mi caso, el potenciómetro va desde raw = 0 hasta raw = 508.


Tienes el detalle del icono "Enviar mensaje BT". La conexión en mi caso siempre la 3. El tipo de valor, numérico. El buzón en este caso, el 4.


a2

RECEPTOR

Este programa es bastante más complejo. Soporta toda la gestión de las luces y motores. Usa tus propias variables, ya que es muy difícil que hayas usado los mismos elementos que yo, conectados en las mismas posiciones, con las mismas resistencias, etc.


Este programa tiene varias ramas, no tiene una única secuencia lineal. Esto es así porque necesitamos que actualice constantemente los valores que le llegan a través del BT para que pueda actuar en consecuencia.


Como ejemplo, la recepción del mensaje de las luces. Se puede apreciar cómo pasan el resto de caminos del programa por arriba, cada uno para un buzón de recepción del BT más la secuencia principal del programa.


Para sacar una nueva rama de programa a partir de la secuencia principal, mantén pulsado SHIFT y arrastras con el botón izquierdo del ratón desde la posición de inicio sobre la secuencia principal.


Con el icono de recepción de mensaje BT tuve que hacer un montón de pruebas hasta que funcionó. Te dejo la configuración. Curiosamente, el tipo de dato es numérico, aunque luego el cable sale de "logic out" y lo almaceno en una variable lógica. El caso es que funciona. Ya no recuerdo si seleccionando variable lógica en el tipo de dato funcionaba.


Esta rama de la scuencia es así de breve. El bucle se queda esperando a que le llegue un mensaje y en ese momento salta y almacena el valor en la variable lógica. Para eso está el cable verde que le llega al bucle. Cuando llega un mensaje, "avisa" con un "true" (un 1).


a3

El bucle del valor del motor es exactamente igual, pero el cable sale de "Number Out". En el caso del motor, almaceno el valor en una variable numérica llamada "current motor". Ese valor a su vez lo almaceno en otra variable numérica llamada "motor" que será el valor real de la potencia.


Este lío me servirá para comparar los dos valores, motor y curr motor y saber si ese valor aumenta (acelera) o disminuye (frena) y así poder encender automáticamene las luces de freno, aunque esto viene un poco más adelante.


La secuencia principal empieza así. Si la variable BT luces, la que hemos visto antes cuando le llegaba un mensaje, es true, escribo 252 en la variable luces num. Si no ha recibido ningún mensaje, la escribo 255 en esa variable para que mantenga las luces apagadas.


Al final, el buggy sumará todas estas contribuciones de cada variable (luces num, freno num, izquierda num y derecha num) para saber qué luces encender con un único icono WRITE.Así que lo mismo toca hacer para el resto de variables, cada una con sus direcciones y números correspondientes. Revisa el capítulo ocho Leds si no te aclaras con las direcciones. La configuración de los frenos la explico a continuación que es algo distinta.


a4

Seguimos. Vamos a configurar la contribución a la suma total de los frenos. Verás que le sumo un 5. Esto es porque el potenciómetro tiene ligeras fluctuaciones en sus valores. La idea es que encienda las luces cuando el valor recibido (motor current) sea menor que el que tenía antes (motor). Esto significa que la potencia disminuye, o sea, que está frenando.


Cuando se cumpla esta condición, almaceno el valor de las 2 luces de freno en la variable "freno num". En caso contrario (abajo) almaceno 255 para ue su contribución sea nula y no encienda las luces de freno. A continuación, almacenamos el volor motor current en motor para que los pueda comparar en el siguiente ciclo y ver si aumenta (acelera) o disminuye (frena).


a5

Por cierto, recuerda que no he programado la marcha atrás del coche. Así que sólo avanza.


Ahora ya podemos dar la orden al motor. El cable irá conectado al "power". La flecha hacia atrás sólo indica la dirección de giro del motor, no el sentido de avance del buggy.


a6

Ahora viene la madre del cordero. La suma de todas los mensajes recibidos para encender las luces. Para ello usaremos el icono "bit logic". Si no lo tienes, lo puedes descargar en la sección de Software.


Este icono suma en binario (salida AND) los números que le hemos introducido en decimal y que corresponden a las variables que hemos ido configurando hasta ahora. El resultado de sumarlas todas es el valor que debemos escribir en el WValue del Write para encender las luces. La dirección es 64. Recuerda que todo esto se explica en detalle en la sección digital.


a7

Al escribir todo esto de esta forma, hemos conseguido encender todas las luces, pero no que parpadeen. Es el caso de los intermitentes. Tal como está hasta ahora, si el mensaje de intermitente está activdo, la luz se encenderá, pero debemos decirle que se apague MANTENIENDO EL RESTO TAL Y COMO ESTA. Es decir, si los faros estaban encendidos, que sigan encendidos. Y a partir de aquí, que apague y encienda los intermitentes.


¿Cómo? BT derecha y BT izquierda son las variables usadas para recibir los mensajes por BT. Son valores lógicos que le dicen al intermitente "enciende o apaga". Si cualquiera de los 2 está activado de ahí el "OR" del operador lógico, es cuando hay que hacer la intermitencia. Si cualquiera de ellos está activado, sus luces estarán ya encendidas en el paso anterior. Hay que apagarlas un breve tiempo.


Por tanto, si una "o" otra (cualquiera de ellas) está activada, seguiremos el camino de arriba. Si ambas están apagadas, seguiremos por abajo sin hacer nada. Dejamos las luces como estaban. Y en el camino de arriba lo que hacemos es sumar sólo las contribuciones de faros y frenos. Los intermitentes por tanto no se encenderán. Retardamos la intermitencia al gusto (0,7 s en mi caso) y el bucle vuelve a empezar.


De esta forma, si la variable de los intermitentes estaba activada, volverá a encenderlos. La secuencia completa nos dará la intermitencia.


a8

Al final del programa he añadido unos iconos de para motor, apagar luces y un breve sonido para que me indique la finalización. El bucle que encierra todo el programa es de tiempo = 60 s, para que no esté eternamente en funcionamiento.


FOTOS


Extreme Offroader con LEGO Mindstorm NXT y 8 Leds
Extreme Offroader con LEGO Mindstorm NXT y 8 Leds

Aquí se aprecia en primer plano el receptor de IR de PF. Al fondo en el centro, el motor XL para accionar la dirección.


Extreme Offroader con LEGO Mindstorm NXT y 8 Leds

Entre las ruedas traseras asoma un poco el motor PF para la tracción.


Extreme Offroader con LEGO Mindstorm NXT y 8 Leds

Aquí no verás las resistencias de cada uno de los LEDs. Simplemente están soldados dentro de los cables, junto al LED. Así elimino componentes de la placa y no tengo que ir pensando ni buscando resistencias para cada LED. Detrás de esta placa y debajo del NXT están las baterías de PF.


Extreme Offroader con LEGO Mindstorm NXT y 8 Leds

APENDICE


Voy a poner aquí las direcciones usadas y las conexiones de los leds con los pines del PCF8574 usado. Para que el programa funcione como se ha descrito aquí, hay que hacer las conexiones a esos (y no otros) pines. La dirección general del PCF es siempre 64. Los valores de las distintas variables usadas en el programa son (WValue):


252 para encender los dos leds delanteros blancos de los faros (luces num);

207 para encender las 2 luces rojastraseras de freno (freno num);

187 para los 2 intermitentes naranjas de la izquierda (izq num);

119 para encender los 2 intermitentes naranjas de la derecha (dcha num).


Con estos números, el conexionado de los LEDs en el PCF8574 es:


P0: luz delantera derecha blanca;

P1: luz delantera izquierda blanca;

P2: intermitente delantero izquierdo naranja;

P3: intermitente delantero derecho naranja;

P4: freno trasero derecho rojo;

P5: freno trasero izquierdo rojo;

P6: intermitente trasero izquierdo naranja y

P7: intermitente trasero derecho naranja.

NOTA 1


Para conectar un motor de Power Function (PF) al MINDSTORM NXT son necesarios 2 cables de conexión adicionales de LEGO. Uno de conexión al NXT y otro cable de conversión.


Una alternativa es confeccionarlo un@ mism@ cortando los cables de los motores y añadiendo fichas de conexión. Con esto se ahorra en los cables, que no son baratos. También tienes la opción de modificarlos tu mism@ sin cortar los cables. Tienes una ayuda para conectar un motor PF al NXT.


Esta opción no está exenta de peligro. Cualquier contacto erróneo que hagas, puedes freir un motor o el NXT, pero ahí está por si lo quieres intentar.


NOTA 2


Un detalle del mando. El emisor IR de PF gobierna la dirección (el que acciona el motor XL de PF. Los botones del NXT gestionan las luces: intermitentes a la izquierda, a la derecha y el botón naranja para los faros. El potenciómetro (acelerador) va conectado al puerto 1.


En el coche, el motor de avance va conectado al puerto A del NXT. La dirección (motor XL) va conectada a las baterías de PF y al IR. Toda la circuitería de las luces (PCF8574) va al puerto 1 del NXT.


Extreme Offroader con LEGO Mindstorm NXT y 8 Leds
up-naranja-flecha
.