MINT-Bioreaktor Wettbewerb
Leitfaden Wettbewerb
Der Leitfaden gibt euch einen ausführlichen Überblick über die Rahmenbedingungen und Anforderungen zum Wettbewerb und kann hier heruntergeladen werden: Leitfaden-Wettbewerb.pdf
Eine grobe Zusammenfassung bietet auch ein Poster: MINT-Bioreaktor Wettbewerb
Projektskizze
Die Projektskizze dient als Grundlage für die Planung eures Forschungsvorhabens und entscheidet darüber, ob ihr in die nächste Wettbewerbsrunde kommt.
Sie muss bis zum 12.11.2024 per Mail an zentral-freilandmobil@rptu.de eingereicht werden.
Tipp: sowohl der Artikel “Mikrocontroller als Low Cost Technologie” als auch das Beispielposter 2 “Entwicklung eines Low-Cost Photobioreaktors für den MINT-Unterricht” geben Ideen für potenzielle Weiterentwicklungen, die im Rahmen des Wettbewerbs umgesetzt werden können.
Literatur
Die bereitgestellte Literatur soll euch eine Orientierung als mögliche fachliche Grundlage bieten und kann den Ausgangspunkt euer eigenen Literaturrecherche darstellen.
Photobioreaktoren
- Mikrocontroller als Low Cost Technologie – Artikel zum MINT-Bioreaktor
- A mini review: photobioreactors for large scale algal cultivation – Überblick über verschiedene Reaktortypen
Mikroalgen
- Nachhaltigkeit in der Bioverfahrenstechnik – Einsatz von Mikroalgen
- Grüne Zellfabriken – Mikroalgen für die nachhaltige Bioproduktion – Einsatz von Mikroalgen
- Mikroalgen: Produktionsorganismen der Zukunft? – Einsatz von Mikroalgen
- Colorful Diversity-Modified Methods for Extraction and Quantification of Photopigments and Phycobiliproteins Isolated from Phototrophic Micro- and Macroalgae – Experimente zur Integration in den Unterricht.
Forschungsbeispiele
- Utilizing Total Dissolved Solids (TDS) Sensor for Dissolved Solids Measurement in the water – Forschung mit einem TDS-Sensor
- Aufbau, Inbetriebnahme und Kultivierungsversuche von Mikroalgen in einem Forschungsphotobioreaktor – Masterarbeit zur Kultivierung von Mikroalgen
- Charakterisierung eines neuartigen tubulären Photobioreaktors – Dissertation zu idealen Wachstumsbedingungen
- Kultivierung von Mikroalgen im Photobioreaktor zur stofflichen und energetischen Nutzung – Forschung zur Optimierung einiger Wachstumsparameter
MINT-Bioreaktor
In den folgenden interaktiven Erklärvideos wird eine Einführung in die Funktionsweise des MINT-Bioreaktors gegeben sowie der Bau in einer Schritt-für-Schritt-Anleitung dargestellt.
Nach erfolgreicher Installation des MINT-Bioreaktors werden alle Messdaten per WLAN auf folgender Plattform dargestellt: https://photobioreaktor.org
Einführung
Bau
Der Zusammenbau wird zunächst als Zeitraffer dargestellt und danach in acht interaktive Videos aufgeteilt.
Eine zusätzlich bebilderte Anleitung kann hier heruntergeladen werden: Anleitung.pdf
Alle käuflichen Bauteile sind in folgender Liste hinterlegt: Material.xlsx
Alle 3D gedruckten Teile können mit folgenden Dateien selbst gedruckt werden: 3D Druck.zip
Zeitraffer
Schritt 01 – 07
Schritt 08 – 14
Schritt 15 – 17
Schritt 18 – 23
Schritt 24 – 31
Schritt 32- 37
Schritt 38 – 44
Schritt 45 – 51
Installation
Die Installation der Software für den MINT-Reaktor erfolgt über den Microcontroller ESP32. Die Programmierung basiert auf der Programmiersprache für den Arduino Microcontroller.
Die Arduino-Webseite bietet dafür ein Glossar wo alle Funktionen, Variablen und Strukturbefehle, die ein Arduino-Programm enthalten kann, ausführlich erklärt werden.
Das Benutzerhandbuch des Photobioreaktors kann hier heruntergeladen werden: Benutzerhandbuch.pdf
Die Dokumentation des Quellcodes ist eingebettet, kann jedoch auch als HTML hier heruntergeladen werden: Code.html
Zusätzlich werden zwei Konfigurationsdateien benötigt, die hier heruntergeladen werden können: Config.h und MINT-Bioreaktor.ino
Die Dokumentation enthält auf der linken Seite den vollständigen Quellcode und rechts eine zugehörige Beschreibung des jeweiligen Code-Abschnittes. Einige der Beschreibungen lassen sich durch Anklicken aufklappen, um noch detailliertere Informationen zu erhalten.
Um den Quellcode auf den Microcontroller zu installieren, wird das Programm ArduinoIDE benötigt, das hier heruntergeladen werden kann: ArduinoIDE
#include <Arduino.h>
|
||
#include <ArduinoJson.h>
#include <ArduinoJson.hpp>
|
||
#include <Wire.h>
|
||
#include <WiFiManager.h>
WiFiManager wfm;
|
||
#include <WiFi.h>
|
||
#include <InfluxDbClient.h>
|
||
#include <InfluxDbCloud.h>
|
||
#include <HTTPClient.h>
HTTPClient http;
|
||
#include <Preferences.h>
Preferences pref
|
||
#include <ezTime.h>
Timezone myTZ
|
||
//Photobioreactor Library
|
||
#include <Photobioreactor.h>
Photobioreactor pb
|
||
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define SERIAL SerialUSB
#else
#define SERIAL Serial
#endif
|
||
//TEMP
|
||
#include <OneWire.h>
#include <DallasTemperature.h>
|
||
//Define InfluxDB |
||
#include "Config.h" //You can change your InfluxDB Instance here
|
||
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert);
Point sensor("SampleData");
|
||
//TDS |
||
const int tdsSensorPin = 35;
const int VREF = 3.3; // analog reference voltage(Volt) of the ADC
int analogBuffer[0]; // store the analog value in the array, read from ADC
|
||
//Relay
const int heatPin = 14;
const int stirrerPin = 13;
const int lightPin = 12;
|
||
//Water Level I2C
const int I2C_SDA_PIN = 27;
const int I2C_SCL_PIN = 25;
int lowData[8] = {0};
int highData[12] = {0};
const byte NO_TOUCH = 0xFE;
const int THRESHOLD = 100;
const int ATTINY1_HIGH_ADDR = 0x78;
const int ATTINY2_LOW_ADDR = 0x77;
const int statusLED = 33;
int reconnectAttempt = 0;
|
||
//TEMP
#define ONE_WIRE_BUS 32
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
|
||
//Trigger for Reset
const int RESET_TRIGGER = 26;
int buttonState = 0;
int lastButtonState = 0;
int startPressed = 0;
int endPressed = 0;
int holdTime = 0;
int idleTime = 0;
|
||
//Time Intervall for Data Transfer
bool dataSent = false;
int previousMinute = -1;
|
||
//HalfHourly Time Sync
unsigned long previousMillisSync = 0;
unsigned long previousMillisPrint = 0;
const unsigned long intervalSync = 1800000;
const unsigned long intervalPrint = 60000;
|
||
// Box für Zieltemperatur
WiFiManagerParameter(“MaxTemp_Text”, “Maximale Temperatur”, “32”, 2);
// Box für Minimaltemperatur
WiFiManagerParameter(“MinTemp_Text”, “Minimale Temperatur”, “25”, 2);
// Box für Abstand zwischen Rühren
WiFiManagerParameter(“IntervalStirrer_Text”, “Zeit zwischen den Rührvorgängen in Minuten”, “30”, 4);
// Box für Rührdauer>
WiFiManagerParameter(“DurationStirrer_Text”, “Dauer eines Rührvorgangs in Minuten”, “1”, 4);
// Box für Licht an
WiFiManagerParameter(“LightOn_Text”, “Uhrzeit (0-23) zum anschalten des Lichts”, “8”, 2);
// Box für Licht aus
WiFiManagerParameter(“LightOff_Text”, “Uhrzeit (0-23) zum abschalten des Lichts”, “20”, 2);
|
||
void.setup() {
|
||
Serial.begin(115200);
|
||
pref.begin(“Prefs”,false);
|
||
if (pref.getBool(“namebool”) == false)
{ int reactorNumber = (int)random(100000, 999999); String reactorNameGenerated = String("ESP32_" + String(reactorNumber)); pref.putString("reactorNameUser", reactorNameGenerated); pref.putBool("namebool",true); Serial.println("Reaktorname: "); Serial.println(reactorNameGenerated); } |
||
WiFiManagerParameter Token_Text_Box("Token_Text", "Name des Reaktors", pref.getString("reactorNameUser").c_str(), 20);
|
||
Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN);
|
||
pinMode(heatPin, OUTPUT);
pinMode(stirrerPin, OUTPUT);
pinMode(lightPin, OUTPUT);
pinMode(RESET_TRIGGER, INPUT_PULLUP);
pinMode(2, OUTPUT);
pinMode(statusLED, OUTPUT);
pinMode(tdsSensorPin, OUTPUT);
|
||
//initialise TEMPsensor
sensors.begin();
|
||
wfm.addParameter(&Token_Text_Box);
wfm.addParameter(&MaxTemp_Text_Box);
wfm.addParameter(&MinTemp_Text_Box);
wfm.addParameter(&IntervalStirrer_Text_Box);
wfm.addParameter(&DurationStirrer_Text_Box);
wfm.addParameter(&LightOn_Text_Box);
wfm.addParameter(&LightOff_Text_Box);
|
||
if (digitalRead(RESET_TRIGGER) == LOW)
{ Serial.println("HARDRESET");
pref.putBool("setupbool", false); pref.putBool("namebool", false); pref.clear(); wfm.resetSettings(); pb.blinkLEDs(1, 500); ESP.deepSleep(10000000*10000000); //Sleep until Reset } |
||
//Try to connect with Wifi network
wfm.setWiFiAutoReconnect(true);
wfm.setConnectRetries(10);
wfm.setConfigPortalTimeout(300);
|
||
bool res = wfm.autoConnect(pref.getString("reactorNameUser").c_str());
|
||
if (!res)
{
waitForSync();
myTZ.setLocation("Europe/Berlin");
|
||
if (pref.getBool("resetbool") == false)
{
pref.putString("MinTemp",MinTemp_Text_Box.getValue());
pref.putString("MaxTemp", MaxTemp_Text_Box.getValue());
pref.putString("IntervalStirrer", IntervalStirrer_Text_Box.getValue());
pref.putString("DurationStirrer", DurationStirrer_Text_Box.getValue());
pref.putString("LightOn", LightOn_Text_Box.getValue());
pref.putString("LightOff", LightOff_Text_Box.getValue());
pref.putBool("resetbool", true);
}
|
||
if (pref.getBool("setupbool") == false)
{
pref.putString("reactorNameUser", Token_Text_Box.getValue());
pref.putBool("setupbool", true);
pb.blinkLEDs(10, 20);
}
}
|
||
String reactorNameUser = pref.getString("reactorNameUser");
const char* Reaktorname = reactorNameUser.c_str();
Serial.print("Your Reactor is called: ");
Serial.println(Reaktorname);
sensor.addTag("Reaktorname", Reaktorname);
|
||
//Write one initial Point for initial User Feedback
pb.addSensorData();
pb.writeSensorData();
}
|
||
void.loop() {
|
||
if (Wifi.status() == WL_CONNECTED)
{ Serial.println("Connected with Wifi!");
pb.setStatusLEDsHigh();
pb.checkResetButton(); // Check Button State and initialize Reset
pb.halfHourlySyncDeviceTime(); // Update Current Time
pb.printValues();
|
||
// Control the Parameters
pb.controlWaterTemp();
pb.controlStirring();
pb.controlLight();
|
||
//Write Points
int currentHour = myTZ.hour();
int currentMinute = myTZ.minute();
if(currentMinute != previousMinute){
dataSent = false;
previousMinute = currentMinute;
}
delay(10);
|
||
if(((currentHour == 0 && currentMinute == 0) ||
(currentHour == 6 && currentMinute == 0) ||
(currentHour == 14 && currentMinute == 15) ||
(currentHour == 18 && currentMinute == 0)) &&
(!dataSent))
{
pb.addSensorData();
pb.writeSensorData();
// Set flag to true to indicate that the data has been sent
dataSent = true;
previousMinute = myTZ.minute();
delay(10);
}
}
else
{
|
||
pb.setStatusLEDsLow();
wfm.disconnect();
if(wfm.getWiFiIsSaved()) wfm.setEnableConfigPortal(false);
wfm.autoConnect("AP");
wfm.autoConnect(pref.getString("reactorNameUser").c_str());
Serial.println("No WiFi");
}
Serial.print(".");
delay(100);
}
|
||
Poster
Für die Gestaltung des wissenschaftlichen Posters stehen drei verschiedene Vorlagen in jeweils vier unterschiedlichen Farbkombinationen bereit. Zudem bietet der Leitfaden zur Gestaltung von wissenschaftlichen Postern weitere Orientierung.
Leitfaden_RPTU-Forschungsposter
Forschungsposter_klassisch.pptx
Forschungsposter_modern_quer.pptx
Forschungsposter_innovativ.pptx
Zur Orientierung können hier zwei Beispielposter heruntergeladen werden: