
For this assignment, I chose to augment my morning ritual of checking on all of the plants I have in my room, and making sure that they are all getting proper water and sunlight. As was pointed out to me, this isn’t entirely rational, which to me makes it that much better of a ritual. So I decided to poke a little fun at myself, and create personalities for each of my plants, that explained each species’ watering / sunlight needs. Here is the description of my ritual and my answers to the observation questions:


Originally, I wanted to make a little game with LEDs and my Arduino, but decided that it was too disconnected to my ritual. So, I made little personalities for each of my plants, and I also researched what each species needed in terms of care.

The first plant is a Christmas cactus, which needs partial sun and watering when the top 1″ of the soil is dry.

Next is a “jelly bean” plant, which needs lots of sun and rare watering.

Third is my panda plant, which thrives on neglect. Partial sunlight, and surprisingly rare watering.

Fifth I have a little pot of “jelly bean” and a jade plant. Although, I’ll need to re-pot the jade when it gets much bigger. This one needs partial sun and semi-regular watering.

Sixth I have an Aeonium “kiwi” succulent, which needs partial sunlight and semi-regular watering.

Seventh is a fun mix of zebra plant, jade, and “jelly bean”. To accommodate this mix I do indirect sun and semi-regular watering.

Last I have a mix of zebra and jade, so I do partial sun and semi-regular watering.

I made the countdown cards to indicated when each plant needed to be watered. Now, with my artifact, I can flip the countdown card and it will tell me when it’s time to water, rather than trying to remember it off the top of my head. Some of the pots need different watering frequencies, so this is helpful! I added the metal frame around the cards so it was easy to flip the numbers. Also, I made them as small as I could so the size of the cards wouldn’t actually overpower the plants. While still being usable!

Then, it was time for the fun part. Each plant got a personality, and a little bio for how they fit into my plant community. In the corner of each card is a weather icon, which indicates the sunlight needs of the plant. Here is my format:

Here are what the final products turned out to look like:











Next time, I would laser cut my stands out of wood so they are all uniform, but I like the tan paper / wire look because it fits the natural look of the plants. Also, my next design would ideally be waterproof. I enjoyed critique day because many of my classmates had fun ideas of how I could make my ritual artifact into a business.
Overall, it was really interesting to reflect of the rituals I do on a daily basis, especially because at this point I usually don’t think about them very actively even though they hold meaning.
And, now hopefully I’ll have healthier plants! In a fun personified community!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Final Project Object Fall 2018 | |
| // Elsa Roeber | |
| ///////////////////// | |
| // Pin Definitions // | |
| ///////////////////// | |
| // Mux control pins | |
| const int selectPins[4] = {8, 9, 10, 11}; // s0-8, s1~9, s2~10, s3~11 | |
| const int cOutput = 5; | |
| const int cInput = A0; | |
| // photocell variables | |
| int pc1 = 0; | |
| int pc2 = 0; | |
| int pc3 = 0; | |
| int pc4 = 0; | |
| int pc5 = 0; | |
| int pc6 = 0; | |
| int sum = 0; | |
| int average = 0; | |
| // potentiometer variables | |
| int pot1 = 0; // numerator for spirograph | |
| int pot2 = 0; // denominator for spirograph | |
| int pot3 = 0; // varies the size of inner spirograph | |
| // button | |
| int buttonState = 0; // for saving the picture | |
| ///////////////////// | |
| // Set Up // | |
| ///////////////////// | |
| void setup(){ | |
| Serial.begin(9600); // establish serial communications | |
| for(int i = 0; i < 4; i++){ | |
| pinMode(selectPins[i], OUTPUT); | |
| digitalWrite(selectPins[i], HIGH); | |
| } | |
| pinMode(cInput, INPUT); // set up c pins as input | |
| pinMode(12, INPUT); | |
| } | |
| ///////////////////// | |
| // Loop // | |
| ///////////////////// | |
| void loop(){ | |
| // button signal | |
| int buttonSig = digitalRead(12); | |
| if(buttonSig == HIGH){ | |
| buttonState = 1; | |
| }else if(buttonSig == LOW){ | |
| buttonState = 0; | |
| } | |
| // loop through all 3 potentiometer pins (10 – 12) | |
| for(byte pin = 10; pin <= 12; pin++){ | |
| selectMuxPin(pin); // select one at a time | |
| if(pin == 10){ | |
| pot3 = analogRead(A0); // varies the size of inner spirograph | |
| }else if(pin == 11){ | |
| pot2 = analogRead(A0); // denominator for spirograph | |
| }else if(pin == 12){ | |
| pot1 = analogRead(A0); // numerator for spirograph | |
| } | |
| } | |
| delay(100); | |
| // loop through all 6 photocells (0 – 5) | |
| for(byte pin2 = 0; pin2 <= 5; pin2++){ | |
| selectMuxPin(pin2); // select one at a time | |
| if(pin2 == 0){ | |
| pc1 = analogRead(A0); | |
| }else if(pin2 == 1){ | |
| pc2 = analogRead(A0); | |
| }else if(pin2 == 2){ | |
| pc3 = analogRead(A0); | |
| }else if(pin2 == 3){ | |
| pc4 = analogRead(A0); | |
| }else if(pin2 == 4){ | |
| pc5 = analogRead(A0); | |
| }else if(pin2 == 5){ | |
| pc6 = analogRead(A0); | |
| } | |
| } | |
| // average all photocells | |
| sum = pc1 + pc2 + pc3 + pc4 + pc5 + pc6; | |
| average = sum/6; | |
| // print all the values | |
| Serial.print(pot1); // this is the one furthest to the left | |
| Serial.print(","); | |
| Serial.print(pot2); // middle | |
| Serial.print(","); | |
| Serial.print(pot3); // furthest right | |
| Serial.print(","); | |
| Serial.print(average); // average of all photocells | |
| Serial.print(","); | |
| Serial.println(buttonState); | |
| delay(100); | |
| } | |
| ///////////////////// | |
| // Helper Function // | |
| ///////////////////// | |
| // the selectMuxPin function sets the s0, s1, s2, and s3 pins accordingly, given a pin from 0 – 15 | |
| void selectMuxPin(byte pin){ | |
| for(int i = 0; i < 4; i++){ | |
| if(pin & (1<<i)) | |
| digitalWrite(selectPins[i], HIGH); | |
| else | |
| digitalWrite(selectPins[i], LOW); | |
| } | |
| } |