Kompass mit Raspberry pi und Python

Status
Es sind keine weiteren Antworten möglich.

steins-ursel

Aktives Mitglied
Hallo!
Bin wieder am tüfteln. Diesmal hat es mir ein QMC5883 angetan. Diesen gibt es auch als HMC5883, nur ist hier die Registerbelegung unterschiedlich.
Angeregt wurde ich dabei von dieser Seite. Die Bibliotheken für den QMC5883 bekommt man von hier.
Die Installation (Linux) geht wie folgt:

Bash:
#!/bin/bash
mkdir ~/tmp
cd ~/tmp
git clone https://github.com/RigacciOrg/py-qmc5883l
cd ./py-qmc5883l
sudo python3 setup.py install

Die eigentliche Software ist in Python geschrieben unter zu Hilfenahme von PyGame, es soll ja grafisch werden. Das verzwickte waren die Vektorberechnungen für die Kompassnadel in Abhängigkeit zur Fenstergröße. Aktuell ist es erst mal statisch geworden, eine dynamische Variante ist in Vorbereitung.
Anbei der Quelltext (Programm):

Python:
import py_qmc5883l
import time
sensor = py_qmc5883l.QMC5883L()
import pygame
import math
# Initializing Pygame
pygame.init()

# Initialing Color
red = (255,0,0)
back = (64,0,0)

# Initializing screen
screen = pygame.display.set_mode((440,440))
screen.fill(back)
 
# Drawing Circle
pygame.draw.ellipse(screen, red, [20,20,400,400], 3)
pygame.display.flip()
#init old x,y Coordinates
cwxa = 0
cwya=200

#set font north, east ... and print
schrift = pygame.font.SysFont('Arial', 20, True, False)
text = schrift.render("N", True, red)
screen.blit(text, [210, 0])
text = schrift.render("W", True, red)
screen.blit(text, [0, 210])
text = schrift.render("O", True, red)
screen.blit(text, [420, 210])
text = schrift.render("S", True, red)
screen.blit(text, [210,420])

#init trigger for loop
aktiv = True

#font for angle in degrees
schrift = pygame.font.SysFont('Arial', 40, True, False)

while aktiv:
#delete last angle
    pygame.draw.rect(screen, back, [10,10,100,40])
#get the new angle
    cwg = float(("{:>3.0f}".format(sensor.get_bearing())))
#output angle
    text = schrift.render(str(cwg), True, red)
    screen.blit(text, [10,10])
#angle in degrees to arcs
    cwb = cwg * math.pi / 180 # sin/cos only in arcs
#calculate x,y from arcs in circle
    cwy = float(("{:>3.0f}".format(190*math.cos(cwb))))
    cwx = float(("{:>3.0f}".format(190*math.sin(cwb))))
#calculate coordinates for the remove line an new line
    pygame.draw.line(screen, back, [cwxa+220, 440-(cwya+220)], [220, 220],5)
    pygame.draw.line(screen, red, [cwx+220,440-(cwy+220)], [220, 220],5)
#safe the old coordinates
    cwxa = cwx
    cwya = cwy
#get the escape
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            aktiv = False   
    time.sleep (.33)
pygame.quit()

Wie ich das Ganze nun HW-mäßig weiterbaue, weiß ich nicht nicht so richtig, da der Sensor
1. kalibriert werden muss, es gibt das was, läuft aber natürlich nicht auf meinem Equipment.
2. die Lage unheimlich wichtig ist, um sauber die Himmelsrichtungen nur aus einer Achse zu ermitteln, bei allen dreien wird's kniffelig.
1615031005106.png
 
Hallo Thomas,

mit einem Arduino habe ich sowas schon nachgebaut und mit einem Beschleunigungssensor und damit der Möglichkeit und Notwendigkeit der horizontalen Ausrichtung kombiniert. Das Ding hatte ich hier an anderer Stelle schon mal vorgestellt. Basis dafür waren diese beiden Blogs:
Kompass
Wasserwaage
Beim Kompass ergibt sich sogar die Möglichkeit, die Missweisung für den jeweiligen Standort zu kompensieren. Das hatte ich geplant mithilfe eines Poti zur Werteeinstellung.
Leider habe ich aber im den Kompass nie eine zufriedenstellende genaue Anzeige, d.h. es sind ein paar Grad Abweichung und die auch leider nicht konstant, sodass "im Kopf" einfach einen Offset berücksichtigen könnte und damit ist der Kompass für mich unbrauchbar.

Bezüglich des Lagesensors habe ich letztendlich auch diese Kalibrierung hier genutzt: ADXL345 Kalibrierung
Eventuell hilft Dir das bei der weiteren Konstruktion.

Für alle nicht "bastelwütigen" meine Alternativeempfehlung in Form einer APP: Telescope.Touch Die APP kann über den normalen Playstore von Google runtergeladen werden. Die APP ist eigentlich gedacht für die Steuerung einer Montierung über INDI Treiber, bietet aber u.a. völlig unabhängig davon einen schönen Levelsensor und Kompass (siehe Screenshot).

Grüße
Hartmut
 

Anhänge

  • Screenshot_20210308-095052.jpg
    Screenshot_20210308-095052.jpg
    72,5 KB · Aufrufe: 133
  • IMG_20210308_093106.jpg
    IMG_20210308_093106.jpg
    114,6 KB · Aufrufe: 136
  • IMG_20210308_093119.jpg
    IMG_20210308_093119.jpg
    162,7 KB · Aufrufe: 136
Hallo Hartmut,
danke für die Tips. Je näher ich mich damit beschäftige, um so unwahrscheinlicher wird eine Integration in den AstroRaspi auf Grund der Magnetfeldstörungen. Aber als Stand-Alone auf Arduino Basis macht das mehr Sinn. Ich lasse mir die Sache durch den Kopf gehen, IMHO wird es wohl in die Richtung gehen.
 
...wobei sich die Kombination aus RPi und Arduino ja nicht ausschließt. ;) Nutzt man aber beides in einem Gehäuse, dann muß man ja den RPi zur Ausrichtung mitdrehen. Da kommt es dann drauf an, wozu man den sonst noch einsetzt.
Eine Luxusvariante wäre der Einbau des oder der Sensoren in ein separates Gehäuse zusammen mit einem ESP32 oder kleinerer Varianten. Dieses dann ins WLAn einbinden und die Daten zur Aufbereitung und grafischen Anzeige zum RPi senden... :) -> "Sensorensatellit"...:cool:

Ich habe übrigens in der Nähe der Montierung keine großartigen Veränderungen des Magnetfeldes feststellen können. An der EQ6-R sind äußerlich nur die Gegengewichtsstange sowie die Schrauben als magnetisch feststellbar. Du kannst ja mal den Test mit Smartphone machen. Die Apps funktionierenauch in Montierungsnähe recht gut.
Nur mit meinen Sensor klappt das zum verr.... nicht... :confused:
 
Status
Es sind keine weiteren Antworten möglich.
Zurück
Oben