Navigationsdator

Raspberry Pi 2 + Raspbian Lite + OpenCPN

navdator

Fick frågan om jag kunde slänga ihop en guide till Navigationssystemet till båten som jag fixade till. Är inte någon mästerskrivare, men ska försöka berätta vad jag gjorde för att få det att fungera, mitt resultat blev som ovan, men vad du väljer för delar är upp till dig. Jag valde att använda mig av en RaspberryPi 2, gjort försök tidigare med Raspberry Pi B, men det fungerade inte tillfredställande, Rpi2 är lite snabbare och har det extra lilla oumpfet som behövs.

Innan vi börjar:

Du behöver lite basverkyg, så som en flatradiomejsel, en liten stjärnskruvmejsel, avbitartång, limpistol, lödpenna, lödtenn, multimeter eller voltmeter, samt några kabelstumpar.

Delar:

Delarna som jag valt att använda mig av är följande, men självklart fungerar det med likvärdiga prylar.

Raspberry Pi 2
Raspberry Pi 7″ Touchscreen
ModMyPi 7″ Touchscreen Case and Stand
GPS mottagare BU-353 eller motsvarande
LM2596 Spänningsregulator
Micro USB kabel som du kan klippa sönder utan att frugan blir arg.
SD-kort, jag använder mig av 8Gb, men fungerar med valfri storlek, tänk på att du behöver plats för sjökorten

Förberedelser:

Surfa in på Raspbians nedladdningssida och ladda ner senaste versionen av Raspbian Lite. Vi behöver den för att få systemet att överhuvudtaget att fungera. Då jag kör ElementaryOS på heltid har jag inte funderat på hur man skriver img filen till SD-kortet med Windows, instruktionerna nedan bör fungera på samtliga debian/ubuntu baserade linuxdistar.

Jag antar att de flesta är bekanta med terminalen. Börja med att packa upp Raspbian Lite zipfilen för att komma åt img-filen där i. Zip filen kommer heta något liknande datum-raspbian-jessie-lite.zip I mitt fall heter den 2016-03-18-raspbian-jessie-lite.zip. Packa upp den med kommandot:

unzip 2016-03-18-raspbian-jessie-lite.zip

Vi behöver kontrollera vilken /dev-fil som tillhör SD-kortet, här är det extremt viktigt att ni får namnet rätt, hårddisken riskeras att skrivas över om man tar fel. Jag använder mig av fdisk för att kontrollera vilken /dev-fil som tillhör SD-kortet. Jag använder mig av uteslutningsmetoden, kör kommandot nedan, utan att ha satt i SD-kortet, sedan en gång efter du satt i SD-kortet. Den /dev fil som tillkommer när du satt i kortet är den du är ute efter.

sudo fdisk -l

I mitt fall heter dev-filen /dev/mmcblk0p1.
Då vi vill skriva till hela SD-kortet, och inte till partition 1, så tar jag i mitt fall bort ändelsen p1, och får då /dev/mmcblk0. Ibland monteras kortet som sdb1, sdc1 osv. I det fallet tar ni endast bort siffran, ex /dev/sdb.

Nu vill vi skriva den uppackade IMG-filen till SD-kortet, IMG-filen kommer heta samma som ZIP filen, fast med ändelsen .img. För att skriva .img-filen till SD-kortet använder jag mig av ett fiffigt kommando som heter dd. Se nu till att du inte skriver sökvägen till något viktigt i of= för det är isåfall det sista du ser av det.

sudo dd bs=1M if=2016-03-18-raspbian-jessie-lite.img of=/dev/mmcblk0

Den här processen tar ett par minuter, och ger ingen output, man märker att det är klart när man åter står vid prompten. Men så fort du har allt klart, mata ut SD-kortet, stoppa det i RPIn. Koppla in skärm, tangentbord, ethernet-kabel och ström och njut av att se din Raspbian Lite installation starta.

Första starten:

När man startar Raspbian första gången, så är inloggningen user: pi och lösenordet: raspberry. Det är rekommenderat att köra kommandot

sudo raspi-config
Man får då upp ett väldigt enkelt grafiskt interface, där man kan ändra lite grundinställningar, så som språk.
Börja med att välja menyalternativ 5, därefter menyalternativ 3, och välj den tangentbordslayouten du önskar använda.

Gå till menyalternativ 9, Advanced Options, Därefter menyalternativ 3, Memory Split, knappa in 256

Därefter väljer vi det första meny alternativet ”Expand Filesystem”, och startar om RPIn.

Efterkonfiguration:

Då vi har fått våran raspberry pi att snurra, så är det läge att börja konfigurera den för användning. Raspbian kommer med ett förkonfigurerat användarkonto, man kan köra på det om så önskas. Jag brukar föredra att ta bort det förkonfigurerade kontot, och skapa ett eget. Det gör man enklast genom att skapa ett nytt konto för den användaren vi vill använda.

sudo adduser nav

Jag vill också att användaren skall ha rätt att köra sudo utan lösenord, för att slippa slå in det varje gång ett paket skall installeras, men endast den användaren, så lägger vi till följande i /etc/sudoers genom att starta visudo.

sudo visudo

under raden ”root ALL=(ALL:ALL) ALL” lägger vi till raden ”nav ALL = NOPASSWD: ALL”. Vi kan nu köra sudo utan att behöva skriva in lösenordet. Detta steget kan hoppas över om man känner att det ger minskad säkerhet. Men den nya användaren behöver iallafall ligga i ligga i gruppen sudo för att ha tillgång till kommandot sudo.

sudo usermod -G sudo nav

Nu kan vi logga ut, och logga in på det nya kontot, och ta bort det gamla kontot

sudo deluser --remove-home pi

Nu har vi en användare, vi vill att den skall logga in automatiskt, det gör vi genom att skapa mappen getty@tty1.service.d i /etc/systemd/system/.

sudo mkdir -pv /etc/systemd/system/getty@tty1.service.d

Nu behöver vi en fil som heter autologin.conf i samma katalog. Det gör vi genom att använda texteditorn nano, för att öppna filen för redigering.

sudo nano /etc/systemd/system/getty@tty1.service.d/autologin.conf

I autologin.conf skriver vi in följande rader:

[Service]
ExecStart=
ExecStart=-/sbin/agetty –autologin nav –noclear I 38400 linux

Du kan nu passa på och starta om din RPI för att kolla så autologin funktionen nu fungerar. Om allt verkar bra, så fortsätter vi med att installera xinit, så vi kan köra grafiska program.

XINIT:

OpenCPN kräver en X server, samt en fönsterhanterare för att starta. Jag har inte lyckats få det till att kunna köras standalone. Så min lösning på det hela var att installera xinit samt fluxbox. Det gör vi med kommandot,

sudo apt-get install xinit && sudo apt-get install fluxbox

Kontrollera att allt fungerar som det skall, genom att köra kommandot,

startfluxbox

Fluxbox är en väldigt enkel fönsterhanterare, menyn öppnas genom att högerklick på skrivbordet om du har en mus tillgänglig. Annars trycker du CTRL+ALT+DEL för att stänga av.

OpenCPN:

Då har vi kommit till momentet där vi skall installera hjärtat i det hela. OpenCPN som är ett gratis navigationsprogram för just båtar. Vill ni köpa sjökort för att använda i OpenCPN säljer SOLTEK sjökort som stödjs i BSB/KAP format. Annars får ni hitta sjökort på annat sätt, formaten som stödjs står i OpenCPNs wikipedia. OpenCPN går att ladda hem via ppa, men jag tar inte upp det då jag byggde OpenCPN från Source med lite optimerad kodbas.

Först ser vi till att systemets paketlistor är uppdaterade:

sudo apt-get update

Vi installerar alla beroenden för OpenCPN inklusive gpsd som läser av eran gps utrustning, samt det vi behöver för att kompilera programmet.

sudo apt-get install -y libgtk2.0-dev gettext git-core cmake gpsd gpsd-clients libgps-dev build-essential wx-common libwxgtk2.8-dev libglu1-mesa-dev libgtk2.0-dev wx2.8-headers libbz2-dev libtinyxml-dev libsdl1.2debian xcalib

Ställ er i hem katalogen, och ladda sedan hem källkoden från github.

git clone https://github.com/seandepagnier/OpenCPN.git

Efter att det är klart, så går vi in i OpenCPN katalogen, med ”cd OpenCPN” därefter skapar vi katalogen build med ”mkdir build”, samt hoppar in i den med ”cd build”. Nu kommer vi till det mest fascinerande att titta på sedan människan uppfann elden, att kompilera kod. Kör kommandot nedan,

cmake ../ && make && sudo make install

Detta momentet kommer ta ett par timmar, hur många vet jag inte riktigt, då jag brukar sova medans det händer. Men jag skulle gissa på ca 4-6h. Det ger oss tid till att titta på väldigt enkel elektronik.

Extern strömförsörjning av RPi:

Vill man använda sin RPi i båten, står man troligen inför ett bekymmer, då jag inte hittat några båtar som bygger på 5V system. Deras batteribankar är oftast 12V, ibland så högt som 24V. Raspberry PI:en är en minidator baserad på 5V. Man kan strömförsörja den på åtskilliga sätt, men jag kommer bara beröra det allra enklaste. Att skapa en kabel, med en spänningsregulator som går att köpa som modul från butiker likt Kjell & C/O. Jag rekommenderar LM2596, den kräver inte vidare stor tankeverksamhet. Och stödjer inspänning på 3,2-40V med en utspänning på 1,25 – 37V med en maximal strömstyrka på 2A. Kretskortet är väluppmärkt med ingående spänning samt utgående spänning.

Sätt din lödkolv på värmning, välj en relativt lite spets om du har möjlighet att byta. Kan du reglera temperaturen, så är 300-350 grader celsius tillräckligt.
Ta dina kabelstumpar, är de färgkodade så underlättar det. Men är inte ett måste, men man behöver vara lite vaken så man inte råkar polvända (minus på pluspolen). Måtta ut så mycket kabel du behöver, lägg till ett par cm. Och skala av ändarna. Kör du med en flerkardeligkabel kan du med fördel förtenna ändarna så slipper du få strån åt alla håll och kanter. Löd fast kabeln du tänker använda till inspänningens positiva pol (röd/+) till kretskortets hål märkt IN+. Där efter löder du fast inspänningens negativa pol (svart/-) till kretskortets hål märkt IN-.

Så långt allting gott, koppla in dina nu fastlödda kablar till spänningskällan du tänkt använda. Nu behöver vi ställa in utspänningen så den blir 5V, du bör inte gå över 5,25V. Det görs genom att man skruvar på den lilla skruven på den blå fyrkanten på kretskortet (vridpotentiomentern, ett variabelt motstånd). Mät samtidigt med din Multimeter/Voltmeter på hålen märkta UT+ samt UT-. Du kan inte gå runt, så minskar spänningen när du vill öka den, så får du vackert byta håll på skruvandet.

När du nu är nöjd med den utgående spänningen, så är det dags att klippa sönder frugans micro USB kabel. Klipp av kabeln, och skala den försiktigt. Då blottas troligen ett hölje i metall, som du kan vika bakåt. För att blottlägga ytterligare 4 kablar. Röd, Svart, Vit och Grön. Vi är inte intresserade av de vita och gröna kablarna, de används för data trafik via USB. De Röda och Svarta kablarna är däremot spänningsmatning. Löd fast den röda kabeln på spänningsregulatorns andra sida vid hålet märkt UT+ samt den svarta kabel vid hålet märkt UT-. Vi har nu tillverkat en adapterkabel som vi kan använda för att strömförsörja din RPI. Snygga till kabeln, sätt lite hotglue (svenska?) på dina kablar för att minska risken för brott i lödningen om det rycker lite i kablarna.

Autostart av OpenCPN:

Nu är förhoppningsvis kompileringen klar. Och vi ska se till att OpenCPN startar automatiskt. Det gör vi genom att använda filerna .bash_profile samt .xinitrc i din hemkatalog.

Vi börjar med att editera .xinitrc med kommandot,

nano ~/.xinitrc

Den filen styr vad X laddar, den skall innehålla följande:

exec startfluxbox &
exec opencpn

Du kan prova om härligheten fungerar, genom att skriva

startx

Om allt gick som det skulle så editerar vi nu .bash_profile så att X och OpenCPN startas automatiskt vid boot.

nano ~/.bash_profile

Denna filen skall innehålla följande.

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx

Vill du att RPin ska stänga av sig om du stänger OpenCPN skriver du istället följande

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx ; poweroff

 

OpenCPN inställningar

För vidare konfigurering av OpenCPN hänvisar jag till deras hemsida, som har en väldigt gedigen användarhandbok: OpenCPN.org

Färdigställning:

Nu när allt fungerar som det ska. Är det bara att färdigställa projektet, skruva ihop ditt case, limma fast lösa kablar med hett lim. Har du anslutit något till RPins GPIO port, sätt en liten klick lim där också för att förhindra att kablar skakar loss.

Mycket Nöje
Johan Blixth

Om du bygger ihop något liknande, eller på annat sätt har nytta av guiden, berätta gärna vad du har gjort för något.