perjantai 5. lokakuuta 2018

Tanssimatto projekti - osa 2

En koskaan sitten julkaissut tanssimatto-projektilleni jatko-osaa, vaan melkein valmis kirjoitus unohtui pöytälaatikkoon. No parempi kai myöhään kuin ei milloinkaan, joten tässä se tulee nyt hieman viiveellä...

Maton kytkeminen tietokoneeseen kävi yllättävän helposti. Katsoin näistä ohjeista vinkkejä. Ja suurimmaksi osaksi vain vinkkejä, koska ohjeessa ei ollut selitetty kaikkia asioita aivan viimeisen päälle, vaan jouduin kokeilemaan asioita itse yrityksen ja erehdyksen kautta. Siksi ajattelin itse kirjoitella tähän yksityiskohtaisesti kuinka oma projektini eteni, niin ehkä joskus joku muu on samanlaista projektia toteuttamassa. Ja minä tosiaan en esimerkiksi ymmärrä ohjelmoinnista tai elektroniikasta kovin syvällisesti, vaan ihan maalaisjärjellä hommat järkeilin ja yksinkertaisella selkokielellä pyrin ne selittämäänkin.


Perusperiaate tässäkin vekottimessa on yksinkertainen. Tanssimatto on käytännössä vain rivi isoja painonappeja. Ja jos on kokemusta Arduinosta, varmaankin tietää että painonappien kytkeminen Arduinoon ja niiden ohjelmoiminen on helppo homma. Sen jälkeen pitäisi vain saada Arduino lähettämään tietokoneelle ja tanssipeleille viestiä, että nyt ois tämmöistä nappia painettu.

Itse matto on varmaankin projektin helpoin osuus. Napit ovat kaksi isoa pintaaa johtavaa materiaalia, joiden välissä on jokin pehmyttä materiaalia estämässä pintojen kosketuksen toisiinsa. Kun päälle tulee painoa (jalka), pinnat painautuvat toisiaan vasten ja syntyy kontakti. Matto minulla oli valmiina, mutta sen voi helposti rakentaa itse vaikkapa alumiinifoliosta ja pahvista, kuten alussa mainitussa linkissä on opastettu.

Aloitin projektin heivaamalla pois tanssimaton sisällä olleen piirilevyn. Se oli kiinni riviliittimellä ja sen avulla oli myös tosi kätevä yhdistää Arduino tanssimattoon.

Tanssimaton"tietokone" kuorissaan

Kuoret avattuna


Kun kotelon sisältä on piirilevy poistettu, jäljelle jää liitin josta tulee nappien signaalit. Siihen on helppo kytkeä pieni pätkä piikkirimaa joka on helppo tökätä Arduinoon kiinni.


Jokaiselta napilta tulee oma johtimensa ja yksi yhteinen iso johdin joka täytyy kytkeä Arduinon GND-nastaan. Muut johtimet kytketään I/O -portteihin ja ei ole niin väliä mikä osuu mihinin, koska ne voi ohjelmoidessa testailla tietokoneella ja koodailla kohdilleen.

Tanssimaton sisällä

Korvasin piikkiriman yhden piikin (kaikkien painikkeiden yhteinen johdin) hyppylangalla

Liitin tökätty Arduinoon. Muut yhdistyvät I/O -pinneihin, mutta nappien yhteinen johdin yhdistyyy GND:hen

Näin menee kytkentä Arduinoon. Sitten Arduino kiinni tietokoneeseen ja ohjelmaa sisään. Painonappeja Arduinossa käytettäessä pitää käyttää ns. ylösvetovastuksia. Mietin, että onko tämä aivan pakollista, koska minulla ei ollut mitään vastuksia hollilla eikä muutenkaan haluaisi kytkentään enempää osia, jotta kortti mahtuisi koteloon. Lueskelin intternetistä, että Arduinossa on sisäänrakennetut ylösvetovastukset jotka voi aktivoida koodilla (INPUT_PULLUP)

Vaihdoin koodista inputtien numeroiksi ne sisääntulot joihin maton kytkin. Sitten ajoin vain koodin sisään ja testasin. Nappeja painelemalla sarjaporttimonitoriin tuli tekstiä. Jos painoi maton vasenta nuolta, ruutuun piti tulla "l" , oikeaa painettaessa "r" ja niin edelleen. Olisi pitänyt sattua aikamoinen lottovoitto, että omat kytkentäni olisivat heti kerralla olleet vastaavanlaiset kuin instructablesin ohjeessa olleet. Painelin kaikkia nappeja ja katsoin mitä ne antavat sarjamonitoriin. Sitten vain vaihtelin koodiin mitä niiden oikeasti pitäisi antaa.

Sen jälkeen käynnistin dance_pad.py -python koodin. Python pitää olla tietysti asennettuna koneelle, että koodin voi ajaa. En itse ymmärrä pythonilla ohjelmoinnista mitään, mutta minulla oli se jo valmiiksi koneelle asennettuna, koska jotkut ohjelmat ovat sen asentamista jo aiemmin vaatineet  Siksi dance_pad.py -tiedoston kuvake näytti tältä:


Jos kuvake näyttää vain tyhjältä paperilta, silloin todennäköisesti pythonia ei ole asennettu ja kone ei osaa koodia suorittaa. Klikkasin kuvaketta ja jokin musta laatikko vain nopeasti välähti ruudussa. En yhtään kerinnyt lukea mitä siinä sanottiin. Klikkasin kuvaketta uudelleen ja painoin heti perään näppäimistön PrtSc -nappia, jolla sain napattua kuvakaappauksen työpöydästä. Sitten avasin kuvankäsittelyohjelman (Windowsin Paint toimii hyvin) ja painoin CTRL+V jolloin ruutukaappaus ilmestyi siihen. Siitä pystyin virheilmoituksen lukemaan. Se kertoi jonkun asian puuttuvan. Se oli muistaakseni joku "importlib".

Googlettelin ilmoitusta, ja niinpä sieltä löytyi ohjeita jotta pitää asentaa jotain pythonin kirjastoja. Löysin jonkun valmiin asennuspaketin ja sen asentaminen meni ihan kuin minkä tahansa muunkin ohjelman asentaminen. Käynnistin koodin ja taas vain nopea välähdys. Jotain toisia kirjastoja edelleen puuttui ja googlettelemalla löytyi niiden asennustiedostot. Mutta niiden asentaminen ei ollut aivan niin yksinkertaista, vaan piti osata olla hieman nörtti niiden asentamiseksi. Paketissa ei ollut yhtä asennustiedostoa, vaan kansio jossa oli erilaisia tiedostoja ja mm. setup.py. Klikkasin sitä, mutta taas vain nopea välähdys ruudussa. Etsin netistä apua ja selvisi, että kirjasto pitää asentaa komentokehotteen kautta komennolla PYTHON SETUP.PY

Hetken oli mennä sormi suuhun, mutta ymmärsin kuitenkin sen verran komentokehotteen käyttöä, että sain tämän ratkottua. Komentokehotteen voi käynnistää kirjoittamalla windowsin hakuun cmd tai komentokehote. Pieni musta ikkuna käynnistyy ja oletuksena siinä oleva hakemistopolku osoittaa c:\Users\(käyttäjänimi). Tuo hakemisto pitää saada osoittamaan asennettavan pythonkirjaston kansioon. Jotta asia olisi helpompi, kopioin kansion suoraan c-aseman juureen. Eli C asemalla on kansio X jonka alla on heti setup.py ja muita tiedostoja. Nyt komentokehoitteeseen kirjoitetaan komento cd c:\X\ ja painetaan entteriä. Sitten kirjoitetaan komento python setup.py ja nyt ruudussa pitäis rullata tekstiä ja lopuksi tulla jotta sennus on valmis.

Minun piti vielä asentaa yksi pythonin kirjasto ennen kuin dance_pad.py suostui käynnistymään. Sen asentaminen meni samalla tavalla komentokehotteen kautta kuin edellinen. Jos olisi tarkemmin lukenut tuota netin ohjetta, niin siellä kyllä sanotaan, jotta täytyy asentaa python kirjasto. mutta ei sielläkään sanottu miten niitten asentaminen tapahtuu. No mutta kun kaikki oli asennettu, niin komentokehotteen laatikko ei enää välähtänyt ruudussa, vaan se jäi käyntiin. Oletin sen nyt toimivan ja starttasin StepManian. Ja hienosti matto toimikin heti. Piti vain asetuksista asettaa kaikki nappulat paikoilleen.

Mutta huomasin vasta myöhemmin, että nappulat toimivat ikäänkuin väärin päin. Eli peli tunnisti nappien olevan valmiiksi pohjassa ja kun niiden päälle polkaisi, peli tunnisti napin olevan silloin ylhäällä. En tätä heti huomannut, koska peli vaikutti tunnistavan ja hyväksyvän kaikki tanssimaton painallukset oikein. Ainut mikä toimi vähän kummallisesti olivat pitkät painallukset. Kun pelissä piti painaa nuolta pitkän pohjassa, peli ilmoitti sen aina hudiksi. Mutta jos sellaisen "nuotin" kohdalla painoi maton painiketta vain kerran nostaen jalan heti pois, nuotti rullasi hyväksytysti loppuun asti. Arvelin tämän johtuvan vain jostain pelin asetuksista tai pelin muuten bugittavan tms. Huomasin virheen vasta kun kokeilein huvikseni peliä kytkemättä mattoa tietokoneeseen ja pelasin pelkästään näppäimistön nuolipainikkeilla. Silloin pitkätkin painallukset toimivat oikein päin. Virhetoiminnan näkee kyllä heti siitäkin, jos pelissä olevien nuolikuvakkeiden ympärillä on valkoinen reunus, joka osoittaa niiden kaikkien olevan aktivoitu. Normaalisti reunus välähtää vain kun nappia painetaan. Sitä en voinut aiemmin tietää, koska kokeilin peliä ensikertaa.

Mietin miten ihmeessä saisin käännettyä näppäinten komennot toisinpäin. Arvelin sen olevan yksinkertaisinta python -koodia muuttamalla. Avasin koodin tekstieditorilla ja kaikki teksti oli yhdessä pötkössä. Ei sen tietenkään siltä kuuluisi näyttää, joten etsin netistä jotain simppeliä työkalua ja löysin Subline Textin. Avasin koodin siltä ja se näytti tältä:


Näyttää aika yksinkertaiselta ja helpolukuiselta koodilta. Vaihtelin vain kaikki key_down -komennot key_up -komennoiksi ja toisinpäin. Sen lisäksi pythonista täytyy huomata rivi 4: ser = serial.Serial('COM5', 9600). Tuo COM numero täytyy olla oikein, muuten tanssimatto ei pelitä. Se on siis se sama COM, jota käytetään Arduinon ohjelmoinnissa ja Ardiono IDE -ohjelman kautta sen näkee maton ollessa kytketty. Tallensin koodin, käynnistin sen ja kokeilin taas StepManiaa. Ja nyt kaikki toimi niin kuin pitikin. Hurraa!

Lopuksi vielä lähdin paketoimaan vekotinta takaisin koteloonsa. Tein usb-johdolle tilaa sahaamalla osan pois paristokotelosta. Lisäsin kytkentään vielä 3mm ledin, koska sille oli tyhjä paikka laiteen kannessa.

Tein usb johdolle tilaa paristoliitintä sahaamalla


Lisäsin kanteen vielä ledin.

Arduino soviteltuna sisään
Arduinon ja kaapelin asentamisen jälkeen laitteen kansi mahtuu melkein, mutta ei kuitenkaan enää aivan paikoilleen. Köytin sen vain paikoilleen teipillä. Kyllä kortille olisi ehkä mahdollista sahata lisää tilaa tai voisin jokun erilaisen koteloinnin Arduinolle värkkäillä. Tai kenties Arduino Nano mahtuisi laitteen sisään täysin ongelmitta. Mutta tämä vekotin on minulle nyt aivan riittävän hyvä näin enkä viitsi kauheasti enempää tähän aika käyttää.

Kotelo sievästi teipattuana kiinni
Mukava projekti ja oli helppo rakentaa. Vähän kuin rakennussarjaa olisi tehnyt. On erityisen mukava, että kortti on helposti irroitettavvissa muuhunin käyttöön. Tanssimatto on ihan hauska. Olen tykännyt aina tällaisista rytmipeleistä.