I started off with rectangular 2200 hole PCB's from RadioShack and using cutting dykes I made half circle boards with a cutout in the center to to fit the processing module, lipo battery & charger. Each slice is comprised of 2 - 8-bit shift registers, 16 LED's & 16 resistors. There are 8 slices in total so there are 128 LED's, I use and Arduino nano 3.1 from makershed.com along with a lipo batter & charger available at sparkfun.com. In order to fit these slices together to form a sphere I used circular PCB's that I found at radioshack. I used a dremel to cut slits every 45-degrees for each of the slices to slide into, the package comes with 3 sizes & 2 of each, I used the middle size. I added a parallax mesmic 2125 accelerometer to the main board in the center to provide orientation to the sphere. You charge the LiPo batter through a USB mini port located in the center, charging takes 1 Hour approximately and lasts for 45 minutes.
I wanted to thank Nikolai for the insperation & Null Space Labs HackerSpace for their take on the project. I also wrote Charlie over there to get his input on the spiral animation & he was very nice & helpfull. I am going to post all of the code that I used in case anyone is interested. I wouldn't say that I am the most proficient programmer & am still learning so be kind.
Links: www.hackaday.com/2011/10/16/we-want-this-led-ball/ //Original
http://charliex2.wordpress.com/2012/02/11/the-blinky-ball-nullspacelabs/ //Null Space Labs In LA made a really cool version
Code:
int clockPin = 13; //IC Pin 11, Yellow Jumper
int dataPin = 11; //IC Pin 14, Blue Jumper
int latchPin = 8; //IC Pin 12, Green Jumper
const int xPin = 2; // X output of the accelerometer
const int yPin = 3; // Y output of the accelerometer
word patterns[176] = {
0b1100000000000000,
0b0110000000000000,
0b0011000000000000,
0b0001100000000000,
0b0000110000000000,
0b0000011000000000,
0b0000001100000000,
0b0000000110000000,
0b0000000011000000,
0b0000000001100000,
0b0000000000110000,
0b0000000000011000,
0b0000000000001100,
0b0000000000000110,
0b0000000000000011,
0b0000000000000001,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b1010111010001101,
0b0110101010011010,
0b0101010010011100,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b1010111010001101,
0b0110101010011010,
0b0101010010011100,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b1100000000000000,
0b0110000000000000,
0b0011000000000000,
0b0001100000000000,
0b0000110000000000,
0b0000011000000000,
0b0000001100000000,
0b0000000110000000,
0b0000000011000000,
0b0000000001100000,
0b0000000000110000,
0b0000000000011000,
0b0000000000001100,
0b0000000000000110,
0b0000000000000011,
0b0000000000000001,
0b0000000000000001,
0b0000000000000011,
0b0000000000000110,
0b0000000000001100,
0b0000000000011000,
0b0000000000110000,
0b0000000001100000,
0b0000000011000000,
0b0000000110000000,
0b0000001100000000,
0b0000011000000000,
0b0000110000000000,
0b0001100000000000,
0b0011000000000000,
0b0110000000000000,
0b1100000000000000,
0b1100000000000000,
0b0110000000000000,
0b0011000000000000,
0b0001100000000000,
0b0000110000000000,
0b0000011000000000,
0b0000001100000000,
0b0000000110000000,
0b0000000011000000,
0b0000000001100000,
0b0000000000110000,
0b0000000000011000,
0b0000000000001100,
0b0000000000000110,
0b0000000000000011,
0b0000000000000001,
0b0000000000000001,
0b0000000000000011,
0b0000000000000110,
0b0000000000001100,
0b0000000000011000,
0b0000000000110000,
0b0000000001100000,
0b0000000011000000,
0b0000000110000000,
0b0000001100000000,
0b0000011000000000,
0b0000110000000000,
0b0001100000000000,
0b0011000000000000,
0b0110000000000000,
0b1100000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b1010100100111110,
0b1010110100100101,
0b1010101001101111,
0b1100101111010101,
0b1111011010101010,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000
};
int index = 17;
int count = sizeof(patterns)/2;
unsigned int oldy = 0;
void setup()
{
// initialize serial communications:
Serial.begin(9600);
// initialize the pins connected to the accelerometer
// as inputs:
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop()
{
accelorometer();
}
void accelorometer()
{
// variables to read the pulse widths:
int pulseX, pulseY;
// variables to contain the resulting accelerations
int accelerationX, accelerationY;
// read pulse from x- and y-axes:
pulseX = pulseIn(xPin,HIGH);
pulseY = pulseIn(yPin,HIGH);
// convert the pulse width into acceleration
// accelerationX and accelerationY are in milli-g's:
// earth's gravity is 1000 milli-g's, or 1g.
accelerationX = ((pulseX / 10) - 500) * 8;
accelerationY = ((pulseY / 10) - 500) * 8;
// print the acceleration
Serial.print("X: ");
Serial.print(accelerationX);
// print a tab character:
Serial.print("\t");
Serial.print("Y: ");
Serial.print(accelerationY);
Serial.println();
if(accelerationY == oldy){
count = count + 1;
if(count >= 500){
for(int times = 0; times <= 160; times++){
idleTime();
}
count = count - 50;
}
}else{
count = count - 1;
if(count <= 0){
count = 0;
}
}
int ywordPos = map(accelerationY, -1023, 1023, 0, 16);
byte registerOne = highByte(patterns[ywordPos]);
byte registerTwo = lowByte(patterns[ywordPos]);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, registerOne);
shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);
digitalWrite(latchPin, HIGH);
oldy = accelerationY;
}
void idleTime()
{
byte registerOne = highByte(patterns[index]);
byte registerTwo = lowByte(patterns[index]);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, registerOne);
shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);
digitalWrite(latchPin, HIGH);
delay(65);
index++;
if (index >= count){
index = 17;
}
}



































Visit Our Store »
Go Pro Today »




http://www.youtube.com/watch?v=r2yADpGnyyc
n = 0
n + 1
n + 2
n * 2
so a small loop like
while(n < 98304)
{
if(n = 0)
{
n = n + 1;
}
if(n = 1)
{
n = n + 2;
}
for(n = 3; n < 98304; n * 2)
{
return n;
}
}
or something like that.
const int potPin = 0; //select the input pin for the potentiometer
int ledPin = 13; //select the pin for the LED
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT); //declare the ledPin as an OUTPUT
}
void loop()
{
int val; //the value coming from the sensor
int percent; //the mapped value
val = analogRead(potPin); //read the voltage on the pot (val range 0 to 1023)
percent = map(val, 0, 1023, 0,100); //percent range from 0 to 100
Serial.println(percent);
digitalWrite(ledPin, HIGH); //turn the LedPin on
delay(percent); //on time given by percent value
digitalWrite(ledPin, LOW); //tun the ledPin off
}
You could use this command to map a potentiometer to an Electronic Speed Control in order to regulate the speed of a Brushless DC motor. Brushless motors are in everything and the ESC handles the complicated signaling. RC planes/cars/quadrocopters all use ESC to control their motors also in case your ever interested.
Instructables didn't make this featured, and that makes me sad.
They would probably feature you if you did this step by step instead of assuming people know how all this stuff works.
But step by step is overrated! You made this instructable for the people who are knowledgeable about electronics. not the noobies (sorry noobies)
I would like to again commend you on your awesome instructable. Your code looks very elegant.
One question: Did you use the daisy-chain method for this project? I see you mentioned it in a comment below, but you didn't explicitly state that you are using it.
Also: It looks like you are using a function called "map". Is this built into the Arduino IDE or is it user-defined?Because It doesn't look like it is defined.
Thanks! Awaiting you response(s).
Ryan