Wednesday, December 17, 2014

Just saw this project and had to share.

THIS

While its not a video directly, I saw this on my twitter feed and had to share. I would love to make this baby someday, got to finish a couple other projects first though.

-Charlie

Friday, December 12, 2014

Its built!!! Well sort of, again




Good news everyone! I finally got my project built. Its not how I wanted or designed it but it is something. The school ran out of the 1/4" acrylic that I wanted to use so I had to use 1/8" inch thick stuff. Also there was only 1 more pane of it left and it was only a 12" by 12" square. Thus the TA scaled everything down by 50%. So it's tiny hehe.
The original idea was to put led strips on the spokes of the wheel, use a slip ring to allow the led strips to rotate and still have electrical connection, and to make the motor spin at a speed Dependant on the signal the microphone received.  Like I said in the last post I finally got the led strips to work, but I never got the motor code integrated into the system because I spent so much time on the led strips. Always remember to check hardware before software ><.
When I was putting it together the bottom of the wheel touched the ground, so looks like I need make the supports just a bit taller. It all went together well enough and it spins once the supports were on spacers. Oh, the spacers that went on the center axle melted in the laser cutter, the scale was too small for them so I didn't put any on the axle and the wheel sometimes catches.
It was assembled on cardboard using hot glue and the wheels to the cross arms with hot glue. The center axle just has some tape on it to hold it in place and let the wheels spin somewhat freely.
The end caps couldn't be 3D printed as the printer went down for a while and with the scale down of the parts, the original design wouldn't have worked anyway.
There was an expo with all of the projects today at school but since I work when it was starting I didnt go. And I'm uploading all this while at work :).
-Charlie
Can't post pictures while using the mobile app, it crashes. But rest assured they exist and I will upload them when I get home from work at 11:30

 Edit - I figured out how to add the pics, I had to use a browser instead of the app but there they are :)

Thursday, December 11, 2014

Software struggles

Programming is not what i like to do.  With a modified adafruit code that i found for a light up bracelet that i further played with and modified, i kind of got the lights to blink in time with the music.  I wish that i could get it to blink in time with certain frequencies but i didn't get around to figuring out if the microphone can actually do that or not.  Either way here is the code and a video of the blinking.

I learned that you cant share the ground of the mic or the LED strip.  There was some kind of interference caused the LED strip to continuously blink and it was really annoying to say the least.

Here is a video of it working after I cleaned up the ground issue




I didn't get to work with the motor code to get a motor to change speed based on input from the mic.  I figured it would need a PWM port and some kind of combination of our lab code to change the speed of the motor using a square wave, as well as taking input put out by the mic program so that the motor activates in time with the LED blinks.

 Here is the code that got it to work

/*
LED VU meter for Arduino and Adafruit NeoPixel LEDs.

Hardware requirements:
 - Most Arduino or Arduino-compatible boards (ATmega 328P or better).
 - Adafruit Electret Microphone Amplifier (ID: 1063)
 - Adafruit Flora RGB Smart Pixels (ID: 1260)
   OR
 - Adafruit NeoPixel Digital LED strip (ID: 1138)
 - Optional: battery for portable use (else power through USB or adapter)
Software requirements:
 - Adafruit NeoPixel library

Connections:
 - 3.3V to mic amp +
 - GND to mic amp -
 - Analog pin to microphone output (configurable below)
 - Digital pin to LED data input (configurable below)
 See notes in setup() regarding 5V vs. 3.3V boards - there may be an
 extra connection to make and one line of code to enable or disable.

Written by Adafruit Industries.  Distributed under the BSD license.
This paragraph must be included in any redistribution.
*/
 
#include <Adafruit_NeoPixel.h>
 
#define N_PIXELS  15  // Number of pixels in strand
#define MIC_PIN   A0  // Microphone is attached to this analog pin
#define LED_PIN    8  // NeoPixel LED strand is connected to this pin
#define DC_OFFSET  0  // DC offset in mic signal - if unusure, leave 0
#define NOISE     70  // Noise/hum/interference in mic signal
#define SAMPLES   60    // Length of buffer for dynamic level adjustment
#define TOP       (N_PIXELS + 2) // Allow dot to go slightly off scale
#define PEAK_FALL 25  // Rate of peak falling dot
 
byte
  peak      = 0,      // Used for falling dot
  dotCount  = 0,      // Frame counter for delaying dot-falling speed
  volCount  = 5;      // Frame counter for storing past volume data
int
  vol[SAMPLES],       // Collection of prior volume samples
  lvl       = 50,      // Current "dampened" audio level
  minLvlAvg = 0,      // For dynamic adjustment of graph low & high
  maxLvlAvg = 512;
Adafruit_NeoPixel
  strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
 
void setup() {
 
  // This is only needed on 5V Arduinos (Uno, Leonardo, etc.).
  // Connect 3.3V to mic AND TO AREF ON ARDUINO and enable this
  // line.  Audio samples are 'cleaner' at 3.3V.
  // COMMENT OUT THIS LINE FOR 3.3V ARDUINOS (FLORA, ETC.):
//  analogReference(EXTERNAL);
 
  memset(vol, 0, sizeof(vol));
  strip.begin();
}
 
void loop() {
  uint8_t  i;
  uint16_t minLvl, maxLvl;
  int      n, height;
 
 
 
  n   = analogRead(MIC_PIN);                        // Raw reading from mic 
  n   = abs(n - 512 - DC_OFFSET); // Center on zero
  n   = (n <= NOISE) ? 0 : (n - NOISE);             // Remove noise/hum
  lvl = ((lvl * 7) + n) >> 3;    // "Dampened" reading (else looks twitchy)
 
  // Calculate bar height based on dynamic min/max levels (fixed point):
  height = TOP * (lvl - minLvlAvg) / (long)(maxLvlAvg - minLvlAvg);
 
  if(height < 0L)       height = 2;      // Clip output
  else if(height > TOP) height = TOP;
  if(height > peak)     peak   = height; // Keep 'peak' dot at top
 
 
  // Color pixels based on rainbow gradient
  for(i=0; i<N_PIXELS; i++) {
    if(i >= height)               strip.setPixelColor(i,   0,   0, 0);
    else strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150)));
    
  }
 
 
 
  // Draw peak dot  
  if(peak > 0 && peak <= N_PIXELS-1) strip.setPixelColor(peak,Wheel(map(peak,0,strip.numPixels()-1,30,150)));
  
   strip.show(); // Update strip
 
// Every few frames, make the peak pixel drop by 1:
 
    if(++dotCount >= PEAK_FALL) { //fall rate 
      
      if(peak > 0) peak--;
      dotCount = 0;
    }
 
 
 
  vol[volCount] = n;                      // Save sample for dynamic leveling
  if(++volCount >= SAMPLES) volCount = 0; // Advance/rollover sample counter
 
  // Get volume range of prior frames
  minLvl = maxLvl = vol[0];
  for(i=1; i<SAMPLES; i++) {
    if(vol[i] < minLvl)      minLvl = vol[i];
    else if(vol[i] > maxLvl) maxLvl = vol[i];
  }
  // minLvl and maxLvl indicate the volume range over prior frames, used
  // for vertically scaling the output graph (so it looks interesting
  // regardless of volume level).  If they're too close together though
  // (e.g. at very low volume levels) the graph becomes super coarse
  // and 'jumpy'...so keep some minimum distance between them (this
  // also lets the graph go to zero when no sound is playing):
  if((maxLvl - minLvl) < TOP) maxLvl = minLvl + TOP;
  minLvlAvg = (minLvlAvg * 63 + minLvl) >> 6; // Dampen min/max levels
  maxLvlAvg = (maxLvlAvg * 63 + maxLvl) >> 6; // (fake rolling average)
 
}
 
// Input a value 0 to 255 to get a color value.
// The colors are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

-Charlie

Friday, December 5, 2014

Logistics.

I suppose this is a good experience of logistics in the real world.

I've submitted the parts that need to be laser cut to the email address provided, but I do t know if they have gotten to it yet. I submitted them on Monday because I was waiting for the materials to come in, which i don't know if they came in or not.

So I'm waiting for the right material to ce in, so that the parts can be cut and then built. But I'm depending on my professor having ordered the right parts. And he's a wicked busy man with 3 classes to teach and probably 500 students between all the sections. Then the TA's who need to cut the parts and all the requests they have and how much other work then have to do as students themselves.

Combine all that with me being married and working full time and I can't be around school all day trying to track everything down. As it is, I may just cut everything out of cardboard just to have something physical to show for.

-Charlie

Monday, December 1, 2014

Getting close to deadline

With only 11 days left to complete the project, its getting down to the wire. I decided to go with 8 inch wheels since the adafruit neopixle strip is smaller than I expected.

I finished the design in solid works and if my prof ordered 1/4" thick clear acrylic then all the parts just need to be cut out of that.  The end cap just needs to be 3D printed, one for each end so 2. Once everything is out then I can put it together easily.

I'm going to see if the DC motor we got in the sparkfun kit will spin the wheels. If it won't then there's a broken aero bed in my closet that might have a motor I can salvage out of it and see if that one works.

The hope is to get the motor code we used in a lab and have the I put to the serial A0 port also be called to run the motor with pwm so the speed varies.

-Charlie

Monday, November 24, 2014

Forgot to put up the pic of the new Ferris wheel assembly

I made some changes to some of the parts and took a picture earlier today but forgot to upload it here.

-Charlie

ITS ALIVE!!!! sort of

For home from work and had a chance to play around with the mic and the neopixel strip :).
Using the code I found for a music reactive bracket and changing some of the values, I kinda got it to work.
It blinks at least.


I even got a video of it sort of reacting to music, the volume is really low, i was probably covering the mic by accident.





-Charlie

Work in progress

Finally got in the parts that I ordered and they are gonna be fun to play with. The neo pixles are cutable to size so I should be able to wire them up how I like. I don't know if there will be enough on a 1M strand but it's a start. The mic from sparkfun and the neopixles should work well once I put in the code that I found for that setup. I might even be able to figure out how to do it with a 3.5mm headphone jack with speakers or something.
I decided to make the wheel out of clear acrylic and make it a bit smaller to accommodate the lower amount of pixels that I got. Oh I made a end cap that will attack to the center axle and then I should be able to drill a hole to put the motor in, I just hope it will be able to turn it. Might be able to use a rubber wheel like some of the smaller ferris wheels do anyway, could help with mounting problems, we'll see.
Gonna be playing with the neopixles this week I hope.
-Charlie

Monday, November 17, 2014

Spacer

     I had the idea that if the LED's are going to look the best, they should probably be on the outside of the wheel.  To prevent the LED strip from hitting the support i made a notched spacer that could go on the notched axle and keep the main body away from the support.  This should allow the LED strip to be placed anywhere and not interfere with the support.

-Charlie

Motion Review

     I needed to make some adjustments to the measurements of the supports and the center axle.  The axle needs to be notched so it can move the main body.  I'm thinking that it might be better to have the dowel be smaller than the support hole, then use a bearing with a notched inner and round outer to make smooth movement.

      Then i wanted to make sure the LED strips would fit on the main body, ADAfruit doesn't give exact dimensions but it does show the strip next to a quarter.  So i measured a quarter with my digital calipers and roughed out a size to put the LED strips on.

     Here's a rough redesigned idea with hopefully the notch visible.

-Charlie

Sunday, November 16, 2014

Motion study of the ferris wheel

Last post was really long so I didn't want to add this video to the bottom and have it get lost.  Here is a short clip of a basic motion study of the wheel spinning.


The video looks bad in the blogger page, but the link in the bottom right of the video should bring you directly to the youtube page with the video and that should work fine.

-Charlie

Work being done

So been working a little on the idea of how to build the ferris wheel body that will be doing the spinning.  We have access to MDF, foam core, and some other build materials.

I made a 12"x12" and 1/4" thick base board to look like particle board since the material and apearance wasn't in solid works by default


     Next I made supports to hold the wheel.  Angled for some extra support with a filleted hole for smooth insertion of the axle.
     Next was the biggest pain. Working on the main body showed me how much of a pain solid works can be if you mess up the geometry.  circular patterns of bodies can also be a huge pain.  I first tried to circular pattern the sketch, but then it wasn't fully defined, and i had to do a lot of trimming. Then doing fillets was a huge pain to click on every edge.  Then the rotation did not put the edges matching up that i wanted, and it kind of looked like a bunch of hammers facing the same direction to hit a bunch of nails all at once.
     Funny and frustrating at the same time.  I think it has something to do with what plane you make a center line on and follows the plane axis rather than the one you necessarily want it to.

     Anyway, after fighting with geometry and other silly mistakes, I finally figured out how to make it do what i want.  I added a hole for the main axle and holes for the axles of the "carts" that hold passengers or stuffed animals, or pokemon or whatever.Then added an appearance and filleted holes for smooth insertion of the wooden dowels.
     Next was making some wooden dowels.  1/8" and 1/4".

     Next was putting all the pieces together in an assembly.  Using concentric, coincident, parallel and offset mates, I was able to get the wheels to fit together and not look too bad.


-Charlie

Tuesday, November 11, 2014

Project Idea

We will be attempting to make an arduino controlled ferris wheel using lazer cut materials.

We want to make the ferrris wheel respond to music, have the motor controlled byt he speed of the music and get some LED's to blink in time with the msuci.  First approch would be to get it to work with a 3.5 mm jack into any audio device.  Second would be to get a microphone to get the wheel to move and lights to blink.

Here is an erector set done with some LED's

Erector set LED feris wheel



-Charlie

Thursday, November 6, 2014

Cool video ideas

Here are some links to some really cool projects done with arduino.


LED board responds to music


More LED reactions to music


LED beat box


Arduino POV clock


Arduino Xbee quadcopter




there are tons more and all you really need to do is search youtube for some awesome video's and you can see how many things can be made with arduino.


-Charlie

Monday, November 3, 2014

Group Photo

Here we are, with no idea what we want to build but at least getting to know each other, thanks to Prof. Sullivan for taking the picture :)



Team members :


Jessica
Brittney
Charlie