Ver video aquí: https://www.youtube.com/watch?v=omZ538TElCU
/ * Pines de conexión del acelerómetro (I2C) a Arduino se muestran a continuación:
Acelerómetro de Arduino ADXL345 A5 SCL A4 SDA 3.3V CS 3,3 v VCC GND GND * /
#include #include
ADXL345 adxl; adxl variable es una instancia de la biblioteca ADXL345
int x, y, z; int rawX, rawY, rawZ; Float X, Y, Z; flotador rollrad, pitchrad; flotador rolldeg, pitchdeg;
void setup() {Serial.begin(9600); adxl.powerOn();}
void loop() {adxl.readAccel (& x & y y z); //read el acelerómetro valores y almacenarlos en las variables x, y, z / salida (x, y, z) en el plano horizontal debe ser aproximadamente (0,0,255) / / las siguientes 3 líneas es para un desplazamiento rawX = x + 360; rawY = y + 170; rawZ = z + 10; X = rawX/521.00; utilizado para los cálculos de ángulo Y = rawY/521.00; utilizado para los cálculos de ángulo Z = rawZ/521.00; utilizado para cálculos de ángulo rollrad = atan(Y/sqrt(X*X+Z*Z)); ángulo calculado en radianes pitchrad = atan(X/sqrt(Y*Y+Z*Z)); ángulo calculado en radianes rolldeg = 180*(atan(Y/sqrt(X*X+Z*Z))) /PI; ángulo calculado en grados pitchdeg = 180*(atan(X/sqrt(Y*Y+Z*Z))) /PI; ángulo calculado en grados / impresión valores: Serial.print ("x:"); Serial.Print(x); datos sin procesar sin compensan Serial.print ("y:"); Serial.Print(y); datos sin procesar sin compensan Serial.print ("z:"); Serial.Print(z); datos sin procesar sin compensan Serial.print ("rawX ="); Serial.Print(rawX); datos en bruto con offset Serial.print ("rawY ="); Serial.Print(rawY); datos en bruto con offset Serial.print ("rawZ ="); Serial.Print(rawZ); datos en bruto con offset Serial.print ("X ="); Serial.Print(X); datos en bruto con offset y se divide por 256 Serial.print ("Y ="); Serial.Print(Y); datos en bruto con offset y se divide por 256 Serial.print ("Z ="); Serial.Print(Z); datos en bruto con offset y se divide por 256
Serial.Print ("\t ángulo según eje x (Roll(deg)) ="); Serial.Print(rolldeg); ángulo calculado en grados Serial.print ("\t ángulo según el eje y (Pitch(deg)) ="); Serial.println(pitchdeg); ángulo calculado en grados / / Serial.print ("Roll(rad) ="); Serial.Print(rollrad); ángulo calculado en radianes / / Serial.print ("Pitch(rad) ="); Serial.Print(pitchrad); ángulo calculado en radianes}