Ms. White gave us the project brief for our project. It is a Moire Kinetic Sculpture.
Here is a list of constraints for the project.
Each of the things in the honeycomb is one of the benchmarks we need to complete for our project.
In our first benchmark, we had to build a simple gear box that had the parent gear rotating twice as fast as the child gear. In order to do this I had to mark one point on each gear. Once the smaller gear rotated completely, the mark on the larger gear was half way around.
We had to build a simple gear box that had the parent gear rotating the same as the child gear. I used
We had to make the LEDS turn red, green, and blue. To do this we had to put code into the arduino software. Then, we had to verify that code. Finally, we would upload it and it would work. We had to change the code a little in order to make it only go red, green, and blue.
We had to draw two sketches of our moire design. It had to have repetition at the same radial distance. It also had to have repetition of form within each and together.
We had to mke the LEDs work while two servos were working. To do this we had to properly combine the code of both the LEDs and the servos together. Then, we had to verify that code. Finally, we would upload it and it would work. There was also a great deal of wiring involved.
We had to laser cut our names into cardboard. First we would put our names into the software. Then, we would render them. Finally, the laser would use that rendered model and cut it into cardboard.
We had to make the servo rotate both ways. To do this, I first uploaded code for the servo. Then, I verified that code. Finally, I uploaded it and it worked.
We had to create pumpkins with LEDs inside. The LEDs had to flash yellow, orange, and red. It is hard to see in the video because of the camera but the LEDs are flashing yellow, orange, and red. We also had to laser cut the pumpkin face and back. There had to be three straight edges and three curved edges.
I made two moire designs. To do this I first used Ms. White's circle template to paste a shape on to it. Then, I cloned that shape and made the clones rotate around the circle. Finally, I joined them together so that they were one object.
We had to print out our moire designs on cardboard. To do this, I uploaded my inkscape file onto a laser printing software. Then I clicked play and it did the job. There was a problem with it however so it didn't print properly due to the file.
We had to make a gear box using cardboard, wood cylinders, toothpicks, and wood gears. This gear box had to have to different disks. Each disk had to rotate idependently from the other.
We had to print out our moire designs on cardboard. To do this, I uploaded my inkscape file onto a laser printing software. Then I clicked play and it did the job.
We had to create servo mounts. To do this I got the size of the servo and the holes. Then I put the sizes into Inkscape. Finally, I laser cut them out.
We had to have all our cardboard pieces cut out. The files were already in the computer so all I had to do was put cardboard in the laser cutter and press play.
This is my moire sculpture. It contains LEDs that change from pink to light blue. It also contains servos that rotate the disks in different patterns.
This is an image of the solid works file that was given to us. It contains a finished moire sculpture. We used this file to create our moire sculpture by looking at how the parts were connected. Once we finished observing the file, we recreated what we saw.
This is a video of the code I upoaded into my arduino that controlled my moire sculpture. It contains the code that made my LEDs turn light blue and pink. It also contains the code that rotates my servos. The code is the reason my servos rotate in different directions following a pattern that I designed.
#include <Servo.h>
Servo S1;
Servo S2;
int pos=0;
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
#define COMMON_ANODE
void setup() {
S1.attach(8);
S2.attach(7);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
RGB_color(255, 255, 0);
for (pos = 0; pos <= 180; pos += 1) {
S1.write(pos);
delay(15);
}
for (pos = 180; pos >= 0; pos -= 1) {
S1.write(pos);
delay(30);
}
RGB_color(0, 255, 255);
for (pos = 180; pos >= 0; pos -= 1) {
S2.write(pos);
delay(20);
}
RGB_color(255, 255, 255);
for (pos = 0; pos <= 0; pos += 1) {
S2.write(pos);
delay(25);
}
}
void RGB_color(int red, int green, int blue)
{
#ifdef COMMON_ANODE
red = 255 - red;
green = 255 - green;
blue = 255 - blue;
#endif
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
The purpose of a functional prototype is to capture both the function and appearance of the intended design. The other purpose is for you to know how to properly build it without making mistakes on the actual finished product because you made the mistakes during the prototyping stage. The cardboard gears prevented my cardboard prototype from functioning properly. The hole for the bearing needs to be expanded along with the holes for the LEDs because wood and acrylic will not allow you to just shove them in there. I need to add a hole in the center of my moire file. In the moire file, one of the gears covers one of the LED holes which tarnishes the overall aesthetic. I would move the hole in a way that gives room for both of them which would improve the overall aesthetic.
We were instructed to install our two servos into our acrylic. To do this we were given four screws. Two screws would be used to secure one servo while the other two screws were used to secure the other servo.
In order to complete this benchmark, we had to cut out our moires from wood. To do this, I brought up the file on the glowforge software. Next, I selected cut and positioned my moire file properly on the wood. Finally, I pressed cut on the glowforge software and then pressed the button on the actual glowforge.
In order to complete this benchmark, we had to cut out our moires from wood. To do this, I brought up the file on the glowforge software. Next, I selected cut and positioned my moire file properly on the wood. Finally, I pressed cut on the glowforge software and then pressed the button on the actual glowforge.
I placed my LEDs in my acryllic. Then, I glued them in using superglue. After that, I soldered them together and they went RGB.
I made my moires turn independently. To do this I glued everything to my shaft. That includes my moires, my spacers, and my gears. I did this in a certain order that allowed them to function properly.
I gave my servos three different motion patterns.
To do this I first drilled holes into my acrylic. Then, I properly fitted the Arduino over my holes. After that, I screwed it in. Finally, it was sturdy and in place.
I took my acrylic pieces and fitted on to the dowels that I installed. After that, I super-glued my wood frame pieces that I painted black onto my acrylic pieces.
My lights do three different patterns. First, they fade in and out with pink and purple and then flash purple multiple times. Second, they flash purple and then go solid pink multiple times. Last, they go solid purple and then solid pink multiple times. This was probably the hardest thing to do.
This is my final Moire code.
int redPin = 9;
int greenPin = 10;
int bluePin = 11;
//uncomment this line if using a Common Anode LED
#define COMMON_ANODE
#include <Servo.h>
Servo myservo1;
Servo myservo2;
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
myservo1.attach(7);
myservo2.attach(8);
myservo1.write(90); // set servo to mid-piont
myservo2.write(90);
}
void loop()
{
myservo1.write(180);
delay(2300);
myservo2.write(-180);
delay(2300);
setColor(15, 0, 15); // red
delay(100);
setColor(30, 0, 30); // red
delay(100);
setColor(60, 0, 60); // red
delay(100);
setColor(120, 0, 120); // red
delay(100);
setColor(255, 0, 255); // red
delay(100);
setColor(120, 0, 60); // red
delay(100);
setColor(60, 0, 30); // red
delay(100);
setColor(30, 0, 15); // red
delay(100);
setColor(15, 0, 7.5); // red
delay(100);
setColor(7.5, 0, 15); // red
delay(100);
setColor(15, 0, 30); // red
delay(100);
setColor(30, 0, 60); // red
delay(100);
setColor(60, 0, 120); // red
delay(100);
setColor(170, 0, 255); // red
delay(100);
setColor(120, 0, 60); // red
delay(100);
setColor(60, 0, 30); // red
delay(100);
setColor(30, 0, 15); // red
delay(100);
setColor(15, 0, 7.5); // red
delay(100);
setColor(30, 0, 30); // red
delay(100);
setColor(60, 0, 60); // red
delay(100);
setColor(120, 0, 120); // red
delay(100);
setColor(255, 0, 255); // red
delay(100);
setColor(60, 0, 120); // red
delay(100);
setColor(30, 0, 60); // red
delay(100);
setColor(15, 0, 30); // red
delay(100);
setColor(7.5, 0, 15); // red
delay(100);
myservo1.write(-180);
delay(900);
myservo2.write(-180);
delay(900);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
myservo1.write(180);
delay(2300);
myservo2.write(-180);
delay(2300);
setColor(15, 0, 15); // red
delay(100);
setColor(30, 0, 30); // red
delay(100);
setColor(60, 0, 60); // red
delay(100);
setColor(120, 0, 120); // red
delay(100);
setColor(255, 0, 255); // red
delay(100);
setColor(120, 0, 60); // red
delay(100);
setColor(60, 0, 30); // red
delay(100);
setColor(30, 0, 15); // red
delay(100);
setColor(15, 0, 7.5); // red
delay(100);
setColor(7.5, 0, 15); // red
delay(100);
setColor(15, 0, 30); // red
delay(100);
setColor(30, 0, 60); // red
delay(100);
setColor(60, 0, 120); // red
delay(100);
setColor(170, 0, 255); // red
delay(100);
setColor(120, 0, 60); // red
delay(100);
setColor(60, 0, 30); // red
delay(100);
setColor(30, 0, 15); // red
delay(100);
setColor(15, 0, 7.5); // red
delay(100);
setColor(30, 0, 30); // red
delay(100);
setColor(60, 0, 60); // red
delay(100);
setColor(120, 0, 120); // red
delay(100);
setColor(255, 0, 255); // red
delay(100);
setColor(60, 0, 120); // red
delay(100);
setColor(30, 0, 60); // red
delay(100);
setColor(15, 0, 30); // red
delay(100);
setColor(7.5, 0, 15); // red
delay(100);
myservo1.write(-180);
delay(900);
myservo2.write(-180);
delay(900);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
myservo1.write(180);
delay(2300);
myservo2.write(-180);
delay(2300);
setColor(15, 0, 15); // red
delay(100);
setColor(30, 0, 30); // red
delay(100);
setColor(60, 0, 60); // red
delay(100);
setColor(120, 0, 120); // red
delay(100);
setColor(255, 0, 255); // red
delay(100);
setColor(120, 0, 60); // red
delay(100);
setColor(60, 0, 30); // red
delay(100);
setColor(30, 0, 15); // red
delay(100);
setColor(15, 0, 7.5); // red
delay(100);
setColor(7.5, 0, 15); // red
delay(100);
setColor(15, 0, 30); // red
delay(100);
setColor(30, 0, 60); // red
delay(100);
setColor(60, 0, 120); // red
delay(100);
setColor(170, 0, 255); // red
delay(100);
setColor(120, 0, 60); // red
delay(100);
setColor(60, 0, 30); // red
delay(100);
setColor(30, 0, 15); // red
delay(100);
setColor(15, 0, 7.5); // red
delay(100);
setColor(30, 0, 30); // red
delay(100);
setColor(60, 0, 60); // red
delay(100);
setColor(120, 0, 120); // red
delay(100);
setColor(255, 0, 255); // red
delay(100);
setColor(60, 0, 120); // red
delay(100);
setColor(30, 0, 60); // red
delay(100);
setColor(15, 0, 30); // red
delay(100);
setColor(7.5, 0, 15); // red
delay(100);
myservo1.write(-180);
delay(900);
myservo2.write(-180);
delay(900);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
myservo1.write(180);
delay(1000);
myservo2.write(180);
delay(1000);
setColor(255, 0, 100); // blue
delay(1000);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
myservo1.write(180);
delay(1000);
myservo2.write(180);
delay(1000);
setColor(255, 0, 100); // blue
delay(1000);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
setColor(100, 0, 100); // green
delay(100);
setColor(255, 0, 255); // green
delay(100);
myservo1.write(180);
delay(100);
myservo2.write(180);
delay(100);
setColor(255, 0, 100); // blue
delay(1000);
setColor(255, 0, 255); // blue
delay(1000);
setColor(255, 0, 100); // blue
delay(1000);
setColor(255, 0, 255); // blue
delay(1000);
setColor(255, 0, 100); // blue
delay(1000);
setColor(255, 0, 255); // blue
delay(1000);
}
void setColor(int red, int green, int blue)
{
#ifdef COMMON_ANODE
red = 255 - red;
green = 255 - green;
blue = 255 - blue;
#endif
analogWrite(redPin, red); //red
analogWrite(greenPin, green); //green
analogWrite(bluePin, blue); //blue
}