Control Remoto IoT de Brazo Robótico Personalizado con Arduino MKR1000 y ThingSpeak
Componentes y Suministros
| Arduino MKR1000 | ×1 |
Herramientas y Máquinas Necesarias
- Cortadora láser (genérica)
Aplicaciones y Servicios en Línea
- MATLAB
- Arduino IDE
Sobre el Proyecto
Introducción
Quería diseñar un brazo robótico completamente desde cero. Hay muchos diseños de código abierto disponibles, pero pensé que sería gratificante diseñar, construir y programar uno desde la nada (y lo fue).
Hablaré de las fases de diseño y programación, pero me centraré más en la programación, ya que no se trata solo de controlar ángulos de servos.
Video del proyecto final en acción: Ver en MathWorks
Usé Simulink para programar un Arduino MKR1000 que controla el brazo robótico. Luego añadí la capacidad de controlar el brazo desde prácticamente cualquier lugar a través de ThingSpeak, una plataforma IoT abierta con analíticas de MATLAB.
Hardware Necesario
- Madera contrachapada 15" x 20" de 1/8 pulgada
- Arduino MKR1000
- 5x Servo GS9025MG
- Conector jack DC 2.1mm para protoboard
- Fuente de alimentación DC 6V jack barril
- Cables jumper
- 3x Transistores 2n2222a
- 10x Tuercas M2
- 10x Tornillos M2 x 10
- 40x Tuercas M3
- 40x Tornillos M3 x 25
Software Utilizado
- MATLAB
- Simulink
- MATLAB Support Package for Arduino Hardware
- Simulink Support Package for Arduino Hardware
- MATLAB Support Package for ThingSpeak
Diseño
Quise mantener bajo el coste de piezas, así que diseñé para servos hobby, específicamente el modelo GS-9025MG. Esto limitó el peso y tamaño final, ya que los micro servos no ejercen mucho par y no pueden levantar brazos de palanca pesados.
Prototipé con madera contrachapada de 1/4 pulgada, que resultó demasiado pesada para los servos. Reduje la longitud de los brazos y usé madera de 1/8 pulgada, solucionando el problema de control. Diseñé en Fusion 360, exporté como .dxf y corté láser.
También fue necesario alimentar con voltaje DC continuo desde la red, ya que las baterías se agotaban muy rápido por el alto consumo.
Para controlar los motores: el Arduino MKR1000 tiene 4 pines PWM, pero necesitaba 5 para 5 servos. Me las arreglé usando un pin PWM para controlar 2 servos y un pin digital para alternar entre ellos.
Programación
Dos fases: prototipado (ensamblar y hacer que los servos vayan a cierta posición) y control preciso (comandar ubicación vía ThingSpeak).
Prototipado
Usé bloques deslizadores y constantes para comandar los servos a ciertos ángulos. Este modelo sirvió para hallar los sesgos entre ángulo comandado y real, y el rango permitido por servo. Los bloques con engranaje son bloques de escritura PWM para ángulos 0-180.
Usé cinemática inversa para un brazo en movimiento planar 2D para resolver los ángulos necesarios para mover el brazo a una coordenada XY. Este enlace explica bien la cinemática: appliedgo.net/roboticarm
Control Preciso
La lógica es la misma: bloques de salida son escritura de servo (con engranaje). Las entradas ya no son deslizadores, sino lectura desde canal ThingSpeak. Las entradas son posición X e Y del brazo, convertidas a ángulos comandados mediante el bloque de función MATLAB loc2angles. El bloque angles2loc monitoriza el sistema verificando que los ángulos de servo se traducen a la posición correcta usando cinemática directa.
Una herramienta genial de Simulink usada aquí es External Mode, que permite monitorizar el sistema mientras corre en el Arduino.
Los bloques con nube gris son bloques de lectura ThingSpeak del paquete de soporte Simulink para Arduino. Se introduce el ID de canal, número de campo de datos y clave de lectura API, y devuelve los datos de ese canal y campo.
Usando ThingSpeak: Crear y Usar un Canal
- Ir a thingspeak.com
- Clic en "Sign in" (arriba derecha), login con cuenta gratuita MathWorks
- En dashboard, clic en "New Channel"
- Rellenar datos como se muestra:
- Clic "Save channel" al final
- Canal ThingSpeak creado
- En ventana de comandos MATLAB o app móvil MATLAB, enviar comandos como:
thingSpeakWrite(chID, [0.6963.94 -12 0 0], 'WriteKey', APIKEY, 'Fields', [1 2 3 4 5]);
Esto escribe nuevos datos en los campos del canal. Cambiando los valores del segundo argumento se cambia el valor del campo correspondiente. Los datos del canal deberían verse así:
Ejecutar el Modelo
Configurado el canal ThingSpeak, ejecutar el modelo en el Arduino en modo externo o desplegando en hardware. En Simulink: "Model Configuration Parameters" → engranaje superior → "Hardware Implementation" → "Hardware Board": Arduino MKR 1000. En "Target Hardware Resources" → "WiFi Properties" → credenciales WiFi.
Botón verde "Run" para modo externo, azul "Deploy" para desplegar en hardware.
Una vez corriendo el modelo, escribir nuevos datos en los campos del canal ThingSpeak desde MATLAB o MATLAB Mobile en el móvil y ver cómo mueve el brazo robótico.
Código
Proceso de manufactura
- Mando universal Android con Arduino, 1Sheeld y control IR
- Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
- Centro de Control de Potencia Arduino: N-FET, P-FET, Relé y RTC
- Monitor de Frecuencia Cardíaca IoT en Tiempo Real con Arduino y MAX30100
- Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
- Construye un Brazo Robótico Impreso en 3D Controlado por Arduino – Guía Paso a Paso
- Controla un Rover Arduino con Firmata y Mando Xbox One - Guía Completa
- Controlador de Humidificador DIY con Arduino y Relé: Configuración Segura de Alto Voltaje
- Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
- Brazo Robótico Inteligente Controlado por Arduino: Tutorial DIY Fácil
- Controla tu TV con Alexa mediante Arduino IoT Cloud: Guía Paso a Paso