• Rezultati Niso Bili Najdeni

Priklop Arduina [10]

In document KAZALO SLIK (Strani 25-0)

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, 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>

24

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

constrain(y, 65, 150);

plosca.write(x);

delay(50);

}

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.

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

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.

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/

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

In document KAZALO SLIK (Strani 25-0)