Homework - Rawi Fayad
Hello!
So what I had in mind was to light and animate (on a basic level) the pieces of a 'Tetris lamp' that no longer works (photo attached).
What I wanted to do was make the yellow box (the 'head') rotate/swivel, and possibly the 'arms' as well, using I imagine a standard servo actuator. As well as this, I'll be inserting various LEDs in the parts (Neopixel ring in the 'head', neopixel sticks/individual LEDs in the rest of the pieces)
I also initially considered adding sound/music to it (sound effects, or maybe the tetris music) but not sure I'd get around to buying/ordering and actually adding that in in time, so I'm not including that for the time being.
Materials (either owned or ordered and on their way)
- Arduino Nano & terminal
- NeoPixel ring (for the 'head')
- Neopixel stick
- LEDs
- Adafruit standard servo
- Solderless breadboard, jumper wires, 12V power supply, push-switches, etc
Other stuff I might need:
- Simple straight/angle brackets for connecting the pieces together
- Laser pointers on the 'arms'
- Very possibly will discover I missed something or have the wrong part at some point when I actually start putting it all together....
So what I had in mind was to light and animate (on a basic level) the pieces of a 'Tetris lamp' that no longer works (photo attached).

This image has been resized to fit in the page. Click to enlarge.
What I wanted to do was make the yellow box (the 'head') rotate/swivel, and possibly the 'arms' as well, using I imagine a standard servo actuator. As well as this, I'll be inserting various LEDs in the parts (Neopixel ring in the 'head', neopixel sticks/individual LEDs in the rest of the pieces)
I also initially considered adding sound/music to it (sound effects, or maybe the tetris music) but not sure I'd get around to buying/ordering and actually adding that in in time, so I'm not including that for the time being.
Materials (either owned or ordered and on their way)
- Arduino Nano & terminal
- NeoPixel ring (for the 'head')
- Neopixel stick
- LEDs
- Adafruit standard servo
- Solderless breadboard, jumper wires, 12V power supply, push-switches, etc
Other stuff I might need:
- Simple straight/angle brackets for connecting the pieces together
- Laser pointers on the 'arms'
- Very possibly will discover I missed something or have the wrong part at some point when I actually start putting it all together....
1
Comments
-
Here is the first peice of code I wrote so far, designed for a NeoPixel strip across the blue 'hip' bar. It is meant to light up each LED individually, then turn it off and move to the next one, etc. Once it gets to the end of the strip, it repeats in the opposite direction. Unfortunately as my components have only just arrived, I have not had a chance to test the code yet, but wanted to get started drafting it to see if it looks correct.
#include <Adafruit_NeoPixel.h>#include <avr/power.h>#define PIN 6void setup() {strip.begin();strip.show(); // Initialize all pixels to 'off'}//The following code individually turns on each LED in succession to white and moves across strip, back and forth, with each LED turning off before the next one turns onvoid loop() {for (int led=0; led<8; led++){strip.setPixelColor(led, 250, 250, 250);strip.show(); //turn on LED in whitedelay(10);strip.setPixelColor (led, 0, 0, 0);strip.show(); //turn off each LED before turning on the next onedelay(10)}for (int led=8; led>=0; led--){stip.setPixelColor(led, 250, 250, 250);strip.show(); //Same as above but in the other direction, starting at led no. 8delay(10);strip.setPixelColor (led, 0, 0, 0);strip.show();delay (10);}}0 -
This code is for the Neopixels on the 'arms' - pretty basic, just wants the LED strip to 'fill', ie light the LEDs successively, in one direction, then turn the strip off and start over.#include <Adafruit_NeoPixel.h>#include <avr/power.h>#define PIN 6void setup() {strip.begin();strip.show(); // Initialize all pixels to 'off'}void loop() {for (int led=0, led<8, led++)strip.setPixelColor (led, 250, 250, 250);strip.show();delay(10);}0
-
This code runs the 'head' ring and 'chest' strip, in succession. I want to see if I can get them going simultaneously.#include <Adafruit_NeoPixel.h>#include <avr/power.h>// Parameter 1 = number of pixels in strip// Parameter 2 = Arduino pin number (most are valid)// Parameter 3 = pixel type flags, add together as needed:// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)Adafruit_NeoPixel strip_head = Adafruit_NeoPixel(12, 5, NEO_GRB + NEO_KHZ800);Adafruit_NeoPixel strip_hip = Adafruit_NeoPixel(8, 6, NEO_GRB + NEO_KHZ800);// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input// and minimize distance between Arduino and first pixel. Avoid connecting// on a live circuit...if you must, connect GND first.void setup() {strip_head.begin();strip_head.show(); // Initialize all pixels to 'off'strip_hip.begin();strip_hip.show();}//The following code loops around the ring in red, white, and blue successively (turning on each LED individually)void loop() {for (int led = 0; led < 12; led++) {strip_head.setPixelColor(led, 250, 0, 0);strip_head.show(); //turn on LEDs in red, successivelydelay(10);strip_head.setPixelColor(led, 0, 0, 0);strip_head.show(); //turn off each LED after moving on to the next onedelay(10);}for (int led = 0; led < 12; led++) {strip_head.setPixelColor(led, 250, 250, 250);strip_head.show(); //turn on LEDs in white, successivelydelay(10);strip_head.setPixelColor(led, 0, 0, 0);strip_head.show(); //turn off each LED after moving on to the next onedelay(10);}for (int led = 0; led < 12; led++) {strip_head.setPixelColor(led, 0, 0, 250);strip_head.show(); //turn on LEDs in blue, successivelydelay(10);strip_head.setPixelColor(led, 0, 0, 0);strip_head.show(); //turn off each LED after moving on to the next onedelay(10);}//The following code individually turns on each LED in succession to orange (one direction) and blue (other direction) and moves across strip, back and forth, with each LED turning off before the next one turns onfor (int led=0; led<8; led++){strip_hip.setPixelColor(led, 250, 160, 0);strip_hip.show(); //turn on LEDs in orange, successivelydelay(10);strip_hip.setPixelColor (led, 0, 0, 0);strip_hip.show(); //turn off each LED before turning on the next onedelay(10);}for (int led=8; led>=0; led--){strip_hip.setPixelColor(led, 0, 0, 250);strip_hip.show(); //Same as above but in the other direction and in bluedelay(10);strip_hip.setPixelColor (led, 0, 0, 0);strip_hip.show();delay (10);}}0
-
this is for the 'arms' - but the Neopixels i'll be using for them haven't arrived, so I can't run this as well as the chest at the moment (only have the one strip for now)#include <Adafruit_NeoPixel.h>#include <avr/power.h>#define PIN 4// Parameter 1 = number of pixels in strip// Parameter 2 = Arduino pin number (most are valid)// Parameter 3 = pixel type flags, add together as needed:// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input// and minimize distance between Arduino and first pixel. Avoid connecting// on a live circuit...if you must, connect GND first.void setup() {strip.begin();strip.show(); // Initialize all pixels to 'off'}//The following code individually turns on each LED in succession to white and moves across strip, back and forth, with each LED turning off before the next one turns onvoid loop() {for (int led=0; led<8; led++){strip.setPixelColor(led, 85, 85, 85);delay(5);strip.show(); //turn on LEDs in white, successivelydelay(50);}for (int led=0; led<8; led++){strip.setPixelColor(led, 0, 0, 0);delay(5);strip.show(); //turn off LEDs, successivelydelay(5);}for (int led=0; led<8; led++){strip.setPixelColor(led, 0, 0, 250);delay(5);strip.show(); //turn on LEDs in blue, successivelydelay(50);}for (int led=0; led<8; led++){strip.setPixelColor(led, 0, 0, 0);delay(5);strip.show(); //turn off LEDs, successivelydelay(50);}}0
-
This is the code for the 'legs', when the strips arrive#include <Adafruit_NeoPixel.h>#include <avr/power.h>#define PIN 3// Parameter 1 = number of pixels in strip// Parameter 2 = Arduino pin number (most are valid)// Parameter 3 = pixel type flags, add together as needed:// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input// and minimize distance between Arduino and first pixel. Avoid connecting// on a live circuit...if you must, connect GND first.void setup() {strip.begin();strip.show(); // Initialize all pixels to 'off'}void loop() {for (int led=0; led<8; led++){strip.setPixelColor(led, 85, 85, 85); //turns on LEDS in white, successively, to fill stripdelay(5);strip.setPixelColor (led, 0, 0, 0);strip.show(); //turn off LEDs, successivelydelay(50);}for (int led=0; led<8; led++){strip.setPixelColor(led, 0, 250, 0);strip.show(); //'fill' strip with green, and stay 'on' in greendelay(20);}for (int led=0; led<8; led++){strip.setPixelColor(led, 250, 0, 0);delay(5);strip.show(); //'fill' already-green strip with reddelay(50);}}0
-
And this is the code for the 'head' rotation servo. Very basic stuff, just turning the head back and forth with 50ms wait. The 'arms' servo code is identical except with a much longer wait of 500ms (and both arms will be coded the same and moving identically)/* Sweepby BARRAGAN <http://barraganstudio.com>This example code is in the public domain.modified 8 Nov 2013by Scott Fitzgerald*/#include <Servo.h>Servo myservo; // create servo object to control a servo// twelve servo objects can be created on most boardsint pos = 0; // variable to store the servo positionvoid setup(){myservo.attach(9); // attaches the servo on pin 9 to the servo object}void loop(){for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees{ // in steps of 1 degreemyservo.write(pos); // tell servo to go to position in variable 'pos'delay(50); // waits 50ms for the servo to reach the position}for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees{myservo.write(pos); // tell servo to go to position in variable 'pos'delay(50); // waits 50ms for the servo to reach the position}}0
-
0 -
The build so far...
Still to be added: The arms (to be connected via servos and angle brackets on the blue hip bar), the servo attaching the head to the purple chest, and NeoPixel strips in both the arms, and the legs (vertical strips on the lower sections of the leg)
Parts were attached together using self-adhesive velcro pads, either on their own (in the case of attaching the 'legs' to the blue 'hip' bar), or together with the straight bracket and screw attaching the 'hip' to the purple 'chest' piece.
0 -
-
The back of the current build. Holes for the wires were either cut in the plastic, or melted through with the soldering iron.

0 -
0
-
0
-
Test at the current build (head, chest, and 'hip' lights)
https://www.youtube.com/watch?v=f4Svhws6B5w&feature=youtu.be
0 -
Current code:#include <Adafruit_NeoPixel.h>#include <avr/power.h>// Parameter 1 = number of pixels in strip// Parameter 2 = Arduino pin number (most are valid)// Parameter 3 = pixel type flags, add together as needed:// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)Adafruit_NeoPixel strip_head = Adafruit_NeoPixel(12, 5, NEO_GRB + NEO_KHZ800);Adafruit_NeoPixel strip_hip = Adafruit_NeoPixel(8, 6, NEO_GRB + NEO_KHZ800);Adafruit_NeoPixel strip_limbs = Adafruit_NeoPixel(8, 7, NEO_GRB + NEO_KHZ800);// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input// and minimize distance between Arduino and first pixel. Avoid connecting// on a live circuit...if you must, connect GND first.void setup() {strip_head.begin();strip_head.show(); // Initialize all pixels to 'off'strip_hip.begin();strip_hip.show();strip_limbs.begin();strip_limbs.show();}//The following code loops around the ring in red, white, and blue successively (turning on each LED individually)void loop() {for (int led = 0; led < 12; led++) {strip_head.setPixelColor(led, 250, 0, 0);strip_head.show(); //turn on LEDs in red, successivelydelay(10);strip_head.setPixelColor(led, 0, 0, 0);strip_head.show(); //turn off each LED after moving on to the next onedelay(10);}for (int led = 0; led < 12; led++) {strip_head.setPixelColor(led, 250, 250, 250);strip_head.show(); //turn on LEDs in white, successivelydelay(10);strip_head.setPixelColor(led, 0, 0, 0);strip_head.show(); //turn off each LED after moving on to the next onedelay(10);}for (int led = 0; led < 12; led++) {strip_head.setPixelColor(led, 0, 0, 250);strip_head.show(); //turn on LEDs in blue, successivelydelay(10);strip_head.setPixelColor(led, 0, 0, 0);strip_head.show(); //turn off each LED after moving on to the next onedelay(10);}//The following code individually turns on each LED in succession to orange (one direction) and blue (other direction) and moves across strip, back and forth, with each LED turning off before the next one turns onfor (int led = 0; led < 8; led++) {strip_hip.setPixelColor(led, 250, 160, 0);strip_hip.show(); //turn on LEDs in orange, successivelydelay(10);strip_hip.setPixelColor (led, 0, 0, 0);strip_hip.show(); //turn off each LED before turning on the next onedelay(10);}for (int led = 8; led >= 0; led--) {strip_hip.setPixelColor(led, 0, 0, 250);strip_hip.show(); //Same as above but in the other direction and in bluedelay(10);strip_hip.setPixelColor (led, 0, 0, 0);strip_hip.show();delay (10);}for (int led = 0; led < 8; led++) {strip_limbs.setPixelColor (led, 250, 250, 250);strip_limbs.show();delay(5);strip_limbs.setPixelColor(led, 0, 0, 0);delay(50);strip_limbs.show();}}0
Categories
- All Categories
- 97 CURRENT CONTEST
- 97 2025 Halloween Costume Contest
- 1.3K COMMUNITY
- 1K General
- 62 Tutorial Reviews
- 98 Suggestions and FAQ
- 82 Job Listings
- 40 Artists for Hire
- 1.8K CHARACTER CREATION
- 165 Costumes & Cosplay
- 148 Lab work
- 95 Props
- 152 Puppets
- 36 Stop Motion
- 18 VFX
- 39 Student Projects
- 478 Sculpture
- 159 Fabrication
- 160 Animatronics
- 177 Makeup Effects
- 130 Painting
- 29 Traditional/Digital Design
- 8.1K PAST CONTESTS
- 244 Creature Making Contest 2025
- 100 2024 Halloween Costume Contest
- 198 Character Making Contest 2024
- 343 Creature Making Contest 2024
- 131 2023 Halloween Costume Contest
- 168 Monster Making Contest 2023
- 239 Creature Making Contest 2023
- 117 2022 Halloween Costume Contest
- 309 Character Sculpting Contest 2022
- 133 Character Makeup Contest 2022
- 170 2021 Halloween Costume Contest
- 261 Creature Sculpting Contest 2021
- 209 Character Makeup Contest 2021
- 354 Creature Making Contest
- 200 2020 Halloween Costume Contest
- 203 Monster Makeup Contest
- 372 Creature Painting Contest
- 244 Horror Character Contest
- 182 2019 Halloween Costume Contest
- 260 Character Makeup Contest 2019
- 351 Character Sculpting Contest
- 279 2018 Halloween Costume Contest
- 292 Alien Art Contest 2018
- 251 Character Makeup Contest
- 389 Monster Making Contest
- 167 2017 Halloween Costume Contest
- 153 Heroes & Villains Contest
- 221 Cosplay Contest
- 215 Creature Sculpting Contest
- 107 Puppet Contest
- 161 Alien Art Contest
- 98 Halloween Costume Contest
- 149 Robot Art Contest
- 269 Dino Art Contest
- 592 Creature Contest
- 5 ALUMNI
- 275 ON DEMAND WEBCOURSES
- 1 Hand Puppet Detail and Finishing Techniques
- 24 Animation for Animatronics
- 9 How To Make a Mask - Wearable Dynamic Art
- 11 3-Axis Robotic Mechanisms
- 5 Neck Mechanisms
- 24 How To Make a Monster Suit with Bill Bryan & Ted Haines
- 19 Character Animatronics
- 5 How to Sculpt a Dinosaur
- 5 How To Build An Animatronic Head
- 5 Creature Costume Basics
- 4 Puppet Mechanism Basics
- 1 Tattoo Makeup - Cover, Create, & Apply
- 2 How To Make Horror Props
- 1 The Fine Art of Horror Painting
- 1 Fantasy Maquette Sculpting In CX5(S)
- 14 The Business of Making Monsters
- Production Design - The Process Of Creating A World For Film
- 4 Character Makeup - Multi-Piece Prosthetic Application
- 3 Prosthetic Makeup Basics - Gelatin Facial Appliances
- 5 Stop Motion Animation with the Chiodo Bros.
- 11 Blood, Gore and Makeup Effects
- 7 How to Punch Hair - Hairwork for Silicone Characters
- 3 Bodycasting on a Budget with Ted Haines
- 2 Portrait Illustration with Terry Wolfinger
- 5 Mastering Marionettes - Design, Construction & Performance with Scott Land
- 1 Creature Makeup - Multi-piece silicone prosthetic application
- 12 Muscle Suit Fabrication
- 11 Wig & Hair Basics
- 4 Silicone Prosthetic Transfer Appliances
- 3 Building Miniatures: Small-Scale Model Making - Part 5
- 9 Toy Design & Sculpture for Action Figures & Collectibles
- 1 Building Miniatures: Small-Scale Model Making - Part 4
- 2 Human Head Anatomy & Sculpture
- 1 How to Make a Foam Puppet - Part 3
- 1 Building Miniatures: Small-Scale Model Making - Part 3
- 5 How to Make a Foam Puppet - Part 2
- 3 How To Make a Foam Puppet - Part 1
- 1 Building Miniatures: Small-Scale Model Making - Part 2
- 14 Animatronic Control Systems - Arduino Programming Basics with David Covarrubias
- 3 Building Miniatures: Small-Scale Model Making - Part 1
- 3 Advanced Creature Teeth: Prosthetic Dental Appliances - Part 2
- 1 3D Pumpkin Carving - How to Carve a Pumpkin from the Outside In
- 5 How To Make A Latex Rubber Mask Part 3
- 3 Advanced Creature Teeth - Part 1
- 11 How To Make A Latex Rubber Mask Part 2
- 6 How To Make A Latex Rubber Mask Part 1
- 294 PAST LIVE WEBCOURSES
- 11 Monster Sculpting
- 8 Platinum Silicone Mask Painting
- 5 Feather Work: Puppets, Costumes, Hair & Makeup
- 9 How To Make Eyes For Puppets, Masks, & Makeups
- Working with Wigs - Wig & Hair Basics with Connie Grayson Criswell
- 14 Muscle Suit Fabrication with Ted Haines
- 7 Homework - Muscle Suit Fabrication with Ted Haines
- 13 Toy Design & Sculpture for Action Figures & Collectibles with Sandy Collora
- 10 Homework - Toy Design & Sculpture for Action Figures & Collectibles with Sandy Collora
- 13 Human Head Anatomy & Sculpture with Jordu Schell
- 11 Homework - Human Head Anatomy & Sculpture with Jordu Schell
- 18 Mastering Marionettes - Design, Construction & Performance with Scott Land
- 13 Homework - Mastering Marionettes - Design, Construction & Performance with Scott Land
- 16 Puppet Mechanism Basics - Eyes, Brows & Ears with BJ Guyer - Watch & Chat
- 11 Homework - Puppet Mechanism Basics - Eyes, Brows & Ears with BJ Guyer
- 12 Advanced Creature Teeth -- with John Cherevka
- 3 On Camera Hand Puppet Performance
- 9 Silicone Prosthetic Transfer Appliances - Age Makeup with Neill Gorton
- 3 Practical Magic: The Art of In-Camera Visual Effects with Joey Shanks
- 9 Buisness of Making Monsters with Shannon Shea
- 11 Stop Motion Animation with the Chiodo Bros
- 5 Foam Carving Puppets with BJ Guyer
- 3 3D Pumpkin Carving with Andy Bergholtz
- 4 Prosthetic Makeup Basics with Rob Burman
- 13 How to Make a Latex Mask with Tim Martin
- 2 Character Illustration with Terry Wolfinger
- 3 Halloween Costumes - Fabric Effects with Dawn Dininger and Amy Whetsel
- 9 Blood, Makeup & Gore FX with Gary J. Tunnicliffe
- 13 Hand Puppet Design and Fabrication with BJ Guyer
- 3 How to Sculpt a Dinosaur with Christopher Darga
- 2 Airbrush FX: Beginning to Advanced with Craig Fraser
- 1 Female Figure Sculpting in Cx5 wtih Adam Beane
- 3 Creature Design: Maquette Sculpting with Casey Love
- 3 How to Make a Sci Fi Helmet with Fon Davis
- 2 Hyper Realistic Silicone Painting with Tim Gore
- 2 Josh Herman Zbrush Creature Sculpting
- 13 Textures and Forms with Don Lanning Oct 26, 2013
- 9 Character Rendering in Photoshop with Dan LuVisi
- 2 Creature Maquette Painting with Jordu Schell
- 24 Textures and Forms with Don Lanning May 04, 2013
- 3 Tattoo Makeup A-to-Z: Cover, Create, and Apply with Christien Tinsley
- 11 Creature Design w/ Casey Love - Sculpting
- 7 Creature Design With Casey Love - Translucent Creature Painting
- 3 Creature Maquette Sculpting with Jordu Schell


https://www.youtube.com/watch?v=18oEMEF3SUg&feature=youtu.be
https://www.youtube.com/watch?v=OWwiZdb7C4I&feature=youtu.be