Tercera Mano Robótica es un kit de fuente abierta cuyas piezas se pueden imprimir en una impresora 3D y que se puede usar en el antebrazo utilizando un Trinket Pro como cerebro
Trinket es una versión reducida de un Arduino con un ATmega328 y de coste reducido, pero obviamente puede usarse cualquier placa que sea compatible con Arduino
Cuando se le solicite, puede entregarle una herramienta que tenga, liberándolo de buscarlo o perderlo todo ello pulsando un único pulsador que Tim (su creador) ha colocado estratégicamente en un dedo gracias a una pieza similar a un anillo impresa también en 3d
En realidad son pocos componentes los usados en este proyecto:
1x9g servo hobby barato
Trinket Pro 5V
Cargador de batería de litio de celda única (3.7V) alimentado a 5V
Batería de 300mAH celda única LiPO
imanes – 5/16 “de diámetro, 1.8” de espesor
13 × 2-56 tornillos
1 × piezas impresas en 3D
Banda de cintura elástica ancha 1 × 1 “
Después de reunir todos los elementos en la lista de componentes e imprimir sus piezas, ¡es hora de comenzar el ensamblaje y conectarlo todo!
Aquí está el diagrama de conexión:
Es bastante simple pues se limita a conectar la placa a un servo controlado por el puerto digital nº8 y que ira alimentando a la salida del cargador a 5v DC y un pulsador que conectaremos al pin 3 y masa .
El resto es simplemente la parte de carga de la batería que se conectará por un lado a la batería y por otro lado tanto al servo como a la placa de control .
Puesto que la alimentación es suministrada por la batería se recomienda colocar un interruptor en la batería para impedir su descarga cuando no se esta usando.
Aquí está el código para hacer su movimiento robótico de tercera mano:
// ThirdHand test script
// by Tim Giles <www.wildcircuits.com>
//servo is on Pin8
//button is on Pin3 and has the pullup enabled
#include
Servo ServoA;
int Angle = 10;
int AngleClosed = 10;
int AngleOpen = 120;
void setup()
{
ServoA.attach(8);
pinMode(3,INPUT_PULLUP);
}
void loop()
{
//update the servo position
ServoA.write(Angle);
delay(1);
//check if the button is pushed
if (digitalRead(3) == 0)
{
//debounce
while (digitalRead(3) == 0){
delay(1);
}
//set the servo to it's open position
Angle = AngleOpen;
ServoA.write(Angle);
//hold the servo in this position to give the user time
//to grab the screwdriver
delay(2000);
//set the servo to it's closed position
Angle = AngleClosed;
ServoA.write(Angle);
}
}
Durante la programación se recomienda desconectar la batería pues de lo contrario, el suministro de refuerzo de 5 V volverá a alimentar su ordenador y puede generar efectos negativos
Si su cable USB que está programando es demasiado largo / demasiado débil, es posible que tenga un comportamiento extraño cuando termine la programación y el servo intente moverse:esto se debe a una caída de voltaje excesiva en el cable USB que hace que el Trinket Pro se reinicie cuando el servo intenta moverse.
PIEZAS IMPRESAS EN 3D
La base , el bazo articulado así como el anillo para el pulsador se han realizado impresas en 3D
Mientras ensambla las piezas impresas en 3D, notará que todos los orificios de los tornillos son ligeramente más pequeños o de mayor tamaño.
Los tornillos 2-56 se ensartarán automáticamente en los orificios de menor tamaño y girarán libremente en los orificios de mayor tamaño, lo cual permite que el tornillo sujete firmemente la bandeja del destornillador mientras que el brazo que acciona la bandeja del destornillador se puede mover libremente.Si sus piezas no van juntas así, entonces necesitará ajustar su impresora o ajustar el tamaño de los orificios de los tornillos.
Puede parecer una banalidad , pero la idea detrás de este prototipo es muy interesante ya que puede suponer una ayuda importante a la movilidad, pues esta assietncia puede ser especialmente importante para los ancianos y otras personas que necesitan este tipo de ayuda en la vida cotidiana.
El sistema que sugieren sus creadores destaca por su simplicidad : una estructura de aluminio para sujetar el brazo, un motor y una placa Arduino con su correspondiente escudo (cuyos detalles, por cierto, han publicado en hackaday.com) ,
Nos explican que en la construcción del exo-brazo buscaban que fuese relativamente barato, sencillo y potente que permitiera un uso fácil del mismo , por lo cual construir su prototipo no deberia costar mas de 100$ , lo cual es un precio bastante razonable ,sobre todo si nos vamos a soluciones que se estan desarrollando la industria.
El desarrollo de este proyecto comenzó centrándose más en el control del brazo y luego en el propio diseño, por lo que tal vez el objetivo número de sus creadores es hacer que el control de ExoArm sea tan barato y tan intuitivo como sea posible.
En el siguiente video podemos verlo en acción:
Como podemos apreciar, hay una estructura articulada de aluminio y precisamente en la articulación esta el motor (en el codo) , aunque sugieren que en otros diseños futuros también proveen implementar un actuador en el hombro( de hecho el shield empleado admite dos motores).
Este exo-brazo tiene tambien apoyo trasero, de modo que todo el peso se distribuye uniformemente a su cuerpo siendo la capacidad de elevación alrededor de 10 kg máximo o 22 libras.
Electrónica
Ademas de la placa Arduino, un componente básico es el driver del motor VNH2SP30 ,el cual es esencialmente una versión en rampa del escudo de motor Ardumoto. Esta placa se presenta como un escudo que se conecta encima de Arduino y es de bajo coste ( unos 6,5€ en Amazon).
Para este Shield se usa un par de drivers de motor de puente completo VNH2SP30. También incluye los circuitos de soporte para que esta placa sea capaz de controlar un par de motores de alta corriente , aunque para esta aplicacion solo se usa uno .
El VIN y el motor son lanzados para terminales de tornillo de 5mm , lo que facilita la conexión de cables de mayor calibre.
Al utilizar este escudo en aplicaciones de alta demanda extrema puede ser necesario mejorar el rendimiento térmico con un disipador de calor o ventilador y soldar los cables directamente a la placa en lugar de usar un terminal de tornillo (tenga en cuenta la alta corriente de este) , aunque cuando se utiliza el escudo en corrientes de hasta 6A los chips apenas llegarán a ser perceptiblemente calientes.
Resumidamente esta son algunas de las características del escudo empleado:
Voltaje: max. 16V
Regimen de corriente: 30A maximo
Corriente permanente: 14 A
Resistencia MOSFET (solo ida): 19 m & OHgr;
Frecuencia PWM: 20 kHz Max.
Tamano placa: 6 * 5,2 * 2cm / 2,4 * 2 * 0,8pulg
Peso : 23 g / 0,8 oz
Una vez resuelto el driver, respecto a Arduino , los pines que se requieren , en la aplicación son los pines siguientes:
Pin 2 como entrada analógica para el encoder solidario al eje del motor para saber la posición de la articulación
Pines 8 como entrada binaria para ordenar subir la articulación via el motor
Pines 9 como entrada binaria para ordenar bajar la articulación vía el motor
Antes de ver el codigo final , es interesante apreciar como el control del motor se hace fijando los pins 3 y 4 a un valor y luego sacando un valor analogico en el pin 5, por ejemplo, parar mover arriba el motor se usa esta función:
Simplemente para parar el moto,r sacamos un valor cero en el pin 5 usan esta otra función:
void stopmove(){ //parar el motor
digitalWrite(3, LOW);
digitalWrite(4, LOW);
analogWrite(5, 0);
}
Una función muy importante es conocer la posición de la articulación gracias a que hay conectado un potenciómetro solidario al aje de modo que capturando el valor de la salida del potenciómetro podemos conocer el angulo ,gracias al siguiente código:
Por ultimo, en la función loop miramos continuamente los valores binarios de los pines 8 y 9 ,y en función de su estado, llamaremos a alguna de las rutinas anteriores:
void loop() //bucle principal de ejecución { int program_runtime = millis();
int readingUp = digitalRead(8); int readingDown = digitalRead(9);
El procesamiento de control como decíamos se hace con un Arduino, por lo que el código es bastante fácil de entender y modificar cuanto se quiera para mejorarlo o adaptarlo a cada necesidad:
float computePID(int setpoint){ //función de calculo de la posición del encoder
angle = analogRead(2);
angle = map(angle, 0, 344, 0, 90); // dejanski kot Serial.print(angle);
1 × calibrador de tensión con el amplificador de celda de carga
1 × Aluminio 4 x 30 x al menos 2000 mm
1 × Arduino Uno / Nano
1 × controlador de motor VNH2SP30
1 × Motor del limpiador del parabrisas del coche
1 × cables largos
1 × Potenciómetro
1 × Li-Po batería 3S 5500mAh
1 × Tornillos y tuercas. M4 y M6
1 × Cinta adhesiva
1 × Zipties
1 × Correas
1 × Placas de madera
1 × Tubo termorretráctil
En el siguiente vídeo el autor describe mas detalles de construcción de este excelente exo-brazo:
Todos los dos de abril se celebra el Arduino Day o día Arduino (o Genuino) en todo el mundo, así que esta ocasión nos asombraron con un sofisticado robot humanoide construido con Arduino y Raspberry Pi fabricado por el Maker Luisrobots en su casa mediante un Arduino Mega y una Raspberry Pi 2.
Como en otros montajes parecidos una vez mas la placa Arduino Mega se encarga de controlar la mecatronica y la Raspberry Pi es la encargada de controlar las cámaras, el altavoz, la tarjeta de sonido y el micrófono que lleva el robot.
Lo han bautizado como Zeus y es capaz de caminar y hablar, midiendo 1,21 mts de altura y pesa un poco más de 8 kgs.
Además de las placas Arduino y Raspberry Pi, Zeus está equipado con varios módulos más como un módulo transceptor nRF24L01, un shield Bluefruit EZ-Link para la comunicación y un BN055 para la orientación absoluta
Por supuesto también usa servos para las manos,brazos, cuello y piernas
El conjunto se completa un 5A UBEC para la regulación del voltaje así como varios tipos de sensores , una cámara , altavoces,etc