SPIRA: DIY
![](https://freight.cargo.site/t/original/i/7bd7f99ce6d0e436949392502bf601237b1d9a863997b098a88cf59fdcd7abed/DSC_9768.2.jpg)
![](https://freight.cargo.site/t/original/i/0c115e5cf4aa351be9ae41e5c423383541de02343b18eb21f81d2b97294bbb2e/DSC_9771.jpg)
![](https://freight.cargo.site/t/original/i/8bbe4d00e97771ce754224a774ca2bef18125f3580669f2a4eefe00323c23187/DSC_9772.jpg)
Detailed instructions are provided for making a simple microalgae photobioreactor yourself, adaptable to varying degrees of expertise. This reflects the independent design philosophy inherent in the field, making the practice truly accessible to anyone.
DIY - BASIC
![](https://freight.cargo.site/t/original/i/81968882d81b9209e4bc00d146fafb30d7f120e25f880f32ba59ac87e14a4313/DSC_9738-min.jpg)
![](https://freight.cargo.site/t/original/i/336a9b653912e8c9b958c972c2f1761eb612f49e4badb2c8853d1a4eddf008f4/DSC_9736-min.jpg)
![](https://freight.cargo.site/t/original/i/eb949d414b861332489fca050b1667351cf6c6aff00c8cfa5a3061f3336cde55/DSC_0073-min.jpg)
MATERIALS
MATERIALS | QUANTITY | PRICE |
---|---|---|
MICROALGAE & NUTRIENTS | 2000 mL | ~€20 |
IV BAG (1L) | 1 | €6 |
USB AQUARIUM PUMP | 1 | €15 |
5µm FILTER | 1 | €12 |
TOT: | €53 |
INSTRUCTIONS
- Remove the cap of the bag from the side with the help of a screwdriver
- Drain the liquid inside and close the bag.
- Cut a hole of about 1 cm at the top of the IV bag.
- Insert the tube with the diffuser inside the bag.
- Pour the nutrients inside using a syringe or funnel.
- Pour in the microalgae.
DIY - ADVANCED
![](https://freight.cargo.site/t/original/i/7855da6a5da467a1ad85ee698fafcc6710d5e36f20197d03ed4307edcf03ece2/IOT_TK.jpg)
MATERIALS
MATERIALS | QUANTITY | PRICE |
---|---|---|
MICROALGAE & NUTRIENTS | 200 mL | ~€20 |
IV BAGS | 1-5 | €6 |
6V PUMP | 1 | €2 |
AIRSTONES | 1-5 | €2 |
TUBES & VALVES | 4m | €5 |
ARDUINO NANO RP2040 | 1 | €33 |
BREADBOARD + JUMPER | 1 | €8 |
CO2 SENSOR | 1 | ~€20 |
TEMPERATURE SENSOR | 1 | €2 |
5µm FILTER | 1 | €12 |
TOT: | €110 |
INSTRUCTIONS
- Carry out the first 4 steps of the BASIC version.
- Make the electrical connections according to the diagram.
- Open the Arduino IDE app on your PC and open a new Sketch on which to paste the code shared on the SPIRA website.
- Connect the Arduino to your PC and upload the code via the Arduino IoT platform.
- The .STL file for 3D printing the case to house the electronic components is also provided.
APPENDIX - WIRING
APPENDIX - CODING
#include <WiFiNINA.h>
char ssid[] = SECRET_SSID; // Insert your WiFi
namechar pass[] = SECRET_OPTIONAL_PASS; // Insert your WiFi password
// DHT sensor library - Version: 1.4.4
#include <DHT.h>
#include <DHT_U.h>
// Mhz19 - Version: Latest
#include <Mhz19.h>
#include "thingProperties.h"
#define DHTPIN A3 // DHT11 pin
#define DHTTYPE DHT11 // type of DHT11
DHT dht(DHTPIN, DHTTYPE);
Mhz19 sensor1;
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial);
// WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
if (WiFi.begin(ssid, pass) == WL_CONNECTED) { Serial.println("Connected to WiFi!"); printWiFiDetails();
} else {
Serial.println("Failed to connect to WiFi. Check your SSID and password."); }
// Init sensor CO2
sensor1.begin(&Serial1); sensor1.setMeasuringRange(Mhz19MeasuringRange::Ppm_5000);
// Init sensor DHT11
dht.begin();
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud ArduinoCloud.begin(ArduinoIoTPreferredConnection);
// Debug information
setDebugMessageLevel(2); ArduinoCloud.printDebugInfo();
// Preheat sensors
Serial.println("Preheating...");
delay(60000);
// wait 60s to preheat
Serial.println("Ready...");}
void loop() {
ArduinoCloud.update(); // read values every 5s
if (millis() % 5000 == 0) {
readSensors();
}
}
void readSensors() {
// Lettura CO2
int co2_value = sensor1.getCarbonDioxide();
if (co2_value >= 0) {
CO2 = co2_value; // update Variable on Arduino IoT
}
// read Temperature & Humidity
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if values are ok
if (!isnan(h) && !isnan(t)) {
Humidity = h;
Temperature = t;
}
}
void printWiFiDetails() {
// Print IP Address
Serial.print("IP Address: "); Serial.println(WiFi.localIP())
// Print RSSI Signal
Serial.print("Signal strength (RSSI): "); Serial.print(WiFi.RSSI());
Serial.println(" dBm");
}
char ssid[] = SECRET_SSID; // Insert your WiFi
namechar pass[] = SECRET_OPTIONAL_PASS; // Insert your WiFi password
// DHT sensor library - Version: 1.4.4
#include <DHT.h>
#include <DHT_U.h>
// Mhz19 - Version: Latest
#include <Mhz19.h>
#include "thingProperties.h"
#define DHTPIN A3 // DHT11 pin
#define DHTTYPE DHT11 // type of DHT11
DHT dht(DHTPIN, DHTTYPE);
Mhz19 sensor1;
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial);
// WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
if (WiFi.begin(ssid, pass) == WL_CONNECTED) { Serial.println("Connected to WiFi!"); printWiFiDetails();
} else {
Serial.println("Failed to connect to WiFi. Check your SSID and password."); }
// Init sensor CO2
sensor1.begin(&Serial1); sensor1.setMeasuringRange(Mhz19MeasuringRange::Ppm_5000);
// Init sensor DHT11
dht.begin();
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud ArduinoCloud.begin(ArduinoIoTPreferredConnection);
// Debug information
setDebugMessageLevel(2); ArduinoCloud.printDebugInfo();
// Preheat sensors
Serial.println("Preheating...");
delay(60000);
// wait 60s to preheat
Serial.println("Ready...");}
void loop() {
ArduinoCloud.update(); // read values every 5s
if (millis() % 5000 == 0) {
readSensors();
}
}
void readSensors() {
// Lettura CO2
int co2_value = sensor1.getCarbonDioxide();
if (co2_value >= 0) {
CO2 = co2_value; // update Variable on Arduino IoT
}
// read Temperature & Humidity
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if values are ok
if (!isnan(h) && !isnan(t)) {
Humidity = h;
Temperature = t;
}
}
void printWiFiDetails() {
// Print IP Address
Serial.print("IP Address: "); Serial.println(WiFi.localIP())
// Print RSSI Signal
Serial.print("Signal strength (RSSI): "); Serial.print(WiFi.RSSI());
Serial.println(" dBm");
}