Servojen ohjaus node.js kirjastolla

Alunperin ajatukseni oli ohjata servoja Pythonilla. Aloin kuitenkin tutkimaan mahdollisuutta käyttää Node.js ja sille löytyikin sopiva kirjasto GPIO pinnien käskyttämiseen. Pigpio mahdollistaa PWM -signaalin syöttämisen servolle. Lisäksi Node sisältää funktiot http pyyntöjen käsittelyyn, joten valinta oli helppo.

Alla on koodi servojen käskyttämiseen selaimen kautta. Esimerkiksi pyynnöllä vasen/30 ajetaan vasenta servoa keskikohta + 30 millisekuntia pitkällä PWM pulssilla.  Minulla oli aluksi ongelmia saada toinen servo toimimaan. Tuli ilmi, että Pigpio käyttää GPIO numeroituja pinnejä eikä rautatasolla numeroituja kuten Python. Tämän takia Python skriptissä olevat pinnit 3 ja 5 ovat muuttuneet numeroiksi 2 ja 3.

Runko valmis

Sain rungon tulostettua ja kiinnitettyä pidikkeet siihen.  Korkeus suunnassa olevat ruuvien reijät eivät tulleet oikeille kohdille, joten kiinnitin osat muovilla toisiinsa. Riittävän lujassa tuntuvat pysyvän näinkin.

 

Rungon toinen versio

Sain rungon toisen version mallinnuksen valmiiksi. Tällä kertaa pidikkeet kiinnitetään pulteilla toisiinsa eikä runkoa tarvitse tulostaa yhdellä kertaa kokonaan.

Raspberry Pin tulostettu pidike olikin jo eilisessä viestissä esillä. Kiinnitys tapahtuu asettamalla piirikortti tappien päälle. Tarvittaessa pitää tukee sitä teipillä.

Pidikkeet servolle ja Raspberry Pille

Sain suunniteltua ja tulostettua pidikkeet servolle ja Rasperry Pille. Tein kumpaankin M5 kokoiset kierteen, joten ne voidaan liittää itse runkoon pulteilla. Servo ei ole tällä hetkellä kiinni muuten kuin urissa. Lisään siihen mahdollisesti kaksipuoleista teippiä, jos se pääsee liikkumaan liikaa.

 

Takaisin suunnittelupöydän ääreen

Aloin kiinnittämään servoja ja Raspberryä runkoon ja siinä ilmeni pari ongelmaa. Servojen kiinnityskohdat olivat liian ahtaat. En tiedä johtuiko tämä väärästä mitoituksesta vai oliko tulostuksen yhteydessä muovi kutistunut.

Servot olisin saanut kiinni poikittain.  Suurempi ongelma oli, että Raspberry Pin kiinnitysreiät ovat M2.5 kokoa eikä M3 kuten emolevyn ruuvit olivat. Ehdin jo tehdä M3 kierteet tappeihin enkä uskaltanut vääntää M3 ruuveja väkisin läpi piirilevystä. Lisäksi en omista työkalua M2.5 kierteen tekoon, joten kiinnitykseen pitää keksiä toinen vaihtoehto.

Runko tulostettu

Sain eilen rungon tulostettua. Tulostuksessa kesti 16 tuntia joten, jos siihen joutuu muutoksia tekemään, täytyy miettiä vähän modulaarisempaa rakennetta.

Ensisilmäyksellä kuitenkin runko  näyttää aika hyvältä. Seuraavaksi pitäisi alkaa servoja sovittelemaan siihen.

Runko mallinnettu

Sain rungon ensimmäisen version mallinnuksen valmiiksi. Servot päädyin laittamaan pystyyn, jotta ne vievät vähemmän tilaa. Akulle on tehty paikka keulaan ja se on mallinnettu USB virtapankin mitoilla.  Päälle mallinsin paikan Raspberry Pi kortille ja se olisi tarkoitus laittaa kiinni tietokoneen emolevyn kiinnitysruuveilla.

Servojen ohjaus Pythonilla

Ensimmäinen testi servojen ohjaukseen Pythonilla onnistui hyvin. Ympäripyörivät servot ovat hieman erilaisia käyttää normaaleihin servoihin nähden. Normaalisti servoille annetaan PWM signaalina arvo mihin kulmaan servo halutaan. Ympäripyöriville servoille annetaan myös PWM arvo, mutta kulman sijaan se määrittää miten nopeasti servo pyörii.

Ensimmäisen servon yhdistin Raspberry Pin GPIO pinneihin siten, että maa tuli pinnistä 6, virta pinnistä 4 ja signaali pinnistä 3. Toinen servo sai maan pinnistä 0, virran pinnistä 2 ja signaalin pinnistä 5.

Alla on Python koodi, jolla testasin servojen toimivuuden.

Uusi projekti alkuun

Olen suunnitellut uuden projektin aloittamista. Tavoitteena on tehdä kännykällä ohjattava robotti, jonka aivoina toimisi Rasbperry Pi. Minulla on aikaisemmin hankittuna kaksi ympäripyörivää servoa, joita olisi tarkoitus käyttää moottoreina. Rungon tulen suunnittelemaan Fusion 360 ohjelmalla ja tulostamaan 3D- tulostimella. Ohjelmointiin tulen käyttämään Raspberry Pin GPIO Python kirjastoa.

Raspberry Pi 3 model B saapui postissa ja ensimmäisenä siihen piti saada käyttöjärjestelmä sisään. Raspbianin uusimman version asentaminen muistikortille menikin ilman ongelmia. SSH:llä yhdistettäessä tuli kuitenkin ilmi, että tietoturvasyistä SSH palvelin on poistettu käytöstä. Tämä aiheutti ongelmia headless setupin tekemisessä.

SSH palvelimen saa kuitenkin käyntiin lisäämällä ”ssh” nimisen tiedoston muistikortin juureen. Itse tein tämän komentorivillä seuraavilla käskyillä. Muistikorttini asematunnus oli m.

m:
echo . > ssh

Tämän jälkeen SSH yhteys Raspberryyn onnistui. Seuraavaksi pitäisi alkaa tutkimaan servojen liittämistä GPIO pinneihin sekä onnistuuko servojen ja koneen ajaminen USB virtapankin kautta.