Tecnología Industrial I.E.S. Pintor Antonio López |
- Diseño, construcción y configuración de Drones
- Proyecto Coche Robótico con Arduino (5/5)
- Proyecto Coche Robótico con Arduino (4/5)
- Proyecto Coche Robótico con Arduino (3/5)
- Proyecto Coche Robótico con Arduino (2/5)
Diseño, construcción y configuración de Drones Posted: 03 Nov 2021 02:31 AM PDT
Documentación curso DronesHola a tod@s. Durante el curso 2018-19 participamos en La Feria Aérea organizada por El Caleidoscopio. Los documentos de trabajo para realizar los proyectos de diseño, impresión en 3D, montaje y configuración primero de un pequeño minidron y después de un dron de un tamaño más grande y con componentes más potentes, son los siguientes: RD-1036_2017-de-15dic-BOE-2017-15721 Real Decreto 1036/2017, de 15 de diciembre, por el que se regula la utilización civil de las aeronaves pilotadas por control remoto, y se modifican el Real Decreto 552/2014, de 27 de junio, por el que se desarrolla el Reglamento del aire y disposiciones operativas comunes para los servicios y procedimientos de navegación aérea y el Real Decreto 57/2002, de 18 de enero, por el que se aprueba el Reglamento de Circulación Aérea. Montaje y configuración minidroneHola a tod@s.
|
Proyecto Coche Robótico con Arduino (5/5) Posted: 03 Sep 2021 12:33 AM PDT
Coche Robot de 4 motores. Modificación de la forma del chasisHola a tod@s. En las siguientes imágenes se puede ver como he llevado a la práctica una idea "thinking out of the box" de Rodrigo de 1ºbto B que propuso colocar las placas del chasis del coche de una manera diferentes a la de los vídeos de montaje que suele haber en internet. El cambio supone un coche más alto y disponer de más espacio para colocar los componentes. Veámoslo en imágenes: Comenzamos por desmontar todo y dejar solo la placa con los motores y las ruedas. Los motores ahora quedarán por debajo de la placa. El siguiente paso importante será conectar los motores a la controladora: Para colocar el porta pilas hay muchas opciones. Lo importante es que tiene que ser accesible para poder cambiar las pilas. En mi caso he optado por ponerlo por debajo de coche, en la zona de los motores. Sujeto con cinta doble cara y posteriormente con una goma elástica que rodea toda esa placa de abajo y sujeta el porta pilas y las pilas. Otra opción es llevarlo a la parte superior que pondremos más tarde ya que como veréis hay mucho espacio. Con el porta pilas colocado el siguiente paso es llevar la corriente a la controladora de motores. Tenemos dos modelos de controladoras y como vimos en este vídeo https://www.youtube.com/watch?v=OVlntLxkjsU&feature=youtu.be cada controladora recibe el voltaje y ground en unos pines, es importante realizar bien estas conexiones para no dañar la controladora. Trabajando con los coches hemos visto que mejora bastante su funcionamiento si añadimos este cable blanco de la siguiente imagen. En el vídeo de explicación de las conexiones no hablaba de ponerlo porque en principio no haría falta ya que la propia controladora de motores envía 5V de corriente a ese pin, pero como hemos visto a nivel práctico si las pilas van gastándose y el voltaje cae de los 6V (4 pilas AA de 1.5V) es posible que la placa envíe a ese pin algo menos de 5V con lo que puede fallar la señal. Es por eso que con el cable blanco de la siguiente imagen forzamos a ese pin de la placa a recibir el mismo voltaje que viene de las pilas que normalmente será algo superior a 5V aunque haya bajado de los 6V que debe dar cuando las pilas están nuevas. Ese cable blanco de la siguiente imagen que puentea la corriente hacia la controladora de motores debería quitarse si se van a conectar los motores a una fuente de alimentación de mayor voltaje (por encima de 6V) ya que ese mismo voltaje entraría a la controladora y la podría dañar. Colocamos la otra placa por encima con el servomotor y el ultrasonido que en realidad no he tenido que cambiarlos de tal y como estaban en la disposición anterior: Ya solo quedar colocar en la parte superior nuestra controladora de arduino y con el shield de conexiones y terminar de colocar todos los cables en su posición. Un último apunte es que, como puede verse en la imagen siguiente, si conectamos una pila de 9V para alimentar la controladora de arduino directamente el funcionamiento del coche mejora muchísimo. Con esta versión del coche de 4 motores hemos ido viendo que los 6V que aportan las 4 pilas AA van muy justos para alimentar por un lado a los motores a través de la controladora de motores y por otro para dar corriente a la propia controladora de motores y a la de arduino que a su vez da corriente a los sigue líneas, bluetooth, servomotor, ultrasonido... Esto hace que la corriente en los motores se vea afectada y que giren poco o nada. Lo habíamos resuelto en parte usando pilas recargables y teniéndolas siempre al 100% de carga antes de usarlas, pero otra opción muy interesante es añadir una pila de alimentación para el arduino que permitirá que las pilas AA dediquen todo su voltaje al movimiento de los motores. Haciendo esto podría quitarse el cable de alimentación que estamos llevando desde la controladora de motores a arduino pero muy importante debe dejarse conectado el cable de conexión de GND entre placas. Esto debe hacerse siempre que se conectan componentes con fuentes de alimentación distintas, las tomas de tierra, GND, de todas ellas deben estar conectadas entre sí. Espero que os haya resultado interesante esta propuesta de colocación del chasis, como decía hace que los componentes queden más alto pero deja mucho más espacio para todo. Saludos, Raúl. Coche robot con arduino: Sigue líneas de 4 canales (Parte 1 de 2)Hola a tod@s. En este tema vamos a ver como realizar las conexiones de hardware de los diferentes componentes del sigue líneas, la comprobación de que funcionan correctamente y las ideas principales de como programarlo. Con el kit de coche robótico tenemos 4 sensores. Cada uno de ellos compuesto por un emisor de LED infrarrojo y un receptor fototransistor. De la web <enlace> : El LED infrarrojo emite luz infrarroja, o sea, de mayor longitud de onda (o menor frecuencia) que la podemos ver los humanos, así que para nosotros es invisible. Si esta luz choca contra una superficie blanca se reflejará y llegará al fototransistor. Si por el contrario golpea en una superficie negra, el material absorberá la mayoría de la luz y no llegará al fotorreceptor. Pero el concepto de la emisión y recepción de señales infrarrojas no es, ni mucho menos trivial, y exige tener nociones de ondas electromagnéticas (energía, frecuencia, longitud, etc...) que sobrepasan nuestro nivel. No obstante para aquellos que querás profundizar más en el tema os recomiendo la excelente descripción de artículo de Prometec sobre sensores infrarrojos. Además de los 4 sensores tenemos una placa controladora que permite tres cosas principalmente: - Reducir los 4x3 = 12 cables que vienen de los 4 sensores a 6 cables, 4 de señal uno de voltaje y otro de ground, ya que unifica todos los voltajes y ground de los sensores. - Permite regular los sensores utilizando los potenciómetros azules con la rueda blanca que pueden girarse para graduar la sensibilidad de los mismos. - Permite también comprobar la recepción de señal de cada sensor gracias a los pequeños leds que lleva incorporados la controladora que se encienden o apagan para cada uno de los 4 sensores en función de que mande una señal de 1 o 0. Y por último el kit viene con el cableado para realizar las conexiones: El siguiente paso será montar la controladora y los sensores en el coche y conectar los 6 pines de la controladora a Arduino. Dos pines para Vcc y GND y los otros 4 para cada una de las señales de los sensores. En mi caso he seguido el siguiente orden: - Sensor de la derecha exterior PIN 7 de arduino. - Sensor de la derecha interior PIN 8 de arduino. - Sensor de la izquierda interior PIN 11 de arduino. - Sensor de la izquierda exterior PIN 12 de arduino. En el siguiente vídeo hay más información detallada sobre la controladora de infrarrojos: Con todo montado en el coche podremos hacer las primeras pruebas utilizando los leds de señal de la controladora sigue líneas. Para ello habría que ir poniendo los sensores encima de una superficie oscura para comprobar que se apagan y encienden las luces de cada sensor. Con el potenciómetro de cada uno de ellos podemos regular los encendidos. Estas comprobaciones también se pueden hacer desde arduino como veremos en el siguiente paso. Utilizando bitbloq para la programación en la siguiente imagen vemos un programa dedicado solo al sigue líneas por eso no tiene el resto de componentes del coche, aunque al final acabaremos teniendo todos juntos. Lo primero será colocar cada componente de bitbloq en los mismos pines y con un nombre que nos ayude a saber de que sensor se trata. En la siguiente imagen se ve el componente del pin 7 que he llamado: infraref_right_ext. En la siguiente imagen puede verse un sencillo programa que nos permitirá enviar por puerto serie la información de los sensores previamente guardada en una variable. Como la información de los sensores es numérica y con decimales, previamente la convertimos a entero para que aparezca solo un 0 o un 1 y la convertimos a texto para que en la línea de resultados nos aparezcan 4 dígitos, ceros o unos, indicando el estado de cada sensor. El resultado serán líneas del tipo 0000 si todos los sensores están encima de algo claro o 1111 si están encima de algo oscuro, o 0011 si los dos primeros están sobre algo claro y los dos siguientes sobre algo oscuro. Una imagen de la línea completa. Haciendo click sobre la imagen puede agrandarse: Ya por último abriendo el monitor serie podemos comprobar los valores que envían los sensores que coincidirán con el encendido de los leds de la controladora que comentaba antes y que pueden regularse con los potenciómetros de la controladora de sigue líneas. Una vez comprobado que los sensores funcionan correctamente el siguiente paso será programarlos para que hagan que el coche siga una línea negra. Para ello tendremos que tener en cuenta que tal y como hemos visto en el programa que enviaba los datos al puerto serie, los sensores devuelven un 1 cuando están sobre una línea negra y 0 cuando están sobre algo blanco o más claro. Teniendo esto en cuenta hay muchas opciones para ir creando el programa y la forma en que el coche sigue la línea y responde a los cambios depende mucho de la eficiencia con la que se programe, de manera que dejo en las siguientes imágenes unas ideas de posibles condicionales a utilizar pero sin mostrar su contenido para que sirvan de idea, pero realmente os invito a ir haciendo vuestras propias pruebas e ir aprendiendo de ellas para ir mejorando el comportamiento del coche a la hora de seguir las líneas. Para ello es muy útil crear un pequeño circuito de pruebas o al menos una recta con un giro para probar el resultado de la programación. Mucho ánimo con la programación, pruebas y ajustes, según vayamos avanzando en el control sigue líneas nos podremos retos algo más difíciles y circuitos más complejos. Un saludo, Raúl. Coche robot con arduino: Sigue líneas de 4 canales (Parte 2 de 2)Hola a tod@s. En el tema anterior sobre sigue líneas dejaba la siguiente imagen como propuesta de trabajo para programar el sigue líneas. Estaban los diferentes condicionales pero sin desarrollar: El primero ya lo vimos: Cuando los sensores interiores están devolviendo un 1 (es decir están sobre la línea negra) le damos la orden de avanzar al coche. Realmente nos da igual el valor que tengan los sensores exteriores. En los dos siguientes condicionales tenemos uno de los dos interiores sobre la línea negra, devolviendo valor 1, y el otro está ya fuera, está sobre algo más claro y por tanto está devolviendo 0. Como en el caso anterior no entramos a valorar lo que están devolviendo los exteriores porque realmente no nos hace falta para la orden que le vamos a dar al coche que es: girar hacia el lado donde está devolviendo 1 ya que se está saliendo por el lado donde está devolviendo 0. Ese giro, para que el coche siga avanzando lo máximo posible, lo hacemos de manera que mantenemos el motor del lado que da 0 encendido (máxima potencia) y el del lado que da 1 le hacemos un encendido de valor analógico 220 (de un máximo de 255) para que vaya algo más lenta esa rueda. Ese valor de 220 hay que ajustarlo para cada coche, incluso puede variar el comportamiento un poco si las pilas están más gastadas. Importante que cuando hacemos girar al coche guardamos el sentido de giro en una variable que se llama "ultimo_movimiento", que como podéis comprobar es 0 en caso de giro a la derecha y 1 en caso de giro a la izquierda. Por último entramos en la opción en la que los dos sensores interiores están dando valor 0 porque se han salido de la línea negra. Aquí si consultamos el estado de los sensores exteriores para ver por que lado nos estamos saliendo y procedemos de manera similar a como hemos hecho antes, ralentizando la velocidad de la rueda del lado que de 1 en el sensor exterior. Al igual que antes guardamos en la variable "ultimo_movimiento" el sentido hacia el que le hemos dicho que gire. La última opción es aquella en la que todos los sensores dan 0, es decir el coche esta por completo fuera de la línea negra, en ese momento es cuando usaremos el valor de la variable "ultimo_movimiento" para indicar al coche hacia donde tiene que girar, que es en el sentido del movimiento que le estábamos indicando ya que lo que ha ocurrido es que aunque se lo hemos indicado no le ha dado tiempo a hacerlo o bien por ir muy rápido o porque el giro era muy brusco. Aquí ya si hacemos un giro total del coche encendiendo una rueda hacia atrás y otra hacia adelante para que no avance mientras no esté de nuevo sobre la línea. Es muy divertido programar el sigue líneas y comprobaréis que la respuesta del coche depende mucho de como se programe. Las ideas de condicionales que he puesto son solo una de las muchas posibilidades para programarlo, seguro que podréis ir creando las vuestras propias. Por último recordar que es muy importante que comprobéis que los sensores funcionan bien antes de probar la programación del sigue líneas y así podéis trabajar con más tranquilidad y confianza la programación. Un saludo, Raúl. Solución del "Callejón sin salida" en el modo MAZE, laberintoHola a tod@s. En este tema vamos a ver una posible solución al problema del callejón sin salida cuando nuestro coche robot está intentando salir de un laberinto. Hemos llamado callejón sin salida a una situación en la que el coche robot encuentra una pared de frente (ultrasonido detecta algo a menos de 20cm) y al mirar a los lados las dos paredes, derecha e izquierda, están también a menos de 20cm. En ese caso el planteamiento ha sido hacer retroceder al coche para salir del callejón parando cada cierta distancia para ver si ya hay salida hacia alguno de los lados. Para poder programarlo primero he creado una función que realiza toda la acción de obtener la distancia de las paredes a la izquierda y a la derecha "comparar_distancias". Esta función empieza conectando el servo (en mi caso el componente servomotor se llama así en la programación "servo" y está conectado al pin 2 de arduino), mirando hacia los lados y guardando el valor en las respectivas variables para finalmente desconectar el servo. Trabajar con esta funciona simplificará bastante la programación después: Una vez el coche sale del callejón y alguno de los dos valores dist_der y dist_izq es > = que 20 el programa continua con la programación clásica del modo MAZE, laberinto, en el que comprobamos que lado tiene un valor mayor para que el coche gire en esa dirección. Como siempre en programación, existen más formas de programar la solución al callejón sin salida incluso los bloques del ejemplo son adaptables y mejorables. Os animo a probar vuestras propias ideas. Un saludo, Raúl. Coche robot arduino. Estudio sobre componentes y materiales utilizadosHola a tod@s. En este tema vamos a proponer un trabajo de investigación sobre los diferentes componentes y materiales de los coches robot. El trabajo va a consistir en elegir 2 componentes y 2 materiales del coche y realizar una investigación que dé respuesta a las preguntas que aparecen en la parte derecha.
https://docs.google.com/document/d/14t-DUWKWEeLX8a3KlNWxDQRFUXT7r3vv7AHwQcchE8E/edit?usp=sharing La entrega se realizará mediante un documento de texto o presentación y una breve exposición en clase, por grupos, de los resultados de las diferentes investigaciones. La evaluación se realizará mediante una rúbrica para el escrito y otra para la presentación que pondré en classroom en el momento del envío de la actividad. Un saludo, Raúl. P.D. A continuación tenéis los enlaces necesarios para obtener algo de información sobre los kits y que hemos comprado y sus componentes: Diferentes propuestas de compra que planteamos:OPCIÓN 1: Coche robot con 3 ruedas (dos con motor y una giratoria) + módulo bluetooth. 13,79€ + 3,02€ de bluetooth Coche Robot: Módulo Bluetooth: OPCIÓN 2: Coche robot con 4 ruedas (que además lleva infrarrojos de sigue líneas) + módulo bluetooth. 19.12€ + 3,02€ de bluetooth Coche Robot. Seleccionado la opción de 4 ruedas, que lleva también infrarrojos de sigue líneas: Módulo Bluetooth: OPCIÓN 3: Coche robot con 3 ruedas (dos con motor y una giratoria) con mando a distancia por infrarrojos. 18,15€ OPCIÓN 4: Coche robot con 4 ruedas (que además lleva infrarrojos de sigue líneas) con mando a distancia por infrarrojos. 24,44€ Litados de materiales que componen cada opción:OPCIONES 1 Y 2: Crisol de grafito mini horno de oro de la antorcha de fusión del metal: . 4 x motorreductor . 4 x neumático 4 x Motor de fijación 2 x Chasis de coche (material acrílico) 1 x L298N controlador de motor . 1 x placa controladora UNO328 . 1 x para la placa del sensor 1 x kit . 1 x engranaje de dirección . 1 x módulo ultrasónico . 1 x módulo de seguimiento 1 x cable USB . 1 x dibujos de montaje en 3D Tuerca de tornillo de varios pilares OPCIONES 3 Y 4: Lista de componentes: 2 uds rueda 1 Uds Módulo receptor de infrarrojos 1 Uds celular caja 2 tornillos y tuercas para cada pieza 2 uds Bunding cinturón 1 Uds CD con el tutorial Imagen OPCIÓN 3: Imagen OPCIÓN 4: A todos estos componentes habría que sumarle los que hemos aportado nosotros: Cableado, estaño para las soldaduras y baterías para alimentar a los motores y componentes electrónicos. Sobre el módulo bluetooth: De la web del fabricante: https://es.aliexpress.com/item/4000542307192.html?spm=a219c.12010615.8148356.8.21d72667uirQku Nota: Es HC-06 módulo Bluetooth
Permite que tu dispositivo envíe o reciba los datos TTL a través de la tecnología Bluetooth sin conectar un cable serial a tu ordenador.
Nota: Fuente de alimentación de entrada 3,3 ~ 6V, prohibido más de 7V No "evita automáticamente que la fuente de alimentación peversing func", así que conecta la fuente de alimentación correctamente Recomendamos instalar "Módulo maestro Bluetooth" El "estado" es el pie de salida para el estado del LED, Cuando bluetooth "no está conectado", salida "Pulse"; Cuando bluetooth "conectado", salida "alto nivel", podemos determinar los estados de "MCU" Si solo es la placa, No hay ninguna "función Bluetooth" Control por voz del coche robotHola a tod@s. En este tema vamos a ver como controlar mediante la voz el coche robot. Una función que es realmente espectacular y que gracias a la tecnología existente es bastante sencilla de programar. El control lo implementaremos mediante AppInventor y sus funciones de reconocimiento de voz. Recordar que si no tenéis ya iniciada la aplicación de control del coche mediante bluetooth podéis usar este archivo .aia como base. En él encontrareis ya incluido el componente bluetooth y el selector de lista de conectar y botón de desconectar: Archivo .aia base de conexión bluetooth: https://drive.google.com/file/d/1oqlpDn9KrgrQOGGfGlU5ku2eHjoRjf1L/view?usp=sharing Por un lado en la parte de diseño, dentro del apartado de Medios, tendremos que añadir la función "ReconocimientoDeVoz". Añadiremos también un botón que servirá para activar la captura de voz. Esta es la opción más sencilla pero también podría programarse para que se active al agitar el dispositivo o al acercarlo al oido. En la parte de bloques la programación es muy sencilla. Por un lado al pulsar el botón llamamos a ObtenerTexto del reconocimiento de voz. Esta funciona está dentro de la herramienta de reconocimiento de voz al igual que el bloque de "DepuésDeObtenerTexto" que usaremos también. Un ejemplo de como podrían ser los bloques de programación pueden verse en la siguiente imagen. En función de las palabras que haya captado el dispositivo enviará por bluetooth las letras de control del coche a arduino. El siguiente paso que daremos será el control del coche por voz mediante Inteligencia Artificial, de manera que no será necesario decir exactamente las palabras que tenga prefijadas App Inventor para controlar el coche. Crearemos etiquetas con diferentes acciones, que alimentaremos con un modelo de IA generado en Machine Learning for Kids, de manera que el dispositivo será capaz de asociar la información recibida por voz a una etiqueta/acción aunque el mensaje recibido no coincida con los valores de ejemplo. En caso de que la acción realizada no sea la que esperábamos podremos realimentar el modelo desde la propia App para que pueda ir aprendiendo y mejorando sus respuestas. Saludos, Raúl. Aplicación de detección de sentimientos mediante Inteligencia Artificial (parte 1/2)Hola a tod@s. En este tema dejaré los vídeos del curso de Inteligencia Artificial en AppInventor mediante Machine Learning for Kids (ML4K). Por un lado un vídeo introductorio: La inteligencia artificial creará 58 millones de puestos de trabajo. Los 5 primeros vídeos que explican la programación de la aplicación de manera clásica, usando listas. Desarrollo de app: EPCIA19 - App Inventor - detector sentimientos.Vídeo 1: https://www.youtube.com/watch?v=Qp3VYEq1Acs&t=1s Enlace a los recursos con las imágenes para la aplicación. (solo accesible desde las cuentas de gsuite) https://drive.google.com/drive/folders/1TWL7Tv4l7dUfSNt8ylmWUa9ckG1PIXi7?usp=sharing Vídeo 2: https://www.youtube.com/watch?v=sL01f4lfmVI Vídeo 3: https://www.youtube.com/watch?v=cyX439RR6s4 Vídeo 4: https://www.youtube.com/watch?v=HFqNOdpXvqE Vídeo 5: https://www.youtube.com/watch?v=1DJIEi4nzAU Los vídeos 6 a 9 que explican como realizar el modelo en ML4K: Vídeo 6: https://www.youtube.com/watch?v=VNe-QMBsY4o&t=1s Vídeo 7: https://www.youtube.com/watch?v=tKMwpWMg8tM Vídeo 8: https://www.youtube.com/watch?v=X_hg-7CRrnI&t=1s Vídeo 9: https://www.youtube.com/watch?v=bvSPcqLOmnE&t=2s Los tres últimos vídeos que explican como añadir la extensión de ML4K en AppInventor y utilizar sus bloques para incorporar la IA. Vídeo 10: https://www.youtube.com/watch?v=qhL7rqGejSM Vídeo 11: https://www.youtube.com/watch?v=KzC6n3Yu4ks Vídeo 12: https://www.youtube.com/watch?v=qoY-fhNGXHY&t=1s Para poder trabajar con https://machinelearningforkids.co.uk/ crearemos cuentas de alumnos que compartiremos entre varios alumnos. Los nombres de usuario y las contraseñas de acceso estarán en la hoja de cálculo de notas que usamos para las evaluaciones. También usaremos una cuenta de App Inventor https://appinventor.mit.edu/ que como sabéis requiere usar una cuenta de google para registrarse. En este caso el registro será individual. Para compartir los trabajos crearemos más adelante otras tareas asociadas a esta actividad. Espero que os resulte interesante y que aprendáis mucho con este proyecto. Saludos, Raúl. P.D. Pongo aquí como ejemplo el enlace al vídeo de como me quedó la aplicación una vez terminada: https://drive.google.com/file/d/13-CpCQMwr2kJnwxyYE83HkxuJFZ8yTL6/view?usp=sharing Otros enlaces: Este vídeo que hace un repaso general a algunas de las herramientas que vamos a utilizar: La generalización en la Inteligencia Artificial - EPCIA. https://www.youtube.com/watch?v=_hYGRBkQWsQ&t=4s Dejo también aquí el enlace al documento para quien quiera profundizar algo más: Envisioning AI for K-12: What Should Every Child Know about AI? https://ojs.aaai.org//index.php/AAAI/article/view/5053 Web: https://ai4k12.org/ Aplicación de detección de sentimientos mediante Inteligencia Artificial (parte 2/2)Hola a tod@s. En este tema vamos a ver como añadir la posibilidad de introducir el texto mediante voz en nuestra aplicación y también como poder realimentar el modelo de Machine Learning for Kids (ML4K) enviando información desde App Inventor a ML4K para que las incorpore a las etiquetas. Lo primero que tendremos que hacer en la parte de Diseño de AppInventor es añadir el componente "ReconocimientoDeVoz" que se encuentra en el apartado de Medios. También añadiremos tres nuevos botones. Uno para poder generar "TEXTO MEDIANTE VOZ" y otros dos para "AÑADIR A POSITIVAS" y "AÑADIR A NEGATIVAS". En el apartado de bloques programaremos tanto la entrada de texto por voz como la realimentación del modelo de manera sencilla usando bloques de los componentes "ReconocimientoDeVoz" y "ML4KComponent". En la siguiente imagen pueden verse en la parte superior los dos bloques correspondientes al reconocimiento de voz, el primero para lanzar el reconocimiento al pulsar el botón y el segundo para poner el texto en la etiqueta una vez que lo ha obtenido. Los otros dos bloques son los que realizan la función de realimentar el modelo en la etiqueta de positivos o negativos en función del botón que se haya pulsado. Con esto ya tendríamos completada esta primera parte de aprender a utilizar ML4K en AppInventor y utilizar la función de reconocimiento de voz para enviar la información que después trataremos con la IA. Un saludo, Raúl. Control por voz del coche robot mediante IAHola a tod@s. En este tema vamos a ver todos los pasos a seguir para añadir la Inteligencia Artificial al control de VOZ del coche robot. Antes de hacer esta tarea es conveniente haber hecho las tareas de creación de una app de detección de sentimientos con IA. Entradas: https://iespalti.blogspot.com/2021/04/aplicacion-de-deteccion-de-sentimientos_8.html https://iespalti.blogspot.com/2021/04/aplicacion-de-deteccion-de-sentimientos.html Y haber añadido el control de voz con programación clásica, sin IA: https://iespalti.blogspot.com/2021/02/control-por-voz-del-coche-robot.html Con todo lo anterior bien trabajado no tendremos problema en añadir el control por voz añadiendo la opción de que las frases sean analizadas mediante la IA de Machine Learning for Kids, ML4K, para detectar la instrucción que el usuario quiere mandar al coche. Lo primero que haremos es entrar a ML4K https://machinelearningforkids.co.uk/ y crear un nuevo modelo o utilizar el modelo compartido (puede verse que es compartido por el pequeño icono de la parte derecha) de la imagen siguiente. Este modelo tiene 2 etiquetas: "adelante" y "parar" que permitirán a ML4K averiguar cuál de estas dos instrucciones se le ha dado al coche en base a las palabras con las que alimentemos el modelo. Por ejemplo: Tal y como hacíamos con el detector de sentimientos, el siguiente paso será conseguir la URL del modelo para después añadirla una extensión en App Inventor: El app inventor he optado por añadir un nuevo botón "VOZ con IA" manteniendo el anterior botón de VOZ que no usará IA y así poder comprobar la diferencia de comportamiento del coche con una opción u otra: Añadimos la extensión de ML4K utilizando la URL que hemos copiado antes: Y algo importante es que, como vamos a usar dos formas diferentes de reconocer la voz, añadimos otro elemento de reconocimiento de voz "ReconocimientoDeVoz2". En la parte de bloques añadiremos estos tres bloques, para crearlos podremos utilizar bastantes de los bloques ya existentes para el reconocimiento de voz sin IA. En la siguiente imagen vemos todos los bloques juntos y después entraremos en detalle de cada uno en imágenes ampliadas. El primer bloque "cuando VOZ_CON_IA.Clic" ejecuta dos acciones: Lanzar el reconocimiento de voz, en este caso "ReconocimientoDeVoz2" y por otro lado Entrenar el modelo por si el modelo se ha borrado de ML4K. El siguiente bloque son las acciones a realizar tras el obtener el texto por voz. Como vemos esta primera parte es similar a la ya vista de control por voz del coche. Simplemente comprobamos si el resultado coincide exactamente con algunas palabras y "si no, si" coincide con otras. Un par de detalles es que solo hace esto si el bluetooth está conectado ya que si no lo está y enviamos algún mensaje tendremos un mensaje de error. Y por otro lado pasamos la variable resultado a minúsculas antes de compararla y luego ponemos todas las palabras en minúsculas para evitar que por algún motivo la función de reconocimiento de voz añada alguna mayúscula que evita que coincida el resultado. Como decía, hasta aquí la programación clásica, es en la parte final donde entrará la parte de IA. Como podemos ver en el bloque "DespuésDeObtenerTexto", si los comparadores han llegado al final sin haber encontrado ninguna coincidencia exacta con las palabras anteriores llegamos a un "sino" que envía el resultado del reconocimiento de voz a clasificar por parte de la ML4K. Y un último bloque de ML4K "GotClassification" en el que si la confianza es mayor del 20% en base a la clasificación envía por bluetooth una letra A si es "adelante" la etiqueta o una letra B si es "parar". Como veis no es muy difícil de programar y el resultado es realmente espectacular, ya que con esos sencillos bloques habremos incorporado el trabajo de la red neuronal creada en ML4K a la programación de nuestra aplicación. Añadiendo nuevas palabras a las etiquetas o incluso diferentes etiquetas podremos incorporar más instrucciones al coche robot que sumadas a los otros modos de control: botones, sigue líneas... dan como resultado una aplicación realmente completa de control. Un saludo, Raúl. |
Proyecto Coche Robótico con Arduino (4/5) Posted: 03 Sep 2021 12:29 AM PDT
|
Proyecto Coche Robótico con Arduino (3/5) Posted: 03 Sep 2021 12:26 AM PDT
Primeros pasos programación aplicación Android con AppinventorHola a tod@s. En el siguiente ejemplo podemos ver una aplicación con 3 botones que nos permiten mandar por bluetooth tres mensajes (letras A, B o C) diferentes a nuestro arduino. En los dos imágenes siguientes vamos a ver como programar nuestra aplicación para que además de enviar datos a arduino sea capaz de recibir la información que mandemos desde arduino hacia nuestro teléfono. Por último un ejemplo de como podríamos crear un comando de voz en nuestra aplicación para así poder controlar el coche mediante comando de voz: Para terminar dejo el enlace a último un vídeo con un pequeño tutorial en el que enseñan paso a paso a realizar una aplicación muy parecida a las que nosotros estamos haciendo: En la siguiente imagen podemos ver un ejemplo de como puede quedar la aplicación de control del coche robot: Como puede verse en la imágen hemos incluido un slider que nos permitirá controlar el ángulo de giro del coche. Como programar esto lo veremos en los temas: "Envío de datos más complejos por bluetooth" y "Uso del slider para manejar el coche robot". En próximas temas pondremos información sobre la parte de bitbloq y arduino de estos proyectos. Un saludo, Raúl Control del coche robot con mando a distanciaHola a tod@s. Vamos a ver en este tema como conseguir controlar nuestro coche robot mediante un mando a distancia que emitirá una señal que captaremos desde un receptor de infrarrojos conectado a arduino. Parte de la programación la haremos directamente en el IDE de arduino y después veremos como llevarla a bitbloq usando los bloques verdes para insertar código directamente. Lo primero que necesitamos es conocer los códigos que envía nuestro mando a distancia. Para ello vamos a seguir los pasos que nos explican con mucho detalle en esta web: Para conectar el receptor infrarrojos he utilizado el PIN 13 de arduino. El receptor más sencillo que suele usarse es el TL1838 que lleva tres patillas, una de señal, la de en medio de ground GND y la otra de voltaje VCC a 5 voltios. Tenéis una descripción en detalle en este enlace: https://drive.google.com/file/d/1B6GwlxxNVdOOYvMR1qjzPHDHPy8blcWQ/view?usp=sharing Existen otros modelos: En cada caso será importante saber las conexiones de señal: OUT, ground: GND, y voltaje: VCC para realizar las conexiones con arduino correctamente. Una vez conectado correctamente el receptor el siguiente paso será cargar en nuestra placa un programa que reciba los datos y los envíe al puerto serie para poder visualizarlos. El programa que usaremos será el siguiente: #include <IRremote.h> //Enlaza la librería del receptor IR #define RECV_PIN 13 IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); //Inicializa el puerto serie irrecv.enableIRIn(); //Inicializa el receptor } void loop() { if (irrecv.decode(&results)) //Si recibe un dato { Serial.println(results.value, HEX); //Muestra el dato en el monitor serie irrecv.resume(); //Se prepara para recibir el siguiente valor } } Para poder compilarlo es necesario instalar la librería librería IRremote.h (versión antigua, que es la que funciona con esos comandos). El zip de la librería puede descargarse en este enlace: https://drive.google.com/file/d/127JTpZfRVIZd_N8xg9BqGgpGt6OsSPkl/view?usp=sharing Para incluir la librería en arduino una de las formas es desde el IDE de arduino ir a Programas - Incluir librería - Añadir biblioteca ZIP. Buscar el archivo descargado y seleccionarlo: Una vez tengamos el programa cargado en la placa y el receptor de infrarrojos bien conectado a nuestro arduino el siguiente paso será abrir el monitor serie para ver las señales que va recibiendo de nuestro mando a distancia. Una buena opción es hacerse una tabla con tantas filas y columnas como tenga el mando y rellenarla con los códigos de cada posición. En mi caso el resultado ha sido el siguiente: Con los códigos ya anotados el siguiente paso es usarlo en el programa de control del coche robot. Para ello vamos a hacer algo muy parecido a lo que hacemos con la recepción de bluetooth usando una variable a la que llamamos "datos" a la que vamos a dar un valor en función del código que haya llegado por el receptor infrarrojo. Incluso podemos juntar en un mismo programa la recepción por infrarrojos y por bluetooth y podrían funcionar respondiendo el coche a ambas simultáneamente sin ningún problema. Las partes del código a añadir en cada apartado serían las siguiente: En la parte de VARIABLES Y FUNCIONES: #include <IRremote.h> //Enlaza la librería del receptor IR #define RECV_PIN 13 IRrecv irrecv(RECV_PIN); decode_results results;
En la parte de SETUP:
En la parte de LOOP: if
else else else else else else else else else
Para llevar esto a blitbloq la forma sería mediante bloques verdes cada uno en la parte correspondiente de bitbloq: En la parte de VARIABLES Y FUNCIONES y de SEPUP: Con esto ya tendremos incorporado el control de nuestro coche en el programa. Podemos usarlo para que realice movimientos, aumente o disminuya la velocidad o incluso que cambie el modo de funcionamiento. Las posibilidades son muchas e iremos viéndolas de manera conjunta tanto en control por bluetooth como por mando a distancia. Saludos, Raúl.
|
Proyecto Coche Robótico con Arduino (2/5) Posted: 03 Sep 2021 12:22 AM PDT
Modo Maze: Ultrasonido montado sobre un servo motorHola a tod@s. En el tema anterior hemos visto como programar el ultrasonido suponiendo que este se encuentra en la parte delantera del coche y va captando la distancia a la que tiene objetos delante según el coche va girando. Otra opción para que el coche sortee obstáculos es colocar el ultrasonido encima de un servo motor de giro que una vez detecta un obstáculo permita girar el ultrasonido para detectar si hay otros obstáculos a los lados sin necesidad de que se mueva el coche. Para ello lo primero será asegurarnos que el servomotor que vamos a montar está en posición 90º antes de colocarle en posición mirando hacia adelante. Ya que si no es así luego el servo motor no hará el giro a izquierda y derecha cuando le pongamos en posición de 5º o 175º (se le puede poner ir a 0º y 180º pero conviene evitar los ángulos extremos que pueden producir vibraciones). Para ello podremos realizar un sencillo programa como el siguiente con el que comprobaremos que nuestro servomotor se mueve correctamente y aprovechar a desconectarlo en la pausa más larga en la que sabemos que está a 90º. Una vez tengamos montado nuestro ultrasonido sobre el servomotor procederemos a programar la detección de objetos y las diferentes acciones que queremos vaya realizando nuestro servomotor en base a los obstáculos que encuentre el coche en su camino. Para ello será necesario crear variables que guarden los valores de las distancias que va detectando el ultrasonido. Por un lado la variable "distancia" que detecta la distancia a los objetos que el coche tiene delante y por otro lado las variables "dist_izq" y "dist_der" que guardarán la distancia de los objetos a los lados cuando el coche encuentre un obstáculo y mire a los lados para buscar la mejor salida. Las variables se declaran al principio del programa en el apartado "Variables globales y funciones". En este apartado hemos aprovechado para crear dos funciones que nos permitirán parar el coche y hacer que se mueva hacia adelante: El uso de servomotores puede hacer que se produzcan vibraciones en ellos aunque no estén recibiendo mensajes de la placa es por este motivo que conviene desactivarlos cuando no están en uso y activarlos para usarlo. En las instrucciones iniciales, las que solo se realizan una vez al inicio del programa, hemos incluido una línea en verde con código directo de arduino "servo.detach();" ya que de momento en bitbloq no existe el bloque de activación y desactivación de un servo motor. En la imagen podemos ver también el inicio del código de la parte de programación en Loop en la que guardamos la lectura del sensor de ultrasonidos en la variable distancia y comprobamos si esa variable es menor o igual que 20 para en ese momento para el coche, activar el servomotor en el pin 2 "servo.attach(2);", hacerlo girar a un lado y a otro y guardar los valores de cada lectura en las variables "dist_izq" y "dist_der". En cada caso esperamos 500ms para que se realice el giro y 250ms para que se realice la lectura correctamente. Al finalizar volvemos a poner el servo motor a 90º y volveremos a poner la orden "servo.detach();" para evitar vibraciones. La parte final, que podemos ver en la siguiente imagen, consistirá en la toma de decisiones en base a los valores de distancia captados y guardados en las variables "dist_izq" y "dist_der", las comparamos y giramos hacia el lado donde la distancia de salida sea mayor. De nuevo, como en el tema anterior, volvemos a usar un "Mientras" en la parte final para que una vez comience a girar el coche lo siga haciendo hasta que no detecta nada delante a 20 cm o menos. Con este programa habremos conseguido que el coche vaya tomando sus propias decisiones. Mucho ánimo para conseguirlo, es un efecto realmente divertido ver como se va moviendo de manera autónoma buscando una salida moviendo la cabeza hacia los lados. Un saludo, Raúl Conexiones a arduno con protoboardHola a tod@s.
Para poder hacer la simulación de la programación de nuestro proyecto necesitaremos conectar leds que haremos encender como si fuesen los motores de nuestro coche robot: "Hay dos tipos de personas, los que conectan los LEDs con resistencia y los que no… y solo una de ellas lo está haciendo bien." Es por eso que nosotros lo vamos a hacer bien, es decir, con resistencia. Para recordar el código de colores de la resistencia podemos usar estas imágenes en función de que lleve 3 o 4 lineas de colores + la tolerancia. Conectar los componentes es una fase que parece que tiene menor importancia que la de programar, pero sin duda es realmente importante prestar la máxima atención y entender porque se conectan los componentes de esta manera para evitar fallos que puedan dañar a la placa o los componentes y además nos puedan hacer dar mil vueltas a la programación sin darnos cuenta de que el problema no es de código si no de instalación y conexión. Un saludo, Raúl. Conexión arduino - Teléfono mediante aplicación de AppInventor y bluetoothBuenos días. Programa para cambiar nombre y pin del módulo bluetooth El siguiente paso será sincronizar el módulo bluetooth con nuestro teléfono móvil, activando el bluetooth del teléfono, buscando el dispositivo por su nuevo nombre y sincronizando con el nuevo pin. (En esta entrada del blog tenéis más información sobre la conexión vía bluetooth.) Una vez sincronizado el dispositivo pasaremos a crear la aplicación con AppInventor. Para usar AppInventor es necesario tener una cuenta de gmail. AppInventor pedirá acceso directo a la cuenta de gmail, es por eso que recomiendo que creéis una solo para trabajar con esta web. Para simplificar los primeros pasos de conexión podéis importar este programa en el que ya están creados el ListPicker de conectar y el botón de desconectar. Podéis descargarlo en vuestro ordenador y una vez dentro de appinventor importar el archivo .aia de proyecto. A este programa básico habrá que añadirle en un principio dos botones: Encender y apagar, que manden vía bluetooth información para que luego arduino la use para realizar las acciones de encender y apagar un led. En principio una forma sencilla de hacer esto es enviar las letras A para el encendido y B para el apagado. Cuando tengamos terminada la aplicación debemos instalarla en el móvil, para ello hay que descargarla mediante el código QR o descargar el archivo .apk en el ordenador y enviarlo por mail al móvil o si lo conectamos con el cable usb al ordenador copiando y pegando el archivo. La opción de usar el código QR es muy cómoda. Una de las mejores aplicaciones gratuitas para leer códigos QR es QR Code Reader. Solo nos queda programar la placa para que reciba la información del bluetooth. Para ello vamos a usar bitbloq y de momento hasta que veamos como usar el componente Bluetooth de bitbloq, las conexión vía bluetooth las vamos a realizar con el componente Puerto Serie. Es importante confirmar que el Baudrate del puerto serie es el mismo que el del bluetooth, en principio 9600 por defecto en los módulos HC-06. Lo siguiente será programar los componentes. Para ello usaremos una variable "datos" que recibe la información del bluetooth y la almacena. Cuando la variable contenga algún dato (longitud>0) comprueba si es A o B para encender o apagar el led y a continuación borra el dato de la variable, Es importante tener en cuenta que al usar el puerto de serie para las conexiones bluetooth será necesario conectar los pines TX y RX del módulo bluetooth a los pines 0 y 1 de arduino respectivamente (van cruzados el TX del bluetooth al RX de la placa que es el 0 y el RX del bluetooth al TX de la placa que es el 1) pero en el momento de cargar programas en la placa será necesario desconectarlos. Podemos mantener conectados los pines de Vcc y GND y por tanto seguir conectados al módulo con el móvil si ya está conectado. Una vez cargado el programa volveremos a conectar los pines del bluetooth a la placa para que la información que enviamos por el teléfono llegue hasta ella. Una vez realizado este sencillo programa y comprobado que somos capaces de comunicarnos entre el teléfono móvil y la placa empezaremos a desarrollar la aplicaciones más específicas para el control del del coche robot. Un saludo, Raúl, Bluetooth. Configuración y conexiónBuenos días. Esta es una opción muy interesante ya que todos los bluetooth que tenemos tienen un mismo nombre por defecto (normalmente HC-06) y un mismo PIN, 1234, y por tanto si tenemos varios coches con el mismo nombre de bluetooth puede hacerse difícil identificar si estamos conectando con el nuestro o con otro (aunque cada dispositivo bluetooth tiene identificador único del tipo 20:68:6A... y algunos teléfonos móviles permiten asignarle nombre a ese identificador sin cambiar directamente el nombre al módulo bluetooth). Hay dos posibilidades dependiendo del tipo de módulo bluetooth que tengamos. Como exteriormente son iguales toca probar una forma y luego la otra en caso de no funcionar la primera. El proceso viene explicado en la siguiente web: Es sencillo: hay que poner el bluetooth con TX en el 2 y RX en el 3 y desde el IDE de arduino cargar el programa que viene en la web que es el siguiente: #include <SoftwareSerial.h> A partir de aquí tenemos dos opciones en función del tipo de módulo Bluetooth que tengamos: PRIMERA OPCIÓN: Configuración tipo HC-06 (etiquetado ZS-040 con la versión 3.0-20170609) Después abrir el Monitor Serie, (seleccionado en la parte inferior "Ambos NL & CR" y "9600 baudio") y escribir: AT para comprobar que da OK estamos conectados y para cambiar nombre y pin: AT+NAME=<Nombre> Ejm: AT+NAME=Robot AT+PSWD=<"Pin"> Ejm: AT+PSWD="2560" SEGUNDA OPCIÓN: Configuración tipo HC-06 diferentes La diferencia es muy pequeña con la opción primera, simplemente para el cambio de nombre es no poner el = después de AT+NAME que en la primera opción si que hay que ponerlo y en la segunda no y para el cambio de pin en esta segunda opción es AT+PIN y justo pegado el pin y en la primera era AT+PSWD= y el pin entre comillas. De esta manera los comandos a escribir en el monitor (seleccionado en la parte inferior "Ambos NL & CR" y "9600 baudio") serie serían: Para cambiar el nombre del módulo, escriba AT+NAMEmodulename. El módulo debe responder OK setname. (Por ejemplo: si desea cambiar el nombre del módulo a BTM1, escriba AT+NAMEBTM1) Para cambiar el código PIN del módulo, escriba AT+PINxxxx. El módulo debe responder OKsetPIN. (Por ejemplo: si desea cambiar el PIN a 0000, escriba AT+PIN0000) Son pequeñas diferencias pero que hacen que funcione o no el cambio de nombre y pin. Para más opciones y modelos diferentes puede consultarse esta web con mucha información: http://www.martyncurrey.com/bluetooth-modules/ Un saludo, Raúl. Guía de las diferentes fases del proyectoBuenos días. Un saludo, Raúl |
You are subscribed to email updates from Tecnología I.E.S. Pintor Antonio López. To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google, 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States |
No hay comentarios:
Publicar un comentario