lauantai 12. lokakuuta 2019

Höpö-robotin rakentaminen

Saanko esitellä uuden perheenjäsenemme, pienen ja suloisen Höpö-robotin! Tai no hän ei oikestaan ole kovin tuore, vaan ollut olemassa jo jonkin aikaa. En vain ole saanut aikaiseksi kirjoittaa hänestä tänne, anteeksi Höpö ;__;



Olin jo pitkään haaveillut, että ehtisin rakentaa oman robotin Sulautetut-kirjan ohjeiden mukaan. Ajan puutteen takia olen rakentanut sitä vähitellen, eikä se ole vieläkään täysin valmis ohjelmoinnin osalta. Työ- ja kouluasiat menevät valitettavasti harrastusten edelle, ja olen lisäksi aloittanut monia muitakin projekteja, jotta oppisin nopeammin ohjelmointia ja koneoppimisen ja neuroverkkojen käytännön toteutusta.

Päätin kuitenkin kirjoittaa jo postauksen Höpön rakentamisesta, koska voin jakaa postaukset kahteen osaan: teen myöhemmin erillisen postauksen sen ohjelmoinnista, vaikkakin tässä postauksessa kerron jo miten koodasin servojen arvojen asettamisen ja niiden oikean alueen etsimisen. Höpön rakentamisessa kiinnosti erityisesti se, miten sen osiin käytetään luovasti eri esineitä, esimerkiksi henkarista tehdään  jalat. Haaveeni on, että osaisin joskus rakentaa robotin kierrätysmateriaalista, esimerkiksi käyttää vanhojen tietokoneen tai muiden laitteiden osia. Uskon, että haaveeni vielä joskus toteutuu! Ihmisissä, kuten roboteissakin, on potentiaalia mihin tahansa. Rakensin robotin siis Tero & Kimmo Karvisen Sulautetut-kirjan ohjeen mukaan. Tässä on aloitustarvikkeeni:

Aloitustarvikkeet Höpö-robottiin.
Näitä kirjoja käytin apuna Höpön rakentamisessa ja sen ohjelmoinnissa.

Servojen testaaminen

Aloitin rakentamisen servomoottoreiden testaamisella. Olin vihdoin saanut oikean kokoiset servomoottorit: ensimmäisellä kerralla olin tilannut liian pienet. No, virheistä onneksi oppii! Nykyisin osia tilatessa tarkistan niiden tiedot kunnolla. Servomoottoreita on Sulautetut-kirjan mukaan siis eri kokoisia ja eri tekniikalla toimivia: niitä saa sekä rajoitetulla rotaatiolla että täydellä rotaatiolla. Rajoitetulla rotaatiolla toimivat servot sopivat useimpiin käyttöihin, koska niiden liikkeitä voi ohjata tarkasti. Ympäri pyörivissä servoissa voi ohjata vain niiden nopeutta ja suuntaa. Servomoottorit liikkuvat yleensä melko hitaasti ja melko suurella voimalla. Alla näkyy ostamani servomoottori, niihin saa valita erilaisia päitä. Pää kiinnitetään moottoriosaan. Päitä ei kuitenkaan vielä kiinnitetä servoon kiinni, koska niihin kiinnitetään ensin jalat, minkä jälkeen ne voi ruuvata servoon. Siitä lisää rungon rakentamisen-kohdassa!


Lisää kuvateksti
Ensimmäisenä selvitin, miten servo kytketään Arduinoon, jotta pystyn ohjelmoimaan niille oikeat arvot. Sulautetut-kirjassa on käytetty Arduino Diecimilaa, kun taas minulla on Arduino Uno. Mallien välillä ei pitäisi olla eroa koodissa: tarkistin servon koodin sekä Sulautetut-kirjasta että samojen tekijöiden Make: Sensors-kirjasta, jossa on käytetty Arduino Unoa. Kummassakin koodi oli melkeinpä tismalleen samanlainen, jee! Servon kytkennässä punainen johto liitetään Arduinon +5V pinniin, musta johto GND-pinniin ja keltainen johto johonkin vapaaseen digitaaliseen pinniin, laitoin sen D2-pinniin. Johtojen väreillä ei ole muuta väliä kuin merkkaaminen, eli yleensä aina mustaa käytetään maadoitusjohtona, punainen kytketään poweriin jne. Silloin itselle pysyy selkeämpänä se, mitä on kytkenyt. Tältä kytkentäni näytti:



Sekä Sulautetut-kirjassa että Make: Sensors kirjassa ohjeistettiin selvittämään ensin servon alue, eli sen minimikulman, maksimikulman ja keskipisteen arvot. Kirjoissa kerrotaan, että servot liikkuvat pulssien avulla, ja erimerkkiset servot käyttävät erilaisia pulsseja. Kun servoa testataan, Arduinolle syötetään koodia, joka lähettää servolle vähitellen pitenevää pulssia. Arduinosta valitaan sajakonsoli, joka näyttää arvoja eli pulssin pituuksia. Siitä tarkkaillaan, mitä arvoja sarjakonsoli näyttää, kun servo liikkuu ja pysähtyy, kun koodi kokeilee kokeilee kaikki mahdolliset pulssin leveydet aloittaen aivan liian lyhyestä (1 us) ja lopettaen liian pitkään (3 000 us). 

Pulssin pituutta mitataan mikrosekunneissa: yksi mikrosekunti eli us on 0,001 ms eli 0,000 001 s.  Lyhin pulssi kääntää servon toiseen äärilaitaan (0 astetta) ja pisin pulssi toiseen (180 astetta). Servon minimikulma voisi olla esimerkiksi 600 mikrosekuntia, maksimikulma 2400 mikrosekuntia ja keskipiste siten 1500 mikrosekuntia ((2400 + 600 ) / 2 = 1500), mikä taitaa servoilla olla melko yleinen keskipiste. 

Servon alueen etsimisen koodi näyttää seuraavalta:

Koodi on otettu kirjasta Sulautetut, tekijöinä Timo Karvinen ja Kimmo Karvinen
Kesti vähän aikaa päästä jyvälle, mitkä omien servojeni arvot olivat. Servo tuntui ensin pyörivän lujaa, sitten todella hitaasti kunnes pysähtyi, ja sitten taas lujaa. Mutta uskoisin, että se katsottiin liikkuvaksi silloin, kun se pyöri hitaasti. Ehkä nopean liikkumisen vaiheessa (joka alko yleensä arvosta 1) se asettui jotenkin alkuperäiseen kulmaan? Hidas liikkuminen nimittäin alkoi noin arvosta 400 ja loppui noin arvoon 2400, mitkä olisivat samaa suurusluokkaa esimerkkien kanssa.

Seuraavaksi Sulautetu-kirjassa syötettiin servolle arvo joka siirtää sen keskipisteeseen. Kyseinen koodi näyttää tältä:

Koodi on matkittu kirjasta Sulautetut, tekijöinä Tero Karvinen ja Kimmo Karvinen

Seuraavaksi tein kirjan ohjeiden mukaisesti koodin, joka siirtää servon ensin keskelle, sitten maksimikulmaan, takaisin keskelle ja lopuksi minimikulmaan. Käytin tässä oman servoni arvioituja arvoja.

Koodi on matkittu kirjasta Sulatetut, tekijöinä Tero Karvinen & Kimmo Karvinen

Rungon rakentaminen


Seuraavaksi itse rungon kimppuun! Minulla oli kaksi metallista henkaria, joista toisesta leikkasin kirjan ohjeiden mukaisesti 28 cm sekä 25 cm palaset.


Pääsin myös ensimmäistä kertaa testaamaan voimaleikkurit. Hyvin ne leikkasivat metallia! Yritin muotoilla niitä kirjan ohjeiden mukaisesti, mutten ihan saanut oikeanlaisia. No, niitä voi kyllä muotoilla myöhemminkin. Laitoin takajalkoihin lämpökutistesukat, jotta pito on parempi. Eli leikkasin ostamani lämpökutistesukista n. 10 cm palaset, sujautin ne Höpö-robon jalkoihin, lämmitin niitä tulitikulla jotta ne kutistuvat, ja valmista tuli! Muotitietoinen pieni Höpö, oletpas nyt nättinä <3 


Seuraavaksi kiinnitin jalat servon muovivarteen ujuttamalla rautalankaa muoviosan reikien läpi ja kiertämällä sen jalan ympärille. Laitoin vielä kuumaliimaa kiinnityskohtiin, vaikka aluksi minulla olikin ongelmia kuumaliimapistoolin toimimisen kanssa.

Jalka kiinnitetään servon pidikkeeseen / osaan rautalangalla.

Jalka on nyt kiinnitetty kolmesta kohdasta.

Lämpökutistesukat estävät liukkautta.
Jalkojen kiinnityskohtiin laitettiin vielä kuumaliimaa.

Runko muodostetaan kahdesta servomoottorista. Sen takia aiemmat todella pienet moottorit eivät käyneet tähän projektiin, koska vaikka teho olisikin riittänyt, olisi ollut hankala saada niiden päälle Arduinoa, sen alustaa ja ultraäänisensoria. Aluksi leikkasin ohjeiden mukaisesti kummastakin servosta toisen ulokkeen pois. Käyti mattoveistä ja voimaleikkureja, ja jälki olikin sen mukaista:

Tämä uloke piti saada pois.

Tulipas rumaa jälkeä!

Kirjassa neuvottiin käyttämään apuna tarvittaessa viilaa, ja avopuolisoni hoksasikin töistä tullessaan, että meillä on kynsiviiloja. Nekin toimivat! Saimme hiottua ulokkeet kokonaan pois, eikö olekin paljon parempi?

Viilalla hiotut servomoottorit.


Sain kuumaliimapistoolinkin vihdoin toimimaan: annoin sen olla tarpeeksi kauan lämpenemässä, ja avopuolisoni pidemmillä sormillaan painoi samalla liimapatruunaa eteenpäin, kun painoi itse pistoolista. Jee, servomoottorit on nyt liimattu!

Moottorit piti liimata yhteen tällä tavalla, valkoisiin kohtiin kiinnitetään lopulta jalat.

Kirjassa neuvottiin käyttämään Arduinon alustan tekemiseen esimerkiksi kirjoituskoneesta löytyviä metalliliuskoja, mutta minulla ei sellaisia ollut. Tutkailinkin Clash Olsonin kaupasta, mitä korvaavaa löytäisin siihen tilalle. Löysin metallisuikaleita (en valitettavasti muista niiden oikeaa nimeä), joka toimi kuin unelma! Sitä saa helposti muovattua haluamakseen, ja sitä pystyi helposti leikkaamaan voimaleikkureillakin. Siitä tuli oikein hyvä alusta Arduinolle, kun olin liimannut ne servojen päälle.

Viivoitin tärkeänä työkaluna <3

Arduino sopii metallisuikaleista tehdylle alustalle oikein hyvin.

Suikaleet liimattuna servomoottoreihin, jotka toimivat robotin runkona.

Kirjassa neuvottin kiinnittämään paristo tarranauhalla rungon taakse, mutta en saanut siihen reikää, jotta olisin voinut kirjan ohjeiden mukaan ruuvattua sen servoon kiinni. Sen sijaan liimasin tarranauhan servon runkoon. Kuumaliima tosin ei ole kovin pitävää (tässä vaiheessa minulla ei vielä ollut kontaktiliimaa), joten käytin myös rautalankaa apuna.



Tähän tarranauha olisi ohjeiden mukaan pitänyt ruuvata.

Päädyin liimaamaan sen kiinni.

Tarranauhani oli varmaan liian ohutta, koska paristo ei pysynyt siinä kunnolla vaan luiskahti helposti ulos. Päätin, että paristolle pitäisi olla teline. Olin onnekseni (ja harmikseni) rikkonut Hello Kitty -herätyskelloni, josta löysinkin sopivan kokoisen telineen! Leikkasin siitä vain hieman osia pois ja yritin silottaa ne parhaani mukaan. No, minulla ei ole käytössäni kunnon viilaa, joten jäihän se hieman röpelöiseksi. Mutta Höpöstä onkin tulossa vasta prototyyppi, joten kauneusvirheet eivät tässä vaiheessa haittaa!





Valmista tuli!

Seuraavaksi pääsin kiinnittämään jalat runkoon, Höpöhän alkaa jo näyttää ihan robotilta! En malttanut odottaa, että saisin sen liikkumaan! Koska jalat on kiinnitetty servomoottoreiden osiin, niille on varattuna omat kiinnityskohdat servoissa. 

Kumpikin jalka on kiinnitetty sille tarkoitettuun osaan servossa.

Ystäväni neuvoi, että Arduinon ei ole hyvä koskea metallisia telineitä, joten väkersin niiden päälle paksusta pahvista kotelon, johon Arduino mukavasti asettukin. Lisäsin pahvikoteloon vielä reunan, jonka liitin läpäisee.

Pahvikotelo Arduinolle.

Reikä, josta liittimen pää mahtuu.

Hienosti toimii!

Sitten ruuvasin jalat kiinni, jotta pääsen testaamaan Höpön liikkumista! Onpas jännittävää nähdä oman lapsensa kehitys :) 

Ruuvi paikoillaan!

Sitten oli vuorossa servojen kytkeminen Arduinoon, eli laitetaanpas Höpön "hermosto" kuntoon! Toimin kirjan ohjeiden mukaan, eli liitin servojen miinusjohdot (mustat) servosta toiseen yhdellä johdolla, ja sen jälkeen toisesta servosta Arduinon GND-porttiin. Arduinossa on rajallinen määrä vapaita pinnejä, joten liitin siksi servon kaksi johtoa samaan porttiin ja vasta sen jälkeen Arduinoon. Siinä täytyy käyttää ehkä hieman voimaakin! Sitten liitin virtajohdot (punaiset) samaan tapaan servosta toiseen, ja sitten Arduinon 5V-porttiin. Servon oransseja lankoja käytetään ohjaamiseen, ja niistä kytkin keltaiset langat takservosta porttiin 2 ja etuservosta porttiin 3.



Servojen mustat johdot liitetty samaan porttiin ennen Arduinoon kytkemistä.

Servosta lähtee musta johto groundiin, punainen johto 5V-porttiin, sekä keltainen johto porttiin 2.



Ohjelmoin tässä välissä eli ennen Höpön pään (ultraäänisensorin) kiinnittämistä Höpön kävelemään, mutta kerron ohjelmoinnista erillisessä postauksessa, minkä takia kerron siis jo tässä vaiheessa, miten kiinnitin ultraäänisensorin paikoilleen.

Ultraäänisensorin kiinnitykseen käytetään servon jatkojohtoa, jonka johtojen päästä on irrotettu muoviosa. Käytin johtojen kuorintapihtejä kuoriakseni johdon muoviosaa irti, jotta sain metallisen pään paremmin esille. 

Johtojen leikattu pää ennen kuorintaa.

Johtojen kuorinta.

Johdon toinen pää liimattiin servoon kuten kuvassa, jolloin siihen on helppo kiinnittää sensori. Sensorin pinnit kiinnitettiin siis moottoriin liimattuun servon jatkojohdon liittimiin.

Servon jatkojohdon pää on liimattu servomoottoriin.


Servon pinnit on kiinnitetty servon jatkojohdon liittimiin.
Nyt pieni Höpö on valmis tutkimaan maailmaa, onpas suloista! Olen saanut Höpön jo liikkumaan, mutta sen ohjelmoinnissa minun pitää vielä säätää esimerkiksi Höpön kävelyä, hän liikkuu hieman vinoon. Siihen tosin vaikuttaa myös jalkojen taittelu, olisi pitänyt ennen niiden liimaamista tarkistaa liikerata! Ultraäänisensorini on myös hieman erilainen kuin ohjeessa, koska ohjeen sensori on Ping jossa on kolme pinniä, kun taas minun sensorini HC-SR04 on neljä pinniä. Jossain edellisessä projektissani selvitinkin sensorien erilaisuuden vaikutuksen niiden ohjelmointiin, mutta en ole tässä projektissa kerennyt vielä perehtyä siihen. Tietenkin haluan jossain vaiheessa myös joskus testailla omaa koodiani ja erilaisia sensoreita! 

Tässä vielä hieno esitys Höpön jaloittelusta, eikös olekin taitava <3 Johdon avulla häntä ohjelmoidaan, eli sitä ei tarvita muuhun (virtakin kun tulee paristosta). Johdon paino vaikuttaa Höpön liikkeisiin, eli pitäisi tehdä kytkin tai onnistua nappaamaan johto pois ennen Höpön liikkeelle lähtemistä, niin näkisi paremmin sen liikkumisradan. No, siinäpä kehittämistavoite!



Mitä ongelmia kohtasin tässä projektissa ja niiden ratkaisuja:

- Liimaamisen kanssa oli ongelmia. Kuumaliimapistooli ei aluksi meinannut toimia, ja vähän väliä jokin osa irtosi. Jopa moottorit irtosivat kesken kävelyn toisistaan, voi ei! Höpö raukka. Ratkaisin ongelman ostamalla kontaktiliimaa, sillä osat pysyvät paikoillaan.

- Paristo ei pysynyt kunnolla kiinni tarranauhassa. Ratkaisin ongelman rakentamalla paristolle oman telineen vanhasta herätysellon osasta.

- Arduinon kiinnittäminen alustaan. Minulla ei ollut vanhojen kirjoituskoneiden osia, mutta löysin kaupasta helposti taiteltavaa metalliliuskaa. Askartelin vielä sen päälle pahvista kotelon, jotta Arduinon olisi siinä parempi olla.

- Sain paristot välillä oikosulkuun, melko vaarallista! Pitää opiskella enemmän elektroniikkaa, olen siinä vielä noviisi. Minulla on kyllä Udemyssa menossa elektroniikan kurssi ja joitakin elektroniikan kirjoja, mutta olen IT-opintojen myötä keskittynyt tällä hetkellä enemmän esimerkiksi ohjelmoimiseen ja tekoälyyn. Mutta on elektroniikan opiskelullekin vielä joskus aikaa, koska on paljon kivempaa ymmärtää täysin, mitä tekee, ja myös turvallisempaa.

- Höpön kävely ei pysy kunnolla tasapainossa, se liikkuu hieman sivuun ja välillä saattaa kaatuakin. Ongelmaan vaikuttaa esimerkiksi johdon paino ja se, onko paristokotelo tasapainossa. Kytkimen tekeminen helpottaisi oikean liikeradan tarkkailua, kun johto ei enää vetäisi Höpön liikettä sivuun. Myös jalat saattavat hieman puoltaa, koska jokin jalka on toista lyhyemmäksi taivutettu. Keskityn näiden ratkaisuihin paremmin sitten, kun viimeistelen Höpön ohjelmoinnin. Siitä siis enemmän toisessa postauksessa!


Ei kommentteja:

Lähetä kommentti