Arduino - Control Arm Robot a través de la Web
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Acerca de este proyecto
Si eres principiante, te recomiendo leer los siguientes tutoriales:
- Arduino - Motor
- Arduino - Servo motor
- Arduino - Wifi
1. Demostración
2. Interfaz de usuario
El brazo del robot tiene 6 motores.
- Zona A:Controle el motor 2, 3, 4 (controle las tres articulaciones de las manos)
- Zona B:motor de control 1 (base de control)
- Zona C:Control del motor 5 (control de la rotación de la pinza)
- Zona D:Motor de control 6 (pinza de control)
3. Arquitectura del sistema
4. Flujo de trabajo
Lado del cliente (interfaz de usuario web, escrita en JavaScript + HTML + CSS)
Cuando un usuario toca o mueve el dedo (o hace clic o mueve el mouse), podemos obtener las coordenadas (x, y). El flujo de trabajo es el siguiente:
En el caso de la Zona A, para calcular los ángulos del motor 2, 3, 4, necesitamos hacer algunos cálculos geométricos . Puede consultarlo al final de esta página.
Lado del servidor (Código Arduino) :
Una vez que reciben un conjunto de ángulos de los clientes, seis motores se mueven gradualmente desde los ángulos actuales a los nuevos ángulos. Seis motores deben moverse y alcanzar nuevos ángulos al mismo tiempo. Antes de entrar en detalles sobre cómo controlar todos los motores, veamos cómo controlar un solo motor. Supongamos que queremos mover un motor desde el ángulo actual (ángulo) al nuevo ángulo (new_angle). Dado que la velocidad del motor es alta, debemos reducir la velocidad. Para hacer eso, se repiten dos pasos siguientes hasta que el motor alcance un nuevo ángulo:
- Mueva el motor con un paso pequeño.
- Haga una pequeña pausa y luego avance otro paso.
El siguiente diagrama ilustra el esquema anterior en caso de que el ángulo nuevo sea mayor que el ángulo actual:
Wherestep_num es el número de pasos que debe dar el motor. paso y tiempo
son valores predefinidos. Dos posteriores deciden la velocidad y la suavidad. Lo anterior es solo para un robot. Para que los robots comiencen a moverse y lleguen al destino al mismo tiempo, podemos hacer lo siguiente:Seis motores toman el mismo step_num , pero paso
de cada motor son diferentes entre sí. Entonces tenemos que elegir step_num en este proyecto es máximo.
Generalmente, el flujo de trabajo de Arduino es el siguiente:
5. Cálculo geométrico
Hagamos un cálculo del brazo robótico en el siguiente problema de geometría:
Conocido
- C es fijo
- Un punto conocido:D es la entrada del usuario
- Un punto conocido:CB, BA, AD (indicado por b, a, d respectivamente)
- Longitudes de los segmentos de cada brazo Buscar: ángulos C, B, A Solución:
- Suponga que el ángulo B y A son iguales
- Agregue algunos puntos y segmentos adicionales
Cálculo
- Conocíamos los puntos C y D => podemos calcular la longitud de DC (indicada por c)
- También podemos calcular el δ
- Mire el triángulo ABE, podemos inferir que AE =BE y ∠E =π - 2α.
- Entonces:
- La ley de los cosenos en el triángulo CDE:
- Cambie (1) y (2) por (3), tenemos:
Simplificar
- Simplifique lo anterior:
- Como conocemos a, b, cyd, resolvamos la ecuación cuadrática anterior, podemos calcular el valor de α. - Y β =π - α - Hasta ahora encontramos β, busquemos γ - La ley de los cosenos en los triángulos BDC y BDA:
- Resuelva este conjunto de ecuaciones, podemos calcular γ.
- Entonces, sus ángulos requeridos son:(δ + γ), β y β. Estos son los ángulos de los motores 2, 3 y 4, respectivamente.
6. Código fuente
El código fuente incluye dos archivos:
- RobotArmWeb.ino :Código Arduino
- Remote_arm.php :Código de la aplicación web, que se carga en PHPoC WiFi Shield o PHPoC Shield. (Vea las instrucciones en este artículo).
También debe cargar el archivo de imagen flywheel.png en PHPoC Shield.
El mejor kit de inicio de Arduino para principiantes
Si está buscando un kit de Arduino, consulte El mejor kit de Arduino para principiantes
Referencias de funciones
- Arduino - Servo Library
- Servo.attach ()
- Servo.write ()
- Servo.writeMicroseconds ()
- Servo.read ()
- Servo.attached ()
- Servo.detach ()
- Serial.begin ()
- Serial.println ()
Código
- RobotArmWeb
- remote_arm.php
RobotArmWeb Arduino
Este es el Código Arduino#include#include int angle_init [] ={90, 101, 165, 153, 90, 120}; // cuando el motor está recto. En web, el ángulo cuando el motor está recto es {0, 90, 130, 180, 0, 0}; int angle_offset [] ={0, 11, -15, -27, 0, 137}; // desplazamiento entre el servomotor real y el ángulo en webint cur_angles [] ={90, 101, 165, 153, 90, 120}; // ángulos actuales de seis motores (grados) int dest_angles [] ={0, 0, 0, 0, 0, 0}; // ángulos de destinoint angle_max [] ={180, 180, 160, 120, 180, 137}; int angle_min [] ={0, 0, 0, 0, 20, 0, 75}; int direction [] ={1, 1 , 1, 1, 1, -1}; int angleSteps [] ={3, 2, 2, 2, 4, 4}; // pasos en movimiento de cada motor (grado) Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5; Servo servo6; Servo servo [6] ={servo1, servo2, servo3, servo4, servo5, servo6}; Servidor PhpocServer (80); cliente PhpocClient; int stepNum =0; void setup () {Serial.begin (9600); Phpoc.begin (PF_LOG_SPI | PF_LOG_NET); server.beginWebSocket ("brazo_remoto"); servo1.attach (2); // conecta el servo en el pin 2 al objeto servo servo2.attach (3); // conecta el servo en el pin 3 al objeto servo servo3.attach (4); // conecta el servo en el pin 4 al objeto servo servo4.attach (5); // conecta el servo en el pin 5 al objeto servo servo5.attach (6); // conecta el servo en el pin 6 al objeto servo servo6.attach (7); // conecta el servo en el pin 7 al objeto servo para (int i =0; i <6; i ++) servo [i] .write (angle_init [i]);} void loop () {PhpocClient client =server.available (); if (cliente) {String angleStr =client.readLine (); if (angleStr) {Serial.println (angleStr); int commaPos1 =-1; int commaPos2; for (int i =0; i <5; i ++) {commaPos2 =angleStr.indexOf (',', commaPos1 + 1); int ángulo =ánguloStr.substring (comaPos1 + 1, comaPos2) .toInt (); dest_angles [i] =ángulo * dirección [i] + ángulo_desplazamiento [i]; commaPos1 =commaPos2; } int ángulo5 =ánguloStr.substring (commaPos1 + 1) .toInt (); dest_angles [5] =ángulo5 * dirección [5] + ángulo_desplazamiento [5]; stepNum =0; // Mueve los motores en muchos pasos pequeños para que el motor se mueva suavemente, evitando mover el motor repentinamente. El siguiente es el cálculo de pasos para (int i =0; i <6; i ++) {int dif =abs (cur_angles [i] - dest_angles [i]); int paso =dif / angleSteps [i]; if (stepNum 0) {for (int i =0; i <6; i ++) {int angleStepMove =(dest_angles [i] - cur_angles [i]) / stepNum; cur_angles [i] + =angleStepMove; if (cur_angles [i]> angle_max [i]) cur_angles [i] =ángulo_max [i]; si no (ángulos_cur [i] <ángulo_mín [i]) ángulos_curr [i] =ángulo_mín [i]; servo [i] .write (cur_angles [i]); } stepNum--; retraso (20); }}
brazo_remoto.php PHP
Este código es una aplicación web.Arduino - Arm Robot - Web Arduino - Control Arm Robot a través de la Web
WebSocket: null
Esquemas
Necesita proporcionar la fuente de alimentación externa para 6 motoresProceso de manufactura
- Robot Pi simple
- Centro de control de Arduino
- Uso de IoT para controlar de forma remota un brazo robótico
- Obstáculos que evitan el robot con servomotor
- Robot seguidor de línea
- Control del humidificador Arduino
- Arduino - Enviar temperatura a la web a través de serie
- Littlearm 2C:Construya un brazo robótico Arduino impreso en 3D
- Robot asistente doméstico autónomo
- Control de circuito sensible al movimiento a través de Intel Curie
- Robot para navegación interior supercogedora