Part 1 - Ideation

Luming and I partnered up for this project. We were in between working on some sort of wearable but also interested in focusing on computation. Luming had the idea of creating a one-bit adder and we went with it. I find the relationship between basic computation and renewable energy interesting. Also a great opportunity to familiarize myself even more with bit values.

We started working on setting up the panel and measuring voltage. Because we need a steady source of power, we needed to focus on powering the panel in such a way that we could achieve that. We found a micro usb in the junk shelf, which we then realized wasn’t working and the reason why we weren’t getting enough voltage.

When connected directly to the source, we were able to get a constant 5V power.


Our next steps are figuring out how to power both solar panels (hopefully 3) with one power source and trying out different gates to see what works best. We are following this source:

Part 2 - GATES!

This part was without a doubt the most challenging. I had never worked with logic gates before so it was an awesome learning experience!

We started working on the gates one by one, separately and then trying to combine them. One of the most difficult parts was choosing the right resistor - it took A WHILE. Also something else I will never forget is not all transistors have the same setup so based on the model check where the emitter and the collector is.

Day 1

Day 2

Day 3

We finally did it!!

Part 3 - Fabrication

For our fabrication, we decided we wanted to have long wires and a “messy” aesthetic as a commentary on the inefficiency of computers. Here is where our project broke and we have been working on debugging.

On April 10th we finally managed to debug it and it worked using a battery. We still need to test it with the solar panels.

Updates coming soon.


Part 1 -

David, Tim & I met to over possible ideas and work on the first exercise, which was to light up an LED using kinetic energy.

Part 2 -

Our final group consisted of Tim, Rashida and I - it was really awesome working with them! After considering many possible ideas (i.e. a hoola hoop with LED’s going around it), Tim brought up how the functionality of a clock, in particular how the handles could serve to generate a response, could work to our advantage. With this in mind, we decided to create a “Chore Wheel” for the ITP kitchen.



We bought a clock from K-mart and started deconstructing it. We took the numbers off and handles off and discussed how we could use this existing product to our advantage. We measured the clock and ordered the parts. Initially were going to work with a stepper motor but, after talking to David Rios, decided a geared DC motor would be best.

We designed our clock face on Illustrator, then laser cut & etched it.



As for the circuit, we started by making sure we could generate enough energy to light up 6 LED’s, using the rectification circuit from class. Because of our desired functionality for this product, it was important for us to control the behavior of the LED’s but we didn’t want to overcomplicate the circuit. Rashida suggested we used an ATTiny 85 as she had some experience using them before. Referencing her previous documentation (it’s very useful and complete), we added a “blinking” code to one LED. Then we moved to a neo pixel strip.

The final circuit consisted of:

  • Rectifying circuit

  • Capacitor

  • LM7805 voltage regulator

  • NeoPixel strip


Tim worked on the code below.

* In order to properly randomize our function needed to include randomSeed(analogRead(2)); to our setup().

#include <Adafruit_NeoPixel.h>

#define NUM_LEDS 51
#define STRIP_PIN 3 // change that

unsigned int timeStamp = 0; // milliseconds
int timePeriod = 200; // milliseconds
byte LEDPosition = 0;
byte nextNum = 0;
byte chance = 2; // 2%
bool active = true;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, STRIP_PIN, NEO_GRB + NEO_KHZ800);

void setup() {

  timePeriod = random(30,150);


void loop() {
  if (millis() - timeStamp >= timePeriod && active){
    if (LEDPosition >= 0 && LEDPosition <= NUM_LEDS-5) {
      pixels.setPixelColor(LEDPosition, pixels.Color(255,255,255));
      pixels.setPixelColor(LEDPosition+1, pixels.Color(255,255,255)); 
      pixels.setPixelColor(LEDPosition+2, pixels.Color(255,255,255)); 
      pixels.setPixelColor(LEDPosition+3, pixels.Color(255,255,255));
      pixels.setPixelColor(LEDPosition+4, pixels.Color(255,255,255));
      pixels.setPixelColor(LEDPosition+5, pixels.Color(255,255,255));
    } else {
      pixels.setPixelColor(LEDPosition, pixels.Color(255,255,255));
      for(int i=1; i<=5; i++){
        nextNum = LEDPosition+i;
        if (nextNum > NUM_LEDS){

        pixels.setPixelColor(nextNum, pixels.Color(255,255,255));
    if (LEDPosition == NUM_LEDS+1) {
      LEDPosition = 0;
    if (random(0,100) <= chance){
      active = false;
    timeStamp = millis();