Littlearm 2C:Construya un brazo robótico Arduino impreso en 3D
Componentes y suministros
| × | 1 | ||||
| × | 4 | ||||
| × | 1 |
Herramientas y máquinas necesarias
|
Acerca de este proyecto
El LittleArm 2C está diseñado para ser el kit que los niños pueden usar fácilmente para que las clases STEM puedan implementar un plan de estudios más robótico. Se ha hecho más resistente y mucho más fácil de armar, para que sea fácil de usar para los niños.
Todas las piezas se pueden imprimir fácilmente en 3D y están diseñadas para mantener el brazo elegante y simple. Todo el diseño tiene menos de 15 tornillos.
Para controlar el brazo, puede usar nuestra aplicación de Windows (que se escribió originalmente en código Python aquí) o mediante Bluetooth con la aplicación de Android que creamos para él.
Las instrucciones completas para ensamblar el LittleArm 2C se pueden encontrar aquí.
Los archivos de impresión 3D se pueden descargar desde aquí.
Código
- Bosquejo de Arduino LittleArm 2C
LittleArm 2C Arduino Sketch C / C ++
// Código arduino LittleArm 2C // Permite el control en serie del brazo robótico impreso en 3D LittleArm 2C // Creado por Slant Concepts # incluye// biblioteca arduino # incluye // c estándar biblioteca # define PI 3.141Servo baseServo; Servo hombroServo; Codo servoServo; Servo pinza Servo; // +++++++++++++++ Variables globales +++++++++++++++++++++++++++ +++ struct jointAngle {// una estructura es una forma de organizar variables en un grupo int base; int hombro; int elbow;}; struct jointAngle desireAngle; // ángulos deseados del servosint deseadoGrip; // posición deseada del gripperint gripperPos; // posición actual del comando gripperint; // el conjunto de ángulos de unión en deseadoDelay; // el retraso que hacen los servos entre los pasos // int ready =0; // un marcador que se utilizará para indicar que un proceso se ha realizado // +++++++++++++++ DECLARACIONES DE FUNCIONES +++++++++++++++++++ ++++++++ int servoParallelControl (int thePos, Servo theServo); // Esta es una función para controlar los servos // ++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ void setup () // Setup preparó la placa Arduino para su funcionamiento {Serial.begin (9600); // Active la comunicación USB (puerto serie) y haga que se comunique a 9600 bits por segundo baseServo.attach (5); // conecta el servo en el pin 5 al objeto servo shoulderServo.attach (4); // conecta el servo en el pin 4 al objeto servo elbowServo.attach (3); // conecta el servo en el pin 3 al objeto servo gripperServo.attach (2); // conecta el servo en el pin 2 al objeto servo Serial.setTimeout (50); // Deja de intentar hablar con la computadora y no hay respuesta después de 50 milisegundos. Asegura que el arduino no lee el serial por mucho tiempo Serial.println ("iniciado"); // Imprime en la computadora "Iniciado" baseServo.write (90); // posiciones iniciales de los servos shoulderServo.write (100); elbowServo.write (110); // listo =0;} // bucle arduino primario. Aquí es donde deben colocarse todos los programas principales. Void loop () {if (Serial.available ()) {// Si los datos llegan a través del puerto USB al arduino, entonces ... // ready =1; // Listo se establece en 1 para indicar que se está ejecutando un comando // Los comandos se envían desde la computadora en la forma "#, #, #, #, #, \ n" // El código a continuación "analiza" ese comando en números enteros que se corresponden con el // ángulo de la base, el ángulo del hombro, el ángulo del codo, el ángulo de agarre y el retardo en los servos, respectivamente. deseadoAngle.base =Serial.parseInt (); deseadoAngle.shoulder =Serial.parseInt (); deseadoAngle.elbow =Serial.parseInt (); deseadoGrip =Serial.parseInt (); deseadoDelay =Serial.parseInt (); if (Serial.read () =='\ n') {// si el último byte es '\ n' entonces detenga la lectura y ejecute el comando '\ n' significa 'done' Serial.flush (); // borra todos los demás comandos apilados en el búfer Serial.print ('d'); // enviar la finalización del comando "d" significa "ejecución terminada"}} // Estos valores son el estado de si la articulación ha alcanzado su posición o no // variables declaradas dentro de alguna parte del programa, como estas , se denominan "Variables locales" int status1 =0; // estado base int status2 =0; // estado del hombro int status3 =0; // estado del codo int status4 =0; // estado de la pinza int done =0; // este valor indica cuando todas las articulaciones han alcanzado sus posiciones while (hecho ==0) {// Realiza un bucle hasta que todas las articulaciones hayan alcanzado sus posiciones &&listo ==1 // mueve el servo a la posición deseada // Este bloque de El código usa "Funciones" para hacer que esté más condensado. status1 =servoParallelControl (deseadoAngle.base, baseServo, deseadoDelay); status2 =servoParallelControl (ángulo deseado.hombro, hombroServo, retraso deseado); status3 =servoParallelControl (ángulo deseado. codo, codoServo, retraso deseado); status4 =servoParallelControl (deseadoGrip, gripperServo, deseadoDelay); // Compruebe si todas las articulaciones han alcanzado sus posiciones if (status1 ==1 &status2 ==1 &status3 ==1 &status4 ==1) {done =1; // Cuando termine =1, el bucle se detendrá}} // fin del tiempo} // +++++++++++++++++++++++++++ + DEFINICIONES DE FUNCIONES ++++++++++++++++++++++++++++++++++++++++ int servoParallelControl (int thePos , Servo theServo, int theSpeed) {// Forma de la función:outputType FunctionName (inputType localInputName) // Esta función mueve un servo un cierto número de pasos hacia la posición deseada y devuelve si está o no cerca o ha recuperado esa posición // thePos - la posición deseada // thServo - el pin de dirección del servo que queremos mover // theSpeed - el retraso entre los pasos del servo int startPos =theServo.read (); // leemos la posición actual del servo con el que estamos trabajando. int newPos =startPos; // newPos mantiene la posición del servo mientras se mueve // define dónde está la posición con respecto al comando // si la posición actual es menor que la deseada mueve la posición hacia arriba if (startPos <(thePos-5)) { newPos =newPos + 1; theServo.write (newPos); retraso (theSpeed); return 0; // Dígale al programa primario que el servo no ha alcanzado su posición} // De lo contrario, si la posición actual es mayor que la deseada, mueva el servo hacia abajo else if (newPos> (thePos + 5)) {newPos =newPos - 1; theServo.write (newPos); retraso (theSpeed); return 0; } // Si el servo está + -5 dentro del rango deseado, entonces dígale al programa principal que el servo ha alcanzado la posición deseada. else {return 1; }} // fin del control paralelo del servo
Esquemas
Solo hay cuatro conexiones si usa la placa Meped para la que fue diseñado el Littlearm.Proceso de manufactura
- Robot Raspberry Pi controlado por Bluetooth
- Cree su robot de transmisión de video controlado por Internet con Arduino y Raspberry Pi
- El brazo robótico impreso en 3D de código abierto de Haddington Dynamics
- Robot SCARA de doble brazo
- Brazo robótico MeArm - Su robot - V1.0
- Robot seguidor de línea
- Brazo robótico Arduino impreso en 3D
- Brazo robótico controlado por Nunchuk (con Arduino)
- Robot controlado por voz
- Brazo robótico controlado a través de Ethernet
- Robot de piano controlado por Arduino:PiBot