Logo
Published on

Proyecto Wasp Killer

Authors

Verano 2018 - El Origen

Tras otra dura mañana de trabajo en Versus salgo a comer con Ray. Este verano en Berlín está haciendo un tiempo excelente. Dios bendiga el cambio climático. Pero hay un problemilla. No puedo disfrutar de comer tranquilo en las terracitas porque las putas avispas de Berlín no paran de venir a tocar los huevos y robarme trocitos de comida. Vienen, cogen un trocito de arroz, y se van. Con su mochila. Al minuto vuelven otra vez. Alemania está lejos de ser el paraíso que cuentan.

El problema es que tampoco se les puede hacer nada. Hay que quedarse ahí mirando cómo se salen con la suya.

Intentando buscar una solución al problema, se me ocurre que la clave sería poder atacarlas o asustarlas en remoto. Y si se enfadan, que la tomen con algún tipo de objeto inanimado que no sufra mucho cuando le vayan a picar. Se me ocurren varias ideas para intentar golpearlas o darles con un flis flis cuando pasen por delante. El tema sería ser capaz de detectarlas, y luego actuar de alguna manera. En ese momento se me viene a la cabeza un vídeo que había visto hace tiempo de unos tíos que usaban lásers para quemar las alas a los mosquitos portadores de malaria que cruzasen un muro invisible formado entre dos torretas. Si pudiese reconocer avispas en una imagen, podría tener una torreta láser que les quemase las alas cuando se acercasen a mi comida. Muaaahhahahaha

Pasan los días. Llegan noticias de Homeland. Parece que el problema de las velutinas en Galicia se está empezando a desmadrar. Un par de personas palman por picaduras, y la población de abejas se ha reducido en un 54.7% (este dato varía un poco dependiendo de la fuente). Los apicultores claman al cielo por torretas láser, pero nadie parece escuchar.

Aunque cada día que pasa la idea de hacer torretas láser me gusta más, mi atención se la sigue llevando WikiMenu. Ahora quiero hacerle una app. Llevo invertidas un montón de horas en el proyecto y me gustaría poder dejar acabado algo que funcione. El Wasp Killer tendrá que esperar.

De todas formas el proyecto me intriga. Sería realmente posible? Es un proyecto completamente fuera de mi campo. Cómo puedo mover el láser? Cómo de potente tendría que ser? Cómo podría reconocer la avispa en la cámara y dirigir el láser hacia ella?

Aprovecho mis horas en la playa para diseñar la futura app de WikiMenu, y para leer cosas sobre estos temas. Parece que hay lásers fáciles de adquirir que se utilizan para cortar madera, así que asumo que un láser así sería más que suficiente para quemar alas de avispa. Leo sobre el proyecto de los mosquitos. Parece que lo que hacen es proyectar un láser de baja intensidad sobre una torreta con sensores. Cuando un mosquito cruza por esa empalizada invisible proyecta una sombra sobre los sensores. Analizando esta sombra pueden detectar la frecuencia del aleteo, y con ello de qué tipo de mosquito se trata, e incluso si es una hembra, que al parecer es la que pica. En cuanto este mosquito es detectado ponen el láser a máxima potencia y le queman las alas. Todo este proceso tiene que ocurrir en el tiempo que un mosquito tarda en cruzar una barrera del ancho de un láser.

Ojiplático.

Dándole vueltas a cómo mover el láser veo que una opción común es usar un dispositivo que consta de dos espejitos. De este modo, el diodo del láser no se mueve, si no que se hace rebotar el haz en los espejitos para dirigirlo. Este cacharrillo se le conoce como galvanómetro (aka galvos).

Para empezar, la idea sería probar simplemente a intentar apuntar con un láser a un objetivo fácilmente reconocible en la imagen de la cámara. Para ello sería bueno empezar con un láser normal, y más adelante ya se vería de sustituirlo por un láser más potente. Dado que no sé cuanto variarán en peso y tamaño los distintos lásers, la idea del galvanómetro me viene como anillo al dedo para poder intercambiar luego lásers de distinta potencia, peso y tamaño.

Leo sobre galvos. El galvo que usan los de los mosquitos cuesta 5000 pavos. A mi idea no le hace falta tanta precisión ni un tiempo de respuesta tan pequeño. Encuentro un proyecto que usan un galvo para dibujar imágenes con un láser en la pared a modo proyector. Está muy bien explicado. Pone un enlace al galvo que utiliza para su proyecto. Cuesta 65 euribors en ebay.

29 de Agosto de 2018, me compro el galvanómetro, dando con ello el primer paso de este viaje.

Otoño 2018 - Primeros fracasos

Recibo el galvanómetro.

Lo primero será aprender a moverlo un poco. No tengo ni idea de qué es cada pieza. Empiezo a ver lagunillas al tutorial. Tengo cero idea de conceptos de electricidad y lo primero que pone que tengo que hacer es darle -15 voltios al cacharro. Cómo que -15? Además pone bien claro que la fuente de alimentación tiene que ir conectada a la toma de 220 y que obviamente eso es peligroso. Ya me empieza a dar mal rollito la idea. El pack consta además de 2 placas que no acabo de entender para que sirven. Pero pone que soportan nosecuantos amperios para controlar la alimentación de los motores. O algo así. Y qué mierda es exactamente un amperio?

Después de un par de días leyendo sobre el tema llego a la conclusión de que comprar el galvanómetro ha sido un error. Veo muchos proyectos parecidos en los que usan arduino. Quizás no sea mala idea empezar intentando mover un solo motor un poquito. Algo así de simple ya arroja suficientes dudas.

De todas formas, lo que me ocupa ahora mismo sigue siendo WikiMenu. He conseguido publicar un primer prototipo de la app en la play store. Falta muchísimo por hacer, pero por lo menos esto sí está relacionado con mi área de experiencia. Es sólo cuestión de echarle horas. Sólo tendría que practicar un poco en esas movidas de la disciplina y la constancia.

La app de WikiMenu tiene algunas cosas que funcionan regulín, pero las funciones básicas están listas. El problema es que es mucho más difícil conseguir que alguien se instale una app que no saben para qué sirve, a que entren a curiosear una página web. Igual la app tampoco era el camino a seguir. Estoy empezando a perder la ilusión. Aunque por lo menos ahora sé hacer apps. Creo que lo mejor será acabar la web, para dejar por lo menos algo funcionando. Arreglar el login, poner una búsqueda, y volver a la idea original de tener las listas de las mejores pizzas para que se pueda encontrar la mejor pizza de Vigo.

Menschdanke nos dice que este año hemos sido buenos y podemos pedir los regalos que queramos. Bueno, un máximo de 5 regalos y presupuesto máximo de 300 euros. Me pido un disco duro, un altavoz bluetooth to guapo, y para continuar con el plan del Wasp Killer, un kit muy completo de aprendizaje de arduino. A ver si el plan B tiene más éxito.

18 Januar 2019 - Pinitos en Arduino

Tras la vuelta de Navidades, recibo mis regalos de Menschdanke. El kit de arduino consta de una controladora arduino, y un porrón de sensores, motores, botones, y más componentes electrónicos que no tengo ni idea para que sirven. También se incluye un CD (que no tengo donde meterlo), y un enlace a la documentación más actualizada sobre el kit.

Me descargo la documentación y empiezo a leer. Es un buen tocho, pero básicamete tiene un capítulo para cada tipo de sensor (y demás cacharros raros) donde explica para qué sirve y cómo se utiliza cada cosa. Los primeros capítulos tratan sobre cómo meter simplemente un programita en el arduino y cómo conectar y encender leds. Bastante fácil.

Me parece especialmente interesante el tema de los leds multicolor. Estos son leds que tienen dentro tres leds: uno rojo, otro azúl y otro verde. Regulando la intensidad que se le da a cada uno de esos leds se puede obtener cualquier color. Si se enciente el azul a tope y el rojo a medias, y el verde se deja apagado, el color de la combinación será algo tirando a violeta. Si se encienden todos a tope se obtiene blanco. Y así sucesivamente.

Escribo un programilla que va cambiando la intensidad de los leds, iterando sobre todas las posibles combinaciones. Lo meto en el arduino, y voilá:

Por fin algo de progreso. No es mucho, pero es bueno celebrar cada gol. Aunque sólo sirva para desconcertar al contrario.

25 Januar - Wenn schon, denn schon

Jugar con arduino resulta bastante satisfactorio. He descubierto lo que son los servo motores. Básicamente son motores que no giran indefinidamente sino que se les pasa una intensidad por un tercer cable, y según esa intensidad apuntan en una dirección o en otra. Suelen girar un máximo de 180 grados. He probado a conectar y mover servo motores y ha resutado igual de fácil que con los LEDs. Todas las pruebas que he realizado hasta el momento han fucionado bien.

El plan sigue siendo mover el láser con un galvanómetro. La diferencia es que ahora quiero intentar hacer yo mismo el galvanómetro con los servos. Compro unos espejitos en Amazon por 9 euros. Son 33 espejitos, pero no se venden menos. Eirini me pregunta si le doy alguno. Le doy unos cuantos, seguro que Sergio también quiere. Compro 5 servos (por 13 euros). Necesito dos para el galvanómetro y en el kit de aprendizaje sólo viene uno.

Compro unos diodos láser normalitos por 1,15 euros 10 unidades (más 32 euros de gastos de envío (todo ventajas esto de ser Prime)).

El dilema que tengo ahora es cómo juntar todas las piezas en las posiciones adecuadas. Estos días he pasado bastante tiempo mirando proyectos similares. Muchos recurren a madera y cola para crear las piezas que necesitan para sostener los motores y hacer agujeros en las posiciones indicadas para meter tornillos, cables, o encajar componentes electronicos. Otros, los más pros, tienes talleres del copón y trabajan doblando aluminio y taladrando y cortando metal. Una solución interesante para crear las piezas que sostienen los motores y demás componentes electrónicos es la de las impresoras 3D. Sólo tendría que aprender a diseñar objetos en 3D.

Fabio me recomienda TinkerCAD para diseñar piezas sencillas. Le echo un ojo. Pruebo a diseñar alguna pieza sencilla, y sí, es bastante sencillo. Busco además alternativas más sofisticadas. Decido probar a diseñar alguna pieza en FreeCAD. Se ve que FreeCAD es mucho más completo, y para piezas complejas TinkerCAD se quedaría un poco corto. FreeCAD permite diseñar las piezas en 2D y darles luego altura, añadir normas como que ciertos puntos tienen que coincidir con otros o que ciertos ángulos no pueden variar aunque se cambie el tamaño de cierta parte, etc. Hay otras alternativas a FreeCAD aún mas pros, per de momento lo que quiero hacer creo que es suficientemente sencillo como para seguir la recomendación de Fabio.

Miro sobre opciones y precios en impresoras 3D. Hay un montón de tipos, y subtipos, y subtipos de subtipos pero hechas de diferentes materiales. Veo videos en YouTube sobre las más comunes. Un objetivo para este proyecto es aprender cosas nuevas. Decido comprar un pack de piezas para impresora, en vez de la impresora ya montada, y así aprender también un poco sobre las diferentes piezas sobre la marcha. Me compro el pack de piezas más común para montar la impresora más común, una tal Ender 3, que la gente parece estar muy contenta. El pack con las piezas cuesta 225 euros, más 23 euros para una bobina de PLA, un material biodegradable que se usa para imprimir.

Recibo todo en la oficina. Excepto por los lásers, que los de aduanas me pedían 40 euros por ellos y les he dicho que mejor que se los queden. 40 euros por algo que cuesta un euro? Ya compraré otro láser en otro lado.

El pack viene con unas intrucciones un tanto escuetas. Me han sobrado unas cuantas piezas, bastantes tornillos y en la caja había herramientas que no he usado para nada. O han sido muy generosos enviando piezas extra, o me he dejado algo sin atornillar. Pero bueno, ahora es tarde. Mañana probaré a ver si funciona el invento.

26 Januar 2019 - Mi primera impresión

Bueno, la impresora parece estar montada. Las piezas que sobran realmente parece que sobran. Ahora quiero probar a ver si puedo llevar a cabo todo el proceso desde imaginar la pieza hasta tenerla impresa en la mano.

Empezaré diseñando algo sencillo con TinkerCAD. Diseñar con TinkerCAD es cuestión de combinar figuras geométricas simples indicando las medidas y ángulos de cada cosa. Se pueden escoger figuras desde cubos y esferas hasta escaleras o ruedas dentadas. Todo un mundo de posibilidades. Pero como dice ese viejo proverbio castellano: Dale un lápiz a un sapiens...

Exporto el diseño, y lo importo al programa que divide el modelo 3D en las capas que se imprimirán. Se genera un archivo con la información de las capas. También indica que se necesitará metro y medio de filamento para imprimir la pieza. La bobina tiene 300 metros así que todo ok. Meto el archivo de capas (.gCode) en una micro SD y a continuación meto esta en la impresora. Le doy a imprimir y...

Flipante! Después de 20 minutos imprimiendo capas obtengo mi figura geométrica. Vivimos en el futuro.

Todo un éxito!

27 Januar - Imprimiendo galvos

Ahora que he comprobado que puedo diseñar e imprimir piezas, toca diseñar e imprimir las piezas del galvanómetro. Es importante que una vez impreso, al montar todo, los espejitos queden perfectamente alineados con el haz del láser. Dado que no sé cómo de precisa es la impresión, diseño las piezas de forma que pueda ajustar las posiciones de los motores en cualquier momento.

Imprimo la parte móvil del galvanómetro y lo primero que veo es que no le caben los tornillos. Por alguna razón los agujeritos (buhéros) han quedado más pequeños en la impresión que en el diseño. Cambio el diseño haciendo los buhéros un poco más grandes. Vuelvo a imprimir.

Todo pera. Imprimo la pieza que sirve de base. Imprimir esta pieza ya necesita hora y media y unos 10 metros de filamento.

Se imprime bastante bien. Y parece que con medio centímetro de grosor queda también suficientemente rígido. Únicamente le quedan alguno hilillos en algunas partes. Corto los hilillos con una de las herramientas que venían en la caja de la impresora. Al final sí que parece que el pack fue bastante generoso. También incluía una espátula cojonuda para despegar las piezas de la cama de la impresora.

Monto la parte móvil con la base y coloco los motores conectados al arduino. Todo parece encajar bien.

Engancho los espejitos a los motores con unos alambres y un poco de pegamento. Pongo otro alambre alrededor de un puntero láser, que compré en el saturn por 5 euros, para mantenerlo encendido. Alineo el láser con los espejitos. El láser queda proyectado sobre la pared. Por ahora parece que todo bien.

Llega el momento de la verdad. Meter el programa en el arduino que mueve los motores y que estos dirijan el puntero de forma controlada.

Tras un par de pruebas y errores:

Februar 13 - De galvos a torres

El galvo casero, funcionar, funciona. Pero es un rollo trabajar con él. Necesita que el láser y los espejitos estén siempre perfectamente alineados, y a la mínima que se mueve algo ya no apunta a donde debería. Así es muy difícil hacer pruebas y medir la precisión. Creo que ha sido todo un éxito en la dirección equivocada.

La ventaja de los galvanómetros es que al mover únicamente los espejitos permiten hacer muchos más movimientos por segundo que si los motores tuviesen que cargar con algo más pesado (como un láser grande). Los galvanómetros suelen utilizarse para proyecciones con láser o proyectos donde hace falta mover el puntero miles de veces por segundo. Pero para lo que yo quiero hacer no necesito tanta velocidad. Imagino que como mucho podré dar una orden de movimiento por cada imagen que reciba de la cámara, eso pone el límite en unos 30 movimientos por segundo, como mucho.

De momento, lo que quiero conseguir es un sistema que reciba imágenes de la cámara, encuentre en la imagen un objetivo fácil de reconocer y apunte con el láser en la dirección de ese objectivo. Con la complejidad que tiene mi galvanómetro va a ser más dificil hacer pruebas y progresar en la dirección de tener la cámara y el láser sincronizados. Por lo menos para un primer prototipo creo que sería útil tener una torreta láser con la menor cantidad de partes móviles posible. Cuantas menos piezas, menos probabilidades hay de que algo se tuerza.

Pensando en cómo simplificar el cacharro lo más posible, se me ocurre que simplemente puedo pegar un motor a otro.

Compro unos diodos láser pequeñitos, en dos tiendas distintas (por si uno no vuelve a llegar), por 1 euro cada diodo. Diseño una pieza muy simple que mantiene uno de los motores de pie sobre la mesa. La pieza me queda un poco grande así que relleno los huecos con papel higiénico. Puede que el papel higiénico incluso ayude a absorber vibraciones. Todo ventajas. Engancho con alambre y pegamento el segundo motor perpendicular al primero. Pego con blue tack el diodo láser al segundo motor. Conecto los motores y el láser al arduino.

Meto en el arduino otro programa que mueve los motores para probar que todo está bien conectado.

Y a la primera! Parece que le voy pillando el tranquillo.

Pongo aquí otro vídeo en el que hago una prueba con la velocidad a la que podría llegar a mover el puntero.

Parece que para apuntar y perseguir bichos es más que suficiente.

Februar 15 - Color tracking

Ahora que tengo una forma de apuntar con el láser mucho más cómoda y estable, toca reconocer objetivos en la cámara. Estos días he estado leyendo sobre OpenCV, una librería de funciones para tratamiento de imágenes en tiempo real. Hay mucha documentación y ejemplos de cómo usar las distinta opciones. El único problema es que el 90% de los ejemplos y tutoriales son en Python y yo de Python sé lo justo y necesario como para reconocer el logotipo. Pero bueno, este es un viaje para aprender.

Leyendo sobre seguimiendo de objetos veo que el método más fácil es detectar los objetos por su color. Con OpenCV es muy fácil hacer un programa para detectar un derminado color. Escribo un programa en Python para recibir imágenes de la cámara y reconocer colores. Ajusto los valores en mi programa hasta conseguir detectar objetos del color anaranjado en el que imprime mi impresora. El resultado es más que satisfactorio.

Fácil. Esto marcha. Ahora el tema sería ser capaz de dar las órdenes correctas a los motores para poder apuntar con el láser al objetivo naranja.

El problema que veo es que los objetos del tamaño de una avispa, a un metro de la cámara, ya se ven demasiado pequeños como para poder diferenciar fiablemente una abeja de una avispa. Una solución que se me ocurre es aumentar la resolución de la cámara, así por lo menos aunque el bicho ocupe una porción pequeña de la imagen, todavía estaría ocupando una cantidad suficiente de píxels para hacer el reconocimiento. De momento estoy haciendo las pruebas con la cámara del portátil, que tiene una calidad decente, pero la resolución es muy bajita (640x480).

Me compro una cámara USB de 8 Megapíxels por 64 euros.

Hago un par de pruebas y veo que puedo obtener resoluciones bastante grandes, pero a costa de reducir drásticamente las imágenes por segundo. Tendré que hacer más pruebas, pero al menos ahora tengo una camarita que puedo mover y situar junto al láser, cosa que no podía hacer con la cámara del portátil.

Februar 22 - Intentando apuntar

Ahora sé que puedo mover el puntero, y puedo reconocer objetivos por colores en la cámara. El siguiente paso será intentar apuntar al objetivo.

Empiezo haciendo un programa que recibe la imagen de la cámara, la muestra por pantalla, y luego puedo hacer click sobre la imagen para establecer un objetivo. El programa debería reconocer el puntero láser en cada imagen. Si el puntero láser está por debajo del objetivo en el que hice click debería dar la orden de girar un poquito el motor del eje Y para mover puntero un poco hacia arriba. Cuanto más cerca esté el láser del objetivo, más pequeño será el pasito para acercarse. Esto se repetiría por cada imagen que se vaya recibiendo de la cámara, hasta que el puntero esté sobre el punto en el que hice click.

Bueno, funcionar, funciona, pero el resultado es bastante lamentable. Hago pruebas para intentar hacer el movimiento más rápido y más fluido, pero sólo consigo fracasos y frustración.

Investigando por qué se mueve tan lento y a trompicones me doy cuenta de que los motores no hacen nada si intento dar pasos pequeñitos. Todas las órdenes que el programa le da a los motores para mover el puntero menos de un centímetro son ignoradas. Luego, si el programa da órdenes cada vez más grandes, el puntero se mueve de repente mucho más de lo que debería.

Buscando información sobre este comportamiento aprendo sobre un nuevo concepto: la banda muerta. Resulta que por razones de cómo funcionan internamente los servo motores, se añade a propósito, durante la fabricación, esta necesidad de un cambio mínimo. ¿y por qué?. Pues los servo motores reciben la dirección en la que deben apuntar a través de la intensidad eléctrica que reciben en un tercer cable. Para dejar el motor inmóvil en una posición determinada, habría que mantener perfectamente constante esa intensidad del tercer cable. Pero mantener una intensidad constante es prácticamente imposible, por eso se opta a ignorar cambios pequeños de intensidad. El rango de intensidades que se deciden ignorar es lo que se conoce como banda muerta. Añadir una banda muerta ancha es últil para reducir el gasto de energía en micro-movimientos que serían probablemente indeseados. Pero para mí, es una putada.

Leo además que los servos suelen llevar engranajes de reducción, que sirven para controlar la velocidad a la que gira el eje y para aumentar su fuerza (torsión). El problema es que estos engranajes tienen siempre imperfecciones en el ensamblado, lo que aumenta la banda muerta. Especialmente cuando los engranajes son de plástico, cómo los que yo tengo. Pero me costaron como 2 euros cada uno. No se puede pretender hacer bolsos de seda con una oreja de cerdo.

Entonces, el problema que tengo es de principalmente de precisión. Para solucionar esto se me ocurren dos cosas:

  1. Comprar unos servo motores de mejor calidad
  2. Pasar de los servos y usar motores de pasos

Sobre motores de pasos no tengo ni puta idea, así que mejor probar primero si el problema se soluciona con servos mejores.

Compro dos servos de metal, con engranajes de metal, por 18 y 17 euros.

Februar 25 - Metal Gear

Recibo los servos de metal. Son algo más grandes que los que tenía, y pesan bastante más. Leo las especificaciones y veo que son capaces de levantar hasta 20 Kg! Por lo que veo en el internete, la gente los usa mucho para controlar la dirección de coches teledirigidos todoterreno. Son acuáticos, y tienen pinta de aguantar golpes bastante bien. Lamentablemente, todas estas características me importan un cojón. Yo sólo quiero que sean precisos.

Los servos con esta fuerza ya tienen un consumo que podría quemar fácilmente el arduino. Tengo que aprender como conectarlos sin romper ni quemar nada. Afortunadamente, mi expléndido kit de aprendizaje de arduino tiene el cacharro adecuado para este trabajo. Una fuente de alimentación pequeñita. La fuente de alimentación hace de intermediaria entre el motor y el arduino. Conecto las tomas de tensión y tierra del motor a la fuente (en vez de directamente al arduino). Conecto el cable de datos del arduino al motor. Conecto la fuente a la corriente. Pego uno de los diodos láser al eje del motor y lo dejo apuntando a la pared.

Empiezo a hacer pruebas para observar cuales son los pasos más cortos que puedo hacer a la hora de mover el puntero. Parece que puedo dar pasos más pequeños que con los servos de plástico, pero sigue teniendo una banda muerta demasiado grande. Creo que debería considerar escribir un libro sobre como NO construir una torreta láser.

Ahora se me ocurre lo siguiente. Los servos son capaces de girar 180 grados, pero yo no necesito que giren 180 grados. De hecho, cuando muevan un láser más potente, debería limitar que puedan girar tanto y quemen lo que no deben. Si hiciese, o comprase, una reducción de 1/4, tendría sólo un ángulo de 45 grados (que podría ser suficiente) y 4 veces más precision. Teóricamente, claro. Porque probablemente, siendo yo no muy diestro en el arte de la mecánica, y con las posibilidades de mi taller low-cost, el ensamblado que fuese a hacer del motor al engranado de reducción va a estar lejos de quedar perfecto, y probablemente pierda por en el ensamblaje la precisión que gane por la reducción. Habría que probarlo. Pero todavía hay otras opciones antes.

März 13 - El paso a los motores de pasos

Como decía el amigo Yisus, no sólo de servo motores vive el hombre. Y dado que el proyecto no parece avanzar voy a considerar otras opciones. Muchas cosas que aprender, y muchos fracasos por descubrir.

Miro más videos de YouTube y leo algún que otro post. Esta vez sobre motores de pasos.

Los motores de pasos son otro tipo de motores eléctricos. Se utilizan cuando hace falta situar el motor en algún punto concreto, y poder volver con precisión a ese punto cuantas veces haga falta en un futuro. Por ejemplo, las impresoras 3D llevan este tipo de motores para posicionar la boquilla por la que sale el plástico justo encima de la capa anterior, capa tras capa.

Los motores de pasos sólo aceptan ciertas posiciones, y giran moviéndose paso a paso de posición en posición. Entonces, si se quiere volver a una posición determinada, sólo hay que recordar cuantos pasos se dieron en una dirección para luego girar en dirección contraria el mismo número de pasos.

En un principio había descartado los motores de pasos porque leyendo las especificaciones veía que estos motores (por lo menos los económicamente accesibles) sólo pueden moverse en un número muy pequeño de pasos. Esto era inaceptable para la precisión que yo buscaba. Si sólo pueden situarse en 64 posiciones diferentes, significa que lo mínimo que los puedo girar son 5'6 grados. Esto implica que sólo podría mover el láser en saltos de 5 en 5 centímetros. Y esto sólo si lo uso con la distancia entre la mesa y la pared (menos de un metro). Si quisiera o quisiese usar más distancia (un metro entero), el paso mínimo sería aún mayor. Necesitaría avispas como puños para poder darles.

Peeeero, resulta que algunos motores de pasos incluyen engranajes de reducción. Esto implica que estos motores a) van a girar algo más lento, b) tienen más fuerza, y c) cada paso que gira el motor se traduce en un giro mucho más pequeñito del eje. Y, casualmente, el motor de pasos que incluye mi fabuloso kit de aprendizaje de Arduino... tiene reducción. Y una reducción bastante considerable: 1/64. Esto implica que con este motor de pasos, disparando desde la mesa a la pared, podría mover el laser con precisión de milímetros. Suena prometedor.

Miro tutoriales sobre cómo conectar el motor al arduino y cómo moverlo poco a poco. El objetivo es comprobar que realmente puedo moverlo en pasitos más pequeños que los servos. Conectarlo es algo más engorroso. Para conectar un servo sólo hacen falta 3 cables. Para conectar el de pasos hace falta una controladora a mayores, que lleva cuatro cables hacia el motor, otros cuatro hacia el arduino, y otros dos para la alimentación.

Descargo un diseño de una pieza 3D de una cabeza que se engancha al eje del motor que tengo. Así podré pegar otro láser a la cabeza para hacer pruebas. Imprimo la pieza. Pongo la pieza en el eje del motor. Pego un diodo láser a la cabeza. Dejo el láser apuntando a la pared. Hago pruebas con la precisión y la velocidad. El paso mínimo es... mucho más pequeño que con los servos! Donde hay vida, hay esperanza.

Pero no todo van a ser buenas noticias. Un problemilla que le veo a usar estos motores en vez de servos, es que los servos sólo giran un máximo de 180 grados, y cada vez que se inician vuelven al centro. Esto hacía que el láser se recentrase cada vez que reiniciaba el arduino. Los motores de pasos pueden dar todas las vueltas que quieran. Cuando algo empiece a ir mal, que irá, y los motores empiecen a girar varias vueltas en vez de los pocos grados que quiero que giren, se van a enredar los cables, y lo que es peor, el láser podría llegar a apuntar en cualquier dirección. Con los servos, el láser no podía llegar a darse la vuelta y apuntarme a mi. Con los diodos que estoy usando esto aún no es un problema, pero si llego al punto de necesitar usar lásers más potentes va a ser un problema no tener esa limitación. Por otro lado, un gran punto a favor de usar estos motores de pasos, es que la controladora, tiene lucecitas.

Bueno, parece que los motores de pasos así a priori podrían solucionar el problema de la precisión. Ya veré como solucionar los demás problemas más adelante. El único problemilla urgente es que sólo tengo uno. Para hacerme otra torreta necesito dos. Así que compro 5 más, por 17 euros.

März 14 - Torretas paso a paso

Ya tengo mis motores.

Decido replicar la idea super simple de montar un motor sobre otro tal y como hice con los servos. Para ello, necesito una pieza que se enganche en el eje de un motor y agarre el otro motor. El láser ya lo tengo pegado a la cabecera que imprimí el otro día.

Partiendo del diseño de la cabecera como base, diseño otra pieza fusionada a la cabecera con las dimensiones de los motores. La idea es que la pieza encaje en el eje de un motor y quede abrazando al otro. Imprimo la pieza. Pego un motor a la mesa con Blu Tack. Pongo la pieza nueva encajada al eje este primer motor. Meto el segundo motor, que ya tiene el láser montado, en el hueco de la pieza impresa para que le abrace. Conecto los cables de los motores a las controladoras, y de las controladoras al arduino. Conecto la alimentación de los motores y del láser a la mini fuente de alimentación.

Escribo un programa para el arduino que debería mover los motores sincronizadamente dibujando un cuadrado en la pared. Meto el programa en el arduino.

Un éxito a medias. Por alguna razón funciona bien un ratillo pero luego empieza a desvariar y el láser empieza a apuntar cada vez más abajo. Tocando los componententes cuando empieza a enloquecer, veo que los motores se calientan. La fuente de alimentación quema tocarla. Asumo que por eso desvarían; la fuente de alimentación no debe soportar la tensión de mi obra de arte.

La fuente de alimentación alimenta todo con 5 voltios. Por inventos que hice en el pasado, como mi ventilador usb o mi arbolito de navidad usb, sé que los cargadores usb también sacan siempre 5 voltios. En la caja de los cables encuentro un cargador usb que pone que soporta hasta 2 amperios, que es el doble de lo que soporta la mini fuente. Decido sacrificar el cargador usb, para sustituir la fuente de alimentación. Corto el conector usb del cargador, y pelo los cables de tensión y tierra. Quito la fuente, y la sustituyo con los cables de tensión y tierra del cargador. Like a boss.

Vuelvo a probar a ver si mi artesanía soluciona el problema del enloquecimiento de los motores.

https://www.youtube-nocookie.com/embed/-5pNYMuorpY

Funciona de lujo.

März 16 - Reconociendo Legos

De momento he logrado avances en la parte mecánica del invento. Pero el objetivo final de todo esto es poder distinguir avispas de abejas para disparar únicamente a las avispas. En ese aspecto lo máximo que he conseguido es el seguimiento de mi figura geométrica naranja.

Como no tengo forma de hacer pruebas fáciles con avispas y abejas reales, se me ocurre que primero podría intentar diferenciar objetos de un tamaño similar al de los bichos, y que sean ligeramente distintos entre sí. He pasado por una tienda de jueguetes, y me he encontrado con dos voluntarios: Fulinito y Menganito.

Fulinito es el de la camisa roja. Menganito el del mono naranja.

Invierto unas buenas horas en aprender sobre reconocimiento de objetos en imágenes. Veo que necesito como mínimo unas 200 fotos de cada lego para poder entrenar un sistema que los diferencie. Hago 200 fotos de Fulinito, y otras 200 de Menganito. Aprendo a crear, y creo, una base de datos donde queda etiquetado, con su nombre, cada uno de los legos en cada una de las fotos. Aprendo a entrenar redes neuronales especializadas en reconocimiento de imágenes. Entreno una red neuronal con las fotos de Fulinito y Menganito. El entrenamiento necesita bastante tiempo de cálculo. Dejo el portátil entrenando la red durante 10 horas. Estudio cómo utilizar redes neuronales entrenadas. Pruebo a ver si funciona mi red entrenada. Debería reconocer los legos en las imágenes, y cual es cual. El sistema dice que Menganito es una bicicleta. Mal empezamos.

Entrenar redes neuronales es una operación muy costosa en recursos de computación, y mi portátil tampoco es demasiado pepino. Quizás el problema es que no he dejado que la red se acabase de entrenar del todo. Se me ocurre probar a entrenar la red en uno de los servidores de Versus. Versus tiene un servidor bastante tocho que no estamos utilizando más que para conservar sus datos. Igual ahí el entrenamiento va más rápido.

Subo los datos y el programa de entrenamiento al servidor tocho. Continúo el entrenamiento desde donde lo había dejado. Quizás parece un poco más rápido, pero no mucho más. Es bastante decepcionante. Leo que para hacer bien estas cosas hace falta una tarjetas gráficas potentilla. Incluso si no es muy potente, una tarjeta gráfica es como diez veces más rápidas que una CPU del mismo rango a la hora de realizar el tipo de cálculos necesarios para el entrenamiento. El servidor tocho no tiene tarjeta gráfica. Pues nada, habrá que tener paciencia.

Dejo el servidor de versus entrenando durante todo el día. Vuelvo a probar si ahora funciona. Nada. Ahora ya no reconoce nada. Ni siquiera bicicletas. Qué bajón. Todo este tiempo entrenando para nada. En fín, un fracaso más a la lista. Dejo el programa de entrenamiento en el servidor, quizás sólo necesite aún más tiempo...

März 22 - Fulinito y Menganito

Entre el piano, el tinder de zapatos, y la desmotivación por el último fracaso, esta semana he dejado esto un bastante de lado. Recuerdo que el finde pasado había dejado el entrenamiento corriendo en el servidor de versus. Una semana sí que debería haber sido más que suficiente para completar el entrenamiento. Entro en el servidor y descargo el archivo de conocimiento. Vuelvo a hacer pruebas a ver si esta vez funciona. Nada. Vuelve a decir que Menganito es una bicicleta.

Sin embargo, esta vez me fijo en que, aunque diga que Menganito es una bicicleta, también dice que está muy seguro de que Menganito es una bicicleta. Dice tener más de un 90% de seguridad que Menganito es una bicicleta. Reviso la configuración del sistema y veo que efectivamente, Menganito debería llamarse bicicleta! Funcionaba desde el principio, era sólo un problema de nombres. Corrijo los nombres para que Menganito se llame Menganito. Y voilá!!

Me flipa.

Aunque creo que el secreto del éxito para que funcione así de bien, es que las fotos del entrenamiento las hice con las mismas condiciones de iluminación que la prueba final del vídeo. Esto puede ser engañizo, porque seguramente si cambio las condicines de iluminación ya no los va a reconocer tan bien.

Pero también es positivo saber que si entreno el sistema con videos de abejas y avispas del mismo sitio donde lo voy a poner a funcionar, funcionará mucho mejor que si uso imágenes genéricas de abejas y avispas que encuentre por el interné.