Medidor de temperatura casero

Dado que tengo unos cuantos arduino pro micro que he usado para otras cosas, creí bastante conveniente diseñarle una placa para poder ponerle un display oled de 0,96 pulgadas (ssd1306 que ya utilicé en otras entradas) para poder hacer proyectos rápido (en principio pensando en conectarlo a un ordenador y que actúe como teclado, ratón y/o puerto serie). El esquema es el siguiente:

Y la placa resultante quedó así:

Podéis encontrar el proyecto, por si queréis mejorarlo en https://easyeda.com/biblioeteca/promicro-oled

El caso es que, lo primero que se me ocurrió para probarlo, una vez recibidas las placas, fue utilizar otro componente que tenía desde hace tiempo (un sensor de temperatura) y convertirlo en un termómetro… Una pena que no pensara en ello al hacer la placa, por lo que tendré que hacer alguna soldadura de más para conectar el sensor. En concreto quedaría así:

Que visto después de aplicar el soldador se vería así (he aprovechado las pistas de GND y VCC que llegaban al display):

Visto por el otro lado:

La parte de programar la temperatura es un poco más «liosa», básicamente habría que leer la hoja de especificaciones del termistor y resolver la ecuación de Steinhart-hart.

En mi caso, con el valor de 10KOhm en la resistencia y el modelo de termistor que tenía (aquí su hoja de especificaciones) el código resultante para leer la temperatura quedó así:

const int Rc = 10000; //valor de la resistencia
const int Vcc = 5;
const int SensorPIN = A0;
 
float A = 1.11492089e-3;
float B = 2.372075385e-4;
float C = 6.954079529e-8;
 
float K = 2.5; //factor de disipacion en mW/C

void loop() {
  float raw = analogRead(SensorPIN);
  float V =  raw / 1024 * Vcc;
  float R = (Rc * V ) / (Vcc - V);
  float logR  = log(R);
  float R_th = 1.0 / (A + B * logR + C * logR * logR * logR );
  float kelvin = R_th - V*V/(K * R)*1000;
  float celsius = kelvin - 273.15;
  delay(2000);
  // Imprimir la temperatura...
}

Para sacar en el display la temperatura he utilizado la librería Adafruit_SSD1306 que depende de Adafruit_GFX y permite hacer bastantes cosas… Eso sí, dado que mi arduino era lento (estoy usando el de 3.3v) he tenido que inicializar el display cambiando la velocidad del I2C a 400Mhz para que no se note demasiado lag (este display hay que limpiar la zona en la que escribes antes y eso quita ciclos).

Finalmente, una vez probado que funciona, mi intención es hacerlo portable, por lo que le he añadido una pila de 6v conectada a los pines «raw» y «gnd» (el pro micro tiene una entrada regulada en el pin raw) y le he montado una carcasa… Quedando de esta manera (si queréis más detalles me los pedís):

Probando cosillas con arduino beetle

Lo que veis en la foto es un arduino beeetle, bueno, realmente es una placa pro micro con menos pines de los que debería y un conector directo a usb… Como véis es muy pequeño y podéis encontrarlo por un precio bastante económico, aquí, por ejemplo.

Yo ya había utilizado antes el arduino pro micro (leonardo compatible) para simular un teclado en otro proyecto, por lo que sabía que podría utilizar este también para algo similar. Dado su tamaño y lo fácil que se camufla como un «pincho» usb podría pasar desapercibido a la vista… Así que me decidí a ir un pasito más y añadirle un poco más de hardware para controlarlo. Qué mejor que ponerle un botón para indicarle cuando quiero que «teclee algo»… Para ello me aprovecho de que los pines digitales pueden actuar como pull-up y solo tenía que conectar el interruptor entre un pin digital y tierra. En mi caso lo conecté entre el D9 y GND como se puede ver en la foto:

Hice las soldaduras por detrás para proteger un poco más los componentes, pero podría ponerse por delante teniendo un poco más de cuidado.

Una vez el hardware preparado llega el momento de hacer las cosas interesantes… Tampoco es que vaya a ser muy original, pero aquí os dejo el programa que cargué inicialmente…. Funciona en windows y lo que consigues cuando pulsas el botón es que se te abra el chrome con la página web nomorepass.com… (igual sirve como propaganda y todo).

#include "Keyboard.h"
const int buttonPin = 9;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  Keyboard.begin();
}

void loop() {
  while (digitalRead(buttonPin) == HIGH) {
    delay(200);
  }
  delay(100);
  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press('r');
  Keyboard.releaseAll();
  delay(500);
  Keyboard.print("chrome https>&&nomorepass.com");
  Keyboard.write(KEY_RETURN);
  delay(500);
}

Básicamente lo único que hace es esperar a que el estado del pin al que está conectado el botón pase de alto a bajo (esto es así por la configuración INPUT_PULLUP) y cuando cambia, señal de que hemos pulsado el botón, lo que hace es enviar un COMMAND+r que abre el diálogo de ejecutar de windows y luego envía el texto chrome https://nomorepass.com. Como se puede ver he tenido que transliterar los caracteres que en el teclado americano están colocados en otro sitio (un defectillo de la librería de arduino).

Visto que funciona… Pues ya solo queda hacer una cajita e imprimirla en 3d:

He dejado el diseño en thingiverse por lo que podéis aprovecharlo… Mientras, a inventarnos cosas que hacer con el trasto… «No demasiado diabólicas»..

Entrando al mundo 3D a lo barato…

Hace tiempo que sigo la tecnología de impresión 3D y siempre he deseado tener una de esas maquinas que permiten «hacer sólidos los sueños», se han oído tantas cosas de gente que se creaba cosas utilísimas con sus impresoras 3D que un gusanillo voraz anidó en mi mente y me repetía «quiero una», «quiero una»… Pero el precio era demasiado caro para mi (y más en las circunstancias actuales). Pero, mira tu por donde, visitando una página de ecommerce china (aliexpress) me encuentro que ofrecen un kit para montarte una impresora 3D por menos de 300 Euros. ¿Será verdad?

Dicho y hecho, me envalentono y decido hacer el pedido, total, siempre he querido poder hacer prototipos para los aparatos que me invento… Y esta podría ser la oportunidad para ello. Hago el pedido un día 2 de Agosto y espero pacientemente… Dos semanas después una llamada desde la aduana me indica que ya está aquí el paquete y que ¡tengo que pagar 70 Euros de aranceles e impuestos!.. Umm, aún así queda mejor de precio que otros kits que venden aquí… Pago y recibo esto:

IMG_20150813_180211No parece demasiado, así que después de comer me voy a la oficina (es allí donde hice mandar el paquete) y me dispongo a hacer el montaje… Previamente me había informado en un par de vídeos de youtube (este y este) que me sirvieron bastante para hacerme una idea del montaje. Así que me pongo a desembalar y me encuentro esto:

IMG_20150813_183234Amén de la fuente de alimentación, la placa de control y el marco principal que no salen en la foto… Uff! me espera una larga tarde de trabajo.

Siete horas después (a eso de la una de la noche) ya he conseguido montarla completamente. La verdad es que es mucho más instructivo el vídeo que incluye el fabricante que los vídeos de youtube, salvo en la parte de conectar los cables que viene escondida en un archivo adicional (que encontré después de haber terminado el montaje). El caso es que queda así:

IMG_20150814_005029¡Vaya! parece que está cogida con pinzas… Pero bueno, lo importante es que funcione. Esa misma noche me atrevo a enchufarla y a probar a mover los ejes… ¡Y funciona! Vale ya tenemos impresora… ¿y ahora qué? Bueno, he perdido (si, perdido) como un mes intentando hacerla funcionar correctamente… En próximos post lo iré contando con más calma… Por ahora a disfrutar de la imagen de siete horas de trabajo.

Por cierto, el modelo exacto es una «Sunhokey Prusa i3 – modelo 2015» (os dejo el enlace a donde la compré yo).