German English
Sensoren

HMC5883L - Magnetfeld in 3-Achsen über I2C auslesen

Der auf dem Funkmodul Preon32 eingesetzte Mikrocontroller verfügt über eine Vielzahl von Schnittstellen. Über diese lassen sich sowohl Sensoren als auch Aktoren mit unterschiedlichen Protokollen ansteuern. Für das Funkmodul passend entwickelt bietet VIRTENIO ein Sensormodul VariSen für das Preon32Shuttle an, dass eine Vielzahl von Sensoren für unterschiedliche Messgrößen enthält.
In diesem Beispiel wird ein digitaler Sensor für Magnetfelder (HMC5883L) an einer der I2C-Schnittstellen betrieben. Der Treiber ermöglicht eine Konfiguration, so dass in diesem Beispiel eine kontinuierliche Erfassung von Magnetfeldern durchgeführt wird. Im Programmverlauf wird das Magnetfeld in einem zeitlichen Abstand von 1000ms in 3-Achsen (X, Y, Z) erfasst und als Sensorwert ausgegeben.
/*
 * Copyright (c) 2011., Virtenio GmbH
 * All rights reserved.
 */
package com.virtenio.webdemo.sensor;

import com.virtenio.drivers.i2c.NativeI2C;
import com.virtenio.drivers.sensors.i2c.HMC5883L;

import java.io.IOException;

public class DigiMagI2C {

    public static void main(String[] args) throws IOException, InterruptedException {

        // open Native I2C Bus
        NativeI2C i2c = NativeI2C.getInstance(1);
        i2c.open();

        // initialise HMC5883L sensor
        HMC5883L digitalMagSensor = new HMC5883L(i2c);
        digitalMagSensor.setMode(HMC5883L.MODE_CONTINUOUS);
        digitalMagSensor.configure(
                HMC5883L.SAMPLES_AVERAGED_8,    // 8 Samples per measurement
                HMC5883L.DATA_RATE_15,          // Data output rate of 15 Hz
                HMC5883L.MODE_CONTINUOUS,       // Continuous measurement mode
                7   // gain
        );

        while (true) {
            // capture measured value every 1000ms
            short[] ch = new short[3];
            int offset = 0;
            digitalMagSensor.readValues(ch, offset);
            System.out.println("DigiMag " +
                               "CH[0]:" + ch[0] + " " +
                               "CH[1]:" + ch[1] + " " +
                               "CH[2]:" + ch[2]);
            Thread.sleep(1000);
        }
    }
}