Magnetogram für Salzburg Stadt

Die Diagramme (Magentogram) zeigen die Stärke des Erdmagnetfeldes in der X-, Y- und Z-Achse in Miligauss (1 mGa = 0.001 Ga), die Gesamtfeldstärke des Erdmagnetfeldes in mGa sowie die Ausrichtung des Kompass in Grad. Da das Kompass-Modul noch nicht fix montiert ist, können sich die Werte bei Positionsänderungen spunghaft ändern.

Kombiniertes Magnetogram

Die Feldstärken, werden mit dem 3-Achsen Kompass-Modul HMC5883L von Adafruit mit Hilfe eines Raspberry Pi (Model B) ausgelesen. Die Grafiken werden aus den Sensor-Daten dynamisch über die API von Xively.com und der JavaScript-Library Highcharts generiert. Xively.com Dashboard: https://xively.com/feeds/115042809

Anschluss des HMC5883L über GPIO des Raspberry-Pi:

Raspberry Pi (B) HMC5883L
1. 3.3V VCC
2. GND GND
3. SDA SDA
4. SCL SCL

 

Compass_HMC5883L_Steckplatine

Nachfolgend der Python-Quellcode zum Auslesen der 3-Achsen Kompass HMC5883L. Zum einfachen Auslesen, wird i2clibraries verwendet.

#!/usr/bin/env python3

import time
import math
import requests
import json
from i2clibraries import i2c_hmc5883l

port = 1              # i2c port: 0...Model A or 1...Model B and B+
adr = 0x1e            # address for compass (fixed: 0x1e)
scale = 8.1           # scale: 0.88, 1.3 (default), 1.9, 2.5, 4.0, 4.7, 5.6, 8.1 Gauss (e.g. 1.3 G = 0.00013T = 130000 nT)

xively_url    = "https://api.xively.com/v2/feeds/"
xively_feedid = "***get_from_xively.com***"
xively_key    = "***get_from_xively.com***"

declination_deg = 2   # magnetic declination from http://magnetic-declination.com (degree)
declination_min = 56  # magnetic declination from http://magnetic-declination.com (minutes)# inclination: 63° 57', field strength 48255.9 nT

compass = i2c_hmc5883l.i2c_hmc5883l(port, adr, scale) # init hmc5883l
compass.setContinuousMode()
compass.setDeclination(declination_deg, declination_min) # set declination
time.sleep(0.5) # wait for changes

while 1:
  (x, y, z) = compass.getAxes() # read x, y, z values in mGa
  (deg, min) = compass.getHeading() # get heading in deg and min
  heading = round(deg + min / 60, 2)
  strength_gauss = round(math.sqrt(x * x + y * y + z * z), 2) # calculate magnetic field strength using the euclidean distance function
  strength_tesla = math.floor(strength_gauss * 100)

  print("Heading: ",deg,"° ",min, "'", sep="")
  print("Values:", x, y, z)
  print("Strength:", strength_tesla, "nT", strength_gauss, "mGa")
  data = []
  data.append({"id":"Compass_heading", "current_value":str(heading)})
  data.append({"id":"Compass_field",   "current_value":str(strength_gauss)})
  data.append({"id":"Compass_field_x", "current_value":str(x)})
  data.append({"id":"Compass_field_y", "current_value":str(y)})
  data.append({"id":"Compass_field_z", "current_value":str(z)})
  xively_body = {"version":"1.0.0", "datastreams":data}
  xively_json = json.dumps(xively_body)
  res = requests.put(xively_url+xively_feedid+".json", headers={"X-ApiKey":xively_key}, data=xively_json)
  time.sleep(15)

Die ausgelesenen Erdmagnetfeld-Werte sind derzeit noch unkalibriert. Außerdem wäre die autom. Wahl der Skala für den Sensors wünschenswert, um auch kleinere Änderungen im Magnetogram zu erfassen.

Beispiel Magentogram:

Beispiel eines Magentograms am Standort Salzburg
Beispiel eines Magentograms am Standort Salzburg

Quellen: