Modtagning af QO-100

Jeg ville prøve at modtage signaler fra QO-100, som er den første geostationære amatørradiosatellit, så jeg har anskaffet mig en parabolantenne til 130 kr. fra Paraboleksperten i Ballerup, og en LNA til 58 kr. fra Harald Nyborg. Nogle gange kaldes det en LNA (low-noise amplifier) og nogen gange LNB (low-noise block), men det er det samme.

Jeg har anbragt parabolen i en parasolfod.

LNA’en indeholder en lille antenne til modtagning af linært polariserede signaler, en signalforstærker, og en downconverter til at flytte signalerne fra det lettere utilgængelig 10,5 GHz-område og ned i det mere RTL-SDR-venlige UHF-område. LNA’en indeholder en oscillator som svinger på 9,75 GHZ, hvilket flytter et signal på f.eks. 10,5 GHz ned til differensfrekvensen på

10500 MHz – 9750 MHz = 750 MHz

LNA’en monteret i parabolens brændpunkt.

Men LNA’en fungerer ikke, med mindre den får noget strøm. En LNA har faktisk to antenner i sig – en til vandret polariserede signaler, og en til lodret polariserede signaler. LNA’en skal have enten 13 VDC eller 18 VDC, plus på inderlederen af koaksialkablet og minus på skærmen. Forstærkeren virker lige godt, om den får det ene eller det andet, men man vælger mellem den lodrette og vandrette antenne med spændingen: 13 volt giver lodret, 18 volt vandret.

Her kunne man godt være fristet til bare at sætte en strømforsyning på coax’et, men det går ikke – RTL-SDR’en bliver ked af at få så stor en spænding ind ad antenneindgangen. Derfor er det nødvendigt med en bias-T. En bias-T er dybest set en dims, der tillader at hælde en jævnspænding den ene vej, men ikke den anden, og samtidig lade de højfrekvente radiosignaler passere.

Bias-T’en kostede mig 40 kr. på ebay.

Her kunne man godt sige godt – nu har jeg en parabol, en LNA, en bias-T, en 13 V strømforsyning og en laptop, så nu skal jeg i gang med at lytte!

Jeg har imidlertid valgt en lidt mere kompliceret løsning. Det skyldes, at det er koldt udenfor (brrrr!) og jeg vil hellere sidde inde i min varme stue og lytte til satellitten end ude på terrassen. Dertil kommer, at jeg har elektricitet i mit skur lige bag parabolen, så løsningen er at stikke RTL-SDR’en i en Raspberry Pi 3, som så vha. programmet rtl_tcp kan streame de rå IQ-samples til min laptop. Jeg nøjes derfor med 5 meter coax, som løber ind i en lille plastikkasse fra IKEA, hvor Raspberry Pi, RTL-SDR og bias-T ligger.

Hvordan strømforsyner jeg bias-T’en? Jo, jeg tænkte, at den nok ikke bruger super meget strøm, og man kan faktisk hive +5V ud af en Raspberry Pi – mere eller mindre direkte fra strømforsyningen. Jeg satte derfor en DC-DC-converter, indstillet til 13,4 V, til Raspberry Pi’ens 5V og GND-pinde, for at se, om den kan forsyne bias-T’en. Jeg havde godt nok frygtet at se en del undervoltage-beskeder på Raspberry Pi’en, men det sker faktisk ikke!

Raspberry Pi, strømforsyning, RTL-SDR, Bias-T og DC-DC-converter (pakket ind i tape for at undgå kortslutninger) i en plastikkasse. Ja, det kunne muligvis have været lidt mere elegant.

Næste problem: Når man streamer IQ-samples over et netværk, kommer der altid klumper i streamen før eller siden. Det håndterer den “etablerede” version af rtl_tcp ikke særlig godt. Derfor har Stephen Blinick omskrevet rtl_tcp, så den ikke bruger “linked lists” længere, men i stedet en ringbuffer. Det giver et alvorligt performanceboost, så jeg har installeret hans “fork” af rtl_tcp i stedet for den officielle; Stephens version kan man hente her: https://github.com/blinick/rtl-sdr

Jeg starter radiomodtageren med kommandoen

sudo /home/pi/rtl-sdr/build/src/rtl_tcp -a 0.0.0.0 -s 900001

Der er to årsager til den lave samplerate:

  1. Jeg streamer alle disse IQ-samples over wi-fi, så jeg vil gerne mindske belastningen på netværket lidt,
  2. smalbåndstransponderen på QO-100, i hvilken jeg (i hvert fald pt.) primært er interesseret, er ikke bredere end 500 kHz, så 900001 samples pr. sekund er tilstrækkeligt.

Jeg modtager streamen i gqrx med disse indstillinger:

Og nu kan jeg modtage QO-100:

Brug din Raspberry Pi som printerserver, og gør din printer til en netværksprinter

Ak, det papirløse samfund lader stadig vente på sig. I mellemtiden har de fleste husholdninger nok typisk 1 printer, men flere brugere. Herhjemme har løsningen været at skrive på sin laptop, sende en e-mail til sig selv (ak igen!), og logge på den stationære, som printeren er tilsluttet, og så printe ud.

Men har du alligevel en Raspberry Pi stående tændt, kan du lige så godt smide printeren over på den, og så lade Raspberry Pi’en være printerserver. Det er faktisk rigtig Leth:

1. På din Raspberry Pi

CUPS står for Common Unix Printing System, “but that’s not important right now”. På din hindbærsnitte installerer du CUPS med

sudo apt-get install cups

Der bliver oprettet en brugergruppe, som hedder lpadmin, og du skal tilføje din bruger (typisk “pi”) til denne gruppe:

sudo usermod -a -G lpadmin pi

Og så skal du selvfølgelig huske at slutte din printer til en af USB-portene på din hindbærsnitte 🙂

2. På din Windows-computer

Åbn en browser, og gå ind på

http://[din hindbærsnittes IP-adresse]:631/

for eksempel

http://10.0.0.2:631/

Du skulle gerne få en side, der ser nogenlunde sådan her ud:

Klik på “Administration” og “Add printer”. Hvis du får en sikkerhedsadvarsel, så bare sig, at du gerne vil se siden alligevel. Nu bliver du bedt om at indtaste brugernavn og password til din bruger “pi” på hindbærsnitten.

Nu skulle du gerne få en liste over printere, der er tilsluttet hindbærsnitten. Vælg din printer fra listen, og klik “Continue”:

cups2

Giv din printer et navn, en beskrivelse og en placering. Sæt hak i “Share this printer”, og click “Continue”:

cups3

Nu skal du vælge din printer fra listen:

cups4

Hvis din printer ikke er på listen, skal du have en PPD-fil til den. Jeg downloadede bare en driverpakke til min printer på epson.com, unzippede den og fandt PPD-filen et sted derinde.

Når du har fået tilføjet printeren, skal du klikke på “Printers” i topmenuen, og derefter på din nys tilføjede printer. Derefter kopierer du URLen i adresselinjen:

cups5

Så finder du “Enheder og printere” i Windows, og klikker på “Tilføj printer”:

cups6

Start med at klikke på “Den printer, jeg søger efter, findes ikke på listen” – du behøver ikke vente til den er færdig med at søge.

Klik på “Vælg en delt printer ved hjælp af navn”, og paste URLen fra før ind. Hvis URLen begynder med https, er det vigtigt, at du fjerner s’et:

cups7

Klik “Næste”. På et tidspunkt bliver du bedt om at vælge din printer fra en liste, eller selv finde den – “Har diskette/cd”. [“Diskette”??? WTF, Microsoft?]

Og så burde det virke! Det gjorde det i hvert fald her 🙂

Raspberry Pi-dørklokke

Da jeg (forholdsvis!) nemt kunne trække et kabel fra min dørklokke til den ene af de Raspberry Pi’er, der kører 24/7, var det jo lidt oplagt af få dørklokken på nettet. Vi kan nemlig godt have svært ved at høre klokken, når døren ud til gangen er lukket, og vi står i køkkenet og larmer. Og så ville det jo være smart, om ens mobiltelefon kunne sige ding-dong, når man trykker på knappen.

Figur 1: En klassisk Friedland Ding Dong.
Figur 1: En klassisk Friedland “Ding Dong”.

Det er en klassisk Friedland “Ding Dong”, som tager fire C-batterier. Der er fire skrueterminaler i den: To, der går til trykknappen, og to ubrugte. Det viser sig, at når man trykker på knappen, ligger der ca. 4,8 V på de to ubrugte skrueterminaler. Det skal så hældes ind i en Raspberry Pi. Og det går selvfølgelig ikke sådan uden videre, så jeg har lavet et lille interface:

Figur 2: Diagram over interfacet mellem dørklokke og Raspberry Pi. Lavet med det gratis værktøj Digi-Key Scheme-it, som varmt kan anbefales.

(Hvordan skal man i grunden smide sådan noget sammen? Pt. er det bare en fuglerede…)

Figur 3: En rigtig god, gammel 8 µF foliekondensator. Mums!
Figur 3: En rigtig god, gammel 8 µF foliekondensator.

Kondensatoren er en gammel 8 µF foliekondensator – se figur 3. Hvorfor ikke? Jeg burde jo nok beregne den nødvendige kondensatorværdi ud fra tidskonstanten

τ = RC

men eftersom der ikke er nogen modstand, kan tidskonstanten hurtigt blive meget lille, uanset hvor stor en kondensatorværdi jeg vælger – eller er der noget, jeg har misforstået?

Jeg kører GPIO4 med en pull-up-modstand (indbygget i Raspberry Pi), og så har jeg skrevet et lille program i Python, som ser sådan her ud:

import datetime
import logging
import os
import RPi.GPIO as GPIO
import subprocess
import sys
import time

GPIO.setmode(GPIO.BCM)
pin = 14
GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)

while True:
try:
logging.basicConfig(filename="dingdong.log", format="%(asctime)s %(message)s", level=logging.DEBUG)
GPIO.wait_for_edge(pin,GPIO.FALLING)
logging.info("Ding")
subprocess.call("/home/pi/dingdong/tweet.sh", shell=True)

except:
logging.warning(sys.exc_info()[0])

Det program ligger i en fil, der hedder dingdong.py. Den kaldes fra et init-script:

echo 14 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio14/direction
python3 /home/pi/dingdong/dingdong.py

der køres af cron ved boot.

Så når nogen ringer på, sendes der et tweet, som min mobiltelefon så gør mig opmærksom på.

Problemer

  1. Kredsløbet er temmelig støjfølsomt. Skramler jeg lidt rundt om det, kan det trigge en jording af GPIO4.
  2. Processen med et tweet er alt for langsom. Der kan gå flere minutter, før jeg modtager en push-notifikation, og så er folk jo nok gået igen. Det må da for katten kunne lade sig gøre at sende et signal til en mobiltelefon i real time?!