Cilj delavnice je bil izdelati labirint, po katerem kotalimo kroglico. Labirint je na plošči, ki jo lahko z dvema servo motorjema nagibamo okrog dveh osi tako, da premikamo dlan (na katero je nataknjena rokavica, v kateri je skrit pospeškomer). Vse skupaj vodi mikrokontroler Arduino.
Labirinte je sestavljalo trinajst deklet in fantov (no, dekleti sta bili v manjšini), vodili pa smo jih študentki Anka in Nina ter jaz.
# Mizarjenje
Ne iz lenobe, temveč ker se mi je zazdelo, da osnovnošolci pravzaprav radi žagajo, vrtajo in razbijajo, sem privlekel nerazžagan les: 30 cm široko smrekovo desko in letve velikosti 4×1 cm.
Najprej smo poračunali, kako dolge letve potrebujemo. Tu smo naleteli na znani mizarski trik: če iz letev širine 1 cm sestavljaš okvir velikosti 30 x 22 cm, potrebuješ dve letvi dolžine 30 cm in dve dolžine 20 cm, drži? Potrebovali smo še stranski pokončni letvi, ki držita okvir. Tu dolžina ni tako pomembna, le enako dolgi morata biti.
Ker starši niso podpisali izjave, da jih ne bo motilo, če pustijo njihovi otroci kak prst na FRIju, udeležencev nismo spustili za cirkular, pač pa so pod našim skrbnim očesom uporabljali vbodno žago, s katero se človek precej težje poškoduje. (V otroških rokah je zagotovo v večji nevarnosti žaga kot otrok.) Nekatere je bilo sprva malo strah; ko so prežagali prvo desko ali letev, pa so videli, da je žaganje pravzaprav zabavno. V vse letve smo zvrtali luknje primernih velikosti – malo večje za vijake in manjše za osi.
Da, osi. Teh nismo imeli, pač pa v vseh boljše založenih trgovinah z žeblji prodajajo tudi žeblje. V Frižiderju imamo klešče za ščipanje žic. Fantje in punce pa so močni, zelo močni. Tako smo dobili osi za okvir. Osi za ploščo pa so lahko tudi nekoliko daljše. Torej cel žebelj.
Še kos lesomala, košček lesa z luknjo in pištola za lepljenje s plastiko, pa je bilo ogrodje nared.
Dan po delavnici sem sam prvič sestavil mizo. Prejšnje modele sta namreč sestavljali Nina in Anka. Priznati moram: moj okvir je bil nekoliko vegast. Neopazno, a kotnik me je hitro izdal. Večina udeležencev delavnice je bila natančnejša od mene.
# Motorji
Servo motorje so nam prijazno posodili na Pedagoški fakulteti (hvala!), saj so bili motorji, ki smo jih naročili posebej za delavnico, v petek šele na carini (in v času pisanja tega bloga še vedno tičijo tam! Dajmo no, fantje cariniki! Malo akcije, prosim! Vse bomo plačali, le motorje nam že dajte!).
En motor smo privili na stebriček in ga s kavljem povezali z okvirom. Drugega smo privili na okvir in ga s kavljem povezali z notranjo ploščo.
Ob pripravi delavnice smo odkrili, da so servo motorji tako močni, da jih ne moremo napajati z Arduinom. Točneje, lahko, vendar ob tem napetost na njih tako zaniha, da pokvari meritve s pospeškomera. (Problem nam je pomagal diagnosticirati Polž. Hvala tudi njemu!) Za motorje smo zato priskrbeli ločeno napajanje.
# Labirint
Najzabavnejši del je bil menda izdelava labirinta. Vzeli smo kapa-plošče (darilo FRIjeve Službe za komuniciranje, ki se ji je nabralo nekaj obrabljenih plošč za plakate). Bile so za podlago, pa tudi za stene. Te smo mazali z mekolom (za tole je boljši mekol ekspres, ki se hitreje posuši) in jih pripeli z buckami, da so se prijele).
Tule smo bili res domiselni. Ena skupina se je odločila za dvonadstropni labirint, z luknjo, skozi katero pade kroglica v spodnje nadstropje. Videli smo labirinte, kjer so kroglici zapirali pot mozniki. Ali druga, večja kroglica, ki se je kotalila po hodniku, iz katerega sama ni mogla priti. Videli smo labirinte, znotraj katerih so bile nekoliko dvignjene rampe z luknjami…
# Rokavice s pospeškomeri
Rokavice so bile v resnici nogavice, ki smo jim odrezali prste. Vanje smo všili pospeškomere. Najlepše gre kar tako, da zavihaš nogavico in pospeškomer všiješ v rob, iz njega pa gledajo le pini. Bolj praktična ideja, ki pa smo se je spomnili prepozno, je, da na pospeškomere namesto pinov prispajkamo kar žice. Bomo vedeli za drugič.
Pa še nekaj bomo vedeli za drugič: preden všiješ pospeškomer, si je dobro zapomniti, kako si ga obrnil, da ti ni potem potrebno tipati ali ugibati, s katere strani gredo pini.
Uporabljali smo digitalne pospeškomere s čipom MPU6050. Za naše namene bi bili veliko bolj simpatični ADXL335, ki ne zahtevajo dodatnih knjižnic, vendar imamo v Frižiderju le tri. So že naročeni, za prihodnje avanture.
# Umerjanje
Delavnica se je začela v petek popoldan. Računalniki so prišli na vrsto šele v soboto po kosilu.
Najprej smo morali ugotoviti, med kakšnimi koti (servo motorjev) se giba miza. Servo motorja smo priključili na pina 4 in 5.
#include <Servo.h>
Servo okvir;
Servo plosca
void setup()
{
okvir.attach(4); // servo za okvir je na pinu 4
plosca.attach(5); // ... za plosco pa na pinu 5
okvir.write(90); // postavimo motor na sredo
}
void loop()
{
}
Ob tem naj bi se okvir postavil v vodoraven položaj. Če se ni, smo sneli nastavek z motorja, poravnali okvir in nataknili nastavek nazaj.
Nato odkrijemo, kakšni so skrajni nagibi mize: okvir.write(90);
zamenjamo z okvir.write(50);
in pogledamo, kako daleč gre miza. Če bi šla še nižje, zamenjamo 50
s 40
ali celo 30
. Ker je miza simetrična in vodoraven položaj pri 90, lahko iz tega že izračunamo, kakšen je kot v nasprotno smer: če se miza v levo nagiba od 90 do 30, se v desno od 90 do 150. 60 sem in 60 tja. Te številke smo si brižljivo zapisali.
Podobno smo preverili še gibanje notranje plošče. Za primer recimo, da se ta giba med 50 in 130 (z 90 vmes, na sredini).
Nato je bilo potrebno odkriti, kakšne številke vrača pospeškomer.
#include <pospeskomer.h>
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print(readX());
Serial.print(' ');
Serial.print(readY());
Serial.print(' ');
Serial.print(readZ());
Serial.println();
delay(500);
}
Funkcije readX
, readY
in readZ
so v na hitro spisani knjižnici pospeskomer
. Ta ne deluje čisto dobro, zato je tudi (še) ne bom objavil. Sploh pa vsak tip pospeškomera zahteva svojo knjižnico, in bo imel namesto readX
kako drugo funkcijo. Ideja pa bo enaka.
Pognali smo torej tale program in nagibali roko levo in desno ter naprej in nazaj. Pri tem smo v serijskem monitorju Arduinovega razvojnega okolja opazovali, kako se spreminjajo izpisana števila. Kako se spreminjajo je bilo odvisno od tega, kako smo všili pospeškomer. Pri večini sta se spreminjali koordinata Z (ob nagibanju levo-desno) in Y (ob nagibanju naprej naza). Zapisali smo si številke, ki naj bi ustrezale skrajnim nagibom rok. Recimo, da je pri nagibu levo-desno kot med -1.2 in 1.2, pri nagibu naprej-nazaj pa med -0.8 in 1.3.
# Program
Programiranja zdaj skoraj ni več. Napisati moramo program, ki bere stanje pospeškomera, dobljene naklone preračuna v naklone plošč in jih sporoči servo motorju.
#include <Servo.h>
Servo okvir;
Servo plosca
void setup()
{
okvir.attach(4); // servo za okvir je na pinu 4
plosca.attach(5); // ... za plosco pa na pinu 5
}
void loop()
{
float z = readZ();
z = map(z, -1.2, 1.2, 30, 150);
okvir.write(z);
float y = readY();
y = map(y, -0.8, 1.3, 50, 130);
plosca.write(y);
delay(50);
}
Za preračunavanje smo uporabili funkcijo map
. Ta prejme pet reči: prvo je število, ki bi ga radi preslikali (na primer z
), drugi dva sta območje, iz katerega slikamo (na primer -1.2
, 1.2
), zadnji dve pa območje, v katerega slikamo (30
in 150
).
Vsaj dve skupini sta ga tule polomili in namesto plosca.write(y);
napisali okvir.write(y);
. Da, zato ker je kopiranje kode prikladnejše od pretipkavanja, vendar lahko človek potem pozabi kaj spremeniti. 🙂
In to je to.
# Izkušnje
Udeleženci so bili pridni. Res pridni. Tema, in stvari, ki smo jih morali početi, so bile prav posrečene. Malo je pomagalo tudi, da so prišli računalniki na vrsto šele proti koncu, tako da jih ni preveč premagovala skušnjava, da bi vmes gledali kake videe ali igrali igrice.
Tudi dolžina je bila ravno pravšnja. Na koncu smo bili že pošteno utrujeni (predvsem mi trije z Anko in Nino). Končali pa smo ravno, ko so začeli prihajati starši.
Ves projekt je res posrečena mešanica mizarjenja, ustvarjanja, programiranja in elekotronike. Primeren je za kak projekt v šoli, a najbrž bolj v okviru krožka kot predmeta, saj zahteva manjšo skupino zainteresiranih otrok, ne pa razred zdolgočasenih. Tudi udeleženci so vedeli povedati, da je bilo tole bolj zanimivo od pouka tehnike prav zato, ker jim ni bilo potrebno vmes gledati zdolgočasenih fac sošolcev.
Drži. Tudi mi smo bili navdušeni. Čimprej še kdaj. To ali kaj novega.