Calentador con controlador de temperatura para fundidores de cera solares
El fundidor de cera solar es el dispositivo más importante para una buena higiene del panal en verano. ¿Pero qué puedo hacer si los días soleados son escasos y hay demasiados panales viejos para derretir? Aquí te mostraré una solución sencilla si la potencia del fundidor de cera solar no es suficiente para derretir los viejos panales antes de que sean comidos por las polillas de la cera.

Materialliste
Descripción
Para mí, un fundidor de cera solar es la mejor manera de derretir panales viejos inmediatamente en el verano. Como durante esta época las abejas suelen buscar alimento, resulta difícil trabajar con un fundidor de cera a vapor o un extractor de cera a vapor. Además, estos dispositivos suelen ser útiles sólo si se utilizan grandes cantidades de panales viejos. El esfuerzo que supone limpiar el equipo es demasiado grande para fundir sólo unos pocos panales, y almacenar los panales durante un periodo de tiempo más largo hasta que se recoja una cantidad mayor no es posible debido a las polillas de la cera.
Para instalar el calentador, utilicé mi fundidor de cera solar, que lamentablemente sólo generó suficiente calor en días de verano extremadamente calurosos. El fundidor de cera solar tiene espacio para 10 panales y, a pesar de su tamaño, se puede utilizar de forma móvil gracias a su montaje sobre una carretilla. La única desventaja de este modelo es que la temperatura exterior debe ser muy alta para que los viejos panales se derritan bien y la cera fluya completamente hacia la tina.
Se me ocurrió entonces que un calentamiento adicional podría solucionar este problema y rápidamente pensé en cómo podría implementar una regulación simple de la temperatura. Como ya había adquirido mucha experiencia con las placas de microcontroladores de Particle desde la escala de colmena, inmediatamente hice una configuración de prueba y escribí el programa apropiado.
El elemento calefactor requiere 220 V, por eso también utilicé el relé de potencia FeatherWing de Adafruit y el triplicador Particle FeatherWing para facilitar el cableado. El DHT22 me ha resultado muy útil a menudo como sensor de temperatura y también existe una biblioteca de programas adecuada para él.
El principio del circuito y el programa son muy simples. El sensor de temperatura mide la temperatura: si es inferior a 60 °C, el elemento calefactor se enciende a través del relé de potencia. En el momento en que la temperatura supera este valor, el elemento calefactor se apaga de nuevo. Dado que el control de la temperatura no necesita ser muy preciso, es suficiente que la temperatura se vuelva a determinar cada minuto. Para poder visualizar la temperatura y la humedad en el horno de cera solar, estos valores se transmiten a la consola de partículas.
Fritzing - diagrama del circuito
Fritzing - placa enchufable:
Instalación y programación
Para regular la temperatura del fundidor de cera solar, uso una placa de microcontrolador Wi-Fi de Particle con el diseño FeatherWing. En realidad no importa si se utiliza una partícula de Argon o un Photon 2. En principio también se podría utilizar un Boron con conexión de red 2G/3G. Para poder utilizar una de estas placas, primero se debe completar el proceso de configuración. Se carga la última versión del firmware en la placa y se establece una conexión de red. Además, el tablero debe asignarse a un producto o debe crearse un nuevo producto. Al finalizar la configuración, el dispositivo aparece en la consola de partículas. Aquí puede comprobar el estado de la red del dispositivo y también el estado de las variables que primero deben definirse en el código del programa.
Hay dos formas de escribir, compilar y transferir el código del programa al dispositivo Particle. Podemos crear el programa directamente en el IDE web de Particle o instalar Particle Workbench en Visual Studio Code. Usar el Web IDE es ciertamente la forma más fácil y rápida de crear un programa y transferirlo a un dispositivo Particle. Para este ejemplo de programación simple, recomendaría el Web IDE.
El código del programa se puede dividir en tres áreas. La primera parte incluye la inclusión de bibliotecas de programas y la definición de variables. Luego viene el código de configuración. Esto solo se ejecuta una vez y en este caso incluye el registro de las variables que se pueden llamar en el futuro en la Consola de partículas.
La tercera parte del programa consiste en una función de bucle que se ejecuta una y otra vez. Aquí primero se establece una conexión WiFi para luego conectar el dispositivo a la nube. Luego se determinan la temperatura y la humedad del sensor DHT22 y se transmiten a la nube de partículas. La última sección es una declaración If simple que enciende el elemento calefactor cuando la temperatura es inferior a 60 °C y lo apaga cuando el valor sube por encima de este.
Creo que el programa todavía tiene mucho margen de mejora, pero debería ser suficiente para demostrar el principio básico del control de la temperatura.
/*
* Project HeatController
* Author: Dieter Metzler
* Date: 03.05.2024
* For comprehensive documentation and examples, please visit:
* https://docs.particle.io/firmware/best-practices/firmware-template/
*/
// Include Particle Device OS APIs
#include "Particle.h"
#include "PietteTech_DHT.h"
#define DHTTYPE DHT22 // Sensor type DHT11/21/22/AM2301/AM2302
#define DHTPIN A0 // Digital pin for communications
// Let Device OS manage the connection to the Particle Cloud
SYSTEM_MODE(SEMI_AUTOMATIC);
//********************************************************************
// Automatically mirror the onboard RGB LED to an external RGB LED
// No additional code needed in setup() or loop()
//Since 0.6.1 Allows a set of PWM pins to mirror the functionality of the on-board RGB LED.
STARTUP(RGB.mirrorTo(D4, D5, D6));
// Show system, cloud connectivity, and application logs over USB
// View logs with CLI using 'particle serial monitor --follow'
SerialLogHandler logHandler;
// We define MY_LED to be the LED that we want to blink.
//
// In this tutorial, we're using the blue D7 LED (next to D7 on the Photon
// and Electron, and next to the USB connector on the Argon and Boron).
const pin_t Heater = D7;
// The following line is optional, but recommended in most firmware.
// allows your code to run before the cloud is connected. In this case,
// it will begin blinking almost immediately instead of waiting until
// breathing cyan,
SYSTEM_THREAD(ENABLED);
// Lib instantiate
PietteTech_DHT DHT(DHTPIN, DHTTYPE);
double tempC = 0;
double hum = 0;
double vol = 0;
float temperature;
float humidity;
float voltage;
// The setup() method is called once when the device boots.
void setup() {
Serial.begin(9600);
Particle.variable("temp", tempC);
Particle.variable("hum", hum);
Particle.variable("vol", vol);
DHT.begin();
// In order to set a pin, you must tell Device OS that the pin is
// an OUTPUT pin. This is often done from setup() since you only need
// to do it once.
pinMode(Heater, OUTPUT);
}
// The loop() method is called frequently.
void loop() {
//WiFi.off(); //Turning off the WiFi module will force it to go through a full re-connect to the WiFi network the next time it is turned on.
delay(500);
WiFi.on(); //Turns on the WiFi module. Useful when you've turned it off, and you changed your mind.
Serial.println("WiFi on...");
delay(500);
WiFi.connect(); // This command turns on the WiFi Modem and tells it to connect to the WiFi network.
Particle.connect(); //Connects the device to the Cloud. This will automatically activate the cellular connection and attempt to connect to the Particle cloud if the device is not already connected to the cloud.
Serial.print(": Retrieving information from sensor: ");
Serial.print("Read sensor: ");
int result = DHT.acquireAndWait(1000); // wait up to 1 sec (default indefinitely)
switch (result) {
case DHTLIB_OK:
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Error\n\r\tChecksum error");
break;
case DHTLIB_ERROR_ISR_TIMEOUT:
Serial.println("Error\n\r\tISR time out error");
break;
case DHTLIB_ERROR_RESPONSE_TIMEOUT:
Serial.println("Error\n\r\tResponse time out error");
break;
case DHTLIB_ERROR_DATA_TIMEOUT:
Serial.println("Error\n\r\tData time out error");
break;
case DHTLIB_ERROR_ACQUIRING:
Serial.println("Error\n\r\tAcquiring");
break;
case DHTLIB_ERROR_DELTA:
Serial.println("Error\n\r\tDelta time to small");
break;
case DHTLIB_ERROR_NOTSTARTED:
Serial.println("Error\n\r\tNot started");
break;
default:
Serial.println("Unknown error");
break;
}
Serial.print("Humidity (%): ");
Serial.println(DHT.getHumidity(), 2);
humidity = DHT.getHumidity();
hum = humidity;
Serial.println("Humidity: " + String(humidity));
Serial.print("Temperature (oC): ");
Serial.println(DHT.getCelsius(), 2);
temperature = DHT.getCelsius();
tempC = temperature;
Serial.println("Temperature: " + String(temperature));
voltage = analogRead(BATT) * 0.0011224;
vol = voltage;
Serial.println("Voltage: " + String(voltage));
if (temperature <= 60) {
// Turn on the LED
digitalWrite(Heater, HIGH);
} else {
// Turn it off
digitalWrite(Heater, LOW);
}
delay(60000);
}