Arduino

By Saku, OH1KH

Trackuino E-bike


 
Arduino on kiva mikrokontrolleri joka ei edes ole hinnalla pilattu.
Voi miksi näitä ei ollut 80-luvulla, vaan kaikki piti itse haalia kokoon. Millaisia ohjauksia olisikaan silloin saanut aikaan nuoruuden innolla puuhastellessa?
 
APRS-seuranta vaatii paitsi rigin, myös träkkerin joka hoitaa GPS:n paikkatiedon 1200baudin pakettiradioformaattiin ja ohjaa rigin lähetystä.
Niitä saa valmiina, kuten niin monta muutakin asiaa nykyään. Mutta voisiko sellaisen rakentaa edes hieman enemmän kotikutoisesti?
 
Toinen asia jota ei ollut 80-luvulla on Google. Silloin vain tongittiin erillaisia lehtiä ja datakirjoja ja koetettiin niistä saada jotain irti. Nyt on helpompaa. Vain sopivat sanat Googleen ja alta sekunnin on valinnanvaraa mistä alkaa tiedonhakunsa.
 
Voisiko Arduinoa käyttää APRS-träkkerinä? No, näämmä voi. Ovat tehneet siitä jenkeissä ”Ilmarien” träkkereitä. Esimerkiksi atlannin ylittäneessä pallossa oli tällainen systeemi. Ja mikä parasta; Tiedot ja ohjelmisto ovat vapaasti saatavissa ja muokattavissa.
 
Siis tuumasta toimeen...

Jos he saivat sen onnistumaan pallossaan niin voisin koettaa sitä sähköpolkupyörään, johon olin ajatellut rakentaa Arduinolla jännitteen ja virrankulutuksen mittaukset. Mittaushomma on niin yksinkertainen että ohjelmamuistissa jää runsaasti tilaa johon tuon APRS-träkkerin ohjelmaosuuden voisi upottaa.
Loppupeleissä kuitenkin kävi niin, että träkkerin ohjelmaan upotettiin nuo omat mittaukset!

Ensin vaan piti saada kovopuoli kuntoon, jotta ohjelmaa voisi alkaa hiomaan.
 
Arduinossa on suoraan 5 kappaletta A/D sisäänmenoja joten se osaa mitata akkujännitettä suoraan kunhan pyörän käyttämä 24V vain skaalataan Arduinon ymmärtämälle 0-5V alueelle sopivalla vastusjaolla.


 
Virranmittauksen voisi järjestää shunttivastuksella mitaten sen yli tapahtuvaa jännitehäviötä. Jännitehäviö tulisi olla kuitenkin melko suuri jotta tuolla samalla skaalalla siitä saataisiin luettava arvo.

Onneksi nykyajan rakentajilla tämäkin on niin sietämättömän helppoa. Robotinrakentajien nettikaupasta löytyy näppärä, hieman sokerinpalaa isompi piirilevy, johon on istutettu pieni 8-koipinen pintaliitoskomponentti. Komponentin läpi saa laittaa 30A jatkuvaa virtaa ja jopa 100A muutaman osasekunnin ajan. Aivan uskomatonta!
Luulisi että mikropiirin jalat palavat poikki jo alle 10A virralla, mutta ei.
Kun virta kulkee piirin läpi on vastus vain joitain milliohmeja. Jännitehäviötä, jonka seurauksena siis myös lämpöhäviötä, ei juuri synny. Piirissä mitataankin läpikulkevan virran voimakkuutta sen aiheuttamasta magneettikentästä hall-efektin avulla. Näin saadaan lineaarinen ulostulo 0,5 – 5V vastaten 0 -30A virtaa. Ja sehän sopii Ardunion A/D sisäänmenoon suoraan.

 

 

 
GPS tarvitaan myös. Partco myy poistomyyntinä gps-moduulia kympin hinnalla. Tässä moduulissa liikennöinti on ttl-tasoista 9600baudin NMEA-sanomaa joka sopii hyvin Arduinolla suoraan luetttavaksi. Vielä ehkä hieman halvemman moduulin saisi kiinasta jossa dx.com:illa oli DIY-osastolla vastaavaa hieman alle kympin. Kotiin kuljetettuna.

 
 
Näyttö josta voltit ampeerit sun muut luetaan tarvitaan myös. Paeae.com myy 2x15 merkin LCD-näyttöä joka sopii hyvin tarkoitukseen. Näyttöä voisi ohjata Arduinolla suoraan, mutta se vaatisi useiden I/O linjojen käyttöä pelkästään näytölle.


Samasta kaupasta saa näyttöön sopivan SerialLCD-moduulin jolla näyttöä voi ohjata 9600baudin sarjaliikenteellä ja näin tarvitaan vain yksi I/Olinja Arduinosta tähän tarkoitukseen.

 
 
Radioksi trackuinoprojeti on valinnut Radiometrixin modulin. Siinä on kuitenkin vain 300mW teho ja lähes samoihin hintoihin saa Baofengin UV3-R käsikapulan dx.com:ista. Kapulassa on sekä 2M että 70cm ja vielä lisäksi BC-radio jota voisi kuunnella pyöräillessä. Tehoa 2W ja kotelointi antenneineen on tietenkin kunnossa.
Jos säädetään radio kuuntelemaan taatusti tyhjää taajuutta VHF-alueella ja lähettämään 144.800MHz:llä niin BC-radio voidaan laittaa päälle ja kuunnella sitä. Aina kun lähetin menee päälle palautuu kapula hetkeksi VHF-kuunteluun, mutta jos mitään ei kuulu se siirtyy taas BC-radion puolelle.
 
Ja kun polkupyörästä on kyse niin olisi kiva jos Arduino osaisi sytyttää valot silloin kun niitä tarvitaan. Näkyvyyttä haetaan 6 kappaleella superkirkkaita valkoisia ledejä ja hämäräkytkentään laitetaan LDR-vastus yhteen Arduinon analogisiäänmenoon jolloin kytkentäkohtaa voidaan säätää ohjelmallisesti.

BC-radion kuuntelua varten läpikytkentä radion 4-osaisesta plugista 3,5 stereojakkiin johon voidaan liittää tavalliset nappikuulokkeet.
 
Lopuksi kotelointi, ja sitten softan kimppuun.




 

Ohjelman pohjana on käytetty trackuino-projektin softaversiota 1.3 johon on lisätty tarpeelliset osat:
 
Partcon Fastrax-GPS ei lähetä ollenkaan nmea-lausetta RMC. Positio on kaivettava lauseesta GGA ja nopeus ja suunta lauseesta VTG [gps.cpp]
APRS-paketin lähetys, paitsi aikaperiodin mukaisesti, myös silloin kun lähdetään liikkeelle, pysähdytään tai kurssi muuttuu valittua astemäärää enemmän. Poikkeuslähetyksille myös säädettävä aikaraja jota tiheämpään niitä ei lähetetä.
Esimerkiksi paketti joka 2 minutin kuluttua ja poikkeuspaketteja ei tiheämpään kuin 20sek välein. [course.cpp, gps.cpp]
Ajetun matkan mittaus saatujen GPS-koordinaattien avulla laskettuna [course.cpp]
Valoisuuden mukaan syttyvät ajovalot [light.cpp]
Jännite-, virta-, ampeeritunti- ja valoisuusmittaus [sensors.cpp]
APRS-pakettiformaatin valinta: pelkkä tyhjä paketti, paketti positiolla ja paketti positiolla ja lisäinfolla (telemetria) [aprs.cpp]
LCD-näytön ohjaus [lcd.cpp]
paljon debuggausta helpottavia rivejä [config.cpp + muut]
 
Tämän hetken koodissa on paljon turhaa suttua jotka ovat sinne jääneet [tyypillistä], mutta nyt on päästy jo kohtuullisesti toimivaan versioon. Vaikka varsinaista versiointinumeroa ei näy, niin menossa on kahdeksannen version alaversio.
 

Näytössä vuorotellaan 15sek välein yläriviä jossa voi olla päivä ja aika [PPKKVV ttmmss] tai


koordinaatit APRS-formaatissa. Alarivissä on aina Nopeus(kilometriä tunnissa), ajettu matka(km), akkujännite(volttia), kuormitusvirta(ampeeria) ja kulutettu virtamäärä (ampeerituntia).
 Rakentelussa esiin nousseita ongelmia:
 
1200 baudin paketin generointi 1200 ja 2200Hz äänien muodostuksineen vie lähes kaiken Arduinon tehon. Käy helposti niin että paketti kuulostaa lähtevän ihan ok, mutta APRS-vastaanottimet eivät ymmärrä siitä mitään koska bitit sekoilevat Arduinon hyytyessä:
Hyytyminen johtuu siitä että Arduino hoitaa muitakin hommia silloin kun sen pitäisi keskittyä paketin äänien muodostukseen.
Koska alkuperäiseen projektiin on lisätty LCD-näyttö, jonka ohjaukseen tarvitaan erillinen sarjaportti (ohjelmapalikka) vie se prosessointitehoa melkoisen paljon aiheuttamalla keskeytyksiä ohjelmakiertoon.
GPS tunkee NMEA-lauseitaan koko ajan Arduinolle, vaikka niitä ei tarvittaisi sillä hetkellä kun paketin ääniä kehitetään rigiin.

Ratkaisuna LCD-ohjaus siirrettiin samaan sarjaporttiin kuin GPS (josta myös Arduinon ohjelmointi tehdään).
GPS tarvitsee vain sisäänmenevää linjaa, ja LCD taas tarvitsee vain Arduinosta ulospäin lähtevää linjaa. Sopivat siis hyvin samaan sarjaporttiin ja lisäohjelmalla tehty toinen sarjaportti voidaan jättää kokonaan pois.
Molemmille pitää järjestää kytkin jolla ne saa irti ohjelman latauksen ajaksi koska samaa porttia siis käytetään myös latausporttina.

GPS:n intoa tunkea dataa myös radiopaketin lähetyksen aikana koetettiin ensin hillitä kovoratkaisulla jossa sama ohjaus joka ohjaa PTT:tä ohjaa myös transistoria joka oikosulkee sarjavastuksella suojatun GPS:n datalinjan lähetyksen ajaksi.
Myöhemmin lisättiin softaratkaisu, joka yksinkin riittäisi. Eli sarjaportti suljetaan ohjelmallisesti paketin lähetyksen ajaksi. Tällöin ei GPS-dataa vastaanoteta eikä tietenkään näyttökään päivity ulosmenevän linjan kautta, mutta ei se muutenkaan päivittyisi paketin lähetyksen aikana.
Baofeng kaipaisi modifikaatioita joilla saataisi PTT-linjan häiriöherkkyys RF:lle eliminoitua. Nyt lähetin jää ajoittain päälle riippuen siitä millaisen mutkan kautta kaapeli rigiin menee.
Baofengin kytkentäkaavan mukaan PTT-linjassa ei ole RF-suodatusta, eikä kunnollista ylösvetovastusta.
Ylösvetoa voi hieman helpottaa, samalla saaden TX-merkkivalon, laittamalla Ardun päässä punaisen ledin +5V:iin ja siitä sarjavastuksella PTT-transistorille.
Kun lediin jää noin 1,4V niin Baofeng ei saa sisäänsä ihan täyttä viittä volttia joka tapahtuisi jos käytettäisi pelkkää ylösvetoa PTT-transistorin kollektoriin.
Baofengin käyttöjännitehän on 3,8V.
Tietenkin voitaisiin vetää kollektori vastuksella Arduinosta löytyvään +3,3V sähköön, mutta silloin menetetään TX-merkkivalo.
Summa summarum: Baofeng pitäisi avata ja laittaa sinne sisäinen ylösveto ja LC-piiri RF:n plokkaamiseksi pistokeen kaikista kolmesta linjasta (mic,ptt,ear).
Baofengin ohjelmaan taas pitäisi saada korjaus viiveeseen joka palauttaa BC-radion takaisin lähetyksen (tai bandilla kuullun VHF-signaalin) jälkeen nopeammin. Aika saisi olla reilusti alle sekunnin.


 
pyörään pitäisi saada toinen akkukotelo (takahäkin toiselle puolelle) jonne voisi sijoittaa sekä Arduinon että Baofengin. Vain LCD-näyttö ja ajovaloledit tulisivat sarviin. Tämä on ensi kevään listalla. Ehkä...