Electrokit Buggfix Plus
Aktuellt datum och tid: 07.13 2019-04-25

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 101 inlägg ]  Gå till sida 1, 2, 3, 4, 5 ... 7  Nästa
Författare Meddelande
InläggPostat: 09.53 2015-09-09 

Blev medlem: 08.17 2007-10-20
Inlägg: 173
Ort: Ekerö
Vad kul att du tittar in här - du kommer få ta del av min resa till en robotgräsklippare.
Ouchhh... vilken tid detta tog. Har fått barn och byggt hus... så det har ju blivit lite andra prioriteringar.
Tanken är väl ändå att jag ska bli klar år 2018. Vi får se hur det blir med det.

Att göra - i prioriteringsordning
1. Printa ett skal till basstationen för GPS som är väderskyddat - så den kan vara utomhus 24/7 - 365 - med strömkabel.
2. Montera motorerna på ett bra sätt så att kraften utnyttjas maximalt
3. Köpa batterier för att driftsätta motorerna på "riktigt"
4. Rita en hållare för RPI, antenn och kompassometer som ska printas ut

Senast uppdaterad: 2018-10-24
Lagt till fler saker i inköpslistan
FÖRSTA KÖRNINGEN PÅ GRÄSMATTAN OCH KLIPPT GRÄS!
Monteringslösning för RPI, antenn och kompass dit.

Pågående projekt:Jag kommer uppdatera inlägg 3 med uppdatering och även i tråden med nya inlägg och fortskridande status på projektet. Detta för att underlätta för mig vid uppdateringen av tråden. För dig som vill se från start - mål när detta är klart räcker det att gå till Inlägg 3.
Frågor och input: Ställs i forumdelen där jag besvarar dessa.

Om projektet:
Jag har tänkt bygga en robotgräsklippare - skillnaden mot robotgräsklipparna som finns på marknaden idag och min är att jag kommer använda mig av en autopilot som styrs via GPS och den är byggd på en cylinder istället för rotorer som är det vanliga idag. Möjlighet att ta över styrningen ska finnas så att en fjärrkontroll kan användas istället om man bara behöver kantklippa eller behöver finputsa något område på gräsmattan. På roboten kommer det även finnas en kamera som kan se en live-vy ifrån. Batteritiden har jag tänkt till mellan 30-60 min klipptid. Detta är i stora drag vad jag har tänkt åstadkomma och det är denna tråd till för er som är intresserade. I denna tråd kommer jag även lägga en komponentlista med priser längst ner för att se vad projektet kostar/kostat.

Tidsplan:
2015-07-23 – 2016-09-01 (2016-06-01 Första tidsplanen)
2015-07-23 - 201?-12-31 (här börjar ju gräset spira igen)
Hoppas kunna göra klart denna under sommaren.

[ALPHA KLAR]
2015-07-23 - 2018-09-23!


Ekonomi:
Total budget för projektet är 2000:- kanske +/- någon krona. Men jag tror detta är realistiskt.
Totalt budget är nu uppe i nästan 3000:-... men kommer återkomma med en komplett lista när allt är klart.

Cylindergräsklippare:
Jag kommer använda mig av en redan befintlig gräsklippare som finns på marknaden idag - alltså inte bygga en. Detta för att kunna ägna mer tid åt programkoden och elektroniken som kommer behövas för att få detta att fungera. Anledningen till att jag valt cylindergräsklippare är att den är mer skonsam för gräsmattan och att det idag saknas automatiskt sådan (vad jag vet). Det jag har tagit hänsyn till när jag valt cylindergräsklippare är priset och vikten på ekipaget. Denna är redan inhandlad och det blev en AL-KO Comfort 38-5 för 300:-. Vikten på ekipaget är 6.0 kg och diametern på hjulen är 22 cm och klippbredd på 38 cm.
En riktigt bra upptäckt när jag fick hem gräsklipparen var att om ett hjul snurrar, snurrar cylindern och det andra däcket står still. Detta är viktigt att veta vid riktningsförändring. När gräsklipparen rullar bakåt, drivs inte cylindern - alltså frikopplar den vid backning. Också bra - då det krävs mindre energi vid backning än vid framåtåkning.

Hjärnan/Intelligensen:
En Rasperry PI version 3 kommer vara hjärnan som kommer arbeta med logiken och programspråket - till RPI kommer alla komponenter som behövs kopplas till GPIO-pinnanrna.
Programkoden kommer göras i Python då det finns bra bibliotek för mina ändamål och det är ett relativt simpelt språk för mig som är novis inom programmering.

GPS:
Som sagt kommer jag styra gräsklipparen med en GPS och en autopilot. Min tanke är att använda mig av koordinater på gräsmattan som gräsklipparen ska gå till. Beroende på hur långt det är kvar till nästa koordinat så ska den styra mot nästa koordinat. GPSerna har ju oftast en tillförlitlighet på ca någon meter men jag ska försöka komma till några dm eller t.o.m cm. Hur ska detta göras? Med hjälp av RTK och RAW-data från GPSen kan man komma ner till dm-precision, är det dessutom fri sikt för GPS-en ser jag att jag skulle kunna komma ner till cm-precision. Jag har köpt en U-blox Neo-7M-000 GPS Module för 120:-. Jag kommer vara tvungen att aktivera RAW-data ut från denna enhet eftersom det är inget som är i den köpta produkten. För att använda sig av "riktig" RTK behövs ytterligare en GPS-modul, så detta måste inhandlas. Har kontribuerat på openstreetmap hur aktivering av RAW-data från GPS-modulen fungerar - här är en länk för nyfikna.

Kompass:
För att veta åt vilket håll ekipaget pekar åt kommer jag använda mig av en kompassometer som heter HMC5883L. Denna får man ut tre axlar ifrån X,Y,Z. Denna kommer hjälpa till att styra motorerna så att ekipaget svänger åt rätt håll.

Motorer:
Jag vill att ekipaget ska åka i ca 1m/s och har i en annan tråd här på forumet fått hjälp att räkna ut hur snabbt motorn ska snurra.Tråden för hjälp att välja motor.
Eftersom ekipaget kommer väga ca 7-8kg inkl. allt så behöver motorerna ha ordentligt med vridmoment. Även om det är lite lutning upp på gräsmattan kan det vara bra att ha lite extra kraft i motorn. Det kommer vara två motorer som driver hjulen, hjulen i sin tur driver cylindern på gräsklipparen.
Nedanstående motor fann jag till slut och har inhandlat 2 st - max kgcm 12,1/motor. Så det borde kunna bli 12,1*2=24,2kgcm i full kraft. 12V DC 100 RPM High Torque Gear Box Electric Motor for Speed Control för 310:-

Specar nedan:
Voltage: 12V DC
Gear ratio: 1/51
No-load speed: 100RPM
Rated Speed: 70RPM
Rated torque: 12.1kg.cm
Rated current: 2.1 Amp
Length of Motor(including spindle): 108mm
Diameter: 37mm
Shaft length: 20mm
Shaft diameter: 6mm

Motor drivare/styrkrets:
Jag har inhandlat en L293D för 31:-. Efter lite läsning upptäckte jag att denna max kan driva motorer på max 1A.
Så jag ska försöka hitta en ersättare för denna som passar till motorn. Min L293D har kommit väl till pass och jag har utfört experiment med RPI som controller och kunnat styra 2 st motorer med denna.

Min motordrivkrets kommer bli en L298N som enligt databladet ska klara peakar på 3A per kanal och den är ratad för att klara 2A per kanal. Mina motorer på peak är 2.1A så denna drivkrets bör klara det. Sedan återstår att se om den går koppla precis som L293D till RPI - för att använda den som kontroller istället för ett eget chip. Detta är ju min tanke.

Köpte enbart en IC krets L298N i min förhoppning om att denna skulle kunna användas direkt. Men till skillnad mot L293D som har inbyggda dioder har L298N inte det. Detta gör att när motorn stannar kan det finnas risk för att ström åker tillbaks från motorn in i IC-kretsen så att den brinner upp. Så jag beslutade mig för att köpa två kompletta satser ihopbyggda på ebay - dessa kostar enbart 20:- styck - och då är alla komponenter ihoplödda.

Batteri:
Alla komponenter kommer använda sig batterier, det kommer bli totalt 2 batterier. Ett batteri har inhandlats och det är för att strömsätta RPI med komponenter, det blev ett PowerBank 2200mAh Polymer Grade A för 100:-. Det kommer bli 1 batteri som strömsätter båda motorerna - detta för att underlätta vid uppladdning av batterierna och på så sätt minska vi vikten också. Kemin i batteriet kommer vara antinge Li-Ion eller Li-Ion polymer.

Ska även räkna ut hur länge PowerBank 2200mAh håller för mina komponenter och beroende på detta - bestämma hur mycket mAh det ska vara till motorerna.

Klipparen ska kunna vara ute i ca 1h. Då jag har 2 motorer på 12V och max.output är 2.1A - totalt 4.2A. För att räkna ut att jag ska denna i en timme att vara ute och köra så behöver jag ett batteri på 4.1/0,7= 5,85Ah Anledningen till att jag valt att dela med 0,7 är att batterierna inte orkar kräma ut allt som finns i dom. Så jag tror att ett batteri på 12V med minst 5850mAh ska räcka till mina motorer.

Batterier som är köpta är Samsung INR18650-25R 2500mAh - 20A
Jag har köpt 12st - tanken är att koppla dessa på i tre paralellea grupper och 4 i serier. Alltså ett 4S3P-pack.
Total kapacitet i energi är 7500mAh - beräknad för en timme var 5850mAh - så då har jag totalt 1650mAh kvar efter 1h körning.

Batterier köpta från https://eu.nkon.nl/.
Batterier kommer troligtvis köpas från https://eu.nkon.nl/ såg att någon annan här på forumet köpt därifrån.

Montering:
Motorn sitter fäst i chassit på ovansidan, sedan har jag satt drevet i axeln. På drevet sitter det armar med kullager som snurrar hjul. På hjulen går det larvband, och här sitter även drivhjul för motorn och drivhjul för cylindern så att gräset kan klippas.

Köpta komponenter:
Raspberry PI ver2 - 378:- (cdon)
AL-KO Comfort 38-5 - 300:- (bollnäs bilvård)
DC-motor 100RPM - 310:- (ebay)
PowerBank 2200mAh Polymer Grade A - 100:-
1# U-blox Neo-7M-000 GPS Module – £8.56 (ebay.co.uk)- 120:-
2# U-blox Neo-7M-000 GPS Module – £8.56 (ebay.co.uk)- 120:- - denna försvann i postgången - har fått ersättning!
3# U-blox Neo-7M-000 GPS Module – £8.56 (ebay.co.uk)- 120:-
HMC5883L – Compass – $0.99 (ebay.com)- 9:-
L293D – motordrivkrets – 31:- (electrokit)
USB till seriell PL2303HX - 100:- (kjell)
Stiftlist 40x1 pin - 15:- (kjell)
L298N IC - motordrivkrest - 56:- (elfa)
Batterihållare för 8st AA 35:- (elfa)
Kontak till batterihållare - 13:- (elfa)
2 x L298N komplett - 40:- (ebay.com)
Pololu nav, 6 mm, M3 - 90:- (hobbytronik)
2 x Maxrad GPS-TMG-26N - 478:- (ebay.com)
2 x N male straight to IPX U.FL female 1.13 cable jumper pigtail 20cm - 78:- (ebay.com)
2 x Kopplingslåda extra hög 140 :- (clas ohlson)
1 x USB förlängning 5m - A-hane - A-hone -54:- (kopplat.se)
12 x 18650 Samsung INR 3,6V 2500mAh - 500:- (nkon.eu)
1 x PCF8591 - 69:- (tradera)
Totalt 24/10-2018: 3036:-


Senast redigerad av Henke_83 10.30 2018-10-24, redigerad totalt 31 gånger.

Upp
 Profil  
 
InläggPostat: 10.21 2015-09-09 
Användarvisningsbild

Blev medlem: 18.09 2011-07-01
Inlägg: 8378
Ort: Helsingborg
Mycket bra och tydlig projektbeskrivning.
Jag gillar din åtgärdsplan på din hemsida, rätt tänkt och gjort.

Fråga, kommer cylindern att rotera med hjälp av framhjulen eller kommer det att vara en separat cylinderdrivning? Kommer cylindern att lyftas upp vid tomkörning och riktningsförändring? :humm:


Upp
 Profil  
 
InläggPostat: 10.32 2015-09-09 

Blev medlem: 08.17 2007-10-20
Inlägg: 173
Ort: Ekerö
Senast uppdaterad: 2018-10-24
ALPHA KLAR - 2018-09-23!

Genom hela projektet loggar jag in via DAG till min Raspberry Pi - så denna köra jag headless och använder min PC för att skriva all kod.

Innehåll
Delprojekt 0 - Installera Raspian på RPI (klart)
Delprojekt 1 - Löda pinnar till HMC5883L (klart)
Delprojekt 2 - Få Rasperry Pi att fungera med HMC5883L (klart)
Delprojekt 3 - Löda pinnar till Ublox Neo-7M(GPS-modul) (klart)
Delprojekt 4 - Få Rasperry Pi att fungera med Ublox Neo-7M (klart) (uppdaterad 2017-03-17)
Delprojekt 5 - RAW-data inställningar med Windows och U-center v.8.18 (klart)(redigering och bilder kommer)
Delprojekt 6 - RAW-data inställningar med Linux och CLI (klart)
Delprojekt 7 - Utdata från GPSen med Pynmea2 (klart)
Delprojekt 8a - Kompilera RTKLIB för Rasperry Pi med ver.2.4.2 med patch rev11 (klart)
Delprojekt 8b - Använda RTKRCV för GPS Neo-7M under Linux
Delprojekt 9 - Använda både GPS och kompass samtidigt från RPI? (klart)
Delprojekt 10 - Testa motorerna med batterier (klart)
Delprojekt 11 - Testa motor och se hur mycket de orkar (klart)
Delprojekt 12 - Vädertäta Raspberry Pi (klart)
Delprojekt 13 - Få RTKLIB i Linux med basstation att fungera (klart)
Delprojekt 14 - Ta emot TCP-ström i Python från RTKLIB (klart)
Delprojekt 15 - Använda RTKLIB med nya antenner och få fixed position (klart)
Delprojekt 16 - Använda L298N tillsammans med RPI (klart)
Delprojekt 17 - Styra L298N med PWM från RPI (klart)
Delprojekt 18 - Styra PWM baserat på compassometer med en fixed variabel (klart)
Delprojekt 19 - Skapa en RTKLIB basstation för utomhusbruk(klart)
Delprojekt 21 - Göra en ny basstation och korrelera mot SWEPOS(klart)
Delprojekt 22 - Montera motorn på cylinderklipparen (nerlagt - se Delprojekt 23 istället)
Delprojekt 23 - Montera motorn och på cylinderklipparen(klart)
Delprojekt 24 - Få gräsklipparen att röra på sig efter förändrad konstruktion av motorplacering(klart)
Delprojekt 31 - Prototyp 1 - ALPHA KLAR, tester (klart)
Delprojekt 34 - Starta basstationen automatiskt så fort den får ström(klart)

Pågående projekt
Delprojekt 20 - Testa precision jag kan få trädgården med bas och en rover - och optimera konfigurationen
Delprojekt 25 - Montera övriga komponenter på cylinderklipparen

Ej färdiga kommande delar projektet
Delprojekt 32 - Styra PWM baserat på compassometer
Delprojekt 33 - Beräkna strömåtgång för 2st Raspberry Pi
Delprojekt 35 - Göra ett grafiskt interface för att styra gräsklipparen från mobilen
Delprojekt 36 - Markera ut en slinga med GPS-koordinator där gräsklipparen får röra sig


Delprojekt 0 - Installera Raspian på RPI
För er som behöver hjälp att komma igång med RPI att starta upp och installera har jag gjort en tutorial på min hemsida.
Kommer inte skriva något omfattande om det här i den här tråden, det finns även ett flertal guider på nätet om det. Här kommer min:
Get Raspberry Pi up and running!

Delprojekt 1 - Löda pinnar till HMC5883L
Vad? - Löda fast pinnar på HMC5

Jag köpte en HMC5883L från ebay från Kina, det kom med pinnar som skulle lödas fast. När jag gjort tester med HMC5883L utan att löda har det varit svårt att få ordentlig kontakt med chipet och jag beslöt mig därför att löda fast pinnarna på chipet.

Min lödkolv är en 9W som går på tre AA-batterier :) och jag tror den duger gott för mig som aldrig kommer göra några större lödningar.

Så här är resultat av min första lödning - jag tyckte det blev rätt bra. Även om GDA och DRDY skulle kunna fått lite till lödtenn.
Bilaga:
WP_20150909_11_10_28_Pro.jpg


Delprojekt 2 - Få Rasperry Pi att fungera med HMC5883L
HMC5833L använder sig av I2C så det första vi måste göra är att aktivera detta på Rpi, det gör vi genom att köra
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo raspi-config
under advanced options finns ett alternativ att aktivera i2c, gör det men starta inte om RPI.
Vi behöver lägga till så att modulerna laddas från början, detta görs inte automatiskt när vi aktiverar i2c. Skriv
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo nano /etc/modules
lägg till följande på varsin rad längst ner i filen.
Citera:
i2c-bcm2836
och
Citera:
i2c-dev

När du gjort detta tryck på CTRL och X tillsammans och svara sedan Y på frågan om du vill spara/skriva över filen.
Efter detta ska vi uppdatera RPI så att vi har allt som behövs för att använda HMC5883L till Python. Kör följande kommandon.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install i2c-tools
sudo apt-get install python-smbus
sudo apt-get install python3

Nu har vi uppdaterat RPI och modulen för I2C kommer laddas, starta om RPI. Skriv
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo reboot
När detta är gjort behöver du installera bibliotek så vi kommer åt HMC5883L från python. Vi behöver två bibliotek för detta quick2wire och i2clibraries from ThinkBowl. Spara ner dessa i en lämplig katalog. Du behöver även installera git så att vi kan ladda ner desas bibliotek. Kör
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo apt-get install git
Gå till katalogen du valt och kör
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
git clone https://github.com/quick2wire/quick2wire-python-api.git
Skapa en miljövariabel för quick2wire så python kan hitta biblioteket när det behöver det.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
nano setup.env
i denna filen lägger du till följande:
export QUICK2WIRE_API_HOME=~/project/quick2wire-python-api (här ska du ändra till den katalog du har valt att lägga denna i)
export PYTHONPATH=$PYTHONPATH:$QUICK2WIRE_API_HOME

Precis som innan i nano trycker CTRL + X för att avsluta och spara/ersätt filen med Y. Nu kan du skriva
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
. ./setup.env
Setup.env behöver köras varje gång du startar om RPI.
Skapa en katalog där du ska skapa ditt program och gå in i den katalogen
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo mkdir program
cd program
Här ska vi nu ladda ner i2clibraries som har funktioner för HMC5883L.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
git clone https://bitbucket.org/thinkbowl/i2clibraries.git
Nu har vi gjort mjukvarudelen för HMC5883L och RPI, nu ska vi koppla ihop RPI och HMC5883L.
Stäng av RPI genom att ta bort strömförsörjningen eller skriv
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo shutdown -h now

Här har vi HMC5883L utgångar - det som är intressant för oss här är VCC - GND - SCL - SDA. Dessa kontakter ska kopplas ihop med RPIns GPIO-portar för att få kommunikationen att fungera.
Bilaga:
wp_20150911_12_15_28_pro (1).jpg

Här har vi Raspberry Pi:s 2 - GPIO-utgångar.
Bilaga:
Raspberry-Pi-GPIO-Layout-Model-B-Plus.png

Nu borde detta göra det enkelt för oss att koppla samman detta. Men första frågan är ska det vara 3.3V eller 5V matning till HMC5883L. Det ska vara 3.3V det finns alltså bara en port VCC kan kopplas till och det är GPIO NR1. Så om följande schema följs kommer det funger:

HMC5883L -- RPI
VCC --> Pin nr 1
GND --> Pin nr 6,9,14,20,25,30,34 eller 39 (koppla bara GND till en av dessa)
SCL --> Pin nr 5
SDA --> Pin nr 3
Bilaga:
WP_20150918_13_24_53_Pro.jpg


När du kopplat ihop HMC5883L med RPI kan du starta upp RPI igen.
För att kontrollera om du har en kommunikation med HMC5883L finns ett program som heter i2cdetect.
Kör följande kommando:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
i2cdetect -y 1
Följande skärm kommer visas med en markering på 1e om du gjort rätt.
Bilaga:
i2cdetect.PNG

Nu ska vi skriva lite kod för att kunna få ut utdata från HMCL5883L.
Skapa en fil som heter t.ex
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
nano compass.py
i denna filen skriver du in följande:
#Först ska vi importera biblioteket som vi tidigare laddade ner
from i2clibraries import i2c_hmc5883l
#Här anger vi vilken utport RPI ska använda, numret inom () är porten
hmc5883l = i2c_hmc5883l.i2c_hmc5883l(1)
#Kontinuerligt läge på HMC5883L
hmc5883l.setContinuousMode()
#Här är den magnetiska declinationen, dessa tal ska ändras till din egna
hmc5883l.setDeclination(5,43)
#Här anger vi att ska skriva ut HMC5883L värden som kommer från fjärde raden
print(hmc5883l)
Spara filen genom att trycka CTRL+X och svara Y för att spara/ersätta filen.
Skriv sedan följande för att köra programmet
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
python3 compass.py

Du kommer nu få följande utdata om allt är rätt:
Bilaga:
compass.PNG

Då har vi fått kontakt mellan HMC5883L och Rasperry Pi :tumupp:
Delprojekt 2 klart!

Delprojekt 3 - Löda pinnar till Ublox Neo-7M(GPS-modul)
Resultatet av gårdagens lödning ;( Blir troligtvis att jag gör om detta ikväll!

Bilaga:
WP_20150917_13_04_52_Pro (1).jpg


Delprojekt 4 - Få Rasperry Pi att fungera med Ublox Neo-7M
För att kommunicera med Ublox Neo-7M kommer jag att använda mig av seriell data, många guider på nätet föreslår USB. Eftersom RPI har ett GPIO interface med TX och RX tycker jag att detta ska användas. Vi har ju i tidigare del med HMC5883L kopplat in oss på I2C-kretsen. Nu ska vi koppla in oss på UART som det också heter.

RPI 1 och RPI 2
Serieporten på linux går under namnet /dev/ttyAMA0 och det är hit vi ska koppla vår GPS. Standard på RPI är att denna är kopplad så att du ska logga in med ett seriellt interface den vägen, men det ska vi inte göra. Så vi ska ta och avaktivera detta och göra den tillgänglig för GPS-chipet.
RPI 3
/dev/ttyAMA0 är nu upptagen av bluetooth som finns på RPI 3 - så nu har vår seriella port /dev/ttyS0 som namn istället. Som standard på RPI 3 är UART inaktiverad så vi behöver modifiera en fil som under /boot/config.txt och lägga till en rad som heter enable_uart=1.

Vi ska ändra i en fil som heter cmdline.txt så det första vi gör med denna fil är att vi tar en backup ifall något skulle bli fel.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo cp /boot/cmdline.txt /boot/cmdline.txt.backup
Nu ska vi avaktivera en funktion i cmdline.txt detta gör i genom att editera filen
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo nano /boot/cmdline.txt
Ändra
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
till
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Det vi har gjort är att inaktiverat två funktioner.
!!VIKTIGT ATT INTE GÖRA NÅGRA RADBRYT HÄR - ALLT SKA VARA PÅ SAMMA RAD!!


Inittab är ersatt av systemd i nyare distar till RPI - så denna punkt är troligtvis inte nödvändig längre
Sedan ska vi inaktivera ytterligare funktioner i en annan fil som heter inittab så ta en backup på denna först genom att skriva
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo cp /etc/inittab /etc/inittab.backup
Editera filen genom att skriva
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo nano /etc/inittab
Nästan längst ner i filen hittar du följande rad
Citera:
#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Framför den andra raden sätter du en hashtag så att det efteråt ser ut så här
Citera:
#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

och nu kan vi stänga av RPI genom att ta ut sladden för vi ska koppla ihop Ublox NEO-7M med GPIO-portarna på RPI.
Här kommer hur jag har gjort. Anledningen till att jag gått via breadboardet är att jag inte hade några hona - hona kontakter så detta får duga.

Ublox Neo-7M-000 -- RPI
VCC --> Pin nr 1 (VCC)
GND --> Pin nr 6 (GND)
RX --> Pin nr 8 (TX)
TX --> Pin nr 10 (RX)
Bilaga:
WP_20150918_13_41_50_Pro (1).jpg


När detta är gjort ska vi starta upp RPI och installera program för att se om vi har någon kontakt med modulen.
Vi ska installera ett program som heter gpsd och det finns några program som krävs ytterligare för att detta ska fungera så kör följande kommando
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo apt-get install gpsd gpsd-clients python-gps
Efter att programmet är installerat ska vi starta denna tjänst genom att skriva
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo service gpsd start
För att se om GPSen fungerar skriver vi nu följande kommando som startar upp ett gränssnitt där vi kan se var vi befinner oss och vilka satelliter vi har kontakt med så kör följande
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
cgps -s
Om det blir timeout när du startar denna beror det troligtvis på att du inte har fått en "fix" ännu. Om GPS:en inte blinkar grönt konstant med ca 1s intervall så har du ingen fix på GPSen.

Om man är osäker på att det verkligen kommer utdata från GPSen kan prova följande kommando
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
(RPI,RPI2)gpscat /dev/ttyAMA0
(RPI3)gpscat /dev/ttyS0
Här kommer det spottas ut NMEA meningar även om du inte fått en fix på din position.

Nu ska du få utdata från GPSen från RPI.

Delprojekt 5 - RAW-data inställningar med Windows och U-center v.8.18
Jag var osäker på vad som verkligen hände i Linux när jag skickade kommando till GPS-modulen. Det blev en stor osäkerhet och jag kände att jag var tvungen att ha koll på vad som kom ut ur GPS-modulen. Läste på nätet på olika forum om Ublox eget program U-center där inställningar kunde ställas in i modulen. För att kunna använda mitt chip till windows krävdes en USB-SERIELL kabel med ett chip som heter PL2303 för att använda något som kallas FTDI.
Därav mitt inköp av en USB-seriell kabel med ett PL chip, detta körde jag i Windows 10. Kabeln köpte jag på Kjell för att jag snabbt ville testa detta och se om det funkar. Finns billigare varianter på ebay men ville inte vänta 1 månad på att få en billig kabel. Denna kabel blev det Usb till seriell. Innnan jag köpte denna kabel googlade jag och såg om det fanns stöd för PL2303HX i Windows 10 64-bit - och det gjorde det INTE. Men som det ofta gör för det guider hur denna kabel kunde fungera under Windows 10. Där framkom det att krävdes en speciell version av Profilic driver Version 3.3.2.102 och med denna installerad och datorn omstartad så fungerade min kabel. Här är en länk till drivrutinen som jag använde mig av Drivrutin.
Efter detta installerade jag U-center v.8.18 - detta program finns att ladda ner från Ubloxs hemsida.

Nu skulle jag koppla ihop USB-kabel med GPS-modulen. Jag har ju som ni sett tidigare lött dit ben på GPS-modulen så detta underlättade mycket.
Kopplingen blev som följer (bild kommer)
GPS - USB-Seriell
GND - Svart
VCC - Röd
RX - Grön
TX - Vit

Sedan startade jag igång U-center. Där valde jag att programmet automatiskt skulle känna av hur snabbt hastigheten gick.
Detta funkade direkt och för att se om GPS-modulen spottar ut data kan man trycka på F6,F7 och F8 - då kommer olika fönster ut och du ser direkt vad GPS-modulen spottar ur sig.

Instruktioner för att få RAW-data från GPSen från U-center
    Starta först U-center
    Anslut genom att trycka på Connect uppe till höger
    Tryck sedan på F8 - du får nu upp textkonsol
    Tryck sedan på F9 - härifrån kan vi skicka kommando till chipet
    Tryck här på Custom - längst ner i trädmenyn
    Klistan in denna rad i fältet: B5 62 06 00 14 00 01 00 00 00 D0 08 00 00 00 C2 01 00 01 00 01 00 00 00 00 00 B8 42
    Tryck på Send
    Koppla sedan ner modulen
    Ändra hastighet till 115 200
    Anslut modulen igen
    Om modulen har tagit emot kommandot rätt, kommer du i Textkonsolen inte få några meddelanden alls nu
    Gå till Custom igen - vi ska skicka nedanstående kommando till modulen ett i taget
    B5 62 06 01 03 00 03 0A 01 18 5D
    B5 62 06 01 03 00 03 0F 01 1D 67
    B5 62 06 01 03 00 01 22 01 2E 87
    B5 62 06 01 03 00 01 30 01 3C A3
    Klart!

Jag har även kontribuerat med material till OpenStreetMap

Delprojekt 6 - RAW-data inställningar med Linux och CLI
För att skicka inställningar till GPS-modulen via den seriella kontakten skrev jag ihop ett litet program i python som skickar data direkt till gps-chipet.
Jag använde mig av biblioteket serial och sedan skickade jag data till modulen. Jag har gjort två program för testets skulle men allt kan sitta ihop i ett program. Det första programmet skickar data i en hastighet av 9600 och aktiverar UBX och rätt hastighet på GPS-moudlen och det andra skickar i en hastighet av 115200 och aktiverar RAW-data från modulen. Du kan vara tvungen att installera serial paketet för python genom att köra. För att kunna installera pyserial behöver du köra följande kommandon.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo pip insall python-pip
Detta installerar PIP som är en installationshanterare för paket till python
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo pip install pyserial
Detta är modulen så vi kan kommunicera seriellt i python.
Här är koden för att sätta hastigheten.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
import serial

ser = serial.Serial('/dev/ttyAMA0',9600)
print 'Sending set UBX out and speed 115200'
command = b'\xB5\x62\x06\x00\x14\x00\x01\x00\x00\x00\xD0\x08\x00\x00\x00\xC2\x01\x00\x01\x00\x01\x00\x00\x00\x00\x00\xB8\x42'
ser.write(command)

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
import serial

ser = serial.Serial('/dev/ttyAMA0',115200)
print 'Sending set TRK-TRKD5'
command = b'\xB5\x62\x06\x01\x03\x00\x03\x0A\x01\x18\x5D'
ser.write(command)
print 'Send set TRK-SFRBX'
command = b'\xB5\x62\x06\x01\x03\x00\x03\x0F\x01\x1D\x67'
ser.write(command)
print 'Sending set NAV-CLOCK'
command = b'\xB5\x62\x06\x01\x03\x00\x01\x22\x01\x2E\x87'
ser.write(command)
print 'Sending set NAV-SVINFO'
command = b'\xB5\x62\x06\x01\x03\x00\x01\x30\x01\x3C\xA3'
ser.write(command)
Klart!

Delprojekt 7 - Utdata från GPSen med Pynmea2
För att kunna använda sig av datan från GPSen måste vi kunna parsa data - dett har jag gjort med hjälp av Pynmea först och efter lite testandet övergav jag pynmea till fördel för Pynmea2. Nu vet jag inte om jag kommer använda Pynmea2 då jag ska använda mig av RTKLIB, men här nedan är programmet så att jag fick ut datan från GPSen med Pynmea2.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
import serial
import pynmea2
ser = serial.Serial('/dev/ttyAMA0',9600)
while 1:
       data  = ser.readline()
       if (data.startswith("GPGGA")):
              msg = pynmea2.parse(data)
              print repr(msg.latitude)
              print repr(msg.longitude)


Klart!

Delprojekt 8a - Kompilera RTKLIB för Rasperry Pi med ver.2.4.2 med patch rev11
Det vi behöver från RTKLIB i Linux är ett program som kallas RTKRCV. Så jag ska visa hur jag gick tillväga för att kompilera detta. Ladda ner källkoden med git, för att installera GIT kör
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo apt-get install git
sedan kan du köra följande kommando
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
git clone https://github.com/tomojitakasu/RTKLIB.git
Källkoden är ca 60 MB. Detta kommer laddas ner i en mapp som heter RTKLIB. Kommandoradsinterfacet som gör realtidspositionering i RTKLIB kallas RTKRCV och det är det vi ska kompilera. Så gå in i katalogen $HOME\RTKLIB\app\rtkrcv\gcc genom att skriva
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
cd \RTKLIB\app\rtkrcv\
I denna katalog finns det en fil som heter makefile, här ska vi ändra så att vi kompilerar för Raperry PI 2. I filen finns ett ställe som heter CTARGET ändra denna rad till följande:
Citera:
RPI 3:CTARGET= -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard
Citera:
RPI 2:Ctarget= -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard
Citera:
RPI 1: CTARGET = -march=armv6 -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -ffast-math
Detta anpassar så att programmet är gjort för RPI 2. När vi kompilerar programmet använder vi kommandot make med variabel -j 4, detta gör att alla fyror kärnor används vid kompileringen. Kör följande kommando
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
make -j 4
Du har nu kompilerat RTKRCV, för att testa programmet kör det genom att skriva
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
./rtkrcv
Om du vill använda en annan branch, kolla på denna länken: eller gör på följande sätt:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
git clone URL
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
cd in i katalogen

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
git checkout "branch"

FÄRDIGT!https://stackoverflow.com/questions/2294313/how-to-download-a-branch-with-gitKLART!

Delprojekt 8b - Använda RTKRCV för GPS Neo-7M under Linux
Det vi behöver göra för att kunna använda sig av RKTRCV under Linux är först att se till att få RAW-data ut från GPSen. Detta gör vi med hjälp av tidigare script/program vi skapat tidigare i denna guide under delprojekt 6. Scripten kör vi på följande sätt
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo python speed.py
för att öka upp hastigheten till max sedan
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo python raw.py
När detta är gjort kan vi kontrollera att vi får utdata i RAW-format. Då kör vi
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
cat /dev/ttyAMA0
alt.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
gpscat /dev/ttyAMA0
förutsatt att vi har GPSen kopplad via UART. Vi kan även kontrollera så att hastigheten är rätt inställd genom att köra
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
stty -F /dev/ttyAMA0 -a
Det första som står är speed och där ska nu stå 115200 baud. Nu är RAW-data aktiverat. För att vi ska kunna använda rtkrcv behöver vi sätta rätt attribut på filen rtkshut.sh och rtkstart.sh, det gör vi på följande sätt:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
chmod +755 rtkshut.sh
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
chmod +755 rtkstart.sh

Vi ska nu skapa en konfigurationsfil för Neo-7M - jag har valt att kalla min för 7m.conf. Denna behövs sedan när vi ska köra programmet - här ställer vi in vilken hastighet GPSen har vilken port den finns på och en hel del annat. Från början följder det med en fil som heter rtkrcv.conf - det är denna vi ska ändra eller kopiera. När vi kopierat filen kan vi ändra den. Vi ska ändra på några rader -
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
inpstr1-type=serial
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
inpstr1-path       =ttyAMA0:115200:8:n:1:off
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
inpstr1-format     =ubx
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
file-cmdfile1      =
För att starta programmet kör vi
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
./rtkrcv
i konsolen rtkrcv> kör vi sedan
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
load 7m.conf
Nu behöver du skriva
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
restart
för att aktivera konfigurationen. Då får vi ett
Citera:
rtk server restart
Nu kan vi köra
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
status
och se om det funkar. Sedan kör vi
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
solution 1
då kommer du få massa GPS-data om du har tillräckligt med satteliter låsta till GPSen.
Klart!

Delprojekt 9 - Använda både GPS och kompass samtidigt från RPI?
Kopplingsschema för att använda både GPS och kompass samtidigt.
Bilaga:
gps.jpg


Delprojekt 10 - Testa motorerna med batterier
Detta test var för att se att motorerna fungerade och inte var trasiga. Även se så att de fick rätt spänning och ström.
Så 8 batterier på 1,5V kopplade direkt motorerna - fungerade bra. 12V till motorerna.

Delprojekt 11 - Testa motor och se hur mycket de orkar
Jag använde 1 motor koppplad till mina 8 batterier. Denna i sin tur var kopplad till ett av hjulen på gräsklipparen. Den orkade utan några konstigheter driva hjulet och även själva cylindern som klipper gräset. Med 2 motorer bör detta fungera utan några större problem.

Delprojekt 12 - Vädertäta Raspberry Pi
Det kommer vara 2 st RPI - en som fungerar som BASSTATION för RTKLIB och en som är hjärnan i gräsklipparen. Den som är basstation kommer vara monterad utomhus och kommer utsättas för mycket varierande väder. Delen som sitter på gräsklipparen kommer inte utsättas på samma sätt. Så det är det inte lika viktigt att det är helt hundra.

Har skrivit ut skalet till min RPI-basstation, och där har jag mellan RJ45-uttaget använt smältlim för att täta till så inget vatten kan läcka in. Likaså där micro-usb och antennsladden går in använt mig av smältlim för att täppa till alla öppningar in till rpin. Har även satt dit locket med en liten snäppfäste tillsammans med smältlim för hela locket, så inget vatten "bör" komma in. Vi får väl se om det är lyckat om ett år eller så, om den fortfarande lever min lilla rpi som sitter som basstation.

Delprojekt 13 - Använda RTKLIB i Linux med basstation och patchantenner
Hur får man RTKLIB att fungera i Linux med enbart CLI? Det är frågan som kommer besvaras här - jag har i nuläget inte en aning men den ska lösas..
Eftersom det finns ett tidigare projekt som är likt detta i följande tråd RTK-GPS och autostyrning- kikar jag där till en hjälp. Dessutom i manualen till RTKLIB.
Och wikin som är skapad för detta på WiKi RTK-GPS
Det ska finnas en basstation och en station som sitter på rovern - jag kommer testa mig fram för att få det rätt.

De program jag kan använda mig av är följande: RTKRCV, STR2STR, RNX2RTKP, CONVBIN.
Frågan är vilka jag ska använda - jag tror utan att veta att jag kommer använda mig av de tre första.
RTKRCV,STR2STR och RNX2RTKP. I manualen finns det ett fint diagram som visar vad jag ska göra - det ser ut så här:
Bilaga:
rtk-gps.JPG


Har först kompilerat RTKRCV och STR2STR för RPI. Sedan har det vara ganska simpelt att få det att fungera.

Kommer använda mig av konfigurationen:
Kinematic - detta när jag har en rover som flyttar sig och har en bas som är stilla på ett och samma ställe

För basstationen använder jag:
STR2STR
I konfigurationen behöver jag välja varifrån datan kommen - GPS - som är ansluten till seriell UART på RPI 2.
Ska även välja vart utdatan ska ta vägen - och här väljer vi att vara TCP-server, testar även att skicka till en fil.

För att starta en basstation och skicka data eller konvertera till annat format använder jag följande kommando
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
./str2str -in serial://ttyAMA0:115200#ubx -out test.rtcm3#rtcm3

För att starta basstationen och starta en TCP-server har jag gjort med följande kommando
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
./str2str -in serial://ttyAMA0:115200#ubx -out tcpsvr://:50021

För rovern använder jag:
RTKRCV
I konfigurationen behöver jag välja varifrån datan kommer - GPS - som är ansluten till seriell UART på RPI B+.
Behöver även välja vilken basstation/server jag ska koppla ihop mig med.
I konfigurationen ligger även den statiska koordinaten till basstationen.
Kommer även göra en output som troligtvis kommer vara en TCP-ström som python får behandla för min autopilot.

Har tidigare bara lyckats få en single på RTKRCV idag fick ju även till så att det blev FLOAT. Kommer troligtvis inte få till att få en FIXED punkt då det krävs större än mina 1cm patchantenner och just nu står mina moduler knappt 30 cm ifrån varandra. Så större antenner och längre avstånd från varandra så ska nog detta gå också.

Får anse att denna punkt är klar tills jag har köpt nya antenner. Se projekt 20 för utveckling av detta..
KLART!

Delprojekt 14 - Ta emot TCP-ström i Python från RTKLIB
Har ändrat i min konfiguration för att få en utström i NMEA-format och detta fungerar utan problem.
Nu skickar jag data till en fil och den utströmmen ser precis ut som den datan jag tidigare använt mig av i mitt python-program.
Så det jag ska göra är att pythonprogrammet ska ta emot en tcp-ström och sedan som behandlar nmea-datan.

Ändrat på raderna i .conf filen på följande rader:
Citera:
outstr1-type=file
outstr1-format=nmea

För att få ut en TCP-ström har jag ändrat följande i .conf filen:
Citera:
outstr2-type=tcpcli
outstr2-format=nmea
outstr2-path=192.168.1.xxx:50002

Håller på och gör ett enkelt program i Python som ska ta emot NMEA-data. Detta ska sedan implementeras in i autopiloten för att hålla kolla på var gräsklipparen befinner sig. Har just nu skapat en kommunikation mellan RTKLIB och python via en TCP förbindelse. Nu har jag även så att jag får utdata via strömmen i det lilla programmet. Här är den färdiga koden:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
import socket
import sys

HOST = ''   # Symbolic name, meaning all available interfaces
PORT = 50002 # Arbitrary non-privileged port

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'

#Bind socket to local host and port
try:
    s.bind((HOST, PORT))
except socket.error as msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()

print 'Socket bind complete'

#Start listening on socket
s.listen(10)
print 'Socket now listening'

while True:
    # Wait for a connection
    print 'waiting for a connection'
    conn, addr = s.accept()

    try:
        print 'connection from', addr

        while True:
            data = conn.recv(128)
            print 'received: %s' % data
     
    except:
        print 'error'

s.close()

Nu kommer jag kunna fortsätta på autopiloten igen.. :)

Delprojekt 15 - Använda RTKLIB och få fixed position med 2 Raspberry PI och riktiga antenner
Håller just nu på och testat RTKLIB på mina Raspberry PI. Har suttit och försökt få till det och när det är dåligt dokumenterat är det svårt att komma ihåg hur man gjort. Har kompilerat RTKRCV så det är det programmet jag ska använda nu.

Antenner som används är Maxrad GPS-TMG-26N. GPS-modulen jag har skickar en liten ström till antennen, så det är en aktiv antenn. Ingen modifiering behövde göras på GPSen utan det är standard.
Det är nämnt här i denna projekttråd att jag behöver ha minst 5st som har SNR äver 40, tror jag kommer få det att fungera.

Har sänkt elevation mask till 0grader, för att testa. Kommer trimma in och se hur bra precision det blir, har tidigare använt 15grader i elevation mask. Detta för att utesluta satelliter som ligger lågt på horisonten.

Det jag börjar med är basstationen - tänker även lägga upp min cfg fil som fungerar för detta här. Så jag själv slipper och försöka återskapa saker.

Behöver trimma in en egen basstation - tänkte därför logga position genom att samla data mellan 12-24h. Använder mig utav PPPstatic som tar fram medelpunkten av alla insamlade data, så ju längre den samlar in data, desto bättre precision i var basen befinner sig.
viewtopic.php?f=3&t=61004&hilit=rtklib&start=15#p871126

Eftersom allt jag gör körs via ssh och jag vill samla in data i en fil har jag använt mig av programmet screen i Linux. Då kan processen gå i bakgrunden även när man kopplar ner SSH-sessionen. Annars avbryts programmet och det blir ingen insamling. För att komma ut och koppla från sessionen utan att stänga av den använder man kombinationen
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
ctrl+a och sedan d


Delprojekt 16 - Använda L298N tillsammans med RPI (klart)
I början av detta projekt trodde jag att mitt chip L293D skulle klara att styra mina motorer till detta projekt. Gjorde kopplingsscheman och fick allt att fungera med två små motorer. Efter att jag inhandlat mina motorer efter vad jag behövde insåg jag att L293D inte skulle räcka. Fick därför köpa L298N som ska klara uppgiften bra.

Så jag har gjort ett kopplingscchema hur jag kopplat ihop allt - i denna fas har jag använt mig av enbart 1 motor. Efter mycket googlande och lite eget trial-and-error fick jag L298N att fungera bra med RPI och lite pythonkod.

Någon bra hemsida som går igenom detta var inte lätt att hitta men jag har fått det att fungera som jag vill.

Kopplingscchemat..
Bilaga:
Office Lens_20160210_101741_processed.jpg


Kod för att få motorn att snurra i 2 sek - detta är enbart en av motorerna
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BOARD)

Motor1A = 16
Motor1B = 18
Motor1E = 32

GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1B,GPIO.OUT)
GPIO.setup(Motor1E,GPIO.OUT)

print "Turning motor on"
GPIO.output(Motor1A,GPIO.HIGH)
GPIO.output(Motor1B,GPIO.LOW)
GPIO.output(Motor1E,GPIO.HIGH)

sleep(2)

print "Stopping motor"
GPIO.output(Motor1E,GPIO.LOW)

GPIO.cleanup()


Delprojekt 17 - Styra L298N med PWM från RPI
För att kunna styra mina motorer mot rätt GPS-koordinat måste jag ha styrning av motorerna med PWM. På RPI finns det två utgångar för PWM och det är dessa jag kommer använda mig av. Det är GPIO12 och GPIO13.

Har precis tagit ett beslut att använda mig biblioteket det som finns inyggt i RPI.GPIO. Då det blir enklare att implementera koden och sedan får vi se hur det blir om det blir tillräckligt tillförlitligt. Annars byter jag ut biblioteket till RPIO.PWM istället.

Fick till koden med en stegrande ökning av hastigheten och tycker det funkar över förväntan. Sen är det inte helt steglös utan man märker olika förändringar så helt steglöst ska vi inte säga det är med en DC-motor och RPI.GPIO - vet inte om det skulle bli bättre med RPIO.PWM och tänker inte testa detta till att början med.

Utgått från koden i första testet med motorn och här är den:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BOARD)

Motor1A = 16
Motor1B = 18
Motor1E = 32

GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1B,GPIO.OUT)
GPIO.setup(Motor1E,GPIO.OUT)

pwmMotor1 = GPIO.PWM(Motor1E, 150)

pwmMotor1.start(0)

print "Turning motor on"
GPIO.output(Motor1A,GPIO.HIGH)
GPIO.output(Motor1B,GPIO.LOW)
GPIO.output(Motor1E,GPIO.HIGH)

for dc in range(50, 100, 5):
          pwmMotor1.ChangeDutyCycle(dc)
          sleep(2.50)

sleep(2)

print "Stopping motor"
GPIO.output(Motor1E,GPIO.LOW)

pwmMotor1.stop()

GPIO.cleanup()


Delprojekt 18 - Styra PWM baserat på compassometer med en fixed variabel
Nu har jag fått både compassometern och motorn fungera i python utan några större konstigheter. Nu är det dags att sätta tänderna i det lite svårare att implementera koden tillsammans. Detta för att kunna styra gräsklipparen så den åker åt rätt håll och svänger när det är tänkt. Det första i denna del är att jag ska se till att motorerna kan styras med hjälp av PWM och compassometern.

Har precis fått in min heading som en variabel.
Har fixerat mitt mål mot norr just för att få till koden och allt därikring.
Nästa problem, eller kanske inte problem utan utmaning är hur jag ska skriva in Norr som variabel med degrees och minuter.

Gjort en liten punktlisa hur jag ska bygga upp programmet:
Läsa av heading - nuvarande
Läsa av position - dit vi ska (här kommer jag använda NORR 0 som statisk punkt i detta program)
Detta sker i en loop så att vi håller rätt position.
Motorerna
Om heading=position ska båda motorerna gå på PWM=100
Om heading inte är lika med position och är mellan 180-355 - styr Motor1 PWM=60 Motor 2=100
Om heading inte är lika med position och är mellan 005-179 - styr Motor2 PWM=60 Motor 2=100

Koden kommer snart..

Delprojekt 19 - Skapa en RTKLIB basstation för utomhussbruk
https://pixhawk.org/dev/rtk-basestation

Ok - Hur gör man detta? I min egen fantasi var detta verkligen enkelt men när jag började fundera blev saker inte så självklara längre som jag trodde det skulle vara. För att kunna använda sig av en pålitlig basstation och använda sig av antennen hur ska man göra. För om den står på ett och samma ställe och får olika koordinater även om den står på samma ställe blir det ju fel? Hur ska man då göra? Jag har letat efter guider där folk bygger sina egna basstationer men inte hittat några bra tips eller guider så jag fick läsa manualen och klura lite själv.

Vi kommer ha två antenner:
1 antenn - basstation
1 antenn - gräsklipparen/roboten

Funktion:
basstationen ska kommunicera med gräsklipparen och berätta exakt var den befinner sig
Om basstationen får olika koordinater hela tiden kommer gräsklipparen få en felaktig position också och det blir ju inte bra
Det finns "riktiga" basstationer i sverige man kan använda sig av via NTRIP-caster men det ska inte jag göra, jag ska ha min egen på taket.

Tillvägagångsätt i min teori för basstationen och vad jag läst mig till:
Starta igång min RPI med antenn som ska vara basstation och här ska jag samla in mätvärden för denna position i 24h. När den har samlat värden i 24h ska jag välja det sista värdet. Denna variant ska gå i PPP-static.
Efter detta har vi fått en POSITION som är OK och det är min basstation. Antennen måste fixeras på detta ställe och ska alltid vara på samma ställe.
PPP-static tar och gör beräkningar på alla inmatade värden och gör ett medelvärde på positionen, detta innebär att efter 24h ska värdet vara så pass bra att detta är min basstation.

I min konfigurationsfil för RTKRCV har jag ställt in att outputfilen ska vara llh och sedan sparas i en fil som heter basstation.gps. Då får jag in alla värden som skapas i filen.

Eftersom jag loggar in allt via ssh - krävs det även för att köra rtkrcv i bakgrunden, även om jag stänger ner sessionen. Detta har jag gjort med nohup kommandot på följande sätt.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
screen
Då om jag stänger ner min aktiva sessionen och startar en ny och kör
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
screen -r
kan jag se att rtkrcv går i bakgrunden. För att komma ut från screen används kommandot ctrl+a och d. Då disconnectar man sessionen och den går i bakgrunden. Med screen -r hoppar du in i bakgrundsessionen. Vill du avsluta en session använder du kombinationen ctrl+a och k - som står för kill.

Har nu testat min basstation och samlar i detta nu in värden som ska samlas i 24h. Om jag har förstått det är rätt krävs minst 24h insamlande av data för att få cm-precision, och det är vad jag vill åt. Vi får se hur exakt position det blir. Jag har fått en OTROLIGT exakt position på mina tidigare tester. För att det ska bli så korrekt som möjligt kräver det satellitter med snr >40. Nu ska vi testa Rover mode också och kommunicera detta. :D

Lite motgångar ska man ju också ha, upptäckte att snr som borde ligga enkelt över >40 inte gjorde det. Troligtvis är det någon kontakt inne i mitt vattentäta skal som har släppt, så det blir till att öppna upp och se vad det är. Felet är kabeln med N-hane och U.fl - testade in i samma modul med samma antenn, och fick direkt 7 st satelliter med SNR>40. Så en ny kabel ska ordnas till detta. För att komma vidare kommer jag använda en patch-antenn till rovern, tills jag har fått tag på en ny kabel. Direkt när jag kopplade in patch-antennen fick jag direkt 6 satelliter med SNR>40 utan problem.

I gräsklipparen ställer vi in basstationen som vi har fått ut efter att samlat in värden. Detta gör att vi har en position på basstationen och RTKLIB får sedan utifrån detta modifiera och korrigera så det blir korrekt.

Har fått in 12h mätvärden som jag kommer basera de första testerna på, vill egentligen ha minst 24h mätvärden. Har även startat ett issue på RTKLIB Github sida för att se om det är en bugg eller något annat problem.

Kommer göra en exakt beskrivning när jag är färdig med detta men med kanske enbart 1-2h mätvärden för att testa och se om detta blir ett korrekt sätt att göra det på.

Har även upptäckt att GPS-data man samlar in höjdmässigt inte stämmer alls - om man vill ha en "riktig" höjd över havet så behöver man slå in det på följande sida : https://www.unavco.org/software/geodeti ... lator.html . Då får man ut en mer korrekt höjd var GPS-faktiskt befinner sig.

http://grauonline.de/wordpress/?page_id=1468

Delprojekt 22 - Montera motorn på cylinderklipparen - förkastad ide - Se Delprojekt 23 (nerlagt)
Här är en sprängskiss på hur klipparen ser ut del för del Sprängskiss AL-KO Comfort 38-5. Här nedanför är även det som är intressant för detta projekt från sprängskissen..
Bilaga:
gräsklippare.JPG

Jag har tagit bort hjulet och kollat hur det ser ut. Själva staget som går rakt igenom klipparen är enbart för hållfasthet - så jag ska använda mitt multiverktyg för att kunna placera in motorn inifrån. Motorn får plats perfekt in i staget som är öppet - sedan kommer jag skruva fast motorn med 6 st skruvar utifrån i motorns hål som är gjorda för detta. Utanpå däcket kommer jag sedan ha en 3d-printad del för att kunna driva gräsklipparen framåt. I staget kommer jag borra ett litet hål så jag kan dra kablarna igenom och upp i mitten av gräsklipparen. Detta för att skydda kablarna så mycket det går. Jag hade en tanke att montera in motorn i staget och låta det sitta kvar - se bilden. Men motorn skulle inte få plats så jag var tvungen att kapa bort hela staget. Det här var min tanke:
Bilaga:
IMG_20170408_174856.jpg

Tyvärr så fungerade det inte.
Så här ser klipparen ut nu - då jag fått kapa bort hela staget. :
Bilaga:
IMG_20170409_135335.jpg

Har gjort modeller i Fusion 360 som en kollega skrivit ut i 3d - det börjar känna sig att det närmar sig mål med monteringen. Sedan kommer det vara en del finjusteringar allteftersom men detta är en bra start.
Bilaga:
IMG_20170412_190604.jpg
Här är själva 3d-printen som används.
Bilaga:
IMG_20170412_191259.jpg
Här är printen monterad på hjulet - passformen är perfekt!
Bilaga:
IMG_20170412_191416.jpg
Här är hjulet monterad - upptäckte dock att det behövdes förlängas ca 2mm och även gjort ett hål in för att kunna fästa motorn mot metallen.

Testat den nya printen - dock var den för TIGHT - så jag fick borra i den. Bara för att se hur långt jag kunde komma. Med denna hade jag en plan att jag nu skulle fästa fast motorn i själva gräsklipparen. Hade inga M3-skruvar som behövdes för detta. Får köpa och återkomma.

Modifierad och förbättrad version skickad så jag hoppas den blir bra nu.

Det är svårare att montera motorn än vad jag trodde. Har nu skruvat i 3 st M3 skruvar i skruvhålen i växellådan på motorn utifrån från gräsklipparen.
Dock är stabiliteten i däcket inte ALLS bra - och jag tänkte faktiskt första göra tester för att se vad som händer när man nu startar motorn. Som några påpekat kanske gräsklipparen tippar och vill ha detta bekräftat hur det fungerar.

Håller på och funderar på konstruktion för att stabilisera upp hjulen.

Denna idé är förkastad av mig då motorerna var alldeles för NÄRA cylindern. Jag tror att ett litet gupp och sedan lite svaj i motorn och sedan var den ivägskickad av cylindern som roterar. Så nya tag och nya bilder i nästa projektdel.

Delprojekt 23 - Montera motorn på cylinderklipparen - ny idé
Har kommit fram till att motorerna kommer monteras ovanpå själva klippdelen. Då är motorerna skyddade mot cylindern och det är enkelt att dra kablar som behövs för att komma åt allt. Dels till batterierna och även till motorcontrollern. Här är två bilder på hur montaget ser ut.
Bilaga:
IMG_20180807_204805.jpg

Bilaga:
IMG_20180807_204818.jpg

Här även monterat motorcontroller se bild
Bilaga:
IMG_20180811_224429.jpg


Får inte plats mer bilder i detta inlägget...

Delprojekt 24 - Få gräsklipparen att röra på sig efter förändrad konstruktion av motorplacering
Gräsklipparen rör sig och den åker framåt, då utan att cylindern är igång. Men det fungerar -
MILSTOLPE!!!!!

Delprojekt 20 - Testa precision jag kan få trädgården med bas och en rover - pågående
Har ju i tidigare delprojekt 13 börjat göra tester men nu är det mer "riktiga" tester för att få ut inom vilka koordinatorer gräsklipparen ska åka. Jag har min basstation som är monterad och klar.

Det jag ska göra är att använda mig av STR2STR - det motsvarar STRSVR för Windows. Detta är basstationen.
Det andra programmet som används är RTKRCV - det motsvarar RTKNAVI för Windows. Detta är rovern/gräsklipparen.
Som bilden visar.
Bilaga:
rtk-gps.JPG


Som tidigare nämnts för att använda STR2STR körs följande kommando, där konverteras också indata-till rtcm3 format:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
./str2str -in serial://ttyAMA0:115200#ubx -out test.rtcm3#rtcm3

För att starta basstationen och starta en TCP-server har jag gjort med följande kommando
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
./str2str -in serial://ttyAMA0:115200#ubx -out tcpsvr://:50021
Detta skickar data i samma format som den får in data i alltså UBX och det är vad jag vill.
För att starta basstationen och starta en TCP-server, skickar GPS-koordinatorer och sedan skickar en del meddelande använder jag följande:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
./str2str -in serial://ttyAMA0:115200#ubx -out tcpsvr://:50021 -p 59.27153435 17.81710243 47.879


Mina koordinater är: 59.27153435,17.81710243,47.879

För gräsklipparen använder jag:
RTKRCV
I konfigurationen behöver jag välja varifrån datan kommer - GPS - som är ansluten till seriell UART på RPI 2.
Behöver även välja vilken basstation/server jag ska koppla ihop mig med.
Här skriver jag på
inpstr2-type=tcpcli
inpstr2-path=10.0.0.200:50021
inptstr2-format=ubx
I konfigurationen ligger även den statiska koordinaten till basstationen. Det gör man på följande rader i konfigurationsfilen:
ant2-postype =llh # (0:llh,1:xyz,2:single,3:posfile,4:rinexhead,5:rtcm)
ant2-pos1 =35.87298031 # (deg|m)
ant2-pos2 =138.38966505 # (deg|m)
ant2-pos3 =1003.852 # (m|m)
Har även lagt till Kinematic som lösning på hur
pos1-posmode=kinematic

Startade upp min andra RPI tillsammans med GPS-modul och timing-antenna, fick snabbt en fix-position och nästan alla 9 satelliter hade en snr>40 direkt. Så riktigt bra förutsättningar för att det här ska fungera. Men som sagt i en annan projektdel har jag just nu lite problem med att jag får väldigt låga snr på basstationen som måste ordnas till först innan vi kan testa vidare med mer exakta koordinatorer. Testar med patch-antenn på rover-delen som fungerar alldeles utmärkt, men kommer senare byta ut denna.

Patch-antenn på gräsklipparen kommer INTE att fungera utan ett grundplan, därav kommer den inte att användas. Har däremot testat med min HELIX (mina inköpta antenner) och får riktigt bra och höga SNR-tal på gräsklipparen utan grundplan.

Nu är det mer hur bra kommunikation det är med det trådlösa nätet som är en begränsning. Har ordnat så att kommunikationen mot det trådlösa nätet också är tillfredsställande till den nivå jag behöver känns det som. Detta löstes enkelt genom en ny WiFi-adapter med extern antenn så fick jag genast mycket bättre täckning.

Ska även försöka optimera konfigurationen på delarna så att positionen blir mer korrekt.

Håller som bäst på att optimera in konfigurationen för basen - det finns en hel del inställningar. Jag håller på och prövar mig fram för jag behöver som sagt ha en ganska stabil och bra precision på GPS:en kontinuerligt. Kan jag hitta inställningar som fungerar tillfredställande har jag kommit en väldigt bra bit på vägen.

Har precis ökat upp frekvensen på rovern från 1Hz till 5Hz. Basstationen använder just nu 1Hz och tror jag behöver höja den till 5Hz också.

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
./str2str -in serial://ttyAMA0:115200#ubx -out tcpsvr://:50021 -c ../../../data/ubx_raw_5hz.cmd


Allt går så mycket snabbare med högre frekvens på datan som ska behandlas. Har just nu bara sett att det är jättestor sklillnad från 1 till 5hz på Rovern. Så antar att det kommer gå mycket snabbare nu när jag kör även 5hz på basstationen. Ska testa mer ikväll..

Börjar fundera på om det är mycket buggar i RTKRCV som jag använder mig av. Testat att använda mig av RTKNAVI och tagit in strömmen från Basstationen både som ROVER och BAS. Då jag enbart har 4 satelliter låsta får jag en FIX-position på några få sekunder. Jag räknar inte med några få sekunder när gräsklipparen har antennen på sig. Men mitt nästa test blir till att köra str2str från gräsklipparen med och ta in det i RTKNAVI för att se om det fungerar bättre.

https://www.u-blox.com/sites/default/fi ... Public.pdf
https://github.com/tomojitakasu/RTKLIB/issues/99
https://github.com/tomojitakasu/RTKLIB/issues/166

Delprojekt 21 - Göra en ny basstation och korrelera mot SWEPOS (pågående)
Har testat att koppla upp mot SWEPOS - fungerar bra.
Fått position snabbt - några sekunder för att få en korrekt placering, har lite mer utmaningar att få en korrekt AR-fix.
Hade en del problem med att få in basstationens position, men hade missat att ändra att den kom med i RTCM meddelandet.
Detta gör man i konfigurationen under
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
ant2-postype       =rtcm
utan denna kommer du aldrig få en Float eller Fix position.
När man kopplar upp sig mot SWEPOS måste man även skicka med GGA-meddeladet från NMEA och detta ställs in under
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
inpstr2-nmeareq    =single


Har fått en väldigt hög precision på BAS-stationen när den är korrelerad mot SWEPOS, men får inga höga AR-tal och väldigt få FIX-positioner.
Men när jag har FLOAT får jag extremt hög precision och det är +/-1.5cm när jag kör mot SWEPOS.

Få till höga AR-tal verkar svårt..

Försöker optimera konfigurationen för att få bra fix även vid rörelser och höga AR-tal. Har svårt att få till det här men försöker och försöker.

Fått följande koordinater med FLOAT:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
59.27153281 17.81710325 48.030

Fått följande koordinater med FIX:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
59.27153251 17.81710225 47.980



Anser mig KLAR med denna punkt.


Delprojekt 32 - Prototyp 1, tester (pågående)
Har utfört en hel del arbete som krävs för att kunna testa med prototyping, men jag tror jag är där nu - nästan i alla fall. Det jag kommer göra här är följande:
    Läsa av GPS-position
    Läsa av bäringen från en kompass
    Testa formler för att göra autopiloten
    Använda motorerna för att hålla bäringen
    Använda motorerna med PWM för att styra prototypen

Hur ska jag göra detta program?
Jag kommer använda mig av en fast GPS-koordinat. (variabel 1)
Denna programmeras statiskt i koden för denna prototyp.

Ekipaget kommer regelbundet uppdatera sin GPS-koordinat. (variabel 2)
Denna variabel kommer via en TCP-ström från RTKLIB. Detta är ett tidigare projekt jag gjort så då ska denna kod implementeras här.
Får bli via en funktions som anropas av variabeln antar jag.

När ekipaget startar känner den av åt vilket håll compassometern är riktad. (variabel 3)
Här är den enkla koden från HMC5883L som ska implementeras. Här anropas funktionen så att denna uppdateras kontinuerligt.

För att veta åt vilket håll ekipaget ska åka görs en beräkning av variabel 1 och variabel 2 - vi får då riktning. (variabel 4)
Här kommer jag använda mig av Geopy som får implementeras med en funktion.

Variabel 4 jämförs med variabel 3. Detta kommer sedan styra PWM för att svänga runt ekipaget åt rätt position mot variabel 4.


Hela tiden kollas hur långt det är mellan variabel 2 och variabel 1, när det är mindre än 50cm kvar stannar programmet som gör att motorerna stannar. (variabel 5)

Vad programmet gör på enkel svenska - detta för att underlätta kodandet


Delprojekt 33 - Styra PWM baserat på compassometer
Nu när jag har gjort i ordning programmet för att styra mot Norr ska jag göra ett där variabeln ändras allteftersom gräsklipparen förflyttar sig.

Delprojekt 34 - Beräkna strömåtgång för 2st Raspberry Pi

Delprojekt 35 - Starta basstationen automatiskt så fort den får ström(KLART)
Basstationen ska ju bara fungera för att strömma data till rovern så fort den är spänningssatt och startat så ska den starta sina tjänster automatiskt. Ingen ska behöva interagera med RPI om det inte är för annat än serviceunderhåll. För att få det att fungera tänker jag göra ett litet projekt av det också.

Behöver först kolla in i /boot/config.txt för att se att init_uart_baud=230400 eller högre. Så att modulerna kan kommunicera i den hastigheten.
Kompilera str2str med make som jag visat i tidigare projekttråd
Kopiera str2str till bin katalogen på PI som ska husera basstation
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo cp str2str /usr/local/bin/str2str

Sätt rättigheter så den blir körbar
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo chmod +x /usr/local/bin/str2str

Nu kan du starta str2str från vilken katalog som helst

För att starta basstation och testa så det fungerar:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
./str2str -in serial://ttyAMA0:230400#ubx -out tcpsvr://:50021 -c /home/pi/RTKLIB/data/ubx_raw_5hz.cmd

I den här filen har jag även valt att lägga till:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
!UBX CFG-MSG 3 10 0 1 0 0 0 0
!UBX CFG-MSG 3 16 0 1 0 0 0 0
!UBX CFG-MSG 1 32 0 1 0 0 0 0
!UBX CFG-MSG 1 34 0 1 0 0 0 0
@
!UBX CFG-MSG 3 10 0 0 0 0 0 0
!UBX CFG-MSG 3 16 0 0 0 0 0 0
!UBX CFG-MSG 1 32 0 0 0 0 0 0
!UBX CFG-MSG 1 34 0 0 0 0 0 0

För att få RAW-data ut direkt från GPS-modulen utan att behöva göra något mer.

Nu ska vi göra ett script som autostartar när vi startar pajen.. och sen service som görs automatiskt när pajen startas.
För skriptet kör vi ett vanligt shell skript och för servicen använder vi systemctl

Skapa en ny fil
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo nano str2str_start.sh


Var tvungen att göra om lite så jag för på följande sätt då jag inte fick .cmd filen att fungera som tänkt.

Skapar en tjänst som startar output av RAW-data med anrop av ett Pythonskript behöver då inte använda mig av någon .cmd fil i STR2STR outputen.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo nano rawgps.service


och i denna fil ligger följande:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
[Unit]
 Description=My Sample Service
 After=multi-user.target

 [Service]
 Type=idle
 ExecStart=/usr/bin/python /home/pi/raw-output.py

 [Install]
 WantedBy=multi-user.target


Flytta service filen till katalogen där systemd har tillgång till den:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo  mv rawgps.service /lib/systemd/system/

Gör filen körbar med 644 eller +x
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo chmod 644 /lib/systemd/system/rawgps.service

Aktivera att filen finns i katalogen
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo systemctl daemon-reload

Aktivera tjänsten
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo systemctl enable rawgps.service


Detta fungerar bra och när jag kör Str2STR fungerar det utmärkt. Ska även försöka implementera så att STR2STR med argument körs när vi startat Pajen.
Får göra en ny tjänst för enbart STR2STR som använder SYSTEMD och tänker mig följande:

Har lagt STR2STR som en tjänst i CRONTAB som startas efter en omstart av pajen.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
[Unit]
Description=Run STR2STR after RAW-output has been started

[Service]
Type=idle
ExecStart=/home/pi/str2str_start.sh

[Install]
 WantedBy=multi-user.target


Sedan har jag lagt till tjänsten precis som med RAW-outputen. Fungerar bra. Hade problem med att den inte puttade ut data i 5hz utan bara 1Hz.
Var tvungen att ha med path i shell-skriptet. Så det slutade så här:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
#!/bin/bash
path="/home/pi/RTKLIB/"

# start task to collect rover data at 5 Hz
str2str -in serial://ttyAMA0:230400#ubx -out tcpsvr://:50021 -out test%Y%m%d%h%M.ubx -c /home/pi/ubx_raw_5hz.cmd -c  /home/pi/ubx_raw_5hz.cmd &


Får se det här som klart också!

Delprojekt 35 - Göra ett grafiskt interface för att styra gräsklipparen från mobilen
Eftersom gräsklipparen har kontakt med vårt WiFI-nät tänker jag implementera styrning via smartphone i en mobil applikation på en webbsida för att inte blanda in mer radiosändare. Nu har vi två radiosändare, en för WIFI och en för GPS det får räcka tycker jag.

Min tanke är att använda mig av NGINX som jag har erfarenhet av sedan tidigare och tycker det är en bra plattform att bygga hemsidor på.
Börjar med att installera nginx på gräsklipparens paj
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo apt-get install nginx

Starta tjänsten nginx genom
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo service nginx start

Nu kan du testa från webläsare att gå till din ip du har på gräsklipparen och du kommer mötas en sida som säger att du inte är färdigkonfad än
Sen ska vi installer node.js som vi kan göra fantastiska saker med.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo apt-get install -y nodejs

För att sedan installera och komma åt GPIO-pinnarn med PWM från pajen behöver vi PIGPIO
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
sudo apt-get install pigpio

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
npm install pigpio

Vi behöver skapa en websocket så att vi kan kommunicera med pajen i realtid, därav valet av NodeJS där detta finns integrerat.
Då behöver vi installera socket.io som fungerar till Node.JS
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
npm install socket.io

NU ska vi ändra index filen till http servern - som standard lagras den här
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
/var/www/html/

Skapa en socket som du kan kommunicera med som en JS fil.
Starta sedan node med filen du skapade och testa.

Varför uppfinna hjulet när det redan finns, hittade Zerobot som hade precis vad jag behövde. Ett touchintrerface till en webbrowser.
Så skönt så fortsätter på den inslagna vägen från Zerobot för att göra ett grafiskt interface för att styra rovern..

Det är ju en del kod som ska till och har fått det att fungera bra. Ska ändra en del så att den blir anpassad till min gräsklippare.

Fortsättning följer..

Delprojekt 36 - Köra ett testmönster som en fyrkant med gräsklipparen för att samla in data till GPSEN

Förklaring kommer senare här är koden:

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BOARD)

#Har två motorer och det finns tre ingångar på L298N för att styra
#1A och 1B är + och - och 1E är Enable, utan Enable så händer inget
#2A och 2b är + och - och 2E är Enable för motor 2
#När GPIO utgångarna har HIGH skickas en signal och LOW ingen signal, är både 1A och 1B samma HIGH eller LOW händer inget och 1E också är HIGH eller LOW
Motor1A = 16
Motor1B = 18
Motor1E = 32
Motor2A = 21
Motor2B = 23
Motor2E = 33

GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1B,GPIO.OUT)
GPIO.setup(Motor1E,GPIO.OUT)
GPIO.setup(Motor2A,GPIO.OUT)
GPIO.setup(Motor2B,GPIO.OUT)
GPIO.setup(Motor2E,GPIO.OUT)

print "Turning motor on"

GPIO.output(Motor1A,GPIO.LOW)
GPIO.output(Motor1B,GPIO.HIGH)
GPIO.output(Motor1E,GPIO.HIGH)
GPIO.output(Motor2A,GPIO.HIGH)
GPIO.output(Motor2B,GPIO.LOW)
GPIO.output(Motor2E,GPIO.HIGH)

sleep(5)

GPIO.output(Motor1A,GPIO.HIGH)
GPIO.output(Motor1B,GPIO.LOW)
GPIO.output(Motor1E,GPIO.HIGH)
GPIO.output(Motor2A,GPIO.HIGH)
GPIO.output(Motor2B,GPIO.LOW)
GPIO.output(Motor2E,GPIO.HIGH)

sleep(1.25)

GPIO.output(Motor1A,GPIO.LOW)
GPIO.output(Motor1B,GPIO.HIGH)
GPIO.output(Motor1E,GPIO.HIGH)
GPIO.output(Motor2A,GPIO.HIGH)
GPIO.output(Motor2B,GPIO.LOW)
GPIO.output(Motor2E,GPIO.HIGH)

sleep(5)
GPIO.output(Motor1A,GPIO.HIGH)
GPIO.output(Motor1B,GPIO.LOW)
GPIO.output(Motor1E,GPIO.HIGH)
GPIO.output(Motor2A,GPIO.HIGH)
GPIO.output(Motor2B,GPIO.LOW)
GPIO.output(Motor2E,GPIO.HIGH)

sleep(1.25)
GPIO.output(Motor1A,GPIO.LOW)
GPIO.output(Motor1B,GPIO.HIGH)
GPIO.output(Motor1E,GPIO.HIGH)
GPIO.output(Motor2A,GPIO.HIGH)
GPIO.output(Motor2B,GPIO.LOW)
GPIO.output(Motor2E,GPIO.HIGH)

sleep(5)
GPIO.output(Motor1A,GPIO.HIGH)
GPIO.output(Motor1B,GPIO.LOW)
GPIO.output(Motor1E,GPIO.HIGH)
GPIO.output(Motor2A,GPIO.HIGH)
GPIO.output(Motor2B,GPIO.LOW)
GPIO.output(Motor2E,GPIO.HIGH)

sleep(1.25)

GPIO.output(Motor1A,GPIO.LOW)
GPIO.output(Motor1B,GPIO.HIGH)
GPIO.output(Motor1E,GPIO.HIGH)
GPIO.output(Motor2A,GPIO.HIGH)
GPIO.output(Motor2B,GPIO.LOW)
GPIO.output(Motor2E,GPIO.HIGH)

sleep(5)

print "Stopping motor"
GPIO.output(Motor1E,GPIO.LOW)
GPIO.output(Motor2E,GPIO.LOW)

GPIO.cleanup()


Delprojekt 36 - Markera ut en slinga med GPS-koordinator där gräsklipparen får röra sig
Markera waypoints och göra tracks

Latitude coordinate precision by the actual cartographic scale they purport:

decimal
places degrees distance
------- ------- --------
0 1 111 km
1 0.1 11.1 km
2 0.01 1.11 km
3 0.001 111 m
4 0.0001 11.1 m
5 0.00001 1.11 m
6 0.000001 0.111 m
7 0.0000001 1.11 cm
8 0.00000001 1.11 mm

http://www.gpsvisualizer.com/tutorials/waypoints.html


Logga in för att visa de filer som bifogats till detta inlägg.


Senast redigerad av Henke_83 12.18 2018-10-24, redigerad totalt 129 gånger.

Upp
 Profil  
 
InläggPostat: 12.37 2015-09-09 

Blev medlem: 08.17 2007-10-20
Inlägg: 173
Ort: Ekerö
Lasp skrev:
Mycket bra och tydlig projektbeskrivning.
Jag gillar din åtgärdsplan på din hemsida, rätt tänkt och gjort.

Fråga, kommer cylindern att rotera med hjälp av framhjulen eller kommer det att vara en separat cylinderdrivning? Kommer cylindern att lyftas upp vid tomkörning och riktningsförändring? :humm:


Lasp: Tack för frågorna, jag har updaterat innehållet vad gäller gräsklipparen och även motorerna. Vid riktningsförändring kommer cylindern klippa och min tanke jag har är att om det ska ske en ändring i riktning så ska det ena hjulet backa eller stå still och det andra gå framåt. Så det kommer i princip aldrig vara tomkörning utan det kommer vara klippning konstant så länge den rör på sig.


Upp
 Profil  
 
InläggPostat: 14.47 2015-09-09 
Användarvisningsbild

Blev medlem: 07.49 2014-08-12
Inlägg: 2386
Ort: Örebro
Kul projekt :tumupp:


Upp
 Profil  
 
InläggPostat: 16.14 2015-09-09 
Användarvisningsbild

Blev medlem: 12.26 2005-02-04
Inlägg: 5455
Ort: 127.0.0.1
Ska du knuffa en cylindergräsklippare framåt med två motorer på 24Watt? Eller har cylindergräsklipparen en egen motor inbyggt?

Du "biter" över ganska mycket i projektet. Kanske är det bättre att välja en färdig autopilot och sen modifiera koden för gräsklippare.

Om du väljer APM 2.6 (firmware rover) så kan du dra nytta av 10'000 utveckling / test timmar och i alla fall ha mer än tillräckligt med jobb för att anpassa koden till "gräsklipper med två motorer". Sen kommer andra att kunna dra nytta av det jobb du gör.

http://www.ebay.com/itm/161795601910


Upp
 Profil  
 
InläggPostat: 16.38 2015-09-09 

Blev medlem: 00.48 2009-01-18
Inlägg: 7622
Ort: Alvesta, Småland
Låter som du har något klena motorer i testet.
För att ta exempel så är mina klippmotorer på 200watt styck på min klippare. En rotorklippare drar väl ganska mycket mera eller har jag fel?

Har för mig drivmotorerna är på nåt liknande men låter det vara osagt.

Annars sjukt skoj projekt. Jag skulle också nog titta på APM men det är ju dock inte lika skoj som att bygga själv :) Kör på! Testar man inte lär man sig inte.


Upp
 Profil  
 
InläggPostat: 17.27 2015-09-09 
EF Sponsor
Användarvisningsbild

Blev medlem: 09.01 2007-03-09
Inlägg: 5882
Ort: Borlänge
Intressant projekt.

Tycker också att klipp motorn verkar vara i svagaste laget. Det blir ju tyngre att klippa gräs än att inte göra det så att säga.
Kul ideé med cylindergräsklippare, länge sedan man jobbade med en sådan.
Hur många motorer ska du ha, tre?? två för framåtdriften och en för klippningen?


Upp
 Profil  
 
InläggPostat: 18.03 2015-09-09 

Blev medlem: 08.17 2007-10-20
Inlägg: 173
Ort: Ekerö
netrunner
danielr112
orvar

Svar till er.

Intressant om motorerna! :)
Som skrivits tidigare kommer jag använda mig utav 2 motorer - 1 till varje hjul.
Jag har gjort en beräkning på en hemsida hur tungt ekipaget är och hur mycket max lutning är. Fått fram en MAX-TORQUE som motorerna ska klara och jag är långt över den tillsammans med motorerna. Där beräknar man kapaciteten på 65% av vad den ska klarar.

Jag har även räknat med friktion vid klippning.

Men jag säger inte emot er att motorerna är för svaga - det blir intressant att se när jag monterat dessa om ekipaget kommer röra sig överhuvudtaget.

Vad gäller autopiloten så är det mer för att förstå och lära sig hur den skulle kunna fungera. Mycket roligare att göra egen än att använda befintlig av den delen av projektet. ;) Om jag lyckas vill säga.


Upp
 Profil  
 
InläggPostat: 18.25 2015-09-09 
EF Sponsor
Användarvisningsbild

Blev medlem: 09.01 2007-03-09
Inlägg: 5882
Ort: Borlänge
Om du använder dig av 2 motorer så betyder det att så länge klipparen går rakt fram så så driver de cylindern lika, men om du ska svänga så får den motorn som går fortast ta all last.
Om den då inte orkar med klippcylindern så kanske det inte svänger så värst mycket, för du ska väl ha nån slags frihjulskoppling.


Upp
 Profil  
 
InläggPostat: 19.26 2015-09-09 

Blev medlem: 00.48 2009-01-18
Inlägg: 7622
Ort: Alvesta, Småland
Hur bred är klippen? Jag tänker mig en sådan puttklippare. Dom är tröga att driva i tomme. Har dock inga belägg för hur mycket kraft som faktiskt går åt.


Upp
 Profil  
 
InläggPostat: 21.59 2015-09-09 
Användarvisningsbild

Blev medlem: 15.10 2003-12-08
Inlägg: 2343
Ort: Vänersborg
Behövs det inte en fastmonterad referenspunkt och sedan kommunikation mellan referensen och rovern för att få den precisionen med RTK? (nu var det iofs. ett tag sedan jag kollade på det där)


Upp
 Profil  
 
InläggPostat: 21.30 2015-09-10 

Blev medlem: 20.55 2009-06-15
Inlägg: 98
Ort: Värmland
Jag vill också ha en gräsklippare som navigerar med koordinater och ej med elledning. Gör en klippare åt mig också!


Upp
 Profil  
 
InläggPostat: 18.05 2015-09-15 

Blev medlem: 08.17 2007-10-20
Inlägg: 173
Ort: Ekerö
Svar på vissa frågor ovan..

Klippen är 38 cm bred. Jag räknar med att gräsmattan blir ca 400m2 av trädgården, inte jättestort.
Gjorde lite tester i helgen hur tung den är när cylindern går i men det känns inte helt orimligt att dessa två motorer kommer fixa detta.
Frikopplar gör gräsklipparen när den går bakåt, så ett alternativ vid lägesförändring är att den får backa om inte en motor orka driva klippen.

Jag har tänkt använda mig av RTK och en basstation så det kommer krävas en GPS-mottagare till. Håller på och försöker se om Ublox NEO-7M verkligen kan spotta ut den data jag behöver till RTKLIB, verkar inte så. Läst på diverse forum om detta och har hållt på de senaste dagarna med detta...

Om jag får detta att fungera som jag tänkt kan det bli riktigt bra.. tror jag..


Upp
 Profil  
 
InläggPostat: 20.23 2015-09-15 
Användarvisningsbild

Blev medlem: 07.49 2014-08-12
Inlägg: 2386
Ort: Örebro
Då kan den backa om batteriet blir för dåligt och åka och ladda...

Hur fort behöver cylinderklipparen rotera för att klippa bra?


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 101 inlägg ]  Gå till sida 1, 2, 3, 4, 5 ... 7  Nästa

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: farskost, Frippe, HenkiBoy, HUGGBÄVERN, Svantinio, X-IL och 10 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010