Pimp up my Sonnenwachsschmelzer
Pimp up my Sonnenwachsschmelzer
Pimp up my Sonnenwachsschmelzer
Der Sonnenwachsschmelzer ist im Sommer das wichtigste Geräte für eine gute Wabenhygiene. Aber was kann ich machen wenn die Sonnentage selten sind und zu viele alte Waben zum Einschmelzen anfallen? Hier zeige ich euch eine einfache Lösung wenn die Leistung des Sonnenwachsschmelzers nicht ausreicht, um die alten Waben einzuschmelzen bevor sie von Wachsmotten zerfressen werden.
Materialliste
Beschreibung
Ein Sonnenwachsschmelzer ist im Sommer für mich die beste Möglichkeit, alte Waben sofort einzuschmelzen. Da in dieser Zeit die Bienen oft nach Futter suchen ist es schwierig, mit einem Dampfwachsschmelzer oder einer Dampfwachsschleuder zu arbeiten. Zudem lohnt sich bei diesen Geräten der Einsatz oft erst bei grossen Mengen an alten Waben. Der Aufwand die Geräte zu putzen ist zu gross, um nur ein paar Waben einzuschmelzen und ein längeres Aufbewahren der Waben, bis eine grössere Menge zusammen kommt, ist wegen der Wachsmotten nicht möglich.
Für den Einbau der Heitzung nahm ich meinen Sonnenwachsschmelzer, der leider nur bei absolut heissen Sommertagen genügend Wärme entwickelte. Der Sonnenwachsschmelzer bietet Platz für 10 Waben und ist aufgrund der Montage auf einem Sackkarren trotz seiner Grösse mobil einsetzbar. Der einzige Nachteil dieses Modells ist, dass die Aussentemperatur sehr hoch sein muss, damit die alten Waben gut schmelzen und das Bienenwachs vollständig in die Wanne fliesst.
Deshalb kam mir die Idee, dass eine zusätzliche Heitzung dieses Problem lösen könnte und ich überlegte mir schnell wie ich eine einfache Temperaturregulierung realisieren kann. Da ich schon mit den Bienenstockwaagen viel Erfahrung mit den Mikrokontrollerboards von Particle gesammelt hatte, machte ich damit gleich einen Probeaufbau und schrieb das passende Programm dazu.
Das Heitzelement benötigt 220V, weshalb ich noch zusätzlich das FeatherWing Power Relay von Adafruit und den Particle FeatherWing Tripler für ein einfaches verschalten verwendet habe. Als Temperatursensor hat mir der DHT22 schon oft gute Dienste geleistet und es gibt auch die passende Programmbibliothek dazu.
Das Prinzip der Schaltung und des Programmes sind denkbar einfach. Der Temperatursensor misst die Temperatur - liegt diese unter 60 °C wird das Heizelement über das Power Relay eingeschaltet. Sobald die Temperatur über diesen Wert steigt wird das Heizelement wieder ausgeschaltet. Da die Temperaturregelung nicht sehr genau sein muss ist es völlig ausreichend wenn jede Minute die Temperatur neu ermittelt wird. Damit ersichtlich wird welche Temperatur und Luftfeuchtigkeit im Sonnenwachsschmelzer vorliegen werden diese Werte an die Particle Console übermittelt.
Aufbau und Hardware
Fritzing - Schaltplan
Fritzing - Steckplatine:
Installation und Programmierung
Für die Temperaturregulierung des Sonnenwachsschmelzer verwende ich ein WLAN - Mikrokontrollerboard von Particle mit der FeatherWing Bauform. Dabei ist es eigentlich egal ob ein Particle Argon oder das Photon 2 verwendet wird. Im Prinzip könnte auch ein Boron mit 2G/3G Netzwerkverbindung verwendet werden. Um eines dieser Boards verwenden zu können muss zuerst der Setup-Prozess durchgeführt werden. Dabei wird die neueste Firmwareversion auf das Board geladen und eine Netzwerkverbindung hergestellt. Weiters muss ein das Board einem Produkt zugeordnet werden oder ein neues Produkt erstellt werden. Am Ende des Setup erscheint das Gerät in der Particle Konsole. Hier kann der Netzwerkstatus des Gerätes überprüft werden und auch der Zustand von Variablen die aber zunächst im Programmcode festgelegt werden müssen.
Um des Programmcode zu schreiben, zu kompilieren und auf das Particle Gerät zu übertragen gibt es zwei Möglichkeiten. Wir können das Programm entweder direkt in der Web IDE von Particle erstellen oder wir installieren die Particle Workbench in Visual Studio Code. Die Verwendung der Web IDE ist sicherlich der einfachste und schnellste Weg, um ein Programm zu erstellen und auf ein Particle Gerät zu übertragen. Für dieses einfache Programmbeispiel würde ich daher die Web IDE empfehlen.
Der Programmcode kann in drei Bereiche aufgeteilt werden. Der erste Teil beinhaltet die Einbeziehung von Programmbibliotheken und der Definition von Variablen. Dann folgt der Setup-Code. Dieser wird nur einmalig durchlaufen und beinhaltet in diesem Fall die Registrierung der Variablen die in Zukunft in der Particle Konsole abgerufen werden können.
Der dritte Bereich des Programms besteht aus einer Loop-Funktion die immer wieder durchlaufen wird. Hier wird zunächst eine WLAN-Verbindung aufgebaut, um dann das Gerät mit der Cloud zu verbinden. Anschliessend werden die Temperatur und die Luftfeuchtigkeit des DHT22-Sensors ermittelt und an die Particle Cloud übertragen. Der letzte Abschnitt ist eine einfache If - Anweisung die bei einer Temperatur unter 60 °C das Heizelement einschaltet und dieses ausschaltet sobald der Wert darüber steigt.
Ich denke das Programm bietet noch viel Verbesserungspotential, sollte aber zur Demonstration des Grundprinzipes einer Temperaturregelung ausreichend sein.
/*
* 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);
}