martes, 27 de octubre de 2009

acelerómetro de 3 ejes con conexión analógica, pasando los valores a una salida de led RGB



Cuando pensamos en las maravillas que podíamos hacer con el acelerómetro nos dirigimos directamente a las variaciones que este podía producir con los led RGB, nos parecía interesante poder variar los colores de un led según el sentido de inclinación que nosotros le diéramos al sensor.
Buscamos y buscamos códigos y encontramos el blog de Jeff Kirsch quien había modificado el código del acelerómetro y RGB para que este mostrará sus variantes. No tiene mucha técnica y al decir verdad la conexión de cables realmente no tiene mucha lógica.
Aquí va un esquema con la conexión

y una foto real de la placa conectada:


Y aquí esta e código para programar el arduino:

Based on http://www.arduino.cc/en/Tutorial/ADXL3xx by David A. Mellis
modified by Tom Igoe

The circuit:
analog 0: accelerometer self test
analog 1: z-axis
analog 2: y-axis
analog 3: x-axis
analog 4: ground
analog 5: vcc

Digital pins 9, 10 and 11 drive blue, red and green legs
*/
// these constants describe the pins. They won't change:
const int groundpin = 18; // analog input pin 4 -- ground
const int powerpin = 19; // analog input pin 5 -- voltage
const int xpin = 3; // x-axis of the accelerometer
const int ypin = 2; // y-axis
const int zpin = 1; // z-axis (only on 3-axis models)
const int blueLed = 9; // output pin for blue LED
const int redLed = 10; // output pin for red LED
const int greenLed = 11; // output pin for green LED
void setup()
{

// Provide ground and power by using the analog inputs as normal
// digital pins. This makes it possible to directly connect the
// breakout board to the Arduino. If you use the normal 5V and
// GND pins on the Arduino, you can remove these lines.
pinMode(groundpin, OUTPUT);
pinMode(powerpin, OUTPUT);
digitalWrite(groundpin, LOW);
digitalWrite(powerpin, HIGH);

//sets pins for LEDs as outputs
pinMode(blueLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
}
void loop()
{
//run tilitToLight function for each axis
tiltToLight(xpin, blueLed);
tiltToLight(ypin, redLed);
tiltToLight(zpin, greenLed);

}

void tiltToLight(int readFrom, int writeTo){
//set readVal to the input from the accelerometer, minus 400
//for this model accelerometer, raw input minus 400 yields values roughly between 0 and 255
int readVal = (analogRead(readFrom) - 400);

//check for out-of-range values
if (readVal < readval =" 0;"> 255) {
readVal = 255;
}

//write the modified input from the specificed axis of the accelerometer to the appropriate output pin
analogWrite(writeTo, (readVal));

}

Logramos nuestro objetivo, he hicimos funcionar el led como nosotros queríamos, tuvimos un percance, que el led solo reproducía dos colores, la gama completa de los verdes, la gama completa de los rojos ó la gama completa de los azules.

También para que funcionara una pata de la resistencia tenía que tocar las patas del led RGB

y bueno Aqui un video de como nos quedo:





No hay comentarios:

Publicar un comentario