Pathways
Moire Kinetic Sculpture
Moire Kinetic Sculpture
For this project, we are going to have to create a kinetic sculpture with two moires and multiple RGB LEDs.
Constraints
To complete this project, we have to follow many constraints to challenge our skills, and to make the best end product possible. Above is our list of constraints.
Benchmarks
The benchmarks are here to keep us on track. Every class, we should be working on these to get closer to the end result.
1st Benchmark: Parent Gear 2x Speed of the Child Gear.
To complete this benchmark, your parent gear has to be the smaller of the two gears, and the parent gear has to be twice as small.
Gear Box, Parent and Child same direction
To get the gears to go the same direction, I used a third gear to go in between the two to turn it in the right direction.
LED's go RGB
Using code I found on the internet, I was able make the LED go R, G, & B.
Get a servo to rotate right and left.
For this constraint, I had to find code off the internet to continuously move a servo motor from left to right. This video shows that servo moving.
Laser Cut Name in Cardboard
Using the software Retina Engrave, I made an oval with my name in it, and laser cut it into a piece of cardboard.
Two Morie Sketches
The shown images above are of my two morie sketches. They share the same radial distance and they have repetition of form within each and together.
Laser cut Pumpkin
I used an Aurdino to make an RGB LED go red, yellow, and orange inside of my laser cut pumpkin.
Two Servos Plus RGB
Using an Arduino and a breadboard, I made two servo motors and a RGB LED work at the same time.
Moire Design 1 & 2 Completed
Using the software Inkscape, I created and designed two Moires for my final kinetic sculpture.
Moire Design Created From Cardboard.
I used my design from Inkscape, and the software Retina engrave, I laser cut both of my Moires out of cardboard.
Servo Mount
Using Inkscape, I created a cardboard servo mount by measuring the servo and getting the correct dimensions for the CAD file.
Gear Box
With the help from a friend, I was able to use cardboard and wooden gears to create a functioning gearbox.
Prototype Cardboard Stack
With the files generously given to me by my teacher, I was able to laser cut all of the separate cardboard components needed to create my final cardboard prototype.
Final Cardboard Prototype
3D Solid Works File
The file I used as a blueprint to build my own prototype.
Working Moire Prototype
The reason of having a functional prototype is so you know what you're doing and so you know everything is working how it should be so any changes can be made before creating your final product. The materials were preventing the prototype from working correctly, and this problem can be solved by using wood as the final material. The solidworks file needs a bigger hole for the baring, and mounting holes for the Arduino. My Moires need holes in the center for the wooden dowels.
Code for Moire Sculpture
The code that has been uploaded to my Arduino to make the LEDs and servos move at the same time.
Code For Moires
// Include the Servo library
#include <Servo.h>
#define COMMON_ANODE
// Declare the Servo pin
int servoPin = 3;
int servoPin2 = 5;
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
// Create a servo object
Servo Servo1;
Servo Servo12;
void setup() {
// We need to attach the servo to the used pin number
Servo1.attach(servoPin);
Servo12.attach(servoPin2);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop(){
setColor(0, 0, 255); // green
delay(500);
setColor(200, 0, 250); // green
delay(500);
setColor(0, 25, 25); // blue
delay(500);
// Make servo go to 0 degrees
Servo1.write(0);
delay(1000);
// Make servo go to 90 degrees
Servo1.write(90);
delay(1000);
// Make servo go to 180 degrees
Servo1.write(180);
delay(1000);
setColor(0, 0, 255); // green
delay(500);
setColor(200, 0, 250); // green
delay(500);
setColor(0, 25, 25); // blue
delay(500);
// Make servo go to 0 degrees
Servo12.write(0);
delay(1000);
// Make servo go to 90 degrees
Servo12.write(90);
delay(1000);
// Make servo go to 180 degrees
Servo12.write(180);
delay(1000);
setColor(0, 0, 255); // green
delay(500);
setColor(200, 0, 250); // green
delay(500);
setColor(0, 25, 25); // blue
delay(500);
}
void setColor(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);
}
Install Servos
Using my two servos, and servo screws, I attached my servos to my middle acrylic section of my moire.
Cut out first moire
Using the Glow Forge laser cutter, I was able to cut out my first final moire.
Cut out second Moire
Using the Glow Forge laser cutter, I was able to cut out my second final moire.
LED's go RGB
Using the skills I acquired from the beginning of this project, I was able to make the 8 RGB LEDs go red, green, and blue on my final moire sculpture.
Moires are independently controlled by servos.
I coded my two servos so that they move independently from each other.
Installed Arduino
I installed the Arduino onto my middle acrylic with two small screws.
Assembled three layers
Using the three acrylic pieces given to me by my teacher, I was able to assemble the electronics on the middle acrylic, then add the front and back to complete the look.
Servos do three Patterns
I have coded my RGB LEDs so they will move in three different patterns. They start by both going to the right, then they move opposite directions, and finally, they both move to the left.
LEDs do 3 Patterns
I have coded my RGB LEDs to flash purple and white, blue and orange, and purple and light blue.
Final Kinetic Sculpture
After months of work, this sculpture is finished. It lites up using RGB LEDs, and moves with the help of servos and I coded everything to be unique to my sculpture.
Final Code for Moire
void loop() {
setColor(0, 255, 100);
delay(1000);
myservo.write(180);
delay(2000);
setColor(0, 255, 0);
delay(1000);
setColor(0, 0, 100);
delay(1000);
setColor(0, 255, 0);
delay(100);
setColor(0, 0, 100);
delay(100);
setColor(0, 255, 0);
delay(1000);
setColor(0, 0, 100);
delay(1000);
setColor(0, 255, 0);
delay(100);
setColor(0, 0, 100);
delay(1000);
setColor(0, 255, 0);
delay(1000);
setColor(0, 0, 100);
delay(100);
setColor(0, 255, 0);
delay(100);
setColor(0, 0, 100);
delay(100);
setColor(0, 255, 0);
delay(1000);
setColor(0, 0, 100);
delay(1000);
setColor(0, 255, 0);
delay(100);
setColor(0, 0, 100);
delay(100);
myservo2.write(180);
delay(2000);
myservo.write(0);
delay(4000);
setColor(0, 0, 255);
delay(100);
setColor(255, 0, 0);
delay(1000);
setColor(0, 0, 255);
delay(1000);
setColor(255, 0, 0);
delay(100);
setColor(0, 0, 255);
delay(100);
setColor(255, 0, 0);
delay(100);
setColor(0, 0, 255);
delay(100);
setColor(255, 0, 0);
delay(1000);
setColor(0, 0, 255);
delay(1000);
setColor(255, 0, 0);
delay(100);
setColor(0, 0, 255);
delay(100);
setColor(255, 0, 0);
delay(100);
setColor(0, 0, 255);
delay(100);
setColor(255, 0, 0);
delay(100);
setColor(0, 0, 255);
delay(1000);
setColor(255, 0, 0);
delay(1000);
setColor(0, 0, 255);
delay(100);
setColor(255, 0, 0);
delay(100);
setColor(0, 0, 255);
delay(1000);
setColor(255, 0, 0);
delay(1000);
myservo.write(180);
delay(4000);
myservo2.write(70);
delay(2000);
setColor(255, 0, 0);
delay(1000);
setColor(0, 255, 0);
delay(1000);
setColor(100, 255, 50);
delay(100);
setColor(255, 0, 0);
delay(100);
setColor(0, 255, 0);
delay(100);
setColor(100, 255, 50);
delay(1000);
setColor(255, 0, 0);
delay(1000);
setColor(0, 255, 0);
delay(100);
setColor(100, 255, 50);
delay(100);
setColor(255, 0, 0);
delay(100);
setColor(0, 255, 0);
delay(100);
setColor(100, 255, 50);
delay(100);
setColor(255, 0, 0);
delay(1000);
setColor(0, 255, 0);
delay(1000);
setColor(100, 255, 50);
delay(100);
setColor(255, 0, 0);
delay(100);
setColor(0, 255, 0);
delay(100);
setColor(100, 255, 50);
delay(100);
setColor(255, 0, 0);
delay(100);
setColor(0, 255, 0);
delay(100);
setColor(100, 255, 50);
delay(100);
setColor(255, 0, 0);
delay(1000);
setColor(0, 255, 0);
delay(1000);
setColor(100, 255, 50);
delay(100);
myservo2.write(70);
delay(2000);
myservo.write(180); // set servo to mid-piont
delay(3000);
setColor(0, 255, 0); // green
delay(100);
setColor(255, 0, 255);
delay(100);
setColor(0, 255, 0); // green
delay(1000);
setColor(255, 0, 255);
delay(1000);
setColor(0, 255, 0); // green
delay(100);
setColor(255, 0, 255);
delay(100);
setColor(0, 255, 0); // green
delay(100);
setColor(255, 0, 255);
delay(100);
setColor(0, 255, 0); // green
delay(100);
setColor(255, 0, 255);
delay(100);
setColor(0, 255, 0); // green
delay(100);
setColor(255, 0, 255);
delay(100);
setColor(0, 255, 0); // green
delay(1000);
setColor(255, 0, 255);
delay(1000);
setColor(0, 255, 0); // green
delay(100);
setColor(255, 0, 255);
delay(100);
}
void setColor(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);
}