-->
Page 1 of 1

esp8266----adlx345 orientation

PostPosted: Sun Sep 27, 2020 1:09 pm
by Drakan1
hi, i been trying passing orientation data from adlx345 to esp8266 and it gives bad information, i can pass data from acelaration, but my code to pass orientation data won't work propertly. i will pass the code down here.

Scl ---D1
Sda---D2
Gnd--gnd
3v3---3v3

#include <Wire.h> // Wire library - used for I2C communication
int ADXL345 = 0x53; // The ADXL345 sensor I2C address
float X_out, Y_out, Z_out; // Outputs
float roll,pitch,rollF,pitchF=0;
void setup() {
//ESP8266 MASTER
Serial.begin(9600); // Initiate serial communication for printing the results on the Serial monitor
Wire.begin(); // Initiate the Wire library
// Set ADXL345 in measuring mode
Wire.beginTransmission(ADXL345); // Start communicating with the device
Wire.write(0x2D); // Access/ talk to POWER_CTL Register - 0x2D
// Enable measurement
Wire.write(8); // Bit D3 High for measuring enable (8dec -> 0000 1000 binary)
Wire.endTransmission();
delay(10);
//Off-set Calibration
//X-axis
Wire.beginTransmission(ADXL345);
Wire.write(0x1E);
Wire.write(1);
Wire.endTransmission();
delay(10);
//Y-axis
Wire.beginTransmission(ADXL345);
Wire.write(0x1F);
Wire.write(-2);
Wire.endTransmission();
delay(10);
//Z-axis
Wire.beginTransmission(ADXL345);
Wire.write(0x20);
Wire.write(-9);
Wire.endTransmission();
delay(10);
}
void loop() {
// === Read acceleromter data === //
Wire.beginTransmission(ADXL345);
Wire.write(0x32); // Start with register 0x32 (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(ADXL345, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
X_out = ( Wire.read() | Wire.read() << 8); // X-axis value
X_out = X_out / 256; //For a range of +-2g, we need to divide the raw values by 256, according to the datasheet
Y_out = ( Wire.read() | Wire.read() << 8); // Y-axis value
Y_out = Y_out / 256;
Z_out = ( Wire.read() | Wire.read() << 8); // Z-axis value
Z_out = Z_out / 256;
// Calculate Roll and Pitch (rotation around X-axis, rotation around Y-axis)
roll = atan(Y_out / sqrt(pow(X_out, 2) + pow(Z_out, 2))) * 180 / PI;
pitch = atan(-1 * X_out / sqrt(pow(Y_out, 2) + pow(Z_out, 2))) * 180 / PI;
// Low-pass filter
rollF = 0.94 * rollF + 0.06 * roll;
pitchF = 0.94 * pitchF + 0.06 * pitch;
Serial.print(" X= ");
Serial.print(rollF);
Serial.print("/");
Serial.print(" Y= ");
Serial.print(pitchF);//ln na ultima linha
Serial.print("/");
Serial.print(" Z= ");
Serial.println(Z_out);
}




the output is like

x:89.50 y=-0.01 z=0.83



code only show acelaration (works)

#include <Wire.h>
#include <Adafruit_Sensor.h> // Adafruit sensor library
#include <Adafruit_ADXL345_U.h> // ADXL345 library

Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(); // ADXL345 Object

void setup() {

Serial.begin(9600);
if(!accel.begin()) // if ASXL345 sensor not found
{
Serial.println("ADXL345 not detected");
while(1);
}

}

void loop() {

sensors_event_t event;
accel.getEvent(&event);
Serial.print("X: ");
Serial.print(event.acceleration.x);
Serial.print(" ");
Serial.print("Y: ");
Serial.print(event.acceleration.y);
Serial.print(" ");
Serial.print("Z: ");
Serial.print(event.acceleration.z);
Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);

}

Re: esp8266----adlx345 orientation

PostPosted: Mon Sep 28, 2020 2:58 am
by schufti
hm, from the ds the adlx345 is only accelerometer no compass, so I doubt you can get orientation from it?

Re: esp8266----adlx345 orientation

PostPosted: Tue Sep 29, 2020 1:01 pm
by Drakan1
schufti wrote:hm, from the ds the adlx345 is only accelerometer no compass, so I doubt you can get orientation from it?


i can get orientation in arduino, but when i compile de code in esp8266, the output is wrong.

Re: esp8266----adlx345 orientation

PostPosted: Fri Oct 02, 2020 1:35 am
by schufti
then most likely the library is not esp8266 compatible.
so look at the lib and in case ask over at adafruit (lib author) for solution.
they sell esp8266 and adlx345 so should provide compatible libs.