SPIRA: DIY

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

MATERIALS

Tabella Reattiva
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

  1. Remove the cap of the bag from the side with the help of a screwdriver
  2. Drain the liquid inside and close the bag.
  3. Cut a hole of about 1 cm at the top of the IV bag.
  4. Insert the tube with the diffuser inside the bag.
  5. Pour the nutrients inside using a syringe or funnel.
  6. Pour in the microalgae.

DIY - ADVANCED

MATERIALS
Tabella Reattiva
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

  1. Carry out the first 4 steps of the BASIC version.
  2. Make the electrical connections according to the diagram.
  3. Open the Arduino IDE app on your PC and open a new Sketch on which to paste the code shared on the SPIRA website.
  4. Connect the Arduino to your PC and upload the code via the Arduino IoT platform.
  5. The .STL file for 3D printing the case to house the electronic components is also provided.
APPENDIX - WIRING

APPENDIX - CODING
Visualizzazione Codice Arduino
#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");
}




SPIRA is protected by CC BY-NC 4.0.