Raspberry Pi + Java R2D2 Robot – Part 1


This project was born as a Coronavirus project for my kids (you know how difficult could be to have your kids all day at home… oh school: please come back, we forgive you!)

On this post we cover the initial steps, including the full platform/chassis running, commanded by a Raspberry Pi and some Java code.

On this video we can see the chassis running:

 

The body of the R2D2 will be a 12″ cardboard tube from Home Depot. The chassis aluminum flat bars are also from HD:

2020-04-18 10.16.05

 

R2D2 head will be molded from a balloon, newspaper paper and paste (flour + water):

2020-04-18 11.46.58

 

Chassis design:

2020-04-18 11.47.28

 

Cutting, drilling and assembling:

2020-04-18 12.28.45

2020-04-18 12.34.452020-04-18 12.53.332020-04-18 12.57.15

 

 

 

 

 

 

 

 

 

 

 

This is how the chassis will fit into the tube:

2020-04-18 12.46.53

 

Soldering:

2020-04-18 13.09.55-4

 

Wheels in place:

2020-04-18 14.02.44

 

Preliminary setup and code testing:

2020-04-18 14.13.242020-04-19 11.05.302020-04-19 12.09.46-22020-04-19 12.09.46

 

 

 

 

 

 

 

 

 

 

Final assembly of the chassis:

2020-04-19 12.42.58

 

We are using two separate battery packs: one for the raspberry and a second one (more amps and 12V) for the motors and the L298n motor driver:2020-04-19 13.02.19

 

To be continued…..

2020-04-19 18.24.02

Proyecto Raspberry Pi + Java R2D2 Robot – Parte 1


Este proyecto nacio a causa del Coronavirus como una manera de mantener entretenidos a mis hijos (me imagino que ya saben que complicado puede ser tener a los chicos todo el dia en casa… Escuela volve!!)

En este post les muestro los pasos iniciales, incluyendo la construccion de la plataforma/chasis, y su funcionamiento comandado por un Raspberry Pi y algo de codigo en Java

En este video, vemos como funciona hasta ahora con el chassis ya ensamblado:

 

El “cuerp” del R2D2 es un tubo de carton de 12″ de los que se usan en construccion. El chasis esta construido con barras planas de aluminio:

2020-04-18 10.16.05

 

La cabeza del R2D2 se moldea con un globo, papel de diario y engrudo (agua y harina):

2020-04-18 11.46.58

 

Diseño del chasis:

2020-04-18 11.47.28

 

Cortando, taladrando y ensamblando:

2020-04-18 12.28.45

2020-04-18 12.34.452020-04-18 12.53.332020-04-18 12.57.15

 

 

 

 

 

 

 

 

 

 

 

Asi quedara el chasis en el tubo:

2020-04-18 12.46.53

 

Soldando:

2020-04-18 13.09.55-4

 

Ruedas en su lugar:

2020-04-18 14.02.44

 

Armado preliminar y prueba de codigo:

2020-04-18 14.13.242020-04-19 11.05.302020-04-19 12.09.46-22020-04-19 12.09.46

 

 

 

 

 

 

 

 

 

 

Ensambrado final del chasis:

2020-04-19 12.42.58

 

Usamos dos paquetes de baterias recargables: una para el Raspberry y otra (con mas amperaje y de 12V) para los motores y el driver L298N:

2020-04-19 13.02.19

 

Continuara…..

2020-04-19 18.24.02

Cambiar dirección de giro motor de Corriente Continua


Trabajando en mi nuevo proyecto de robótica, me encontré con el problema mencionado en el título.

En todos lados encontré el famoso circuito del Puente H para invertir la polaridad en los bornes del motor y lograr el cambio de dirección de giro en un motor de CC.

Este puente se puede implementar de muchas maneras diferentes, puede ser con transistores o inclusive con integrados que traen ya la implementación de dos puentes inversores como el L293.

La otra posibilidad consiste en utilizar un relé doble inversor por cada rueda, usando 2 puertos de la placa de control por cada una.

El esquema interno del relé doble inversor es algo así:

El relé tiene por defecto dos contactos cerrados y dos abiertos. Entonces, con un puerto de la placa de control manejamos la tensión del motor, enciendiendo o apagando.

Con el otro puerto manejamos el sentido de giro al energizar la bobina del relé.

Este es el esquema que armé para un relé doble inversor de 12v. en bobina:

y esta es la plaqueta universal armada con los dos relé doble inversor para el cambio de dirección de giro de dos ruedas del robot:

Gracias a la gente del proyecto ICARO por la ayuda !

Manejo del puerto paralelo en Linux con gcc


Hace unos años me armé la plaqueta de interfaz para controlar el puerto paralelo de la PC.
Hoy en día he retomado el proyecto y trataré de armar un pequeño robot comandado por esta placa desde linux, utilizando una notebook o netbook.

Asi que una de las cosas fundamentales que necesito para este trabajo es conocer el manejo de los puertos con el lenguaje C desde Linux y como compilarlo.
Este es el código básico para el manejo del puerto paralelo en Linux con gcc:

#include
#include
#include
#define puerto 0x378     /* LPT1 */

int main (void)
{

unsigned int p; // en esta variable le decimos, en hexa, cuantos cuantos leds prenderan

//apertura del puerto
if(ioperm(puerto,1,1))
{
perror(“Se ha encontrado el siguiente error: “); //manejo de errores
exit(1); //salida con error
}

p = 0x01; //puerto 1
outb(p,puerto); //envia el valor en binario al puerto
usleep(1000000); //delay

p = 0x00; //puerto 0. Apaga todos los bits
outb(p,puerto);

if(ioperm(puerto,1,0)) //cerramos los permisos del uso al puerto
{
perror(“Se ha encontrado el siguiente error: “); //volvemos a manejar un eror en caso de…
exit(1); // salimos mostrando mensaje de error
}
exit(0); //terminamos el programa

Ahora, como compilamos este programa ?
Supongamos que lo guardamos con el nombre test.c

$ gcc -o test test.c

Para ejecutarlo bastará con la orden:

$ sudo ./test

Para saber los valores de encendido y apagado de los 8 puertos de salida, revisar el post de Control de Potencia con PC

Control de Potencia con PC


Siempre quise poder controlar cualquier dispositivo a través de una PC.
La manera mas sencilla es a través del puerto paralelo:Puerto Paralelo:

Los pines 2 al 9 son de salida.
los pines 10 al 13 son de entrada.

También denominado puerto de impresora ó LPT éste puerto dispone de tres
canales de comunicaciones cuyos pines envían señales desde y hacia la
computadora todos al mismo tiempo, de ahí el término paralelo.
Inicialmente la plataforma PC permite disponer de hasta un máximo de
tres puertos paralelos, usualmente denominados LPT1, LPT2 y LPT3.
Exceptuando las nuevas computadoras iMac de la firma Apple Computers
todas las computadoras personales disponen al menos de un puerto paralelo
al cual generalmente se lo llama LPT1. A comienzos de la computación
personal (cuando reinaban las XT) el puerto paralelo venía incluido
en la plaqueta controladora de vídeo. Luego, con la llegada de las
controladoras VGA el puerto comenzó a ser incorporado en las
controladoras de unidades de disco (mas conocidas como multifunción).
Pero con la quinta generación en PC (cuando apareció el Pentium de Intel)
cambió todo nuevamente quedando la placa multifunción incorporada a la
placa base del sistema o Motherboard.

Los terminales del puerto paralelo sólo pueden manejar señales digitales,
cuyos valores de tensión representan estados altos o bajos. Cuando no hay
tensión en el pin se asume un estado lógico bajo mientras que cuando hay
una tensión cercana a los 5v el estado asumido es el alto. Cada pin puede
drenar un máximo de 50mA, insuficiente para manejar cualquier tipo de
carga mediana o pesada. Pero es suficiente para encender un diodo LED.

Para controlar el estado de los pines del puerto paralelo basta con
escribir un número entero positivo de 8 bits en la dirección del mismo.
El pin de datos 0, que físicamente está conectado al terminal 2 del
contector, asume el peso 1. Este es el bit de menos peso en la palabra
de datos de dicho puerto. Siguiendo la tabla de abajo observará que es
muy simple manejar puntualmente cada uno de los pines.

 

Por ejemplo, si queremos hacer que los terminales 4, 6, 8 y 9 del
puerto paralelo se enciendan quedando los otros apagados debemos sumar
los valores correspondientes a esos pines y enviar dicho resultado a
la dirección del puerto. En este ejemplo el dato a enviar sería:
4 + 16 + 64 + 128 lo que equivale a 212

Para que todos los pines se enciendan tendremos que enviar el valor 255,
mientras que para que todos se apaguen deberemos enviar el valor 0.

La dirección del puerto LPT1 usualmente es 378, la del puerto LPT2 suele
ser 278 y la del puerto LPT3 casi siempre es 3BC. Aunque esto depende de
como esté configurado su hardware. Una forma de determinar la dirección
del puerto es presionando la tecla Pause al comienzo de la carga del
sistema operativo. Verá una tabla donde el BIOS reporta los parámetros
básicos del equipo, incluyendo datos sobre los puertos.

Control de Potencia con Triacs:

Este circuito permite manejar cargas que funcionen con 220V de la red
eléctrica y que consuman no mas de 1500W. Las posibilidades son:
Lámparas, cafeteras, veladores, electrodomésticos, accesorios, etc.
Televisores y equipos de sonido también pueden ser conectados, pero
seria inútil ya que éstos equipos requieren ser encendidos por “soft”
presionando la tecla Power. Entonces, al darle alimentación el equipo
quedará a la espera de ser encendido.

circuitotriacs

La señal digital proveniente del puerto es limitada en corriente y
aplicada al cátodo del LED interno del optoacoplador. El ánodo de ese
diodo es cableado a MASA digital (pin 25 del puerto paralelo). El
brillo producido por el LED acciona el Triac del opto, que, a su vez,
acciona el triac de potencia. La red RC conectada en paralelo con el
triac de potencia limita la velocidad de evolución de la tensión ante
cargas inductivas.

El optoacoplador incluye en su interior un circuito de detección de
cruce por cero (denominado ZCC). Este sistema hace que la conmutación
sea posible sólo cuando el semiciclo de la corriente alterna se
encuentra en 0V.

El optoacoplador puede ser un MOC3040 ó un MOC3041. El triac debe ser
capaz de manejar 8A sobre 400V. Es indispensable montar el Triac en
un buen disipador térmico.

El circuito mostrado arriba corresponde a un solo canal. Para montar
un sistema de mas canales repetir este tantas veces como canales
necesarios. Recuerde conectar sólo un circuito a cada pin del puerto
paralelo.

Control de Portencia Con Relés:

El relé es un dispositivo mecánico capaz de comandar cargas pesadas
a partir de una pequeña tensión aplicada a su bobina. Básicamente la
bobina contenida en su interior genera un campo magnético que acciona
el interruptor mecánico. Ese interruptor es el encargado de manejar
la potencia en sí, quedando al circuito electrónico la labor de
“mover” la bobina. Permite así aislar mecánicamente la sección de
potencia de la de control. Pero para accionar la bobina la corriente
y tensión presente en un puerto paralelo no es suficiente.

circuitoreles

Este circuito es extremadamente simple y permite manejar ocho relés
con bobinas de 12V a partir de los pines de un puerto paralelo.
Podemos decir que TODOS los componentes de protección y limitación
de corriente, además de los transistores de potencia están incluidos
dentro del circuito integrado.

Si “miramos con la lupa” podremos ver en el interior del chip
ULN2803 ocho esquemas como el de abajo, uno para cada uno de los
canales.

canal

Es normal que la cápsula de este circuito integrado esté tibia con
respecto a la temperatura ambiente. Se debe, como era de suponerse,
a que la corriente requerida por cada relé pasa por sus “entrañas”
y, como sabemos, el manejo de corriente genera calor.

Con las llaves de cada relé el usuario puede manejar lo que le plazca,
siempre que no exceda las especificaciones de tensión y corriente
para la cual están diseñadas. De requerir mayores potencias se puede
emplear el relé para accionar un contactor industrial ú otro relé de
mayor corriente. Es una buena práctica colocar en cada relé un fusible
de protección. Siempre es mas simple cambiar un fusible que desoldar
un relé o reparar pistas de un circuito impreso.

En esta plaqueta he usado los 8 puertos de salida directamente con relés y los 4 puertos de entrada como interruptores, es decir, un circuito normal abierto entre el pin de entrada y masa.
Esta es la plaqueta terminada:
Nov2801

Estos puentes de alambre que se ven son errores míos en el diseño del pcb.

 Aquí pueden descargar los fuentes de control en Visual Basic 6.