I am using the arduino UNO with the ADXL335 accelerometer with 3.3v as my ADC reff.
Here is a short vid of it in action: http://www.youtube.com/watch?v=xcIpC4FiJXY
Here is the coding I have so far (sorry if it is sloppy, I'm still trying to learn) :
Code: Select all
// Lateral 5 LED G meter using MMA7260 accelerometer 3.3v ADC Reff
// Intervals of .2g from -1 to 1g
//=================================================================
// Identifying my pins
const unsigned int X_AXIS_PIN = 2;
const unsigned int Y_AXIS_PIN = 1;
const unsigned int Z_AXIS_PIN = 0;
const unsigned int NUM_AXES = 3;
const unsigned int PINS[NUM_AXES] = {
X_AXIS_PIN, Y_AXIS_PIN, Z_AXIS_PIN
};
const unsigned int BUFFER_SIZE = 25;
const unsigned int BAUD_RATE = 9600;
int led1 = 8; //defining LED pin #'s
int led2 = 9;
int led3 = 10;
int led4 = 11;
int led5 = 12;
int X_AXIS = 0;
int buffer[NUM_AXES][BUFFER_SIZE]; // label id="code.motion.axis_buffer"
int buffer_pos[NUM_AXES] = { 0 }; // label id="code.motion.axis_buffer_pos"
void setup()
{
Serial.begin(BAUD_RATE);
pinMode(led1, OUTPUT); //Defining LED pins as outputs output
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
digitalWrite(led1, LOW); //setting LEDS to OFF for start
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
int get_axis(const int axis) {
delay(1); // <label id="code.motion.multiplex_delay"/>
buffer[axis][buffer_pos[axis]] = analogRead(PINS[axis]);
buffer_pos[axis] = (buffer_pos[axis] + 1) % BUFFER_SIZE;
long sum = 0;
for (int i = 0; i < BUFFER_SIZE; i++)
sum += buffer[axis][i];
return round(sum / BUFFER_SIZE);
// External AREF for better resolution
analogReference(EXTERNAL);
}
int get_x() { return get_axis(0); }
int get_y() { return get_axis(1); }
int get_z() { return get_axis(2); }
void loop() {
//Print ADC reading to serial monitor
Serial.print(get_x());
Serial.print(" ");
Serial.print(get_y());
Serial.print(" ");
Serial.println(get_z());
//get reading from X axis input on pin 2
X_AXIS = analogRead(X_AXIS_PIN);
// G force 1g to -1g
//LED1 on at .2g or 1g
if(X_AXIS > 546 || X_AXIS < 341) {digitalWrite(led1, HIGH);}
else {digitalWrite(led1, LOW);}
//LED2 on .4g or -.8g
if(X_AXIS > 580 || X_AXIS < 375) {digitalWrite(led2, HIGH);}
else {digitalWrite(led2, LOW);}
//LED3 on .6g or -.6g
if(X_AXIS > 614 || X_AXIS < 409) {digitalWrite(led3, HIGH);}
else {digitalWrite(led3, LOW);}
//LED4 on .8g or -.4g
if(X_AXIS > 648 || X_AXIS < 443) {digitalWrite(led4, HIGH);}
else {digitalWrite(led4, LOW);}
//LED5 on 1g or -.2g
if(X_AXIS > 682|| X_AXIS < 477 ) {digitalWrite(led5, HIGH);}
else {digitalWrite(led5, LOW);}