Ny instrumentpanel
Nya utsikten från förarplatsen
Ratt
Det var väldigt svårt att få plats med allt jag ville ha i form av batteriövervakning, nya displayer, reglage mm med den gamla instrumentpanelen. En av anledningarna var att Bayliner valt att placera en stor ratt mitt i vägen.
Det finns fortfarande en ratt, den är något mindre, om man missat den så sitter den nere till vänster om bildskärmen på bilden. Det går numera även att styra båten via en slider på touch skärmen alternativt via autopilot som följer en GPS rutt eller via motorreglagen till höger.
Många hävdar säkert att man inte får rätta känslan när man styr båten med den lilla fåniga ratten och så är det säkert men man ska ha i åtanke att man nog inte riktigt får den "rätta" känslan med en stor ratt heller med tanke på att båten numera har en marschfart på 4-5kn i stället för som tidigare 20-25kn. Det är inte riktigt så att man vrider på ratten och känner av en momentan kursändring så att folk riskerar att ramla över bord om man säger så.
De gula lysdioderna ovanför "nya ratten" signalerar när man gör en roderförändring. Kanske lite onödig info när man själv styr båten via ratten eller slidern men lite mer informativt när man använder autopiloten som beskrivs längre ner på denna sida. Den gröna lysdioden visar att det finns spänning till styr-reläerna. Något av en nostalgitripp att räkna ut hur stora motstånd som behövdes till lysdioderna och damma av den gamla lödkolven.
Display
Den stora touch-skärmen i mitten hittade jag hos Ali Express. Den har en ljusstyrka på 1000 cd/m² (aka NITS) vilket nog är att betrakta som ett minimikrav eftersom vi vanligtvis bara är ute med båten när solen skiner och då vill man ju åka "nercabbat". Tycker nog att GPS:en är aningen ljusstarkare ändå men jag har läst att de normalt ligger en bit över 1000 cd/m² så det stämmer antagligen.
Displayen är konstruerad för att sitta utomhus, är även vattentät och med tanke på dess "smidighet" känner jag mig övertygad om att den dessutom skulle göra ett bra arbete som slägga. Råkar man dra en järnbalk i glaset på denna display är det nog mest skador på balken man ska oroa sig för.
Jag är medveten att den blå färgen på septi mätaren i bilden kanske inte på ett helt korrekt sett återger färgen på innehållet i den tanken, testade med ljusbrun men det såg bättre ut med blått, vi får väl kalla det konstnärlig frihet.
Dator
Displayen är inkopplad till en Raspberry PI med några extra IO kort (ADC) för att läsa av analoga givare, NMEA0183 kommunikation från GPS:en, samt reläer för att styra rodret via det nya elservot.
Bilden ovan är från när jag labbade på skrivbordet hemma (inte som den är inkopplad i båten). Den monterades sedan i en eldosa modell större med en liten tyst fläkt för att få lite luftgenomströmning. Dosan (längst ner i mitten av bilden nedan) placerades sedan bakom instrumentpanelen som går att fälla upp. Bilden nedan är från när jag höll på och skruva ihop det hela hemma i vintras:
Raspberry PI:en kör en egenutvecklad programvara som:
- Övervakar batterierna via deras BMS:er
- Räknar ut hur långt man kan köra i nuvarande hastighet på det som finns kvar i batterierna
- Räknar även ut hur länge man kan köra på det som finns kvar
- Kontrollerar hur rodret ska styras och visar i vilken riktning det pekar
- Visar hur mycket utrymme det finns kvar i septi-tanken
- Avkodar NMEA koderna från GPS:en
- Och sist men inte minst en autopilot när man tröttnat på att styra själv och hellre vill njuta av omgivningarna.
BMS
Daly har ju sin egen app man kan använda för övervakning av BMS:erna. Denna är hyfsat bra men det finns en del man stör sig på. SOC-beräkning är kanske det man stör sig mest på, den tycks bygga på hur mycket ström som går in och ut i batteriet vilket hade varit bra, om mätningen fungerat.
Ström-mätningen i BMS:erna funkar bra vid hög ström (när man kör eller laddar via elnätet). Däremot funkar den rent ut sagt uselt vid låg ström. Så laddar man sakta ur batterierna under en längre tid som ex vid vinterförvaring med viss mindre ström-krävande utrustning påslagen ser SOC:en ut att vara högre än den egentligen är och laddas batterierna sakta via solpanelerna gäller det omvända.
Detta borde ju inte vara så svårt att göra bättre tänkte jag. Men det finns vissa utmaningar med SOC-beräkning. Jag utgick från spänningen i stället för att mäta hur mycket energi som går in och ut ur batteriet och använde tabellen nedan samt räknade ut de värden som kommer mellan de i tabellen. Denna metod fungerar bra när batterierna är olastade och inte laddas.
Men helt enkelt är det inte. Den första nöten att knäcka är om 58,4V eller 54,4V ska rapporteras som 100%. Jag valde att 54,4V är 100% men lät skalan tillåta upp till 110% för att täcka in den högre spänningen vid laddning.
Nästa problem är att spänningen sjunker en del vid hög last. Detta är extra märkbart i mitten av laddkurvan där ett spänningsfall på 0,1V kan motsvara en skillnad i SOC på 10%
Jag räknade ut en funktion som kompenserar för det spänningsfall den interna resistansen i batterierna orsakar vid höga strömmar men det funkade inte så värst vidare bra. Antingen har de uppgett för låg inre resistans eller så räknade jag fel eller möjligen både och, så jag håller på och provar mig fram till rätt värde på konstanten som strömmen ska multipliceras med för att få lagom SOC-kompensation, så att man får samma momentan-värde oavsett om man står still eller "flyger fram" i dryga 6 knop 😀
En annan sak som också är lite störande med Daly appen är att man bara kan titta på en BMS åt gången och att man måste skriva in pin-koden i tid och otid om man vill ha fram info per cell. Så jag fixade en sammanställning där man räknar ihop båda batterierna och även jämför förbrukning mot hastighet som hämtas från GPS:en för att kunna räkna ut hur långt man kan åka på det som finns kvar i batterierna under förutsättning att man håller nuvarande hastighet.
RSOC och RCap i bilden ovan är de värden jag läser ut från BMS:erna. Det som visas i kolumnen tillhöger om batterimätaren är de jag räknat ut själv. Framtiden får väl utvisa vilka som stämmer bäst.
Klickar man på "i" knapparna ovanför respektive batteri får man även fram detaljer för varje enskild cell.
Daly BMS:erna går att läsa av på många olika sätt. RS485 är en vanlig metod och jag har införskaffat några extra USB RS485 adaptrar för detta men än så länge har jag använt Bluetooth vilket fungerar rätt bra och man slipper ju några kablar i alla fall.
Roderstyrning
I och med att ratten ersattes av en potentiometer behövdes ju även en annan metod för positionering av rodret. Att få bort den kraftiga styrvajern från båten var inte det enklaste. Jag har viss förståelse för att man inte vill lämna båten, lite den känslan jag har varje gång jag åker därifrån faktiskt men efter att jag tagit fram vinkelslipen för att visa vem som bestämmer gav vajern till slut upp sina försök att få stanna kvar.
Elservot (tror den korrekta benämningen är ställdon) på bilden är enligt tillverkaren vattentät och klarar 300N med 15cm slaglängd. Det har även en inbyggd positionsgivare vilket passade bra för ändamålet. 300N var säkert att ta i eftersom det inte kräver någon större kraft att vrida på det lilla rodret.
Ställdonet fungerar så att man kopplar in 12V med olika polaritet beroende på om axeln ska röra sig utåt eller inåt. Sedan finns det en inbyggd potentiometer på 10kΩ som returnerar positionen.
Positioneringen löses via två reläer där båda har NC kopplat till GND och NO kopplat till +12V så kan man enkelt styra åt endera hållet och skulle man av misstag råka slå på båda reläerna samtidigt blir det inte kortslutning utan då händer ingenting eftersom man får +12V på båda ledningarna till styrdonet.
Den inbyggda potentiometern är kopplad till en av ADC kanalerna, så datorn styr genom att slå på ena relät och mäta spänningen på ADC kanalen tills man når önskad värde.
Autopilot
Jag fick tips av en kollega om en programvara som heter OpenPlotter som har en annan programvara kallad pypilot integrerad. Dessa programvaror stödjer en stor mängd "färdiga" autopiloter. Jag kollade först på dessa programvaror men kom fram till att det nog skulle vara mer jobb att försöka få min hemmasnickrade lösning att fungera ihop med dessa än att skriva ihop en egen autopilot programvara för det är ju ändå bara den delen jag egentligen är intresserad av.
I detta fallet har jag ju redan all hårdvara som behövs för en fungerande autopilot: GPS, dator, elservo och att fixa något eget är ju alltid mycket roligare och oftast även mycket billigare än att köpa något färdigt.
Så jag valde att skriva en egen autopilot programvara i stället och autopilot-delen av programvaran är i dagsläget endast 68 rader Python kod. Då har jag iofs inte heller slösat massa rader på en massa kommentarer som döljer koden 😉
Det var nog kanske tur att jag var själv på båten första provturen som blev 18M mellan vinterförvaring och båtplats. Visst hittade båten kursen till slut men man kunde inte låta bli att dra paralleller till tiderna när Ingemar Stenmark gav sig ut i slalompisterna och hade någon sett mig hade de nog ifrågasatt sjönykterheten.
Problemet var att jag hade haft lite otur när jag tänkte. Jag hade skrivit algoritmen så att om båten hamnat ur kurs så ändrade jag rodret stegvis tills båten var i kurs igen, för jag tänkte att det är ju så man gör när man styr själv. Problemet är bara att det vid närmare eftertanke faktiskt inte är så man gör när man styr själv.
När jag ändrat algoritmen till att istället bara öka roderutslaget tills kursavvikelssen börjar minska och sedan lämna det där tills kursen är korrekt blev allt genast mycket bättre. Sista tillägget jag gjorde var att om kursförändringen (förbättringen) mellan de senaste två mätningarna är större än det kvarvarande kursfelet så görs en mindre roderförändring åt motsatt håll.
Efter de tilläggen följer båten en utplottad GPS kurs som en trogen hund! Åtminstone i vindstilla, medvind och sid-vind. I motvind kan det fortfarande bli lite vingligt men ska sanningen fram kan det bli det även när man styr manuellt.
Det finns ju två ganska väl kända problem med denna båttyp (läs båtar utan köl). Det ena är ormandet i låga hastigheter, detta löste sig som jag skrev om tidigare i och med el-konverteringen. Det andra problemet är vindkänsligheten och den är svår att komma ifrån men jag tycker ändå att autopiloten funkar hyfsat även i motvind och jag ska skruva lite till på parametrarna så blir det nog ännu bättre även i den riktningen.
En annan fundering jag har är att försöka få fatt i ePropulsions specifikationer för protokollet som används mellan dual-controllern och styrenheterna. Det sägs att det är någon utbyggnad av NMEA 2000 protokollet som används. Detta borde innebära att man kan koppla in även datorn på den bussen och då även kunna använda motorerna för att styra.
Det känns iofs tryggt att det i dagsläget är två helt separata system, så att skulle datorn gå sönder så att man inte längre kan använda rodret för styrning går det alltid att styra med motorerna i stället (och dra ut sprinten till roderstyrningen om den hamnat i ett dåligt läge) men så länge man kan koppla bort kopplingen mellan datorn och motorer genom att dra ur en kontakt eller så borde det vara lugnt att koppla ihop lite i alla fall.
Programvaran
Programvaran är skriven i Python med Asyncio eftersom man måste läsa av en massa givare, seriedata från GPS, vänta på Bluetooth data från BMS:er och annat tidsödande och då vill man ju inte hindra att andra delar av koden körs medan man väntar. Den är även ganska specifik för just den hårvara jag har men jag får se om jag lägger ut den på GitHub eller något likande framöver ifall någon vill ha den för idéer.
Har använt Flet för GUI:t, väldigt smidigt att använda, väldokumenterat och ger även möjlighet att presentera applikationen både som lokal app och som en web-sida. Det kräver tyvärr 64-bitars OS så det går åt lite mera minne vilket kan vara en trång sektor på Raspberry Pi. Skulle nog rekommendera minst 2GB.
Koden behöver nog debuggas och framför allt testköras mera men det är ju det man har sommaren till! Det behövs kanske även läggas till en kommentar eller två i koden för att göra den något mera begriplig även om det bär lite emot, för om det var jobbigt att skriva så ska det ju som bekant även vara jobbigt att läsa 😉
Tycker jag att koden blir bra nog att dela med mig av framöver så lägger jag till en länk var man kan hitta den här nedan.
Kommentarer
Skicka en kommentar