• Rezultati Niso Bili Najdeni

UČNI PRIPOMOČEK ZA SPOZNAVANJE OTROK Z ELEKTRONIKO, ROBOTIKO IN PROGRAMIRANJEM

N/A
N/A
Protected

Academic year: 2022

Share "UČNI PRIPOMOČEK ZA SPOZNAVANJE OTROK Z ELEKTRONIKO, ROBOTIKO IN PROGRAMIRANJEM"

Copied!
64
0
0

Celotno besedilo

(1)

Univerza v Ljubljani

Fakulteta za elektrotehniko

Mitja Brkopec

UČNI PRIPOMOČEK ZA SPOZNAVANJE OTROK Z

ELEKTRONIKO, ROBOTIKO IN PROGRAMIRANJEM

Diplomsko delo

Visokošolski strokovni študijski program prve stopnje Aplikativna elektrotehnika

Mentor: doc. dr. Matija Pirc

Ljubljana, 2021

(2)
(3)
(4)
(5)
(6)
(7)

Zahvala

Najprej bi se rad zahvalil doc. dr. Matiji Pircu, ki mi je pomagal ter me usmerjal pri izdelavi in pisanju diplomske naloge. Nato Vidu Čarmanu, Marku Jankovcu in Osnovni šoli Polhov Gradec, ki so omogočili začetek projekta in dali pomen diplomski nalogi. Velika zahvala gre tudi staršem in dekletu za njihovo strpnost, pomoč in podporo mojega dela.

(8)
(9)

Povzetek

Potreba po inženirjih je v današnjem času zelo velika, saj je elektrotehnika močno vpeta v vsakdanje življenje. Da se poveča zanimanje za tovrsten poklic, je potrebno otrokom dovolj zgodaj tekom šolanja in z zanimivim pristopom predstaviti različna področja elektrotehnike. V ta namen smo izdelali vezje, namenjeno osnovnošolskim otrokom, za spoznavanje osnov elektrotehnike preko učenja spajkanja in programiranja. Trg že ponuja določene rešitve, ki pa so običajno predrage, prezahtevne ali pa imajo precej omejeno funkcionalnost.

Zasnovano vezje smo vključili v avtomobilček, ki ga krmilimo na računalniku preko

Bluetooth povezave v programu Snap4Arduino. To nam omogoča mikrokrmilnik ESP32-WROOM-32, na katerega smo naložili program z dopolnjenim protokolom Firmata, ki

vsebuje tako standardne kot visokonivojske ukaze za upravljanje z avtomobilčkom. Z dvema motorjema, ki ju lahko neodvisno krmilimo z dvojnim H-mostičem L293D, ločeno upravljamo z levim in desnim kolesom. To omogoča izvajanje različnih manevrov, kot so premik v levo, desno, naprej in nazaj. Poleg tega so možne različne dodatne funkcije, na primer uporaba svetlečih diod, ultrazvočnih senzorjev za zaznavanje oddaljenosti od ovir, fotouporov za zaznavanje svetlobe in foto-prekinjevalnikov za zaznavanje hitrosti vrtenja koles. V grafičnem programskem okolju Snap4Arduino smo pripravili tudi nekaj svojih blokov, ki omogočajo dodatno upravljanje avtomobilčka. Sestavili smo tudi nekaj osnovnih nalog, ki preko raznovrstnega upravljanja avtomobilčka vodijo učence skozi osnovne koncepte programiranja.

Ravnanje z vezjem in izvedbo nalog smo preizkusili s pomočjo 14-letne učenke brez predznanja spajkanja in programiranja. Zanimalo nas je, koliko časa potrebuje za sestavo celotnega avtomobilčka. Izkazalo se je, da je za samo spajkanje avtomobilčka porabila več časa, kot smo predvidevali. Programi so ji bili na začetku preveč enostavni, vendar je bila na koncu navdušena nad nalogami in zadovoljna s končnim rezultatom.

Ključne besede: robotski avtomobilček, Arduino, DC motor, L293D, poučevanje, Snap4Arduino, ESP32.

(10)

Abstract

The need for electronic engineers is very high nowadays, as electronics can be found everywhere in everyday life. In order to increase the interest in this profession, it is necessary for children to be introduced to the field of electrical engineering early and with an interesting approach. For this purpose, we created a teaching aid designed for primary school children to learn the basics of electrical engineering through learning soldering and programming. The market already offers certain solutions, which are often too expensive, too demanding or have rather limited functionality.

The teaching aid was designed as a toy car, which is controlled by a computer via a Bluetooth connection with the help of Snap4Arduino graphical programming environment.

This is made possible by the ESP32-WROOM-32 microcontroller which contains an upgraded version of Firmata protocol, which contains both, standard and new high-level commands for driving a toy car. With two motors that can be independently controlled by the L293D dual H-bridge, the left and right wheels are operated separately. This allows the car to perform various manoeuvres, such as moving left, right, forward and backward. Furthermore, the functionality of the car can be expanded to include additional LEDs, ultrasonic sensors to detect distances from obstacles, photo-resistors to detect light and photo-interrupters to detect the speed of rotation of the wheels. For the Snap4Arduino graphics programming

environment, some new blocks were prepared that allow easier control of the toy car. We have also put together some basic exercises that guide students through basic programming concepts via a variety of toy car control options.

The suitability of the designed teaching aid for introducing children to the field of electronics was tested with the help of a 14-year-old student with no prior knowledge of soldering or programming. We wondered how long it would take to assemble the whole toy car. It turned out that she spent more time soldering the car than we expected. The programs were too simple for her at the beginning, but in the end she was enthusiastic about the tasks and happy with the end result.

Keywords:robotic toy car, Arduino, DC motor, L293D, teaching, Snap4Arduino, ESP32.

(11)

Vsebina

1. Uvod ... 1

2. Pregled obstoječih rešitev ... 2

3. Novi avtomobilček ... 6

3.1. Mikrokrmilnik ESP32-WROOM-32 ... 7

3.2 H-mostič in DC motorja ... 8

3.3 Napajanje električnega vezja ... 10

3.4 Svetleča dioda ... 11

3.5 Ostale komponente ... 11

3.6 Tiskano vezje ... 12

3.7 Nalaganje programa ... 13

4. Snap4Arduino ... 18

5. Implementacija protokola Firmata na mikrokrmilniku ESP32-WROOM-32 ... 19

5.1 Brezžično posodabljanje programske opreme ... 21

5.2 Bluetooth povezava ... 22

5.3.1 Dodajanje svojih blokov v Snap4Arduino ... 28

6. Vaje programiranja ... 31

6.1 Premik narisanega avtomobilčka ... 31

6.2 Prižiganje in ugašanje enobarvne svetleče diode ... 34

6.3 Utripanje enobarvnih svetlečih diod ... 35

6.4 Premik in zaustavitev avtomobilčka ... 36

6.5 Kontroliranje hitrosti avtomobilčka ... 37

6.6 Samodejna zaustavitev avtomobilčka ... 38

6.7 Premik avtomobilčka po namišljenem pravokotniku ... 39

6.8 Avtomobilčkov ples ... 40

6.9 Dodatne funkcije ... 40

7. Rezultati ... 43

8. Zaključek ... 44

9. Literatura ... 45

(12)

Seznam slik

Slika 1: Komplet za programirljivi avtomobilček z Arduino razvojno ploščico ... 2

Slika 2: Programirljivi avtomobilček podjetja Shenzen KEYES DIY ROBOT co., Ltd. ... 3

Slika 3: Arduino avtomobilček ... 4

Slika 4: Obstoječa verzija avtomobilčka ... 4

Slika 5: Električna shema na Fakulteti za elektrotehniko razvitega preizkusnega avtomobilčka ... 5

Slika 6: Električna shema novega avtomobilčka ... 6

Slika 7: Vezava mikrokrmilnika ESP32-WROOM-32 in delov, ki so namenjeni njegovemu delovanju ... 7

Slika 8: Vezava H-mostiča L293D ... 9

Slika 9: Kombinacija za mirovanje motorja ... 9

Slika 10: Primer vrtenja v (a) eno in (b) drugo smer ... 10

Slika 11: a) Micro USB priključek, b) napetostni regulator AMS1117-3 ... 10

Slika 12: Svetleče diode in LED trak v električni shemi ... 11

Slika 13: Električna shema razširitvenih komponent ... 11

Slika 14: Tiskano vezje ... 12

Slika 15: Shema priključitve USB serijskega vmesnika na vezje avtomobilčka ... 13

Slika 16: Ponastavitev serijskega vmesnika ... 13

Slika 17: Serijski vmesnik v Arduino okolju ... 14

Slika 18: Arduino serijski vmesnik ... 14

Slika 19: Dodatni URL naslov za upravljanje ploščic ... 14

Slika 20: Dodajanje ploščice v program Arduino ... 15

Slika 21: Izbira ploščice ESP32 v programu Arduino ... 15

Slika 22: Tipki Preveri in Naloži v Arduinu ... 16

Slika 23: Izpis uspešno narejene dostopne točke ... 16

Slika 24: Dostopna točka na računalniku ... 16

Slika 25: Povezava za brezžično posodabljanje programa ... 17

Slika 26: Konfiguracija spomina ... 17

Slika 27: Programsko okolje Snep4Arduino s preprostim programom. 1 – tipke za zagon, ustavitev in prekinitev programa, 2–10 bloki z različnimi funkcijami ... 18

Slika 28: Void setup() funkcija ... 20

Slika 29: Void loop() funkcija ... 20

Slika 30: Void checkOTAStatus() funkcija ... 21

Slika 31: Void setOTAMode() funkcija ... 22

Slika 32: Deklaracija Bluetooth spremenljivk ... 22

Slika 33: Void configBT() funkcija ... 23

Slika 34: Void btCallback funkcija ... 23

Slika 35: Void checkBtConnection() funkcija ... 24

Slika 36: Nastavitev izhoda na digitalnem priključku ... 24

Slika 37: Primer našega sysex sporočila ... 25

Slika 38: Izsek sysex funkcije z ukazi za premikanje avtomobilčka ... 28

Slika 39: Poimenovanje novega bloka ... 29

Slika 40: Ustvarjanje novega bloka ... 29

Slika 41:Tipka urejevalnika slike ... 32

Slika 42: Risanje avtomobilčka ... 32

(13)

Slika 43: Prvi program – premik narisanega avtomobilčka na zaslonu ... 33

Slika 44: Povezava ploščice preko tehnologije Bluetooth ... 34

Slika 45: Drugi program – prižiganje in ugašanje svetlobne diode ... 34

Slika 46: Tretji program – uporaba for zanke ... 35

Slika 47: Četrti program – premik avtomobilčka naprej-nazaj in njegova zaustavitev ... 36

Slika 48: Peti program – kontroliranje hitrosti avtomobilčka ... 37

Slika 49: Šesti program – premik in samodejna zaustavitev avtomobilčka ... 38

Slika 50: Sedmi program – premik avtomobilčka po namišljenem pravokotniku ... 39

Slika 51: Osmi program – ples avtomobilčka ... 40

Slika 52: Funkcija za merjenje oddaljenosti s pomočjo ultrazvočnega merilnika v kodi vgrajenega mikrokrmilnika ... 41

Slika 53: Sysex funkcija za ultrazvočni senzor ... 41

Slika 54: Urejanje bloka za ultrazvočni senzor v jeziku Snap4Arduino ... 42

Slika 55: Urejanje bloka za izvajanje funkcije ultrazvočnega senzorja ... 42

Seznam tabel

Tabela 1: Strapping vhodi za boot mode ... 7

Tabela 2: Naslovi ukazov protokola ... 25

Tabela 3: Naslovi sysex funkcij ... 26

Tabela 4: Novi bloki ... 30

(14)
(15)

Seznam uporabljenih simbolov

Veličina/oznaka Enota

Ime Simbol Ime Simbol

tok I amper A

napetost U volt V

frekvenca f hertz Hz

kapaciteta C farad F

(16)
(17)

Seznam uporabljenih kratic

V diplomskem delu so uporabljene naslednje kratice:

Kratica Angleško ime

USB Universal Serial Bus

LED Light Emitting Diode

Bluetooth LE Bluetooth Low Energy

UART Universal asynchronous

receiver-transmitter

I2C Inter-integrated circuit

CE Conformite Eurpeenne

SRAM Static random access

memory

ROM Read-only memory

PWM Pulse-width modulation

DC Direct current

RGB Red-Green-Blue

PCB Printed circuit board

THT Through-hole technology

SMD Surface mount device

GND Ground

URL Internet shortcut

(18)
(19)

Uvod

1. Uvod

Svet, v katerem živimo, je prepleten z elektroniko – naprave, na primer mobilni telefoni, računalniki, prenosne tablice in televizorji, so del našega vsakdana, zato si življenja brez njih pravzaprav ne znamo več predstavljati. Elektronskih naprav se pogosto poslužujejo tudi otroci, saj jim predstavljajo vir zabave, igre in novodobne komunikacije z ostalim svetom. Za nadaljnji razvoj elektronskih naprav bomo v prihodnosti potrebovali precej inženirjev elektrotehnike, zato je pomembno, da se dovolj otrok že zgodaj navduši za ta poklic. V osnovnih šolah že izvajajo izbirni predmet Elektronika z robotiko, ki šolarjem omogoča vpogled v osnove delovanja tovrstnih tehnologij in jim predstavi različna področja elektrotehnike. S tem marsikaterega otroka navdušimo nad elektrotehniko in mu morda olajšamo izbiro nadaljnjega šolanja. Žal se ta predmet ne izvaja na vseh osnovnih šolah, zaradi tega se mnogi otroci z elektrotehniko srečajo šele na srednji šoli ali celo fakulteti [1].

Zato se mi je porodila ideja, da bi s skupino ostalih študentov zasnovali program, s katerim bi pomagali osnovnim šolam pri izvajanju poučevanja elektrotehnike na zanimiv in inovativen način. Najprej bi otroci spoznali elemente, s katerimi bi delali tekom celotnega programa. Naučili bi se, kaj je naloga upora, svetlobne diode, kondenzatorja in drugih elementov ter na kaj morajo biti pozorni pri priključevanju posameznih elementov v električno vezje. Kasneje bi si za spoznavanje elektronike pomagali z moduli, ki bi jih sami spajkali in jih nato povezali v različna vezja. Da bodo vaje zanimivejše in bolj ciljno naravnane, smo pripravili povezovalne zgodbe, ki otrokom omogočajo lažje razumevanje ter hitrejše pomnjenje nove snovi. Na koncu bi otroci naredili še nekaj svojih projektov, pri katerih bi obnovili svoje znanje iz spajkanja, spoznali nekaj novih elementov in se naučili osnov programiranja. Med celotnim procesom spoznavanja in izdelave vezij pa bi jim priskočili na pomoč mentorji z razlago. Tako bi dosegli cilj, da s predmetom širimo znanje in zanimanje za elektrotehniko ter motiviramo otroke za nadaljnje izobraževanje v tej smeri.

Predmet te diplomske naloge je razvoj programirljivega avtomobilčka, ki bi ga učenci sestavili in programirali v zadnjem delu opisanega učnega programa. Za ta namen morajo biti sestavni deli avtomobilčka cenovno ugodni, da si lahko komplet za sestavljanje privoščijo vsi učenci. Hkrati mora biti zasnovan tako, da bo težavnost sestavljanja primerna znanju učencev, ki se pri tem prvič srečajo s spajkanjem, imeti mora dovolj funkcij, da omogoča zasnovo več zanimivih programerskih nalog, in način programiranja mora biti dovolj enostaven, da učencev ne odvrne od programiranja.

(20)

Obstoječe rešitve

2

2. Pregled obstoječih rešitev

Na trgu obstaja več izdelkov, ki v grobem ustrezajo našim zahtevam. Mnogo kompletov za sestavljanje, ki vsebujejo komplet motorčkov s kolesi in plastičnim podvozjem, Arduino razvojno ploščico s procesorjem in nekaj dodatnih senzorjev, najdemo v spletnih trgovinah.

Primer takšnega kompleta je prikazan na Sliki 1. Poleg že naštetih osnovnih delov avtomobilčka vsebuje ta komplet še ultrazvočni senzor za merjenje razdalje, servomotor za obračanje ultrazvočnega senzorja in povezovalno tiskano vezje za enostavnejšo priključitev vseh komponent.

Slika 1: Komplet za programirljivi avtomobilček z Arduino razvojno ploščico

Sestavljanje takšnega kompleta zahteva samo spajkanje povezovalnih kablov in mehansko sestavljanje avtomobilčka, kar ne izpolnjuje naših zahtev. Končani avtomobilček lahko programiramo v Arduino okolju, vendar je za upravljanje preko računalnika potrebna stalna povezava preko USB (angl. Universal Serial Bus) kabla, kar ni zaželeno. Cene takšnih kompletov se gibajo med 27 in 35 € [2].

Precej bolj dodelan, a malce dražji izdelek (prikazan na Sliki 2) pa ponuja podjetje Shenzen KEYES DIY ROBOT co., Ltd. [3]. Tudi ta avtomobilček je sestavljanka vnaprej pripravljenih modulov in ima podobne sestavne dele kot prej predstavljeni avtomobilček:

podvozje, dva motorčka s kolesi, kontrolno tiskano vezje z mikroprocesorjem in ultrazvočni senzor. Poleg tega ima še dve tipki, šest barvnih svetlečih diod (angl. Light Emitting Diode – LED), matriko 5×5 enobarvnih LED, kompas, pospeškometra, svetlobni senzor za zaznavanje črte pod avtomobilčkom, infrardeči sprejemnik z daljinskim upravljalnikom in Bluetooth povezavo za daljinsko upravljanje s telefonom ali računalnikom.

(21)

Obstoječe rešitve

3 Slika 2: Programirljivi avtomobilček podjetja Shenzen KEYES DIY ROBOT co., Ltd.

Za sestavljanje tega kompleta ni potrebno nič spajkati, kar je ena od zahtev za naš izdelek.

Tudi če bi se dalo dobiti popolnoma razstavljen komplet, bi bilo spajkanje teh komponent preveč zahtevno za učence osnovne šole. S stališča funkcionalnosti ta komplet izpolnjuje in celo presega naše zahteve, vendar je cena, ki v redni prodaji znaša 40 € brez poštnine in davkov [3], za nas previsoka.

Na spletu smo zasledili še eno verzijo avtomobilčka (Slika 3) [4]. Tudi ta avtomobilček je sestavljen iz že pripravljenih modulov, vendar ima namesto dveh štiri motorje. Poleg motorjev vsebuje še dva infrardeča senzorja, ki prepoznata razliko med belo in črno podlago.

Črna podlaga predstavlja pot, po kateri se giblje avtomobilček in ji sledi, bela pa zunanje območje, v katerega avtomobilček ne sme zaiti. Če zaide s poti, bosta infrardeča senzorja to zaznala in poslala signal Arduino Uno ploščici, ki bo preko H-mostiča ustavila motorje avtomobilčka. Prav tako bi ultrazvočni merilnik zaznal oviro in posredoval informacijo ploščici. Verzija je nadgradljiva z različnimi moduli, kot je Bluetooth modul, digitalna ura in kamera. S temi nadgradnjami bi lahko dosegli željeno funkcionalnost, vendar se posledično zviša cena avtomobilčka. Cena za malce kompleksnejši avtomobilček tako znaša med 24 in 50 €, kar pa presega naš proračun.

(22)

Obstoječe rešitve

4 Slika 3: Arduino avtomobilček

Tudi na Fakulteti za elektrotehniko Univerze v Ljubljani so razvili model avtomobilčka, ki pa ni namenjen množični uporabi, temveč preizkušanju uporabnosti različnih senzorjev in modulov za namene poučevanja in navduševanja nadobudnih učencev (Slika 4). Ta avtomobilček je zasnovan na 8-bitnem mikrokrmilniku ATmega328PB družine AVR, ki je posodobljena verzija mikrokrmilnika ATmega328P, katerega najdemo na popularnih razvojnih ploščicah Arduino UNO. Mikrokrmilnik preko H-mostiča L293D upravlja z dvema motorčkoma, ki poganjata vsak svoje kolo. To omogoča pomikanje naprej in nazaj ter obračanje avtomobilčka z nastavljanjem različnih hitrosti in smeri vrtenja obeh motorčkov.

Slika 4: Obstoječa verzija avtomobilčka

(23)

Obstoječe rešitve

5 Poleg motorčkov, ki nudijo osnovno funkcionalnost, ima avtomobilček tudi tri tipke, dve enobarvni LED, deset barvnih LED, piskač, rotacijski dajalnik, dva fotoupora, priključek za servomotor, dva foto-prekinjevalnika za zaznavanje hitrosti vrtenja koles in priključke za tri ultrazvočne merilnike razdalje. Za daljinsko upravljanje ima na voljo infrardeči sprejemnik in Bluetooth modul. Dodatna razširitev funkcionalnosti avtomobilčka je možna preko pripravljenega priključka za I2C vodilo. Avtomobilček lahko napajamo z računalnikom preko USB povezave ali s prenosne baterije za telefone (angl. Power Bank), prav tako preko USB povezave. Električna shema avtomobilčka je prikazana na Sliki 5.

Slika 5: Električna shema na Fakulteti za elektrotehniko razvitega preizkusnega avtomobilčka S stališča funkcionalnosti ta avtomobilček izpolnjuje vse zahteve oziroma jih celo presega.

Vendar je spajkanje tega avtomobilčka v trenutni izvedbi prezahtevno za večino osnovnošolcev.

Prav tako cena avtomobilčka z vsemi predvidenimi komponentami znaša približno 27 € in in s tem presega naš proračun.

(24)

Novi avtomobilček

6

3. Novi avtomobilček

Večina v prejšnjem poglavju predstavljenih rešitev funkcionalno ustreza našim željam, vendar nobena izmed njih ni idealna. Predvsem nobena ni primerna, da bi jo lahko učenci sami spajkali. Ker je to ena izmed naših glavnih želja, bomo morali zasnovati lastno tiskano vezje in svojo rešitev prilagoditi z izbiro primerno velikih komponent. Tako bomo končni izdelek popolnoma prilagodili svojim zahtevam.

Preizkusni avtomobilček, ki je bil razvit na Fakulteti za elektrotehniko Univerze v Ljubljani, izmed vseh predstavljenih modelov najbolj ustreza našim zahtevam, zato smo ga uporabili kot izhodišče za načrtovanje svoje rešitve.

Osnova avtomobilčka je komplet dveh motorjev s kolesi in podvozjem iz pleksi stekla,

ki trenutno stane 2,61 € [5]. Za krmiljenje avtomobilčka smo izbrali mikrokrmilnik ESP32-WROOM-32. Za zamenjavo mikrokrmilnika smo se odločili, ker ima omenjeni

mikrokrmilnik že vgrajeni Bluetooth in Wi-Fi povezavi, zato ne potrebuje dodatnega modula za brezžično komunikacijo. Motorja sta na mikrokrmilnik priključena preko H-mostiča L293D.

Ohranili smo tudi dve enobarvni svetleči diodi, ki ju bomo uporabili za začetek učenja programiranja. S tem je dosežena osnovna funkcionalnost avtomobilčka.

Funkcionalnost vezja smo nadgradili s potenciometrom in infrardečim sprejemnikom, ki sta cenovno dostopna in ju lahko uporabimo za reševanje naprednejših nalog pri učenju programiranja. Za dodatne elemente, kot so fotoupori, ultrazvočni merilniki, LED trak in foto- prekinjevalniki, pa smo pustili proste priključke. Dodatne priključke smo pustili tudi za serijski vmesnik, ki preko brezžične povezave omogoča nalaganje novih verzij programa za mikrokrmilnik (angl. firmware). Celotna električna shema novega avtomobilčka je prikazana na Sliki 6.

Slika 6: Električna shema novega avtomobilčka

(25)

Novi avtomobilček

7

3.1. Mikrokrmilnik ESP32-WROOM-32

ESP32-WROOM-32 (Slika 7a) je mikrokrmilnik z vgrajeno Wi-Fi, Bluetooth in Bluetooth LE (angl. Bluetooth Low Energy) povezljivostjo in ima že vgrajeno anteno [7]. Leta 2017 je prestal vse teste delovanja in zagotavljanja kakovosti na šestih svetovnih trgih. Eden izmed teh je tudi Evropska unija. Tako je pridobil oznako CE, ki je glavni kazalec skladnosti izdelka in potrjuje, da izdelek izpolnjuje bistvene zahteve glede varnosti potrošnika, zdravja in varovanja okolja, kot jih določa zakonodaja Evropske unije. Mikrokrmilnik ESP32-WROOM- 32 je zelo zmogljiva naprava z 32 prostimi vhodi oziroma izhodi, kar omogoča širok nabor možnosti priključevanja zunanjih modulov. Deluje z napetostjo med 3 in 3,6 V ter podpira SPI, UART, I2C in I2S komunikacijo. Pravilni zagon mikrokrmilnika smo zagotovili z zakasnilnim RC vezjem na Enable vhodu (Slika 7b), ki poskrbi, da se mikrokrmilnik zažene šele, ko se napajalna napetost stabilizira. Poleg tega smo za preprečevanje motenj na napajalni priključek dodali kondenzator s kapaciteto 100 nF. Pozorni smo morali biti tudi na priključke za nastavljanje načina zagona (angl. bootstrap), ki konfigurirajo način zagona (angl. boot mode) (Tabela 1). Zato smo povezali vhod GPIO0 na tipko (Slika 7c) in s tem omogočili nalaganje novega programa na mikrokrmilnik.

Tabela 1: Strapping vhodi za boot mode

Slika 7: Vezava mikrokrmilnika ESP32-WROOM-32 in delov, ki so namenjeni njegovemu delovanju

(26)

Novi avtomobilček

8 Značilnosti krmilnika ESP32-WROOM-32 so naslednje [6]:

 procesor: dvojedrni 32-bitni LX6 mikroprocesor s frekvenco med 80 in 240 MHz,

 spomin: SRAM – 520 kB za podatke in ukaze, ROM – 448 kB za vklop in osnovne funkcije, RTC slow SRAM – 8 kB za uporabo v spalnem načinu, RTC fast SRAM – 8 kB za shrambo podatkov ob vklopu iz spalnega načina in FLASH – 4 MB za shranjevanje programa,

 brezžična povezljivost: Wi-Fi – 802.11 b/g/n/e/i (802.11n @ 2,4 GHz do 150 Mbit/s), Bluetooth – v4.2 BR/EDR in Bluetooth LE.

Glavni razlog za uporabo mikrokrmilnika ESP32-WROOM-32 so vgrajeni moduli za brezžično povezavo. Tako smo se izognili (nepotrebnim) dodatnim elementom v vezju in znižali ceno projekta. Poleg tega je možno ESP32-WROOM-32 programirati tudi preko brezžičnih povezav, če trenutno naloženi program to omogoča. To možnost bomo izkoristili za posodabljanje programa na mikrokrmilniku, zaradi česar ni potrebno vgraditi serijskega vmesnika. Slednjega bomo potrebovali le za prvo nalaganje programa, ki bo omogočil nadaljnje brezžično posodabljanje. Pustili ga bomo kot ločen modul, ki ga bo imel le učitelj za primer, da bi kdo po nesreči onemogočil brezžično posodabljanje na tiskanem vezju. V ta namen bodo na voljo prosti priključki (Slika 7d). To pri mikrokrmilniku ATmega328PB-AU ni mogoče, zato je moral imeti prejšnji avtomobilček vgrajen tudi serijski vmesnik. Z odstranitvijo le-tega dodatno znižamo ceno projekta, saj mikrokrmilnik ESP32-WROOM-32, ki stane 2,65 € [12], nadomesti mikrokrmilnik ATmega328PB, brezžični Bluetooth modul HC-05 in serijski vmesnik FT231XS, ki skupaj stanejo približno 7 € [13, 14, 15].

Celotna poraba toka mikrokrmilnika ATmega328PB skupaj z dodatnim modulom za Bluetooth in serijskim vmesnikom znaša okoli 40 mA [9], povprečna poraba ESP32 pri 3.3 V in 25 °C pa približno 80 mA, pri čemer slednji vključuje še porabo toka Wi-Fi in Bluetooth LE.

3.2 H-mostič in DC motorja

Enosmerni motorji so preprosti elektromehanski pretvorniki, ki enosmerno vhodno napetost pretvorijo v vrtenje. Imajo dva zunanja priključka, na katera lahko priklopimo pozitivno ali negativno napetost. V primeru menjave polaritete se spremeni smer vrtenja. Če dovajamo višjo napetost, se vrtijo hitreje, če nižjo, pa se vrtijo počasneje. Ker imamo vezje priključeno na konstantni vir napetosti, ne moremo H-mostiču dovajati različne velikosti napetosti. Ta problem smo rešili z uporabo pulzno-širinske modulacije (angl. Pulse-width modulation – PWM) na mikrokrmilniku, ki spreminja delovni cikel signala, s tem pa povprečno napetost na izhodu H-mostiča. V diplomskem delu sta motorja krmiljena preko integriranega vezja L293D [8], kot je prikazano na Sliki 8. Integrirano vezje je dvokanalno, zato omogoča sočasno upravljanje dveh motorjev. Z (visokim ali nizkim) logičnim signalom na vhodnih priključkih krmilimo izhod, na katerega je priklopljen zunanji priključek enosmernega (DC) motorja. Vsak kanal ima dodatni vhodni priključek za omogočanje njegovega delovanja.

Kontrolni del integriranega vezja je napajan z napetostjo 5 V, DC motorji pa se napajajo preko dodatnega napajalnega priključka, ki dovoljuje napetosti od 4,5 do 36 V. H-mostič L293D podpira neprekinjene tokove velikosti 1 A s kratkotrajnimi konicami do 2 A. Prilagojen je za krmiljenje induktivnih bremen, kot so releji, solenoidi, DC motorji, koračni motorji ipd. Cena tega mostiča znaša okoli 1 €.

(27)

Novi avtomobilček

9 Slika 8: Vezava H-mostiča L293D

Smer vrtenja enosmernih motorjev določimo s polariteto napetosti na motorju. H-mostič ima štiri stikala, za katera obstaja 16 različnih kombinacij odprtih in zaprtih stikal. Za krmiljenje DC motorja so pomembne kombinacije, ki omogočijo vrtenje v eno in drugo smer ter mirovanje. S Slike Slika 9 je razvidno, da so v primeru mirovanja vsa stikala razklenjena, zato tok ne teče in motor miruje [10].

Slika 9: Kombinacija za mirovanje motorja

Če želimo motor zavrteti, moramo skleniti stikali po eni diagonali, po drugi diagonali pa ne. Pri vrtenju v eno smer sta sklenjeni stikali Q1 in Q4 (Slika Slika 10a), v drugo smer pa stikali Q2 in Q3 (Slika Slika 10b). Prvi mostič vezja L293D krmilimo z vhodoma MA1 in MA2, drugi pa z vhodoma MB1 in MB2. En vhod hkrati krmili dve zaporedni stikali, npr. Q1 in Q2 tako, da je vedno eno stikalo sklenjeno, drugo pa razklenjeno. Zaradi tega s tem H-mostičem ni mogoče narediti kratkega stika med pozitivnim in negativnim napajalnim priključkom mostiča.

(28)

Novi avtomobilček

10 Slika 10: Primer vrtenja v (a) eno in (b) drugo smer

V primeru da želimo zaustaviti motor, moramo istočasno skleniti stikala Q1 in Q3 ali pa Q2 in Q4. To dosežemo tako, da oba vhoda, MA1 in MA2 (ali MB1 in MB2), hkrati nastavimo na logično 0 ali logično 1.

3.3 Napajanje električnega vezja

Električno vezje dobiva 5 V napetost iz Micro USB priključka (Slika 11a), na katerega je priključena prenosna polnilna banka (ang. power bank), ki napaja H-mostič, barvne LED, ultrazvočne merilnike, fotoupore in foto-prekinjevalnike ter napetostni regulator AMS1117-3, ki zagotavlja izhodno napetost 3,3 V in maksimalni tok 1 A. To napetost smo uporabili za napajanje mikrokrmilnika, infrardečega senzorja in potenciometra. Za dodatno stabilizacijo napetosti smo na vhod in izhod regulatorja dodali elektrolitske kondenzatorje s kapaciteto 100 µF, kar prikazuje Slika 11b.

Slika 11: a) Micro USB priključek, b) napetostni regulator AMS1117-3

(29)

Novi avtomobilček

11

3.4 Svetleča dioda

Svetleče diode so polprevodniški elementi, ki oddajajo svetlobo, ko čez njih teče električni tok. Imajo zelo dober izkoristek, zanesljivost in v zadnjih letih tudi ugodno ceno, zato smo jih uporabili v naši diplomski nalogi. V vezju sta že dve enobarvni LED (Slika 12a), ki jih uporabljamo pri začetku učenja programiranja. Na vezje je možno priključiti tudi LED trak (Slika 12b) – to je trak želene dolžine in širine, na katerega so pritrjene svetleče diode. Skozi celotno dolžino traku je položen baker, ki prevaja električni tok, na spodnji strani pa je v večini primerov lepilni trak. Predvidena je uporaba digitalnega RGB LED traku, ki je sestavljen iz treh kanalov: napajalni kanal (+5 V), zemlja (GND) in podatkovni kanal (Din). S slednjim programsko nastavljamo barvo LED na traku.

Slika 12: Svetleče diode in LED trak v električni shemi

3.5 Ostale komponente

Poleg zgoraj naštetih delov smo za izdelavo naloge uporabili še nekatere druge komponente, kot so upori, kondenzatorji, potenciometer za učenje branja podatkov in infrardeči senzor, ki lahko sprejema signale iz daljinskega upravljalnika. Na voljo so tudi prosti priključki, ki se lahko v prihodnje uporabijo za dodajanje nekaterih kompleksnejših elementov, na primer za dodajanje ultrazvočnih merilnikov razdalje, fotouporov za sledenje avtomobilčka svetlobi in foto-prekinjevalnikov, s katerimi bi lahko bolj nadzorovano in natančno nastavljali hitrost avtomobilčka. Cena celotnega modela je tako okoli 12,5 €.

Slika 13: Električna shema razširitvenih komponent

(30)

Novi avtomobilček

12

3.6 Tiskano vezje

Na Sliki 14 je prikazano tiskano vezje (angl. Printed circuit board – PCB). Električno vezje naj bi spajkali učenci, zato smo za večino elementov izbrali klasično tehnologijo ohišij (angl. Through-hole technology – THT), ki jih je enostavneje spajkati. Prav tako smo za preprečitev kratkega stika naredili večje luknje in kontakte ter oddaljili povezave od mesta spajkanja. Mikrokrmilnik je postavljen na rob ploščice, s čimer se izognemo povezavam pod anteno, kar bi zmanjšalo domet brezžične povezave. Za učence bomo elemente, ki jih je težje spajkati, kot so mikrokrmilnik, SMD kondenzatorji, Micro USB priključek in napetostni regulator, vnaprej spajkali na električno vezje. S tem smo vezje prilagodili njihovemu znanju spajkanja in zmanjšali verjetnost pojava težav pri sestavljanju avtomobilčka.

Slika 14: Tiskano vezje

(31)

Programiranje

13

3.7 Nalaganje programa

Za prvo nalaganje programa na mikrokrmilnik avtomobilčka potrebujemo komunikacijski pretvornik z USB na serijski vmesnik. Uporabimo lahko poljuben pretvornik, ki ima vse potrebne priključke. Povezati ga moramo, kot je prikazano na Sliki 15.

Slika 15: Shema priključitve USB serijskega vmesnika na vezje avtomobilčka

Nato je potrebno v upravitelju naprav poiskati številko vrat serijskega vmesnika. V programu Arduino nastavimo ustrezno številko vrat serijskega vmesnika in preverimo komunikacijo mikrokrmilnika z računalnikom. Tipično je potrebno pritisniti tipko Reset na vmesniku FTDI, ki pa je na našem tiskanem vezju ni bilo, zato smo morali v kratek stik povezati priključka GND in RTS (Slika 16).

Slika 16: Ponastavitev serijskega vmesnika

Takoj po sklenitvi kratkega stika ga je potrebno tudi razkleniti. Na serijskem vmesniku, ki ga najdemo pod zavihkom Orodja ali v zgornjem desnem kotu Arduino aplikacije (Slika 17),

(32)

Programiranje

14 se izpišejo informacije o komunikaciji med mikrokrmilnikom in računalnikom, kar prikazuje Slika 18.

Slika 17: Serijski vmesnik v Arduino okolju

Slika 18: Arduino serijski vmesnik

Po vzpostavitvi povezave z mikrokrmilnikom naložimo naš program. Pred prvim programiranjem mikrokrmilnika ESP32-WROOM-32 je treba okolju Arduino dodati podporo za ta mikrokrmilnik. To storimo tako, da kliknemo na zavihek Datoteka, nato izberemo možnost Nastavitve, kjer se nahaja polje Dodatni URL naslovi za upravljalnik ploščic, kot je prikazano na Sliki 19. V to polje vnesemo spletni naslov, kjer se nahajajo knjižnice za ta mikrokrmilnik.

Slika 19: Dodatni URL naslov za upravljanje ploščic

(33)

Programiranje

15 S tem smo Arduino okolju pokazali pot do podpornih paketov za dodaten tip mikrokrmilnika, ki ga je potrebno še naložiti. To naredimo tako, da pod zavihkom Orodja izberemo možnost Plošča, ki nam odpre dodatni meni, na katerem poiščemo Upravljalnik plošč. Odpre se okno (na Sliki 20), v katerem izberemo podporni paket za naš mikrokrmilnik in ga tako naložimo v Arduino okolje.

Slika 20: Dodajanje ploščice v program Arduino

Po pravilno izvedenem postopku se pod izbiro ploščic prikaže ESP32 Dev Module, kot prikazuje Slika 21. Na koncu je potrebno program še preveriti in naložiti na mikrokrmilnik.

Slika 21: Izbira ploščice ESP32 v programu Arduino

(34)

Programiranje

16 Vse skupaj naložimo na mikrokrmilnik s tipko Naloži, ki se nahaja poleg tipke Preveri (Slika 22).

Slika 22: Tipki Preveri in Naloži v Arduinu

Vse to je potrebno prvič naložiti preko FTDI serijskega vmesnika, nadaljnje posodabljanje programa pa lahko izvedemo brezžično s pomočjo dostopne točke (angl. Access point) mikrokrmilnika, preko katere lahko kasneje ustvarimo povezavo v Arduino programskem okolju. Za aktivacijo dostopne točke je potrebno najprej povezati GND in RTS v kratek stik (Slika 16), sekundo kasneje pa moramo na ploščici pritisni tipko FLASH in jo tiščati približno dve sekundi. Ob pravilni izvedbi se nam na serijskem vmesniku izpiše sporočilo, da je na mikrokrmilniku aktivirana dostopna točka, do katere lahko dostopamo preko računalnika (Slika 23). Prav tako se ta dostopna točka pojavi na seznamu brezžičnih omrežij na računalniku (Slika 24).

Slika 23: Izpis uspešno narejene dostopne točke

Slika 24: Dostopna točka na računalniku

(35)

Programiranje

17 Ko se povežemo, se nam v Arduino programskem okolju pod zavihkom Vrata odpre nova povezava, preko katere lahko brezžično posodabljamo program na mikrokrmilniku (Slika 25).

Slika 25: Povezava za brezžično posodabljanje programa

Potrebno je paziti, da ob vsakem nalaganju novega programa vedno vključimo še del programa za brezžično povezavo. V nasprotnem primeru ne bo več možno brezžično posodabljati program in bo spet potreben serijski vmesnik. Pozorni moramo biti tudi na obseg programske kode, ker nam lahko zmanjka programskega spomina. V tem primeru moramo pod zavihkom Orodja spremeniti konfiguracijo spomina, kot nakazuje Slika 26.

Slika 26: Konfiguracija spomina

(36)

Programiranje

18

4. Snap4Arduino

Razviti avtomobilček je namenjen učenju spajkanja in osnov programiranja. Za prve korake otrok v svetu programiranja so primernejši grafični programski jeziki, ki so za razliko od običajnih programskih jezikov bolj nazorni in nimajo težav s pravili pisanja programske kode. Za ta projekt smo izbrali grafični programski jezik Snap4Arduino, ki omogoča interakcijo z zunanjimi napravami, kot so Arduino razvojne ploščice in tudi naš avtomobilček.

Snap4Arduino so razvili z namenom, da se otroci na enostaven in zabaven način spoznajo z osnovami programiranja[11]. Otroci raziskujejo delovanje programa preko reševanja raznih zanimivih izzivov. Oblikovanje in ustvarjanje je omogočeno z uvažanjem slik in glasbe ter risanjem lastnih skic, ki jih lahko oživijo z enostavnim programom.

Uporabniški vmesnik sestavljajo okno z ukazi v obliki blokov, površina za sestavljanje programa, gumbi za zagon, ustavitev in prekinitev programa (oznaka 1 na Sliki 27) ter okno za izvedbo programa. Programov se ne piše, temveč se jih sestavlja iz vnaprej pripravljenih blokov, kar začetnikom olajša učenje. Zelo dobro je poskrbljeno tudi za napake, saj blokov, ki si ne smejo slediti, ni možno postaviti skupaj.

Slika 27: Programsko okolje Snep4Arduino s preprostim programom. 1 – tipke za zagon, ustavitev in prekinitev programa, 2–10 bloki z različnimi funkcijami

(37)

Programiranje

19 Bloki so razporejeni v skupine glede na funkcionalnost, da jih uporabniki lažje najdejo:

 bloki za premikanje (oznaka 2 na Sliki 27) (angl. Motion), kjer so ukazi za premikanje in obračanje ter podatki o lokacijah in smereh;

 izgled (oznaka 3 na Sliki 27) (angl. Looks) – vsebuje ukaze za prikazovanje slik, oblačkov, spreminjanje barve in velikosti ter podatke o trenutni sliki (videz, velikost in ozadje);

 zvok (oznaka 4 na Sliki 27) (angl. Sound) ‒ tukaj so ukazi za predvajanje zvoka, spreminjanje glasnosti, izbira posameznega zvoka ter note;

 svinčnik (oznaka 5 na Sliki 27) (angl. Pen) ‒ tu lahko uporabimo pisalo, s katerim rišemo in brišemo. Nastavljamo lahko velikost, barvo in širino svinčnika;

 upravljanje (oznaka 6 na Sliki 27) (angl. Control) ‒ tu se nahajajo ukazi za začetek in konec kode ter ukazi, ki sprožijo določen dogodek;

 zaznavanje (oznaka 7 na Sliki 27) (angl. Sensing) ‒ tu so pogoji v zvezi z zaznavanjem določene slike, barve in razdalje do ostalih slik. Tu je tudi možnost postavljanja vprašanj in pomnjenja uporabnikovega odgovora ter zaznava pritiska tipk na tipkovnici ali miški.

Nekaj je tudi ukazov za video zaznavanje gibanja, njegovo uporabo in nastavljanje prosojnosti. Poleg tega je v tej kategoriji možno dodati uporabo štoparice in njeno ponastavljanje;

 operatorji (oznaka 8 na Sliki 27) (angl. Operators) ‒ tu lahko uporabljamo preproste matematične funkcije (seštevanje, odštevanje, množenje in deljenje) ter zahtevnejše matematične funkcije (absolutno vrednost in logaritmiranje). Možna je uporaba tudi nekaterih logičnih operatorjev;

 spremenljivke (oznaka 9 na Sliki 27) (angl. Variables) ‒ tu lahko naredimo nove funkcije za uporabo kjer koli v programu;

 arduino (oznaka 10 na Sliki 27) ‒ tu lahko povežemo mikrokrmilnik s programom, poleg tega pa lahko še prižigamo, ugašamo ali beremo izhode in vhode.

5. Implementacija protokola Firmata na mikrokrmilniku ESP32-WROOM-32

Firmata je protokol, ki omogoča komunikacijo med programom Snap4Arduino in mikrokrmilnikom. Obstajata dva glavna modela uporabe Firmate. V enem modelu avtor Arduino kode uporablja različne metode iz Firmata knjižnice za pošiljanje in prejemanje podatkov med Arduino napravo in programom, ki se izvaja na računalniku. Kot primer si lahko ogledamo funkcijo Firmata.sendAnalog(analogPin, analogRead(analogPin)), ki uporabniku omogoča, da lahko pošlje analogne podatke do gostitelja. V okviru drugega in pogosteje uporabljenega modela pa na Arduino ploščico naložimo neko osnovno Firmato, ki jo uporabimo za komunikacijo. Taka Firmata se običajno imenuje StandardFirmata in je že shranjena v Arduino programskem okolju. V našem primeru smo jo uporabili kot osnovo za program.

(38)

Programiranje

20 Program deluje tako, da najprej v void setup() funkciji definiramo vse, kar je potrebno za delovanje našega programa (Slika 28).

Slika 28: Void setup() funkcija

Kot je razvidno s Slike 28, se v naši kodi najprej na serijski vmesnik izpišejo osnovni podatki o kodi, nato pa program pregleda, ali želimo posodobiti program na mikrokrmilniku, kar je podrobneje opisano vpoglavju 5.1. Zatem definira priključke kot vhode ali izhode ter konfigurira Bluetooth povezavo, kot je predstavljeno v poglavju 5.2. Program nadaljuje z izvajanjem void loop() funkcije, ki začne delovati takoj ob zaključitvi void setup() funkcije in se izvaja ves čas med izvajanjem programa (Slika 29).

Slika 29: Void loop() funkcija

(39)

Programiranje

21 Funkcija void loop() najprej pokliče checkBtConnection() funkcijo, ki preveri in sporoči stanje Bluetooth povezave. V primeru vzpostavljene povezave program pregleda ukaz znak za znakom z uporabo while zanke. Po prejemu celotnega ukaza ga nato tudi poišče v processCommand() funkciji in izvede. Zadnji del kode pa se uporablja za sporočanje vrednosti priključkov programu Snap4Arduino.

5.1 Brezžično posodabljanje programske opreme

Celotna naloga je zasnovana tako, da jo bodo učenci rešili in končni izdelek tudi obdržali. V primeru samostojnega dela, ki odstopa od zastavljenih smernic, je možno posodobiti tudi program mikrokrmilnika, kar pa zahteva uporabo serijskega vmesnika. Da se izognemo dodatnim stroškom zaradi serijskega vmesnika, smo omogočili brezžično posodabljanje programsko-strojne opreme preko dostopne točke mikrokrmilnika. Kot je omenjeno v poglavju 3.7, se dostopna točka prižge ob daljšem pritisku na tipko FLASH ob zagonu programa.

Program v tem času s pomočjo funkcije void checkOTAStatus() preveri, ali je tipka pritisnjena (Slika 30).

Slika 30: Void checkOTAStatus() funkcija

V primeru pritisnjene tipke se koda nadaljuje v void setOTAMode() funkciji, ki konfigurira dostopno točko. Pri tem si zapomni podatke za geslo in čaka na naslednji ukaz.

Le-ta se začne izvajati, ko želimo računalnik povezati z dostopno točko. V tem primeru program preveri, če se podatki za geslo in vneseno geslo ujemata. V primeru da se ne ujemata, zavrne povezavo in čaka na naslednji poskus povezave. Ko je računalnik povezan na ustvarjeno dostopno točko, program ponovno čaka naslednji ukaz. Ta se nato začne izvajati, ko v Arduino okolju sprožimo posodabljanje programske opreme. V kodi so določena tudi sporočila, ki se izpišejo v primeru pojava določenega dogodka med posodobitvijo (Slika 31).

(40)

Programiranje

22 Slika 31: Void setOTAMode() funkcija

5.2 Bluetooth povezava

Cilj naloge je tudi brezžično upravljanje avtomobilčka. V ta namen smo uporabili Bluetooth povezavo, ki ji moramo v kodi najprej deklarirati spremenljivke, kot lahko vidimo na Sliki 32.

Slika 32: Deklaracija Bluetooth spremenljivk

Nato moramo konfigurirati povezavo v void configBT() funkciji (Slika 33). Znotraj nje nastavimo ime naprave, ki jo želimo upravljati. V primeru uspešne konfiguracije funkcija SerialBT.register_callback(btCallback) pove funkcijam za serijsko komunikacijo, katero funkcijo naj kličejo v void btCallback() funkciji, ko se stanje Bluetooth povezave spremeni. Če konfiguracija ni uspešna, se na serijskem vmesniku izpiše sporočilo, da je prišlo do napake.

(41)

Programiranje

23 Slika 33: Void configBT() funkcija

Ob uspešni konfiguraciji se sproži void btCallback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) funkcija, ki ob povezavi naprave z računalnikom izpiše razne informacije (Slika 34), med njimi tudi začetek in konec sysex funkcije, ki skrbi za povezavo med Snap4arduino aplikacijo in programom na mikrokrmilniku. Če računalnik ne uspe vzpostaviti brezžične povezave z napravo, se na serijskem vmesniku izpiše ustrezno sporočilo.

Slika 34: Void btCallback funkcija

(42)

Programiranje

24 S temi funkcijami brezžična povezava že deluje, vendar smo dodali še del kode za utripanje prve LED na vezju v primeru, da povezava ni vzpostavljena. S tem tudi neposredno opazimo, ali imamo vzpostavljeno brezžično povezavo (Slika 35).

Slika 35: Void checkBtConnection() funkcija

5.3 Komunikacija med Snap4arduinom in avtomobilčkom

Program na avtomobilčku interpretira sprejete ukaze v funkciji void processCommand(). Funkcija se začne z izbirnim stavkom (ang. switch statement), v katerem glede na kodo ukaza izbira ustrezen odziv, kot na primer nastavitev vrednosti digitalnih ter analognih izhodov, poročanje različice protokola, poizvedba, kako so nastavljeni posamezni vhodi, poizvedba, kateri izhodi in vhodi so analogni itd. Na Sliki 36 je primer nastavitve izhoda na digitalnem priključku, na Sliki 37 pa primer ukaza tipa sysex (ang. SYStem EXclusive), ki smo ga dodali za potrebe naše aplikacije.

Ena izmed nadgradenj diplomske naloge je tudi dodajanje ukazov, ki jih Snap4Arduino še ne vsebuje. Med ustvarjanjem novih blokov je bilo potrebno v kodi uporabiti za vsakega od njih svoj tip sporočila. Iz seznama obstoječih ukazov in rezerviranih kod smo ugotovili, katere tipe sporočila lahko uporabimo, kar je opisano v Tabeli 2 in Tabeli 3.

Slika 36: Nastavitev izhoda na digitalnem priključku Izbrani priključek v

Snap4Arduino aplikaciji.

Nastavitev vrednosti izbranega priključka.

Ukaz za nastavitev vrednosti digitalnih priključkov.

(43)

Programiranje

25 Slika 37: Primer našega sysex sporočila

Tabela 2: Naslovi ukazov protokola

IME FUNKCIJE KODA SPOROČILA

Analogna V/I sporočila 0xE0

Digitalna V/I sporočila 0x90

Poročanje analognega priključka

0xC0 Poročanje digitalnega

priključka

0xD0

Začetek sysex sporočila 0xF0

Nastavitev priključka (V/I) 0xF4 Nastavi vrednost digitalnega

priključka

0xF5 Zaključek sysex funkcije 0xF7

Verzija protokola 0xF9

Ponastavitev sistema 0xFF

Sysex funkcije 0x00 – 0x7F

Besedilo 0x71

Ime kode na mikrokrmilniku 0xFF

Ukaz za nastavitev vrednosti priključka.

Nastavitev vrednosti posameznega priključka.

Izbrani priključek, kateremu nastavljamo vrednost.

(44)

Programiranje

26 Tabela 3: Naslovi sysex funkcij

IME FUNKCIJE KODA SYSEX

SPOROČILA

OPIS FUNKCIJE

Razširjen ID 0x00 Vrednost 0x00 označuje

naslednja dva bajta, ki definirata razširjen ID.

Rezervirano 0x01 – 0x0F Ti naslovi so rezervirani za

uporabnikove sysex funkcije.

Analogna poizvedba za

preslikavo 0x69 Vpraša za preslikavo

analogne na številko priključka.

Odziv analogne preslikave 0x6A Dobimo informacije o

preslikavi.

Zmožnost poizvedbe 0x6B Funkcija vpraša za podprte

načine in ločljivost vseh priključkov.

Odziv zmožnosti 0x6C Funkcija poda podprte

načine in ločljivost.

Poizvedba stanja priključkov 0x6D Funkcija vpraša po

trenutnem stanju in načinu delovanja priključka.

Odziv stanja priključkov 0x6E Funkcija poda trenutno

stanje in način delovanja priključka.

Razširjeno delovanje analognih priključkov

0x6F Funkcija zapiše, kakšen naj bo priključek (PWM,

servo …).

Tekstovni podatki 0x71 Besedilno sporočilo.

Poročanje o kodi na

mikrokrmilniku 0x79 Funkcija poroča ime in

verzijo kode.

Vzorčenje intervala 0x7A Funkcija poda interval, v

katerem se vzorči analogni vhod (privzeta vrednost je

19 ms).

Sysex v nerealnem času 0x7E Funkcija, rezervirana za

sporočila, ki niso v realnem času.

Sysex v realnem času 0x7F Funkcija, rezervirana za

sporočila, ki so v realnem času.

Za lažje razumevanje, kako so sporočila sestavljena, je v nadaljevanju predstavljenih nekaj primerov posameznih tipov sporočila. Prvi primer predstavlja blok, ki ga Snap4Arduino že ima, nato pa mu sledita še dva bloka, ki smo ju ustvarili sami.

(45)

Programiranje

27 Blok za nastavljanje vrednosti digitalnega izhoda:

Slika bloka v Snap4Arduino:

Delovanje:

0xF0 0xF5 Kateri

priključek Vrednost

priključka 0xF7

Blok za premik avtomobilčka naprej:

Slika bloka v Snap4Arduino:

Delovanje:

0xF0 0x6 Hitrost premika Čas premika 0xF7

Blok za merjenje razdalje:

Slika bloka v Snap4Arduino:

Delovanje:

0xF0 0x15 0xF7

Začetek sysex sporočila.

Ukaz za nastavitev priključka.

Številka

priključka, ki ga želimo nastaviti.

Vrednost, ki jo želimo nastaviti priključku.

Konec sysex sporočila.

Začetek sysex sporočila.

Ukaz za premik avtomobilčka naprej.

Željena hitrost premika.

Čas trajanja premika.

Konec sysex sporočila.

Začetek sysex sporočila.

Ukaz za merjenje razdalje.

Konec sysex sporočila.

(46)

Programiranje

28

5.3.1 Dodajanje svojih blokov v Snap4Arduino

Dodali smo tudi nekaj svojih blokov, ki so skupaj z opisom njihovega delovanja zapisani v kodi vgrajenega mikrokrmilnika. S tem smo učencem omogočili visokonivojsko upravljanje avtomobilčka, in sicer brez da bi morali vedeti, kako nastavljati posamezne priključke na mikroprocesorju, da se bo začel vrteti motor in podobno. Za ustrezno delovanje blokov smo morali najprej dodati ustrezne ukaze v program avtomobilčka. V ta namen smo dodali nekaj ukazov tipa sysex, ki omogočajo vklop in izklop motorjev, kot je prikazano na Sliki 38.

Slika 38: Izsek sysex funkcije z ukazi za premikanje avtomobilčka

Ko dodamo ukaz v program avtomobilčka, moramo ustvariti dodatni blok v programu Snap4Arduino. Najprej v osnovnem meniju izberemo Others, kar odpre pojavno okno, v katerem izberemo možnost Make a block. Nato določimo funkcijo in ime novega bloka. Opisan postopek je predstavljen na Sliki 39.

(47)

Programiranje

29 Slika 39: Poimenovanje novega bloka

Ko smo zadovoljni z izbiro, pritisnemo tipko OK. Odpre se okno za programiranje ustvarjenega bloka. Določiti moramo, od kod bo prebral podatke. To storimo tako, da iz blokov za upravljanje vzamemo blok Run, vanj pa vstavimo blok JavaScript function, ki ga najdemo med bloki za operatorje. V zadnji blok vnesemo funkcijo, ki pošlje ustrezno sporočilo avtomobilčku. Vse to prikazuje Slika 40.

Slika 40: Ustvarjanje novega bloka

Ker smo dodali kar nekaj svojih blokov, bodo ti na kratko predstavljeni v Tabeli 4.

(48)

Programiranje

30 Tabela 4: Novi bloki

IME BLOKA OPIS BLOKA

Prižgi prvo LED Vklopi prvo svetlečo diodo na tiskanem vezju.

Ugasni prvo LED Ugasni prvo svetlečo diodo na tiskanem vezju.

Prižgi drugo LED Vklopi drugo svetlečo diodo na tiskanem vezju.

Ugasni drugo LED Ugasni drugo svetlečo diodo na tiskanem vezju.

Senzor 3 Vklopi tretji ultrazvočni merilnik in izmeri razdaljo do najbližjega predmeta.

Nazaj Zavrti oba kolesa nazaj.

Naprej Zavrti oba kolesa naprej.

Ustavi Ustavi vrtenje koles.

Naprej h󠆳󠆳 Začni premikati avtomobilček naprej s hitrostjo h.

Parameter h sprejme vrednosti od 0 do 10.

Nazaj h󠆳󠆳 Začni premikati avtomobilček nazaj s hitrostjo h.

Parameter h sprejme vrednosti od 0 do 10.

Desno h󠆳󠆳t 󠆳 Premakni avtomobilček desno s hitrostjo h in za čas t. Parameter h sprejme vrednosti od 0 do 10, parameter t pa s podano vrednostjo toliko časa

izvaja funkcijo.

Levo h󠆳󠆳t 󠆳 Premakni avtomobilček levo s hitrostjo h in za čas t.

Parameter h sprejme vrednosti od 0 do 10, parameter t pa s podano vrednostjo toliko časa

izvaja funkcijo.

Naprej h󠆳󠆳t 󠆳 Premakni avtomobilček naprej s hitrostjo h in za čas t. Parameter h sprejme vrednosti od 0 do 10, parameter t pa s podano vrednostjo toliko časa

izvaja funkcijo.

Nazaj h󠆳󠆳t 󠆳 Premakni avtomobilček nazaj s hitrostjo h in za čas t. Parameter h sprejme vrednosti od 0 do 10, parameter t pa s podano vrednostjo toliko časa

izvaja funkcijo.

Premik od –10 do 10 h󠆳󠆳t 󠆳 Premakni avtomobilček naprej in nazaj s hitrostjo h in za čas t. Parameter h sprejme vrednosti od –10 do 10, v primeru negativnega števila se avtomobilček premakne nazaj. Parameter t pa s podano vrednostjo

toliko časa izvaja funkcijo.

(49)

Programiranje

31

6. Vaje programiranja

Marsikomu se zdi programiranje težko razumljivo, zapleteno in dolgočasno, zato veliko učencev obupa nad programiranjem, preden uspejo izvesti kakšen uspešen projekt (Wilson in Moffat, 2010). Vendar ustvarjalci verjamejo, da je z zabavnim in smiselnim programskim jezikom mogoče zajeti veliko nadobudnih učencev in jih tudi navdušiti nad programiranjem (Sáez-López, Román-González in Vázquez-Cano, 2016). Zato mora biti program preprost za uporabnike in mora omogočati ustvarjanje vedno kompleksnejših projektov. Temu ustreza program Snap4Arduino. V uvodnem delu bomo učencem predstavili programsko okolje in osnove programiranja. Nato bodo učenci svoje znanje nadgrajevali z reševanjem izzivov pri kontroli avtomobilčka. Program avtomobilčka bodo izpopolnjevali od začetne stopnje, ko se avtomobilček samo malo premakne naprej ali nazaj, do zaključnega dela, ki bo ples avtomobilčka.

6.1 Premik narisanega avtomobilčka

Cilji in pričakovanja:

Cilj prvega programa je, da se otroci spoznajo z delovanjem programa, povezovanjem blokov med sabo in posebnostmi določenih blokov. Po tej vaji naj bi otroci znali poiskati posamezen blok in napisati preprost program za premikanje narisane figure.

Navodila vaje:

V programu Snap4Arduino odstranite prvotno sliko in narišite sliko avtomobilčka. Nato napišite program, ki bo premikal na novo narisani avtomobilček naprej in nazaj ter ga pri tem tudi obračal v levo in desno stran.

Izvedba vaje:

Otroci morajo narisati avtomobilček in napisati program za njegovo upravljanje. Za risanje avtomobilčka morajo ob zagonu programa izbrati možnost Paint a new sprite (Slika 41).

Odprl se bo urejevalnik slik, ki je zelo podoben programu Slikar in omogoča risanje (Slika 42).

Ko zaključijo z risanjem, potrdijo sliko in avtomobilček se prikaže na zaslonu. Program ima predhodno nastavljeno sliko puščice, ki jo je potrebno izbrisati pred začetkom risanja. To naredimo z desnim klikom nanjo in izbiro možnosti delete.

(50)

Programiranje

32 Slika 41:Tipka urejevalnika slike

Slika 42: Risanje avtomobilčka

(51)

Programiranje

33 Po končanem risanju avtomobilčka nadaljujejo s pisanjem programa za premik avtomobilčka naprej in nazaj ob pritisku na tipko. To naredijo tako, da med bloki za upravljanje izberejo blok za pritisk tipke, nato pa še med bloki za premikanje vzamejo blok za premik slike.

Za premik nazaj je potrebno upoštevati minus. Nadalje dodajo bloke za obračanje slike v željeno smer. Otroci ponovno dodajo blok za pritisk tipke, nato pa blok za obrat, ki ga najdejo med bloki za premikanje. Celotni program je predstavljen na Sliki 43.

Slika 43: Prvi program – premik narisanega avtomobilčka na zaslonu

(52)

Programiranje

34

6.2 Prižiganje in ugašanje enobarvne svetleče diode

Cilji in pričakovanja:

Cilj drugega programa je prikazati otrokom povezovanje računalnika z mikrokrmilnikom s pomočjo Bluetooth tehnologije. Poleg tega se seznanijo tudi s programiranjem v praktičnem svetu. Po tej vaji naj bi otroci znali povezati mikrokrmilnik z računalnikom preko Bluetooth povezave ter napisati enostaven program za vklapljanje enobarvne LED.

Navodila vaje:

V programu Snap4Arduino brezžično povežite mikrokrmilnik z računalnikom. To storite preko vhoda COM, ki ga najdete pod Connect Arduino. Nato napišite program, ki bo ob pritisku na tipko prižgal in ugašal enobarvno LED na avtomobilčku.

Izvedba vaje:

Najprej morajo otroci s pomočjo Bluetooth tehnologije povezati ploščico Arduino z računalnikom. V ta namen ima program Snap4Arduino poseben blok Arduino, ki prikaže možne vhode za povezavo (Slika 44). Po izbiri ustreznega vhoda jih program obvesti, da se je računalnik uspešno povezal s ploščico Arduino.

Slika 44: Povezava ploščice preko tehnologije Bluetooth

V nadaljevanju morajo otroci postaviti blok za prižiganje svetlobne diode – LED na avtomobilčku se prižge, ko je blok pritisnjen. Potrebno je dodati tudi blok za ugasnitev svetleče diode, da ne bo ves čas svetila. Da ni nujno upravljati svetlečo diodo z miško, je potrebno pred vsak blok dodati še blok za upravljanje s pomočjo tipk na računalniku. Celotni program je prikazan na Slika 45.

Slika 45: Drugi program – prižiganje in ugašanje svetlobne diode

(53)

Programiranje

35

6.3 Utripanje enobarvnih svetlečih diod

Cilji in pričakovanja:

Cilj tretjega programa je, da otroci spoznajo lastnosti in delovanje for zanke ter jo ustrezno vključijo v kodo za utripanje svetlečih diod.

Navodila vaje:

Sestavite program, ki je prikazan na Sliki 46. Program vsebuje for zanko – preučite njeno delovanje in ugotovite, kdaj preneha delovati.

Slika 46: Tretji program – uporaba for zanke Izvedba vaje:

Otroci morajo najprej sestaviti program na Sliki 46. Bloke za pritisk tipke p, prekinitve programa, for zanko in časovne zakasnitve najdejo pod bloki za upravljanje, bloke za prižig in ugašanje LED pa pod bloki Arduino. Ob zagonu programa morajo ugotoviti, da LED utripajo toliko časa, dokler jih ne ustavijo s tipko S.

(54)

Programiranje

36

6.4 Premik in zaustavitev avtomobilčka

Cilji in pričakovanja:

Cilj četrtega programa je, da učenci spoznajo bloke za premikanje avtomobilčka, kjer začnemo z najpreprostejšimi bloki za premik. Po tej vaji naj bi poznali osnovne bloke za premik avtomobilčka in razumeli, kateri motorji pri tem delujejo.

Navodila vaje:

Sestavite program tako, da se bo avtomobilček ob pritisku na tipko naprej začel pomikati naprej in obratno ob pritisku na tipko nazaj. Program zaključite z blokom za zaustavitev avtomobilčka.

Izvedba vaje:

Najprej postavimo blok za premik avtomobilčka naprej, nato pa nadaljujemo z blokom za premik avtomobilčka nazaj. Tako smo napisali program za premikanje avtomobilčka po premici. Uporabljena bloka nimata možnosti prekinitve, zato je potrebno dodati blok za zaustavitev avtomobilčka. Pred vsak blok dodamo še blok za zagon s tipkami za lažje upravljanje avtomobilčka. Celotni program je prikazan na Sliki 47.

Slika 47: Četrti program – premik avtomobilčka naprej-nazaj in njegova zaustavitev

(55)

Programiranje

37

6.5 Kontroliranje hitrosti avtomobilčka

Cilji in pričakovanja:

Cilj petega programa je, da se učenci naučijo krmiliti hitrost premikanja avtomobilčka.

Po tej vaji naj bi otroci znali uporabljati bloke za premik in bloke za nastavljanje hitrosti avtomobilčka.

Navodila vaje:

Bloke iz prejšnje vaje zamenjajte z bloki, ki vsebujejo okno za vnos hitrosti. Nato spreminjajte hitrost od 0 do 10, pri tem pa opazujte razlike v hitrosti.

Izvedba vaje:

Kot je razvidno s Slike Napaka! Vira sklicevanja ni bilo mogoče najti.48, so bloki r azporejeni podobno kot v tretjem programu, vendar so uporabljeni bloki za kontroliranje hitrosti. Hitrost nastavimo z vpisom številke od 0 do 10, pri čemer 0 predstavlja mirovanje, 10 pa maksimalno hitrost premikanja avtomobilčka.

Slika 48: Peti program – kontroliranje hitrosti avtomobilčka

(56)

Programiranje

38

6.6 Samodejna zaustavitev avtomobilčka

Cilji in pričakovanja:

Cilj šestega programa je spoznati otroke z delovanjem in uporabo časovne zakasnitve.

Po tej vaji naj bi otroci poleg hitrosti znali nastaviti tudi časovno zakasnitev, s katero bi potem upravljali, koliko časa naj se avtomobilček vozi.

Navodila vaje:

Bloke iz prejšnje vaje zamenjajte z bloki, katerim lahko poleg hitrosti nastavimo tudi čas – s tem boste določili, za koliko naj se avtomobilček premakne. Nato dodajte bloke za premik v levo in desno. Na koncu pa napišite program, pri katerem se bo avtomobilček ob pritisku na tipko naprej premaknil za 10 cm naprej, ob pritisku tipke nazaj se bo premaknil 10 cm nazaj in ob pritisku leve ali desne smerne tipke se bo zavrtel v želeno smer.

Izvedba vaje:

Za osnovo vzamemo peti program, pri čemer uporabimo bloke za krmiljenje hitrosti, ki omogočajo tudi časovno zakasnitev. Z le-to določimo čas izvajanja bloka. Hitrost premikanja določimo s številko 0‒10 kot v petem programu, čas zakasnitve pa s poljubnim številom sekund.

Da omogočimo razgibano vožnjo, dodamo še bloka za premik v levo in desno. Tako smo napisali program za premik avtomobilčka v poljubno smer z želeno hitrostjo. Programski bloki so prikazani na Sliki 49.

Slika 49: Šesti program – premik in samodejna zaustavitev avtomobilčka

(57)

Programiranje

39

6.7 Premik avtomobilčka po namišljenem pravokotniku

Cilji in pričakovanja:

Cilj šestega programa je, da otroci samostojno povežejo predhodno pridobljena znanja.

Po tej vaji naj bi znali logično razmišljati in tako povezovati bloke v pravilnem vrstnem redu.

Poleg tega naj bi uporabili znanje, ki so ga pridobili v predhodnih vajah.

Navodila vaje:

Ob pritisku na preslednico naj se avtomobilček premakne za 20 cm naprej, nato naj se obrne za 90° v desno in nadaljuje pot naravnost za 10 cm, nakar naj se ponovno obrne za 90° v desno in nadaljuje pot naravnost za 20 cm, nato naj se ponovno obrne za 90° v desno in nadaljuje pot naravnost za 10 cm, kjer se avtomobilček ponovno obrne za 90°, da pride v prvotno lego.

Vse skupaj naj se ponavlja, dokler ne pritisnete tipke za ustavitev avtomobilčka. Tako dobite premikanje po namišljenem pravokotniku.

Izvedba vaje:

Slika 50 prikazuje program. Poleg blokov za nastavljanje hitrosti, prekinitev programa in časovne zakasnitve smo uporabili še for zanko, ki ponavlja program toliko časa, dokler ga ne prekinemo s pritiskom na tipko S. Izvajanje programa zaženemo z blokom, ki se sproži ob pritisku na preslednico.

Slika 50: Sedmi program – premik avtomobilčka po namišljenem pravokotniku

(58)

Programiranje

40

6.8 Avtomobilčkov ples

Cilji in pričakovanja:

Cilj šestega programa je, da učenci uporabijo pridobljeno znanje in s pomočjo blokov iz prejšnjih programov napišejo svoj program za poljubno premikanje avtomobilčka. Po tej vaji naj bi razumeli, kako delujejo bloki za upravljanje avtomobilčka.

Navodila vaje:

Iz do sedaj pridobljenega znanja o upravljanju avtomobilčka napišite program za poljubno gibanje avtomobilčka. Pri tem naj avtomobilček izvede tudi kakšen trik.

Izvedba vaje:

Slika 51 prikazuje primer programa. Poleg znanih blokov za nastavljanje hitrosti in časovne zakasnitve smo uporabili blok, ki ob pritisku na tipko sproži celoten program. Časovno zakasnitev smo dodali pred vsak blok, da zagotovimo popolno izvedbo programa.

Slika 51: Osmi program – ples avtomobilčka

6.9 Dodatne funkcije

Kot smo omenili v poglavju 3, ima naše vezje poleg osnovnih funkcij tudi dodatne funkcije: infrardeči senzor, ultrazvočni merilnik, LED trak in fotoupori. Z uporabo dodatnih funkcij lahko nadgradimo avtomobilček, da vozi pametneje. Denimo z ultrazvočnimi senzorji lahko merimo razdaljo in pri tem ustrezno krmilimo hitrost premika ali pa s fotoupori lahko sledimo svetlobi. Za uporabo dodatnih funkcij je potrebno dopolniti kodo vgrajenega mikrokrmilnika in zapisati kodo v programu Snap4Arduino.

(59)

Programiranje

41 Kot primer si poglejmo uporabo ultrazvočnih senzorjev. V program na mikrokrmilniku zapišemo funkcijo, ki prižge ultrazvočni senzor, izmeri razdaljo, nato izmerjeno vrednost posreduje funkciji, ki vse to pretvori v čas, in na koncu ugasne senzor. Rezultat funkcije je podan v mikrosekundah, zato ga je potrebno pretvoriti v centimetre. Tako dobimo funkcijo, ki izračuna oddaljenost senzorja od predmeta. Na Sliki 52 je prikazan program v kodi vgrajenega mikrokrmilnika.

Slika 52: Funkcija za merjenje oddaljenosti s pomočjo ultrazvočnega merilnika v kodi vgrajenega mikrokrmilnika

Nato je potrebno v funkciji sysex dodati nov ukaz, ki omogoča komunikacijo mikrokrmilnika s programom Snap4Arduino. Ta funkcija je prikazana na Sliki 53.

Slika 53: Sysex funkcija za ultrazvočni senzor

Za pošiljanje izmerjenih vrednosti senzorja v program Snap4Arduino je potrebno narediti nov blok, prikazan na Sliki 54, v katerem uporabimo več JavaScript funkcij.

(60)

Programiranje

Slika 54: Urejanje bloka za ultrazvočni senzor v jeziku Snap4Arduino

Sedaj želimo pridobljene podatke prikazati na zaslonu, za kar uporabimo blok iz skupine spremenljivk. Trenutni program enkratno izmeri razdaljo (ob zagonu). Da stalno dobivamo vrednosti oddaljenosti, dodamo neskončno zanko, ki poskrbi za neprestano izvajanje programa.

Vse skupaj prikazuje Slika 55.

Slika 55: Urejanje bloka za izvajanje funkcije ultrazvočnega senzorja

Reference

POVEZANI DOKUMENTI

Za povezavo alarmnega sistema z nadzornim streˇ znikom smo uporabili ether- net modul (Slika 4.19), ki je na mikrokrmilnik priklopljen preko asinhronega UART vmesnika.. Ethernet

V nadaljevanju se bomo osredotoˇ cili na prvi del komunikacije, ki poteka med elektroniko gospodinjskega aparata in WiFi modulom, ki je z njo fiziˇ cno povezan preko RS-232 povezave.

Prav tako spletna stran uporablja pro- gramski vmesnik za pridobivanje podatkov preko knjiˇ znice jQuery oziroma preko asinhronskega klica ”AJAX” (angl. Asynchronous Javascript

Števec: Število Delež OŠ z izvedenimi delavnicami vzgoje za zdravje (ne vključuje zobozdravstvenih vsebin) za pedagoške delavce šole (vsaj ena delavnica na OŠ v

Mladostniki svoj seznam pozitivnih lastnosti dopolnjujejo, ga prilepijo na vidno mesto, večkrat preberejo. Rafael, Núria Pérez Escoda, Montserrat Cuadrado Bonilla, Èlia López

a) Ko so prebirali knjižico v skupinah in izpolnjevali vprašalnik: ____ minut. b) Ko smo se pogovarjali o vprašalniku in pravilnih odgovorih: ____ minut. c) Ko smo se pogovarjali

V pripravah na porod in starševstvo v nosečnosti in po porodu je veliko možnosti za praktično vadbo negovanja dojenčka, za učenje prek dobrih modelov in krepitev samozaupanja

Nekatera stanja se pogosto napačno presodijo kot razlog za opustitev cepljenja (kontraindikacija za cepljenje) in tako niso cepljeni nekateri otroci, ki imajo zaradi