
The Mushroom House is a mobile, self-sufficient pavilion for growing oyster mushrooms.
The aim is to create a compact, transportable structure that can be installed in different places, making it possible to produce mushrooms while turning resources considered waste into value.
The project follows a circular economy approach, focused on sustainability and waste reduction. Oyster mushrooms can be grown on various organic substrates, including certain agricultural and textile waste.
We chose oyster mushrooms because they are easy to grow and grow quickly. They can be used as food and are rich in nutrients. They can also grow on different types of organic waste, giving new life to materials that would otherwise be thrown away. Finally, they can be grown in small spaces, making them a good choice for our mobile and self-sufficient pavilion.

Humidity control

To guarantee optimal growing conditions, the pavilion is designed to keep the humidity level between 80% and 90%. To do this, a humidity sensor is used that continuously monitors the indoor conditions and automatically controls the opening and closing of the windows:
- When humidity exceeds 90%, the windows open automatically to 30° to allow ventilation and reduce excess humidity.
- When humidity becomes too low, the windows close to retain moisture inside the pavilion.
Architectural shape
The structure has an A-shaped form. This geometry organizes the growing spaces on several levels, while ensuring that each floor receives enough indirect light. The shape also makes the most of the available space in a compact structure.
The upper part is used first to shield the mushrooms from the direct sunlight but it also collects rainwater so it can be reused to maintain the humidity conditions needed for growing.


Water collection
The pavilion includes a water tank located in its upper part, which stores the water collected by the rainwater harvesting system. The tank is fitted with a water level sensor that monitors the amount of water available. When the tank is empty or the level becomes too low, an audible alarm goes off to warn users that it needs to be refilled.
This system ensures that a water reserve is always available to maintain a humidity level suited to mushroom growth.

BILL OF MATERIALS


SCHEMATIC DIAGRAM CIRCUIT

ARDUINO CODE
#include “Servo.h”
#include <Wire.h>
#include “DHT20.h”
DHT20 DHT;
Servo Servo1;
Servo Servo2;
// Servo motor 1
int servoPin1 = 6;
int startingAngle = 0;
int targetAngle = 0;
// Servo motor 2
int servoPin2 = 2;
// Servo motor speed because it was too fast
int servoSpeed = 20;
unsigned long servoTime = 0;
// Water level sensor
int waterSensor = A0;
int waterValue = 0;
// Buzzer
int buzzer = 5;
// Alarm
int melody[] = {262, 330, 392, 523};
int noteDurations[] = {200, 200, 200, 400};
// Melody
int currentNote = 0;
unsigned long noteTime = 0;
bool melodyPlaying = false;
void setup() {
Serial.begin(115200);
Wire.begin();
DHT.begin();
Servo1.attach(servoPin1);
Servo1.write(startingAngle);
Servo2.attach(servoPin2);
Servo2.write(180 – startingAngle);
pinMode(buzzer, OUTPUT);
}
void loop() {
// humidity
DHT.read();
float humidity = DHT.getHumidity();
// change the position of the windows
if (humidity < 80) {
targetAngle = 30;
}
else if (humidity > 90) {
targetAngle = 0;
}
// to change the speed of the oppening windows
if (millis() – servoTime >= servoSpeed) {
servoTime = millis();
if (startingAngle < targetAngle) {
startingAngle++;
}
else if (startingAngle > targetAngle) {
startingAngle–;
}
// to change the direction of rotation of the too servo
Servo1.write(startingAngle);
Servo2.write(180 – startingAngle);
}
// Write value on the serial monitor
waterValue = analogRead(waterSensor);
Serial.print(“Humidity: “);
Serial.println(humidity);
Serial.print(“Water level: “);
Serial.println(waterValue);
// Start alarm melody if the water reservoir is empty
if (waterValue == 0 && !melodyPlaying) {
melodyPlaying = true;
currentNote = 0;
noteTime = millis();
tone(buzzer, melody[currentNote]);
}
// Play alarm
if (melodyPlaying) {
if (millis() – noteTime >= noteDurations[currentNote]) {
currentNote++;
if (currentNote < 4) {
noteTime = millis();
tone(buzzer, melody[currentNote]);
}
else {
noTone(buzzer);
melodyPlaying = false;
}
}
}
// Stop alarm when water is detected
if (waterValue != 0) {
noTone(buzzer);
melodyPlaying = false;
}
}
PROTOTYPE


VIDEO
RENDER
