sunnuntai 13. lokakuuta 2019

Mitä koneoppiminen on?


Olen todella innostunut tekoälystä! Ostin jokin aika sitten Humblebundlesta tekoälypaketin, ja miten innoissani siitä olenkaan! Harmi, ettei monta kirjaa voi lukea yhtä aikaa. Tai no oikeastaan kyllä luenkin. Ostamaani tekoälypakettiin kuuluu 16 kirjaa koneoppimisen  ja muiden tekoälyn osa-alueiden, kuten konenäön, toteuttamisesta Pythonilla ja muilla koodauskielillä. Suosittelen muuten tutustumaan Humblebundleen, siellä on monesti todella hyviä kirjapaketteja ja osa niiden hinnasta menee hyväntekeväisyyteen.  Tällä hetkellä inspiraationi kohdistuu koneoppimisen ja siihen liittyvää konenäön, neuroverkkojen (liittyy myös koneoppimiseen) ja ROS:in eli Robot operation systemin opettelemiseen, ja oman tekstiseikkailupelin tekemiseen Pythonilla. No, olen kaikki jo aloittanutkin, mutta pitää tehdä yhtä kerrallaan, nyt keskityn koneoppimiseen. 

Tämän blogitekstin lähteenä käytän kirjaa Artificial intelligence with Pyton: A comprehensive guide to building intelligent apps for Python beginners and developers (tekijä: Prateek Joshi). Käytän tämän ja muiden kirjojen harjoitusten tekemiseen Python 3:sta ja siinä NumPy, SciPy, scikit-learn ja matplotlib -kirjastoja. Käytän tällä hetkellä pythonia Spyderilla.


Tekoäly


Tekoälyn sovelluksia on mm. konenäkö, puheen tunnistaminen, tekstin tunnistaminen, pelit ja robotiikka. Tekoälyssä on myös useita tutkimisalueita, esimerkiksi koneoppiminen / kuvioiden tunnistaminen, logiikkaan perustuva tekoäly, etsimistekniikat, tiedon esittäminen (knowledge prestentation), suunnitteleminen, heuristiikka sekä geneettnen ohjelmointi. Iso osa tekoälyn tutkimuksesta keskittyy rationaalisten tekijöiden (agenttien) etsimiseen. Rationaalisuus viittaa kykyyn tehdä oikeita päätöksiä annetuissa olosuhteissa kun se suoritetaan niin, että tekijälle koituu siitä maksimaalinen hyöty. Tekijä käyttäytyy rationaalisesti, jos se suorittaa toimintoja saavuttaakseen päämäränsä tiettyjen annettujen sääntöjen mukaan, eli se havainnoi ja toimii saatavilla olevan informaation mukaan. Tekijän on tarkoitus olla älykäs ja riippumaton, eli se pystyy sopeutumaan muuttuviin olosuhteisiin. Sen tulisi tiedostaa ympäristönsä ja toimia tarkoituksenmukaisesti saavuttaakseen tuloksen, joka on sille hyödyllisin. Yksi tapa tuoda tekijälle älykkyyttä on käyttää dataa ja kouluttamista eli koneoppimista.

Koneoppiminen


Koneoppimisessa koneet ohjelmoidaan käyttämään nimettyä (label) dataa annetun ongelman ratkaisemisessa. Koneoppimista käytetään esimerkiksi kuvien tunnistamisessa, robotiikassa ja puheen tunnistamisessa. Käymällä läpi dataa ja siihen liitettyjä nimityksiä (labels, onkohan suomennos oikein), kone oppii huomaamaan kuvioita ja suhteita. Koska tietokoneet ovat hyviä datan analysoimisessa, ne pystyvät käyttämään oppimismalleja (learned models). Nämä mallit saavutetaan harjoituksen kautta, eli kone käy läpi useita syötteitä ja niitä vastaavia ulostuloja muodostaakseen mallin, mistä syntyy usein monimutkaisia matemaattisia malleja. Mutta koneoppimisessa ei tarvitse päätellä syntyvää matemaattista mallia, koska kone muodostaa sen datan perusteella. Tarvitsee siis vain luoda lista syötteistä (inputs) ja niitä vastaavista ulostuloista (outputs). Malli, jonka saamme, on siten suhde luokiteltujen syötteiden ja haluttujen ulostulojen välillä. 

Ohjattu ja ohjaamaton oppiminen 


Koneoppiminen jaetaan ohjattuun ja ohjaamattomaan oppimiseen, mutta muitakin jakotapoja on olemassa. Ohjatussa oppimisprosessissa mallin muodostaminen pohjautuu luokiteltuun (labeled) harjoitusdataan. Esimerkiksi jos haluamme rakentaa systeemin, joka automaattisesti ennustaa ihmisen tulotason pohjautuen moniin parametreihin kuten ikään, asuinpaikkaan, koulutustasoon jne, luomme tietokannan jossa on kyseiset parametrit ja luokittelemme / nimeämme (label) sen eli kerromme algoritmillemme, mitkä parametrien arvot vastaavat mitäkin tulotasoa. Algoritmi oppii sen avulla laskemaan henkilön tulotason pohjautuen sille annettuihin parametreihin.

Ohjaamaton oppiminen pohjautuu mallin rakentamiseen ilman luokiteltua harjoitusdataa. Koska luokitteluja ei ole saatavilla, käsitysten rakentaminen pohjautuu pelkästään annettuun dataan. Eli jos haluamme jakaa datan ryhmiin, emme tiedä jakamisen eli eri ryhmiin kuulumisen kriteerejä. Algoritmin tulee siis jakaa data ryhmiin parhaalla mahdollisella tavalla. 

Huom, en ole varma mikä suomennos olisi hyvä sanalle label, koska classification eli luokittelu on oma terminsä. Luokittelussa törmätään usein moneen nimeämiseen eli labeliin, jotka voivat olla joko numeroita, sanoja tai muuta. Sklearnigissa labelsien tulee olla numeroita, mutta usein ne ovat kuitenkin ihmisten luettavissa eli kirjaimina, jolloin ne tulee muuttaa numeroiksi käyttämällä label encodingia.

Mitä luokittelu on?


Luokittelu tarkoittaa tekniikkaa, jossa luokittelemme datan annettuihin luokkiin. Luokittelumalli pohjautuu harjoitusdataan, jossa on datapisteet ja niitä vastaavat luokittelut. Esimerkiksi jos haluamme tietää, onko kuvassa kissa vai koira, rakentaisimme harjoitusdatasetin, joka sisältäisi luokat sekä kissojen että koirien kuvista. Näiden harjoitusnäytteiden avulla malli koulutetaan. Näytteiden eli harjoitusdatan määrän tulisi kuitenkin olla iso, jotta vältytään harjoitusdatan ylisovittamiselta. Ylisovittaminen tarkoittaa sitä, että malli ei toimi hyvin tuntemattomassa datassa, koska se sovittautui liikaa pienen harjoitusdata kuvioihin. Eli malli tavallaan näkee kuvioita / malleja siinäkin, missä niitä ei välttämättä ole, ja luokittelee siten väärin.

Koneoppimisen algoritmien takia datan tulee olla muotoiltu tietyllä tavalla, ennen kuin harjoitus voidaan käynnistää. Dataa täytyy siis esikäsitellä ja muotoilla se oikeaan muotoon, mikä vie monesti paljon aikaa.
Esikäsittelyn tekniikoita on mm. binarisaatio (binarization), keskiarvon poistaminen, skaalaaminen ja normalisaatio. Binarisaatiossa numeeriset arvot muutetaan boolean arvoiksi, eli esimerkiksi kaikki arvot jotka ovat yli 1 merkitään ykköseksi, ja kaikki arvot jotka ovat alle 1 merkitään nollaksi. Keskiarvon poistamisessa piirrevektorin piirteet keskitetään nollaan. Tämä auttaa poistamaan vinoumaa. Note to self: tähän asiaan pitää perehtyä vielä tarkemmin. Skaalaamisessa piirrevektorin piirteet (features) skaalataan, koska ne voivat vaihdella paljonkin. Esimerkiksi maksimiarvoksi voidaan asettaa 1, ja muut arvot skaalataan siihen. Normalisaatiossa piirrevektorin arvot muokataan niin, että ne voidaa mitata yleisellä skaalalla (common scale). Esimerkiksi jokaisen rivin absoluuttisten arvojen summaksi voidaan asettaa 1, tai sitten neliöiden summaksi asetetaan 1.

Kerron erilaisista luokittelutekniikoista toisessa postauksessa. Kirjoitan myös jossain vaiheessa esimerkkejä siitä, miten koneoppimista voidaan käytännössä toteuttaa Python-koodilla. En vain ole varma, onko tekijänoikeuksien takia sallittua laittaa samaa koodia, jota on kirjan esimerkeissä, vaikka kertoisikin lähteen. Aiemman postauksen Sulautetut-kirjan tekijät olivat sanoneet toisessa kirjassaan, että koodia saa käyttää, jos kertoo lähteen. Pitää selvitellä, miten asia on näiden kirjojen kanssa! 

Suloinen Pepper-robottikin hyötyy tekoälystä!

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!