• Rezultati Niso Bili Najdeni

KAZALO SLIK

N/A
N/A
Protected

Academic year: 2022

Share "KAZALO SLIK "

Copied!
39
0
0

Celotno besedilo

(1)

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA

ANKA KATRAŠNIK

UPRAVLJANJE NAGIBNEGA LABIRINTA S POMOČJO ARDUINA

DIPLOMSKO DELO

LJUBLJANA, 2018

(2)
(3)

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA

DVOPREDMETNI UČITELJ: MATEMATIKA IN RAČUNALNIŠTVO

ANKA KATRAŠNIK

Mentor: izr. prof. dr. JANEZ DEMŠAR

UPRAVLJANJE NAGIBNEGA LABIRINTA S POMOČJO ARDUINA

DIPLOMSKO DELO

LJUBLJANA, 2018

(4)
(5)

ZAHVALA

Iskreno se zahvaljujem mentorju, izr. prof. dr. Janezu Demšarju, za kvalitetno mentorstvo, vso pomoč, čas in nasvete pri pisanju diplomskega dela.

Velik hvala gre tudi moji družini za vso podporo in razumevanje, posebej atiju in Jakobu za vso tehnično razlago in pomoč.

Hvala tudi mojim prijateljem, ki so mi stali ob strani, predvsem Tini in Tilnu.

Še posebej pa sem hvaležna Mihu za vso potrpežljivost in spodbudne besede.

(6)
(7)

I

POVZETEK

Diplomsko delo je namenjeno učiteljem tehnike in računalništva v osnovnih šolah, kot ideja za izvedbo učne aktivnosti, v obliki delavnice, učne ure ali pa tehničnega dneva.

V njem opisujemo učno aktivnost, pri kateri učenci iz lesa izdelajo mizo, ki se nagiba po dveh oseh. Za nagibanje uporabijo dva servomotorja, ki ju upravljajo s pomočjo pospeškomera, celotno delovanje pa nadzorujejo s pomočjo Arduina.

V diplomskem delu je opisan celoten potek na način, namenjen učiteljem. Opisana je celotna izdelava mize, od popisa materiala in orodja do postopka sestavljanja.

Opisane so vse komponente, ki jih uporabimo – servomotorji, pospeškomer in Arduino – pri čemer je napisana tudi razlaga, zakaj bomo določeno komponento uporabili. V nadaljevanju opišemo priklapljanje vsake komponente na testno ploščo, umerjanje servomotorjev in pospeškomerov, s tem povezana programa in končni program za upravljanje mize. Na koncu podajamo kratek povzetek poskusne izvedbe takšne delavnice ter nekaj konkretnih idej.

Ključne besede:

Nagibni labirint, mizarjenje, servomotor, pospeškomer, testna plošča, Arduino, vezje, programiranje, delavnica

(8)

II

ABSTRACT

This bachelor thesis is intended for teachers of technic class and computer science in elementary schools, as an idea for learning activity in the form of a workshop, a lesson or a technical day. This is a learning activity where pupils create a table from wood that tilts around two axes. For tilting, two servomotors are controlled by the accelerometer, with the two being connected through Arduino.

The whole text is written with a teacher as an intended reader in mind. The complete table design is described, from materials and tools to instructions for putting

everything together. Descriptions of components includes some background about how they work. Next, the reader gets familiar with the connection of each component to the breadboard, calibration of the servomotor and the accelerometer, and the final program that controls the table. At the end, we give a short description about a workshop we held, and some further ideas.

Key words:

Tilting maze, carpenting, servomotor, accelerometer, breadboard, Arduino, circuit, programming, workshop

(9)

III

KAZALO

1 UVOD ... 1

2 IZDELAVA MIZE... 2

2.1 Material ... 2

2.2 Priprava lesenih delov ... 3

2.3 Sestavljanje ... 4

2.4 Servomotorji ... 5

2.4.1 Pritrjevanje motorjev ... 6

2.5 Labirint ... 8

3 ELEKTRONSKE KOMPONENTE... 10

3.1 Mikrokontrolerji ... 10

3.1.1 Arduino ... 12

3.1.2 Arduino IDE ... 13

3.2 Testna plošča ... 13

3.3 Priklop Arduina ... 15

3.4 Priklop servomotorjev ... 15

3.4.1 Umerjanje motorjev ... 16

3.5 Pospeškomer... 18

3.5.1 Priklop pospeškomera ... 19

3.5.2 Umerjanje pospeškomera ... 21

4 PROGRAM ... 22

5 ZAKLJUČEK ... 25

6 LITERATURA ... 28

(10)

IV

KAZALO SLIK

Slika 1: Letve ... 4

Slika 2: Miza ... 5

Slika 3: Prikaz mize od spodaj ... 5

Slika 4: Servomotor ... 6

Slika 5: Pritrjevanje servomotorja - kavelj ... 7

Slika 6: Pritrjevanje servomotorja ... 7

Slika 7: Labirint ... 9

Slika 8: Arduino Nano ... 13

Slika 9: Testna plošča... 14

Slika 10: Prerez testne plošče ... 14

Slika 11: Žensko - ženske žice ... 14

Slika 12: Žensko - moške žice ... 14

Slika 13: Moško - moške žice ... 14

Slika 14: Priklop Arduina [10] ... 15

Slika 15: Priklop servomotorjev ... 16

Slika 17: Analogni pospeškomer ... 19

Slika 18: Priklop pospeškomera ... 20

Slika 19: Rokavica za pospeškomer ... 20

Slika 21: Linearna funkcija 𝒚 = 𝟏, 𝟐𝒙 + 𝟐𝟐𝟑, 𝟓 ... 22

Slika 23: Dvonadstropni labirint ... 26

KAZALO TABEL

Tabela 1: Material ... 2

Tabela 2: Primerjava mikrokontrolerjev ... 10

(11)

1

1 UVOD

Danes je računalnik praktično nepogrešljiv del vsakdana, najdemo ga na vsakem koraku, v vsakem domu, v šolah, prodajalnah, tovarnah itd. Večina nas računalnike zna uporabljati, ko pa pridemo do ideje, ki bi jo lahko uresničili samo z nekaj

programiranja in uporabo nekih novih komponent, pa naletimo na težavo. Večina ljudi obravnava računalnik kot nekakšno »čarobno škatlo«, ki ve, kaj mora narediti in se posledično niti ne poskuša poglobiti v to, kaj je računalnik naredil in kako.

Zastavila sem si projekt, s pomočjo katerega želim pokazati, da tudi na videz dokaj zapleteno napravo lahko razume prav vsak. V okviru projekta izdelamo mizo, ki se nagiba po x in y osi, na njej je labirint in v labirintu žogica. Nagibanje mize nadziramo s pospeškomerom. Tako dobimo igro, v kateri je potrebno pripeljati žogico iz začetne v končno točko labirinta. Za izdelavo mize potrebujemo dva servomotorja za

krmiljenje posamezne osi, pospeškomer in Arduino, ki bere podatke s pospeškomera in ustrezno krmili motorje.

V nadaljevanju bom opisala vse elemente, ki bodo sestavljali mizo, ter celoten

postopek do trenutka, ko bo miza delovala. Besedilo je namenjeno učiteljem, torej na nivoju, na katerem bi ga moral vsak učitelj računalništva projekt razumeti in ga znati izvesti kot učno aktivnost v sklopu pouka. V okviru delavnice na Fakulteti za

računalništvo in informatiko smo projekt tudi poskusno izvedli, zato na koncu opisujem še konkretne izkušnje, ki smo jih pri tem pridobili.

(12)

2

2 IZDELAVA MIZE

V prvem delu projekta se bomo ukvarjali s fizično izdelavo mize. Miza je lahko iz poljubnega materiala; lahko bi bila na primer kovinska ali plastična, najprikladnejši pa je les, saj lahko v tem primeru učenci večino naredijo sami. Tudi velikost mize je lahko popolnoma poljubna, vendar ne sme biti premajhna, da bi lahko vanjo postavili smiselno velik labirint, ali tako velika, da bi potrebovali močnejše servomotorje. V tem besedilu bomo uporabili dimenzije, ki so preizkušene in so se izkazale za primerne.

2.1 Material

Za izdelavo ene mize potrebujemo dve deski in šest letev, katerih dimenzije so napisane v spodnji tabeli (Tabela 1). Ena izmed desk mora biti lažja, zato lahko uporabimo kar lesomal; lesomal poznamo kot material, iz katerega so običajno narejeni hrbti omar. Les, razen lesomala, naj bo masiven, ne iveral. Najbolj praktično je uporabiti smrekov les.

Poleg tega pa potrebujemo še nekaj vijakov, nekaj manjših koščkov lesa, kakih deset centimetrov trše žice in štiri osi, okrog katerih se bo labirint lahko nagibal. Osi lahko naredimo kar iz žebljev, ki jih skrajšamo tako, da jih prežagamo ali odščipnemo z močnejšimi kleščami.

Potrebujemo tudi nekaj orodja: pištolo za vroče lepljenje, vrtalni stroj, akumulatorski vrtalnik za privijanje vijakov, ter še kakšno kladivo, žago, klešče in izvijač.

Tabela 1: Material

dimenzije količina

deska za podlago 30 cm × 22 cm × 1 cm 1 plošča za mizo 30 cm × 22 cm × 0,5 cm 1 daljši rob mize 30 cm × 3 cm × 1 cm 2 krajši rob mize 20 cm × 3 cm × 1 cm 2 nosilca za mizo 10 cm × 3 cm × 1 cm 2 nosilec za motor 5 cm × 3 cm × 1 cm 1 manjši kosi lesa 2 cm × 2 cm × 1 cm 3

trša žica 5 cm 2

(13)

3

vijaki ~15

osi 2 cm 4

2.2 Priprava lesenih delov

Deski za podlago in mizo ter letve lahko vnaprej pripravimo sami, lahko pa priskrbimo le osnovni material (npr. daljšo desko širine približno 22 centimetrov, 3 cm široke letve in kose lesomala) ter žaganje prepustimo učencem. Odločitev je odvisna od starosti in spretnosti učencev, opremljenosti šole ter spretnosti in poguma učitelja. Ko smo delavnico izvajali sami, so učenci tretje triade sami uporabljali ročno in vbodno žago ter električni brus. Lesomal režemo z olfa nožem.

V letve je potrebno zvrtati luknje za osi, priporočljivo pa je zvrtati tudi luknje za vijake, da letev ne bo razgnalo.

Prva, največja deska je osnova, na katero bomo na sredini krajših stranic, pričvrstili najkrajši letvi, ki bosta nosili zgornji del. Ker je masivnejša, vanjo ni potrebno vrtati lukenj.

V krajši letvi na spodnjem delu zvrtamo dve luknji za vijake, na zgornjem delu letve pa naredimo luknjo za os, pri čemer moramo paziti, da je luknja dovolj široka da se bo os prosto vrtela, ne sme pa biti preširoka, da ne bo opletala.

V srednje dolgi letvi na sredini izvrtamo dve luknji za osi, ki morata biti ravno tako ravno prav veliki za os, da bo miza fiksna. Na eni izmed teh dveh letev približno na četrtini dolžine, naredimo še manjšo luknjo, skozi katero bomo vstavili kavelj, ki ga bomo naredili iz žice. Tudi ta se bo moral vrteti.

V daljši dve letvi pa na vsaki strani naredimo po dve luknji za vijake. Na sredini letve naredimo luknjo za os. Poleg tega pa v eno izmed letev na približno četrtini dolžine letve zvrtamo še dve luknji za vijake, s katerimi bomo pričvrstili motor. Razdalja med njima je odvisna od tipa motorja.

V dva izmed manjših kosov lesa na sredini zvrtamo luknjo za os, ki pa mora biti manjša, tako da se os ne bo sama snela iz nje.

V preostali manjši kos lesa pa na sredini zvrtamo manjšo luknjo, debeline žice.

(14)

4

Letev, ki je ostala, bo nosila motor. Vanjo na enem koncu zvrtamo dve luknji za pritrditev na mizo, na drugem pa luknji za pritrditev motorja, kot kaže Slika 1.

Razdalja med luknjama mora spet ustrezati razdalji med luknjama na motorju, ki ga bomo uporabili.

Slika 1: Letve

2.3 Sestavljanje

Sledi sestavljanje mize. Najprej sestavimo okvir, tako, da vzamemo najdaljši dve letvi in srednje dolgi letvi in jih sestavimo. Nato pa na lažjo desko na sredini dolžine pri robovih s pomočjo pištole za toplo lepljenje pritrdimo manjša kosa lesa z luknjama za osi. Potem nanjo pritrdimo še preostali manjši kos lesa, prav tako na robu, približno na četrtini dolžine. Pri lepljenju pazimo, da se luknje za osi in kosi lesa za osi

ujemajo, ter da se luknji za motorje na okvirju, ujemata s kosom lesa z luknjo za žico.

Nato pa okvir in lažjo desko med seboj povežemo s pomočjo osi. Na osnovno desko na sredini krajših stranic pritrdimo krajši letvi in ju s pomočjo osi povežemo z

okvirjem. Končni rezultat kažeta Sliki 2 in 3.

(15)

5

Slika 2: Miza

Slika 3: Prikaz mize od spodaj

2.4 Servomotorji

Naš cilj je, da bomo mizo kontrolirano premikali, zato potrebujemo dva motorja, enega ki bo mizo nagibal po x osi in drugega, ki bo mizo nagibal po y osi. Torej potrebujemo motorje, ki jih bomo lahko zelo natančno upravljali, nastavljali in spreminjali njihovo pozicijo. To so servomotorji, ki se običajno uporabljajo v

modelarstvu. Zanje je značilno da se njihova končna gred premika za 180°, ter da so cenovno zelo dostopni. Motor ima tri priklope, dva sta namenjena napajanju, tretji pa je servo-signal. Na motor je običajno pritrjena vetrnica (Slika 4), ki se premika za 90°

v desno in za 90° v levo stran. [6]

(16)

6

Slika 4: Servomotor

2.4.1 Pritrjevanje motorjev

Na mizo, ki smo jo sestavili, moramo sedaj pritrditi motorje. V ta namen smo si pripravili luknje na okvirju in kos lesa z luknjo, na spodnji strani mize. Na okvir pričvrstimo motor, nato pa iz žice naredimo kavelj v obliki črke S in ga na eni strani zataknemo v motor in na drugi strani v mizo. Za pritrditev drugega motorja pa potrebujemo letev, v kateri imamo že zvrtane luknje in jo pričvrstimo na spodnjo desko. To naredimo tako, da se bo pozicija letve ujemala z luknjo za žico, ki smo jo naredili na okvirju. Potem na letev pričvrstimo drugi motor, iz žice naredimo še en kavelj v obliki črke S in z njim povežemo motor in okvir (Sliki 5 in 6).

(17)

7

Slika 5: Pritrjevanje servomotorja - kavelj

Slika 6: Pritrjevanje servomotorja

(18)

8

2.5 Labirint

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.

(19)

9

Slika 7: Labirint

(20)

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

CodeKingdoms, Microsoft Block Editor, Microsoft TouchDevelop in MicroPython

Je že vdelan Da

Node MCU Lua, MicroPython, C in drugi

Samo digitalni, ker

ni analognih vhodov Da

Arduino C, C++ Da Da

(21)

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č

(22)

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]

(23)

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.

(24)

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

(25)

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

(26)

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.

(27)

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>

Servo okvir;

Servo plosca;

void setup() {

okvir.attach(4);

plosca.attach(5);

okvir.write(90);

}

void loop() {

}

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.

(28)

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

(29)

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).

(30)

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

(31)

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() {

Serail.begin(9600);

}

void loop() {

Seral.print(analogRead(0));

Seral.print(' ');

Seral.print(x);

Seral.print(analogRead(1));

Seral.print(' ');

Seral.print(y);

}

(32)

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 𝒚 = 𝟏, 𝟐𝒙 + 𝟐𝟐𝟑, 𝟓

(33)

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, drugo število je spodnja meja tega območja, tretje pa zgornja meja.

Na enak način preslikamo in omejimo izmerjena pospeška v smereh x in y ter rezultat z metodama okvir.write in plosca.write pošljemo servo motorjema.

Program vsebuje še krajšo pavzo, 50 ms, da motorja tečeta bolj gladko.

#include <Servo.h>

Servo okvir;

Servo plosca;

void setup() {

okvir.attach(4);

plosca.attach(5);

okvir.write(105);

plosca.write(92);

}

void loop() {

float accX = analogRead(0);

float x = map(accX, 300, 400, 65, 150);

constrain(x, 65, 150);

okvir.write(x);

float accY = analogRead(1);

(34)

24

float y = map(accY, 290, 390, 75, 110);

constrain(y, 65, 150);

plosca.write(x);

delay(50);

}

(35)

25

5 ZAKLJUČEK

Kot sem že v uvodu omenila, smo v okviru delavnice na Fakulteti za informatiko in računalništvo to aktivnost tudi izvedli, zato želim izpostaviti tudi nekaj konkretnih izkušenj.

Delavnica je bila namenjena učencem na predmetni stopnji, torej učencem od 6. do 9. razreda. Potekala je dva dneva, v petek popoldne in v soboto dopoldan, v

skupnem trajanju približno 8 ur. Delo je potekalo v parih oziroma v trojicah. Na začetku smo skupaj naredili načrt in ugotovili, kaj vse potrebujemo za izdelavo mize.

Osnovni material za izdelavo smo pripravili le delno, tako da so učenci morali sami razžagati letve, jih zbrusiti in vanje zvrtati luknje. Pustili smo jim dokaj proste roke, saj smo želeli, da so izvirni in iznajdljivi. Mizarska opravila so potekala nepričakovano gladko in učenci so v njih uživali. Nekateri so bili pri njih celo izjemno spretni.

Izvirnost se je najbolj pokazala pri izdelavi labirinta, saj so se izdelave tega lotili na popolnoma različne načine - ena izmed skupin je naredila celo dvonadstropno mizo, pri čemer se je igra začela v zgornjem nadstropju, na koncu katerega je kroglica padla v spodnje nadstropje, kjer je bila igra seveda težja, saj je bilo kroglico težje videti (Slika 23).

Ker smo delavnico izvajali poleti, je bilo rokavice precej težko kupiti, zato smo se znašli in namesto rokavic uporabili kar nogavice, ki smo jih obstrigli, zašili in dobili odličen nadomestek rokavice.

(36)

26

Slika 20: Dvonadstropni labirint

V petek smo večino časa namenili žaganju in sestavljanju mize, pritrjevanju motorjev in izdelavi labirinta. V soboto smo to dokončali in se šele po tem lotili vezja,

umerjanja in programiranja. Izkazalo se je, da je bila delavnica veliko bolj kot programerska ali celo elektronska pravzaprav delavnica mizarjenja. Vendar pa so učenci v mizarjenju, žaganju in ustvarjanju uživali in so bili na koncu vsi navdušeni nad svojimi izdelki.

Povzemimo, kaj potrebujemo za izvedbo takšne učne aktivnosti:

 Deska (30 cm × 22 cm × 1 cm)

 Lažja deska (30 cm × 22 cm × 0,5 cm)

 Dve letvi velikosti (30 cm × 3 cm × 1 cm)

 Dve letvi velikosti (20 cm × 3 cm × 1 cm)

 Dve letvi velikosti (10 cm × 3 cm × 1 cm)

 Letev (5 cm × 3 cm × 1 cm)

 Trije manjši kosi lesa (2 cm × 2 cm × 1 cm)

 Trša žica

 Vijaki

 Štiri osi (lahko žeblji – dolžina 2 cm)

 Dva servomotorja

(37)

27

 Kapa plošča

 Bucike

 Lepilo

 Frnikola

 Arduino

 Testna plošča in žice

 Dodatno napajanje za servo motorje

 Analogni pospeškomer

 Rokavica (lahko tudi nogavica)

Cenovni okvir delavnice je približno 25€, če motorje, pospeškomer, testno ploščo in Arduino naročimo iz Kitajske in približno 65€, če vse skupaj kupimo v Sloveniji.

Ker je program izredno kratek in enostaven in programiranja pravzaprav ni veliko, so ga vsi učenci z lahkoto osvojili in razumeli. S tem pa je moj prvotni cilj, torej da lahko zapleten projekt razume prav vsak, dosežen. Samo mizarjenje je bilo učencem izziv, vezje in program pa sta s svojo enostavnostjo vse skupaj zaključila tako, da ni bilo nikogar, ki česa ne bi razumel. Delavnica se tako izkaže za odličen primer

medpredmetnega povezovanja tehnike in računalništva. Poleg tega pa je celoten projekt je zelo odprt za spremembe in dograjevanja, saj ga lahko izvedemo v okviru pouka, delavnice ali pa tehničnega dneva.

(38)

28

6 LITERATURA

[1] UHAN, Marko. Labirint. Svet elektronike, 30. maj, 2016, 5, 51-56.

[2] YARNOLD, Stuart. 2015. Arduino in easy steps. United Kingdom: Warwickshire.

1-84078-633-7.

[3] Rugelj, Tomo. 1992. Osnove mikrokontrolerjev na primeru MC 6803. Ljubljana:

Meta inženiring. 961-90009-0-0.

[4] Android + Arduino labyrinth Game. 2016. Instructables. [Citirano 5. junij 2018, 10:00]. Dostopno na spletnem naslovu: http://www.instructables.com/id/Android- Arduino-Labyrith-Game/

[5] What is Arduino. 2017. Arduino. [Citirano 5. junij 2018, 10:00]. Dostopno na spletnem naslovu: https://www.arduino.cc/

[6] Servomotor. Nauk.si. [Citirano 5. junij 2018, 10:00]. Dostopno na spletnem naslovu: http://www2.nauk.si/materials/813/out-635947/index.html#state=2

[7] Kratka šola programiranja mikrokontrolerjev. 2010. Svet elektronike. [Citirano 5.

junij 2018, 10:00]. Dostopno na spletnem naslovu: https://www.svet-

el.si/bazaznanja/programiraje-mikrokontrolerjev/568-kratka-sola-programiranja- mikrokontrolerjev

[8] A brief on breadboard basics and connections. El-pro-cus. [Citirano 5. junij 2018, 10:00]. Dostopno na spletnem naslovu: http://www.elprocus.com/elprocus-staging/a- brief-on-breadboard-basics-and-connections/

[9] Arduino Nano. 2015. GT wiki. [Citirano 5. junij 2018, 10:00]. Dostopno na spletnem naslovu: http://www.geeetech.com/wiki/index.php/Arduino_Nano

[10] Arduino Nano all in one design for breadboard use. 2008. Arduino. [Citirano 5.

junij 2018, 10:00]. Dostopno na spletnem naslovu:

https://blog.arduino.cc/2008/05/15/arduino-nano-all-in-one-design-for-breadboard- use/

(39)

29

[11] Accelometers: What they are and how they work. 2013. LIVESCIENCE. [Citirano 5. junij 2018, 10:00]. Dostopno na spletnem naslovu:

https://www.livescience.com/40102-accelerometers.html

Reference

POVEZANI DOKUMENTI

V diplomskem delu želim s pomočjo vprašanj, ki jih bom zastavila otrokom pred dejavnostjo, raziskati, kaj vedo otroci o papirju in papirnih izdelkih.. Zanima me, ali bodo

Sem Špela Vodeb, izredna študentka 3. letnika predšolske vzgoje na Pedagoški fakulteti Univerze v Ljubljani. Pred vami je anketni vprašalnik, s pomočjo katerega si bom

Na koncu mojega diplomskega dela je opisan projekt izdelave tipnih ilustracij v okviru katerega je izšla tudi publikacija, ki je dostopna slepim in slabovidnim v slovenskem

Zastavila sem si tudi raziskovalno vprašanje, kako lahko z izkustvenim u č enjem vplivamo na znanje predšolskih otrok o dejavnikih okolja, ki vplivajo na preživetje

Želim si, da bi v prihodnosti lahko še organizirala šolo v naravi, saj bi lahko uporabila pridobljeno znanje in odpravila ugotovljene pomanjkljivosti prve šole v naravi, ki sem

V analiziranih letih se je odvijal projekt Program razvoja podeželja 2007-2013, iz naslova katerega so si na posameznih gospodarstvih lahko preko razpisov zagotovili denarna

Na osnovi rezultatov raziskave projekta SiOK sem predstavila rezultate meritve organizacijske klime v Banki X med leti 2001, 2002, 2005 in 2008.. Po rezultatih raziskave je v Banki

Bi si pa kazalo zapomniti, da se od zasvojenih in njihovega življenja lahko veliko naučimo, tudi to, da vsak pri sebi lahko nekaj spremeni, za kar ni nujno vedno treba imeti