Arduino e Impresión 3D

En este artículo tratamos la combinación de Arduino e Impresión 3D para crear aparatos electrónicos de toda índole con un diseño único.

Introducción

En uno de los anteriores artículos te enseñaba un cronómetro que hice hace poco con Arduino, estilo años 80/90, con su interruptor de palito, con un diseño tan simple que sería digno de aparecer en un coche del Grupo B.

Y lo cierto, es que mientras escribía esas líneas me ha dado de qué pensar.

Es un proyecto de Arduino e Impresión 3D fácil, funcional, bonito y con un gran aprendizaje de fondo.

Es por ello que el artículo de hoy tratará sobre como hacer un cronómetro como este.

Y es que hay algo muy interesante en el hecho de combinar Impresión 3D y electrónica, y es que te permite hacer tus propios aparatos de todo tipo, prepararlos con su propia caja y conectarlos donde queramos.

Arduino e Impresión 3D en Proyectos

Antes de empezar con el apartado práctico, empezar a soldar cables y programar, quiero que te fijes en un detalle interesante.

El artículo de hoy no trata como tal de hacer un cronómetro, que sí, al final aprenderás a hacer uno, pero el objetivo principal es el siguiente.

La impresión 3D te permite hacer objetos sólidos: Ventilaciones de un coche, un pomo de marchas… Objetos que como tal tendrán una vida estática y posiblemente decorativa o de funsionalidad muy simple.

Arduino por otro lado te permite interactuar con el mundo, tomar medición de valores y ejecutar acciones que afectan al mundo real.

Sin embargo, Arduino por sí solo nos permite crear el circuito. ¿Qué hacemos con un circuito solamente? Muy poco.

¿Qué es lo que pasa cuando combinamos ambas cosas?

Por un lado tenemos un objeto que interactúa con el mundo que le rodea y además está en su propio contenedor donde todas las piezas están adaptadas de manera segura y estética.

Juntar Arduino e Impresora 3D es algo que tiene sentido, es una simbiosis perfecta.

Solamente con Arduino, tenemos un prototipo a medias:

Arduino leyendo señal de RPM de un Mazda MX-5 NB

Aquí un ejemplo reciente, hace poco decidí empezar a extraer valores de mi coche, para ello programé un Arduino para mostrarlos por pantalla y utilizando una breadboard y cableado bajé al coche a conectarlo.

Aquí no hay impresora 3D de por medio.

¿Qué pasaría si quisiera poner esa pantalla dentro del salpicadero de mi coche?

Quedaría horrible, no tendría como sujetarla.

Sin embargo, si a esta capa le añadimos impresión 3D podemos tener un aparato completamente funcional.

Impresión 3D en proyectos de electrónica

En este blog he hablado largo y tendido sobre impresión 3D, pero siempre teniendo esta un rol principal, es decir, la finalidad era crear un objeto de puro plástico como tal.

Hoy cambia un poco, hoy es un contenedor, obviamente de plástico, pero que aloja otros componentes, su función no es principal, es secundaria.

Hoy creamos un objeto completo, centrándonos en su diseño y almacenamiento de piezas.

FreeCAD – Contenedor para el cronómetro

Para poder crear la carcasa de un aparato electrónico funcional debemos conocer varios principios básicos.

Roscas y sujecciones

Lo más importante, y donde muchas personas siempre fallan sin excepción a la hora de diseñar este tipo de cosas es en la sujección de las piezas.

Ten en cuenta que, por un lado, tu caja tendrá como mínimo dos partes, el fondo y la tapa.

De otra forma no podrás meter las piezas dentro (quizá sí, pero…) y mucho menos no podrás desmontarla en caso de necesidad.

Por otro lado deberás sujetar los componentes de alguna manera a la caja y mantener organizado el cableado.

La clave de las roscas en este caso es simple, especialmente si utilizas FreeCAD.

Para hacer unas roscas perfectas con impresión 3D debes ajustar la tolerancia u holgura una vez las estés creando.

En FreeCAD es simple, trazaremos un sketch con círculos donde queremos hacer las roscas e iremos al apartado Agujeros.

La clave la tienes en esta imagen y espero que la valores, y es que un simple paseo por Thingiverse nos demuestra que poca gente la conoce: «Haz tu mismo la rosca haciendo fuerza».

Una holgura de 0.6-0.8mm nos permitirá que todos nuestros tornillos entren a la primera, sin romper la rosca y que queden bien sujetos.

Este tipo de roscas será obligatorio utilizarlas para sujetar la tapa que cierra la caja.

Sin embargo, para colocar los componentes tenemos otra opción, una pistola de pegamento caliente.

Quieto, sé lo que estás pensando.

Eso es demasiado cutre para mi proyecto de electrónica con impresión 3D, quiero hacer algo completamente profesional.

Cuando es un proyecto personal tu objetivo debe ser la funcionalidad y velocidad de construcción, cuando es un proyecto comercial tu objetivo debe ser funcionalidad y profesionalidad.

Si estás haciendo un proyecto personal te recomendaría no complicarte.

Objetos como la pantalla del cronómetro pueden ser pegados de esta manera perfectamente, y si algún día se estropea se puede quitar ese pegamento con un soldador y repetir el proceso.

Tamaño

Lo primero que deberías hacer es tomar medidas de cuanto ocuparán todos los componentes.

Para ello, conecta todo en una breadboard y empieza a tomar medidas en los tres ejes: X, Y y Z.

Parece algo bastante obvio, pero debería quedar la suficiente holgura dentro de tu caja, para poder conectar posteriormente todo sin ningún problema.

Una vez tengas todo medido, te recomiendo añadir un 10% extra de tamaño, siempre es importante que quede cierta holgura.

Diseño – Estética

Dentro del caos y de la simpleza de las cosas que hago, siempre me gusta seguir patrones de diseño.

Esto es algo que es bastante obviado, sobretodo por las personas que digamos tienen un procesamiento más «lógico».

Soy yo el primero que te insta a que tus proyectos de Arduino sean lo más rápidos posibles, el aprendizaje lo es todo, es lo más valioso.

Sin embargo, la estética de las cosas también es muy importante, todo entra por los ojos, como decía en otros artículos:

¿Prefieres sentarte en una Renault Kangoo del año 2000 o en un Alfa Romeo 4C?

Sin ofender al dueño de ninguna Kangoo, he tenido una, sé de lo que hablo.

Prefiero un Alfa Romeo mil veces, un 4C o un SZ, simple y llanamente entra a la vista, te hace saber que es un vehículo de disfrute con solamente verlo por dentro:

Interior de un Alfa Romeo SZ – Fuente: Diariomotor

Existen todo tipo de diseños posibles para cada aparato que queramos crear y todos tienen un objetivo, un momento y un lugar.

Puedes crear algo con diseño de los años 80, simple, sencillo, de forma cuadrada.

Si avanzas 20 años más llegarás al estilo Y2K, formas muy redondeadas que evocan un retrofuturismo muy optimista.

Puedes buscar crear algo estilo punk cibernético (no confundir con Cyberpunk)

Este es un apartado en el que entraré más adelante en profundidad, y es que da para decenas de artículos, desde el diseño de productos comerciales, hasta estéticas «oscuras» basadas en manga y anime para proyectos únicos.

De momento te recomendaría quedarte con los siguientes puntos básicos:

  • Adáptate al entorno: En color y forma no tiene sentido romper el patrón estético. Si las luces interiores de tu coche son azules, poner una pantalla roja hará que sea desagradable. Si el interior es cuadrado, tu aparato también.
  • Formas básicas: Tus primeras piezas deberían ser simples a la vez que cumplen el primer punto. A mayor complejidad, mayor fragilidad. No compliques tus primeros proyectos.
  • Leds, botones, interruptores: Entran en juego los componentes de arduino a la vez que la impresión 3D, un interruptor de «palito» (aviación) no es lo mismo que un interruptor «normal», o permíteme exagerar, el de la luz de tu casa. Pequeños detalles marcan la diferencia.
  • Impresora: Te recomendaría una que te permita imprimir materiales que aguanten bien el calor con rapidez y calidad, como puede ser impresoras de SOVOL.
  • Material: No entraré en detalle, tienes una guía entera sobre qué material elegir aquí.

¿Cómo hacer un cronómetro con Arduino?

Finalmente llegamos al punto de poner todo en practica, creando nuestro primer aparato electrónico.

¿Por qué un crónometro? ¿No te vale uno de 10€ de Aliexpress?

La clave, como mencioné antes, no es hacer un cronómetro, es aprender a crear un aparato eléctrico con Arduino e Impresión 3D, sucede que es un proyecto fácil, que puede tener bastantes usos y que tiene un buen acabado.

¿Qué necesitarás para este proyecto?

Para este proyecto necesitarás una pantalla I2C de 16×2, dos botones, un interruptor y un portapilas.

Las conexiones son bastante simples:

Los botones deben estar conectados a GND y D2 y D6 respectivamente.

En este caso utilizo botones de dos pines, que utilizan la propia resistencia pullup de Arduino. Si tienes de 3 Pines deberás conectarlos a la fuente de 5V también.

La pantalla es una estándar como la que ya he mencionado en la guía de componentes, VCC a 5V, GND a GND, SDA al pin A4 y SDL al pin A5.

Finalmente el portapilas y el interruptor es en caso de querer hacer algo portátil, sin depender de una conexión externa.

Arduino no necesita estar conectado al puerto USB para funcionar, los pines VIN y GND nos permiten utilizar una alimentación externa, que en el caso de un Arduino Nano puede oscilar entre 4.5 y 18V.

Estas cifras tienden a variar según el proyecto, por norma general 6V suelen ser más que suficientes, especialmente procediendo de pilas.

Finalmente el código es largo pero muy sencillo, lo dejo explicado mediante comentarios:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Inicializa la pantalla LCD I2C en la dirección 0x27 y con 16 columnas y 2 filas
LiquidCrystal_I2C lcd(0x27, 16, 2);

const int buttonStartPausePin = 2;  // Pin del botón Start/Pause
const int buttonResetPin = 6;       // Pin del botón Reset

bool running = false;  // Estado del cronómetro (encendido/apagado)
unsigned long startTime = 0;  // Tiempo de inicio
unsigned long elapsedTime = 0; // Tiempo transcurrido

void setup() {
  // Configura los pines de los botones como entradas con resistencias pull-up internas
  pinMode(buttonStartPausePin, INPUT_PULLUP);
  pinMode(buttonResetPin, INPUT_PULLUP);

  // Inicializa la pantalla LCD con las dimensiones (16x2)
  lcd.begin(16, 2);
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("STAGE TIME:");

  Serial.begin(9600);  // Inicia la comunicación serial para depuración
}

void loop() {
  // Lee el estado de los botones
  bool startPausePressed = !digitalRead(buttonStartPausePin);
  bool resetPressed = !digitalRead(buttonResetPin);

  // Gestiona el botón de Start/Pause
  if (startPausePressed) {
    delay(200);  // Retardo para evitar rebotes
    running = !running;
    if (running) {
      startTime = millis() - elapsedTime;  // Restaura el tiempo transcurrido
    }
  }

  // Gestiona el botón de Reset
  if (resetPressed) {
    delay(200);  // Retardo para evitar rebotes
    running = false;
    elapsedTime = 0;
  }

  // Calcula el tiempo transcurrido si el cronómetro está corriendo
  if (running) {
    elapsedTime = millis() - startTime;
  }

  // Convierte el tiempo transcurrido a minutos, segundos y milisegundos
  int minutes = (elapsedTime / 60000) % 60;
  int seconds = (elapsedTime / 1000) % 60;
  int milliseconds = (elapsedTime % 1000) / 10;

  // Asegura que la primera fila siempre muestre "STAGE TIME:"
  lcd.setCursor(0, 0);
  lcd.print("STAGE TIME:  ");

  // Muestra el tiempo en la segunda fila de la pantalla LCD
  lcd.setCursor(0, 1);
  lcd.print(minutes < 10 ? "0" : "");  // Añade un 0 si los minutos son menores de 10
  lcd.print(minutes);
  lcd.print(":");
  lcd.print(seconds < 10 ? "0" : "");  // Añade un 0 si los segundos son menores de 10
  lcd.print(seconds);
  lcd.print(":");
  lcd.print(milliseconds < 10 ? "0" : "");  // Añade un 0 si los milisegundos son menores de 10
  lcd.print(milliseconds < 100 ? "0" : "");
  lcd.print(milliseconds);

  delay(50);  // Pequeño retardo para suavizar la actualización de la pantalla
}

Conclusión

Conforme escribo estas líneas tengo la impresión de que he abierto la puerta a demasiadas cosas que serán tratadas, espero, en un futuro:

Lenguaje de diseño de productos, guías de FreeCAD para usos específicos, componentes de arduino, como utilizar arduino para leer valores de un coche…

Las posibilidades que nos ofrece combinar Arduino e Impresión 3D son increíbles, como digo, el cronómetro es lo de menos.

Sin ir más lejos, una idea rápida con lo comentado en este artículo, simplemente leyendo el valor de las revoluciones por minuto de un coche, con un Arduino, unos Leds y una Impresora 3D puedes montar una shift light como la de los coches de rally.

Es una tira de leds (o un solo led) que marcan de manera visual y muy característica el rango de revoluciones con el que se está trabajando o cuando debes cambiar de marcha:

También se puede utilizar para sustituir esos relojes analógicos por pantallas que nos aporten información sobre el coche que el cuadro de serie no suele dar:

Temperatura del Aceite, presión de este, temperatura del anticongelante…

Se abre un mundo entero de posibilidades, juntar Arduino y una Impresora 3D permite hacer prácticamente cualquier cosa, por supuesto, no solamente de coches, aunque me parecen el mejor ejemplo.

Si este artículo te ha gustado, recuerda compartirlo en redes sociales y con tus amigos para alcanzar a un número mayor de personas.

Nos vemos en el próximo.

,

1 comment

Comments are closed.