Raspberry Pi & GPS

Det här inlägget beskriver hur man kopplar in en gps-mottagare till sin Raspberry Pi. Som GPS-mottagare använder jag en BU-353 som ansluts till raspberryn med USB. Denna Raspberry har även en wifi-dongle som gör att jag sligger använda ett nätverkskabel för att fjärrstyra den. Det fungerar utmärkt att fjärrstyra den över det lokala WLAN.

Med bara några få kommandos är man igång och kan använda GPSn. För att testa om den känner igen GPSn kan man använda lsusb kommandon.

Jag använder gpsd för att komma åt den och den installeras genom att köra pacman -S gpsd. Efter en lyckad installation måste man modifiera gpsd-konfigurationen. Lägg till chmod a+rw $DEVNAME ovanför gpsdctl $ACTION $DEVNAME. Raden hittas nästan längst nere i filen /lib/udev/gpsd.hotplug.

Sista som ska göra är att berätta för gpsd var den hittar GPSn, vilket görs med gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock och att starta om gpsd med gpsd restart.

Nu ska GPSn fungera och aktuella positionen hittas med cgps -s. Tyvärr visar cgps hastigheten i miles fast raw-datan från GPSn är i meter per sekund.

 

 

Etiketter:, , , ,


Det kanske mest oväntade djur vi hittade var en uggla, närmare sagt en Mjölkuv, som satt i ett träd bredvid vägen. Skulle inte en mötande bil ha stannat skulle vi ha missat fågeln.

Mjölkuv, eller Verreaux’s Eagle-Owl (Bubo lacteus), är världens tredje tyngsta uggla och lever på savannen och i skogsmarker i Afrika, söder om öknen Sahara.

Etiketter:, , , ,

Ett annat djur som var mycket svårare att hitta än jag trodde var giraffen. Även detta djur kunde stå direkt bredvid vägen utan att synas. Detta fast giraffen kan bli över 5 meter hög och därmed är världens högsta djur.

Etiketter:,

Fast de är så stora kan det vara svårt att hitta elefanterna. De kan stå direkt bredvid vägen, men ändå syns de inte. Fascinerande! Dessutom vet man inte heller hur elefanterna kommer bete sig. Ibland så är de lugna och fridfulla i skogen och äter.

Elefanterna kan också vara lite mera närgången än tänkt. I det här fallet kom denna elefant springande ur skogen och bilen framför såg ingen annan utväg än att backa tillbaka bredvid vår bil. Elefanten lugnade dock ner sig och släppte efter nån minut förbi oss.

Elefantfamiljerna håller ihop, det syns tydligt i de här bilderna. Den här familjen verkar var på familjeutflykt och promenerade bakom oss långsamt över vägen.

Etiketter:, ,

Vattenfallet Horse Shoe Falls var det sista vattenfallet som passerades på väg till Kruger National Park. Horse Shoe Falls har fått sitt namn från sitt utseende då floden delar upp sig i 2 stycken vattenfall som ligger bredvid varandra. Även denna vattenfall låg nära Sabie.

Vägen dit var en av de sämre grusvägarna på resan dock skapade den känslan av att vara ute i viltmarken.

Etiketter:, , ,

Ibland händer det att man till exempel vill övervaka en av de digitala ingångarna för att detektera en förändring, så som från 1 till 0 eller 0 till 1. För att kunna göra detta finns det till exempel följande lösning. Det gamla värdet skrivs i en variabel som sedan jämförs med aktuella värdet.

#initering

gpio mode 0 in

# programmet

status=$(gpio read 0)

while true; do

if [ $(gpio read 0) -ne $status ]
then

status=$(gpio read 0)
# Det som ska göras om status != gpio read 0

fi

sleep 0.2
done

I början av skriptet läggs det aktuella värdet i variabeln status. Sedan, i if-satsen, jämförs variabeln status med aktuella värdet av gpio read 0. Är dessa olika har värdet på ingången ändrats och innehållet i if-satsen utförs. If-satsen har lagts i en while-loop som körs 5 gånger per sekund (sleep 0.2).

Etiketter:, , , , , , ,

Som ett första exempel tänkte jag visa hur man programmerar ett enkelt trafikljus med ett shell-skript. Det som behövs utöver en raspberry pi med installerad mjukvara så som linux samt wiringpi är lite hårdvara. I mitt exempel använder jag följande:

  • Ett experimentkort
  • 3 stycken motstånd på 270 ohm
  • 3 stycken ljusdioder (LED), ett rött, gult och grönt
  • Lite kablar för att koppla ihop experimentkortet med raspberryn

Kopplingsschemat är mycket enkelt, jag använder mig utav 3 stycken utgångar samt ground. 

 

Nu återstår det bara att skriva skriptet som ska styra trafikljuset. För att skriva det krävs det bara några få rader.

Till en början måste man definiera om portarna ska användas som in eller utgång. I det här fallet ska de användas som utgång. För att definiera detta använder man kommandon gpio mode port in/out. Dessutom ska de tre utgångerna vara i lågt läge, dvs inga ljusdioder ska ljusa. För detta används gpio write port 1/0. Portarna som används här är 0, 1 och 2 enligt wiringpi-definitionen. Port 0 i wiringpi är GPIO017, 1 är GPIO018 och 2 är GPIO027.

#initiering

gpio mode 0 out
gpio mode 1 out
gpio mode 2 out

gpio write 0 0
gpio write 1 0
gpio write 2 0

Nu ska alla 3 ljusdioder vara släckta och det återstår bara att skriva själva programmet.

# programmet

while true; do

gpio write 0 1
gpio write 1 0
gpio write 2 0
sleep 2

gpio write 0 1
gpio write 1 1
gpio write 2 0
sleep 0.5

gpio write 0 0
gpio write 1 0
gpio write 2 1
sleep 2

gpio write 0 0
gpio write 1 1
gpio write 2 0
sleep 0.5

done

själva skriptet sparas i en fil, t.ex. trafiksljus.sh. För att kunna köra skriptet ska följande kommando användas: chmod +x trafikljus.sh. Sedan kan skriptet köras genom att skriva ./trafikljus.sh.

Etiketter:, , , , ,

Som jag redan skrev är det de digitala in och utgångar som gör raspberry pi en för mig intressant dator. För att enkelt kunna styra dessa in och utgångar använder jag mig utav WiringPi. På deras hemsida finns det en bra guide hur man installera WiringPi, dock fungerade den inte direkt på min nyinstallerade Arch Linux ARM Rasperry Pi. Därför tänkte jag här beskriva hur jag gjorde.

Istället för att använda sudo för att installera paketet git-core använde jag pacman med följande kommando: pacman -S git-core

Sudo behövs dock lite senare och installeras också med pacman: pacman -S sudo

Utöver dessa 2 paket krävdes det att jag även installerade följande: make och gcc

För att kolla om installationen har varit framgångsrik kan man använda följande kommando: gpio readall. Får man upp en tabell över alla digitala portar och deras status har installationen av WiringPi lyckats!

 

Etiketter:,

Ett program som jag saknade direkt efter installationen var midnight commander, en enkel med ändå mycket användbar filhanterare. Denna installeras jätteenkelt med pacman: pacman -S mc. Jag kanske är ensam om det, men jag använder nästan bara mc för att redigera filer.

Installerade just om en av mina 2 raspberry pi och pacman ville inte hitta ett enda paket. Det enda jag fick var massor med felmeddelanden. Första försöket att lösa problemet var att använda alla servrar som fanns specifierad i /etc/pacman.d/mirrorlist. Detta hjälpte dock ingenting så jag gjorde en automatisk uppdatering av mirrorlist med följande kommando: pacman -Syyu. Detta kommando uppdaterar inte bara serverlistan utan även alla paket som finns installerad.

En liten varning dock, det tar ett tag att uppdatera alla paket…