• No se han encontrado resultados

Diseño y desarrollo de prototipo de brazo robótico con asistente virtual integrado para ayudar a personas invidentes

N/A
N/A
Protected

Academic year: 2023

Share "Diseño y desarrollo de prototipo de brazo robótico con asistente virtual integrado para ayudar a personas invidentes"

Copied!
152
0
0

Texto completo

(1)

CARTAGENA

Escuela Técnica Superior de Ingeniería Industrial

Diseño y Desarrollo de Prototipo de Brazo Robótico con Asistente

Virtual Integrado para ayudar a las personas invidentes

TRABAJO FIN DE GRADO

GRADO EN INGENIERÍA EN TECNOLOGÍAS INDUSTRIALES

Autor: Raúl Sánchez Ardil Director: Juan Suardiaz Muro Codirector: Andrés Cabrera Lozoya

Cartagena, 26 de mayo de 2022

(2)

ÍNDICE.

1. Resumen. ... 10

2. Introducción. ... 11

3. Capítulos. ... 12

4. Selección y Funcionamiento de Componentes, Módulos y Sensores. ... 14

4.1. Brazo Robótico. ... 14

4.2. Motores Paso a Paso (NEMA 17) y placa controladora (A4988 y DRV8825). ... 14

4.3. Servomotores (SG90 y MG996R). ... 19

4.4. Módulos Bluetooth (HC05). ... 20

4.5. Sensor de Color (TCS34725). ... 22

4.6. Reproductor de sonidos .WAV (DFPlayer Mini) y Altavoz. ... 23

4.7. Sensores Ultrasonidos. ... 24

4.8. Convertidor DC-DC Reductor (LM2596). ... 25

4.9. Módulo de reconocimiento de voz V3. ... 25

4.10. Lector de Tarjetas (RFID-RC522). ... 27

4.11. Buzzer. ... 27

4.12. Baterías de 3,7 V y 2200 mAh. ... 28

4.13. Transformador de 12V y 2000 mAh. ... 28

4.14. Interruptores. ... 29

4.15. Pulsadores. ... 29

5. Diseño. ... 30

5.1. Brazo Robótico. ... 30

5.2. Pinza (Gripper). ... 30

5.3. Bases. ... 31

5.4. Soportes Sensores. ... 32

5.4.1. Soporte Bluetooth. ... 32

5.4.2. Soporte Ultrasonidos. ... 33

5.5. Cubos. ... 33

5.6. Superficie de Entrega. ... 34

5.7. Central de Comunicación. ... 34

6. Impresión 3D. ... 35

6.1. Brazo Robótico. ... 36

6.2. Pinza (Gripper). ... 39

6.3. Soportes Sensores. ... 40

6.4. Parte Delantera de la Base. ... 41

6.5. Parte Central de la Base. ... 42

(3)

6.6. Parte Trasera de la Base. ... 42

6.7. Superficie de Entrega y Cubos. ... 43

6.8. Central de Comunicación. ... 44

7. Esquemático y Conexiones. ... 45

7.1. Brazo Robótico. ... 45

7.1.1. Motores y Servomotores. ... 45

7.1.2. Módulos y Sensores (Excepto Sensores de Ultrasonidos). ... 46

7.1.3. Sensores de Ultrasonidos. ... 47

7.2. Central de Comunicación. ... 48

8. Comprobación, y Programación Básica de los Módulos, Sensores y Motores. ... 49

8.1. Brazo Robótico. ... 49

8.1.1. Motores Paso a Paso (NEMA 17) y placa controladora (A4988 y DRV8825). ... 49

8.1.2. Servomotores (SG90 y MG996R). ... 49

8.1.3. Módulos Bluetooth (HC05). ... 50

8.1.4. Sensor de Color (TCS34725). ... 51

8.1.5. Reproductor de sonidos .WAV (DFPlayer Mini) y Altavoz. ... 51

8.1.6. Sensores Ultrasonidos. ... 51

8.1.7. Pulsadores. ... 52

8.2. Central de Comunicación. ... 52

8.2.1. Módulo de reconocimiento de voz V3. ... 52

8.2.2. Módulo Bluetooth (HC05). ... 53

8.2.3. Lector de Tarjetas (RFID-RC522). ... 54

8.2.4. Buzzer. ... 54

9. Asistente Virtual Elora. ... 55

10. Análisis del Código. ... 55

10.1. Brazo Robótico. ... 55

10.2. Central de Comunicación. ... 89

11. Problemas y Soluciones en el Diseño y Programación del Brazo Robótico y la Central de Comunicación. ... 94

11.1. Diseño. ... 94

11.2. Programación. ... 96

12. Aplicación Elora. ... 98

12.1. Fundamento. ... 98

12.2. Diseño. ... 99

12.3. Código. ... 99

12.4. Google Play. ... 101

13. Problemas y Soluciones en el Diseño y Programación de la Aplicación Elora. 101 14. Conclusiones. ... 104

15. Anexo. ... 105

15.1. Código Brazo Robótico. ... 105

(4)

15.2. Código Central de Comunicación. ... 148

(5)

ÍNDICE DE FIGURAS.

Figura 1. Brazo Robótico Zortrax. ... 14

Figura 2. Movimiento Motores NEMA17.. ... 15

Figura 3. NEMA17. ... 15

Figura 4. Drivers A4988 y DRV8825 respectivamente. ... 16

Figura 5. Servomotor SG90. ... 19

Figura 6. Servomotor MG996R. ... 19

Figura 7. Movimiento Servomotores. ... 20

Figura 8. ESP8266. ... 20

Figura 9. Funcionamiento Maestro-Esclavo. ... 21

Figura 10. Módulos HC-05 y HC-06 respectivamente. ... 21

Figura 11. Sensor de Color TCS34725. ... 22

Figura 12. Diagrama de Medición del Color. ... 22

Figura 13. Módulo DFPlayer Mini. ... 23

Figura 14. Altavoces. ... 23

Figura 15. Sensores Ultrasonidos. ... 24

Figura 16. Funcionamiento Sensor de Ultrasonidos. ... 25

Figura 17. Convertidores CC/CC Reductores LM2596. ... 25

Figura 18. Módulo de Reconocimiento de Voz V3. ... 26

Figura 19. Entrenamiento módulo Reconocimiento de Voz V3. ... 26

Figura 20. Lector de Tarjetas RFID RC522. ... 27

Figura 21. Buzzer. ... 27

Figura 22. Baterías de 3,7V y 2200 mAh. ... 28

Figura 23. Transformador de 12V y 200 mAh. ... 28

Figura 24. Interruptores. ... 29

Figura 25. Pulsadores. ... 29

Figura 26. Diseño Brazo Superior del Brazo Robótico. ... 30

Figura 27. Diseño Gripper. ... 30

Figura 28. Diseño Ensamblaje Bases. ... 31

Figura 29. Diseño Base Central. ... 31

Figura 30. Diseño Base Delantera. ... 32

Figura 31. Diseño Base Trasera. ... 32

Figura 32. Diseño Soporte Bluetooth. ... 32

Figura 33. Diseño Soporte Sensor de Ultrasonidos. ... 33

Figura 34. Diseño Cubo. ... 33

Figura 35. Diseño Superficie de Entrega. ... 34

Figura 36. Diseño Central de Comunicación. ... 34

Figura 37. Vistas Diseño Central de Comunicación. ... 35

Figura 38. Obtención de archivo ".gcode" en Cura. ... 35

Figura 39. Impresión de las Piezas Color Plata del Brazo Robótico. ... 36

Figura 40. Impresión de las Piezas Color Negro del Brazo Robótico. ... 37

Figura 41. Montaje Brazo Robótico. ... 38

Figura 42. Montaje Gripper. ... 39

Figura 43. Montaje Brazo Robótico y Gripper. ... 39

Figura 44. Embellecedores Rojos. ... 40

Figura 45. Soportes Bluetooth y Sensor de Ultrasonidos. ... 40

Figura 46. Base Delantera. ... 41

Figura 47. Base Delantera Montada. ... 41

Figura 48. Base Central Montada. ... 42

(6)

Figura 49. Base Trasera. ... 42

Figura 50. Ensamblaje Bases y Brazo Robótico con Cableado y Baterías. ... 43

Figura 51. Superficie de Entrega y Cubos. ... 43

Figura 52. Central de Comunicación. ... 44

Figura 53. Esquemático Motores y Servomotores. ... 45

Figura 54. Esquemático Módulos y Sensores (Excepto Sensores de Ultrasonidos). ... 46

Figura 55. Esquemático Sesnores de Ultrasonidos. ... 47

Figura 56. Esquemático Sensores de Ultrasonidos. ... 48

Figura 57. Brazo Antiguo Superior del Brazo Robótico. ... 95

Figura 58. Brazo Nuevo Superior del Brazo Robótico. ... 95

Figura 59. Antiguo Gripper. ... 96

Figura 60. Nuevo Gripper. ... 96

Figura 61. Aplicación Elora. ... 99

Figura 62. Código Aplicación Elora. ... 100

Figura 63. Aplicación Elora en Google Play Store. ... 101

Figura 64. Polítca de Privacidad de la Aplicación Elora. ... 103

(7)

ÍNDICE DE TABLAS.

Tabla 1. Tensión e Intensidad Máxima Drivers NEMA17. ... 16

Tabla 2. Cálculo Tensión de Referencia Drivers. ... 17

Tabla 3. Microstepping Drivers. ... 18

Tabla 4. Corriente Máxima Utilizable Driver A4988. ... 18

Tabla 5. Corriente Máxima Utilizable Driver DRV8825. ... 18

(8)

ÍNDICE DE ECUACIONES.

Ecuación 1. Cáculo Vref del Driver A4988. ... 17

Ecuación 2. Cálculo Vref del Driver A4988 aplicando el coeficiente reductor. ... 17

Ecuación 3. Cálculo Vref del Driver DRV8825. ... 17

Ecuación 4. Cálculo Vref del Driver DRV8825 aplicando el coeficiente reductor. ... 17

Ecuación 5. Paso velocidad del sonido de m/s a cm/µs. ... 24

Ecuación 6. Cálculo Distancia Sensor de Ultrasonidos. ... 24

(9)

ÍNDICE DE CÓDIGOS.

Código 1. Código Prueba NEMA17. ... ¡Error! Marcador no definido.

Código 2. Código Prueba Servomotores. ... ¡Error! Marcador no definido.

Código 3. Código Prueba HC-05 Brazo Robótico. ... ¡Error! Marcador no definido.

Código 4. Código Prueba TCS34725. ... ¡Error! Marcador no definido.

Código 5. Código Prueba DFPlayer Mini. ... ¡Error! Marcador no definido.

Código 6. Código Prueba Sensores de Ultrasonidos. ... ¡Error! Marcador no definido.

Código 7. Código Prueba Pulsadores. ... ¡Error! Marcador no definido.

Código 8. Código Entrenamiento Módulo Reconocimiento de Voz V3. ... ¡Error!

Marcador no definido.

Código 9. Código Prueba Módulo Reconocimiento de Voz V3. ... ¡Error! Marcador no definido.

Código 10. Código Prueba HC-05 Central de Comunicación. ... ¡Error! Marcador no definido.

Código 11. Código Prueba Lector de Tarjetas RFID RC522. ... ¡Error! Marcador no definido.

Código 12. Código Prueba Buzzer. ... ¡Error! Marcador no definido.

Código 13. Librerías Brazo Robótico. ... 55

Código 14. Variables NEMA17 y Servomotores. ... 56

Código 15. Variables Sensor TCS34725. ... 56

Código 16. Variables DFPlayer Mini. ... 57

Código 17. Variables Sensores de Ultrasonidos. ... 57

Código 18. Variables de movimiento. ... 57

Código 19. Variables de posición. ... 58

Código 20. Variables de los pulsadores. ... 58

Código 21. Variables Control Bluetooth. ... 58

Código 22. Función Setup del Brazo Robótico. ... 59

Código 23. Función Loop del Brazo Robótico. ... 65

Código 24. Funciones Movimiento NEMA17 y Servomotores. ... 68

Código 25. Funciones Movimientos de las Prendas. ... 75

Código 26. Función CamisetaAmarilla. ... 78

Código 27. Función PantalónRojo. ... 83

Código 28. Función LecturaColorCamiseta. ... 84

Código 29. Función printColorName. ... 85

Código 30. Función ping. ... 86

Código 31. Función LecturaUltrasonidos. ... 87

Código 32. Función LecturaUltrasonidosMotores. ... 88

Código 33. Función LecturaCancelar. ... 88

Código 34. Función LecturaPulsador. ... 89

Código 35. Librerías de Central de Comunicación. ... 89

Código 36. Defición de mySerial del módulo Bluetooth. ... 89

Código 37. Variables del RFID RC522. ... 89

Código 38. Variables que controlan el funcionamiento de las señales enviadas al Brazo Robótico. ... 90

Código 39. Variables del Módulo de Reconocimiento de Voz V3. ... 90

Código 40. Variables del Buzzer. ... 90

Código 41. Función Setup de la Central de Comunicación. ... 91

Código 42. Función Loop de la Central de Comunicación. ... 93

Código 43. Función compareArray. ... 94

(10)

Código 44. Función Alarma. ... 94

(11)

1. Resumen.

Este Trabajo Fin de Grado (TFG) tiene como objetivo ayudar y proporcionar a las personas invidentes las prendas de ropa que necesiten sólo utilizando su voz. Al principio, la idea nace como una idea conjunta de realizar un prototipo que sea capaz de tener una labor social y a la vez un desarrollo en la industria, para esto, se realizaría el control de un brazo robótico a través de la voz y del movimiento de la mano. Sin embargo, finalmente, termino decidiéndome por realizar sólo una parte de la idea, que es la de labor social, con el fin de poder desarrollar de forma más profunda y avanzada esta parte, contando con diversas mejoras realizadas durante el proceso de desarrollo, y la resolución de los distintos problemas que se producen al ir evolucionando el proyecto.

Resumen en inglés:

This Bachelor Thesis has as objective help and provide to blind people their clothes just using their own voice. At the beginning, the idea was born like an ensemble idea to carry out a prototype which is capable of having a social labour and at the same time a development in industries, to do that, the robotic arm would be controlled by the voice and with the movements of the hand. Nevertheless, finally, I decided to make just a part of this idea, which is the social labour part, with the final purpose of developing in a deeper and more advanced way this part, which includes several improvements and the resolution of the different problems that will occur while the project is progressing.

(12)

2. Introducción.

Para llevar a cabo la idea planteada decidí realizar el brazo robótico en impresión 3D, y utilizar el entorno de desarrollo de Arduino, a través de un Arduino Mega, ya que es el microcontrolador de Arduino que más puertos contiene, y un Arduino UNO para realizar la central que utilizaremos para comunicarnos con el brazo robótico (Central de Comunicación). Además, realicé una aplicación desarrollada a través del MIT App Inventor para teléfonos Android para controlar el brazo robótico. Para esto, procedí por una serie de etapas:

En primer lugar, tenemos la selección de los componentes, módulos y sensores necesarios para llevar a cabo el prototipo. A continuación, nos encontramos con el diseño de los componentes, distinguiendo entre las partes del brazo, las bases, la central de comunicación, cubos, y soportes de los sensores. Seguidamente, tenemos la impresión 3D donde imprimimos los diseños en PLA. Tras esto, pasamos a los esquemáticos del brazo robótico, y de la central de comunicación, donde se muestran las conexiones de los distintos componentes electrónicos. La comprobación, funcionamiento, y programación básica de los sensores, donde se muestra como programar adecuadamente los sensores, para esto veremos algunos ejemplos. El siguiente paso muestra el asistente virtual, los sensores utilizados para desarrollarlo, funcionamiento, control, y el número de grabaciones que incluye. Una vez ya vista la programación básica de los sensores y el asistente virtual, pasamos al código del brazo robótico, y la central de comunicación. En este apartado, se encuentran los problemas que se han producido durante el desarrollo y las soluciones aplicadas. Ahora, ya visto en profundidad todos los aspectos del brazo robótico y la central de comunicación, pasamos a ver la aplicación desarrollada para controlar el prototipo a través de cualquier dispositivo Android. Después de ver la aplicación, pasamos a ver los problemas y soluciones que hemos propuesto a la hora de desarrollar la aplicación. Con todo el prototipo y la aplicación ya analizados, pasamos a realizar las conclusiones. Finalmente, tenemos un apartado referente a la bibliografía del proyecto, e incluimos un anexo el código fuente del brazo robótico, y de la central de comunicación.

(13)

3. Capítulos.

Para poder desarrollar este proyecto contamos con distintos capítulos con el fin de que recojan toda la información necesaria del Trabajo Final de Grado. Estos capítulos contienen diseño de las distintas piezas, selección, funcionamiento y programación de los distintos módulos, sensores, componentes y motores, desarrollo del asistente virtual Elora y de su aplicación para cualquier dispositivo Android, y la programación de todos los componentes integrados del Brazo Robótico funcionando unos con otros, y al igual ocurre en la Central de Comunicación. Los capítulos son:

• Capítulo 4. Selección y Funcionamiento de Componentes, Módulos y Sensores.

En este capítulo voy a proceder a describir los distintos componentes, módulos y sensores, así como su configuración necesaria para su correcto funcionamiento.

• Capítulo 5. Diseño. Este capítulo contiene todos los diseños desarrollados para poder llevar a cabo el Trabajo Final de Grado, estos son: Brazo Robótico, Gripper, Bases, Soportes Sensores, Cubos, Superficie de Entrega y Central de Comunicación.

• Capítulo 6. Impresión 3D. En este capítulo veremos las diferentes impresiones 3D realizadas por la impresora Ender 3 Pro a una calidad de 0,12 mm de altura de capa y un 20% de relleno.

• Capítulo 7. Esquemático y Conexiones. Este capítulo muestra el conexionado necesario para el funcionamiento de los componentes, módulos y sensores del Brazo Robótico, así como de la Central de Comunicación.

• Capítulo 8. Comprobación y Programación Básica de los Módulos, Sensores y Motores. En este capítulo analizaremos los códigos generales de los módulos, sensores y motores con el fin de comprobar el funcionamiento de ellos.

• Capítulo 9. Asistente Virtual Elora. Este capítulo describe las distintas cualidades y funciones del asistente virtual Elora. Además, también incluye los módulos que hacen posible implementar este asistente, y él número de grabaciones que contiene el Brazo Robótico para ofrecer posibles respuestas y explicaciones en función de lo que se le demande.

• Capítulo 10. Análisis de Código. En este capítulo analizamos de forma detallada el código del Brazo Robótico y de la Central de Comunicación.

• Capítulo 11. Problemas y Soluciones en el Diseño y Programación del Brazo Robótico y la Central de Comunicación. Este capítulo muestra los problemas que he encontrado a la hora de ir desarrollando tanto el Brazo Robótico como la Central de Comunicación, y las soluciones que he ido adoptando para resolver esos problemas.

• Capítulo 12. Aplicación Elora. En este capítulo apreciamos el diseño y el código de la aplicación Android Elora, desarrollada con el fin de poder controlar el Brazo Robótico desde el Smartphone.

(14)

• Capítulo 13. Problemas y Soluciones en el Diseño y Programación de la Aplicación Elora. Este capítulo muestra los problemas encontrados a la hora de desarrollar la aplicación Elora, y las soluciones abarcadas.

• Capítulo 14. Conclusiones. En este capítulo tenemos las conclusiones del Trabajo Final de Grado.

• Capítulo 15. Bibliografía. Este capítulo recoge toda la bibliografía utilizada que ha hecho posible que se desarrolle el proyecto.

• Capítulo 16. Anexos. En este capítulo podemos ver los códigos del Brazo Robótico y de la Central de Comunicación.

(15)

4. Selección y Funcionamiento de Componentes, Módulos y Sensores.

4.1. Brazo Robótico.

Para realizar el proyecto, en primer lugar, decidí entre diseñar mi propio brazo robótico, buscar uno con licencia libre que pudiera editar sin ninguna repercusión legal, o comprar uno hecho y adaptarlo al proyecto. Dada la ambición del proyecto, el presupuesto adaptado, ya que los brazos robóticos ya construidos tienen un alto precio, y el poco tiempo del que disponía me decanté por buscar un brazo robótico ya hecho y editar las partes que fueran necesarias, y diseñar sus componentes que no estuvieran incluidos. Tras realizar varias búsquedas, finalmente encontré el brazo robótico diseñado por ZORTRAX, el cual podemos apreciar en la siguiente imagen:

Figura 1. Brazo Robótico Zortrax.

Este brazo robótico cuenta con una muy buena estructura y estética, tiene 5 grados de libertad, ya que permite 5 giros, y como podemos apreciar la pinza no es funcional, es decir, no se mueve a través de ningún servomotor o motor, por lo tanto, como veremos más adelante en la etapa de diseño realicé una pinza en SolidWorks, y una nueva pieza que sirva para conectar la pinza con el brazo robótico. Además, con el propósito esconder los cables, microcontrolador, placas auxiliares, y baterías realicé también tres bases de 40 cm x 40 cm.

4.2. Motores Paso a Paso (NEMA 17) y placa controladora (A4988 y DRV8825).

Una vez ya seleccionado el brazo robótico, procedí a seleccionar los motores, donde por un lado buscaba la precisión, exactitud en el movimiento, y poder transportar mayores cargas; y por otro lado buscaba rapidez, que el motor tuviera el menor peso posible, y no necesitara mover cargas elevadas. De esta manera, centrándonos en la parte que buscaba la precisión, exactitud, y poder transportar mayores cargas que es la parte relativa al giro en los siguientes ejes:

(16)

Figura 2. Movimiento Motores NEMA17..

Utilizamos motores paso a paso, en este caso los NEMAS 17:

Figura 3. NEMA17.

Ya que, al ser motores paso a paso son muy precisos, pesan 350 gramos, lo que no añade demasiado peso al prototipo, al contrario que sus hermanos mayores, como los NEMAS 19 que pesan alrededor de 1 kg, y son mucho más grandes. Además, los NEMAS 17 cuentan con un torque de 2 kg/cm, el cual es suficiente para producir el movimiento que queremos de forma precisa.

Para controlar estos motores podemos utilizar las placas controladoras A4988 o las DRV8825:

(17)

Figura 4. Drivers A4988 y DRV8825 respectivamente.

Las cuales utilizan únicamente dos salidas digitales para controlar los motores, una para indicar el sentido de giro, y otra para indicar los pasos que queremos que avance el motor, la principal diferencia que tienen estas placas es la tensión máxima que pueden soportar, y la intensidad máxima que pueden soportar.

A4988 DRV8825

Tensión máxima 35 V 45 V

Intensidad máxima 2 A 2,5 A

Tabla 1. Tensión e Intensidad Máxima Drivers NEMA17.

Dado que su uso y montaje son idénticos, podemos afirmar que el modelo de placa DRV8825 es una mejora del modelo A4988, debemos tener en cuenta que a partir de corrientes superiores a 1 - 1,5 A tenemos que añadir unos disipadores de calor aleteados, los cuales incluyen las placas controladoras al comprarlas, puesto que las DRV8825 y A4988 elevan demasiado su temperatura.

Un punto a tener en cuenta, a la hora de utilizar las A4988 y las DRV8825 es la regulación de intensidad, o en inglés Chopping, puesto que ambos controladores cuentan con reguladores de intensidad incorporados, esto es debido a que los motores paso a paso necesitan tensiones nominales superiores que llevan una corriente nominal tan elevada que provocaría la rotura del bobinado de los motores. Por ejemplo, en un motor NEMA 17 que tiene una intensidad nominal de 1,2 A y una resistencia por fase de 1,5 Ω, necesitaría aplicando la Ley de Ohm V = I*R, una tensión nominal de 1,8 V. Sin embargo, a este nivel de tensión el motor ni se movería, para que empezará a producirse el movimiento en estos motores necesitamos una tensión nominal de alrededor de 12 V, lo que aplicando la Ley de Ohm de nuevo con la resistencia de 1,5 Ω, supondría que por las bobinas pasaría una corriente de 8 A, que al ser tan elevada destrozaría las bobinas. Por esto, introducimos los reguladores de intensidad, ya que nos permiten proporcionar una señal PWM, de forma que la corriente que le llega al motor es la corriente nominal de 1,5 A, puesto que el limitador sólo estará enviando el pulso un 15% del tiempo, y el demás tiempo permanecerá desconectado, y nos permitirá trabajar a tensiones superiores como la de 12 V. Para saber, a que intensidad de referencia y voltaje de refrerencia tenemos que poner el controlador tenemos que utilizar las siguientes fórmulas reducidas dependiendo de las placas:

(18)

Modelo Rs (mΩ) Fórmula

A4988 100 Imax = Vref/(8*Rs)

DRV8825 100 Imax = 2*Vref

Tabla 2. Cálculo Tensión de Referencia Drivers.

La intensidad nominal que necesitamos en los motores para realizar un correcto funcionamiento es la de 1,7 A, por tanto, resolviendo con las ecuaciones específicas podemos obtener el valor del voltaje de referencia de los controladores:

A4988

𝑉!"# = 𝐼$%& ∗ 8 ∗ 𝑅𝑠 = 1,7 ∗ 8 ∗ 0,1 = 1,36 𝑉

Ecuación 1. Cáculo Vref del Driver A4988.

Y, al estar trabajando en modo de paso completo (full step) tenemos que multiplicar el valor del Vref por 0,71, esto es debido al microstepping, el cual explicaremos tras los cálculos de los Vref.

𝑉!"# = 1,36 ∗ 0,71 = 0,966 𝑉

Ecuación 2. Cálculo Vref del Driver A4988 aplicando el coeficiente reductor.

DRV8825

𝑉!"# =𝐼$%&

2 = 1,7

2 = 0,85 𝑉

Ecuación 3. Cálculo Vref del Driver DRV8825.

Y de igual forma que antes aplicando el microstepping en full step, tenemos que el Vref es:

𝑉!"# = 0,85 ∗ 0,71 = 0,604 𝑉

Ecuación 4. Cálculo Vref del Driver DRV8825 aplicando el coeficiente reductor.

Sabiendo ya el valor que tiene el Vref en ambas placas ya podemos regular este valor utilizando un destornillador en el regulador de intensidad, y midiendo su valor conectando el positivo del polímetro al regulador, y el negativo al GND de la placa controladora.

Ahora bien, ¿qué es el microstepping?, El microstepping es una técnica que permite obtener pasos inferiores al paso nominal, esto se produce variando la corriente que pasa en cada momento por las bobinas de los motores, con el fin de desfasar la señal senoidal de las bobinas para tener un mejor campo rotatorio. El campo rotatorio que tenemos es el que genera una disminución en el número de pasos para que el giro del motor sea más exacto. Debemos tener en cuenta que, cuando trabajamos sin microstepping los controladores aplican de forma permanente un 71% de la corriente que le llega del limitador a cada bobina, y aplicando el microstepping podemos llegar a utilizar el 100%

de la corriente permanente en las bobinas. Para esto, tenemos que saber en qué modo

(19)

tenemos que trabajar. Los distintos modos de trabajo se obtienen aplicando tensión o no a los pines M0, M1 y M2, teniendo que los modos son:

Placas Controladoras Pines

A4988 DRV8825 M0 M1 M2

Full Step Full Step Low Low Low

½ Step ½ Step High Low Low

¼ Step ¼ Step Low High Low

1/8 Step 1/8 Step High High Low

- 1/16 Step Low Low High

- 1/32 Step High Low High

- 1/32 Step Low High High

1/16 Step 1/32 Step High High High

Tabla 3. Microstepping Drivers.

En mi caso, seleccioné trabajar en modo full step el cual le corresponde según el microstepping recogido en los datasheets de las A4988 y DRV8825 un 71% de la corriente que llega del limitador a las bobinas, para ambos casos.

Tabla 4. Corriente Máxima Utilizable Driver A4988.

Tabla 5. Corriente Máxima Utilizable Driver DRV8825.

(20)

Al principio para realizar el brazo robótico utilicé las A4988. Sin embargo, cuando estaba terminando el proyecto pasé a las DRV8825, ya que encontré un fallo con las A4988.

Más adelante, en el epígrafe de problemas y soluciones en el diseño y programación del brazo robótico hago referencia al problema que se produjo.

4.3. Servomotores (SG90 y MG996R).

Centrándonos en la búsqueda de la rapidez, menor peso posible del motor, y no necesitar mover cargas elevadas utilicé los servos, ya que son motores cuyo peso es reducido, entorno a 9 gramos el SG90, y 55 gramos el MG996R, son muy rápidos, ya que giran en función de unos determinados grados (desde 0º a 180º), y no son capaces de mover cargas excesivas, ya que en el prototipo sólo tienen que transportar cubos que simulan las prendas de ropa.

Figura 5. Servomotor SG90.

Figura 6. Servomotor MG996R.

(21)

Los servos que introduje permitían el movimiento en los siguientes ejes:

Figura 7. Movimiento Servomotores.

Al inicio del proyecto realicé un diseño adecuado a los servos SG90 que tienen un torque 1,8 kgf*cm. Sin embargo, conforme fue desarrollándose el proyecto cambié a los servos MG966R que tienen un torque de 9,4 kg/cm recibiendo una alimentación de 4,8 V, ya que encontré un problema que posteriormente, en el epígrafe de problemas y soluciones en el diseño y programación del brazo robótico explicaré.

4.4. Módulos Bluetooth (HC05).

Uno de los temas más importantes a lo hora de realizar este proyecto era determinar el tipo de conexión que iba a utilizar para interconectar tanto la central de comunicación como el Smartphone Android al Brazo Robótico. Para esto pensé en dos opciones o realizar una conexión Wifi, o realizar una conexión Bluetooth. A la hora de realizar una conexión Wifi iba a contar con el módulo ESP8266:

Figura 8. ESP8266.

Lo que nos hubiera permitido crear una propia red Wifi a través del Comando Server en el entorno de Arduino, o conectar el módulo a la red doméstica, y configurarlo para que tuviera una IP Estática, para poder encontrar el módulo a la hora de enviar comandos entre la Central de Comunicación o el Smartphone al Brazo Robótico. Sin embargo, como bien sabemos en nuestros hogares tenemos múltiples dispositivos conectados a la red, y

(22)

con el fin de no crear ninguna interferencia entre la Central de Comunicación, el Smartphone y el Brazo Robótico, ya si estuvieran conectados a la red doméstico, y no tener que estar cambiando entre una red creada desde el módulo ESP8266 y la red del hogar, decidí utilizar una conexión Bluetooth, en la cual sólo interfirieran los módulos necesarios, para esto tuve la duda de decidirme entre dos tipos de Bluetooth, el HC-05, y el HC-06.

En primer lugar, ya sabiendo que vamos a realizar una conexión Bluetooth, tenemos que entender cómo funcionan estas conexiones. Para ello, tenemos una conexión maestro- esclavo, en la cual uno de los Bluetooth es el maestro que es el que puede mandar órdenes y recibirlas; y otro es el esclavo, que suele puede recibir órdenes, y puede mandar información al maestro, siempre y cuando el maestro se la pida.

Figura 9. Funcionamiento Maestro-Esclavo.

Ahora, sabiendo cómo funciona la conexión maestro-esclavo faltaba determinar que módulo Bluetooth utilizar. Pues bien, dado su bajo precio y buen funcionamiento 2 eran los candidatos: el HC-05 y el HC-06. Sin embargo, el HC-05 es más complejo que el HC- 06, ya que puede funcionar en ambos modos, tanto como maestro como esclavo. Y, además, el HC-05 espera un terminador de línea “\n”, mientras que el HC-06 envía la señal tras un determinado tiempo. Por esto, el HC-05 era la opción más viable para el proyecto.

Figura 10. Módulos HC-05 y HC-06 respectivamente.

Como podemos apreciar el HC-05 cuenta con 6 patas, mientras que el HC-06 cuenta con 4, pero las conexiones son las mismas, ya que las patas que se encuentran en los extremos del HC-05 no se conectan, como veremos en el apartado de esquemático y conexiones.

(23)

En el prototipo contamos con 3 Bluetooth, 2 en el Brazo Robótico, y 1 en la Central de Comunicación, trabajando ambos Bluetooth del Brazo Robótico como esclavos, ya que uno será el esclavo de la comunicación que llega de la Central de Comunicación y el otro será el esclavo del Smartphone, y el Bluetooth de la Central de Comunicación actúa como maestro, al igual que hace el dispositivo Android.

4.5. Sensor de Color (TCS34725).

A la hora de coger la ropa, lo que más sentido tenía para distinguir entre las prendas era poder clasificarlas por su color, para esto recurrimos al sensor de color TCS34725:

Figura 11. Sensor de Color TCS34725.

El cual, al contrario que el TCS3200, es capaz de detectar los colores que mayor precisión.

Sin embargo, este sensor tiene defectos al igual que todos en la medida, ya que no es totalmente precisa. Los colores son detectados a través de una matriz 3x4 que está compuesta por fotodiodos que detectan los colores rojo, verde, azul, y sin color (clear) y un filtro de infrarrojos, lo que permite reducir el ruido del ambiente, y la ganancia y el tiempo de medición es ajustado por software. Lo que podemos apreciar en los siguientes diagramas:

Figura 12. Diagrama de Medición del Color.

Que, como podemos ver según la longitud de onda dependiendo del color, tenemos un tipo de respuesta relativa u otra, que es lo que mide el sensor TCS34725. Para realizar la comunicación y pasarle los valores al Arduino, este sensor utiliza una comunicación I2C, lo que hace realmente sencillo la lectura de los valores desde el Arduino.

(24)

4.6. Reproductor de sonidos .WAV (DFPlayer Mini) y Altavoz.

Para realizar los sonidos del brazo robótico al principio se iba a utilizar un Buzzer. Pero, esto no me permitía reproducir sonidos de audio como hace un asistente virtual, tras una búsqueda, finalmente, encontré el módulo DFPlayer Mini:

Figura 13. Módulo DFPlayer Mini.

Este módulo permite reproducir sonidos con una freciuencia de 8, 11.025, 12, 16, 22.05, 24, 32, 44.1, 48 kHz. Por lo tanto, podemos reproducir toda clase de sonidos, como arvhivos de audio. Para reproducir estos sonidos, el módulo los extrae de la memoria de una tarjeta micro-SD que se puede introducir en él (siendo la capacidad máxima de la tarjeta SD 32 GB). El DFPlayer Mini soporta hasta 100 carpetas y 255 archivos .MP3 o .WAV en cada carpeta. Sin embargo, por la experiencia los archivos .WAV los reconoce mejor. Además, es totalmente compatible con el sistema de archivos de Windows FAT16 y FAT32, y su volumen es ajustable en un rango de 30 niveles. Todo esto, hizo posible introducir grabaciones de audio, para dar pie al desarrollo del Asistente Virtual. Como es lógico, estos sonidos son reproducidos a través de un altavoz conectado al DFPlayer Mini:

Figura 14. Altavoces.

(25)

4.7. Sensores Ultrasonidos.

Para poder introducir un sistema de seguridad en el brazo robótico opté por el uso de los siguientes sensores de ultrasonidos:

Figura 15. Sensores Ultrasonidos.

Los cuales son los que vienen en los kits de Arduino, estos sensores nos permiten medir la distancia a través de el envío de un pulso de alta frecuencia. Este pulso es enviado, y rebota con el objeto o persona, llegando a un micrófono de alta frecuencia que contiene el sensor, realizando la medida del tiempo que tarda en volver el pulso, obtenemos la distancia a la que se encuentra el objeto, o persona, a través del siguiente cálculo:

343𝑚

𝑠 = 1

29,2𝑐𝑚/𝜇𝑠

Ecuación 5. Paso velocidad del sonido de m/s a cm/µs.

Siendo 343 m/s la velocidad del sonido en el ambiente a una temperatura de 20ºC y una humedad relativa del 50%.

La distancia vendrá dada por:

𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 (𝑐𝑚) = 𝑇𝑖𝑒𝑚𝑝𝑜 ∗ 1 29,2 ∗ 2

Ecuación 6. Cálculo Distancia Sensor de Ultrasonidos.

Y multiplicamos por 2 en el denominador, ya que tiene que ir y volver el pulso:

(26)

Figura 16. Funcionamiento Sensor de Ultrasonidos.

A continuación, este tipo de sensor no es del todo preciso ya que es muy barato y sencillo de usar, por lo que puede provocar que la onda refleje, falseando la medida. Finalmente, estos sensores son válidos para un rango de 2 cm a 400 cm, con una precisión de ±0,3 cm.

4.8. Convertidor DC-DC Reductor (LM2596).

El voltaje que suministran las baterías es mayor que el voltaje de entrada necesario para los sensores, componentes, y módulos, por tanto, para reducir el voltaje de entrada a los valores óptimos, recurrimos a un convertidor DC-DC Reductor:

Figura 17. Convertidores CC/CC Reductores LM2596.

En este caso seleccionamos el LM2596, ya que soporta una tensión de entrada de 4,5- 40VDC proporcionando una tensión de salida de 1,23-37V de continua, rango que se ajusta más que de sobra a la tensión que sacan nuestras baterías (7,4 VDC).

4.9. Módulo de reconocimiento de voz V3.

Uno de los mayores retos que tenía el proyecto era poder comunicarte con el brazo robótico utilizando simplemente tu voz, para esto tras muchas horas de búsqueda encontramos el módulo desarrollado por Elechouse:

(27)

Figura 18. Módulo de Reconocimiento de Voz V3.

Este módulo es capaz de almacenar hasta 255 comandos. Sin embargo, sólo podemos utilizar 7 comandos a la vez, los cuales tienen una duración máxima de entre 2 y 3 segundos. Así que para nuestro prototipo nos viene perfecto, ya que tenemos 7 posibles combinaciones, que son: coger una camiseta azul, coger una camiseta amarilla, coger una camiseta roja, coger un pantalón verde, coger un pantalón azul, coger un pantalón rojo, y apágate (para apagar el brazo robótico).

Para poder grabar, y cargar los comandos en el módulo tenemos que recurrir a la librería vr_simple_train y abrir uno de los ejemplos. Tras esto, abrimos el monitor serie y lo configuramos a 115200 baudios. Y, a continuación en la siguiente pantalla realizamos las grabaciones, y cargamos los comandos:

Figura 19. Entrenamiento módulo Reconocimiento de Voz V3.

Para poder realizar una grabación tenemos que ejecutar el comando “sigtrain”, seguido del número de espacio que queremos que ocupe de las 7 grabaciones posibles, y el nombre que queremos darle a la grabación. Por ejemplo, para grabar el comando de pantalón verde en el espacio 0, tendríamos que ejecutar: “sigtrain 0 PantalonVerde”, y tras esto decir lo que queremos que reconozca el módulo, el módulo hace mínimo 2 grabaciones por comando para ser más preciso. A continuación, para cargar el comando tan sólo tenemos que poner “load” seguido del espacio a ocupar. Por ejemplo: “load 0”, y quedaría guardado el comando “PantalónVerde” en el espacio 0.

(28)

Con este módulo y el DFPlayer Mini, ya estamos en condiciones de desarrollar nuestro asistente virtual al completo.

4.10. Lector de Tarjetas (RFID-RC522).

Para añadirle seguridad a los comandos, y que no estuviera la Central de Comunicación escuchando todo el rato decidimos introducir un lector de tarjetas que funcionara como llave:

Figura 20. Lector de Tarjetas RFID RC522.

Recurrimos al típico RFID-RC522 que incluyen muchos kits de Arduino, y que funciona realmente bien. De forma que al acercar la tarjeta correcta desbloquea el brazo, y tras esto el brazo realiza una explicación de cómo comunicarse con él. Si la tarjeta que se le acerca es incorrecta, hace que salte una alarma que suena en el Buzzer que incluye la Central de Comunicación. Y tras apagar el brazo, cuando ejecutas el comando “Apágate”, es necesario volver a acercar la tarjeta a la Central de Comunicación, para poder activar de nuevo el Brazo Robótico.

4.11. Buzzer.

Figura 21. Buzzer.

Para reproducir sonidos en la Central de Comunicación, nos basta con un Buzzer el cual tiene dos nodos, el común a tierra, y el positivo a una salida digital del microcontrolador,

(29)

para proporcionar un sonido u otro. Este Buzzer, reproduce una melodía ascendente al desbloquear la Central de Comunicación con la tarjeta correspondiente, y un sonido de alarma si se acerca la tarjeta errónea. A la hora de programarlo recurrimos a la librería

“pitches.h” para tener todas las notas musicales ya definidas.

4.12. Baterías de 3,7 V y 2200 mAh.

Para alimentar el circuito dado que los componentes necesitaban mucha energía, tuvimos que implementar baterías de 3,7V a 2200 mAh, las cuales se conectan en serie para suministrar 7,4V en sus bornes:

Figura 22. Baterías de 3,7V y 2200 mAh.

Ahora bien, debido a la alta demora de energía que necesitan los servos, el sensor de color, los ultrasonidos, motores paso a paso, etc. Optamos por introducir 3 packs de 2 baterías en serie, suministrando un pack a los servos y controladores de los motores, otro a los módulos, sensores, y componentes, y otro al microcontrolador Arduino.

4.13. Transformador de 12V y 2000 mAh.

Figura 23. Transformador de 12V y 200 mAh.

Debido a que los motores paso a paso necesitan una tensión de 12V y una corriente de 2 A para funcionar, tuvimos que comprar un transformador el cual proporciona un máximo 12V y 2000 mAh, que se ajusta a las condiciones de operación necesarias.

(30)

4.14. Interruptores.

Para poder conectar y desconectar el brazo robótico y la central de comunicación recurrimos a unos interruptores:

Figura 24. Interruptores.

4.15. Pulsadores.

Una vez visto todos los componentes, sólo nos faltaba encontrar la manera de cambiar el modo de control de la Central de Comunicación a la aplicación, y viceversa, para esto introdujimos 2 pulsadores, que activaban la lectura un Bluetooth u otro de los 2 que componen el prototipo:

Figura 25. Pulsadores.

(31)

5. Diseño.

Todos los diseños se han realizado en el programa de diseño SolidWorks.

5.1. Brazo Robótico.

A la hora de realizar el brazo robótico, tan sólo tenemos que modificar la parte superior del brazo y la pinza:

Figura 26. Diseño Brazo Superior del Brazo Robótico.

5.2. Pinza (Gripper).

Para la pinza me inspiré en algunos modelos que ya estaban desarrollados en Amazon, y utilizaban una pinza muy similar a la que diseñé:

Figura 27. Diseño Gripper.

(32)

5.3. Bases.

Para diseñar donde tendría que apoyarse el brazo robótico, decidí diseñar 3 bases de 200x200x28 mm, las cuales sirven también para esconder los cables, y para acoplar el altavoz, los módulos Bluetooth, los pulsadores, el sensor de color, y los interruptores que accionan el Brazo Robótico. Cabe destacar, que se diseñaron 3 bases, ya que diseñar sólo una era demasiado grande para el tamaño de la base de impresión de la Ender 3 Pro, por lo que no se podría haber impreso. Como podemos observar en las siguientes imágenes, la base delantera contiene unos salientes verticales, en los cuales se introducirán los cubos que simulan las prendas, la base central contiene las muestras para que encaje el brazo robótico, y almacenará las baterías, y la base trasera, está formada en principio por una caja en la que se encontrará la Protoboard, el Arduino, y los diversos módulos y componentes con sus respectivas conexiones, para asegurar el funcionamiento del brazo.

Figura 28. Diseño Ensamblaje Bases.

Figura 29. Diseño Base Central.

(33)

Figura 30. Diseño Base Delantera.

Figura 31. Diseño Base Trasera.

5.4. Soportes Sensores.

5.4.1. Soporte Bluetooth.

Para poder sujetar el módulo Bluetooth a la base delantera, diseñé el siguiente soporte, el cual abraza al módulo Bluetooth, y encaja la base del soporte con la base delantera:

Figura 32. Diseño Soporte Bluetooth.

(34)

5.4.2. Soporte Ultrasonidos.

Al igual que para el módulo Bluetooth, diseñé un soporte para el sensor de Ultrasonidos, que abrazara al sensor, y este encajara en la base delantera:

Figura 33. Diseño Soporte Sensor de Ultrasonidos.

5.5. Cubos.

Para simular las prendas, diseñé unos cubos de 15x15x15 mm, con un agujero de 10 mm de diámetro en el centro para que pudieran ser introducidos en los salientes de la base delantera.

Figura 34. Diseño Cubo.

(35)

5.6. Superficie de Entrega.

Para entregar los cubos se diseñó una superficie de 50x70x25 mm, con el fin de depositarlos en ella:

Figura 35. Diseño Superficie de Entrega.

5.7. Central de Comunicación.

Finalmente, para poderse comunicar con el brazo robótico se diseñó una central con forma de caja, que contenía los huecos necesarios para el lector de tarjetas RFID RC522, y el módulo de voz V3, incluido un saliente para el módulo Bluetooth que se comunica con el brazo robótico.

Figura 36. Diseño Central de Comunicación.

(36)

Figura 37. Vistas Diseño Central de Comunicación.

6. Impresión 3D.

Una vez diseñados todos los componentes se procedió a imprimir todos los componentes en la impresora Ender 3 Pro en material PLA, a una distancia entre capas de 0,12 mm, con un relleno del 20%, y utilizando soportes cuando fuera necesario. Todos los archivos

“.gcode”, que son los archivos que lee la impresora 3D, han sido desarrollados a través del programa de licencia gratuita Cura, el cual lee los archivos en formato “.stl” generados en SolidWorks.

Figura 38. Obtención de archivo ".gcode" en Cura.

(37)

6.1. Brazo Robótico.

En primer lugar, se realizó la impresión del brazo robótico, empezando por las piezas que tendrían color plata:

Figura 39. Impresión de las Piezas Color Plata del Brazo Robótico.

A continuación, se imprimieron las piezas de color negro del Brazo Robótico, siendo estas la estructura central del brazo, y el soporte.

(38)

Figura 40. Impresión de las Piezas Color Negro del Brazo Robótico.

Finalmente, una vez que estaban impresas las piezas plateadas y negras, empecé a montar el brazo robótico, empezando por encajar la parte inferior del brazo robótico, y tras esto la superior:

(39)

Figura 41. Montaje Brazo Robótico.

(40)

6.2. Pinza (Gripper).

Tras imprimir el brazo robótico, se imprimió la pinza o gripper que cogería los cubos:

Figura 42. Montaje Gripper.

Una vez ya impresa la pinza, y montado el servomotor que acciona el gripper, se conectó con el brazo robótico:

Figura 43. Montaje Brazo Robótico y Gripper.

(41)

Finalmente, para concluir con el brazo robótico y mejorar su estética, se imprimieron unos embellecedores en rojo:

Figura 44. Embellecedores Rojos.

6.3. Soportes Sensores.

A continuación, se imprimieron los soportes de los módulos Bluetooth, y de los sensores de Ultrasonidos:

Figura 45. Soportes Bluetooth y Sensor de Ultrasonidos.

(42)

6.4. Parte Delantera de la Base.

Una vez ya concluida definitivamente la impresión del brazo robótico, la pinza, y los soportes de los sensores, seguí con la impresión de las bases, empezando por la delantera:

Figura 46. Base Delantera.

Una vez que se fueron teniendo las bases, se fueron acoplando los componentes y el cableado:

Figura 47. Base Delantera Montada.

(43)

6.5. Parte Central de la Base.

Con la base delantera ya montada, se procedió a imprimir la base central, y tras esto se incorporaron los componentes:

Figura 48. Base Central Montada.

6.6. Parte Trasera de la Base.

Finalmente, para concluir con las bases, imprimimos la base trasera:

Figura 49. Base Trasera.

(44)

Finalmente, con la última base impresa se unió el cableado de las distintas bases, y se conectó con la Protoboard y el Arduino Mega.

Figura 50. Ensamblaje Bases y Brazo Robótico con Cableado y Baterías.

6.7. Superficie de Entrega y Cubos.

Tras tener todo el brazo ya desarrollado, se imprimió la superficie de entrega y los distintos cubos:

Figura 51. Superficie de Entrega y Cubos.

(45)

6.8. Central de Comunicación.

Cuando ya tenía impreso todo los componentes y el brazo robótico, procedí a imprimir la Central de Comunicación y a realizar las conexiones necesarias:

Figura 52. Central de Comunicación.

(46)

7. Esquemático y Conexiones.

7.1. Brazo Robótico.

El esquemático del brazo robótico se ha divido entre partes (motores, módulos y sensores (excepto los sensores de ultrasonidos), y los sensores de ultrasonidos), ya que es demasiado grande, y sino no se apreciaría bien las conexiones de los componentes.

7.1.1. Motores y Servomotores.

Figura 53. Esquemático Motores y Servomotores.

En el anterior esquemático podemos apreciar las conexiones de los distintos motores, como vemos los motores paso a paso están conectados a los drivers DRV8825. Para el

(47)

primer NEMA 17 el pin DIR está conectado a la salida 9 del microcontrolador, y el STEP está conectado al pin 8 del Arduino, el segundo NEMA 17 tiene el pin DIR conectado al pin 22 del Arduino, y el STEP conectado al 23, y el tercer motor paso a paso tiene el pin DIR conectado al pin 44, y el STEP conectado al 48. También, en el esquemático destaca unos condensadores de 100 µF conectados en paralelo a la tensión de entrada de 12 V, el motivo de establecer estos condensadores es para mantener constante y continua el valor de dicha tensión.

Los servomotores están conectados a los pines 13 y 7 respectivamente.

Además, como vemos tenemos que la tensión de entrada necesaria para los motores paso a paso es de 12 V a 1 A, también podemos observar que tenemos una entrada de tensión de 5V auxiliar, esto es debido a que la tensión necesaria para los servomotores es muy elevada, y no es suficiente con la tensión de 5V que proporciona el Arduino.

7.1.2. Módulos y Sensores (Excepto Sensores de Ultrasonidos).

Figura 54. Esquemático Módulos y Sensores (Excepto Sensores de Ultrasonidos).

La principal idea de este esquemático era que contuviera todos los sensores y módulos.

Sin embargo, los sensores de ultrasonidos ocupan mucho espacio, y debido al alto número de conexiones que tienen, no permitían apreciar adecuadamente las conexiones de los

(48)

demás módulos, es por esto por lo que se ha decidido introducir los sensores de ultrasonidos en un esquemático diferente.

Podemos ver que el primer módulo Bluetooth está conectados a los pines 50 y 51 desde sus pines Rx y Tx respectivamente, y el segundo módulo Bluetooth está conectado a los pines 52 y 53, desde Rx y Tx. El módulo DFPlayer Mini tiene conectado a él un altavoz, y sus pines Rx y Tx están conectados a los pines 10 y 11 del Arduino. El sensor de color está conectado a las entradas analógicas del Arduino, esto es, desde el pin SDA a la entrada A4, y desde el pin SCK a la entrada A5. Finalmente, los botones están conectados a los pines 28 y 32.

Al igual que ocurría con el anterior esquemático tenemos una tensión auxiliar de 5V, aunque cabe destacar que es una tensión que viene de unas baterías distintas a la de los motores, en este caso se necesita una tensión auxiliar para suplir la tensión que necesitan los módulos y sensores, ya que no tienen tensión del Arduino.

7.1.3. Sensores de Ultrasonidos.

Figura 55. Esquemático Sesnores de Ultrasonidos.

Para el caso de los sensores de ultrasonidos podemos ver que el primer sensor conecta su pin Trigger con el pin 24 del Arduino, y el Echo con el 25, para el segundo ultrasonidos el Trigger se conecta con el 30, y el Echo con el 26, para el tercer ultrasonidos el Trigger

(49)

está conectado con el 5, y el Echo con el 4, y para el último ultrasonidos el Trigger se conecta con el 3, y el Echo con el 2.

Como ocurre en los demás sensores y módulos, para los sensores de ultrasonidos tenemos una tensión auxiliar de 5V, en este caso esta tensión es la misma que tiene el esquemático de módulos y sensores, ya que como bien hemos explicado antes, lo único que hemos hecho ha sido separar los sensores de ultrasonidos de los demás para ver mejor sus conexiones.

7.2. Central de Comunicación.

Figura 56. Esquemático Sensores de Ultrasonidos.

Para el caso de la central de comunicación, el Arduino está alimentado a través de una batería de 9V, y los diversos componentes obtienen su alimentación a través de la salida GND y 5V del Arduino. Para el RFID RC522 podemos apreciar que sus conexiones son:

(50)

SDA al pin 10, SCK al pin 13, MOSI al pin 11, MISO al pin 12, y RST al pin 9. Para el módulo Bluetooth sus pines Tx y Rx están conectados a los pines 4 y 5 respectivamente.

El módulo de voz tiene su pin Rx conectado al pin 2, y su pin Tx conectado al pin 3. Y, finalmente, el buzzer está conectado al pin 6 del Arduino.

8. Comprobación, y Programación Básica de los Módulos, Sensores y Motores.

Para comprobar en primer lugar que todos los módulos, sensores y motores funcionaban correctamente, antes de proceder a realizar el código de todo el Brazo Robótico, decidí hacer pequeños códigos para cualquier motor, módulo o sensor y así poder comprobar si obtenía la respuesta esperada.

8.1. Brazo Robótico.

8.1.1. Motores Paso a Paso (NEMA 17) y placa controladora (A4988 y DRV8825).

Para los NEMA17, primero definí los pines que utilizaban dichos motores y a continuación los inicialicé como salidas. En este punto fue cuando tuve la idea de cómo estructurar el código del movimiento de los motores paso a paso del Brazo Robótico, para esto lo que pensé fue en crear funciones que realizaran el movimiento de ir arriba, abajo, levantar y subir el brazo superior, o girar a derechas e izquierdas, pasándole a las funciones el número de pasos que tenían que recorrer los NEMA17, y después implementar estas funciones en otras funciones más complejas, que serían, por ejemplo, ir a coger un dado. En esta prueba de código, se realizaron las funciones de MoverArriba, en la que define el pin DIR2 como a valor alto, y tras esto, a través de un bucle for establece el valor del pin STEP2 a valor alto y bajo intercalándose cada 30 ms, de esta forma se consigue que el brazo se pueda mover hacia arriba, e igual pasa con la función MoverAbajo, salvo que en este caso para establecer el movimiento descendente tenemos que darle al pin DIR2 el valor bajo. Además, podemos observar que en el bucle for de la función MoverAbajo los delays son 10 ms, por lo que el brazo bajará más rápido de lo que sube. Finalmente, el funcionamiento de este código lo vemos en el void loop, donde el brazo se espera 5 s para empezar la primera vez, gira 170 pasos hacia abajo, espera 8 s, gira 170 pasos hacia arriba, espera 2 s, y se vuelve a ejecutar el programa.

8.1.2. Servomotores (SG90 y MG996R).

En el código de los servomotores, lo primero que hice fue incluir la librería de los servos

“Servo.h”, tras establecí el pin 13 como el pin del servo, y lo inicialicé en el setup.

Finalmente, moví el servo a la posición de 90 grados para comprobar su funcionamiento.

(51)

8.1.3. Módulos Bluetooth (HC05).

En primer lugar, tuve que definir los módulos Bluetooth como maestro o esclavo, para esto hay que mantener pulsado el botón que tiene el módulo Bluetooth cuando se enciende, de esta forma entra en el modo de edición. A continuación, hay que definir el funcionamiento de los módulos Bluetooth, ya sea maestro o esclavo, y sus configuraciones, a través del puerto Serie en el ordenador, utilizando los siguientes comandos:

• AT+NAME”Nombre que queramos”, de esta forma establecemos el nombre de nuestro dispositivo Bluetooth.

• AT+TYPE, en este caso este comando nos muestra si el Bluetooth va a solicitar contraseña para vincularse a él. Para el caso del Bluetooth que se va a conectar con el Bluetooth de la Central de Comunicación lo dejaremos sin contraseña, para que la comunicación sea lo más sencilla posible. Sin embargo, para el Bluetooth que se conectará con el dispositivo Android, estableceremos contraseña que será

“1234”.

• AT+ROLE, este código nos muestra como está funcionamiento el Bluetooth, si en modo maestro o esclavo, si el comando devuelve un 0 está en modo esclavo, y si devuelve un 1 en modo maestro. Para cambiar el modo de funcionamiento del Bluetooth, tan sólo tendríamos que escribir AT+ROLE”0 o 1”, eligiendo 0 si queremos que se comporte como esclavo, o 1 como maestro. En este caso ambos Bluetooth trabajarán como esclavos.

• AT+LADDR, Este es último comando que utilizaremos para el primer Bluetooth del Brazo robótico, el cual muestra la dirección MAC del módulo, que nos servirá para introducirla en el módulo Bluetooth de la Central de Comunicación, y que de esta forma queden vinculados.

La configuración que utilizará el módulo Bluetooth de la Central de Comunicación lo veremos más adelante en el epígrafe 7.2.2.

Pasando ahora a analizar el código, podemos ver que lo único que hacemos es establecer la comunicación a través de dos Seriales para testear el funcionamiento de los módulos Bluetooth, para esto inicializamos los Seriales en el Setup a 38400, y 9600 baudios, y después hacemos que el serial que esté disponible, escriba en el serial contrario, lo que ha leído, ¡en este caso sería “Configuration!”. Así, la comunicación entre los módulos quedaría comprobada.

(52)

8.1.4. Sensor de Color (TCS34725).

El sensor TCS34725 utiliza las librerías “Wire.h”, “Adafruit_TCS34725.h” y

“ColorConverterLib.h”, tras esto, establecemos tcs como la variable del sensor de color, e inicializamos el Serial en el Setup a 9600 baudios. Una vez hecho esto, se realiza la lectura de los colores, y se almacenan en las variables red, green y blue, tras esto se dividen entre el sumatorio y se multiplica cada color por 256, siendo almacenado, en las variables r, g y b. A continuación, se utiliza la función RgbToHsv de la librería ColorConverter, pasándole los valores de r, g y b, y devolviendo los valores de hue, saturation y value. Finalmente, sólo tenemos que multiplicar la variable hue * 360, y pasarla a la función PrintColorName, que nos devolverá que color estamos leyendo.

8.1.5. Reproductor de sonidos .WAV (DFPlayer Mini) y Altavoz.

Para programar el módulo de sonido DFPlayer Mini tenemos que incluir las librerías

“Arduino.h”, “DFRobotDFPlayerMini.h” y “SoftwareSerial.h”, después definimos el nuevo Serial (“SerialDFP”) en los pines 10 y 11 del Arduino, y la variable que controlara el DFPlayer Mini (“myDFPlayer”). Una vez hecho esto, inicializamos la variable del DFPlayer Mini con el nuevo Serial, establecemos el tiempo de comunicación con el módulo de sonido en 500 ms, ponemos el volumen al máximo (30), subimos y bajamos el volumen para comprobar que funciona, ponemos el equalizer a modo normal, y realizamos la lectura de archivos a través de la memoria SD. Finalmente, en el Loop reproducimos el primer archivo de audio .WAV que contiene la memoria SD durante 3 s.

Se puede apreciar en el código que todos los comandos que puede utilizar el DFPlayer Mini están comentados en el Setup.

8.1.6. Sensores Ultrasonidos.

En primer lugar, se definieron los pines Trigger y Echo de los cuatro sensores de ultrasonidos, y en el Setup establecemos los Trigger como salidas, y los Echo como entradas. Antes de explicar el Loop, pasaremos a explicar las dos funciones que componen el código de prueba de los sensores de ultrasonidos. A la función “ping” se le pasa los parámetros Trigger y Echo, y ésta devuelve el valor de la distancia en centímetros. La función LecturaUltrasonidos establece la distancia de todos los ultrasonidos en cm, y además, contiene una variable llamada control inicializada a 0 que establece que si la distancia en alguno de los ultrasonidos es menor a 5 cm, se pone a 1, una vez que la variable control está a 1 a través de un bucle while escribe de forma continuada en el Serial que ultrasonidos detecta que está a menos de 5 cm, y finalmente para salir del bucle establece que si la distancia de todos los ultrasonidos es mayor que 5 cm, pone la variable control a 0. Finalmente, la función LecturaUltrasonidos es llamada desde el Loop y se repite infinitamente. El propósito de la función LecturaUltrasonidos aparte de comprobar el funcionamiento de los ultrasonidos, es establecer una distancia de seguridad en el Brazo Robótico para prevenir de cualquier accidente.

(53)

8.1.7. Pulsadores.

Con el fin de comprobar el funcionamiento de los interruptores, primero se definieron los interruptores en los pines 28 y 32 del Arduino, y se establecieron como INPUT_PULLUP en el Setup. Tras esto, decidí implementar una función que realizara la lectura de los pulsadores, llamada LecturaPulsador, en la cual, cuando el valor de la lectura fuera bajo o LOW, es decir que el botón estuviera pulsado, pusiera una variable, llamada funcionamiento a 1 o 2, de esta forma podría comprobar si funcionaran los pulsadores, y también, seleccionar más tarde si quieres controlar el Brazo Robótico desde la Central de Comunicación o desde el dispositivo Android. Finalmente, para que esta función se ejecute, es llamada desde el Loop.

8.2. Central de Comunicación.

8.2.1. Módulo de reconocimiento de voz V3.

Para el funcionamiento del módulo de reconocimiento de voz, primero había que entrenar el módulo para que almacenara los comandos de voz.

Para entrenar el módulo tuve que utilizar los siguientes comandos desde el Serial:

• sigtrain “posición que ocupa” “nombre de la señal”, este comando sirve para almacenar la señal que queramos, para esto tenemos que introducir donde queremos guardarla, ya que tenemos 80 posiciones, y el nombre que tendrá la señal para identificarla. Las posiciones van desde el 0 hasta el 79, por lo que un ejemplo de uso de este comando sería: sigtrain 0 camiseta. Tras introducir el comando en el Serial, nos pedirán que hablemos al micrófono para captar la señal, y después que repitamos este proceso una vez más, para que la señal sea lo más pura posible.

• load “posición”, este comando sirve para cargar las señales ya almacenadas en el módulo, de forma que cuando hablemos al micrófono comparará la señal que entra con las que ya hay cargadas. Para cargar nuestros comandos tan sólo tenemos que escribir: load 0 1 2 3 4 5 6, ya que en este caso los comandos ocupaban las posiciones desde la 0 hasta la 6. Cabe mencionar que el módulo sólo soporta tener cargadas a la vez 7 señales, por lo que establecí que las señales que guardara el módulo de reconocimiento de voz son: Camiseta Azul, Camiseta Roja, Camiseta Amarilla, Pantalón Verde, Pantalón Azul, Pantalón Rojo y Apágate.

• vr, este comando sirve para comprobar si las señales se han cargado bien en el módulo.

Una vez ya entrenado el módulo procedí a comprobar que detectaba las señales que se habían cargado en el mismo, para esto desarrollé el código del mismo.

(54)

Donde lo que hace este código es primeramente cargar las librerías necesarias (“SoftwareSerial.h” y “VoiceRecognitionV3.h”), ahora establece la variable de reconocimiento de voz en los pines en los que se va a leer, en este caso en los pimnes 2 y 3, tras esto establece el valor de los comandos de las señales, y en el Setup inicializa las señales, y en el Loop, la señal de entrada se procesa a través del comando recognize que devuelve un valor mayor que 0 si la señal de entrada corresponde con alguna señal almacenada, y este valor es almacenado en una variable entera llamada ret. Finalmente, haciendo un switch del buf, que es la señal leída en recognize, se obtiene la respuesta de la señal que queramos, para simular que todo funcionaba perfectamente, lo que se hizo fue escribir en el puerto Serial unos mensajes cuando se ejecutaba el switch (por ejemplo:

Traigo Pantalón Verde). Además, podemos observar que al final del loop se ejecuta la función printVR, que esta llama después a la función printSignature, donde lo que hacen es escribir por el puerto Serial el valor de la señal de entrada.

8.2.2. Módulo Bluetooth (HC05).

El código utilizado para la programación del módulo Bluetooth de la Central de Comunicación, es el mismo que utilizamos para programar los módulos Bluetooth en el Brazo Robótico, salvando que la configuración del módulo Bluetooth de la Central de comunicación es distinta a los otros módulos:

• AT+NAME”Nombre que queramos”, de igual forma que antes, ponemos el nombre que queramos a nuestro dispositivo Bluetooth.

• AT+TYPE, al igual que para el módulo Bluetooth al que se va a conectar este módulo lo dejaremos sin contraseña, es decir AT+TYPE0.

• AT+ROLE, en este caso, este módulo va a ser el módulo Bluetooth maestro, ya que es el que envía las órdenes, por esto, tendremos que escribir AT+ROLE1 en el Serial.

• AT+INQ, este comando busca los dispositivos Bluetooth cercanos que hay disponibles, y te muestra su dirección MAC (+INQ1:MAC, en este caso el 1 se refiere al primer dispositivo que ha detectado), es esta la razón por la que teníamos que guardar la dirección MAC de nuestro módulo esclavo anterior, para saber a qué dispositivo tenemos que conectar el módulo maestro.

• AT+CONN”número de dispositivo detectado”, este comando establece la conexión entre el módulo maestro y el dispositivo que queramos, es por esto que tenemos que decir el número de dispositivo al que queremos conectarnos, este número es el número que ha establecido antes el comando AT+INQ. (Siguiendo el ejemplo anterior, tendríamos que escribir AT+CONN1, para conectarnos al dispositivo).

Referencias

Documento similar

E Clamades andaua sienpre sobre el caua- 11o de madera, y en poco tienpo fue tan lexos, que el no sabia en donde estaña; pero el tomo muy gran esfuergo en si, y pensó yendo assi

Para abordar adecuadamente esta asignatura el alumno debe tener un interés especial sobre la importancia que tienen los contenidos específicos de las disciplinas y como estos

* En los cuatro capítulos de: Investigación, Innovación, Aprendizaje y Evaluación, el los apartados referidos a DIDÁCTICA DE LA EDUCACIÓN PLÁSTICA y DIDÁCTICA DE LAS

[r]

Ésta como es lógico depende de varios factores entre los que está el viento, sin embargo en las embarcaciones con quilla abatible se puede modificar la escora

Remarque: Lorsque le Robot termine le cycle de nettoyage ou lorsque la pile est faible, le Robot retourne automatiquement à la station d’accueil pour se recharger.. Le robot

Se consideran aprobadas con anterioridad las materias cursadas de acuerdo con el currículo regulado por la LOE con una calificación igual o superior a 5, que tengan

Por el presente acto, se informa sobre el desarrollo del Proceso de Selección Público para el cargo de Asistente Social para el Centro de Atención Jurídico Social Viña del