• Rezultati Niso Bili Najdeni

Labirint

In document KAZALO SLIK (Strani 18-0)

Na mizo bomo postavili labirint. Labirint je najbolje izdelati iz materiala, ki ga je preprosto rezati in lepiti, zato les ni posebej primeren. Obenem mora biti dovolj gladek, da se bo kroglica (na primer frnikola) po njem gladko kotalila. Za velike labirinte in večje kroglice bi bila lahko primerna stiropor ali stirodur (izolacijski

material, ki se uporablja za cokle hiš). Za labirinte naših dimenzij pa je najprimernejša kapa plošča. Kapa plošča je penasta plošča, ki je po obeh straneh oblepljena z

močnejšim, gladkim papirjem. Uporablja se za izdelavo maket, še večkrat pa jo vidimo kot podlago za plakate. Ker nam je za naš projekt vseeno, če plošča ni bela, lahko recikliramo kar kak odslužen plakat; takšni labirinti so lahko videti celo boljše od dolgočasnih belih. Če želimo, pa lahko učencem pustimo, da labirint sami pobarvajo, za kar lahko uporabijo tudi barvne spreje.

Poleg tega potrebujemo še žogico, na primer frnikolo, ki bo po labirintu potovala (mi smo uporabili kar frnikolo).

Stene labirinta pritrdimo z vročo pištolo za plastiko, ali pa uporabimo lepilo

(najprimernejši je mekol) in bucike, s katerimi pritrdimo stene, medtem ko se lepilo suši. Za osnovo labirinta vzamemo kapa ploščo, ki je enake velikosti kot miza, na katero bomo labirint postavili. Nanjo naj učenci narišejo labirint – lahko pa si ga že prej skicirajo na papir. Pri tem morajo paziti, da bo pot dovolj široka za frnikolo.

Nato iz kape narežejo trakove, ki so tako široki, kolikor bodo visoke stene. Te trakove sproti režejo na ustrezne dolžine, in jih namažejo s plastiko ali lepilom ter postavljajo v labirint. Če hočejo izdelati lep izdelek, morajo paziti, da bodo vsi rezi pravokotni, poleg tega pa morajo zlepiti tudi navpične stike med stenami. Če tega ne storijo, bo končni izdelek manj lep, na uporabnost pa to ne bo bistveno vplivalo. Enega takšnih, manj lepih izdelkov, kaže Slika 7.

Ko je labirint izdelan, ga pritridimo na mizo. Za to lahko uporabimo lepilo, vročo pištolo, dvostranski lepilni trak ali pa kar nekaj kosov selotejpa.

S tem je fizično delo končano. V naslednjem poglavju opisujemo elektronske komponente in njihovo umerjanje.

9

Slika 7: Labirint

10

3 ELEKTRONSKE KOMPONENTE 3.1 Mikrokontrolerji

Za upravljanje mize bomo potrebovali mikrokontroler. Mikroprocesor je zgrajen kot eno integrirano vezje, to je miniaturno elektronsko vezje, in predstavlja centralno procesno enoto računalnika. Da postane uporaben, mu moramo dodati še vhodno-izhodne enote, pomnilnik in nekaj integriranih vezij, ki vse skupaj povežejo, tako dobimo mikroračunalnik. Če je ta mikroračunalnik zgrajen kot eno integrirano vezje pa govorimo o mikrokontrolerju. [3]

Mikrokontroler je torej računalnik, ki ima vhodne in izhodne priključke, ki so običajno zgolj preprosti digitalni in analogni signali. Na mikrokontrolerje torej ne moremo priključiti običajnih vhodno-izhodnih naprav, kot so tipkovnice, miške in zasloni.

Mikrokontrolerji so danes vdelani v praktično vsako napravo, ki vsebuje kaj

elektronike, od kuhinjske tehtnice do igrač in avtomobilov. Za svoje delovanje torej potrebujejo nek program in seveda tudi napajanje. [3]

Obstaja veliko vrst mikrokontrolerjev. Tabela 2 kaže primerjavo nekaj trenutno najpopularnejših mikrokontrolerjev, ki so primerni za projekte, kot je naš. S pomočjo te primerjave pa se bomo potem odločili katerega bomo uporabili.

Tabela 2: Primerjava mikrokontrolerjev

Mikrokontroler Programski jezik Priklop

pospeškomera

Priklop

servomotorja Raspberry Pi Poljuben Samo digitalni, ker

ni analognih vhodov Da

BBC Microbit

Node MCU Lua, MicroPython, C in drugi

Samo digitalni, ker

ni analognih vhodov Da

Arduino C, C++ Da Da

11

RaspberryPi ni tipičen mikrokontroler, temveč gre praktično za manjši, cenen računalnik, na katerem teče različica operacijskega sistema Linux in na katerega lahko prek USB priklapljamo običajne vhodno-izhodne naprave. Za projekte v slogu našega je uporaben, ker ima digitalne vhode in izhode. Ker na njem teče splošen operacijski sistem, podpira vse običajno uporabljane jezike. Za naše namene bi bil torej praktičen, ker ga lahko programiramo v prijaznejših jezikih kot Arduina. Po drugi strani je RaspberryPi precej dražji in večji od ostalih. Slabost Raspberryja je tudi, da nima analognih vhodov, zato lahko nanj (neposredno) priključimo le pospeškomere z digitalnimi izhodi. Ta omejitev ni prehuda, saj bi lahko uporabili tudi takšne

pospeškomere. Vendar se nismo odločili za Raspberryja, ker ponuja veliko več, kot potrebujemo in je zato za naše potrebe predrag in prezapleten.

BBC Microbit je zanimiva izbira, vendar je – razen, če ga naročimo v velikih količinah – lahko dokaj drag. Da je pospeškomer že vdelan, bi lahko bila prednost za mlajše učence, saj to poenostavi projekt. Za starejše je morda bolj zanimivo, če lahko pospeškomer primejo v roko in je tako manj "magičen" in bolj resničen. Slabost Microbita je nerodna izvedba izhodov, saj je potrebno žice priklapljati s "krokodilčki", ki se lahko snamejo ali pa obračajo in tako povzročajo kratke stike. Velika prednost Microbita je, da na njem teče MicroPython, to je, poenostavljena različica Pythona za zmogljivejše mikrokontrolerje. V našem projektu BBC Microbita nismo uporabili, ker je bil v času izvedbe poskusne delavnice še relativno nov, zato jih še nismo imeli.

Tudi NodeMCU je novejši mikrokontroler. Odlikujeta ga izjemno nizka cena (1-2 dolarja v kitajskih spletnih trgovinah) in vdelana brezžična omrežna povezava, saj temelji na čipu ESP8266, ki je bil v osnovi namenjen temu in ne splošnim

mikrokontrolerjem. Ker ima tudi veliko več pomnilnika kot Arduino, ga je možno programirati v več jezikih. Privzeti jezik je Lua, brez težav pa ga lahko programiramo tudi iz okolja Arduino IDE, ki je sicer namenjeno Arduinu. Na NodeMCU teče tudi MicroPython.

Mikrokontroler Arduino je daleč najpopularnejši mikrokontroler za ljubiteljske projekte.

Ker sta tako njegovo vezje kot vsa koda objavljena pod prostimi licencami, saj je bil namen njegovih ustvarjalcev predvsem omogočiti dostop do te tehnologije vsem, je, podobno kot NodeMCU, zelo poceni (različice, ki jih je že možno programirati brez posebnih orodij, stanejo od 4 dolarje naprej). Med vsemi naštetimi ima največ

12

digitalnih vhodov in izhodov, poleg tega pa ima tudi analogno digitalne pretvornike, tako da ima tudi do 8 (odvisno od modela) analognih vhodov. V našem primeru smo jih uporabili za priklop pospeškomerov. Slabost Arduina je majhen pomnilnik, zato ga moramo programirati v C oz. C++. Alternativa temu je, da ga priključimo na

računalnik in upravljamo iz računalnika v programu, napisanem v poljubnem jeziku;

Arduino v tem primeru igra le vlogo vmesnika do senzorjev oz. izhodnih naprav. Ta različica je manj privlačna, saj je bolj zanimivo sestaviti napravo brez računalnika.

V našem projektu smo se odločili za Arduina, saj ga je bilo najenostavneje uporabiti, programi pa so dovolj kratki, da "neprijazen" programski jezik C ni prevelika ovira.

Enako mizo pa bi lahko brez večjih težav nadzirali tudi s katerimkoli drugim od teh štirih mikrokontrolerjev.

3.1.1 Arduino

Razvoj Arduina se je začel v Italiji leta 2003. Motivacija zanj je bila želja ustvariti preprost in cenovno dostopen mikrokontroler, ki bi ga lahko vsak programiral.

Arduino ni le eden, temveč jih je cela družina, na primer: Arduino Uno, Arduino Nano, Arduino Mega, Arduino Pro. Razlikujejo se po dimenzijah, številu in tipu vhodov, načinu, na katerega nanje nalagamo programsko kodo in drugih lastnostih. Najbolj znan in razširjen je Arduino Uno. [2, 5]

Za naše potrebe smo uporabili Arduino Nano, ki ima praktično enake lastnosti kot Arduino Uno, le da je manjši. Ima 14 digitalnih vhodno-izhodnih priključkov in 8 analognih vhodnih priključkov. Najpreprosteje ga programiramo in napajamo prek Mini-B USB vhoda. [5]

S pomočjo Arduina lahko upravljamo stikala, LED lučke, motorje, zvočnike, GPS, kamere, internet, celo televizijo in pametne telefone. Lahko deluje kot samostojna enota ali pa ga povežemo z računalnikom ali drugim Arduinom. Seveda pa se lahko znajdemo tudi v situaciji, kjer si z njim ne bomo mogli pomagati, saj ima omejeno količino spomina ter počasen procesor. [9]

13

Slika 8: Arduino Nano

3.1.2 Arduino IDE

Programsko opremo za programiranje Arduina, Arduino IDE, najdemo na spletni strani http://arduino.cc. Za programiranje uporabljamo programski jezik C oziroma C++. Vsak program je sestavljen iz funkcije setup(), ki se izvede v začetku, ko Arduina prižgemo, in funkcije loop(), ki se nato kliče, dokler ga ne ugasnemo.1 Funkcija setup() navadno vsebuje programsko kodo, ki vzpostavi komunikacijo z vhodno-izhodnimi napravami, določi, ali bo posamični pin deloval kot vhod ali izhod, ter inicializira podatke v programu. V našem primeru bomo tu vzpostavili

komunikacijo s servo motorji in nastavili njihov začetni položaj. Funkcija loop vsebuje glavni del programa. V našem projektu, na primer, bo brala položaj pospeškomera in ustrezno prilagajala pozicijo mize. [7]

3.2 Testna plošča

Testno ploščo uporabljamo za sestavljanje poskusnih vezij, preden vezje jedkamo oziroma, v našem primeru, za to, da bomo začasno povezali določene elektronske elemente. Testne plošče so različnih velikosti (primer je na Sliki 9), tipično pa imajo obliko mreže z označenimi stolpci in vrsticami. Luknjice v posameznem stolpcu so znotraj plošče povezane (Slika 10), prav tako pa sta povezani vrstici + in -, ki tečeta po obeh straneh vzdolže plošče. V ti dve vrstici navadno pripeljemo referenčno, ničelno napetost (GND) in pozitivno napetost (5 V oz. 3.3 V, odvisno od

uporabljenega mikrokontrolerja). [8]

1 Morebitnemu bralcu, ki pozna programski jezik C, povejmo, da okolje samo priskrbi funkcijo main, ki najprej pokliče setup, nato pa v neskočni zanki kliče loop.

14

Slika 9: Testna plošča

Slika 10: Prerez testne plošče

Za povezovanje komponent s testno ploščo in za povezovanje znotraj testne plošče uporabljamo tri različne vrste žic: žensko – ženske žice, moško – ženske žice in moško – moške žice (Slike 11, 12 in 13).

Slika 11: Žensko - ženske žice Slika 12: Žensko - moške žice Slika 13: Moško - moške žice

15

3.3 Priklop Arduina

Arduino Nano lahko priklopimo direktno na testno ploščo, to pa naredimo tako, kot je prikazano na Sliki 14. Izhodi na obeh straneh Arduina morajo biti na nepovezanih poljih. Glede na spodnjo sliko lahko vidimo, da je, na primer, Arduinov izhod D12 priklopljen v vrstici d in v stolpcu 2, kar pomeni da je izhod D12 na voljo v drugem stolpcu v vrsticah od a do e.

Slika 14: Priklop Arduina [10]

3.4 Priklop servomotorjev

Že zgoraj smo omenili, da ima servomotor tri priklope. Pri servomotorjih obstajata dve barvni shemi žic, prva je bela – rdeča – črna, druga pa je oranžna – rdeča – rjava.

Bela oziroma oranžna žica je namenjena digitalnemu priklopu motorja na Arduino, rdeča žica je pri obeh namenjena pozitivnemu napajanju, črna oziroma rjava žica pa je namenjena ozemljitvi.

Manjše porabnike, na primer LED, in senzorje, kot je pospeškomer, lahko napajamo iz Arduina. Pri servomotorju to ni priporočljivo, saj ob premikanju zahteva večji tok, kar lahko povzroči padec napetosti na mikrokontrolerju. V našem primeru bo

pospeškomer zaradi padca napetosti nameril drugačen pospešek, zato se bo motor ponovno premaknil, kar povzroči nov padec napetosti in sistem se ujame v

16

neskončno zanko, v kateri pospeškomer meri šumne podatke, miza pa se nekontrolirano premika.

Servomotorja torej potrebujeta ločeno napajanje. Zaradi preprostosti ga bomo povezali kar na vrstici + in – na testni plošči. Poleg tega moramo povezati negativni pol napajanja (vrstica -) z izhodom GND na Arduinu, da tako izenačimo napetostne nivoje. Za napajanje uporabimo poljuben izvor enosmernega toka ustrezne napetosti;

ljubiteljski servomotorji navadno zahtevajo napetost 4.8 V, tako da bo primerna tudi napetost 5 V.

Na to napajanje priklopimo servomotorja, zatem pa ju moramo povezati še z

Arduinom, kar naredimo tako, da tretjo žico povežemo na vhoda D5 in D6. Pri tem pa si moramo zapomniti, kateri motor smo priklopili na kateri vhod.

Slika 15: Priklop servomotorjev

3.4.1 Umerjanje motorjev

Potem, ko smo motorje priklopili, moramo ugotoviti, kakšne so njegove vrednosti glede na mizo, torej, kdaj je miza naravnost in kdaj je v svojih skrajnih legah glede na oba motorja. Vetrnica motorja je sicer postavljena v nevtralni položaj ob srednji vrednosti napetosti. Vendar nevtralni položaj motorja ne ustreza nujno vodoravni legi mize, saj je le-ta odvisna tudi od dolžine in položaja kavlja ter orientacije motorja na mizi.

17

V Arduino IDE prepišemo spodnji program (Slika 16), kjer uporabimo knjižnico Servo.

Servo motorja bosta predstavljali spremenljivki "okvir" in "plošča". Ker smo servomotorja priklopili na D4 in D5, pokličemo metodi "okvir.attach(4)" in

"plosca.attach(5)", ali obratno, če smo žici zamenjali.

#include <Servo.h>

Na začetku umerjamo okvir. S klicem okvir.write(90) postavimo motor v nevtralni položaj. Program poženemo in vidimo, ali se okvir postavi v vodoravno lego. Če se ne, spremenimo argument 90 v, na primer 85 ali, če vidimo, da je potem miza še dlje od vodoravne lege, v 95. Tako počasi odkrijemo argument, ki postavi mizo v

vodoravni položaj.

Na podoben način nato poiščemo skrajni legi. Motorja ne želimo siliti v kot, v katerega je mizo nemogoče obrniti, zato previdno spreminjamo argument proti kotom, kot je 50 ali 45 in, v drugo smer, proti 135 ali 140. Dobljene kote – nevtralnega in oba skrajna – si zapišemo, ker ju bomo potrebovali v končnem programu.

Nato ponovimo podobno umerjanje še za drugi motor, ki nadzoruje lego plošče.

18

3.5 Pospeškomer

Če imamo na pametnem telefonu vključeno funkcijo vrtenje zaslona, ta zazna obračanje telefona in sliko prilagodi temu, kako je telefon obrnjen. Za to poskrbi pospeškomer, majhen senzor, ki meri smer težnostnega (ali, če telefon premikamo, tudi drugega) pospeška. S pomočjo podobnega senzorja bomo upravljali naš nagibni labirint. [11]

Glede na način prenosa podatkov poznamo analogne in digitalne pospeškomere.

Analogni pospeškomeri se povezujejo preko analognih vhodov in kot sporočajo s pomočjo napetosti. To lahko učencem prikažemo tudi tako, da ga priklopimo na merilni inštrument. Pospeškomere z analognimi izhodi lahko priključimo le na

mikrokontrolerje z analognimi vhodi. Potrebovali bomo vsaj dva, zato je izmed zgoraj naštetih mikrokontrolerjev za takšne pospeškomere (brez dodatnih

analogno-digitalnih pretvornikov) primeren le Arduino.

Digitalni pospeškomeri se povezujejo preko digitalnih vhodov in komunicirajo preko različnih protokolov za prenos signala v digitalni obliki. Takšne pospeškomere lahko priklopimo tudi na Raspberry Pi in Node MCU, ki nimata analognih vhodov. Razlika med digitalnimi in analognimi pospeškomeri je tudi v tem, da za programiranje digitalnih potrebujemo knjižnice, ki podpirajo ustrezne protokole, oziroma, še

prikladneje, knjižnice za specifični model pospeškomera. Pri delu z analognimi to ni potrebno, saj vrednost preberemo na analognem vhodu. Za naš projekt je zato preprotejši, običajno pa so analogni pospeškomeri tudi cenejši od digitalnih. [11]

Pospeškomeri merijo pospešek na različne načine, dva izmed najbolj pogostih in razširjenih sta piezoeolektrični učinek in kapacitivni senzor. Piezoelektrični učinek za svoje delovanje uporablja mikroskopske kristalne strukture, ki se zaradi

pospeškovnih sil deformirajo in ustvarijo napetost, na podlagi katere pospeškomer določi hitrost in orientacijo. Kapacitivni senzor pa deluje prek sprememb

kapacitivnosti majhnih kondenzatorjev, ki so nameščeni tako, da se premikajo pod vplivom sil pospeška. [11]

Pospeškomere se uporablja na zelo različnih področjih, poglejmo si nekaj primerov.

Prvi, ki smo ga omenili že na začetku, je v pametnih telefonih za določitev postavitve zaslona. Uporabljajo se v športnih urah za zaznavanje gibanja, na primer štetje

19

korakov ali računanje števila in dolžine korakov pri teku. Uporabljajo se tudi v

prenosnih računalnikih, saj bi ob nenadnem padcu računalnik to zaznal in nemudoma izključil trdi disk, da bi ga zaščitil. Prav tako v avtomobilih v primeru avtomobilske nesreče pospeškomer zazna udarec in sproži zračne blazine. Uporablja se celo za zaznavanje potresov in v mnogih medicinskih napravah. [11]

Pospeškomeri so lahko dvoosni ali triosni, glede na to, v koliko osi merijo pospešek.

Dvoosne uporabljamo v avtomobilih za sprožitev zračnih blazin, v večini drugih naprav pa uporabljamo triosne. [11]

Za naše potrebe bi zadostoval dvoosni pospeškomer, saj nas zanima nagibanje zgolj v dveh smereh. Uporabili pa bomo triosnega, saj so ti pogostejši. Torej bomo

uporabljali triosni analogni pospeškomer. V našem primeru smo izbrali popularni ADXL335 (Slika 17).

Slika 16: Analogni pospeškomer

3.5.1 Priklop pospeškomera

Pospeškomer bomo napajali prek Arduina. Podatke o naklonu pa bomo brali v smereh osi x in y, zato tadva izhoda povežemo na Arduinova vhoda A0 in A1, pri čemer x os povežemo z vhodom A0 in y os z vhodom A1. Dobimo vezje, ki je prikazano na spodnji sliki (Slika 18).

20

Slika 17: Priklop pospeškomera

Da pa bomo pospeškomer lažje uporabljali in da bomo labirint dejansko upravljali z roko, pa si naredimo rokavico, na katero prišijemo pospeškomer. Lahko pa ga tudi prilepimo z vročo plastiko. Na sliki je rokavica (oziroma nogavica) nato zavihana tako, da skrije pospeškomer. Pri tem moramo paziti na lep potek žic.

Slika 18: Rokavica za pospeškomer

21

3.5.2 Umerjanje pospeškomera

Tako kot smo morali umeriti motorje, moramo sedaj umeriti še pospeškomer.

Ugotoviti moramo, kakšne vrednosti vrača, ko je roka v nevtralni legi in ko je obrnjena pod skrajnima kotoma. To naredimo s pomočjo spodnjega programa (Slika 20).

S funkcijo Serial.begin(9600) vzpostavimo povezavo med Arduinom in računalnikom tako, da bomo lahko kasneje s Serial.print izpisovali podatke, ki se bodo pokazali na računalnikovem zaslonu. Nato s funkcijo analogRead() preberemo vrednosti na vhodih A0 in A1, kamor smo povezali x in y os iz pospeškomera, ter ju s funkcijo Serial.print() izpisujemo, vmes napišemo še presledek in katero vrednost smo

prebrali. Spodnji program torej prebere in izpisuje vrednosti, ki jih vrača pospeškomer za vsako izmed osi. Naša naloga pa je, da pospeškomer postavimo v raven položaj in v skrajne lege, ter si vrednosti, ki jih vrača, zapišemo.

void setup()

22

4 PROGRAM

Sedaj je miza sestavljeno, vezje narejeno, servomotorja in pospeškomer umerjena.

Napisati moramo le še program, ki bo bral podatke iz pospeškomera in jih pretvoril v ustrezne kote za servomotorje.

Program je izredno enostaven. Začnemo lahko kar s programom, ki smo ga uporabili za umerjanje servo motorjev, V funkcijo setup() dodamo klic, s katerim v začetku postavimo motorja v položaj, v katerem je miza v vodoravnem položaju. V našem primeru sta tidve legi 105 in 92.

Zdaj potrebujemo vrednosti, ki smo si jih prej zapisali. Recimo, da so skrajne lege servomotorja na x osi 65 in 150, na y osi pa 75 in 110. Skrajne lege pospeškomera na x osi pa so 300 in 400, ter na y osi 290 in 390.

Naš cilj je, da vrednost iz območja pospeškomera pretvorimo oziroma preslikamo v območje servomotorja. Naredimo primer za x os, torej moramo slikati iz območja med 300 in 400 v območje med 65 in 150. To v bistvu lahko ponazorimo z linearno

funkcijo 𝑦 = 1,2𝑥 + 223,5, ki je prikazana na spodnji sliki (slika 21).

Slika 19: Linearna funkcija 𝒚 = 𝟏, 𝟐𝒙 + 𝟐𝟐𝟑, 𝟓

23

Na srečo pa se nam s tem ni potrebno ukvarjati. Arduino ima že vdelano funkcijo map, ki prejme pet podatkov. Prvi je število, ki bi ga preslikujemo, drugi dve sta območje, iz katerega slikamo, zadnji dve pa območje, v katerega slikamo. V našem primeru preslikavo opravimo s klicem x = map(accX, 300, 400, 65, 150), kjer je accX podatek s pospeškomera, x pa kot, ki ga bomo poslali servo motorju.

Da motorja ne bomo silili v kot, pod katerim mize ni mogoče obrniti, uporabimo še funkcijo constrain(). Ta prejme tri podatke: prvi je število, ki ga je potrebno omejiti,

Da motorja ne bomo silili v kot, pod katerim mize ni mogoče obrniti, uporabimo še funkcijo constrain(). Ta prejme tri podatke: prvi je število, ki ga je potrebno omejiti,

In document KAZALO SLIK (Strani 18-0)