A16. ADXL345 kiihtyvyysanturi - matpi/EmbeddedSystemsUTU GitHub Wiki

##ADXL345 kiihtyvyysanturi

ADXL345 ADXL345

ADXL345 on digitaalinen kiihtyvyysanturi, joka mittaa kiihtyvyyttä kolmella akselilla (x,y,z). Laitetta luetaan ja ohjataan I2C-väylällä, joten se tarvitsee vain kaksi datalinjaa. I2C-väylän vaatimat ylösvetovastukset ovat valmiina moduulissa. Laitetta voidaan käyttää hyvin erilaisissa projekteissa. Arduino voidaan ohjelmoida vaikkapa tunnistamaan kiihtyvyysanturin avulla vapaapudotus tai muunlainen liikeaktiivisuus. Anturille löytyy englanninkielinen tutorial esimerkiksi sivustolta http://bildr.org/2011/03/adxl345-arduino/

• käyttöjännite 3.3 V tai 5 V

ADXL345 kiihtyvyysanturi liitetään Arduinon I2C väylään kuten muutkin I2C laitteet:

• ADXL345 GND -> Arduino GND

• ADXL345 VCC -> Arduino +5v

• ADXL345 SDA -> Arduino SDA (Analog 4)

• ADXL345 SCL -> Arduino SCL (Analog 5)

1. Ladatkaa arduino-ohjelmasta löytyvä koodi Arduinolle. Laite voidaan kytkeä joko 3,3 V tai 3,5 käyttöjännitteelle. Kokeilkaa laitetta.

2. Kokeilkaa alla olevia koodeja ja tutkikaa miten ne toimivat

3. Tehkää joku oma sovellus jossa hyödynnätte kiihtyvyysdataa tai anturin muita ominaisuuksia


Esimerkki 1: Luetaan kiihtyvyysdataa ja tulostetaan sarjaporttiin.

//Arduino 1.0+ Only!
//Arduino 1.0+ Only!

#include <Wire.h>
#include <ADXL345.h>


ADXL345 adxl; //alustetaan kirjasto objekti

void setup()
{
Serial.begin(9600);
adxl.powerOn(); // sensori päälle
}

void loop()
{

//Boring accelerometer stuff   
int x,y,z;  // luodaan int-muuttujat jokaiselle kiihtyvyyssuunnalle
adxl.readAccel(&x, &y, &z); //luetaan kiihtyvyydet ja tallenetaan ne muuttujiin  x,y,z

// Output x,y,z values - Commented out
Serial.print("X=");
Serial.print(x);
Serial.print("Y=");
Serial.print(y);
Serial.print("Z=");
Serial.println(z);

}

Esimerkki 2: Tämä koodi löytyy Arduino-ohjelman esimerkeistä ADXL345 kiihtyvyysanturin alta nimellä adxl345_example. Alla olevassa koodissa activity ja inactivity rajoja on hieman muutettu. Koodi lukee tiedon siitä, liikutellaanko sensoria vai ei.

// Arduino 1.0+ Only!
// Arduino 1.0+ Only!
#include <Wire.h>
#include <ADXL345.h>

ADXL345 adxl; // variable adxl is an instance of the ADXL345 library

void setup()
{
Serial.begin(9600);
adxl.powerOn();
// asetetaan  activity / inactivity rajat (0-255)
adxl.setActivityThreshold(100); //62.5mg per increment
adxl.setInactivityThreshold(125); //62.5mg per increment
adxl.setTimeInactivity(10); // kuinka monta sekunttia toimettomuutta tulkitaan olevan "inactivity"? 

// millä akseleilla aktiivisuutta tutkitaan s - 1 == on; 0 == off  
adxl.setActivityX(1);  
adxl.setActivityY(1);  
adxl.setActivityZ(1);

// look of inactivity movement on this axes - 1 == on; 0 == off    
adxl.setInactivityX(1);  
adxl.setInactivityY(1);  
adxl.setInactivityZ(1);

// setting all interupts to take place on int pin 1  
// I had issues with int pin 2, was unable to reset it
adxl.setInterruptMapping( ADXL345_INT_ACTIVITY_BIT,     ADXL345_INT1_PIN );    
adxl.setInterruptMapping( ADXL345_INT_INACTIVITY_BIT,   ADXL345_INT1_PIN );

// register interupt actions - 1 == on; 0 == off    
adxl.setInterrupt( ADXL345_INT_ACTIVITY_BIT,   1);  
adxl.setInterrupt( ADXL345_INT_INACTIVITY_BIT, 1);
}

void loop()
{   
// Fun Stuff!   
// read interrupts source and look for triggerd actions  
// getInterruptSource clears all triggered actions after returning value  
// so do not call again until you need to recheck for triggered actions

byte interrupts = adxl.getInterruptSource();

// inactivity  
if(adxl.triggered(interrupts, ADXL345_INACTIVITY))
{   
Serial.println("inactivity");     
//add code here to do when inactivity is sensed  
}

// activity  
if(adxl.triggered(interrupts, ADXL345_ACTIVITY))  
{    
Serial.println("activity");     
// add code here to do when activity is sensed  
} 
}

⚠️ **GitHub.com Fallback** ⚠️