I created a circuit using multiple parts from the engineering kit, such as the LED's, screws/bolts, laser-cut wood, etc. I used copper tape to transfer the energy from the battery to the LED light.
Project Brief for the first project
Guidelines that need to be met for the project
Research guidelines for the project
Ardunio Nano Circuit Diagram
In this circuit diagram, I used the Arduino, wire, and LED components to create a simple circuit. I used D2 as my port for the LED because that is what I listed in the code. Also, I used a "timer" so to speak in the code so the light flickered about every second. That would be what you see if you were to activate the circuit in real life.
This video shows the process of my code running trough the Arduino and thus making the LED flash. The Arduino is connected to my breadboard, which makes quick and concise electronical connections.
int led2 = 2;
int led3 = 3;
int led4 = 4;
int led10 = 10;
int led11 = 11;
int led12 = 12;
void setup() {
pinMode(led2, OUTPUT) ;
pinMode(led3, OUTPUT) ;
pinMode(led4, OUTPUT) ;
pinMode(led10, OUTPUT) ;
pinMode(led11, OUTPUT) ;
pinMode(led12, OUTPUT) ;
}
void loop() {
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led2, LOW) ;
delay(1000);
digitalWrite(led3, HIGH);
delay(1000);
digitalWrite(led3, LOW) ;
delay(1000);
digitalWrite(led4, HIGH);
delay(1000);
digitalWrite(led4, LOW) ;
delay(1000);
digitalWrite(led10, HIGH);
delay(1000);
digitalWrite(led10, LOW) ;
delay(1000);
digitalWrite(led11, HIGH);
delay(1000);
digitalWrite(led11, LOW) ;
delay(1000);
digitalWrite(led12, HIGH);
delay(1000);
digitalWrite(led12, LOW) ;
delay(1000);
}
Image is of the LEDs running through their sequence
The image shows the components of the circuit connected from a side angle.
ARDIUNO NANO 6 LED CIRCUIT
This time, I created a circuit diagram using more components. This circuit has 6 LED's, and a lot more wires. I also use a ground wire to transport energy from the other side of the bread board for the other LED's. The components I used for this circuit were a bread board, the arduino, 6 LED's, and a ground wire.
// A basic everyday NeoPixel strip test program.
// NEOPIXEL BEST PRACTICES for most reliable operation:
// - Add 1000 uF CAPACITOR between NeoPixel strip's + and - connections.
// - MINIMIZE WIRING LENGTH between microcontroller board and first pixel.
// - NeoPixel strip's DATA-IN should pass through a 300-500 OHM RESISTOR.
// - AVOID connecting NeoPixels on a LIVE CIRCUIT. If you must, ALWAYS
// connect GROUND (-) first, then +, then data.
// - When using a 3.3V microcontroller with a 5V-powered NeoPixel strip,
// a LOGIC-LEVEL CONVERTER on the data line is STRONGLY RECOMMENDED.
// (Skipping these may work OK on your workbench but can fail in the field)
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1:
#define LED_PIN 6
// How many NeoPixels are attached to the Arduino?
#define LED_COUNT 17
// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 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)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
// setup() function -- runs once at startup --------------------------------
void setup() {
// These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
// Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
strip.show(); // Turn OFF all pixels ASAP
strip.setBrightness(255); // Set BRIGHTNESS to about 1/5 (max = 255)
}
// loop() function -- runs repeatedly as long as board is on ---------------
void loop() {
// Fill along the length of the strip in various colors...
colorWipe(strip.Color(255, 0, 221), 200); // Pink
colorWipe(strip.Color(255, 0, 120), 200); // Pink
colorWipe(strip.Color(255, 0, 221), 200); // Pink
colorWipe(strip.Color(0, 0, 255), 200); // Blue
colorWipe(strip.Color(0, 120, 255), 200); // Blue Green
colorWipe(strip.Color(0, 255, 255), 200); // Teal
colorWipe(strip.Color(255, 0, 221), 200); // pink
colorWipe(strip.Color(255, 0, 221), 200); // pink
colorWipe(strip.Color(255, 0, 221), 200); // pink
colorWipe(strip.Color(255, 0, 221), 200); // pink
colorWipe(strip.Color(255, 255, 255), 500); // Orange
// Do a theater marquee effect in various colors...
// theaterChase(strip.Color(127, 127, 127), 50); // White, half brightness
// theaterChase(strip.Color(127, 0, 0), 50); // Red, half brightness
// theaterChase(strip.Color( 0, 0, 127), 50); // Blue, half brightness
rainbow(20); // Flowing rainbow cycle along the whole strip
//theaterChaseRainbow(50); // Rainbow-enhanced theaterChase variant
}
// Some functions of our own for creating animated effects -----------------
// Fill strip pixels one after another with a color. Strip is NOT cleared
// first; anything there will be covered pixel by pixel. Pass in color
// (as a single 'packed' 32-bit value, which you can get by calling
// strip.Color(red, green, blue) as shown in the loop() function above),
// and a delay time (in milliseconds) between pixels.
void colorWipe(uint32_t color, int wait) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
strip.setPixelColor(i, color); // Set pixel's color (in RAM)
strip.show(); // Update strip to match
delay(wait); // Pause for a moment
}
}
// Theater-marquee-style chasing lights. Pass in a color (32-bit value,
// a la strip.Color(r,g,b) as mentioned above), and a delay time (in ms)
// between frames.
void theaterChase(uint32_t color, int wait) {
for(int a=0; a<10; a++) { // Repeat 10 times...
for(int b=0; b<3; b++) { // 'b' counts from 0 to 2...
strip.clear(); // Set all pixels in RAM to 0 (off)
// 'c' counts up from 'b' to end of strip in steps of 3...
for(int c=b; c<strip.numPixels(); c += 3) {
strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
}
}
}
// Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
void rainbow(int wait) {
// Hue of first pixel runs 5 complete loops through the color wheel.
// Color wheel has a range of 65536 but it's OK if we roll over, so
// just count from 0 to 5*65536. Adding 256 to firstPixelHue each time
// means we'll make 5*65536/256 = 1280 passes through this outer loop:
for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
// Offset pixel hue by an amount to make one full revolution of the
// color wheel (range of 65536) along the length of the strip
// (strip.numPixels() steps):
int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
// strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
// optionally add saturation and value (brightness) (each 0 to 255).
// Here we're using just the single-argument hue variant. The result
// is passed through strip.gamma32() to provide 'truer' colors
// before assigning to each pixel:
strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
}
}
// Rainbow-enhanced theater marquee. Pass delay time (in ms) between frames.
void theaterChaseRainbow(int wait) {
int firstPixelHue = 0; // First pixel starts at red (hue 0)
for(int a=0; a<30; a++) { // Repeat 30 times...
for(int b=0; b<3; b++) { // 'b' counts from 0 to 2...
strip.clear(); // Set all pixels in RAM to 0 (off)
// 'c' counts up from 'b' to end of strip in increments of 3...
for(int c=b; c<strip.numPixels(); c += 3) {
// hue of pixel 'c' is offset by an amount to make one full
// revolution of the color wheel (range 65536) along the length
// of the strip (strip.numPixels() steps):
int hue = firstPixelHue + c * 65536L / strip.numPixels();
uint32_t color = strip.gamma32(strip.ColorHSV(hue)); // hue -> RGB
strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
}
}
}
NEOPIXEL STRIP:
It was quite the difficult journey to make the complete neo-pixel, simply because there were so many components. Firstly, it started off by creating a wooden box to encase the LEDs. I then put together a circuit, consisting of an old phone charger, female wires, an Arduino, and an LED strip. I stripped each wire in order to connect them to each other, and uploaded the base code to my Arduino. I then plugged in the female wires to the Arduino, ran the sequence, and this was my result.