Raspberry pi HF Feldstärkemessung und plotten - HF Sniffer

Raspberry pi HF Feldstärkemessung und plotten - HF Sniffer

Beitragvon DL3NDD » Mi 30. Dez 2015, 10:50

Für eine einfache Feldstärkemessung benötigt man den Aufwand mit einem Raspberry eigentlich nicht.
Hier braucht es nur eine einfache Schaltung mit einem Mikroamperemeter.

Anders sieht es aus, wenn man z.B. automatische Sendestationen (Relaisstellen) oder den eigenen Funkbetrieb überwachen und die Zeiträume der Aktivität erfassen will.
Dazu habe ich mit dem Raspberry pi und einigen wenigen externen Bauteilen eine wunderbar funktionierende Einheit entwickelt,
die hier störungsfrei läuft.

Benötigte Hardware:

Raspberry pi
analog/digital Wandler (hier mcp3008) Wer den Lötaufwand mit dem MCP3008 vermeiden möchte kann auch den PCF8591 nehmen
HF-Sniffer (einfacher Selbstbau)

1. HF Feldstärkemesser


sniffer2.jpg
sniffer2.jpg (5.19 KiB) 7084-mal betrachtet


Für geübte Funkamateure eine Sache von 30 Minuten.

Material alles aus der Bastel- und Restekiste

2 Dioden (am besten Germanium Dioden)
1 Poti 47k
1 Kondensator 20nF
1 Teleskopantenne (kann aber auch ein Stück Draht sein)

Platine.jpg


2.1 D/A Wandler an Raspberry pi
A/D Wandler mcp3008


Die GPIO Kontakte des Raspberry pi können Verbindung zu anderen Geräten aufnehmen.
Allerdings nur auf digitalem Weg.
Wir wollen aber eine Gleichspannung messen, die vom HF-Sniffer kommt.

Damit kann der pi erstmal nichts anfangen.
Dieser analoge Messwert wird nun von einem Analog-Digitalwandler (z.B. MCP3008)
so umgewandelt, dass der pi ihn lesen und verarbeiten kann.
Möglich sind via SPI oder I²C-Bus. Hier benutze ich das Auslesen der GPIO mit SPI.
Hierzu das ausgezeichnete Tutorial von Erik Bartmann https://erik-bartmann.de/userfiles/down ... CP3008.pdf
dessen Skript von ihm freigegeben ist und hier auch verwendet wir (modifiziert).

Zum Anfang und zum experimentieren habe ich mir ein Breadboard zugelegt.
Hier kann auch erst mal der nicht so geschickte Elektronikbastler durch einfaches
Stecken der Bauteile und Verbindungen zum Erfolg kommen


breadboard.jpg
breadboard.jpg (40.55 KiB) 7084-mal betrachtet


2.2 Skript Python
Das Script zur Abfrage ist in python geschrieben, das schon auf
Raspberry dabei ist.

Da der MCP3008 mit dem SPI Bus arbeitet muss dieser natürlich aktiviert sein.
Standardmäßig ist der SPI Bus geblacklistet.

Konfigurationsdatei
Code: Alles auswählen
sudo nano /etc/modprobe.d/raspi-blacklist.conf

anschließend blacklisting mit # auskommentieren

#blacklist spi-bcm2708

Raspberry Pi neu booten

Für die Programmierung der GPIO's mithilfe Python muss die Python-Entwicklungsungebung sowie die
RPI.GPIO Bibliothek nachinstalliert werden.
sudo apt-get update
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio


Mit Rootrechten (sudo) das .py Skript anlegen

Code: Alles auswählen
sudo nano read_mcp3008.py


Code: Alles auswählen
import time
import RPi.GPIO as GPIO
import os
import sys
GPIO.setmode(GPIO.BCM)

HIGH = True  # HIGH-Pegel
LOW  = False # LOW-Pegel

# Funktionsdefinition
def readAnalogData(adcChannel, SCLKPin, MOSIPin, MISOPin, CSPin):
    # Pegel vorbereiten
    GPIO.output(CSPin,   HIGH)   
    GPIO.output(CSPin,   LOW)
    GPIO.output(SCLKPin, LOW)
       
    sendcmd = adcChannel
    sendcmd |= 0b00011111 # Entspricht 0x18 (1:Startbit, 1:Single/ended)

    # Senden der Bitkombination (Es finden nur 5 Bits Beruecksichtigung)
    for i in range(5):
        if (sendcmd & 0x10): # (Bit an Position 4 pruefen. Zaehlung beginnt bei 0)
            GPIO.output(MOSIPin, HIGH)
        else:
            GPIO.output(MOSIPin, LOW)
        # Negative Flanke des Clocksignals generieren   
        GPIO.output(SCLKPin, HIGH)
        GPIO.output(SCLKPin, LOW)
        sendcmd <<= 1 # Bitfolge eine Position nach links schieben
           
    # Empfangen der Daten des ADC
    adcvalue = 0 # Ruecksetzen des gelesenen Wertes
    for i in range(11):
        GPIO.output(SCLKPin, HIGH)
        GPIO.output(SCLKPin, LOW)
        # print GPIO.input(MISOPin)
        adcvalue <<= 1 # 1 Postition nach links schieben
        if(GPIO.input(MISOPin)):
            adcvalue |= 0x01
    time.sleep(0.5)
    return adcvalue

# Variablendefinition
ADC_Channel = 7  # Analog/Digital-Channel
SCLK        = 18 # Serial-Clock
MOSI        = 24 # Master-Out-Slave-In
MISO        = 23 # Master-In-Slave-Out
CS          = 25 # Chip-Select

# Pin-Programmierung
GPIO.setup(SCLK, GPIO.OUT)
GPIO.setup(MOSI, GPIO.OUT)
GPIO.setup(MISO, GPIO.IN)
GPIO.setup(CS,   GPIO.OUT)

while True:
    print readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)         

    f = open("hf.txt", "w");
    print f
    value = readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)
    myString = str(value)
    f.write(myString + "\n")

    print readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)

    f = open("grafhf.txt", "a");
    print f
    value = readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)
    myString = str(value)
    f.write(myString + "\n")
 
# GNUPLOT Grafik erstellen
    os.system("gnuplot /home/pi/grafhf.plt")

# skipt beenden
    exit(0)



gestartet wir später mit:
Code: Alles auswählen
sudo python read_mcp3008.py


Wer einen anderen channel (input) beim mcp3008 möchte editiert folgende Zeile:

sendcmd |= 0b00011111 # Entspricht 0x18 (1:Startbit, 1:Single/ended) hier stellt ihr Hexadezimal den Input Kanal des MCP3008 ein 111 = 7 000 = 0


Anmerkung zum Skript:
den unteren Teil des Skriptes habe ich geschrieben, um die ausgelesenen Werte in Textdateien in /home/pi zu bringen und mit gnuplot vom Raspberry eine Grafik zu erstellen

Code: Alles auswählen
while True:
    print readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)         

    f = open("hf.txt", "w");
    print f
    value = readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)
    myString = str(value)
    f.write(myString + "\n")

    print readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)

    f = open("grafhf.txt", "a");
    print f
    value = readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)
    myString = str(value)
    f.write(myString + "\n")
 
# GNUPLOT Grafik erstellen
    os.system("gnuplot /home/pi/grafamp.plt")

# skipt beenden
    exit(0)


Der Unterschied zwischen hf.txt und grafhf.txt besteht nur darin, das einmal der gelesene Wert jedes Mal
überschrieben wird (aktueller HF Feldstärke auf der Webseite)
und beim anderen die Werte untereinander erhalten bleiben (für die Grafikauswertung).

Freigabe ( chmod 777) der txt Dateien nicht vergessen.

2.1.2 Gnuplot

Code: Alles auswählen
sudo apt-get install gnuplot

zu Gnuplot gibt es jede Menge Infos, wer hier nicht weiterkommt bitte email an dl3ndd(at)web.de

3. Fertiger Aufbau und Autostart

fritzhf.jpg

klick to enlarge
versuch.jpg



Den Autostart am einfachsten in der rc.local eintragen

sudo nano /etc/r.local
Code: Alles auswählen
sudo python /home/pi/read_mcp3008.py


oder zeitgesteuert über crontab -e

3. Ergebnis


12 Stunden Auszeichnung meines Funkbetriebes. Grafik vom Raspberry erstellt mit Gnuplot
1000 Messpunkte ca. 1 Stunde
Die unterschiedlichen Kurven entstehen bei Nutzung verschiedener Frequenzen (Empfindlichkeit des HF-Sniffers) und
unterschiedlicher Leistung.

mo_11_05.jpg
Zuletzt geändert von DL3NDD am Sa 11. Jan 2020, 15:32, insgesamt 1-mal geändert.
Synology DS213+ als Web-FTP-und VPN Server, FT2000 SteppIr, homemade PA LDMOS
Benutzeravatar
DL3NDD
 
Beiträge: 879
Registriert: Sa 10. Nov 2012, 21:34

Re: Raspberry pi HF Feldstärkemessung und plotten - HF Sniff

Beitragvon dg3hda » Sa 2. Jan 2016, 21:33

Tolle Dokumentation, schönes Projekt!

Der 2-Dioden-Gleichrichter war wohl bis in die frühen 2000er das Hauptarbeitstier des Funkamateurs, bis die logarithmischen Detektoren AD8313(?) usw. aufkamen. Robuster sind die 2-Dioden-Dinger aber... mein log-det ist irgendwann verstorben :-( aber der 2-Dioden-Meßkopf nach UHF-Unterlage tuts heute wohl noch.

Ich habe gerade überlegt ob man mit 1 Widerstand, 1 Kondensator und einem Komparator-IC nicht einen recht guten ADC diskret aufbauen kann:

Komparatorausgang (kann auch aus einem in einer Schaltung übrigen Opamp in zB Quad Opamp bestehen) an einen Input pin des Raspi.

Meßspannung an einen der Eingänge des Komparator.

Am anderen Eingang des Komparator ein Kondensator gegen Masse, der mit einem etwas größeren Widerstand an einen Output des Raspi geht.
Und wie soll das ganze dann laufen?

Raspi-Output auf LO, dadurch wird der Kondensator auf 0V Entladen.
Raspi-Putput auf HI, Zeitpunkt merken. Der Kondensator wird nun geladen und der Komparator sieht eine Spannung Rampenförmig ansteigen.
Sobald nun diese Rampe den Wert der Eingangsspannung überschreitet "kippt" der Komparator, das sieht man am Raspberri-Input.
Zeit vergleichen, Spannung ist proportional der Zeit die die Rampe braucht um das Meßsignal zu überschreiten.
Danach kann man den Kondensator wieder entladen und den Vorgang von neuem beginnen.

Man hätte also einen Spannungs-Zeit-Wandler, und die Zeit kann der Raspi sicher messen. Und billiger als der MCP3008.

Na, mal probieren? :)

Vy 73,

Hendi
Hendi*DG3HDA*der Entwicklungshelfer aus Q03
Benutzeravatar
dg3hda
 
Beiträge: 126
Registriert: Fr 8. Feb 2013, 20:46
Wohnort: Obernau

Re: Raspberry pi HF Feldstärkemessung und plotten - HF Sniff

Beitragvon DL3NDD » So 3. Jan 2016, 01:06

Hallo Hendrik,

danke für die Anregung. Völlig neue Rangehensweise. Prima.

Ich musste mir das mehrmals durchlesen :oops: ....hab´s dann aber kapiert.

Wenn also keine HF-(gleichgerichtete)Spannung am Eingang 1 liegt
erreicht die Aufladung des Kondensators an Eingang 2 sofort den Pegel von Eingang 1 und es wäre die zeitliche Nulllinie.

Je nach Höhe der Spannung an Eingang 1 (HF-Seite) dauert die Ladezeit bis zum Schalten, die Zeit muss gemessen werden.

Das Skript muss ja in einer Schleife laufen (permanente Abfrage)....mit der Zeitmessung hab ich noch ein Problem.
Wenn das Skript den GPIO In ausliest, liest es an der Stelle Hi oder lo. Immer zur selben Zeit.....ach es ist schon spät.
Erst mal sacken lassen.

Zum mcp3008: er kostet auch nur 1€ oder so.
Ich nehme ihn deshalb gerne, weil er 7 Channels Input hat und ich dadurch mehrere
Analoge Meßwerte gleichzeitig abfragen kann (Dornau Projekt: Akkuspannung-Solarladestrom und Außentemperatur) und die Beschaltung ist denkbar einfach ohne externe Bauteile.

73 Michael
Synology DS213+ als Web-FTP-und VPN Server, FT2000 SteppIr, homemade PA LDMOS
Benutzeravatar
DL3NDD
 
Beiträge: 879
Registriert: Sa 10. Nov 2012, 21:34

Re: Raspberry pi HF Feldstärkemessung und plotten - HF Sniff

Beitragvon dg3hda » So 3. Jan 2016, 07:06

Hallo Michael,

ja, Schaltungen ohne Schaltbild und bei sowas möglichst paar Timingdiagramme/Oszibilder verstehen nur aus textförmigem Gelaber ist nicht einfach. :oops:

Okay, gegen 7 Kanäle kann man damit nicht anstinken, ich denke dann wird der Preisvorteil der Komparatoren irgendwann klein und die GPIO-Leiste des RasPi wird voller und voller... wobei die Rampe ja nur einmal erzeugt werden muss. Aber genau für diesen Einsatzzweck wäre es eine Alternative gewesen. Die korrekte Bezeichnung für diesen Wandler ist Single-Slope-Wandler und der Vater der Multislope-Methoden, die in edlen Multimetern zum Einsatz kommen.

Vorteilhaft ist meiner Meinung nach, das man mit einer langsamen Rampe (großer Vorwiderstand vor Kondensator) und bei hoher Auflösung der Zeitmessung (sollte bei so etwas wie dem Pie leicht machbar sein) eine sehr hohe Auflösung erhalten kann. Die braucht man für einen großen Dynamikbereich des HF-Sniffers (Beim Diodentyp noch dringender als bei log. Detektoren). Der offensichtliche Nachteil ist die Geschwindigkeit, die erstens variiert und zweitens bei anderen Wandlerstrukturen höher ist. Und ein GPIO-Pin mit Vorwiderstand ist nur eine begrenzt gute Stromquelle, aus meßtechnischer Sicht, denn die wäre die bessere Methode den Kondensator zu laden.

73

Hendi
Hendi*DG3HDA*der Entwicklungshelfer aus Q03
Benutzeravatar
dg3hda
 
Beiträge: 126
Registriert: Fr 8. Feb 2013, 20:46
Wohnort: Obernau

Re: Raspberry pi HF Feldstärkemessung und plotten - HF Sniff

Beitragvon dg3hda » Mi 6. Jan 2016, 11:47

Sorry wenn ich nochmal auf dem ADC-Thema herumreite, gerade gesehen:

http://www.elektronik-labor.de/Raspberr ... O5.html#in

Man sollte zwar niemals wirklich Digitaleingänge in der verbotenen Zone betreiben, aber finds doch interessant das der RasPi Schmitt Trigger Eingänge hat. Auf die paar integrierten Transistoren kommts wohl nicht an, und die Störfestigkeit dankt.

vy 73,

Hendi
Hendi*DG3HDA*der Entwicklungshelfer aus Q03
Benutzeravatar
dg3hda
 
Beiträge: 126
Registriert: Fr 8. Feb 2013, 20:46
Wohnort: Obernau

Re: Raspberry pi HF Feldstärkemessung und plotten - HF Sniff

Beitragvon DL3NDD » Mi 6. Jan 2016, 12:09

Nein, ich finde es gut und bin selbst dankbar für neue Anregungen
und Infos.
Zu der A/D Geschichte war der "Single-Slope-Wandler" das richtige Stichwort.
Ist aber wohl auch etwas komplex.

http://www.netzmafia.de/skripten/hardwa ... analog.pdf
Synology DS213+ als Web-FTP-und VPN Server, FT2000 SteppIr, homemade PA LDMOS
Benutzeravatar
DL3NDD
 
Beiträge: 879
Registriert: Sa 10. Nov 2012, 21:34


Zurück zu Tutorials

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron