Chenxi Zhu | Minwook Kang | Teresa Chang | Yihong Hu
Healthy Nook is an installation that aims to improve health and environmental conditions for community gardeners in the field. It features:
- Cameras and LED lights to discourage illegal dumping and optimize dumping management.
- Stormwater collection tank to increase water accessibility
- Mister and fans to cool and weigh down harmful air particles in the gardening area
Overall, it will make community gardening experience more enjoyable, comfortable, and less physically demanding!
Motivation
There are more than 400 community gardens in the city of Philadelphia, and about 67% of them are in high-poverty areas. They are valuable assets to the city as they contribute substantially to enhancing health, safety, and social cohesion.
However, community members face challenges in maintaining these gardens. Here is an example of an ill-maintained garden in a neighborhood close to the university on 43rd and Locust.
In our research, we identified three major challenges for the maintenance of community gardens in Philadelphia:
- Illegal dumping – the second-highest reported issue in Philadelphia. The issue is among the highest priorities for improving public services. They occur mostly in vacant and open spaces, including gardens.
- Comfort and health – extreme heat is one of the most dangerous weather hazards in the U.S., with the most fatalities each year. Additionally, urban heat island effect concentrates and exacerbates air contamination. The combined effects of high temperatures and poor air quality can have adverse health impacts on gardeners who spend extended periods outdoors caring for their crops, affecting their overall well-being. Philadelphia’s normal average temperature is now 3 degrees higher than in the 1970s. Low-income communities, in particular, experience hotter weather up to 22 degrees compared with other communities. This poses an equity issue as most community gardens in Philadelphia are located in low-income neighborhoods.
- Water accessibility – across 10 cities in the United States, including Philadelphia, almost one-third (31%) of community gardeners have expressed concerns about water access. In Philadelphia, gardens have no direct water line, and drawing water directly from fire hydrants is often an arduous task. They are often unreliable as well – they were damaged by cars on more than one occasion. There is a pressing need for sustainable water management solutions to ensure better maintenance of community gardens.
Solution
As a response to these challenges, we have developed the concept of Healthy Nook, which features a 2-meter tall mushroom-like shape designed to effectively provide shade.
The installation has a range of sensors, including temperature and humidity sensors, dust sensors, cameras, and pressure sensors. The response system includes misters, fans, and LED lights. Water comes from a stormwater collection tank, which can contain 40 liters of water – this is the average amount of rainfall in Philadelphia during the summer months. The tank is also connected to a faucet at the bottom to provide water for various uses. Solar panels located on top of the mushroom would charge batteries and power up the installation.
Rainwater would be filtered through a soil feature before it reaches the tank. Misters would be set to spray automatically if they have not been activated for ten consecutive days.
Function
The LED lights serve as a warning system to highlight the challenges facing the garden. Red represents high temperatures, blue represents low humidity, and yellow indicates poor air quality. An optional LED light, triggered by the pressure sensor, may provide illumination for pedestrians at night. A break beam is another alternative that can be more flexible for temporary uses.
We’ve designed Healthy Nook to respond to three envrionmental scenarios. Please scroll photos to the right to see how these scenarios trigger different functions.
Site
Our initial focus for testing the Healthy Nook concept would be on five community gardens that are most susceptible to issues of illegal dumping, high temperatures, and air pollution.
Ideally, if each of the 400 gardens in Philadelphia could have one installation, Healthy Nook could provide 1,460 square meters of shade to 5,675 people, 16,000 liters of water (=180 months of summer rainfall in Philadelphia), and 120,000 kWh of energy per year (=power a Macbook 400 days).
Partner
Our ideal client for the Healthy Nook concept would be the Pennsylvania Horticultural Society (PHS), an organization that provides resources and support to community gardens, urban farms, and school gardens to help them serve their communities with fresh produce. As a go-to resource for many community gardeners seeking assistance, PHS would be an excellent partner for promoting and implementing the Healthy Nook concept.
Additionally, the Street Department of Philadelphia has started a pilot project to install cameras for illegal dumping detection and has seen success. This project could act as an expansion of the pilot project by recommending new sites for camera installation.
Next Step
For our next steps, we would like to investigate further the installation of an irrigation system for maintaining soil moisture and a data portal to record all the information the sensors have gathered. Making the camera and the response communicate with each other may be a challenge that requires further experimentation.
Demo Video
(In this video, we use a water pump instead of a mister for demonstration)
Reference
Bowler, Diana E., Lisette Buyung-Ali, Teri M. Knight, and Andrew S. Pullin. ‘Urban Greening to Cool Towns and Cities: A Systematic Review of the Empirical Evidence’. Landscape and Urban Planning 97, no. 3 (15 September 2010): 147–55. https://doi.org/10.1016/j.landurbplan.2010.05.006.
Branas, Charles C., Eugenia South, Michelle C. Kondo, Bernadette C. Hohl, Philippe Bourgois, Douglas J. Wiebe, and John M. MacDonald. ‘Citywide Cluster Randomized Trial to Restore Blighted Vacant Land and Its Effects on Violence, Crime, and Fear’. Proceedings of the National Academy of Sciences 115, no. 12 (20 March 2018): 2946–51. https://doi.org/10.1073/pnas.1718503115.
City of Philadelphia. ‘Beat the Heat: Hunting Park | Office of Sustainability’, 7 August 2018. https://www.phila.gov/2018-08-07-beat-the-heat-hunting-park/.
Delshad, Ashlie B. ‘Community Gardens:An Investment in Social Cohesion, Public Health, Economic Sustainability, and the Urban Environment’. Urban Forestry & Urban Greening 70 (1 April 2022): 127549. https://doi.org/10.1016/j.ufug.2022.127549.
———. ‘Community Gardens:An Investment in Social Cohesion, Public Health, Economic Sustainability, and the Urban Environment’. Urban Forestry & Urban Greening 70 (1 April 2022): 127549. https://doi.org/10.1016/j.ufug.2022.127549.
Kummer, Frank. ‘Not Your Grandparents’ Weather: These Charts Show Why Philly Summers Are Hotter than in the 1970s’. https://www.inquirer.com, 21 July 2022. https://www.inquirer.com/news/philadelphia-summers-hotter-climate-change-20220721.html.
Marin, Anthony R. Wood | Max. ‘Philly Heat-Wave Death Toll Rises to 5, and It Might Increase’. https://www.inquirer.com, 27 July 2022. https://www.inquirer.com/news/heat-wave-deaths-philadelphia-record-climate-change-20220726.html.
Russ, Lynette Hazelton | Valerie. ‘Everyone in Philly Knows Illegal Dumping Is a Problem. But for Many Black, Brown, and Low-Income Residents, It’s a Crisis.’ https://www.inquirer.com, 29 March 2023. https://www.inquirer.com/news/lenfest-institute-for-journalism-ssrs-poll-illegal-dumping-top-priority-black-latino-low-income-20230329.html.
South, Eugenia C., Bernadette C. Hohl, Michelle C. Kondo, John M. MacDonald, and Charles C. Branas. ‘Effect of Greening Vacant Land on Mental Health of Community-Dwelling Adults: A Cluster Randomized Trial’. JAMA Network Open 1, no. 3 (20 July 2018): e180298. https://doi.org/10.1001/jamanetworkopen.2018.0298.
US EPA, OAR. ‘Climate Change Indicators: Heat-Related Deaths’. Reports and Assessments, 1 July 2016. https://www.epa.gov/climate-indicators/climate-change-indicators-heat-related-deaths.
WHYY. ‘Three Maps Tell the Story of Urban Farming in Philly Right Now’. Accessed 4 May 2023. https://whyy.org/articles/3-maps-tell-the-story-of-urban-farming-in-philly-right-now/.
Appendix
Parts
- Arduino Uno (or equivalent)
- Arduino-to-USB cable
- Power supply module
- Breadboard
- 5V relay module
- DHT11 temperature and humidity module
- Gikfun DC 3V 5V micro submersible mini water pump
- Jumper wires
- Square Force-Sensitive Resistor (FSR)
- Four LEDs
- Three 220 ohm resistors
- One 10k ohm resistor
- Dust Sensor
- Fan blade and 3-6v motor
For Solar Panel
- 6V DC 583ma solar panel
- Solar power management module for 6V-24V solar panel
- This solar power manager includes a 3.7V 14500 lithium ion battery holder, ph2.0 connector, and a 5V boost converter
- If your solar power manager has no battery holder nor boost converter, you have to buy these parts separately
- 3.7V 6500 mAh lithuim polymer ion battery with ph2.0 connector (I got 5000 mAh because 6500 mAh was out of stock)
For Camera
Project Related Tutorials
- ESP32-CAM real time Object detection
- Using Force Sensitive Resistor (FSR) to identify pedestrians or bikes by blinking RGB LED
- Using solar energy to recharge batteries and power Arduino Uno
- Controlling water pump based on air temperature and humidity
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 |
/* TITLE: Healthy Nook Tutorial WRITER: Chenxi Zhu, Teresa Chang, Yihong Hu, Minwook Kang DATE: 2023-05-04 DESCRIPTION: This project activates and deactivates a water pump, fan, and LEDs based on environmental readings, including temperature, humidity, and air quality. There are three different scenarios emphasized in this project, so feel free to test out different combinations! PARTS: Arduino Uno (or equivalent) Arduino-to-USB cable Power supply module Breadboard 5V relay module DHT11 temperature and humidity module Gikfun DC 3V 5V micro submersible mini water pump Jumper wires Square Force-Sensitive Resistor (FSR) RGB LEDs Three 220 ohm resistors One 10k ohm resistor Dust Sensor Fan blade and 3-6v motor Battery (24V) SOURCE: Code adapted from 1. Elegoo Super Starter Kit for UNO Lesson 2 Blink, 4 RGB LED, 11 DHT11 Temperature and Humidity Sensor, and 21 DC Motors 2. Adafruit FSR Tutorial https://learn.adafruit.com/force-sensitive-resistor-fsr/using-an-fsr 3. Controlling submersible pump with Arduino https://www.sensingthecity.com/tutorial-controlling-submersible-pump-with-arduino/ 4. Grove - Dust Sensor Demo v1.0 (Interface to Shinyei Model PPD42NS Particle Sensor Program by Christopher Nafis Written April 2012 https://www.seeedstudio.com/Grove-Dust-Sensor-PPD42N-p-1050.html https://www.shinyei.co.jp/stc/eng/optical/main_ppd42.html) */ #include <dht_nonblocking.h> #define DHT_SENSOR_TYPE DHT_TYPE_11 // Define Pins and Variables // pins and variables for DHT and pump static const int DHT_SENSOR_PIN = 2; static const int PUMP_PIN = 7; float temperature; float humidity; // pins and variables for LEDs #define BLUE_RGB 11 #define GREEN_RGB 10 #define RED_RGB 9 #define LED 12 // RED LED #define YELLOW_LED 4 #define BLUE_LED 3 int redIntensity; int greenIntensity; int blueIntensity; // pins for fan #define ENABLE 5 #define DIRA 13 #define DIRB 6 // pins and variables for FSR int fsrPin = 0; // The FSR and 10K pulldown are connected to a0 int fsrReading; // The analog reading from the FSR resistor divider // pins and variables for dust sensor int DUST_PIN = 8; // pin connected to the Shinyei dust sensor unsigned long duration; // duration of the low pulse occupancy signal unsigned long starttime; // duration of the low pulse occupancy signal unsigned long sampletime_ms = 30000; // sample 30s unsigned long lowpulseoccupancy = 0; // total low pulse occupancy over the sample interval float ratio = 0; // ratio of low pulse occupancy to sample interval float concentration = 0; // estimated particle concentration in the air // Define variables to calculate moving window average const int WINDOW_WIDTH = 4; // size of the moving average window float con_array[WINDOW_WIDTH] = {0, 0, 0, 0}; // initialize an array for storing recent concentrations float total = 0; // total concentration in the moving average window float average = 0; // moving average concentration int index = 0; // index of the oldest concentration in the array DHT_nonblocking dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE); // specify the temperature threshold to indicate high temperature long temperature_threshold = 33; // in deg C // specify the humidity threshold to indicate low humidity long humidity_threshold = 50; // in % // specify the air quality threshold to indicate poor air quality long dust_threshold = 10000; // specify measurement cycle delay as 60 milliseconds long measurement_delay = 60; //3000ul /* * Initialize the serial port. */ // The setup function runs once when you press reset or power the board void setup( ) { // set pin mode for pump, LEDs, and fan as output Serial.begin(9600); pinMode(PUMP_PIN, OUTPUT); pinMode(RED_RGB, OUTPUT); pinMode(GREEN_RGB, OUTPUT); pinMode(BLUE_RGB, OUTPUT); pinMode(YELLOW_LED, OUTPUT); pinMode(BLUE_LED, OUTPUT); pinMode(DUST_PIN, INPUT); // dust sensor as input pinMode(LED, OUTPUT); pinMode(ENABLE,OUTPUT); pinMode(DIRA,OUTPUT); pinMode(DIRB,OUTPUT); starttime = millis(); // get the current time; } /* * Poll for a measurement, keeping the state machine alive. Returns * true if a measurement is available. */ static bool measure_environment(float *temperature, float *humidity) { static unsigned long measurement_timestamp = millis(); if(millis() - measurement_timestamp > measurement_delay) { if(dht_sensor.measure(temperature, humidity) == true) { measurement_timestamp = millis(); return(true); } } return(false); } /* * Main program loop. */ int i; void loop() { // Pressure sensor triggers LED fsrReading = analogRead(fsrPin); Serial.print("Analog reading = "); Serial.println(fsrReading); // print out the raw analog reading // Thresholds for detection of pedestrians // This section presents two ways to control the RGB LED. The first way is by switching on and off the three color LEDs in the RGB LED, while the second way is by using the values for the color, which can form a greater variety of colors. if (fsrReading > 500) { // The reading value for a person is around 1000 digitalWrite(LED, HIGH); delay(10000); } else { digitalWrite(LED, LOW); } // Air quality calculation // If the sample interval has elapsed, calculate and output the average duration = pulseIn(DUST_PIN, LOW); // measure the duration of LPO signal lowpulseoccupancy = lowpulseoccupancy+duration; // add the duration to the total if ((millis()-starttime) > sampletime_ms) // if the sample time == 30s { // calculation ratio = lowpulseoccupancy/(sampletime_ms*10.0); // calculate the ratio of LPO to sample interval; Integer percentage 0=>100 concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve total = total - con_array[index]; // subtract the oldest reading from the total total = total + concentration; // add the newest reading to the total con_array[index] = concentration; // store the newest reading in the array index = (index + 1) % WINDOW_WIDTH; // move to the next index average = total / WINDOW_WIDTH; // calculate the average // printing Serial.print(millis()); // print current time Serial.print("\t"); Serial.println(average); // print average concentration lowpulseoccupancy = 0; // reset LPO starttime = millis(); // advance starttime } /* Measure temperature and humidity. If the functions returns true, then a measurement is available. */ if(measure_environment(&temperature, &humidity) == true){ // print temperature and humidity Serial.print("T = "); Serial.print(temperature, 1); Serial.print(" deg.C, H = "); Serial.print(humidity, 1); Serial.println("%"); Serial.print("Air quality = "); Serial.println(average, 1); // Three Focused Scenarios if (temperature > temperature_threshold & humidity > humidity_threshold) { // too hot and humid, turn on fan analogWrite(RED_RGB, 255); // too hot, turn on red LED analogWrite(BLUE_RGB, 0); analogWrite(GREEN_RGB, 0); // turn on fan Serial.print("fan on - "); Serial.println("too hot and very humid"); analogWrite(ENABLE, HIGH); //enable on digitalWrite(DIRA,HIGH); //one way digitalWrite(DIRB,LOW); digitalWrite(ENABLE,LOW); // turn off } else if ((temperature > temperature_threshold || average > dust_threshold) & humidity < humidity_threshold) { // too hot or dusty and too dry, turn on fan and mister if (temperature > temperature_threshold) { analogWrite(RED_RGB, 255); // too hot, turn on red LED analogWrite(BLUE_RGB, 0); analogWrite(GREEN_RGB, 0); Serial.print("too hot "); } if (average > dust_threshold) { digitalWrite(YELLOW_LED, HIGH); // too dusty, turn on yellow LED Serial.print("too dirty "); } if (humidity < humidity_threshold) { digitalWrite(BLUE_LED, HIGH); // too dry, turn on blue LED Serial.print("too dry "); } // turn on mister digitalWrite(PUMP_PIN, HIGH); Serial.print("pump on "); // turn on fan Serial.println("fan on"); analogWrite(ENABLE, HIGH); //enable on digitalWrite(DIRA,HIGH); //one way digitalWrite(DIRB,LOW); delay(2000); digitalWrite(ENABLE,LOW); } else if (average > dust_threshold) { // too dusty, turn on mister digitalWrite(YELLOW_LED, HIGH); // too dusty, turn on yellow LED // turn on mister digitalWrite(PUMP_PIN, HIGH); Serial.print("pump on - "); Serial.println("too dirty"); } else { // turn off LEDs and Pump for other scenarios digitalWrite(RED_RGB, LOW); digitalWrite(BLUE_RGB, LOW); digitalWrite(GREEN_RGB, LOW); digitalWrite(BLUE_LED, LOW); digitalWrite(YELLOW_LED, LOW); digitalWrite(PUMP_PIN, LOW); Serial.println("off"); } } delay(3000); } |