Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

photogyulai
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. május 19. kedd, 0:37

Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: photogyulai » 2017. július 31. hétfő, 20:26

Tisztelt Hölgyek, Urak!

Elkezdtem alkotni adxl345-ös cuccal:
http://shop.tavir.hu/product_info.php/s ... nzor-p-215

Azonban pillanatnyilag nem tudok kiszedni belőle CSAK gyorsulás infót(tehát minden más jön vele együtt, pedig nekem csak a gyorsulás kéne).
Nem kéne nagy etwas >> egy tengelyen szeretnék lassulást mérni, azt változóba írni, ami ha nagyobb mint X akkor történjen valami.

Tehát olyasmi kéne, hogy egy választott tengelyen naaaagyyy 0-ákat írjon értéknek ha nyugalomban van.

De e helyett az xyz értékek azt mutatják, hogy milyen szögben áll a kezemben az eszköz.

Kódrészlet: adxl.readAccel(&x, &y, &z);

A kérdés:
lehet ilyet ezzel az eszközzel?! Elvileg gyorsulásmérő is... Vagy be kéne szerezzek vmi mást, ami ilyet tud?!? Van e olyan parancs, amivel csak a gyorsulást lehet belőle kihúzni?

Köszönöm előre is!
Bence

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3234
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: kapu48 » 2017. augusztus 1. kedd, 16:32

Még használhatod az utasításokat:

Kód: Egész kijelölése

        // DATA* registers
        void getAcceleration(int16_t* x, int16_t* y, int16_t* z);
        int16_t X = getAccelerationX();
        int16_t Y = getAccelerationY();
        int16_t Z = getAccelerationZ();

photogyulai
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: photogyulai » 2017. augusztus 3. csütörtök, 1:48

kapu48 köszi!

próbáltam ezt több helyre beillszetni, de mindenhol a "getAcceleration not declared in this scope" hiba jön elő.

KÉrem írd meg ezt hová kéne illeszteni?!? Egy kicsit pontosíts kérlek!
köszönöm!
Bence

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3234
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: kapu48 » 2017. augusztus 4. péntek, 11:46

Gondolom, ezt akarod használni?
http://shop.tavir.hu/downreg.php?filename=sen-gy291.zip
sen-gy291.zip
ADXL345_raw.ino

Kód: Egész kijelölése


// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#include "Wire.h"

// I2Cdev and ADXL345 must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
//#include "I2Cdev.h"
#include "ADXL345.h"

// class default I2C address is 0x53
// specific I2C addresses may be passed as a parameter here
// ALT low = 0x53 (default for SparkFun 6DOF board)
// ALT high = 0x1D
ADXL345 accel;

int16_t ax, ay, az;

#define LED_PIN 13 // (Arduino is 13, Teensy is 6)
bool blinkState = false;

void setup() {
    // join I2C bus (I2Cdev library doesn't do this automatically)
    Wire.begin();

    // initialize serial communication
    // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
    // it's really up to you depending on your project)
    Serial.begin(38400);

    // initialize device
    Serial.println("Initializing I2C devices...");
    accel.initialize();

    // verify connection
    Serial.println("Testing device connections...");
    Serial.println(accel.testConnection() ? "ADXL345 connection successful" : "ADXL345 connection failed");

    // configure LED for output
    pinMode(LED_PIN, OUTPUT);
}

void loop() {
    // read raw accel measurements from device X
    ax = accel.getAccelerationX();      // <<<<
    Serial.print("ax: ");
    Serial.println(ax);
   
    accel.getAcceleration(&ax, &ay, &az);

    // display tab-separated accel x/y/z values
    Serial.print("accel:\t");
    Serial.print(ax); Serial.print("\t");
    Serial.print(ay); Serial.print("\t");
    Serial.println(az);

    // blink LED to indicate activity
    blinkState = !blinkState;
    digitalWrite(LED_PIN, blinkState);
}


photogyulai
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: photogyulai » 2017. augusztus 6. vasárnap, 2:32

hát ezt is néztem de ez is mindent kiiír ha jól látom (nem biztos, hogy jól látom)
tulajdonkép teljesen mindegy.. bárhogy jó ha alapból 0 közeli értékeket ír amikor nyugalomban van.

köszi a kódot csak nem tudom hova, hogyan beilleszteni... (mármint én nem vagyok olyan pro, hogy élből levágjam)
azt sem tudom, hogy ez egy nehéz feladat amin heteket kell vacakolni, vagy két sor kód az egész (mert egy gyorsulásmérőtől nem tűnik túl nagy was ist dasnak, hogy ezt úgy alapból tudja. :-)

Szóval kösz bármi választ!

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3234
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: kapu48 » 2017. augusztus 6. vasárnap, 10:14

Nem értem, hogy mit nem értesz?

Illetve azt sem tudom, hogy te mit próbáltál megoldásképen csinálni?
Egyáltalán mertél, vagy próbálkoztál valamivel?
Amire nincsen szükséged a kódban, azt egyszerűen ki kel törölni belőle!

Mit, hova akarsz beilleszteni?
Mi a célod?
Beszúrtam 2 sor kiegészítést az eredeti programba, az lenne, a válassz a kérdésedre.
Megtaláltad?
ax be beolvassa X gyorsulás értékét!:

Kód: Egész kijelölése

// read raw accel measurements from device X
    ax = accel.getAccelerationX();      // <<<<

vargham
Pákabűvész
Hozzászólások: 246
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: vargham » 2017. augusztus 6. vasárnap, 13:22

Van egy tippem, hogy mit nem értesz.
Az accelerometer az egy lineáris gyorsulásmérő. Jelen esetben három, egymással 90 fokot bezáró tengellyel. A Föld nevű bolygón folyamatosan ki van téve minden test a gravitációs erőnek. Ezért a gyorsulásmérőd nyugalmi helyzetben mindig 9,8 m/s2 gyorsulást fog mérni, a három tengelyén elosztva. Ha például úgy forgatod, hogy az egyik tengelye, mondjuk a Z, merőleges legyen a földfelszínre, akkor X=0,0 Y=0,0 Z=9,8 lesz a mért érték, ha ekkor fejjel lefelé fordítod, akkor pedig X=0,0 Y=0,0 Z=-9,8, és így tovább.
Neked viszont egy tengely mentén kellene mérned a gyorsulást, amibe nem számítod bele a gravitációs gyorsulást. Legegyszerűbb az, ha a szenzor egyik tengelye mentén mérsz, vagyis a szenzor tengelye essen egybe a mozgási irányoddal. Természetesen ez nem szükséges, lehet úgy is mérni, hogy szöget zárnak be egymással. Ilyenkor a gravitációs gyorsulás kivonása után már ki tudod számolni a megfelelő vektorokat.
Például: https://physics.stackexchange.com/questions/41653/how-do-i-get-the-total-acceleration-from-3-axes

Ha a mérendő tested szabadon mozoghat a tér minden irányába, akkor a mozgás előtt meg kell mérned, hogy merre van lefele, vagyis melyik tengelyre mekkora összetevője esik a gravitációnak.

Ha a test el is fordulhat mozgás közben, akkor szükséged lesz egy giroszkópra (szöggyorsulásmérő) is, és a szenzorfúziónak nevezett műveletsorra.
https://www.digikey.com/en/articles/techzone/2012/apr/sensor-fusion-the-basics
Kép

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3234
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: kapu48 » 2017. augusztus 7. hétfő, 11:14

Igen!
Ha nem áll tökéletesen vizszintben?
És állandó értéket mér. Akkor húzza a gravitáció.

photogyulai
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: photogyulai » 2017. augusztus 13. vasárnap, 21:54

Urak köszönöm megpróbálok nekiesni mégegyszer, fentiek alapján!
B

photogyulai
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: photogyulai » 2017. augusztus 23. szerda, 2:51

talán alakul. a post alján az aktuális kód.

a kód működik, serial porton kapom az infót, de hiába csak egy tengelyt (és elvileg azon lévő gyorsulást nem elfordulást mérek)
mindenre változik a kapott érték... akár milyen tengely mentén ha forgatom akkor 400 és minusz akárhány között kapok értékeket, nyugalomban.

feliratozva van a 3 tengely a lapkán ez alapján is figyelem. ha olyan 20-30fokban tartom a vízszinteshez képest, akkor ír 0-a értéket.
ha vízszintesen tartom akkor 60-as értéket ír.
gyorsan beletoltam a kódba egy másik változót, 60 at kivon a ax értékéből, így vízszintesen tartva kapok 0-a értéket.
ha itt meglököm a műszert akkor kitér, de akkor is kitér ha elfordítom és úgy hagyom.

Ez egy féklámpa projekt lenne, az auto lassulását szeretném mérni, viszont bármelyik tengely mentén forgatom változik az ax értéke.
az autóhoz képest fix pozícióban lenne majd, de hát az auto az fordul, dől stb.)

elvileg baromi egyszerű dologra van szükségem... egy tengelyen szeretnék csak gyorsulást mérni, és édes kínai mindegynek kéne legyen, hogy közben hogy áll az eszköz. nem ez a jó eszköz?! van ilyen eszköz?! túl nagy falat?

(mondjuk ha nem ez a jó eszköz akkor sem értem, mert jelen kód szerint két tengelyre immunisnak kéne lennie?!)

nem feltétlen vágom az egy szem accel.getAccelerationX(); aminek úgy tűnik még a nevében is benne van, hogy az Xtengely mentén gyorsulást mér, miért ad 380-as értéket, amikor közben hót nyugalomban van a test.

a kód:

#include "Wire.h"
#include "ADXL345.h"

ADXL345 accel;

int16_t ax;
int ax2;

#define LED_PIN 13 // (Arduino is 13, Teensy is 6)
bool blinkState = false;

void setup() {
Wire.begin();

Serial.begin(9600);
accel.initialize();

pinMode(LED_PIN, OUTPUT);
}

void loop() {
ax = accel.getAccelerationX();
ax2 = ax+60;
Serial.print("ax2: ");
Serial.println(ax2);

// blink LED to indicate activity
blinkState = !blinkState;
digitalWrite(LED_PIN, blinkState);

delay(200);
}

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3234
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: kapu48 » 2017. augusztus 24. csütörtök, 17:22

Azért mert:

Kód: Egész kijelölése

ax = accel.getAccelerationX();
ax2 = ax+60;          // ax2-ben bennevan az előzö érték, és ahoz adod + hozzá???
Serial.print("ax2: ");
Serial.println(ax2);
ax2 = 0;            // <<<< itt törölni kellene!!!!


photogyulai
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: photogyulai » 2017. augusztus 31. csütörtök, 7:31

biztos vagy ebben?
ax2-ben nincs benne alapból ax... ax2 egy üres változó ..persze miután
ez a sor jön >> ax2 = ax+ 60 utána már nyilván benne van, de leírtam miért így csináltam
+ anélkül sem működik (ha azt a kódot futtatom amit írtál)
+ nem lehetne elvileg ez gond, hogy egy változóhoz hozzáadok/elveszek (egy hőmérséklet alapú ventifordulat szabályzást épp így finomhangoltam)

Ha tudja valaki akkor írja már le, hogy az adxl345-el lehet úgy gyorsulást mérni, hogy nyugalomban 0értéket adjon (egy tengelyre bőven elég lenne)
vagy nem lehet/ nem ezzel lehet / nem így kell stb..

kösz

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3234
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Adxl345 giroszkop gyorsulas szenzor tud csak gyorsulást kiírni?!?

HozzászólásSzerző: kapu48 » 2017. augusztus 31. csütörtök, 13:59

Bocsi! Elözőleg butaságot írtam.

Szerintem próbáld a szenzort úgy beépíteni, hogy alap állásban 0-át mérjen.
És nem kompenzálni 60-al. Akkor talán nem lessz érzékeny minden irányú elmozdulásra.


Vissza: “Ami máshova nem besorolható...”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég