Magnetfält mätning med hjälp av HMC5883 och Arduino Nano (3 / 4 steg)
Steg 3: Arduino kod att mäta magnetfältet intensitet:
Kan börja med arduino koden nu.
När du använder modulen sensor med arduino, inkluderar vi Wire.h bibliotek. "Wire" bibliotek innehåller funktioner som underlättar i2c kommunikationen mellan sensorn och arduino styrelsen.
Hela arduino koden ges nedan för att underlätta för användaren:
#include < Wire.h >
HMC5883 I2C adress är 0x1E(30)
#define Addr 0x1E
void setup()
{
Initialisera I2C kommunikation som MASTER
Wire.BEGIN();
Initialisera seriell kommunikation, ange baudvärde = 9600
Serial.BEGIN(9600);
Starta I2C-överföring
Wire.beginTransmission(Addr);
Välj Konfigurera register A
Wire.write(0x00);
Ställ in normal mätning konfiguration, data output ränta = 0,75 Hz
Wire.write(0x60);
Stoppa I2C sändningen
Wire.endTransmission();
Starta I2C-överföring
Wire.beginTransmission(Addr);
Välj läge register
Wire.write(0x02);
Ställ in kontinuerlig mätning
Wire.write(0x00);
Stoppa I2C sändningen
Wire.endTransmission();
Delay(300);
}
void loop()
{
unsigned int data [6].
Starta I2C-överföring
Wire.beginTransmission(Addr);
Välj dataregister
Wire.write(0x03);
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 6 byte data
Wire.requestFrom (Addr, 6);
Läst 6 byte data
xMag msb, xMag lsb, zMag msb, zMag lsb, yMag msb, yMag lsb
IF(Wire.available() == 6)
{
data [0] = Wire.read();
data [1] = Wire.read();
data [2] = Wire.read();
data [3] = Wire.read();
data [4] = Wire.read();
data [5] = Wire.read();
}
Delay(300);
Konvertera data
int xMag = ((data [0] * 256) + data[1]);
int zMag = ((data [2] * 256) + data[3]);
int yMag = ((data [4] * 256) + data[5]);
Utdata till seriell monitor
Serial.Print ("magnetfält i x-axeln:");
Serial.println(xMag);
Serial.Print ("magnetfält i y-axeln:");
Serial.println(yMag);
Serial.Print ("magnetfält i z-axeln:");
Serial.println(zMag);
Delay(300);
}
I tråd bibliotek används Wire.write() och Wire.read() för att skriva kommandon och läsa sensor utdata. Efter del av koden visar läsningen av sensordata.
Läst 6 byte data
xMag msb, xMag lsb, zMag msb, zMag lsb, yMag msb, yMag lsb
IF(Wire.available() == 6)
{
data [0] = Wire.read();
data [1] = Wire.read();
data [2] = Wire.read();
data [3] = Wire.read();
data [4] = Wire.read();
data [5] = Wire.read();
}
Serial.Print() och Serial.println() används för att visa utdata från sensorn på serial bildskärmen av Arduino IDE.
Produktionen av sensorn visas i bilden ovan.