Introduction: C.O.D.E Green Adapted Garden Bed

C.O.D.E Green is a raised garden bed designed for individuals who use assistive walking devices and/or have a cognitive impairment. This special indoor garden includes several technological features that allow users to manage an assortment of flowers, herbs and vegetables in a handicap-friendly way right in a user’s clinical setting or home. This adapted garden bed is raised to accommodate for wheelchair or walker users and includes programmed moisture sensors that detect the moisture levels of the soil while notifying the individual when and when not to water the plants. Users can scan QR codes with a customized app that provides step by step, cognitive friendly instructions on how to care for each plant while offering additional information on the plant’s uses and health benefits. This project was designed and created by three Occupational Therapy students at Duquesne University for their Assistive Technology minor. We invite health professionals, engineers, students, and all curious and creative people to give it a try.

Design Components:

  • Cardboard Carpentry
  • PVC construction
  • 3D printing
  • Arduino microprocessor
  • MIT App Inventor coding


  • Computer that is compatible with MIT App Inventor and Arduino software:

  • SparkFun Inventor's Kit (
  • Moisture Sensor(s)
  • QR code scanning app
  • 3D printer
  • Triwall cardboard
  • - continue cardboard supplies

Step 1: Cardboard Carpentry- Building the Base

  1. Measure out/draw the following dimensions on tri-wall cardboard.
  2. Clamp the pieces of cardboard to the table and use a jigsaw to cut out each pieces.
  3. Poke holes in the grain for the wooden dowels.
  4. Use glue to attach the side pieces to the base.
  5. Fill the holes in the grain with white glue. Be generous
  6. Hammer wooden dowels in the holes to secure the sides.
  7. Let sit to dry.
  8. Prime, paint, and polyurethane the garden bed.
  9. Use the PVC cutter to cut the pieces of PVC piping to the appropriate dimensions as shown.
  10. Drill holes in the PVC legs so that it can become adjustable in height.
  11. Attach the PVC piping to the base as shown.
  12. Attach the legs to the PVC base.

Step 2: MIT App Inventor: Building the App

  • With MIT App Inventor, you can make your own apps using blocks instead of writing code. This gives you an understanding of the thought process of coding without having to know the language.
  • This App will allow users to scan QR codes, one per plant, in order to bring up a corresponding information about the plant itself, the growing process, and suggested uses. This information is presented in a timed slideshow format with corresponding text and an audio component that reads the text aloud.
  • We chose our text keeping in mind the targeted population of individuals with cognitive disabilities. Don't forget that this design can be modified for different populations and uses. You can change the information that you want to show up when the user scans the QR code. If you choose to do this, keep in mind the time component of the "slideshow" as it may need to be adjusted according to the text length. If these two components don't match, users may find it difficult to read the information or hear the extent of it read aloud before the image and text change.

Here are the steps:

  1. Log onto MIT App Inventor and click on the "Create Apps" icon.

2. Create a new project. For more understanding on how to use MIT App inventor, or to better understand the thought process behind the app-creation process, try a quick tutorial that is offered by the website.

3. In the design section, add the following components: Image, button, 2 texts, barcode scan, camera, clock, text to speech, and notifier.

4. Upload pictures of your choice for each slide of every plant slideshow. For this project, we made four slides for each slideshow, with 1 picture for each slide. Altogether, this totals 16 pictures.

4. Click on one of the button components on the right hand side and add "Tap to scan" in the text bar. Users will tap this button to open up the camera component. In the two text components, you will add the name of the plant and the description of the plant.

5. For easier identification of the components, you can rename them. This is useful when you have two of the same components, such as texts in this example. Being able to identify between each is crucial for working in the Blocks section later.

6. Use the picture of phone screen that is included above to see how we modeled our interface, or get creative with it.

7. Copy the blocks pictured below. Feel free to use the search bar on the left side of the screen to find the blocks you are looking for.

8. Remember, this software is not designed for iPhones, but it can be used with Androids. In order to test your app, you can download an emulator software or use a Kindle Fire or Android device.

"Connect" --> AI Companion or Emulator


List Component

  • You will have three lists: Plant labels, Plant pictures, and Plant descriptions.
  • Remember that the order of the lists corresponds to the order of the slideshow. Each picture and description that correspond should be in the same order in their list.
  • Ensure that the name of the image is spelled exactly as it is listed in the design section.
  • With these lists set up, the app will be able to locate the images and descriptions for each slideshow.

Clock Component

  • The purpose of the clock component is to command each slide of the plant "powerpoint" to transition after the same amount of time. This time can be adjusted in the Design section when you click on the clock component in the right hand side. Remember it is measured in milliseconds.
  • The global index ensures the component is the same for all QR code plant slides. It will transition between all slides and then discontinue at the end.
  • The image, description text, and text to speech sections ensure that the proper image and text are displayed together, and that the text is read aloud.
  • At this time, your app is now able to show its users a slideshow that speaks to them about the plants they are growing.

Screen Initialize

  • This section determines how the screen appears to the user when the app is opened.
  • It will automatically welcome the user to the app and tell them what to do. This is designed for individuals with cognitive impairments.
  • You can choose what the text to speech component says at this time. We chose to welcome the user to C.O.D.E Green gardening app and instructed them to press the scan button and hold the camera over the QR code to learn about each plant.

Barcode Scanner

  • This component allows the camera component to pick up the QR code and begin the corresponding slideshow.
  • It will activate the clock component, image, description, and text to speech.
  • IMPORTANT: to use this app, the user also has to download another barcode scanner app. There are many options in the App Store that are free. Be sure to test it out with the app first. If you are running into issues, but are sure that the blocks are all correct, then try another barcode scanner. Some can be touchier than others.

Step 3: Building the Moisture Sensor

To get started on the moisture sensor component of this project, download the Arduino software on your computer.

  1. Open up Arduino and delete the preset code.
  2. Copy and paste the code below to program
  3. Feel free to adjust the NUMBERS, if needed, according to how much water the plants need. Remember that these numbers represent when the screen will notify you to water or not to water your plants.
  4. "Verify" the code to check that it is ready to be transferred.
  5. Connect your SparkFun Redboard and breadboard to your computer.
  6. Run the program from your computer with the SparkFun attachments. The software will automatically load the program into your SparkFun so that it will still run without being connected to a computer.
  7. Feel free to test your creation by putting the moisture sensor in water or in your hand. Watch the sensor change depending on the moisture.
  8. If you wish to make any changes to your program, you can do so by going back into your Arduino software, altering the code, and repeating the "verification" process to reload the program onto the SparkFun.

The file with our code is titled C.O.D.Egreencode and is attached above.

Step 4: Coding

<p>[code]<br>// Attach the serial display's RX line to digital pin 2</p><p>#include           //the liquid crystal library contains commands for printing to the display</p><p>// Here we are setting up some water thersholds that we will // use later. Note that you will need to change these to match// your soil type and environment. </p><p>/******************************************************** * Change these values based on your calibration values *******************************************************/int thresholdUp = 900;int thresholdDown = 400;</p><p>// We are setting up the pin A0 on the redboard to be our sensor// pin input:</p><p>int soilPin = A0;int soilPower = 7;//Variable for Soil moisture Power</p><p>LiquidCrystal lcd(13, 12, 11, 10, 9, 8);   // tell the RedBoard what pins are connected to the display</p><p>void setup(){    delay(500); // wait for display to boot up</p><p>  pinMode(soilPower, OUTPUT);//Set D7 as an OUTPUT  digitalWrite(soilPower, LOW);//Set to LOW so no power is flowing through the sensor</p><p>  lcd.begin(16, 2);                 //tell the lcd library that we are using a display that is 16 characters wide and 2 characters high  lcd.clear();                      //clear the display}</p><p>void loop(){  // Here we are declaring a string, which are lines of words,  // and we want DisplayWords to be the words displayed on  // the LCD screen, which will change based on whether the soil  // wet or dry based on our threshold values above.  String DisplayWords;</p><p>  // We need to set up a pin to get the value that the soil   // moisture sensor is outputting, so sensorValue will get the  // analog value from the sensor pin A0 on the redboard that we   // set up earlier.</p><p>  int sensorValue;  sensorValue = readSoil();</p><p> lcd.setCursor(0,0);               //set the cursor to the 0,0 position (top left corner)if (sensorValue <= thresholdDown) {    lcd.print ("TIME TO WATER! ");}else {   lcd.print ("NO water please");}  lcd.setCursor(0,1);               //move the cursor to the first space of the bottom row  lcd.print(sensorValue);         //print the number of seconds that have passed since the last reset     delay(1000); //wait for half a second, so it is easier to read}</p><p>//This is a function used to get the soil moisture contentint readSoil(){    digitalWrite(soilPower, HIGH);//turn D7 "On"    delay(10);//wait 10 milliseconds     int val = analogRead(soilPin);//Read the SIG value form sensor     digitalWrite(soilPower, LOW);//turn D7 "Off"    return val;//send current moisture value}[/code]</p>

Step 5: 3D Printed Garden Tag and QR Holder

We followed this Instructable to create 3D printed garden tags. We planned to print our QR codes onto each one for the corresponding plant.

Here is the Instructable...

Step 6: 3D Printed Box-holder

We decided to create a 3D printed box that would hold our microprocessor and position the watering screen. Feel free to get creative with this in designing your own.

Included is a link to our project:

Here are our steps:

1. We used a caliper to measure the Arduino software.

2. The box was designed into three parts (the based, the sides and the top)

3. Necessary holes to keep in mind: open space to accommodate for screen so that the person could read the message at the top; space for the moisture sensor to come out of the box, and holes for the power supply for material accessibility.

4. After making the first box it became clear that we needed to use supports for the message board to be displayed

5. This lead to experimenting with different support shapes

6. One corner had to be left clear so that the message board could slide in

7. Bunny ears worked best