We our approaching our studies on circuits and our window sign project. By laying out and labeling all of the parts we begin to understand the terminology being used and make sure we have all of our parts.
This was an initiation to our studies of circuits and our window sign project. I used laser-cut wood with an LED, a battery, and a laser cut acrylic piece that the light shines through.
Project brief for the first project in engineering
Guidelines that will need to be met for the project
Research guidelines for the project
As the beginning sets, of our studies of the Arduino, and C# coding language, we have officially learned how to make a blinking led, after an entire day of set up, but only a few lines of code. I can easily change the speed of blink by changing the variable values.
We routed the LED to pin 2 and ground, and used the Arduino IDE to code the Nano to blink the light.
This time we extended what we we'd learned the last class and used 6 lights instead of two. Each with their own variable, being targeted by the code.
We used routed each LED to ground pin and a 'D' pin. And in order to get the pins 9-11 to reach a ground pin, we used another chord to take the ground to d12 and route 9-11 to there instead.
Quincy Jones is a key figure and inspiration not only because I am a musician myself, but because of his long line of esteemed accomplishments as a black male. Overcoming many hurdles to perform in front of a seemingly uncountable amount of audiences. He has participated and run many movements as an individual and along side Dr. Martin Luther King Jr.
With the Neopixel, we coded a light show in Tinkercad, and changed the color variables to our liking.
With the end product we had our sign illuminating by the Neopixel Strip Underneath. It worked just fine with no hindrances.
The Neopixel shines a different set of light across the strip each second. The lights even show up in a wave.
// 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(235, 45, 111), 200); // Red
colorWipe(strip.Color(255, 0, 120), 200); // Pink
colorWipe(strip.Color(255, 0, 255), 200); // Purple
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(0, 255, 120), 200); // Green Blue
colorWipe(strip.Color(0, 255, 0), 200); // Green
colorWipe(strip.Color(120, 255, 0), 200); // Yellow
colorWipe(strip.Color(255, 255, 0), 200); // Orange
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
}
}
}
Brief - A procedure and plan to acquire the final results that provide a solution to a problem
Research - Finding information to fill in the blanks as to gaining full understanding of what you're working with and towards solving the problem/ finding the answers
Ideas/Brainstorming - Utilizing the accumulated knowledge in order to muster up ideas that lead to answers/ the solution
Prototype - Creating a physical object based on your ideas
Testing - Running tests to collect data on the prototype that you can use to improve and find 100% success
Evaluation - At any part of the design process, reviewing the data in order identify points for modification
What did you find the most challenging about this course and how did you overcome this challenge?
I'm sure that doing a class where it is mostly tactile would be a lot easier in person, but of course we have to view instruction on the webcam. So in turn instead of learning visually, of course you still do that, but I have learned more so by listening.
What are you most proud of this semester?
Although I fell off with the Neopixel to an extent, for the most part I kept up with the assignments and maintained a good grade.
Our second project as an engineering class.
The essence of the design process. A problem being aided with the most convenient solution. The structure of the solution is the engineering behind it.
The constraints are here to ensure that we implement the concepts of the design process.