"9 grader av frihet" IMU (11 / 12 steg)

Steg 11: Prata med Accelerometer/Magnetometer med I2C



Följande kod skriver rå acceleration och magnetiska data för X, Y, och Z-axeln (tre första siffrorna är X, Y, Z acceleration, senaste tre är X, Y Z magnetfält). utdata från min ombord visas ovanför.

#include < Wire.h >

#define ACC_MAG_ADDRESS ((int) 0x1E) / / 0x1E = 0x3C / 2
#define OUTPUT__BAUD_RATE 57600
#define STATUS_LED_PIN 13 / / Pin-kod för status-LED

Arduino bakåtkompatibilitet makron
#if ARDUINO > = 100
#define WIRE_SEND(b) Wire.write((byte) b)
#define WIRE_RECEIVE() Wire.read()
#else
#define WIRE_SEND(b) Wire.send(b)
#define WIRE_RECEIVE() Wire.receive()
#endif

float acc [3].
float mag [3].
int num_mag_errors = 0;
int num_acc_errors = 0;
booleska output_errors = false;

void setup()
{
Wire.BEGIN(); gå med i2c bussen (adress valfritt för master)
Serial.BEGIN(OUTPUT__BAUD_RATE); Starta följetong för utdata

Init status-LED
pinMode (STATUS_LED_PIN, OUTPUT);
digitalWrite (STATUS_LED_PIN, låg);

Init sensorer
Delay(50); Ge sensorer tillräckligt med tid att starta
Acc_Mag_Init();

Läs sensorer, init DCM algoritm
Delay(20); Ge sensorer tillräckligt med tid att samla in data
}

void Acc_Mag_Init()
{

som acceleration datahastigheten till 50Hz, aktiverar alla acc axlar
Wire.beginTransmission(ACC_MAG_ADDRESS);
WIRE_SEND (0x20); //CTRL1 registrera
WIRE_SEND (0X57); //01010111
Wire.endTransmission();
Delay(5);

Ange acceleration skala +/-16G
Wire.beginTransmission(ACC_MAG_ADDRESS);
WIRE_SEND (0x21); //CTRL2 registrera
WIRE_SEND (0X20); //0010000
Wire.endTransmission();
Delay(5);

magnetiska upplösningen till hög och datahastighet inställd på 50Hz
Wire.beginTransmission(ACC_MAG_ADDRESS);
WIRE_SEND (0x24); //CTRL5 registrera
WIRE_SEND (0X70); //01110000
Wire.endTransmission();
Delay(5);

Ange magnetiska skala till +/-8 Gauss
Wire.beginTransmission(ACC_MAG_ADDRESS);
WIRE_SEND (0x25); //CTRL6 registrera
WIRE_SEND (0X40); //01000000
Wire.endTransmission();
Delay(5);

Ställ in magnetometer att kontinuerligt läge
Wire.beginTransmission(ACC_MAG_ADDRESS);
WIRE_SEND (0x26); //CTRL7 registrera
WIRE_SEND(0x00); / /
Wire.endTransmission();
Delay(5);

}

Läsningar x, y och z acc/mag register
void Read_Mag()
{
int jag = 0;
byte buff [6].

Wire.beginTransmission(ACC_MAG_ADDRESS);
WIRE_SEND(0X08 | 0X80); Skickar adressen att läsa från
Wire.endTransmission();

Wire.beginTransmission(ACC_MAG_ADDRESS);
Wire.requestFrom (ACC_MAG_ADDRESS, 6); Begäran 6 byte
While(Wire.available()) / / ((Wire.available()) & &(i<6))
{
buff [i] = WIRE_RECEIVE(); Läs en byte
i ++;
}
Wire.endTransmission();

om (jag == 6) / / alla byte fick?
{
mag [0] = -1 * (((int) buff[1]) << 8) | buff[0]); X-axeln
mag [1] = -1 * (((int) buff[3]) << 8) | buff[2]); Y-axeln
mag [2] = -1 * (((int) buff[5]) << 8) | buff[4]); Z-axeln
}
annat
{
num_mag_errors ++;
om (output_errors) Serial.println("! ERR: läsa acc/mag ");
}
}

void Read_Acc() {
int jag = 0;
byte buff [6].

Wire.beginTransmission(ACC_MAG_ADDRESS);
WIRE_SEND(0X28 | 0X80); Skickar adressen att läsa från
Wire.endTransmission();

Wire.beginTransmission(ACC_MAG_ADDRESS);
Wire.requestFrom (ACC_MAG_ADDRESS, 6); Begäran 6 byte
While(Wire.available()) / / ((Wire.available()) & &(i<6))
{
buff [i] = WIRE_RECEIVE(); Läs en byte
i ++;
}
Wire.endTransmission();

om (jag == 6) / / alla byte fick?
{
ACC [0] = -1 * (((int) buff[1]) << 8) | buff[0]); X-axeln
ACC [1] = -1 * (((int) buff[3]) << 8) | buff[2]); Y-axeln
ACC [2] = -1 * (((int) buff[5]) << 8) | buff[4]); Z-axeln
}
annat
{
num_acc_errors ++;
om (output_errors) Serial.println("! ERR: läsa acc/mag ");
}
}

void loop() {
Delay(100);
Read_Mag();
Read_Acc();

Serial.Print(ACC[0]);
Serial.Print("");
Serial.Print(ACC[1]);
Serial.Print("");
Serial.Print(ACC[2]);
Serial.Print("");

Serial.Print(mag[0]);
Serial.Print("");
Serial.Print(mag[1]);
Serial.Print("");
Serial.println(mag[2]);
}

Se Steg
Relaterade Ämnen

Göra en 3 grad av frihet 'hand' att hjälpa till med lödning / limning arbete

hur man gör en ny tre grad av frihet hand för din "hjälpande händer". Designen kan du göra anpassade, omkopplingsbar ändbitar (utöver standard alligator clip).Steg 1: hitta delar liggande ############du behöver:tre skruvar,fyra nötter (lämpligt...

En sfärisk flygmaskin med ingen kontroll ytor

Detta vårt inträde för en lokal flygmaskin design competition. För tävlingen, vi var i uppdrag att designa och bygga en flygmaskin som kan beskrivas som "okonventionell". Att vara hardcore fans av många science fiction visar oss själva, vi drog...

TEAM INVERKAN! Smart hjälm - Intel Edison, Sparkfun 9DOF

Intellekten Edison med Sparkfun 9DOF LSM9DS0 IMU3: e plats @ Intel IoT Roadshow NYC 2015Detta Instructable är för en Intel Edison IoT Smart hjälm som använder en Sparkfun 9DOF att samla in data från hjälmen för att mäta huvudet tramas och skapa en 3D...

SITWAY

du är aldrig för gammal att lära sig och prova nya saker. Jag tror att en av de bästa dagarna i mitt liv var den dagen jag upptäckte på Instructables webbplats. Det öppnade upp en helt ny värld för mig. Detta är min tredje instructable. Jag tycker ve...

Accelerometer & Gyro handledning

IntroduktionHandboken är avsedd för alla intresserade att använda accelerometrar och gyroskop samt kombination IMU enheter (Inertial måttenhet) i deras elektronik projektKommer vi att täcka:Vad en accelerometer mäta?Vad ett gyroskop (aka gyro) mäta?H...

Min första självbalanserande Robot Diy lätt Under 25 år

Detta är min första självbalanserande robot och jag söker på internet efter andra självbalanserande projekt och jag designar min gruva robot att vara enkel och billig.I denna instructabile jag whill berätta dig steg för steg hur man bygger din robot...

Arduino animatörerna-gör din awesome kostymer mer awesome!

Här gör du att lägga till åtgärder, ljus och ljud i din favorit Halloween projekt med öppen källkod Arduino mikrokontroller. Arduino är lätt att lära sig att använda och det öppnar upp en helt ny värld för kostym byggare och varelse skaparna. Om du v...

Vad är quad copter en lite om att göra en

Vad är en Quad copter?en obemannad helikopter med fyra rotorer. helt enkeltMultikoptrar är aerodynamiskt instabila och kräver absolut en färddator (aka flyg controller) för stabil flygning. Som ett resultat, de är "Fly by Wire" system och om dat...

PCB Quadrotor (borstlösa)

Quadrotors är den nya Segways: en fascinerande, något magiskt, själv stabiliserande plattform som varje tech person vill ha. Du kan inte rida en quadrotor (Tja, kanske du kan), men de flyger, och du kan bygga en själv från grunden!Jag hjälpte med en...

Lätt bygga själv balansera elektriska skateboard

Vad är det?Twin hjul skateboard som fungerar som en Segway. Electric skateboards finns redan med motordriven bakhjulen. Planen här var att bygga något som en Segway, men i form av en skateboard. Det vet vilken väg är "upp" via en kombination av...

PcDuino Crowdsource Kiosk

när jag fick i uppdrag att bygga ett projekt som visar upp pcDuino utveckling styrelsen, jag var illa först. Denna lilla styrelse är så kapabel att det är ungefär som att vara ombedd att göra en demonstration om hur du använder en stationär dator. Ja...

Quadcop Green / svart sköld---QUADROTOR

http://arduinoquadrotor.blogspot.in/Denna Quadcop grön sköld kan du enkelt ansluta din Sparkfun 6DOF (som inkluderar de trogna ITG3200 gyro och ADXL345 accel) till en Pro Mini Arduino att skapa en 6 grad av frihet tröghetsbaserad måttenhet (IMU). Den...

Upp och upp - Robot balansera Revisited

Detta instructable hjälper dig att bygga en enkel, 2 hjul balanserande robot, och spenderar lite tid att utforska de olika faktorer som påverkar balansera prestanda. Detta är min andra robot projekt, och jag hade två viktiga motiv – att bestämma, och...

Self balancing one wheeled electric skateboard

OBS:Maj 2011: Detta instructable är nu ganska gammal (relativt) och jag kunde nu bygga detta projekt helt enkelt med en Arduino som registeransvarig.Jag arbetar för närvarande på en enhjuling med samma OSMC motor styrenhet och en Arduino. När jag får...

Sky-skrivare - prototyper en anpassningsbar storskaliga 3d-skrivare

Sky skrivaren är en anpassningsbar, kabel-baserade delta-gantry system som kan sträcka sig över stora områden med ett minimalt fotavtryck. Sky skrivaren är utformad för storskaliga applikationer i potentiellt avlägsna platser. Det kan förstås som utv...

Själv balansera Robot

Först och främst vill jag be om ursäkt för min engelska, om du inte förstår något, vänligen, fråga.Jag vet att en självbalanserande robot är inte ny, men när jag började detta projekt jag hittade mycket information, men aldrig på samma plats, jag var...

Enkel, enkel och billig DIY stegräknare med Arduino

Jag lånade en accelerometer 4 månader tillbaka från en vän men jag insåg det är aldrig satts in i dess bästa användning. Så varför inte göra något bra av den. Jag har redan https://play.google.com/store/apps/details?id=com.noom.walk installerat i tel...

3D tryckt pneumatiska JOYSTICK för FLEX vakuum makt och pneumatisk kontroll EXTREMITETER

Jag skapade 3d tryckta flex extremiteter som kan användas för armar eller ben av robotar. De drivs av en hem dammsugare och don´t använda någon elektronisk kontroll, bara 3d tryckta analoga pneumatiska joysticken behövs!Varje ände består av 3 interco...

Hur du kan visa en animering i Fusion 360

Mer exakt, visar detta Instructable du hur till göra en rörelsestudie i Autodesk Fusion 360 med deras mycket trevligt och mycket snabb Cloud Rendering. Så om till exempel du har modellerade något, och du vill animera hur den rör sig, är här de (allmä...