Introduction: The Introvert Light

About: My name is Rutger Oomkes and iI am a silicone jewelry designer. Further i worked at the creative care lab Waag in Amsterdam My true passion is creating functional art. At this moment my favorite materials are …

This year i made a robotic light that reacts on distance and can move accordingly. It has sonar, three servo's and Neopixel lighting. For this design i made a custom pcb board for the electronics but can be realized also using arduino. I programmed the light as being a introvert but you can alter the behavior using arduino code. A nice visual introduction in electronics and coding.

I have used digital fabrication to realize this robotic light. 3d printing, lasercutting, cnc milling and pcb milling. For the arm i have used accrilic using the lasercutter. For the base i constructed a 3 part wooded base to be able to place the electronic inside. The head light and sonar cover is made with pla using 3d printers.

I followed this year the fab academy "how to make almost everything" and this was my final assignment for this study. I think this is a good tool for teachers to introduce electronic and coding and made my design fully opensourced. Under the licence: Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)

When you are interested in seeing the full documentation including errors made in the process you can check on

http://www.fabacademy.org/2019/labs/waag/students/...

BOM Bill of material¶
acrifix-192-acrylaat-lijm-tube-100-gram: (Dokter Plexiglas) €15.95

Acrylic frost 5.8 mm 50 cm by 50 cm: (Dokter Plexigas) €40.-

Multiplex wood 24mm 136 cm by 38 cm: (Houthandel Schmidt Amsterdam) €24

3 TowerPro MG958 Servo A €12.95

(Hobby electronica) €38.85

2 HC SR04 SONAR A €2.95

(Radio rotor Amsterdam) €5.90

1 5v 3A Adapter VOLTCRAFT (Conrad) €7.75

WS2812b neopixel (ledkoning) €22.90

cost: €155.35

Filament yellow pla Waag fablab inventory €14.-

Atmega 328 P au Waag fablab inventory €1.63

avrismpd Waag fablab inventory €0.87

Ftdi header Waag fablab inventory €0.53

Capicitor 1 uF Waag fablab inventory €0.26

4 X capicitor 100 uF Waag fablab inventory

€1.04micro usb connector Waag fablab inventory €0.62

Male connectors Waag fablab inventory €0.89

20 Mhz resonator Waag fablab inventory €0.75

Led RED Waag fablab inventory €0.14

resistor 10 K Waag fablab inventory €0.025

Resistor 1 K Waag fablab inventory €0.03

Resistor 330 OHM Waag fablab inventory €0.02

Resistor 0 OHM Waag fablab inventory €0.02

6 mm switch button Waag fablab inventory €0.65

Cost fablab €21.75

Total Cost: €177.10

Using different materials for the robotic light can lower the price greatly.

Step 1: Making the Accrilic Parts

I chose for acrylic to make the arms of the robotic light. I like the aesthetic of it and thanks to its smooth surface the light is able to spin using high torque servo's. The acrylic used is frost clear 5.8 mm thick. The design is added in a svg file and ready for laser cutting. All the different parts are connected using acrifix. A special glue for acrylic that melts the parts together for a strong connection. This is a UV curing glue curing in around 20 minutes. In the places where the servo's are installed i made room for the wiring to go though and handle the rotation of the arms. The part where the rotor of the servo is placed is engraved so the rotor won't be able to move. It is best to go for a high torque servo with metal gears. The different arms are held together using a screw through the rotor. Before adding glue to the arms check that the rotation happens smooth and the surface of the acrylic are tight placed on each other. For the light used the same acrylic and engrave the parts where the neopixels will come. This part should fit nice in the part of the 3d printed light.

Step 2: Creating the Base

Since the design will be rotating the base need to be heavy enough to support the light. I decided to make the base with triplex 24 mm thick. The diameter is 25 cm and consist of three rings. The middle one is hollow from the inside to place the electronics, the sonar and the accrilic plate to hold the bottom servo in place. The parts are designed for a press fit connection. Using a cnc machine i cutted and engraved the parts out. The file of the design is added in f3d (fusion 360)

Step 3: 3d Printing the Headlicht.

The light and the cover for the sonar i designed in fusion 360. A free available software using a free licence for teachers, students, start up and hobbyist. The base of the light need to be connected to the acrylic base with the rotating part of the servo. The base i designed similar to the acrylic parts of the arms. I wanted to create a small bend in the base to give the light character. I designed it in a way that there is space for the accrilic plate where the rgb led will be installed. To keep this on place i designed the light in two parts. The base and clickable add on's. Made three different add on's to give the light a specific character. The stl files are ready to print.

Step 4: Making the Electronics

For this design i made a custom pcb board to control the servo's, sonar and neo pixel lighting. This can be done using a arduino with the additional components. In my design i made the error placing the buttons not on a signal pin. That means that the buttons does not have the programmable options i would like to see like changing the color or changing movement using the buttons. Keep in mind where to place them in your design. Further i started with problem controlling the servo's using same power as the board. Therefor i created another pcb board next to the main board to be able to power them separately.

Step 5:

Step 6: Programming the Robotic Light

When all the hardware is done its time to program the light. I have used arduino IDE for the programming part. This was my introduction in coding so i found i difficult to create a good working code. I started testing all the parts separately before combining the code. Started of with one sonar, then two sonar. One servo, two servo, all the servo's and the neopixel RGB led. When i had them working separately i finnaly combined them to the final code. Now the light react on both sonar and the servo's move and neo pixel change color accordingly to the distance. In my version the light is mostly shy and moves away when coming closer and aggressively when coming to close but this is up to you to reprogram the light for a different behavior. For the servo's i used a library varspeedservo to make the movement more smooth. For the Neopixel i used the adafruit library. The code i made is clearly not the most efficient way of controlling the light but it is easy to make adjustments in the servo's and neopixels. Curieus what the students come up with.

I was not able to upload the code file here. I added the code underneath.

''

//Sonar
int rxPin = 0; // this is simular to the int = setting, however this is linked to the library int txPin = 1; int trig = 16; int echo = 17; int trig1 = 18; int echo1 = 19; long lecture_echo; long cm; long cm1; int timeout = 1000;

#include VarSpeedServo myservo1; // create servo object to control a servo // a maximum of eight servo objects can be created VarSpeedServo myservo2;

VarSpeedServo myservo3; const int servoPin1 = 9; // the digital pin used for the first servo const int servoPin2 = 10; // the digital pin used for the second servo const int servoPin3 = 5;

#include #define PIN 3 #define NUM_LIGHTS 20

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LIGHTS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {

myservo1.attach(servoPin1); // attaches the servo on pin 9 to the servo object myservo2.attach(servoPin2); // attaches the servo on pin 9 to the servo object myservo3.attach(servoPin3); // attaches the servo on pin 9 to the servo object

pinMode(trig, OUTPUT); digitalWrite(trig, LOW); pinMode(echo, INPUT); pinMode(trig1, OUTPUT); digitalWrite(trig1, LOW); pinMode(echo1, INPUT); Serial.begin(9600);

strip.begin(); strip.clear(); strip.show();

}

void loop() { digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); lecture_echo = pulseIn(echo, HIGH, timeout*1000); cm1 = lecture_echo / 58; Serial.print ("sonar 1 in cm: "); Serial.println(cm1);

digitalWrite(trig1, HIGH); delayMicroseconds(10); digitalWrite(trig1, LOW); lecture_echo = pulseIn(echo1, HIGH, timeout*1000); //timeout in micro seconden cm = lecture_echo / 58;

Serial.print ("sonar 2 in cm: "); Serial.println(cm); delay(1000);

if(cm > 110 && cm < 150 ){

strip.setPixelColor(0, 0, 0, 0); strip.setPixelColor(1, 0, 0, 0); strip.setPixelColor(2, 0, 0, 0); strip.setPixelColor(3, 0, 0, 0); strip.setPixelColor(4, 0, 0, 0); strip.setPixelColor(5, 0, 0, 0); strip.setPixelColor(6, 0, 0, 0); strip.setPixelColor(7, 0, 0, 0); strip.setPixelColor(8, 0, 0, 255); strip.setPixelColor(9, 0, 0, 0); strip.setPixelColor(10, 0, 0, 0); strip.setPixelColor(11, 0, 0, 0); strip.setPixelColor(12, 0, 0, 255); strip.setPixelColor(13, 0, 0, 0); strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0); strip.setPixelColor(16, 0, 0, 0); strip.setPixelColor(17, 0, 0, 0); strip.setPixelColor(18, 0, 0, 0); strip.setPixelColor(19, 0, 0, 0); strip.show();

myservo1.write(30,10,true); myservo3.write(170,50,true); delay(500); }

if(cm1 > 110 && cm1 < 150 ){

strip.setPixelColor(0, 0, 0, 0); strip.setPixelColor(1, 0, 0, 0); strip.setPixelColor(2, 0, 0, 0); strip.setPixelColor(3, 0, 0, 0); strip.setPixelColor(4, 0, 0, 0); strip.setPixelColor(5, 0, 0, 0); strip.setPixelColor(6, 0, 0, 0); strip.setPixelColor(7, 0, 0, 0); strip.setPixelColor(8, 0, 0, 255); strip.setPixelColor(9, 0, 0, 0); strip.setPixelColor(10, 0, 0, 0); strip.setPixelColor(11, 0, 0, 0); strip.setPixelColor(12, 0, 0, 255); strip.setPixelColor(13, 0, 0, 0); strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0); strip.setPixelColor(16, 0, 0, 0); strip.setPixelColor(17, 0, 0, 0); strip.setPixelColor(18, 0, 0, 0); strip.setPixelColor(19, 0, 0, 0); strip.show();

myservo1.write(150,10,true); myservo3.write(10,50,true); delay(500); }

if(cm > 80 && cm < 110 ){

strip.setPixelColor(0, 0, 255, 208); strip.setPixelColor(1, 0, 255, 208); strip.setPixelColor(2, 0, 255, 208); strip.setPixelColor(3, 0, 255, 208); strip.setPixelColor(4, 0, 255, 208); strip.setPixelColor(5, 0, 255, 208); strip.setPixelColor(6, 0, 255, 208); strip.setPixelColor(7, 0, 255, 208); strip.setPixelColor(8, 0, 0, 255); strip.setPixelColor(9, 0, 255, 208); strip.setPixelColor(10, 0, 255, 208); strip.setPixelColor(11, 0, 255, 208); strip.setPixelColor(12, 0, 0, 255); strip.setPixelColor(13, 0, 255, 208); strip.setPixelColor(14, 0, 255, 208); strip.setPixelColor(15, 0, 255, 208); strip.setPixelColor(16, 0, 255, 208); strip.setPixelColor(17, 0, 255, 208); strip.setPixelColor(18, 0, 255, 208); strip.setPixelColor(19, 0, 255, 208); strip.show();

myservo1.write(50,20,true); myservo2.write(130,20,true); myservo3.write(130,20,true); delay(500); myservo3.write(50,20,true); myservo1.write(130,20,true); myservo2.write(50,20,true); delay(500); myservo1.write(50,20,true); myservo2.write(130,20,true); myservo3.write(130,20,true); delay(500); myservo3.write(50,20,true); myservo1.write(130,20,true); myservo2.write(50,20,true); delay(500); } if(cm1 > 80 && cm1 < 110 ){

strip.setPixelColor(0, 255, 173, 196); strip.setPixelColor(1, 255, 173, 196); strip.setPixelColor(2, 255, 173, 196); strip.setPixelColor(3, 255, 173, 196); strip.setPixelColor(4, 255, 173, 196); strip.setPixelColor(5, 255, 173, 196); strip.setPixelColor(6, 255, 173, 196); strip.setPixelColor(7, 255, 173, 196); strip.setPixelColor(8, 0, 0, 255); strip.setPixelColor(9, 255, 173, 196); strip.setPixelColor(10, 255, 173, 196); strip.setPixelColor(11, 255, 173, 196); strip.setPixelColor(12, 0, 0, 255); strip.setPixelColor(13, 255, 173, 196); strip.setPixelColor(14, 255, 173, 196); strip.setPixelColor(15, 255, 173, 196); strip.setPixelColor(16, 255, 173, 196); strip.setPixelColor(17, 255, 173, 196); strip.setPixelColor(18, 255, 173, 196); strip.setPixelColor(19, 255, 173, 196); strip.show();

myservo1.write(50,20,true); myservo2.write(130,20,true); myservo3.write(130,20,true); delay(500); myservo3.write(50,20,true); myservo1.write(130,20,true); myservo2.write(50,20,true); delay(500); myservo1.write(50,20,true); myservo2.write(130,20,true); myservo3.write(130,20,true); delay(500); myservo3.write(50,20,true); myservo1.write(130,20,true); myservo2.write(50,20,true); delay(500); } if(cm > 55 && cm < 80 ){ strip.setPixelColor(0, 229, 142, 13); strip.setPixelColor(1, 229, 142, 13); strip.setPixelColor(2, 229, 142, 13); strip.setPixelColor(3, 229, 142, 13); strip.setPixelColor(4, 229, 142, 13); strip.setPixelColor(5, 229, 142, 13); strip.setPixelColor(6, 229, 142, 13); strip.setPixelColor(7, 229, 142, 13); strip.setPixelColor(8, 0, 0, 255); strip.setPixelColor(9, 229, 142, 13); strip.setPixelColor(10, 229, 142, 13); strip.setPixelColor(11, 229, 142, 13); strip.setPixelColor(12, 0, 0, 255); strip.setPixelColor(13, 229, 142, 13); strip.setPixelColor(14, 229, 142, 13); strip.setPixelColor(15, 229, 142, 13); strip.setPixelColor(16, 229, 142, 13); strip.setPixelColor(17, 229, 142, 13); strip.setPixelColor(18, 229, 142, 13); strip.setPixelColor(19, 229, 142, 13);

strip.show();

myservo3.write(135,20,true); myservo3.write(45,20,true); myservo3.write(135,20,true); myservo3.write(45,20,true);

} if(cm1 > 55 && cm1 < 80 ){ strip.setPixelColor(0, 229, 142, 13); strip.setPixelColor(1, 229, 142, 13); strip.setPixelColor(2, 229, 142, 13); strip.setPixelColor(3, 229, 142, 13); strip.setPixelColor(4, 229, 142, 13); strip.setPixelColor(5, 229, 142, 13); strip.setPixelColor(6, 229, 142, 13); strip.setPixelColor(7, 229, 142, 13); strip.setPixelColor(8, 0, 0, 255); strip.setPixelColor(9, 229, 142, 13); strip.setPixelColor(10, 229, 142, 13); strip.setPixelColor(11, 229, 142, 13); strip.setPixelColor(12, 0, 0, 255); strip.setPixelColor(13, 229, 142, 13); strip.setPixelColor(14, 229, 142, 13); strip.setPixelColor(15, 229, 142, 13); strip.setPixelColor(16, 229, 142, 13); strip.setPixelColor(17, 229, 142, 13); strip.setPixelColor(18, 229, 142, 13); strip.setPixelColor(19, 229, 142, 13);

strip.show();

myservo3.write(45,20,true); myservo3.write(135,20,true); myservo3.write(45,20,true); myservo3.write(135,20,true);

} if(cm > 30 && cm < 55 ){

strip.setPixelColor(0, 255, 79, 16); strip.setPixelColor(1, 255, 79, 16); strip.setPixelColor(2, 255, 79, 16); strip.setPixelColor(3, 255, 79, 16); strip.setPixelColor(4, 255, 79, 16); strip.setPixelColor(5,255, 79, 16); strip.setPixelColor(6, 255, 79, 16); strip.setPixelColor(7, 255, 79, 16); strip.setPixelColor(8, 0, 0, 255); strip.setPixelColor(9, 255, 79, 16); strip.setPixelColor(10,255, 79, 16); strip.setPixelColor(11,255, 79, 16); strip.setPixelColor(12, 0, 0, 255); strip.setPixelColor(13, 255, 79, 16); strip.setPixelColor(14, 255, 79, 16); strip.setPixelColor(15, 255, 79, 16); strip.setPixelColor(16,255, 79, 16); strip.setPixelColor(17, 255, 79, 16); strip.setPixelColor(18, 255, 79, 16); strip.setPixelColor(19, 255, 79, 16);

strip.show();

delay(1000);

myservo1.write(110,10,true); // move the servo to 180, fast speed, run background // write(degrees 0-180, speed 1-255, wait to complete true-false) myservo2.write(130,10,true); // move the servo to 180, fast speed, wait until done

delay(1000); myservo3.write(10,10,true);

delay(1000); myservo3.write(90,50,true);

delay(1000); myservo3.write(10,10,true);

delay(1000); myservo3.write(90,50,true); }

if(cm1 > 30 && cm1 < 55 ){

strip.setPixelColor(0, 255, 79, 16); strip.setPixelColor(1, 255, 79, 16); strip.setPixelColor(2, 255, 79, 16); strip.setPixelColor(3, 255, 79, 16); strip.setPixelColor(4, 255, 79, 16); strip.setPixelColor(5,255, 79, 16); strip.setPixelColor(6, 255, 79, 16); strip.setPixelColor(7, 255, 79, 16); strip.setPixelColor(8, 0, 0, 255); strip.setPixelColor(9, 255, 79, 16); strip.setPixelColor(10,255, 79, 16); strip.setPixelColor(11,255, 79, 16); strip.setPixelColor(12, 0, 0, 255); strip.setPixelColor(13, 255, 79, 16); strip.setPixelColor(14, 255, 79, 16); strip.setPixelColor(15, 255, 79, 16); strip.setPixelColor(16,255, 79, 16); strip.setPixelColor(17, 255, 79, 16); strip.setPixelColor(18, 255, 79, 16); strip.setPixelColor(19, 255, 79, 16);

strip.show();

delay(1000);

myservo1.write(70,10,true); // move the servo to 180, fast speed, run background // write(degrees 0-180, speed 1-255, wait to complete true-false) myservo2.write(50,10,true); // move the servo to 180, fast speed, wait until done

delay(1000); myservo3.write(170,10,true);

delay(1000); myservo3.write(90,50,true);

delay(1000); myservo3.write(170,10,true);

delay(1000); myservo3.write(90,50,true); }

if(cm > 10 && cm < 30 ){

strip.setPixelColor(0, 255, 37, 0); strip.setPixelColor(1, 255, 37, 0); strip.setPixelColor(2, 255, 37, 0); strip.setPixelColor(3, 255, 37, 0); strip.setPixelColor(4, 255, 37, 0); strip.setPixelColor(5, 255, 37, 0); strip.setPixelColor(6, 255, 37, 0); strip.setPixelColor(7, 255, 37, 0); strip.setPixelColor(8, 255, 255, 255); strip.setPixelColor(9, 255, 37, 0); strip.setPixelColor(10, 255, 37, 0); strip.setPixelColor(11, 255, 37, 0); strip.setPixelColor(12, 255, 255, 255); strip.setPixelColor(13, 255, 37, 0); strip.setPixelColor(14, 255, 37, 0); strip.setPixelColor(15, 255, 37, 0); strip.setPixelColor(16, 255, 37, 0); strip.setPixelColor(17, 255, 37, 0); strip.setPixelColor(18, 255, 37, 0); strip.setPixelColor(19, 255, 37, 0); strip.show();

delay(2000);

myservo1.write(150,30,true); // move the servo to 180, fast speed, run background // write(degrees 0-180, speed 1-255, wait to complete true-false) myservo2.write(150,30,true); // move the servo to 180, fast speed, wait until done myservo3.write(90,30,true);

delay(1000);

myservo2.write(60,30,true); myservo3.write(10,10,true); delay(1000); myservo3.write(160,50,true); myservo2.write(150,30,true); myservo3.write(90,40,true); delay(2000); } if(cm1 > 10 && cm1 < 30 ){

strip.setPixelColor(0, 255, 37, 0); strip.setPixelColor(1, 255, 37, 0); strip.setPixelColor(2, 255, 37, 0); strip.setPixelColor(3, 255, 37, 0); strip.setPixelColor(4, 255, 37, 0); strip.setPixelColor(5, 255, 37, 0); strip.setPixelColor(6, 255, 37, 0); strip.setPixelColor(7, 255, 37, 0); strip.setPixelColor(8, 255, 255, 255); strip.setPixelColor(9, 255, 37, 0); strip.setPixelColor(10, 255, 37, 0); strip.setPixelColor(11, 255, 37, 0); strip.setPixelColor(12, 255, 255, 255); strip.setPixelColor(13, 255, 37, 0); strip.setPixelColor(14, 255, 37, 0); strip.setPixelColor(15, 255, 37, 0); strip.setPixelColor(16, 255, 37, 0); strip.setPixelColor(17, 255, 37, 0); strip.setPixelColor(18, 255, 37, 0); strip.setPixelColor(19, 255, 37, 0); strip.show();

delay(2000);

myservo1.write(30,30,true); // move the servo to 180, fast speed, run background // write(degrees 0-180, speed 1-255, wait to complete true-false) myservo2.write(30,30,true); // move the servo to 180, fast speed, wait until done myservo3.write(90,30,true);

delay(1000);

myservo2.write(120,30,true); myservo3.write(170,10,true); delay(1000); myservo3.write(20,50,true); myservo2.write(30,30,true); myservo3.write(90,40,true); delay(2000); }

if(cm > 0 && cm < 10 ){

strip.setPixelColor(0, 255, 0, 0); strip.setPixelColor(1, 255, 0, 0); strip.setPixelColor(2, 255, 0, 0); strip.setPixelColor(3, 255, 0, 0); strip.setPixelColor(4, 255, 0, 0); strip.setPixelColor(5,255, 0, 0); strip.setPixelColor(6, 255, 0, 0); strip.setPixelColor(7, 255, 0, 0); strip.setPixelColor(8, 255, 255, 255); strip.setPixelColor(9, 255, 255, 255); strip.setPixelColor(10,255, 0, 0); strip.setPixelColor(11,255, 255, 255); strip.setPixelColor(12, 255, 255, 255); strip.setPixelColor(13, 255, 0, 0); strip.setPixelColor(14, 255, 0, 0); strip.setPixelColor(15,255, 0, 0); strip.setPixelColor(16, 255, 0, 0); strip.setPixelColor(17, 255, 0, 0); strip.setPixelColor(18, 255, 0, 0); strip.setPixelColor(19, 255, 0, 0);

strip.show();

delay(2000);

myservo1.write(140,30,true); // move the servo to 180, fast speed, run background // write(degrees 0-180, speed 1-255, wait to complete true-false) myservo2.write(40,30,true); // move the servo to 180, fast speed, wait until done myservo3.write(160,30,true); myservo1.write(140,30,true); // move the servo to 180, fast speed, run background myservo1.write(40,30,true); // write(degrees 0-180, speed 1-255, wait to complete true-false) myservo2.write(160,30,true); // move the servo to 180, fast speed, wait until done myservo3.write(40,30,true); }

if(cm1 > 0 && cm1 < 10 ){

strip.setPixelColor(0, 0, 0, 0); strip.setPixelColor(1, 255, 255, 255); strip.setPixelColor(2, 255, 255, 255); strip.setPixelColor(3, 0, 0, 0); strip.setPixelColor(4, 0, 0, 0); strip.setPixelColor(5,255, 255, 255); strip.setPixelColor(6, 255, 255, 255); strip.setPixelColor(7, 255, 255, 255); strip.setPixelColor(8, 0, 0,0); strip.setPixelColor(9, 255, 255, 255); strip.setPixelColor(10,0,0,0); strip.setPixelColor(11,255, 255, 255); strip.setPixelColor(12, 0, 0, 0); strip.setPixelColor(13, 255, 255, 255); strip.setPixelColor(14, 255, 255, 255); strip.setPixelColor(15,255, 255, 255); strip.setPixelColor(16, 0, 0, 0); strip.setPixelColor(17, 0, 0, 0); strip.setPixelColor(18, 255, 255, 255); strip.setPixelColor(19, 255, 255, 255);

strip.show();

delay(2000);

// move the servo to 180, fast speed, wait until done myservo3.write(160,60,true); myservo3.write(20,60,true); myservo3.write(160,60,true); myservo3.write(20,60,true); myservo1.write(50,10,true); // move the servo to 180, fast speed, run background myservo3.write(160,60,true); myservo3.write(20,60,true); myservo3.write(160,60,true); myservo3.write(20,60,true); myservo1.write(130,10,true); myservo3.write(160,60,true); myservo3.write(20,60,true); myservo3.write(160,60,true); myservo3.write(20,60,true); } else { // strip.begin(); strip.setPixelColor(0, 45, 126, 6); strip.setPixelColor(1, 45, 126, 6); strip.setPixelColor(2, 45, 126, 6); strip.setPixelColor(3, 45, 126, 6); strip.setPixelColor(4, 45, 126, 6); strip.setPixelColor(5, 45, 126, 6); strip.setPixelColor(6, 45, 126, 6); strip.setPixelColor(7, 45, 126, 6); strip.setPixelColor(8, 0, 0, 255); strip.setPixelColor(9, 45, 126, 6); strip.setPixelColor(10, 45, 126, 6); strip.setPixelColor(11, 45, 126, 6); strip.setPixelColor(12, 0, 0, 255); strip.setPixelColor(13, 45, 126, 6); strip.setPixelColor(14, 45, 126, 6); strip.setPixelColor(15, 45, 126, 6); strip.setPixelColor(16, 45, 126, 6); strip.setPixelColor(17, 45, 126, 6); strip.setPixelColor(18, 45, 126, 6); strip.setPixelColor(19, 45, 126, 6);

strip.show();

myservo1.write(75,10,true); // move the servo to 180, slow speed, run in background myservo2.write(90,10,true); myservo3.write(90,10,true);

} }

''

Robotics Contest

Second Prize in the
Robotics Contest