Dyah Setyaningsih

From Medien Wiki

Respiring Reflections

This project is called "Respiring Reflections", a bubble machine which is connected to Pothos plants (Epipremnum aureum) in an enclosed environment to simulate respiring cycle of plants.

First Experiments and Plants Observations

In the beginning of our semester, we were given some seeds to be grown at home. I was growing Chia seeds (and also apple seeds that didn't really grow into anything) on a piece of cotton and inside a plastic bag. During our first experiments in growing seeds, we documented our plants' progress. I documented it in form of pictures and diary entries. Other than the Chia seeds, I also grew Pothos plants (Epipremnum aureum) from cuttings.

Chia seeds
Date Note
24.10.2024 Planted chia seeds on cotton.
25.10.2024 Start sprouting.
26.10.2024 Grow more at night, more sprouting (first green leaf buds can be seen). Some drops of water added.
27.10.2024 Second watering at noon. Leaf buds can be seen more clearly, getting taller.
28.10.2024 Sprouting, ca. 3cm. Leaning towards light source. Third watering.
29.10.2024 Leaves started opening. Leaning towards light source. Darker leaves?
30.10.2024 Leaves started opening.
31.10.2024 Leaves opening, grow taller.
01.11.2024 Stem getting weaker?
02.11.2024 Curly stem due to various light sources?
03.11.2024 Weaker stem, getting lower.
04.11.2024 Some start to die. Current concern: room too cold for plants? Too much water added?
09.11.2024 Almost all stems grow lower than previously. Fungi visible in cotton area. Dying?
10.11.2024 I think they are rotting... Brown color visible on the cotton, where the stems are.
11.11.2024 Declared rotten.
Pothos cuttings (Epipremnum aureum), Jade variation; Pearls & Jade variation

Jade variation: green-colored leaves; Pearls & Jade variation: green and white pattern leaves

Date Note
03.11.2024 2 media: water & Seramis medium
07.11.2024 Start rooting? Might need more time to observe.
09.11.2024 Roots seem longer (growing), 1 leaf turned yellow (Pearls & Jade variant). Seramis medium plants seem okay (leaves are still green), but roots are difficult to observe (burried by the Seramis medium). Don‘t want to move them around, afraid of disturbing any natural process of it.
13.11.2024 A root is forming at the cut place (Pearls & Jade in water). I become optimistic that they could survive the winter. Roots are growing longer for others. Seramis medium: Pearls & Jade one growing lower (leaf), Jade one is still green.
14.11.2024 Yellow leaf in 1 Pearls & Jade starts to rot... Maybe I should cut it. Others are doing okay, white roots start showing from lowest root buds. New root buds are emerging.

Yellow leaf cut.

15.11.2024 Roots grow longer.
18.11.2024 Yellow leaf cut becoming brown. Also becoming brown (closed): a stem extension without leaf, so only 1 stem with leaves grow further. More roots grown. In Seramis medium: look stable, stems seem strong. New root buds emerged in water medium. Stems seem going stronger. Grown roots got longer. I think they will survive winter. They seem to grow more while I was gone, but maybe it was just a trick of perception, since I would compare them with the last time I saw them.
19.11.2024 Today I tried out the CO2 sensor on my house plants in the Seramis medium. I was afraid that they would not last, because until today I haven‘t seen any root grows, yet the leaves are still green and the stems seem strong. With the CO2 sensor, I could observe that the CO2 values went up and down, so I would assume that they are breathing just fine:) maybe they need more time to grow roots in the Seramis medium. I feel glad that I could observe the CO2 value changes, which means there was gas exchange inside the closed environment. However, my question: are the plants really okay with that amount of CO2? What is the ideal amount for them to survive?
21.11.2024 The stem of Jade Pothos in the Seramis medium seems stronger and lifting up the leaf. I think they are okay. Haven‘t tried out the CO2 sensor on them again since last time, but the leaves are still as green. The grown roots of the Pothos in the water are growing longer. I think the Pearls & Jade Pothos are getting more upright and taller (water medium). The one in the Seramis medium looks a little bit down...
24.11.2024 Pearls & Jade Pothos in water medium is growing a new leaf. The Jade Pothos in the Seramis medium is growing taller. Pearls & Jade in Seramis medium is growing something I‘m not sure what that is. New stem maybe?
27.11.2024 I‘m sure they grow in their own time. Some are showing new root growth, although not really visible. But white roots are showing a little bit. Root buds are showing in the Seramis medium Pearls & Jade plant. After cutting some more from the existing cuttings, all look healthier than previously. Maybe it helps. The shorter the way to the leaf, the better for the plants?
02.12.2024 Jade plant in the Seramis medium is growing root. So glad that they are growing just fine. Other Pothos in the water medium are growing roots as well.
09.12.2024 Pearls & Jade Pothos in the Seramis looks dying... Trying to revive it in the water medium. Mushy stem/root bud cut, put into the water with the rest.

In the end, only 1 group of Pearls & Jade Pothos survived and grew a new leaf, that is the one which had 3 leaves in the beginning of cutting. The other ones I experimented with (by only growing 1 leaf or 2) were rotten. Lesson learned: always grow as a group, compared to Jade Pothos (they can be grown as single leaf). Propagating in water was faster to grow roots, but Jade Pothos also survived in Seramis medium. Younger leaves were faster in growing new leaves, maybe because of more growth hormones? For the Winterwerkschau, I only repotted the Jade variation into the custom clear casing.

Another observation is that, because I propagated them in 2 different media (water and Seramis medium), the roots that grew depend on the medium. The roots in water propagation grew smooth as one long root, whereas those in Seramis medium were branched and tend to grow deeper into the Seramis medium. The Pothos plants were also sensitive to lights, they will grow towards the light source.

Motivation

Bubble machine sketch idea

It was a bit confusing and challenging to try combining/connecting plants and electronics somehow. But what I noticed during my plants' observation was that I was interested in the respiration process of my plants. The idea was to make a bubble machine which can visualize it. I think bubbles match the concept of respiration, since they are somewhat transparent, just like respiration. With the bubbles, I was trying to simulate or reflect the respiration, hence the project name "Respiring Reflections".

During the process of growing my Pothos plants (Epipremnum aureum) from cuttings (Stecklinge) and documented their growth, I started to think: "Are my plants breathing? They seem fine, their leaves are green... but are they really okay?" The idea was that the soap bubbles quantity would be produced according to the CO2 level of the plants' enclosed environment, divided into three categories: Low, Medium and High CO2 level. When the CO2 level in the plants' environment rises, then there will be more soap bubbles. In order to do so, I watched videos and read blogs/forums related to the DIY bubble maker machine, until I had a plan on the materials needed and how to make it.

You can find my initial project mood board here: https://miro.com/app/board/uXjVLBm7F8w=/?share_link_id=117991010729

Materials

  • ESP32
  • Breadboard (half-size)
  • CO2 sensor MH-Z19C
  • Stepper motor 28BYJ-48
  • Stepper motor driver module ULN2003
  • PWM fan AMD Ryzen 7 1700
  • 10kΩ resistor
  • Power supply 12 volts
  • Buck converter 12 volts to 5 volts
  • Acrylic sheets
  • Bubble sticks
  • Soap bubble liquid
  • Lots of cables...

Wiring Diagram

Wiring diagram

During the process of making the bubble machine, unfortunately I broke my ESP32. I'm still not sure why, but perhaps it was due to false wiring. Thus I made this wiring diagram so that the wiring would be clear. I tried some free tools to make the wiring diagram, but in the end I stick with EasyEDA to make this. The wiring diagram helped me a lot in reproducing the wiring I wanted to do, as well as to ask opinion from Christian or someone else for consultation.

Since I wanted this installation to be a standalone one, I powered the ESP32 with the power supply of 12 volts, through a buck converter of 5 volts with 1 Ampere output. For this, I went to an electronics store in Erfurt (Bastlerland) and showed my wiring diagram for this project. The storekeeper recommended me this solution and I followed it.

Codes

To program the ESP32, I used Visual Studio Code with PlatformIO extension. Here are the codes I uploaded to the ESP32 to run the bubble machine:

Bubble machine

main.cpp:

#include <Arduino.h>
#include <AccelStepper.h>           // Load the AccelStepper library
#include "MHZ19.h" 
#include <HardwareSerial.h>

#define motorPin1  12               // IN1 pin on the ULN2003 driver
#define motorPin2  14               // IN2 pin on the ULN2003 driver
#define motorPin3  27               // IN3 pin on the ULN2003 driver
#define motorPin4  26               // IN4 pin on the ULN2003 driver

AccelStepper stepper(AccelStepper::HALF4WIRE, motorPin1, motorPin3, motorPin2, motorPin4);

#define BAUDRATE 9600

/*CO2 sensor*/
#define RX_PIN 16  //wire green here (8)                                    
#define TX_PIN 17  //wire blue here (9)  

/*CO2 sensor variables*/
MHZ19 myMHZ19;
HardwareSerial mySerial(2);
unsigned long getDataTimer = 0;
void verifyRange(int range);

int CO2;
int8_t Temp;

int currentCategory = -1;  // To store the current CO2 category

int newCategory;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);               // initialize the serial monitor

  stepper.setMaxSpeed(1000.0);      // set the max motor speed
  stepper.setSpeed(100);            // set the current speed/initial speed

  mySerial.begin(BAUDRATE);    // sensor serial

  /*CO2 sensor*/
  myMHZ19.begin(mySerial);     // pass to library
  myMHZ19.autoCalibration(); 

}

void loop() {
  // put your main code here, to run repeatedly:
  stepper.runSpeed();

  /*CO2 sensor and stepper motor speed logic*/
  if (millis() - getDataTimer >= 250)  //refresh rate: 250ms
    {
        //int CO2; 

        /* note: getCO2() default is command "CO2 Unlimited". This returns the correct CO2 reading even 
        if below background CO2 levels or above range (useful to validate sensor). You can use the 
        usual documented command with getCO2(false) */

        CO2 = myMHZ19.getCO2(false);                             // Request CO2 (as ppm)
        
        Serial.print("CO2 (ppm): ");                      
        Serial.println(CO2);                                

        //int8_t Temp;
        Temp = myMHZ19.getTemperature();                     // Request Temperature (as Celsius)
        Serial.print("Temperature (C): ");                  
        Serial.println(Temp);                               

        getDataTimer = millis();

        // determine the category of CO2
        if (CO2 < 900) {    // lower threshold: 900 ppm
          newCategory = 0;  // Low CO2
        } else if (CO2 < 1000) {   // higher threshold: 1000 ppm
          newCategory = 1;  // Medium CO2
        } else {
          newCategory = 2;  // High CO2
        }
      
        // switch category if the current category is no longer valid
        if (newCategory != currentCategory) {
          currentCategory = newCategory;
          switch (currentCategory) {
            case 0:
              stepper.setSpeed(100);  // Slowest speed
              break;
            case 1:
              stepper.setSpeed(300); // Medium speed
              break;
            case 2:
              stepper.setSpeed(500); // Fastest speed
              break;
          }
        }
  }
}

platformio.ini:

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps = 
	waspinator/AccelStepper@^1.64
	wifwaf/MH-Z19@^1.5.4
Calibration

To determine the thresholds for my bubble machine, I uploaded a calibration script to the ESP32 and let the CO2 sensor run in the enclosed plants' casing for minutes until the values shown in the serial monitor (a way to see values when the ESP32 is connected to your laptop) were somewhat "stable" and not deviating too much from the previous ones:

main.cpp:

#include <Arduino.h>
#include "MHZ19.h"
#include <HardwareSerial.h>

#define BAUDRATE 9600

/*CO2 sensor*/
#define RX_PIN 16  //wire green here (8)                                    
#define TX_PIN 17  //wire blue here (9)

/*CO2 sensor variables*/
MHZ19 myMHZ19;
HardwareSerial mySerial(2);
unsigned long getDataTimer = 0;
unsigned long timeElapse = 0;
void verifyRange(int range);

int CO2;
int8_t Temp;

int minCO2 = 1500;    // save min CO2 value
int maxCO2 = 400;     // save max CO2 value

int range;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  mySerial.begin(BAUDRATE);    // sensor serial

  /*CO2 sensor*/
  myMHZ19.begin(mySerial);     // pass to library
  myMHZ19.autoCalibration(); 
  timeElapse = 6e5;            // wait 10mins to calibrate
  Serial.println("Calibrating... (10mins)");
  delay(timeElapse);

}

void loop() {
  // put your main code here, to run repeatedly:
      if (millis() - getDataTimer >= 1000)  // Check if interval has elapsed (non-blocking delay() equivalent)
    {

        CO2 = myMHZ19.getCO2(); // get CO2 value       
        
        Serial.print("CO2 (ppm): ");
        Serial.println(CO2);

        if(CO2 < minCO2){   // if current CO2 value is lower than the min value: save the new value as the min
          minCO2 = CO2;
        }

        if(CO2 > maxCO2){   // if current CO2 value is higher than the max value: save the new value as the max
          maxCO2 = CO2;
        }

        Serial.print("Min CO2: ");
        Serial.println(minCO2);

        Serial.print("Max CO2: ");
        Serial.println(maxCO2);

        int8_t Temp;    // Buffer for temperature
        Temp = myMHZ19.getTemperature();    // Request Temperature (as Celsius)

        Serial.print("Temperature (C): ");
        Serial.println(Temp);

        range = maxCO2 - minCO2;  // calculate the range

        Serial.print("Range: ");
        Serial.println(range);

        Serial.print("Lower threshold: ");
        Serial.println(minCO2 + (range * 1 / 3));   // lower threshold

        Serial.print("Higher threshold: ");
        Serial.println(minCO2 + (range * 2 / 3));   // higher threshold
        
        getDataTimer = millis();  // Update interval
    }

}

platformio.ini:

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps = wifwaf/MH-Z19@^1.5.4

Respiring Reflections - First Prototype and First Trials

For the bubble machine I needed a fan, a rotating motor, bubble sticks and a container for the soap bubble liquid. To produce more soap bubbles, the motor needs to rotate faster. The bubble sticks need to dip into the soap bubble liquid and then they will pick up the soap liquid to be blown in front of a fan to produce bubbles. To test out this logic, I made the first prototype out of cardboard. This turned out to be helpful for considering measurements for the final prototype. Other than the bubble machine as a whole, I also did trials on the CO2 sensor in the plants' enclosed environment. Moreover, I tried to experiment with the closeness of the fan to the bubble sticks, for it to be able to blow bubbles. Through the trials, I found that the fan was strong enough to blow the bubbles only in specific areas, with a certain closeness. Therefore, I needed to consider and experiment with the distance and placement of the fan towards the rotating bubble sticks. Connecting the bubble sticks to the stepper motor was also a challenge, and in the end I used small hoses or plastic tubes to attach the bubble sticks to the stepper motor.

Respiring Reflections - Final Prototype (Winterwerkschau)

To build the final prototype for the Winterwerkschau, I decided to change the casing material to transparent acrylic sheets. I think it matches the concept that everything is transparent. Before building the real physical final prototype, I tried out several online tools to help me, such as 3D sketch plan, 2D blueprint and optimization software to cut the acrylic sheets, to know how much materials I needed. Because the dimension of my final prototype will depend on the bubble sticks (attached to the rotating stepper motor), and also the length of the breadboard, I decided to use half-size breadboard instead of a full-size one, since the full-size will be redundant for this project. The wiring diagram helped me to consider this, since I wouldn't need that much space of the breadboard. The half-size breadboard minimized the length (or depth) dimension of my prototype a lot. In building the final prototype, I learned a lot how to be creative in finding solutions with common materials or tools that I could find in the lab (either diyElectronics Lab in B15 or Electronics Lab in M5), at home or in the city.

Self-reflection and Lessons Learned

I learned a lot in this class, from developing the concept, electronics, prototyping, and coding. This project was a good challenge for me to tackle, since I didn't have a lot of prototyping courses.

Prototyping hurdles

Technically it was challenging, since it was the first time I learned ESP32, plus I broke my first one in this class. But lessons learned: always make a wiring diagram and triple check everything. I usually only deal with digital problems, so prototyping with electronics and physical mechanical things adds dimension in the project, which means when I encounter a problem, that problem could be in any dimension and I couldn't really pinpoint where. Throughout the class, I experienced that problems can arise anywhere: cables, ESP32, understanding of mechanical/physical things, materials, tools, device specification that needs specific usage in the code, etc. But that's just the art of prototyping, as my friend said. We're not doing a finished line of production, so enjoy the ups and downs, the successes and failures. Fail fast is also better.

I feel like I spent most of my time designing and planning for my prototypes rather than building the prototypes, both for the cardboard prototype (first prototype) and also the final one. I wasn't sure how it was supposed to be made, but I kept thinking about the measurements and the mechanisms so that I could make them work, logically and visually in my mind. Sometimes even night and day, that I got a little bit overwhelmed. In the end though, I compromised the accuracy aspect and focused more on the functionality or mechanical things to make it work. "Just try it out" was definitely a motto for this project.

Learnings from my Pothos plants

In this class, this was the first time I grew Pothos plants from cuttings as a part of my experiment. I learned resilience and adaptability from them, especially from the Jade variation. They are so resilient, and they all survived winter. In contrary, only one of the Pearls & Jade variation survived until now, but I learned that for Pearls & Jade variation, they should be propagated in a few leaves as a group instead of single leaves. This should increase their survival chance. The roots that grew depend on the medium as well; in water propagation they grew smooth, whereas those in Seramis medium were branched and grew deeper into the Seramis medium. It reminds me that adaptability is an important survival trait.

Future Work

If I had to think about this project and relate it to my study program, I would have difficulties, since I'm not exactly experienced in speculative design. However, it might be a bit far-fetched, but I could imagine my bubble machine as an outdoor "smart home system" that visualizes the respiration of houseplants, since having a bubble machine indoor can be messy. Bubbles can be fun to look at, especially for children. During the Winterwerkschau, I enjoyed witnessing that people of all ages enjoying the bubbles, especially children. Some of my friends also reported this to me and it was heartwarming. And maybe add some indicators, to indicate if something goes wrong with the plants (so that the owner(s) can check). This idea can be elaborated further, which indicator(s) can be used, what kind of thresholds, what indicates "healthy" and "sick" plants, etc. A mechanism that could be added would be to refill the soap liquid from time to time. During Winterwerkschau I refilled it manually.

References

CO2 sensor MH-Z19C
PWM fan AMD Ryzen 7 1700
Stepper motor 28BYJ-48 and stepper motor driver module ULN2003