Kaksipyöräinen robotti



Samankaltaiset tiedostot
AS Automaatio- ja systeemitekniikan projektityöt

AS Automaatio- ja systeemitekniikan projektityöt

DC-moottorin pyörimisnopeuden mittaaminen back-emf-menetelmällä

S14 09 Sisäpeltorobotti AS Automaatio ja systeemitekniikan projektityöt. Antti Kulpakko, Mikko Ikonen

Projektisuunnitelma. Radio-ohjattavan pienoismallin mekatroniikan ja ohjelmiston kehitys

S14 09 Sisäpeltorobotti AS Automaatio ja systeemitekniikan projektityöt. Antti Kulpakko, Mikko Ikonen

Käyttöohje. Tasapainolauta

AS Automaatio ja systeemitekniikan projektityöt A13 10 Radio ohjattavan pienoismallin ohjausjärjestelmän ja käyttöliittymän kehittäminen

AS Automaatio- ja systeemitekniikan projektityöt. Projektisuunnitelma. Peltorobotin akselimoduulin ohjain

-Motorracing Electronics WB-NÄYTTÖ KÄYTTÖOHJE. WB-näyttö Käyttöohje v1.0 12/2011 1/7

Adafruit Circuit Playground Express

Peltorobotin akselimoduulin kontrolleri

Agenda. Johdanto Säätäjiä. Mittaaminen. P-, I-,D-, PI-, PD-, ja PID-säätäjä Säätäjän valinta ja virittäminen

ELEC-C1110 Automaatio- ja systeemitekniikan. Luento 11 Esimerkki automaation soveltamisesta

A11-02 Infrapunasuodinautomatiikka kameralle

PC vai Yoshbox? Moottorinohjauksen lyhyt teoria ja vertailu Mustavalkoisesti kirjoitettuna innostamaan tiedon ja mielipiteiden jakamiseen by PetriK

- Käyttäjä voi valita halutun sisääntulon signaalin asetusvalikosta (esim. 0 5V, 0 10 V tai 4 20 ma)

AS Automaatio- ja systeemitekniikan projektityöt

OUM6410C pisteohjattu venttiilimoottori 24 VAC

ELKA STAGE 5 MTB ISKUNVAIMENNIN SÄÄTÖOHJE

- Käyttäjä voi valita halutun sisääntulon signaalin asetusvalikosta (esim. 0 5V, 0 10 V tai 4 20 ma)

Laboratorioraportti 3

ZigBee-ohjaus kuorma-autolle

Pienet sähkötoimilaitteet 90 käännöllä

KÄYTTÖOHJE ELTRIP-R6. puh fax PL Kajaani

AS Automaatio- ja systeemitekniikan projektityöt

74470 SPS. Loppuraportti

A15 - Inertial Measurement Unit

SUPIKOIRA-projekti. Tommi Berg Eero Alkkiomäki. (Tero Huttunen, Sami Kiiskilä, Ossi Mäkinen, Ilpo Suominen, Mikko Suominen, Asser Vuola)

Ilmanvaihto Säätimet 7/2016

A11-02 Infrapunasuodinautomatiikka kameralle

a) Piirrä hahmotelma varjostimelle muodostuvan diffraktiokuvion maksimeista 1, 2 ja 3.

Ledien kytkeminen halpis virtalähteeseen

P I C A X E O H J E L M O I N T I

Akkujen aktiivinen balansointi

A14-11 Potilaan mittaustiedon siirtäminen matkapuhelimeen

PID-sa a timen viritta minen Matlabilla ja simulinkilla

I-Vinssi LM.60i 24V / I/O-net / 60NM. Sisältö Sovellukset 1 Ominaisuudet 1 Mitoitus 3 Varavirtalähde 3 Varusteet 4 Johdotus 5 Tekninen erittely 5

Lego Mindstorms NXT. OPH oppimisympäristöjen kehittämishanke (C) 2012 Oppimiskeskus Innokas! All Rights Reserved 1

ESBE CRD122. Käyttöohje. Esbe CRD122 lämmönsäädin langattomalla ohjaimella. Kompakti lämmönsäädin paketti

Mikrokontrollerikitit - väliraportti

1. Hidaskäyntiset moottorit

S13-02 Linear motor controller for CAN-bus

LMM KARTING TEAM. Rungon perussäädöt

Aurinkojärjestelmän syväpurkauksen ohjausyksikkö Suunnittelu Mikko Esala

Yleistä ebmpapst-puhaltimista - Kuvaus teknisistä tiedoista AC

LUMA SUOMI -kehittämisohjelma LUMA FINLAND -utvecklingsprogram LUMA FINLAND development programme Ohjelmointia Arduinolla

Eye Pal Solo. Käyttöohje

Liikkuva viihdekeskus

KÄYTTÖ- JA TURVALLISUUSOHJE Hase Trets -nojapyörä

a) Kuinka pitkän matkan punnus putoaa, ennen kuin sen liikkeen suunta kääntyy ylöspäin?

Electronisen nopeus ja matkamittarin kalibrointi laite huippunopeus muistilla.

TKT224 KOODIN KOON OPTIMOINTI

Fysiikan laboratoriotyöt 3 Sähkömotorinen voima

ELEKTRONISET JÄRJESTELMÄT, LABORAATIO 1: Oskilloskoopin käyttö vaihtojännitteiden mittaamisessa ja Theveninin lähteen määritys yleismittarilla

Fy06 Koe Kuopion Lyseon lukio (KK) 1/7

MSnS-extra PCB v1.0. Kevyt käyttöohje

Tee-se-itse.fi Ja saat sellaisen, kuin sattuu tulemaan!

Luvun 5 laskuesimerkit

Projektisuunnitelma: Vesipistekohtainen veden kulutuksen seuranta, syksy Mikko Kyllönen Matti Marttinen Vili Tuomisaari

KÄYTTÖOHJE. M2M Point - to - Point

ONE 118 OHJELMOITAVA PÄÄVAHVISTIN

Moottoroitu nousutuki II

ABT VAIJERIVINTTURI NOSTOON VAVIN300EL, VAVIN500EL, VAVIN1000EL JA VAVIN3500EL

EA Sähköiset ilmanlämmittimet

Moottorin kierrosnopeus Tämän harjoituksen jälkeen:

1. Juota vastukset R1 (47ohm tai 33ohm) ja R3 (15ohm) paikoilleen.

Metropolia AMK BOSCH REXROTH HYDRAULIPENKIN KONSEPTISUUNNITTELU

DEE Sähkömoottorikäyttöjen laboratoriotyöt. Tasavirtakäyttö

Apollo SPEEDY Syöttölaite

KRSC 9011/1 KRSC 9006 KRSF 9005/SL KRSF 9005/BL. Asennusohjeet

AS Automaatio- ja systeemitekniikan projektityöt. Projektisuunnitelma. A10-14 Automaattinen pesäpallolukkari

S Portaalinosturi AS Projektisuunnitelma Oleg Kovalev

Ongelmia mittauksissa Ulkoiset häiriöt

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

AUTON LIIKETEHTÄVIÄ: KESKIKIIHTYVYYS ak JA HETKELLINEN KIIHTYVYYS a(t) (tangenttitulkinta) sekä matka fysikaalisena pinta-alana (t,

12.5 ECO IKÄSUOSITUS: 2-5 v RACING IKÄSUOSITUS: 2-5 v.

WGS - Quick-Lock-pikavaihtojärjestelmä

Fysiikan valintakoe , vastaukset tehtäviin 1-2

Torqeedo. Palkittu, suorituskykyinen sähköperämoottori.

SeekTech SR-20 Paikannin Kevyt mutta silti lujarakenteinen vastaanotin, joka antaa kaikki nopean ja tarkan paikannuksen tarvitsemat tiedot.

Harjoitustyö - Mikroprosessorit Liikennevalot

TANSUN QUARTZHEAT. Käyttöohje. Algarve UK:N & EUROOPAN MALLIT: ALG 513UK & ALG 513EU. Valmistaja: Tansun Limited

XCRANE OMINAISUUDET KUUSI KULJETTAJA-PROFIILIA VENTTIILIEN SÄÄDÖT

LTY/SÄTE Säätötekniikan laboratorio Sa Säätötekniikan ja signaalinkäsittelyn työkurssi. Servokäyttö (0,9 op)

Nosturirobotti. robotin tarkoitus. mikä on robotin tehtävä. Kurssin robottiohjelmointi, kesä 2011 harjoitustyö

ComfortControl 01 KEINUN LUKITUS 02 KEINUN VASTUS 05 SELKÄNOJAN KORKEUS 03 ISTUINSYVYYS 06 SELKÄNOJAN KALLISTUS 04 ISTUINKORKEUS 07 KÄSINOJAT KORKEUS

Electric power steering

S Elektroniikan häiriökysymykset. Laboratoriotyö, kevät 2010

CONSTANT FINESS SUNFLEX

IIZE3010 Elektroniikan perusteet Harjoitustyö. Pasi Vähämartti, C1303, IST4SE

Yleishimmentimellä varustetun, uppoasennettavan WMR-252-vastaanottimen käyttöopas

Multivibraattorit. Bistabiili multivibraattori:

RAIDETESTERIN KÄYTTÖOHJE

Projektityöt. Sami Alaiso, Jyri Lujanen 30. marraskuuta 2009

LED- päivyrinäyttö. 1: Anssi Kalliomäki, Marko Virtanen, Tomas Truedsson, Petri Syvälähde

LOPPURAPORTTI Lämpötilahälytin Hans Baumgartner xxxxxxx nimi nimi

Parasta ammunnanharjoitteluun

Kuva 1. Ohmin lain kytkentäkaavio. DC; 0 6 V.

Tehokas ledivalaisin 30 valkoisella ledillä. Käyttöjännite 12 20V. Nimellisvirta on noin 0.10A A Suunnittelija Mikko Esala.

Transkriptio:

AS-0.3200 Automaatio- ja systeemitekniikan projektityö Kaksipyöräinen robotti 1.1.2010-1.5.2011 Opintopisteet: 7 Tapio Lantela, 66559C, Automaatio- ja systeemitekniikka tapio.lantela@tkk.fi

Sisällysluettelo Ideointi...2 Mekaniikka...3 Runko...3 Moottorit...4 Akku...5 Elektroniikka...6 Mikrokontrollerilevy...6 Anturit...7 Moottorinohjain...7 Ohjelmointi...8 Inertiaalimittausyksikkö...8 Moottorinohjaus...9 Säätö...10 Lopuksi...12 Liitteet...13 Tuntiarvio...13 Mikrokontrollerilevyn skeema...13 Mikrokontrollerilevyn suunnitelma...14 Ideointi Aloin tutustumaan mikrokontrollereihin puolisen vuotta ennen tämän projektin aloittamista. Rakentelin aluksi pieniä yksinkertaisia kytkentöjä, joiden jälkeen aloin rakentamaan energiansäästölampun lampun himmentimellä varustettua herätyskelloa. Mikrokontrolleri- ja elektroniikkataitojen karttuessa rakentelun aikana herätyskelloprojekti alkoi tuntumaan hieman yksinkertaiselta ja kiinnostus sitä kohtaan lopahti. Sen sijaan halusin rakentaa jotain liikkuvaa, johon voisin soveltaa oppimiani säätömenetelmiä. Olin opetellut mikrokontrollerien alkeita Arduino-ohjelmointiympäristöllä, jonka erinomaiselta keskustelualueelta bongasin mielenkiintoisia projekteja, joissa rakennettiin kahdella pyörällä tasapainoileva robotti. Useissa projekteissa robotti oli kuitenkin mekaniikaltaan hutaistun oloisesti kasattu eikä rakentajilla tuntunut olevan juurikaan ymmärtämystä säätötekniikasta. Päätin siis tehdä sekä mekaniikaltaan, että elektroniikaltaan ja säädöltään paremman kaksipyöräisen robotin kuin keskustelualueella näkemissäni projekteissa. Tavoitteena minulla oli alunperin siis tehdä kaksipyöräinen robotti, joka ensimmäisessä vaiheessa pysyisi itsekseen pystyssä. Tämän jälkeen tarkoitus olisi jatkaa projektia siten, että robotin saisi liikkumaan itsekseen ja sen jälkeen vielä mahdollisesti lisätä robottiin jonkinlainen kauko-ohjaus.

Mekaniikka Aloitin projektin suunnittelemalla robotin mekaniikkaa. Kaksipyöräisen robotin mekaniikka on hyvin yksinkertainen, sillä periaatteessa robotin ainoat liikkuvat osat ovat robotin sivuilla olevat pyörät eikä niitä ole edes tarpeen pystyä kääntämään. Renkaiden lisäksi robotilla on käännettävä pää, jossa olevaa ultraäänianturia voidaan käyttää esteiden havaitsemiseen. Runko Koska robotilla ei ole tarkoituskaan pystyä ajamaan hankalassa maastossa, pyörille ei välttämättä tarvita minkäänlaista jousitusta. Robotti on myös kohtalaisen kevyt (alle 2 kg), joten tarpeeksi tukevat moottorit hankkimalla, pyörät voidaan kiinnittää suoraan moottorin tai vaiheteiston akselille ilman muuta ripustusta. Tällöin moottoreiden akselien laakerointi kantaa koko robotin painon, mikä ei varmasti ole optimaalinen ratkaisu, mutta näin kevyessä robotissa ja vähällä ajolla ratkaisu on kelvollinen ja kaikkein yksinkertaisin rakentaa. Robotin rungon tarkoituksena on ainoastaan pitää pyörät paikoillaan sekä toimia kiinnitysalustana antureille, akulle ja ohjauselektroniikalle. Rungon täytyy olla tarpeeksi tukeva, jotta se kestää robotin törmäämisen ja kaatumisen. Lisäksi rungon painopisteellä on suuri merkitys robotin ominaisuuksille. Mahdollisimman hyvää tasapainoa haettaessa rungon painopiste kannattaa sijoittaa ylös. Tällöin rungon hitausmomentti pyörien akselien ympäri on suurimmillaan, joten se kaatuu hitaasti. Painopisteen ollessa ylhäällä robotti ei kuitenkaan ole kovin ketterä kiihdytyksissä ja jarrutuksissa. Koska robotin painavimmat osat eli moottorit ja vaihteistot ovat samalla akselilla renkaiden kanssaa, suurin vaikutus robotin painopisteen sijaintiin on seuraavaksi painavimman osan eli akun sijoituksella. Päätin tehdä kompromissin robotin stabiiliuden ja ketteryyden välillä ja sijoittaa akun rungon keskivaiheille. Rungon suunnittelussa käytin Solid Edge CAD-ohjelmaa. Pyrin mallintamaan kaikki osat tarkasti, jotta osat varmasti mahtuisivat runkoon suunnitellulla tavalla ja kiinnitysreiät osuisivat kohdalleen mahdollisimman hyvin. Valmis CAD-malli on nähtävissä kuvassa 1 ja sen perusteella rakennettu robotti kuvassa 2. Rungon sivulevyinä käytin lankasahalla muotoon sahattua 3 mm alumiinilevyä ja rungon välitasoina sekä etu- ja takalevyinä 2 mm alumiinia. Ohuemmat alumiinilevyt leikkasin muotoon giljotiinileikkurilla ja taivutin sen jälkeen levytaivuttimella. Runko on kasattu ruuveilla kokoamisen ja purkamisen helpottamiseksi. Osalle ruuveista tein kierteet suoraan levyihin ja osalle käytin muttereita. Alumiinin pehmeyden ja levyjen ohuuden vuoksi osa levyihin tehtdyistä kierteistä ei tuntunut kestävän ruuvien toistuvaa irrottamista ja kiinnittämistä. Myös välitasojen tarkasti oikeaan kokoiseksi taivuttaminen osoittautui hieman haastavaksi levytaivuttimella. Renkaiksi valitsin Pololu-verkkokaupan kapeat ohuella kumilla päällystetyt pienikuvioiset renkaat. Tämä sen vuoksi, että leveämmät ja pehmeämmät renkaat olisivat todennäköisesti aiheuttaneet robotin odometriaan enemmän virhettä. Renkaille löytyi kaupasta myös valmiit keskiöt vaihteiston akselille kiinnittämistä varten.

Drawing 1: CAD-malli robotin rungosta Drawing 2: Valmis runko Moottorit Tällaisessa pienessä robotissa moottorivaihtoehtoina ovat käytännössä DC-moottorit, RC-servot sekä askelmoottorit. Näistä RC-servot liikkuvat normaalisti vain 180 asteen alueella, mutta ne on yleensä kohtuullisen helppo modifioida pyörimään jatkuvasti jompaan kumpaan suuntaan riippuen servolle annetusta kulmaohjeesta. RC-servojen etuna olisi valmis ja kompakti moottorin, alennusvaihteen ja moottorinohjauselektroniikan yhdistelmä. Merkittävä ongelma niissä on kuitenkin vaihteiston suuri välitys ja sitä kautta akselin hidas pyörimisnopeus. Askelmoottoreiden ongelmana sen sijaan on heikohko vääntömomentti sekä jatkuva virrankulutus myös silloin kun moottori ei tee työtä. Päädyin siis käyttämään robotissa kummallekin pyörälle omaa DC-moottoria ja alennusvaihteistoa. Tällöin moottorille ei tarvitse antaa ollenkaan virtaa sen ollessa halutussa asennossa, mutta tarvittaessa moottorista saadaan hetkellisesti suuriakin vääntöjä suurilla virroilla. Moottorin vaihteiston välitys täytyy valita siten, että vaihteiston akseli saadaan pyörimään riittävän nopeasti, jotta robotilla saavutetaan haluttu maksiminopeus. Toisaalta välityksen täytyy olla niin suuri, että robotin pyörille saadaan riittävä vääntömomentti. Itse käytin nyrkkisääntönä sitä, että robotin täytyy jaksaa nostaa itsensä korkeahkon esteen yli eli maksimivääntömomentin yhdelle moottorille täytyy olla ainakin M max = renkaiden säde robotin paino 2 Tavoitteena maksiminopeudelle käytin arvoa 1 m/s. Nämä vaatimukset rajasivat pois kaikkein pienimmät lelumoottorit ja hieman tehokkaammatkin metallivaihteistoiset harrastemoottorit. Päätin että ostan kerralla hieman paremmat moottorit, joita voi kenties käyttää tulevaisuudessa muissakin projekteissa. Päädyin tilaamaan Banebots nimisestä firmasta kaksi harjallista DC-moottoria 20:1 planeetta-alennusvaihteistolla. Vakiomoottoreiden 17 ampeerin maksimivirralla vaihteiston akselilta saatava vääntömomentti on 14 kgcm eli noin 1,4 N ja maksimikierrosnopeus 818 rpm. 1,4 N maksimiväännöllä ja 8 cm halkaisijaisilla renkailla kaksi moottoria jaksaisi nostaa teoriassa vielä noin robotin 7 kg painoisen robotin ja maksiminopeudeksi tulisi lähes 3 m/s. Moottorit osoittautuivatkin vähintäänkin tarpeeksi tehokkaiksi ja kenties niiden tehoa rajoittamalla olisi voinut

säästää testausympäristöä muutamilta kolhuilta. Tärkeä ominaisuus moottoria ja vaihteistoa valittaessa oli myös se, että vaihteisto ei aiheuttaisi vaihteiston akselin liikkeeseen välystä, sillä välys liikesuuntaa vaihtaessa aiheuttaa säätöalgoritmille ongelmia epäjatkuvuuden takia. Käsittääkseni valitsemieni vaihteistojen pitäisi olla kohtuullisen pienivälyksiset, mutta suurehkoilla renkailla vaihteistojen välys on silti selvästi huomattava ja aiheuttaa jonkin verran ongelmia säädössä. Akku Akuksi valitsin litiumpolymeeriakun, sillä ne ovat hyvin kevyitä suhteessa kapasiteettiinsa. Lisäksi litiumpolymeeriakkujen sisäinen resistanssi on hyvin pieni, joten ne voivat tuottaa suuren virran ilman, että akun napajännite tippuu huomattavasti. Sain myös tilattua 7,4 V 5000 mah li-po akun latureineen hyvin halvalla Hobbyking-nettikaupasta, joten valinta oli helppo. 7,4 V on moottoreille suoraan sopiva jännite ja siitä on helppo reguloida 5 V jännite mikrokontrollerilla lineaariregulaattorilla.

Elektroniikka Mikrokontrollerilevy Olin rakennellut aikaisemminkin pieniä projekteja Arduino kehitysympäristöllä, jossa käytetään useimmiten Atmelin Atmega168 tai Atmega328 mikrokontrollereita, joten oli loogista käyttää niitä myös tässä projektissa. Minulla oli visio jakaa robotin ohjausjärjestelmä kolmeen eri osaa, jolloin samalla voisin samalla harjoitella mikrokontrollereiden välistä kommunikaatiota. Ohjausjärjestelmästä voidaan erottaa selkeästi omaksi osakseen ainakin inertiaalimittausyksikkö, moottorinohjaus sekä ylemmän tason logiikka, joista jokaista hoitamaan tulee erillinen mikrokontrolleri. Mikrokontrollerit kommunikoivat keskenään I2C-väylän kautta siten, sillä valitsemani kiihtyvyysanturi ja gyroskooppi käyttävät sitä joka tapauksessa. Toinen ja jälkikäteen ehkä parempi vaihtoehto olisi ollut käyttää mikrokontrollerien väliseen kommunikaatioon SPI-väylää, jolloin kontrollerien välisellä kommunikaatiolla ei olisi ollut vaikutusta anturien kommunikointiin. Rakensin aluksi toimivan mikrokontrolleripiirilevyn reikälevylle juottamalla. Opettelin kuitenkin samoihin aikoihin töissä piirilevyjen suunnittelua ja valmistusta, joten päätin korvata reikälevylle tehdyn piirilevyn paremmin suunnitellulla ja siistimmin valmistetulla. Suunnittelin siis piirilevyn KiCAD- piirilevynsuunnitteluohjelmalla uudestaan ja syövytin sen kaksipuoleiselle levylle. Piirilevyn suunnitelmat ovat nähtävillä tämän dokumentin liitteissä ja valmis piirilevy kuvassa 3. Piirilevyllä on kolme mikrokontrolleria, jänniteregulaattori, pari potentiometriä sekä liittimet antureille, moottorinohjaimelle ja servolle. Drawing 3: Valmis syövytetty mikrokontrollerilevy

Anturit Robotin asentoa mitataan kiihtyvyysanturilla ja gyroskoopilla. Gyron avulla saadaan mitattua kulmanopeus pyörien akselien ympäri eli robotin kaatumisnopeus. Kaatumisnopeudesta voidaan integroida robotin asentokulma. Integroituun kulmaan kertyy kuitenkin jatkuvasti virhettä, joka täytyy korjata absoluuttisella kulmamittauksella. Absoluuttinen kulmamittaus saadaan kiihtyvyysanturilla, jolla voidaan mitata painovoiman aiheuttama kiihtyvyys. Kiihtyvyysanturin lukemaan kuitenkin vaikuttavat myös robotin kiihtyvyys eteen- ja taaksepäin, joten sitä ei voida käyttää robotin ainoana asentoanturina. Gyrosta saatava lyhyellä aikavälillä tarkka kulma- ja kulmanopeus voidaan yhdistää kiihtyvyysanturista saatavalla pitkällä aikavälillä stabiilina pysyvään kulmamittaukseen optimaalisesti Kalman-suotimella. Gyroskooppina robotissa toimii Nintendo Wiin peliohjaimen Motion Plus -lisäosasta purettu piirilevy. Levyllä on kolmiakselinen gyroskooppi ja se kommunikoi peliohjaimen kanssa I2C-väylän kautta. Robotissa mikrokontrolleri esiintyy Motion Plussalle peliohjaimena, jolloin mittaustulokset saadaan luettua I2C-väylän kautta. Kiihtyvyysanturina toimii vastaavasti Nintendo Wiin Nunchukpeliohjain, jossa on kolmiakselinen kiihtyvyysanturi. Irrotin piirilevyt peliohjainten kuorista ja juotin niiden johtojen tilalle piikkirimat. Tällöin anturit pystyi kiinnittämään mikrokontrolleripiirilevyllä oleviin liittimiin vain painamalla eikä antureita tarvinnut juuri kiinnittää sen tukevammin. Tämän robotin tapauksessa antureiksi olisivat riittäneet yksiakselinen gyroskooppi ja kaksiakselinen kiihtyvyysanturi, mutta peliohjaimista puretut kolmiakseliset anturit olivat erittäin halpoja, joten niistä ei ollut tarvetta säästää. Asentoanturien lisäksi robotissa on ultraäänianturi, jolla voidaan mitata etäisyys robotin päästä noin kuuteen metriin asti. Ultraäänianturia voidaan kääntää mikroservolla haluttuun suuntaan 180 asteen alueella. Pystysuunnassa anturi kallistuu aina robotin mukana, joten etäisyysmittauksen arvo heittelee hieman robotin kulmasta riippuen. Olin suunnitellut robottiin ja osittain jo valmistetanutkin optiset inkrementaalienkooderit renkaisiin, mutta ne jäivät toteuttamatta loppuun asti ajanpuutteen vuoksi. Enkooderit oli tarkoitus toteuttaa pallohiiren enkooderilevyjä ja detektoreita käyttämällä. Detektorit oli tarkoitus siirtää erilliselle piirilevylle ja enkooderilevyt oli tarkoitus kiinnittää moottorin akselille. Moottoreiden akseli on hieman näkyvillä moottorin takapuolella, joten enkooderilevyn voi kiinnittää akselille poraamalla akselin päähän reiän ja liimaamalla siihen tapin, johon levyn voi kiinnittää. Moottorinohjain Moottorinohjaimen tehtävänä on säätää portaattomasti moottoreiden käämien yli vaikuttavaa jännitettä ja sitä kautta käämien virtaa, joka taas vaikuttaa suoraan moottoreiden vääntömomenttiin sen hetkisessä toimintapisteessä. Koska moottorit vaativat suurta virtaa, täytyy jännitteen säätäminen tehdä käytännössä PWM:llä eli pulssinleveysmoduloidulla signaalilla. Tällöin moottoreiden käämeille annetaan pieninä sykäyksinä täysi käyttöjännite ja välillä moottori kytketään irti jännitteestä. Käämeissä kulkeva virta ei kuitenkaan muutu äkillisesti, joten mikäli sykäysten väli on tarpeeksi pieni, säätyy käämien virta käytännössä portaattomasti. Virran suunta käämeissä täytyy myös pystyä kääntämään, jotta moottoreiden pyörimissuunta voidaan vaihtaa. Käytännössä tämä toteutetaan neljästä kytkimestä rakennetulla H-sillalla. Kytkiminä voidaan käyttää esimerkiksi bipolaaritransistoreja tai MOSFETeja. Moottorinohjain voidaan rakentaa joko erillisistä kytkimistä tai valmiista moottorinohjainpiireistä, joissa on sekä kytkimet että muu tarvittava ohjauslogiikka sisäänrakennettuna. Koska valitsemieni moottorien maksimivirta on noin 17 ampeeria, rakentelijoiden tavallisimmin käyttämien pienten moottorinohjainpiirien virrankesto ei riitä. Tämän vuoksi suunnittelin vakavasti rakentavani oman moottorinohjaimen erillisillä MOSFETeilla, mutta päädyin kuitenkin käyttämään kohtuullisen kallista, mutta helppokäyttöistä valmista moottorinohjainpiirilevyä. Itse rakentamalla moottorinohjaimen virrankeston olisi saanut helposti hyvin suureksi, mutta ongelmana olisi ollut

suurehko piirilevy sekä mahdollisesti MOSFETien nopean kytkennän aiheuttamat sähköiset ja sähkömagneettiset häiriöt muussa osassa elektroniikkaa. Jälkikäteen mietittynä kaupallisen moottorinohjaimen ostaminen oli erinomainen päätös, sillä olen tämän projektin jälkeen suunnitellut yhden moottorinohjaimen ja se oli vähintäänkin haastavaa. Moottorinohjaimena robotissa toimii kaksikanavainen kahteen VNH2SP30-piiriin perustuva valmis moottorinohjain. VNH2SP30-piirin maksimivirta on hetkellisesti noin 30 ampeeria ja jatkuvanakin 14 ampeeria, mikä riittää hyvin robotin moottoreille. Piiri tarvitsee ohjaussignaaleina suunta- sekä PWM muotoisen virransäätösignaalin. Harkitsin myös oman moottorinohjaimen rakentamista VNH2SP30-piirien pohjalta, mutta pelkkien piirien hinta oli jo noin 15 euroa kappale, joten pienen säästön vuoksi ei olisi kannattanut nähdä rakentamisen vaivaa. Ohjelmointi Ohjelmoinnissa käytin Arduino-ohjelmointiympäristöä ja mittausdatan visualisoinnissa Processingympäristöä. Arduino on erinomainen ympäristö mikrokontrolleriohjelmointiin tutustumista varten sekä yksinkertaisille projekteille, mutta vuoden opiskelun jälkeen sen rajoitteet alkavat tulla vastaan haastavammissa projekteissa. Esimerkiksi mikrokontrollerin tuottaman PWM-signaalin taajuuden säätäminen on kohtuullisen vaikeaa Arduinolla. Tämän lisäksi käsittääkseni yksi tietty ajastin on aina käytössä ohjelman toiminnan ajastamiseen, joten sitä ei voi käyttää muuhun toimintaa. Mikäli aloittaisin vastaavan projektin alusta, en enää tekisi sitä Arduinolla vaan esimerkiksi Codevisionilla, WinAVR:llä tms. Inertiaalimittausyksikkö Yksi selkeästi erotettava osajärjestelmä robotissa on gyroskoopista, kiihtyvyysanturista sekä yhdestä mikrokontrollerista koostuva inertiaalimittausyksikkö. Inertiaalimittausyksiköstä saadaan ulos mittaustiedot kulmanopeuksista, kiihtyvyyksistä sekä kiihtyvyysanturin kanssa samalla piirilevyllä olevan joystickin asennosta. Mikrokontrolleri siis kommunikoi erillisillä piirilevyillä olevien antureiden (kuvan 3 yläreunassa) kanssa I2C-väylän kautta. I2C-väylän käyttämiseen antureiden kanssa kommunikointiin löytyi esimerkkikoodi, jota muokkaamalla toteutin oman ohjelmani. Antureille lähetetään väylän kautta pyyntö uusille mittauksille, minkä jälkeen tulokset voidaan lukea väylältä. Mittaustulokset voidaan lukea ainakin 100 Hz taajuudella, mikä riittää tämän robotin tapauksessa hyvin. Ainakin kiihtyvyysanturin mittauksia pystyi lukemaan yli 200 Hz taajuudella, mutta antureista alkoi jossain vaiheessa tulla hieman epämääräisiä tuloksia, mikäli koodista poisti kaikki viiveet. Tämä virhe tuntui toistuvan lähinnä satunnaisesti, joten sen etsimiseen ja korjaamiseen kului paljon aikaa. Mittaustulosten lukemisen kiihtyvyysanturin datasta voidaan laskea yksinkertaisesti trigonometrialla robotin asento ja gyroskoopin kulmanopeusdatasta voidaan integroida robotin kulma sen alkuasennon suhteen. Tämän jälkeen inertiaalimittausyksikkö yhdistää niistä yhden tarkan arvion robotin kulmasta Kalman-suotimen avulla. Kalman suotimen koodista löysin joitakin esimerkkejä, joita yhdistelemällä ja tulkitsemalla tein oman koodini. Tavoitteenani oli kuitenkin olla kopioimatta aivottomasti valmista esimerkkiä ja sen sijaan ymmärtää koodin ja Kalman-suotimen toimintaa hieman. Tämän jälkeen Kalman-suodin piti vielä virittää toimimaan mahdollisimman nopeasti, mutta häiriöttömästi. Virittämisen tein melko mututuntumalla kiihtyvyysanturin ja gyroskoopin variansseja muutellen.

Drawing 4: Vihreä: Gyrosta integroitu kulma, Keltainen: Kiihtyvyysanturista mitattu kulma, Valkoinen: Kalmansuotimesta saatu kulma Virittämisen ja virheenhaun apuna käytin Processing-ohjelmointiympäristöä. Processingissa käyttäjä voi kirjoittaa lyhyehköjä ohjelmia samaan tapaan kuin Arduinossa, mutta ohjelmat käännetään ja ajetaan tietokoneella. Ohjelmilla on helppo muun muassa visualisoida sarjaportin kautta lähetettävää mittausdataa. Processingilla visualisoitua inertiaalimittausyksikön mittausdataa on nähtävissä kuvassa 4. Kuvan pystyakselilla on robotin kallistuskulma ja vaaka-akselilla aika. Kuvasta näkyy, että gyroskoopin mittausta kuvaava vihreä käyrä on vaeltanut kauas Kalmansuotimen ulostuloa kuvaavasta valkoisesta käyrästä. Kiihtyvyysanturin mittauksista laskettua kulmaa kuvaava keltainen käyrä sen sijaan seuraa pitkällä aikavälillä todellista kulmaa hyvin, mutta värähtelee lyhyellä aikavälillä sen ympäristössä hyvin levottomasti. Nopeissa liikkeissä kuvaajan keskivaiheen jälkeen kiihtyvyysanturin mittauksista laskettu kulma heittelee aivan missä sattuu, sillä robottiin kohdistuu merkittävissä määrin muitakin kiihtyvyyksiä kuin painovoiman aiheuttama kiihtyvyys. Kalman-suodin yhdistää siis gyroskoopin ja kiihtyvyysanturin parhaat ominaisuudet ja mahdollistaa huonojen ominaisuuksien kompensoinnin pois mittaustuloksista. Moottorinohjaus Toinen jollain tavalla erotettava osajärjestelmä robotissa on moottorinohjaus. Moottorinohjauksen tehtävänä oli alunperin tarkoitus vastaanottaa nopeusohje ja säätää sen perusteella moottoreiden nopeus halutuksi. Käytännössä siis moottorinohjausta hoitava mikrokontrolleri olisi lukenut ulkoisilla keskeytyspinneillä optisten enkoodereiden pulsseja ja laskenut niistä moottoreiden nopeuden. Tämän jälkeen mikrokontrolleri olisi laskenut esimerkiksi PID-säätimellä sopivan PWMohjeen varsinaiselle moottorinohjainpiirilevylle, joka olisi PWM:n ohjaamana säätänyt moottoreiden virtaa ja sitä kautta vääntömomenttia. Koska en ehtinyt toteuttaa robottiin optisia enkoodereita, minkä vuoksi renkailta ei ole saatavissa asentotakaisinkytkentää, ei myöskään takaisinkytkettyä nopeussäätöä ollut mahdollista toteuttaa. Toteutettu säätöjärjestelmä on kuvattu seuraavassa luvussa.

Säätö Tarkoituksena oli alunperin toteuttaa niin sanotusti ylemmän tason ohjaus erillisellä mikrokontrollerilla, jotta se ei vaikeuttaisi nopealla tahdilla suoritettavien antureiden lukemisen ja moottorinohjauksen ajoittamista. Kuvassa 5 näkyy alkuperäinen suunnitelma säätöjärjestelmästä. Siinä siis mikrokontrolleri 1 toimii inertiaalimittausyksikkönä ja lähettää mikrokontrolleri 2:lle tiedon robotin asentokulmasta. Mikrokontrolleri 3 lähettää mikrokontrolleri 2:lle mittauksen robotin nopeudesta, kuljetusta matkasta ja paikasta odometrian perusteella. Mikrokontrolleri 2 laskee robotin asennon, nopeuden ja paikan perusteella nopeusohjeen kummallekin moottorille erikseen ja lähettää sen kontrolleri 3:lle. Mikrokontrolleri 3 laskee ja lähettää tämän jälkeen tarvittavat PWMsignaalit moottorinohjainlevylle PID-säätimellä. Kontrolleri 2:ssa robotin asentokulmaa ohjaavan säätimen olin aluksi ajatellut toteuttaa PID-säätimellä, mutta myöhemmin ehkä sumealla säätimellä. Drawing 5: Alkuperäinen suunnitelma ohjaukselle

Koska optiset enkooderit jäivät toteuttamatta, yksinkertaistui säätöjärjestelmä huomattavasti. Tällä hetkellä toteutettu säätöjärjestelmä on esitetty kuvassa 6. Drawing 6: Toteutettu ohjausjärjestelmä Mikrokontrolleri 1 siis toimii inertiaalimittausyksikkönä kuten alkuperäisessäkin suunnitelmassa, mutta mikrokontrolleri 3 sen sijaan hoitaa nyt koko robotin säätämisen. Mikrokontrolleri 2:n ainoiksi tehtäviksi jäi säätimen virittämiseen käytettävien potentiometrien asennon lukeminen ja eteenpäin viestittäminen sekä ultraäänianturin lukeminen. Robotti siis laskee PID-säädintä, jonka sisääntulona on robotin asentokulma ja ulostulona moottorinohjaimen PWM-signaali. PWMsignaali vaikuttaa moottoreiden vääntöön ja sitä kautta robotin asentokulmaan. PID-säätimen säätöväli on 10 ms. Yritin aluksi toteuttaa järjestelmää siten, että PID-säädin laskettaisiin mikrokontrolleri 2:ssa, mutta en saanut tällöin järjestelmää stabiiliksi. Todennäköisesti kontrollerien välinen kommunikointi aiheutti liikaa viivettä järjestelmään, jolloin sen virittäminen stabiiliksi oli hankalaa. En vielä projektin tässä vaiheessa osannut käyttää kontrollereiden keskeytyksiä tarpeeksi viiveettömän tiedonsiirron ja ohjelman suorituksen toteuttamiseen. Robotti alkoi heti toimimaan paremmin kun asentokulma toimitettiin suoraan PID-säädintä laskevalle ja moottoreita ohjaavalle kontrollerille. PID-säätimen virityksessä en käyttänyt mitään tunnettua menetelmää, kuten Ziegler Nicholsia tms. Hain ensin testaamalla P-termin maksimin siten, että robotti alkoi värähtelemään liikaa, minkä jälkeen pienensin sitä hieman. Seuraavaksi asetin D-termin niin suureksi kuin mahdollista, ilman että kulmamittauksessa oleva kohina alkoi näkymään robotin liikkeessä nykimisenä. Tällöin robotti oli jo hyvinkin vakaa, mutta nojasi jatkuvasti jompaan kumpaan suuntaan eikä siten pysynyt paikallaan. I-termiä lisäämällä nojaamisen sai loppumaa ja robotti alkoi myös pysymään välttävästi paikoillaan.virittämisen alkuvaiheessa pyrin myös ottamaan huomioon esimerkiksi robotin voimansiirron lepokitkan. Robotin renkaat eivät siis lähde pyörimään hyvin pienillä PWM-arvoilla, koska moottorin vääntömomentti ei jaksa voittaa pääasiassa vaihteistosta johtuvaa kitkaa. Koitin estää tätä siten, moottoreille ei anneta koskaan lähes nolla PWM:ää, vaan aina sen verran suuri ohjaus että renkaat lähtevät pyörimään. Tämä aiheutti kuitenkin säätimeen epäjatkuvuuden renkaiden pyörimissuuntaa vaihtaessa ja säädin oli hyvin hankala virittää stabiiliksi. Yksi epästabiilisuutta aiheuttanut ongelma on myös varmasti se, että osa I2C-väylällä liikkuvista paketeista näyttäisi katoavan. Mielenkiintoisesti katoavien pakettien määrä näyttäisi riippuvan robotin asentokulmasta. Eräitä mahdollisia syitä katoaviin paketteihin voi olla moottoreiden aiheuttamat sähköiset häiriöt tai kenties eripituiset viestit erilaisella mittausdatalla, jolloin softa

saattaa käsitellä osan viesteistä väärin. Välistä kadonnut paketti joka tapauksessa aiheuttaa joskus sen, että robotti kallistuu liikaa, minkä jälkeen se yrittää liian nopeasti korjata asentoaan ja kaatuu. Lopuksi Aloitin projektin harrasteprojektina jo kuukausia ennen projektityökurssin alkua, joten en pitänyt tuntikirjanpitoa projektin alusta lähtien enkä alkanut pitää sitä kurssin alettuakaan, koska ajattelin ettei työhön jo käyttämistäni tunneista ole enää mahdollista tehdä järkevää arviota. Käytin erittäin paljon aikaa erilaisten moottorivaihtoehtojen, moottorinohjauksen, antureiden yms. tutkimiseen verkkoa selailemalla, sillä näistä oli koululla opetettu hyvin vähän. Liitteissä olevaan tuntikirjanpitooni arvioin aika karkeasti kuinka paljon mihinkin osa-alueeseen työssä on mennyt aikaa. Dokumentoinnin, sekä mekaniikan ja elektroniikan valmistuksen aika-arviot ovat todennäköisesti kohtuu lähellä totuutta, sillä ne tein aika lyhyessä ajassa. Toisaalta komponenttien tutkiminen ja valinta sekä ohjelmointi ovat jakautuneet vajaan vuoden ajalle, joten niihin käyttämääni aikaa on aika hankala arvioida. Tämän vuoden aikana, jonka projekti on ollut enemmän tai vähemmän työn alla olen, oppinut erityisesti elektroniikasta, mekaniikasta sen verran, että osaamiseni on aika paljon parempi kuin projektin alussa. Tämä onkin osasyy siihen että kiinnostukseni projektin loppuun viemiseksi on hieman hävinnyt. Esimerkiksi mikrokontrolleripiirilevyn saisi mielellään suunnitella ainakin osittain uusiksi kunnollisen maatason kanssa, jotta esimerkiksi moottoreiden virrat eivät aiheuttaisi häiriöitä levylle. Lisäksi robotin ohjelman voisi kirjoittaa uusiksi ilman Arduino ympäristöä, jotta moottoreidn PWM-taajuutta pääsisi säätämään helpommin. Myös mikrokontrollereiden välinen kommunikointi ja ohjelman skedulointi pitäisi muuttaa keskeytyspohjaisiksi. Projektin päätavoite toteutui siis aika hyvin eli robotti pysyy itsekseen pystyssä. Lisätavoitteet jäävät nyt toteuttamatta, mutta tällaisenakin projekti on ollut kyllä erittäin opettavainen.

Liitteet Tuntiarvio Työlaji Tunteja Komponenttien etsiminen/tutkiminen 50 Suunnittelu Mekaniikka 10 Elektroniikka 25 Valmistus Mekaniikka 25 Elektroniikka 10 Ohjelmointi 60 Dokumentointi 10 Yhteensä 190 Mikrokontrollerilevyn skeema Drawing 7: Piirilevyn skeema

Mikrokontrolleripiirilevyn suunnitelma Drawing 8: Piirilevyn suunnitelma