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):