sábado, 14 de abril de 2018

Medidor e indicador de distancia con Arduino

A la hora de desarrollar proyectos mecatrónicos suele ser fundamental el poder cuantificar distancias y emplearlas como datos de entrada que permitan a nuestros autómatas tomar decisiones.

Usando como base de programación el Entorno de Desarrollo Integrado de Arduino (IDE), la adquisición de componentes se vuelve bastante económica. Pero aparece la complejidad a la que todo técnico debe enfrentarse con gratos resultados, que versa sobre la conexión e interacción entre distintos dispositivos.




Yo ya había programado un medidor de distancias mediante un sensor de ultrasonidos HC-SR04 de 45 x 20 mm y una placa programable Arduino UNO. Pero los valores medidos sólo los podía ver en el monitor serie del propio (IDE). Así que el siguiente reto ha sido poder mostrar dichos valores en un display LCD alfanumérico de 16 columnas por 2 filas.


Esquema de conexión entre el sensor de ultrasonidos y la placa programable Arduino UNO

Afortunadamente he podido simplificar bastante las conexiones del display gracias al módulo adaptador serie I2C. Se trata de un bus de comunicación serie que simplifica las conexiones a sólo dos líneas para transmitir la información. Una se dedica al tráfico de datos y la otra a la señal de reloj. Dado que los circuitos que se comunican mediante este bus suelen compartir la misma masa, no se considera necesaria una tercera línea. Como indica Luis Llamas en su web, el I2C es un bus síncrono. Todos los dispositivos que lo conforman permanecen sincronizados gracias a la señal de reloj proporcionada por el dispositivo maestro. Así se evita que cada dispositivo tenga su propio reloj, reduciendo la complejidad para mantener una transmisión sincronizada. Para ampliar y aclarar conocimientos, recomiendo visitar la web de Luis Llamas.







La conexión entre el módulo serie I2C y el display LCD la he realizado de la manera más simple pinchando sus patillas en la placa Protoboard. Para poder usarlo he necesitado descargar la librería LiquidCrystal_I2C y añadirla al IDE.
Para la realizar el código de programa me he servido de estos dos tutoriales en Internet:



El buen ingeniero tiende a ser vago y pesetero. Pero lejos de dedicarme a hacer un simple copia/pega, los códigos facilitados por los autores de las mencionadas webs me han servido de ingredientes base para la creación de mi propio programa. Considero que no merece la pena comenzar a realizar la programación desde cero. Si, en cambio, reservar fuerzas y tiempo para la adecuada comprensión de lo que estoy haciendo y adaptarlo a mi propio proyecto.





Programa


#include <Wire.h> // librería con las funciones necesarias para el control del hardware integrado
#include <LiquidCrystal_I2C.h> //  librería que gestiona el display LCD

LiquidCrystal_I2C lcd(0x3F,16,2); // creación objeto LCD de 16 columnas x 2 filas y dirección  0x3F  

const int EchoPin = 5;
const int TrigPin = 6;
const int LedPin = 13;

void setup()
{
  lcd.init(); // inicializamos el display LCD
  lcd.backlight(); // encendemos la luz de fondo del display LCD

   lcd.setCursor(0, 0); // cursor en la primera posición(columna:0) de la primera línea línea(fila:0)
   lcd.print("Medidor distancia"); // imprimimos en el display LCD la primera parte del texto
  
   Serial.begin(9600);
   pinMode(LedPin, OUTPUT);
   pinMode(TrigPin, OUTPUT);
   pinMode(EchoPin, INPUT);
  }

void loop()
{
   int cm = ping(TrigPin, EchoPin);
   Serial.print("Distancia: ");
   Serial.println(cm);
   delay(1000);
}
int ping(int TrigPin, int EchoPin) {
   long duration, distanceCm;
 
   digitalWrite(TrigPin, LOW); // para generar un pulso limpio ponemos a LOW 4 microsegundos
   delayMicroseconds(4);
   digitalWrite(TrigPin, HIGH); // generamos  un disparo de 10 microsegundos
   delayMicroseconds(10);
   digitalWrite(TrigPin, LOW);
  
   duration = pulseIn(EchoPin, HIGH); // medimos el tiempo entre pulsos, en microsegundos
  
   distanceCm = duration * 10 / 292/ 2; // convertimos a distancia, en cm
     
  long distancia = distanceCm;

 
  lcd.setCursor(0, 1); // cursor en la primera posición(columna:0) de la segunda línea(fila:1)
  lcd.print("    "); // dedicamos un espacio a la impresión del valor de la distancia 
  lcd.print(distancia);
  lcd.print("cm "); // imprimimos el texto "cm" en el display LCD 

  return distanceCm;

}

Una vez depurados los errores y superadas las dificultades, ya tenemos confeccionado este módulo para usarlo en próximos proyectos mecatrónicos. Tanto el código como el hardware son susceptibles de ser ampliados, añadiendo señales de alarma ante distancias críticas, actuación sobre motores y otros dispositivos de salida.




miércoles, 11 de abril de 2018

¿Qué es Tinkercad?

Para quienes no tenemos la suerte de tener un taller en el que poder llevar a cabo nuestros proyectos mecatrónicos y de otra índole, el uso del espacio resulta algo crítico. A poco que me pongo a montar un kit mecánico, probar circuitos electrónicos en una placa Protoboard, soldar componentes o usar pinturas y adhesivos, mi escritorio y mobiliario cercano quedan sepultados por un caos de objetos.

Desde un tiempo me ha resultado muy interesante la idea de poder diseñar circuitos electrónicos en el PC y simular su funcionamiento. No deja de ser un ejemplo, a escala pequeña, de la revolución que impusieron hace años los programas de Diseño Asistido por Ordenador (siglas CAD en inglés). Frente a los clásicos tableros de dibujo, el poder proyectar un producto en 3D y detectar conflictos entre componentes y equipos en la fase de diseño, no tiene precio. Siempre pongo como ejemplo el desarrollo del submarino de ataque Virginia. Respecto a los métodos anteriores, el diseño mediante software CAD en 3D permitió el trabajo simultaneo de distintos equipos profesionales sobre una misma "maqueta virtual" a escala 1:1. Así se agilizan procesos de diseño y se detectan fallos a tiempo. O así debería de ser.





Volviendo a la cuestión de los circuitos electrónicos, a través de la aplicación Electronics Lab de Autodesk acabo de conocer Tinkercad. Se trata de una aplicación web para la creación de proyectos abordando la parte mecánica y electrónica.




Para el diseño electrónico, Tinkercad me ha encantado. Dispone de un entorno muy ameno con el que vamos seleccionando los elementos activos y pasivos que necesitamos, comenzando desde una placa Protoboard. Una vez dispuestos los elementos y realizadas la conexiones, podemos simular el funcionamiento para estudiar su comportamiento. Y aquí viene lo mejor. El propio programa nos asesora sobre lo que acabamos de hacer. Por ejemplo, emite un aviso sobre la intensidad de corriente que está circulando por un diodo led. Si es superior al valor conveniente, nos lo indica con números. Y si llegase a ser destructiva para el diodo, nos lo indica de manera contundente. Además, mientras la simulación está en marcha podemos ir modificando las variables de cada elemento y ver los cambios en el momento. También podemos obtener una lista con los materiales empleados e importarla a nuestro ordenador en un formato compatible con Excel. O algo tan simple pero cómodo como poder controlar el zoom mediante la rueda central del ratón. Tengo la sensación de que iré descubriendo más gratas utilidades a medida que vaya desarrollando mis proyectos con él.









En cuestión de diseño mecánico me ha gustado, pero no tanto, ya que se encuentra en la categoría de lo que yo llamo programas "no profesionales". No es un SolidWorks precisamente. Si bien resulta mucho más sencillo que aquellos programas de alto nivel, carece de las funcionalidades técnicas que los caracterizan y que permiten llegar a diseños complejos. No obstante, no debe ser despreciado por ello. Lo veo muy útil de cara al prototipado rápido y exportación de modelos para impresoras 3D, entre otros usos.





Acceder a este programa en la red es gratuito, mas debemos de darnos de alta como usuarios facilitando nuestro correo electrónico. Creo que es lo menos que se le debe a Autodesk, cuyo programa estrella AutoCAD ha sido pirateado en masa y sin compasión durante años. Se aprecia una política corporativa consistente en regalar antes de que se les robe. Pero algo habrá que darles a cambio.

En resumen, el entorno es muy atractivo e ideal para quienes se estén iniciando en los entornos CAD. Y lo que más me importa a mi ahora: poder simular mis circuitos electrónicos y evaluar sus funcionalidades, para ir a tiro hecho a la hora de liarme a pinchar cables y componentes en la Protoboard.






lunes, 9 de abril de 2018

Robótica educativa. Desarrollo de un carro automático para manipulación de objetos I


Hace tiempo vi en una web asiática de venta de productos mecatrónicos un barato kit de montaje. Se trataba de un vehículo de cuatro ruedas con tracción a los dos ejes, dotado del típico motor eléctrico de corriente continua empleado para juguetes y un portapilas para dos baterías de 1,5 V. Me pareció interesante de cara al desarrollo de equipos educativos. A mi cabeza vinieron ideas como añadirle sensores de ultrasonidos o infrarrojos para cuantificación de distancias, una placa programable ARDUINO o incluso algún sencillo mecanismo robotizado para la manipulación de objetos.




Esta misma mañana me he puesto a montarlo. Y la primera conclusión que he sacado es aquella que versa sobre la frecuente divergencia entre precio y calidad. En este caso se vuelve a repetir el tópico de que los gigantes asiáticos tienen sus fortalezas y debilidades. Lo que parece sencillo puede acabar complicando bastante. El bastidor está formado por dos perfiles en "L" de alas iguales. Quedan unidos, que no fijados, mediante los ejes de las ruedas, los cuales ya cuesta lo suyo hacer pasar por lo agujeros de los perfiles. De hecho, para el resto del montaje he necesitado aplicar un lubricante para modelismo ferroviario. Algo que, de forma gráfica, no se indica en las instrucciones.










Está muy bien aplicar uniones desmontables mediante tornillo y tuerca a la hora de proyectar la unión entre piezas. Pero se ha de tener en cuenta con qué herramientas se van montar y si en el conjunto queda espacio para tales útiles. Además, para poder apretar la tuerca y el tornillo se necesita inmovilizarlos, lo que suele demandar dos manos. Gracias a la necesidad he ingeniado usar el destornillador como pata de apoyo mientras que con un alicate de punta fina y paciencia he logrado enroscar las tuercas. También he acabado aplicando lubricante en las roscas de los tornillos para facilitar la operación. Gracias a la disposición de la rueda dentada del eje del lado del motor y sus poleas, dicho elemento queda más o menos fijado. Pero lograr que las poleas del otro eje queden en el mismo plano que las anteriores, es otra historia. El grado de apriete entre eje y agujeros es excesivo de cara al montaje, incluso usando lubricante. He tenido que desistir en alcanzar el paralelismo entre las dos correas transmisoras en pos de mis nervios. No se trata de un mecanismo que exija perfección. He montado los dos parachoques y ajustado el motor. Un apriete excesivo de los tornillos que lo sujetan puede provocar demasiada presión entre las ruedas dentadas, provocando el atoramiento de esta pequeñita máquina eléctrica.












Todo este montón de quejas expuestas hasta ahora las quiero reenfocar de manera constructiva. Por algo barato no podemos esperar gran cosa. Mas hay que evaluar si para el fin pretendido gastar más dinero merece la pena. Es más, con esta experiencia he aprendido y recordado conceptos importantes a la hora de diseñar un producto. El diseño no sólo ha de contemplar cuestiones como el uso o ciclo de vida del producto. También asuntos como el montaje y quien lo va a realizar. Yo no recomendaría este aparente coche de juguete para ningún niño o incluso adolescente. Mi experiencia como profesor me está demostrando que la paciencia y tolerancia a la frustración entre nuestros jóvenes es muy baja. Conviene medir muy bien el grado de dificultades para evitar que se bloqueen y acaben abandonando la actividad. Aprender a tolerar y gestionar las dificultades implica necesariamente enfrentarse a ellas. Pero en cuestión de robótica educativa veo problemático el que se tengan que detener demasiado tiempo en intentar apretar cuatro tornillos y tuercas porque no tienen espacio para usar las herramientas ni ergonomía para sus manos.




El siguiente paso será diseñar y construir una pista sobre la que este carro de desplazará en un sentido y otro.

lunes, 2 de abril de 2018

Ensamblando a Anet A8 III


Vuelto a retomar el montaje de mi primera impresora 3D. Ahora toca montar los soportes que alojan los dos motores del eje Z. Las piezas que forman dichos soportes son unidas con tornillos M3x18. Al motor del lado derecho le conectamos un cable de 90 cm y al de la izquierda uno de 40 cm. Conviene colocar en el extremo de cada cable, el próximo al controlador, una pegatina identificativa. De lo contrario, una vez envueltos y trenzados puede resultar un lío tremendo identificar cada cable. Así nos ahorraremos fuerzas, tiempo y paciencia en un futuro. Cada motor lo anclamos a su soporte mediante tornillos M3x12.



La perfección no existe. Y menos en una impresora 3D de poco más de 100 euros. Tuve que repasar este cajeado con una lima para poder encajar en él la tuerca, pero sin mayor complicación. Lo cierto es que es un sistema muy ingenioso para no tener que sujetar las tuercas mientras las roscas de los tornillos avanzan dentro de ellas. 







El siguiente paso es montar la pantalla LCD. Para ello necesitamos la pantalla en cuestión, cables, cuatro tornillos M3x30, ocho tuercas M3 y cuatro tubos de plástico M3x7. Para que nos resulte lo más sencillo y cómodo posible, trabajaremos por la parte trasera del marco. No obstante, los tornillos han de ser introducidos por la parte frontal y volviendo al lado trasero, ensartamos en ellos los tubos M3x7. El panel LCD lo encajamos en el marco y lo fijamos mediante tuercas M3 antes de colocar la pieza que cierra el conjunto. Terminamos de asegurar la unión con cuatro tuercas M3.







A continuación fijamos el final de carrera para el movimiento de los motores del eje Z. En primer lugar, unimos las dos piezas haciendo coincidir sus agujeros y las atravesamos con tornillos M3x30 y las fijamos al marco principal con tuercas M3. Estas piezas harán de tope físico y sobre ellas anclamos el final de carrera. Para esto usamos dos tornillos M2x12, pero antes de hacerlo recomiendo pasar primero el cable por el agujero del marco que queda debajo.







A continuación os dejo el vídeo que me ha servido de tutorial para esta breve explicación. Está editado por Dron3D 8A y el mérito es de ellos.