• Rezultati Niso Bili Najdeni

UPORABA MINI RAČUNALNIKA RASPBERRY PI ZA POUČEVANJE

N/A
N/A
Protected

Academic year: 2022

Share "UPORABA MINI RAČUNALNIKA RASPBERRY PI ZA POUČEVANJE "

Copied!
111
0
0

Celotno besedilo

(1)

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA

FAKULTETA ZA MATEMATIKO IN FIZIKO FIZIKA - TEHNIKA

UPORABA MINI RAČUNALNIKA RASPBERRY PI ZA POUČEVANJE

ROBOTIKE

DIPLOMSKO DELO

Mentor: Kandidat:

izr. prof. dr. Slavko Kocijančič Rok Černelič Somentor:

asist. David Rihtaršič

Ljubljana, oktober 2014

(2)
(3)
(4)
(5)

Zahvaljujem se mentorju, izr. prof. dr. Slavku Kocijančiču, ki me je s povabilom na več poletih šol robotike navdušil za tovrstno tematiko. Zaradi njega sem začel raziskovati in brati njegove stare zapiske, ki so na koncu vplivali na odločitev področja diplomskega raziskovanja. Hvala tudi za predloge in strokovni pregled. Zahvaljujem se tudi asistentu Davidu Rihtaršiču za somentorstvo. Z začetnimi idejami in spodbudami mi je odkril svet Raspberry Pi in ni žal, da sem ga upošteval. Hvala ženi Bogomili za slovnični pregled in velik HVALA staršem za vso podporo pri študiju.

(6)
(7)

Bogomila,

tvoja intenzivna spodbuda ne pozna meja, poglej kam mi je pomagala …

(8)
(9)
(10)
(11)

University of Ljubljana Faculty of Education Kardeljeva ploščad 16 1000 Ljubljana, Slovenija telefon +386 (0)1 58 92 200 faks +386 (0)1 53 47 997 +386 (0)1 58 92 233

Univerza v Ljubljani

Pedagoška fakulteta

I IZ I Z ZJ J JA A AV V VA A A O O O A A AV V VT T TO O OR R RS S ST T TV V VU U U D D DI I IP P PL L LO O OM M MS S SK K KE E E N N NA A AL L LO O OG G GE E E/ / /D D DE E EL L LA A A

PODATKI O ŠTUDENTU/-KI

Ime in priimek ______________________________________________________________

Dekliški priimek ______________________________________________________________

Način študija  redni  izredni

Vpisna številka _________________________________________________

Študijski program _________________________________________________

IZJAVA

S svojimi podpisom zagotavljam, da:

je predložena diplomska naloga/delo izključno rezultat mojega lastnega raziskovalnega dela;

sem poskrbel/-a, da so dela in mnenja drugih avtorjev oz. avtoric, ki jih uporabljam v predloženi nalogi/delu, ustrezno navedena oz. citirana;

sem poskrbel/-a, da so vsa dela in mnenja drugih avtorjev oz. avtoric navedena v seznamu virov, ki je sestavni element predložene naloge/dela;

sem pridobil/-a vsa dovoljenja za uporabo avtorskih del, ki so v celoti prenesena v predloženo nalogo/delo in sem to tudi jasno zapisal/-a v predloženi nalogi/delu;

se zavedam, da je plagiatorstvo – predstavljanje tujih del, bodisi v obliki citata bodisi v obliki skoraj dobesednega parafraziranja bodisi v grafični obliki, s katerim so tuje misli oziroma ideje predstavljene kot lastne – je kaznivo po zakonu (Zakon o avtorstvu in sorodnih pravicah, Uradni list RS št. 21/95, 68/2008), morebitna kršitev pa pomeni tudi hujšo disciplinsko kršitev po določbah Pravilnika o disciplinski odgovornosti študentov Univerze v Ljubljani.

se zavedam škodljivih posledic, ki jih dokazano plagiatorstvo lahko predstavlja za predloženo nalogo/delo in za moj status na Pedagoški fakulteti;

so elektronska oblika diplomske naloge/dela, naslov (slov., angl.), povzetek (slov., angl.) ter ključne besede (slov., angl.) identični s tiskano obliko diplomske naloge/dela ter soglašam z objavo elektronske oblike diplomske naloge/dela v zbirki »Dela PeF UL«;

dovolim javno objavo osebnih podatkov, vezanih na zaključek študija na spletnih straneh PeF UL in v publikacijah PeF UL;

je diplomska naloga/delo lektorirano in urejeno skladno s fakultetnim Pravilnikom o diplomah.

Datum ______________________ Podpis avtorja/-ice _________________________

Rok Černelič

X

01008533

Fizika in tehnika

28. 10. 2014

(12)

POVZETEK

Diplomsko delo se ukvarja s mini računalnikom Raspberry Pi, ki temelji na Linux operacijskem sistemu. Preko osnovnih in naprednih primerov prikaže uporabo komponent za zajemanje podatkov iz okolice in krmiljenja fizičnih objektov. Podrobno razloži programsko kodo posameznih primerov. Primeri so koristni učiteljem robotike, ki bi želeli pri poučevanju robotike začeti z mini računalnikom Raspberry Pi in programiranjem v programskem okolju Python. Prav tako je primerno za navdušence nad področjem krmiljenja in programiranja z mini računalnikom Raspberry Pi. Pridobljene izkušnje so sintetizirane v izdelanem prototipu razširitvene ploščice za Raspberry Pi, ki skupaj z njim postane robotski krmilnik z mnogimi rešitvami za potrebe poučevanja robotike.

KJUČNE BESEDE:

Raspberry Pi, tehniško izobraževanje, robotika, Python, WebIDE, prototip razširitvenega vezja.

(13)

ABSTRACT

APPLYING THE MINI COMPUTER RASPBERRY PI FOR INTRODUCTORY TEACHING OF ROBOTICS

This work focuses on the mini computer Raspberry Pi, based on the Linux operating system. Through the basic and advanced examples it shows the use of components for capturing data and interfacing with the physical world. It explains the Python code for each example in detail. The examples are useful for teachers, who want to start using Raspberry Pi in their robotics class and Python programming. It is as well useful for enthusiasts in the filed of hoby robotics and programming with mini computer Raspberry Pi. Experiance gained with this research are synthetisized in a prototype expansion board for Raspberry Pi – together they become an interface with many capabilities useful for teaching robotics.

KEYWORDS

Raspberry Pi, Technology Education, Robotics, Python, WebIDE, Prototype of expansion board.

(14)

VSEBINA

1 UVOD ... 1

1.1 Namen in cilji ... 1

1.2 Metode raziskovanja ... 1

1.3 Pregled vsebine ostalih poglavij ... 2

2 RASPBERRY PI ... 3

2.1 Svetovni fenomen ... 4

2.2 Namestitev operacijskega sistema (OS) ... 5

2.3 Prvi zagon ... 6

2.4 Priključitev v mrežo... 7

2.5 Oddaljena povezava – konzolni način ... 8

2.6 Statični IP naslov ... 11

2.7 Oddaljena povezava – grafični način ... 14

2.8 Pisanje in urejanje kode ... 15

2.9 WebIDE ... 16

3 PRVI PROGRAM ... 23

3.1 Svetleča dioda ... 25

3.2 Utripanje svetleče diode ... 26

3.3 Tipka ... 27

3.4 Štetje števila pritiskov tipke ... 28

3.4.1 Preprečevanje odboja - Debounce ... 29

4 ZAHTEVNEJŠE KRMILJENJE ... 31

4.1 Krmiljenje enosmernega motorja ... 31

4.1.1 Python funkcije ... 33

4.2 Pulzno širinska modulacija ... 34

4.2.1 Krmiljenje servo motorja ... 35

(15)

4.2.2 Zatemnitev svetleče diode ... 37

4.2.3 Krmiljenje hitrosti enosmernega motorja ... 38

4.3 LCD zaslon... 40

5 POSODOBITVE IN RAZŠIRJANJE FUNKCIONALNOSTI ... 45

5.1 Komunikacija SPI ... 46

5.1.1 Analogni vhod ... 49

5.2 Komunikacija I2C ... 53

5.2.1 Razširitev digitalnih vhodov in izhodov na Raspberry Pi ... 55

5.2.2 Priklop LCD zaslona preko I2C ... 57

5.3 Vzporedno izvajanje dveh (ali več) neskončnih zank ... 59

5.4 Nadzor GPIO preko spleta ... 60

5.5 Samodejni zagon Python skripte ob zagonu RPi ... 61

6 RAZŠIRITVENA PLOŠČICA ... 63

6.1 Prototip ... 63

6.2 Programska knjižnica ... 68

6.2.1 Pregled funkcij in primeri uporabe ... 69

6.3 Priprava na proizvodnjo ... 73

7 ZAKLJUČEK ... 75

8 LITERATURA ... 77

(16)

AKRONIMI IN OKRAJŠAVE

DIY Do It Yourself (Ustvari sam, Naredi sam, Sam svoj mojster) SBC Single Board Computer (Računalnik na pločici)

OS Operacijski sistem RPi Raspberry Pi

SD (standard) Secure Digital

NOOBS New Out Of the Box (Prenastavljeno programsko okolje za začetnike) GUI Graphical User Interface (Grafični uporabniški vmesnik)

SSH Secure Shell (Protokol za upravljanje računalnika na daljavo) URL Uniform Resource Locator (Enolični krajevnik vira)

IP Internet Protocol (IP naslov, število, ki unikatno določa naslov naprave v omrežju)

GND Ground (Logična ničla, Ozemjitev)

DHCP Dynamic Host Confguration Protocol (Omrežni protokol za dinamično nastavitev gostitelja)

IDE Integrated Development Environment (Programsko razvojno okolje) VNC Virtual Network Computing (Dostop do oddaljenega namizja) BCM (vrsta številčenja) Broadcom

GPIO General Purpose Input Output (Splošni digitalni vhod ali izhod) PWM Pulse Wave Modulation (Pulzno širinska modulacija)

LCD Liquid Cristal Display (Zaslon s tekočimi kristali) SPI Serial Peripheral Interface (Serijski periferni vmesnik) IIC

I2C Inter Integrated Circuit bus (Serijska povezava preko dveh vodnikov) I2C

IoT Internet of Things (Internet stvari)

SMD Surface Mount Device (Površinsko nameščena naprava)

(17)

1 UVOD

Raspberry Pi je računalnik velikosti kreditne kartice. Temelji na sistemu Linux in ima možnost priklopa različnih dodatkov ali razširitvenih ploščic (shield), ki opravljajo specifične funkcije in naredi Raspberry Pi uporaben kot robotski krmilnik. Med mnogimi drugimi funkcijami, ki jih kot računalnik zmore, diplomska naloga raziskuje uporabnost digitalnih vhodov in izhodov za namen uporabe Raspberry Pi pri robotiki, v povezavi s tem pa tudi učenje programskega jezika Python.

1.1 Namen in cilji

Analiza problema je zanimiva iz vidika popularnosti in vsesplošne uporabnosti mini računalnika Raspberry Pi. Videti je zanimanje pri učiteljih in poletnih šolah, manjka pa temeljit pregled z navodili za uporabo in rešenimi primeri v slovenskem jeziku. To diplomsko delo namerava

- raziskati razvoj trendov skozi zgodovino na področju robotike, ki so vodili do nastanka računalnika Raspberry Pi,

- raziskati in opisati osnovno uporabo Raspberry Pi na primerih, ki so primerni za poučevanje robotike (namestitev, vhodi, izhodi, motorji, senzorji …),

- poiskati in analizirati primer dobre prakse uporabe Raspberry Pi v osnovni šoli, - na spletni strani (npr. drtirobotika) zapisati navodila za uporabo, podati nekaj

primerov in narediti navodila za učitelje, ki bi želeli uporabiti Raspberry Pi pri poučevanju,

- izdelati razširitveno ploščico (shield) ali prototip razširitvene ploščice, ki bi skupaj z Raspberry Pi-jem tvoril robotski krmilnik za Raspberry Pi. Izdelek naj upraviči izdelavo in uporabnost.

1.2 Metode raziskovanja

V diplomskem delu so analizirani osnovni in naprednejši primeri uporabe mini računalnika Raspberry Pi. Primeri so večinoma povzeti iz literature, nekaj pa je tudi lastnih. Podrobno je razčlenjena in razložena tudi programska koda vsakega primera, zapisana v programskem okolju Python. Narejena je sinteza primerov uporabe, ki se izkaže v lastno spisani knjižnici, namenjeni za delovanje razširitvene ploščice.

(18)

Opravljen je bil razgovor z učiteljem tehnike, ki poučuje robotiko. Skupaj z pridobljenim znanjem je na podlagi eksperimentalnega dela izdelan prototip, ki skupaj z Raspberry Pi- ejm sestavljan robotski krmilnik.

1.3 Pregled vsebine ostalih poglavij

V začetku poglavja 2 je podan jedrnat pregled popularnosti mikrokontrolerjev, ki vodi do prevlade mini računalnika Raspberry Pi. V nadaljevanju se posveti začetnih korakov pri delu z Raspberry Pi-jem, od namestitve operacijskega sistema, preko osnovnih Linux ukazov in navigacije po operacijskem sistemu, do namestitve programskega okolja in urejevalnika Python.

S prvimi programi v programskem okolju Python se ukvarja poglavje 3. Prikazanih in razloženih je nekaj osnovnih primerov krmiljenja, kot so utripanje svetleče diode in priključitev tipke.

Poglavje 4 opiše programe in primere, ki skupaj s prejšnjim poglavjem sklenejo nabor primerov osnovnega krmiljenja. Tu so razloženi primeri krmiljenja enosmernega in servo motorja, LCD zaslona (zaslona s tekočimi kristali), pa tudi časovne funkcije v programskem okolju Python.

Splošno rabo za potrebe poučevanja robotike sklene poglavje 5. Nauči nas uporabo dodatnih čipov za razširjanje funkcionalnost, kot je čip za analogno-digitalno pretvorbo in čip za razširitev splošnih digitalnih vhodov ali izhodov. Poglavje med drugimi razloži tudi enega izmed naprednejših funkcij v programskem okolju Python, vzporedno izvajanje programske kode.

Poglavje 6 opredeli primerne komponente, ki so izbrani na podlagi primerov iz prvih poglavij, imajo že izdelano programsko podporo in so ključni za izdelavo dobre razširitvene ploščice. Opisan je torej izdelan prototip, priložena pa razlaga namestitve in uporabe programske knjižnice.

Poglavje 7 povzame ugotovitve in preveri zadane cilje diplomske naloge.

(19)

2 RASPBERRY PI

Začelo se je leta 1971, ko je bil narejen in komercialno dostopen prvi mikroprocesor – 4- bitni Intel 4004. Njegov naslednik, 8-bitni 8008, je postal osnova prvih osebnih računalnikov. Tudi druge procesorje tistega časa, ameriški Z80 vgrajen v TRS-80 in britanski Sinclair ZX Spectrum, pa tudi Applov 6502 lahko še vedno najdemo oziroma lahko najdemo njihovo vdelano različico. Minilo je le nekaj let, ko je podjetje Microchip Technology naredilo PIC mikroprocesor, čip s procesorjem, vgrajenim spominom in vhodi in izhodi, ki jih je mogoče programirati. Postal je prva izbira amaterjev in vseh, ki so se ljubiteljsko ukvarjali z elektroniko. Naslednji mejnik je v devetdesetih postal Parallaxov BASIC Stamp. Programirati se ga je dalo v različici jezika BASIC, prodajali pa so ga kot samostojno enoto, ki naj bi bila srce projekta. BASIC Stamp je podpiral tudi koncept dodatkov (add-on boards), podobno kot pri sodobnem Arduino.

Mejnik novega tisočletja pa je gotovo Arduino. Zaradi popularnosti BASIC Stamp in PIC hobi projektiranja in predvsem iz zanimanja umetnikov po vključitvi elektronike v svoje dizajne je Arduino zrasel iz »ustvari sam« (DIY) projekta. Neposredni predhodnik Arduina, na podlagi še ene popularne ploščice Wiring, je po svoje zasnoval dizajner Hernand Barragan. Delo je predstavil ob zaključku doktorskega študija na inštitutu Design Institute Ivrea. Tezo je zagovarjal z mislijo na »netehnično« občinstvo ustvarjalcev, dizajnerjev in arhitektov. Leto kasneje so ustvarili Arduino, ki je bil še preprostejša različica Wiring ploščice, predvsem pa enostavna za uporabo. Temelji na 8- bitnem Atmelovem AVR mikroprocesorju in ponuja analogni vhod, digitalni vhod in izhod in druge priključke, ki je skupaj z velikostjo kreditne kartice postal industrijski standard za napredne razvijalce in tudi za popolne začetnike. Prava moč Arduina ni strojna zmogljivost, pač pa programski vmesnik, s katerim so razvijalci uspeli zakriti komplicirano in zahtevno programiranje mikroprocesorja in ga zapakirati v uporabniku prijazen in enostaven vmesnik Arduino IDE – Arduino programsko razvojno okolje.

Okoli tega je nastalo mnogo primerov uporabe Arduino plošče, nastala pa je tudi močna skupnost podpornikov, ki svojo kodo prosto delijo s svetom. Tako je Arduino postal enostavna prva izbira za začetnike in navdihuje celotno generacijo ljubiteljev elektronike in programiranja.

(20)

Na področju računalnika na ploščici (SBC) se je začelo z Dyna-Micro, sredi sedemdesetih. Vendar je težko reči, da je šlo za mini računalnik na ploščici, saj so takratne ploščice izdelovali z mnogimi dodatki, ki so se prodajali posebej, npr. avdio in video komponente. Z obliko mini računalnika, kot ga pojmujemo sedaj, so takrat naslavljali večinoma mikokontrolerje. Omeniti velja sicer nekatere Linux ploščice, kot na primer Gumstix, sicer pa se je veliki preobrat zgodil šele s prihodom Raspberry Pi [1, 2].

2.1 Svetovni fenomen

Raspberry Pi je bil zasnovan leta 2006 kot platforma za izobraževalne namene – z željo vzpodbuditi zanimanje za programiranje brez potrebe po »velikem« in »dragem«

osebnem računalniku. Prvih deset ploščic je bilo prodanih na dražbi v začetku leta 2012, prvo serijsko proizvodnjo februarja 2012, 10 000 kosov, pa so z zahtevo 100 000 naročil prodali v nekaj minutah. Čeprav narejen v izobraževalne namene, to namiguje tudi njegovo ime Pi (Python), so ga pograbili tudi ljubitelji elektronike, hekerji in izkušeni programerji [3].

Uporabnike Raspberry Pi (RPi) je pritegnila njegova cenovna dostopnost, saj stane okoli 30 €, pa tudi specifikacija strojne opreme (Tabela 1). Njegovo nadaljno podporo in priljubljenost pa omogoča vsak, ki prispeva k skupnosti uporabnikov RPi, saj je tako kot RPi, tudi programska koda odprta in dostopna vsakemu. Splet ponuja goro projektov, predvsem pa opisov projektov, izvorne kode, navodil za uporabo, pomoči in vse je dostopno uporabnikom. Priljubljeni portal je spletna shramba kode github.com, kamor uporabniki naložijo svojo kodo, jo delijo z drugimi, kopirajo k sebi in modificirajo v svoje projekte.

Slika 1: Raspberry Pi. Primerjava modela A (levo) in modela B (desno) [4]

(21)

Tabela 1: Specifikacije modelov RPi [5]

MODEL A MODEL B

Čip Broadcom BCM2835 SoC full HD Multimedia

Applications Processor

Procesna enota 700 MHz Low Power ARM1176JZ-F Aapplications Processor

Grafično procesna enota Dual Core VideoCore IV® Multimedia Co-Processor

Pomnilnik 256 MB SDRAM 512 MB SDRAM

Mrežna povezljivost 10/100 Ethernet RJ45 priključek

USB vhodi 1 2

Video izhod HDMI (rev 1.3 & 1.4) Composite RCA (PAL and NTSC)

Avdio izhod 3.5 mm jack, HDMI

Reža za spomin SD, MMC, SDIO

Operacijski sistem Linux

Dimenzije 8.6 cm x 5.4 cm x 1.5 cm 8.6 cm x 5.4 cm x 1.7 cm

2.2 Namestitev operacijskega sistema (OS)

Namestitev operacijskega sistema je enostavna. Je prvi korak pri delu z RPi. Iz uradne spletne strani [4] pridobimo različico NOOBS (Prenastavljeno programsko okolje za začetnike), ki vsebuje namestitvene datoteke za vse operacijske sisteme, a na začetku izberemo enega, kar pozneje ne spreminjamo več. Pred tem je potrebno, da pripravimo tudi SD kartico. Proizvajalec priporoča [4] 8 GB kartico, ki naj bo formatirana z aplikacijo SD Formatter združenja SD Association [6]. Vsebino arhivirane datoteke Noobs.zip, razširimo na SD kartico in kartico vstavimo v RPi.

Slika 2: Namestitev OS

(22)

Vsebina tako pripravljene kartice se bo samodejno zagnala, ko jo vstavimo v RPi.

2.3 Prvi zagon

Da lahko namestimo OS, priključimo zaslon (HDMI ali VGA) ter tipkovnico (USB) in miško (USB). Če smo vstavili SD kartico z OS, priključimo še napajanje. RPi se napaja preko standardnega mikro USB adapterja, polnilec kakršnega uporabljajo mobilni telefoni. Model B potrebuje za avtonomno delovanje vsaj 700 mA toka. Poraba toka se lahko močno dvigne, če upoštevamo, da nanj priključimo še HDMI in USB priklope, povrhu vsega pa še kamero in LAN kabel, pa še svoj projekt na digitalne vhode in izhode.

Pri zbiri napajanja smo torej previdni, da s prenizkim tokom ali nestabilno napetostjo ne poškodujemo RPi.

RPi nima tipke za vklop ali izklop, zato se samodejno požene in prebere vsebino SD kartice takoj ko priključimo napajanje. Za izklop RPi se ne poslužujemo obratnega dejanja, pač pa RPi pravilno zaustavimo, kot je to zapisano v nadaljevanju. Sedaj se bo RPi zagnal in naložil boot sektor SD kartice. V primeru prve nastavitve je to del podatkov, ki omogoči izbiro in namestitev OS. Če uporabljamo NOOBS različico namestitvenega programa se izpiše seznam operacijskih sistemov, izmed katerih izberemo enega, ki ga sistem nato samodejno namesti. Dejanja ni mogoče povrniti, tudi ne kasneje spremeniti različico nameščenega OS, le ob ponovitvi začetnega postopka, zato je izbira enkratna.

Priporočena izbira je Raspbian, ki je OS, ki temelji na Linux distribuciji Debian in je optimiziran za RPi strojno opremo [7].

Slika 3: Namestitev OS

(23)

Ko je namestitev končana, se odpre okno raspi-config. Tu upravljamo s sistemskimi nastavitvami, kot je nastavitev regijskih specifik, datuma, časa, vklop kamere, tu lahko tudi ustvarimo novega uporabnika. Po meniju se premikamo s tipkovnico, takoj pa nam ni potrebno nastaviti ničesar, saj se lahko kadar koli ponovno vrnemo v meni z ukazom iz konzolnega načina

$ sudo raspi-config

Ko smo končali z nastavitvami je namestitev OS končana. Za nadaljevanje se moramo prijaviti v sistem. Privzeto uporabniško ime je PI, geslo pa RASPBERRY. Privzeto se RPi zažene v konzolni način. Do namizja pridemo z ukazom

$ startx

kasneje pa lahko v raspi-config nastavimo ali se ob zagonu RPi zažene v konzolni način ali se odpre namizje, kot smo to vajeni pri sodobnih operacijskih sistemih. Sistem pravilno zaustavimo, kot bi to storili z običajnim računalnikom. Pri RPi zadostuje, da v konzolni način vpišemo

$ sudo halt

in čez nekaj trenutkov se naprava zaustavi. Takrat lahko iz RPi izključimo napajalni kabel.

2.4 Priključitev v mrežo

Vsaka naprava, ki želi z drugimi napravami komunicirati preko omrežja potrebuje svoj unikaten IP naslov. Tako je tudi če želimo komunicirati z RPi. Najprikladneje je, da RPi priključimo v usmerjevalnik s standardnim mrežnim kablom. S to metodo bo RPi IP naslov pridobil samodejno, dodatne nastavitve niso potrebne.

(24)

Slika 4: RPi in LAN [8]

Ta metoda samodejnega pridobivanja IP naslova se imenuje DHCP ali omrežni protokol za dinamično nastavitev gostitelja. Včasih ga prepoznamo tudi pod imenom dinamični IP. Protokol poskrbi za to, da vsaka naprava, ki se poveže na DHCP server, pridobi vsakič IP naslov, ki pa je lahko ob vsakem novem priklopu drugačen. Da izvemo kakšen je IP, ki ga trenutno uporablja RPi, v terminal vpišemo ukaz

$ ifconfig

kar nam izpiše vse aktivne omrežne povezave in njihove podrobnosti. Običajno je eth0 tista mrežna naprava, ki nas zanima. Vse povezave, aktivne in neaktivne, pa izpišemo, če dodamo opcijo -a

$ ifconfig -a

Iz spiska informacij razberemo IP naslov, ki ga potrebujemo za oddaljeno povezavo računalnika ali druge naprave z RPi.

2.5 Oddaljena povezava – konzolni način

RPi je računalnik v malem. Nanj priključimo zaslon, tipkovnico miško, mrežno povezavo

… Tako brez težav dostopamo do grafičnega uporabniškega vmesnika (GUI). Seveda pa običajno nimamo dveh zaslonov in dvojnega kompleta tipkovnice in miške, zato je priročno, če do vseh funkcij RPi dostopamo preko svojega računalnika. Za to skrbi Secure Shell (SSH), protokol za upravljanje računalnika na daljavo. Protokol pošilja podatke v

(25)

šifrirani obliki, omogoča pa povezavo v oddaljeno ukazno vrstico (remote command-line login), oddaljeno izvrševanje ukazov (remote command execution) in druge varne mrežne storitve med dvema povezanima računalnikoma.

Sistemi Linux imajo serijsko že vgrajen SSH odjemalec. Do njega je moč dostopati s konzolnim ukazom ssh (ssh uporabniško_ime@cilj). Na operacijskem sistemu Windows pa je najbolj razširjen PuTTY, terminalni emulator, ki ne potrebuje namestitve in je primeren za uporabo zdoma (npr. šola, služba, knjižnica). PuTTY je prost odprtokodni program, ki ga dobimo iz proizvajalčeve spletne strani.

Ker želimo do RPi dostopati preko Windows naprave, moramo na RPi omogočiti SSH protokol.

$ sudo raspi-config

To nas pripelje do sistemskih nastavitev RPi (Raspberry Pi Software Confguration Tool), kjer omogočimo SSH protokol. Običajno ga najdemo v zavihku napredne možnosti (Advanced Options).

Slika 5: Sistemske nastavitve RPi

Ko je protokol omogočen (Enable), bo mogoče do RPi ob ponovnem zagonu

$ sudo reboot

dostopati preko terminala (npr.) PuTTY. PuTTY odpremo in v okence za IP naslov vpišemo IP naslov, ki smo ga prebrali iz ukaza ifconfig. Port je običajno 22, nastavitve,

(26)

tudi mnoge druge, pa lahko shranimo kot lastni profil, da nam ob naslednji povezavi ni potrebno ponovno vnašati in spreminjati nastavitev povezave.

Slika 6: Putty

Povezavo vzpostavimo s klikom na Open, nakar se moramo v RPi prijaviti.

Prenastavljeno uporabiško ime je pi, geslo pa raspberry.

Slika 7: Prijava v RPi

(27)

2.6 Statični IP naslov

Včasih se zgodi, da usmerjevalnik dodeli RPi-ju drugačen IP kot prejšnjič. Konec koncev, gre za dinamično dodeljevanje IP naslova in je lahko ob vsakem novem priklopu IP drugačen. To se zgodi predvsem takrat, ko priključimo na usmerjevalnik še druge naprave, npr. tiskalnik, prenosnik, mobilni telefon … Zato je praktično, da RPi-ju dodelimo statični IP, ki si ga lahko zapomnimo ali ga shranimo v profil povezave. To je tudi najbolj praktična nastavitev neposredne povezave računalnika z RPi preko mrežnega kabla brez usmerjevalnika (Slika 8).

Slika 8: Neposredna povezava računalnika z RPi [8]

Prijavimo se v RPi in vpišemo:

$ cat /etc/network/interfaces

ki izpiše vsebino datoteke interfaces. V datoteki najdemo vrstico iface eth0 inet dhcp, ki pove, da naj naprava eth0 uporablja DHCP. To vrstico moramo spremeniti, tako da bo naprava eth0 uporabljala statični IP. Izberemo poljubni IP, okoli katerega je zasnovana celotna mreža. IP naslov je sestavljen iz štirih tromestnih števil, običajno 192.168.xxx.xxx. Širino enega omrežja določa 8-bitov, to je 256 različnih IP naslovov znotraj enega omrežja. Recimo, da za IP naslov RPi izberemo 192.168.137.100. To je Address element. Začetek (192.168.137.0) omrežja določa element Network, konec (192.168.137.255) pa Broadcast. Gateway pa določa naslov, preko katerega je mogoče prehajati med omrežji. Preko Gateway naslova bo RPi dostopal do interneta preko računalnika, zato nastavimo statični IP naslov mrežne kartice na računalniku tako, da IP

(28)

naslov mrežne kartice sovpada naslovu Gateway. Na RPi torej z urejevalnikom Nano odpremo datoteko interfaces

$ sudo nano /etc/network/interfaces

in spremenimo iface eth0 inet dhcp v

iface eth0 inet static address 192.168.137.100 netmask 255.255.255.0 network 192.168.137.0 broadcast 192.168.137.255 gateway 192.168.137.1

kjer smo dodali prej navedene elemente, ki služijo napravi za navigacijo po omrežju. Za izhod iz urejevalnika stisnemo CTRL+X in Y, da shranimo spremembe. Ob ponovnem zagonu in ob vseh naslednjih zagonih RPi prebere datoteko interfaces in nastavi IP, kot določeno [9].

Sedaj moramo nastaviti še lastnosti mrežne kartice iz strani računalnika.

Slika 9: Lastnosti mrežne kartice

(29)

Statični IP vnesemo v lastnostih IPv4 (Slika 10) za vrednost pa vzamemo element Gateway iz prejšnjih podatkov.

Slika 10: Vnos statičnega IP naslova

Sedaj sta RPi in računalnik mrežno povezana. Da omogočimo še internetno povezavo na RPi, mora preko mrežne kartice, na katero je priključen RPi, dotekati internet. To naredimo s skupno rabo internetne povezave. Brezžična mrežna kartica, ki je povezana na internet, deli internet mrežni kartici, ki jo določimo. V tem primeru (Slika 11) je to mrežna kartica z imenom Ethernet 2. Do nastavitev pridemo preko lastnosti kartice, ki ima dostop do interneta, zavihek Skupna raba.

Slika 11: Skupna raba internetne povezave

(30)

Vse nastavitve so sedaj končane. V RPi se preko SSH prijavimo z novim IP naslovom, ki smo ga določili kot statični IP naslov. Delovanje internetne povezave na RPi ugotovimo tako, da preizkusimo odzivni čas naslova, ki ga kličemo, bodisi IP naslov ali URL (enolični krajevnik vira) naslov.

$ ping 192.168.137.1 -c5

kjer pomeni opcija –c5 count 5, število ping odzivov. Kličemo lahko tudi spletno stran:

$ ping www.google.com

2.7 Oddaljena povezava – grafični način

Spoznali smo že, kako izkoristiti protokol SSH in se povezati z RPi preko konzole.

Dostikrat pa je koristno tudi, da lahko namizje (GUI) RPi oddaljeno nadziramo tako, kot bi to storili, če bi imeli priključen zaslon in bi bili prijavljeni v namizje operacijskega sistema. VNC (Dostop do oddaljenega namizja) je način, kako lahko storimo ravno to. Za uporabo oddaljenega namizja na RPi namestimo VNC server, na računalniku, preko katerega dostopamo do oddaljenega namizja pa VNC odjemalec. Na RPi preko SSH povezave, ki smo jo ustvarili prej, sprožimo ukaza

$ sudo apt-get update

$ sudo apt-get install tightvncserver -y

ki najprej posodobita sistem, nato pa namestita tightvncserver. Dodamo še opcijo –y, da potrdi morebitna vprašanja po nadaljevanju namestitve.

Naslednji korak je, da server zaženemo, ukazu za zagon vncserver pa dodamo še nekaj argumentov [-geometry widthxheight] [:display No.], ki določajo dimenzije pojavnega okna [10]. Primer:

$ vncserver –geometry 1440x900 :1

ali:

(31)

$ vncserver :1

Ob prvem zagonu nastavimo še geslo za dostop do VNC serverja. Prikladno bi bilo

»raspberry«, a lahko vnesemo le 8 mestno geslo, zato ga prilagodimo (npr. »raspberr«) ali si izmislimo novega.

Izmed mnogih VNC odjemalcev, ki jih je moč najti je opisan VNCViewer (www.realvnc.com). Pridobimo različico za naš operacijskih sistem. Ob zagonu programa vnesemo IP naslov, za njim pa številko zaslona (enako, kot ob zagonu VNC serverja). Ko se povežemo, sprejmemo enkripcijsko obvestilo in povezava je vzpostavljena [11].

Slika 12: VNC odjemalec

VNC server zaustavimo z ukazom

$ vncserver –kill :1

Da se vedno znova povežemo z VNC serverjem, ga moramo zagnati ob vsakem novem zagonu RPi. Če uporabljamo oddaljeno namizje pogosto, potem je priročno, da nastavimo samodejni zagon VNC serverja o čemer govori poglavje 5.5.

2.8 Pisanje in urejanje kode

Pisanja kode se lotimo v določenem programskem okolju, ki programski jezik (npr.

Python) prevede v strojni jezik, jezik ki ga naprava, ki jo programiramo, razume. V literaturi se za splošno programsko okolje uporablja ime IDE (Integrated Development Environment). V podmnožico IDE spadajo mnogi programi, s katerimi je moč urediti in testirati kodo. Programiranja se na RPi lotimo preko osnovnega a močnega orodja urejevalnika besedila imenovanega Nano. Z njim delo poteka podobno kot v beležnici.

Python je osnovni jezik, ki ga podpira RPi, zato se ta diplomska naloga osredotoča na

(32)

Python programski jezik, ki je dokaj preprost za začetnika, a hkrati zelo zmogljiv in razširjen. Urejevalnik Nano odpremo z ukazom

$ nano

Nano je urejevalnik besedila. Že njegovo ime pove da je minimalističen, zato z njim ne moremo oblikovati besedila v smislu odebeljene, ležeče pisave, naslovov ipd. Nano je preprosto beležnica, ki ga bomo uporabljali za zapis kode, za kar pa ne potrebujemo ničesar več kot zgolj golo besedilo. Ukaze uporabljamo s kombinacijo tipk CTRL in druge tipke. Tako na primer datoteko shranimo s pritiskom tipk CTRL+O, za izhod iz programa uporabimo CTRL+X, za preklic akcije pa CTRL+C. Uporabna sta še ukaza CTRL+W, ki išče po dokumentu in CTRL+R, ki vstavi vsebino druge datoteke na mesto kurzorja.

Kopiranje, CTRL+C in lepljenje, CTRL+V, kot smo ga vajeni iz skoraj vseh drugih programov, tu delujeta drugače. Označimo besedilo (kar je označeno se samodejno kopira v začasni pomnilnik) in z desnim klikom miške prilepimo besedilo na mesto kurzorja.

Delo z urejevalnikom Nano je preprosto, več bližnjic in ukazov pa najdemo, če pritisnemo CTRL+G [12].Do urejevalnika Nano, lahko dostopamo tako neposredno iz operacijskega sistema RPi, kot tudi preko terminala SSH.

2.9 WebIDE

Ker lahko vso funkcionalnost RPi izkoristimo s pomočjo SSH (Putty) terminala in VNC (VNC server) protokola, se osredotočimo na funkcionalnost testiranja in programiranja projektov. Potrebujemo urejevalnik (IDE), ki omogoča oddaljeno rabo, hkrati pa barvno označi kodo (kar omogoča lažje in hitrejše programiranje), je hiter za uporabo in enostaven za namestitev. Predstavljenih je nekaj možnosti, če se lotimo programiranja v programskem jeziku Python. Zaradi boljšega razumevanja so opisi funkcij v angleškem jeziku. Tabela 2 prikazuje zanimivo primerjavo urejevalnikov programskega okolja Python. Označeni so urejevalniki, ki sem jih tudi sam testiral. Na voljo je še kopica drugih a izkaže se, da je izbira odvisna od našega okusa. Redki so, ki omogočajo programiranje preko SSH. Za dober in tekoč potek dela, je pomembno, da lahko kodo izvajamo hitro in učinkovito, to pomeni, da lahko kodo sproti razhroščujemo (debugg) in sproti popravljamo napake. To je pri urejevalniku Nano, do katerega lahko dostopamo oddaljeno, oteženo. Nekatere izmed urejevalnikov, ki podpirajo sistem Linux je sicer

(33)

mogoče namestiti na RPi, a je delo preko VNC povezave počasno, predvsem pa netekoče.

Nekatere plačljive verzije (PyCharm, Sypder, Komodo) sicer podpirajo SSH prenos in oddaljeno komunikacijo a funkcionalnost takih različic presega obseg smiselnosti programiranja na RPi.

Tabela 2: Primerjava Python razvojnih orodij L – Linux, W – Windows, M – Mac, F – brezplačno, C – plačljivo, Y - da [13]

Cross Platform Commercial / Free Auto Code Completion Multi-Language Support Integrated Python Debugging Error Markup Source Control Integration Smart Indent Bracket Matching Line Numbering UML Editing / Viewing Code Folding Code Templates Unit Testing GUI Designer Integrated DB Support SSH

BlackAdder Y C Y Y

BlueFish L

Boa Constructor Y F Y Y Y Y Y Y Y Y

ConTEXT W C

DABO Y

DreamPie F

Dr.Python F Y

Editra Y F Y Y Y Y Y Y Y

Emacs Y F Y Y Y Y Y Y Y Y Y Y Y Y

Eric Ide Y F Y Y Y Y Y Y

E-Texteditor W

Geany Y F Y Y Y Y Y Y

Gedit Y F Y Y Y Y Y Y

Idle Y F Y

Jedit Y F Y Y Y Y

Kdevelop Y F Y Y Y Y Y Y

Komodo Y CF Y Y Y Y Y Y Y Y Y Y Y Y C

NetBeans Y F Y Y Y Y Y Y Y Y Y Y Y

NotePad++ W F Y Y

Pfaide W C Y Y Y Y Y Y Y

PIDA LW F Y Y Y Y Y Y

PTVS W F Y Y Y Y Y Y Y Y Y Y

PyCharm Y C Y Y Y Y Y Y Y Y Y C

PyDev(Eclipse) Y F Y Y Y Y Y Y Y Y Y Y Y Y Y

Pyscripter W F Y Y Y Y Y Y Y

PythonWin W F Y Y Y Y Y

SciTE Y F Y Y Y Y Y Y

ScriptDev W C Y Y Y Y Y Y Y Y Y

SPE F Y Y

Spyder Y F Y Y Y Y Y Y C

Sublime Text Y C Y Y Y Y Y Y

TextMate M Y Y Y Y Y Y

UliPad Y F Y Y Y Y Y Y Y

Vim Y F Y Y Y Y Y Y Y Y Y Y Y

WingIde Y C Y Y Y Y Y Y Y Y Y Y Y

Zeus W C Y Y Y Y Y Y

WebIDE Y F Y Y Y Y Y Y

(34)

Urejevalnik WebIDE podjetja Adafruit, se je med vsemi izkazal za najuporabnejšega, predvsem pa najenostavnejšega. Vsekakor je najprimernejši za tekoče delo pri prvih korakih programiranja v programskem jeziku Python. Njegova uporaba in namestitev sta prikazana spodaj.

Preko terminala SSH s programom Putty se povežemo z RPijem. Zaženemo ukaz

$ curl https://raw.githubusercontent.com/adafruit/Adafruit- WebIDE/alpha/scripts/install.sh | sudo sh

Ukaz curl [14] bo iz gitgub shrambe uporabnika Adafruit naložil skripto imenovano install.sh, ukaz | bo datoteko preusmeril ukazu sudo sh, ta pa datoteko izvrši z command line interpreter-jem oz. z shell-om (sh) [15]. Urejevalnik WebIde bo nameščen v /usr/share/adafruit/webide. Ko je namestitev končana in je urejevalnik WebIDE nameščen se izpiše:

$ **** Starting the server...(please wait) ****

$ **** The Adafruit WebIDE is installed and running! ****

$ **** Commands: sudo service adafruit-webide.sh {start,stop,restart} ****

$ **** Navigate to http://raspberrypi.local to use the WebIDE

kar pomeni, da do urejevalnika dostopamo preko brskalnika (podprta sta Google Chrome in Mozilla Firefox) na osebnem računalniku preko strani http://raspberrypi.local [16]. Za uporabo WebIDE potrebujemo še Bitbucket račun, ki shrani vse naše delo v oblaku na serverju bitbucket.org. Torej, ustvarimo račun in se prijavimo vanj.

Slika 13: Nastavitve računa

Po prijavi v Bitbucket račun poiščemo nastavitve profila (Slika 13). Tu najdemo funkcijo OAuth, ki omogoča avtentikacijo drugih naprav ali programov, ko želijo dostopati ali komunicirati z Bitbucket računom (Slika 14).

(35)

Slika 14: Gumb za dodajanje novega klienta

Vpišemo ime klienta in po potrebi dodamo še opis (Slika 15).

Slika 15: Dodajanje klienta

Ko smo postopek zaključili, se prikaže okno s ključem in skrivnim ključem. Ta dva kjuča potrebujemo ob prvi prijavi v WebIDE na računalniku, ki je mrežno povezan z RPi. V brskalnik vpišemo http://raspberrypi.local in vnesemo oba kjuča (Slika 16).

(36)

Slika 16: Ključ za integracijo klienta z računom Bitbucket

Vnos ključev je potreben samo enkrat, vsakič ko se naslednjič prijavimo v Bitbucket bo povezava samodejno vzpostavljena in WebIDE se zažene, če obiščemo stran http://raspberrypi.local. Pojavi se okno, ki ga prikazuje Slika 17.

Slika 17: Pozdravni zaslon ob zagonu WebIDE

WebIDE je močno orodje, ki bo kos vsem nalogam, ki jih opravljamo z RPi. Odlikuje ga možnost samodejnega shranjevanja programov v našem Bitbucket računu. Pravzaprav gre za oblačno storitev, saj program, ki ga spišemo na računalniku WebIDE shrani na SD kartici RPi in na računu Bitbucket. Med seboj pa so shrambe sinhronizirane, tako da nam ni potrebno skrbeti za varnostno kopiranje projektov. Ob vsaki prijavi se stanje datotek posodobi, tudi če uporabljamo drugo napravo. Potrebno je le pravilno namestiti WebIDE in se vpisati z Bitbucket računom. Slika 18 prikazuje delovno okno urejevalnika WebIDE. Na levi so mape, podmape in datoteke, desno pa je okno za vnos programske kode. Desno zgoraj vidimo gumbe za dostop do terminala (Terminal), kjer imamo enake možnosti kot program PuTTy. Zraven je gumb za zagon Python programa (Run), desno

(37)

od njega pa razhorščevalni gumb (Debug), s katerim lahko vrstico za vrstico preverimo kodo, sproti pa dobimo razčlenjen izpis kaj program v ozadju kode dela. Orodje, ki je integrirano v WebIDE in omogoža vizualizacijo napisne kode (Visualize), je odlično za vizualni prikaz poteka kode. Orodje je edinstveno med urejevalniki programske kode a se mu hitro zatakne, ko imamo opravka z naprednim programom ali vnosi knjižnic.

Slika 18: Delovno okno WebIDE

Kljub podrobni raziskavi urejevalnikov je WebIDE daleč najuporabnejši za delo z RPi.

Morda bo komu ljubše delo s »pravim« urejevalnikov neposredno iz operacijskega sistema RPi, a če želimo oddaljeno delo preko mrežne povezave, potem ni moč najti boljšega urejevalnika. Nadejamo se lahko še izboljšav, saj je različica, ki je trenutno na voljo v Alpha stanju, kar pomeni, da še ni povsem dokončana.

(38)
(39)

3 PRVI PROGRAM

Raspberry Pi je zanimiv za poučevanje robotike, ker ima možnost povezave z fizičnim svetom preko senzorjev, motorjev, tipk … To mu omogočajo splošni digitalni vhodi in izhodi (GPIO pini - General Purpose Input Output). Slika 19 prikazuje različne tipe pinov:

- pravi GPIO (zelena)

- I2C pini, za komunikacijo z drugimi čipi in moduli s samo dvema kontrolnima žicama (modra)

- SPI pini za hitro komunikacijo s SPI napravami, podoben koncept kot I2C, a drugačen protokol (vijolična)

- serijska komunikacija preko Rx in Tx pinov (oranžna)

Slika 19: Diagram GPIO priključkov na RPi model B

Brez težav lahko vse pine uporabimo kot splošne digitalne vhode ali izhode. Vsi pini imajo stanje logične enice pri 3.3 V, zato moramo paziti, da jih kot vhode ne preobremenimo – vhodna napetost ne sme presegati 3.3 V! Za uporabo GPIO pinov

(40)

potrebujemo knjižnico, ki omogoča komunikacijo in naslavljanje pinov. Knjižnico ali modul imenovano Rpi.GPIO namestimo z zaporedjem naslednjih ukazov v terminalu.

Sistem najprej posodobimo

$ sudo apt-get update

Za namestitev Rpi.GPIO modula potrebujemo Python razvojno orodje (Python Development toolkit)

$ sudo apt-get install python-dev

Končno namestimo Rpi.GPIO knjižnico z ukazom

$ sudo apt-get install python-rpi.gpio

Če program zahteva, pritrdimo z »Y«. Namestitev je končana, kar pomeni da lahko v programih, ki jih bomo napisali naslavljamo GPIO pine preko modula Rpi.GPIO. Obstaja še nekaj drugih knjižnic za naslavljanje GPIO pinov, ki dodajo funkcionalnost digitalnim vhodom in izhodom. Takšna je recimo knjižnica RPIO, ki poenostavi delo s pulzno širinsko modulacijo ali pa WiringPi, ki med drugimi na bolj logičen način poimenuje pine. V okviru diplomske naloge je uporabljen samo modul Rpi.GPIO.

(41)

3.1 Svetleča dioda

Začnimo z najpreprostejšim primerom. Uporabili bomo RPi za krmiljenje svetleče diode.

Svetlečo diodo z uporom priključimo kot kaže Slika 20.

Slika 20: Shema krmiljenja svetleče diode

01_LED_on.py (Priloga 9.2) 1

2

3 4 5 6

#!/usr/bin/env python

# ==========

# knjiznice

# ==========

import RPi.GPIO as GPIO

Simbolu #! imenovanemu »shebang« sledi pot do Python prevajalnika. Ko takšno skripto zaženemo, povemo programu kako naj interpretira kodo, ki je zapisana v skripti od te vrstice naprej. Z #!/usr/bin/python enolično določimo kje in kateri Python prevajalnik bo uporabljen, medtem ko z

#!/usr/bin/env python dovolimo, da sistem sam izbere Python prevajalnik. Če imamo nameščenih več različic Pythona, potem bo izbran trenutni privzeti prevajalnik [17].

Knjižnice, ki jih potrebujemo v programu, uvozimo z ukazom import. Tu smo knjižnico, ki skrbi za komunikacijo z GPIO vhodi in izhodi vnesli z imenom GPIO. Na RPi.GPIO knjižnico se torej povsod znotraj programa sklicujemo z besedo GPIO. Storiti smemo tudi, da namesto GPIO izberemo drugo, poljubno ime, npr. PORTD.

(42)

7 8 9 10

11 12 13 14 15 16 17

18

# ===========

# nastavitve

# ===========

GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.OUT)

# ========

# program

# ========

# za logicno 1 lahko

uporabimo: GPIO.HIGH, True, 1 GPIO.output(18, GPIO.HIGH)

print "LED ON"

Tu nastavimo katero številčenje bomo uporabili. Številčenje BCM se sklicuje na oznake (imena) pinov. Medtem z BOARD nastavitvijo kličemo pine po njegovih zaporednih številkah oziroma fizičnih lokacijah, kot je označeno na ploščici.

Prvi pin je običajno zgoraj levo [12].

Ko poznamo številčenje, pinom določimo funkcijo vhoda ali izhoda. OUT, IN.

V vrstici 17. postavimo pin 18 v »visoko«

stanje, v stanje logične enice. Možnih je več ukazov, ki stanje pina spremenijo v logično enico. HIGH-LOW, True-False, 1-0.

Z ukazom print v konzolo izpišemo niz znakov, ki jih v kodi zapišemo med enojne ali dvojne narekovaje.

3.2 Utripanje svetleče diode

Za utripanje diode je potrebno le ob določenem času spreminjati stanje izhoda, na katerega je priključena svetleča dioda.

02_LED_blink.py (Priloga 9.2) 3

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

# ==========

# knjiznice

# ==========

import RPi.GPIO as GPIO import time

# ===========

# nastavitve

# ===========

GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(18, GPIO.OUT)

# ========

# program

# ========

print "LED blink"

while True:

Za časovne funkcije skrbi knjižnica time.

Z ukazom izključimo opozorila, ki se izpišejo v konzoli pred ali po zagonu programa [18].

Ukaz while in njegov argument, ki sledi, izvaja blok kode dokler je trditev argumenta resnična.

V primeru while True: se zanka ponavlja v neskončnost, saj je argument True vedno resničen. while je uporaben tudi za štetje, npr. ponovi blok dokler (while) se ne izvede 5 krat.

(43)

21 22

23 24

GPIO.output(18, 1) time.sleep(1)

GPIO.output(18, 0) time.sleep(1)

Knjižnica time ima funkcijo sleep, ki za število sekund, ki jih v oklepajih določimo, zakasni izvajanje kode.

3.3 Tipka

Pomembno za razumevanje stanja vhoda ali nekega priključka je koncept »pull-down«

ali »pull-up« upornika. Gre za določanje stanja vhoda, ko ta ni v uporabi, da preprečimo plavajoče (floating) stanje - kar pomeni, da je lahko stanje takega vhoda karkoli med logično ničlo in logično enico. To lahko povzroči zmedo pri programu, ki skuša prebrati vhod, ko ta ne prejema signala. Slika 21 prikazuje primer uporabe takih upornikov za enolično določanje vhodov GPIO4 in GPIO17. Stikalo 1 (S1) je preko 3.3 V povezano z velikim uporom. Razklenjeno stanje določa vrednost logične enice. Ko stikalo sklenemo, povežemo vhod GPIO4 z logično ničlo (GND). Zaradi velikega upora vhod logične enice (3.3 V) ne zazna in stanje vhoda je 0 V. Povsem enako, le obratno deluje »pull-down«

upornik, ki pri razklenjenem stanju stikala določa logično ničlo, ko pa stikalo 2 (S2) sklenemo, dobimo stanje logične enice. Primer je podan s stikali, a povsem na enak način lahko preprečimo plavajoče tudi stanje nekega senzorja ali poljubnega vhoda, za katerega želimo enolično, brez motenj, določiti stanje [18].

Slika 21: Shema prikazuje dve možnosti vezave tipk in slika tipke z oštevilčenimi pini (spodaj)

(44)

03_LED_btn.py (Priloga 9.2) 13

14 15 16 17 18 19 20

21 22 23

24 25 26 27

28 29 30 31 32 33 34 35

GPIO.setup(12, GPIO.OUT) GPIO.setup(4, GPIO.IN) GPIO.setup(17, GPIO.IN)

# ========

# program

# ========

GPIO.output(18, 0)

print "Pritisni tipko za vklop LED"

try:

while True:

#prva moznost

if GPIO.input(17) == 1:

GPIO.output(18, 1)

else:

GPIO.output(18, 0)

# elegantna moznost, ki dodeli izhodu 18 stanje vhoda 17 # GPIO.output(18, GPIO.input(17))

except KeyboardInterrupt:

GPIO.cleanup()

Definiramo vhode in izhode.

Če na začetku izhodom ne določimo začetnega stanja, logične enice ali logične ničle, imamo plavajočo (floating) vrednost izhoda ali vrednost, ki je ostala od prejšnjega programa, ki smo ga že zaprli. Ker je izhod nedefiniran ne moremo vedeti začetnega stanja, zato tu postavimo pin 18 na logično nič.

Vhodni ukaz try je povezan z izhodnim ukazom except. Uporabljamo ju vedno v paru ima pa veliko uporabnih možnosti. Ena od večkrat uporabljenih v diplomskem delu je ukaz try-except KeyboardInterrupt:, ki izvaja kodo znotraj try-except, ob izhodu iz programa s pritiskom CTRL+C pa izvrši kodo, ki jo zapišemo v blok zatem (vrstica 34 in 35) [19].

Program za vklop svetleče diode preko tipke vsebuje pogojni stavek if-else, zato je logika dokaj preprosta. Če (if) je vhod 17 v logični enici, potem naj bo izhod 18 tudi v logični enici.

Drugače (else) naj bo izhod 18 v stanju logične ničle.

Ob izhodu se izvrši vrstica 35, GPIO.cleanup() pa »pobriše« stanja vseh pinov oziroma jih postavi v privzeto stanje.

3.4 Štetje števila pritiskov tipke

Včasih srečamo na naprave, ki samo z eno tipko krmilijo več funkcij naprave. Za primer vzemimo čelno svetilko. En pritisk tipke vključi svetilko, drugi pritisk omogoči utripanje

(45)

svetilke, tretji pritisk pa svetilko ugasne. Potrebujemo mehanizem, ki lahko šteje in beleži število pritiskov tipke. V poglavju 4.2.3 je opisan primer krmiljenja hitrosti motorja z eno tipko.

04_BTN_count.py (Priloga 9.2) 19

20 21 22 23

24

25 26

27 28

prev_inpt = 0

i = 0

while True:

inpt = GPIO.input(17)

if ((not prev_inpt) and inpt):

i = i + 1 print i prev_inpt = inpt sleep(0.01)

Ker bo program preverjal trenutno stanje tipke s prejšnjim stanjem, določimo spremenljivko prev_inpt, ki ima začetno vrednost 0.

Spremenljivka i shranjuje število pritiskov, v začetku še ni pritiskov, zato ji dodelimo število 0.

Spremenljivki inpt določimo stanje vhoda 17.

Blok znotraj if stavka se izvede, če je argument resničen (True). Torej: obratna logična vrednost prev_inpt (not prev_inpt) in (and) inpt, ki ima shranjeno stanje pina 17, morata biti True.

Takrat prištej ena spremenljivki i in vrednost izpiši.

Vrstica 27 skrbi za to, da se if stavek ne izvede, dokler tipke ne spustimo.

3.4.1 Preprečevanje odboja - Debounce

Zgornji primer je koristen vsakič, ko imamo težave z odbojem (bounce) signala, ki gre skozi tipko. Ker so stikala mehanizmi, velikokrat vsebujejo vzmet, ki povrne stanje, ko tipko spustimo. V začetku pa se pritisku upira. To lahko v trenutku pritiska ali sprostitve povzroči odboj med sklenjenim in nesklenjenim stanjem. Seveda gre za zelo kratke čase, ki jih človek ne zazna. Te preskoke signala med logično enico in logično ničlo pa zmore zaznati mikrokrmilnik na digitalnem vhodu, kamor smo tipko priključili. Podobno se to zgodi, če je v signalu preveč šuma, ki zopet povzroči skok med logičnima stanjema.

(46)

Slika 22:Preklop logičnega stanja izhoda zaradi s šumom obremenjenega vhoda [20]

Pri štetju pritiskov tipke nas to seveda moti. Preprečevanju odboja pravimo Debounce, rešitve pa so mehanske ali programske. [18]. Programski primer, opisan zgoraj, razume pritisk tipke samo, ko se stanje spremeni v začetno, vrstica 28 pa ustavi izvajanje programa zavoljo preprečevanja odboja.

(47)

4 ZAHTEVNEJŠE KRMILJENJE

V nadaljevanju sledi pregled krmiljenja motorjev, ki so pogosti pri poučevanju robotike, modelarjih in izdelavi domačih projektov. Pomemben element pri kompleksnejših izdelavah je tudi LCD zaslon.

4.1 Krmiljenje enosmernega motorja

Z RPi lahko krmilimo tudi enosmerne motorje. A tega ne moremo storiti neposredno – samo s priključitvijo motorja na pine RPi. GPIO pini nimajo dovolj izhodnega toka, da bi lahko poganjali enosmerne motorje, saj je maksimalni tok, ki lahko še varno teče skozi posamezni GPIO pin 16 mA [21]. To pa je večinoma premalo, zato za krmiljenje motorjev uporabimo zunanji čip, imenovan, H-krmilje (H-bridge). Nanj priključimo zunanje napajanje, ki poganja motor. Sestavljeno je iz več tranzistorjev, tako da z izhodom iz RPi krmilimo večji tok, ki je potreben za vrtenje motorja [18]. Uporabili bomo čip serije L293, ki ima priklop za dva motorja. Kakšno H-krmilje potrebujemo je odvisno od toka, ki je potreben za vklop motorjev. Maksimalni tok, ki ga varno zmore H-krmilje je zapisan v podatkovnem dokumentu čipa. S H-krmiljem kot je L293 krmilimo smer enosmernega motorja z dvema izhodoma, s tretjim pa hitrost motorja. Slika 23 prikazuje primer, kjer z izhodoma A0 in A1 krmilimo motor, ki je priključen na A0_M in A1_M. PWM (pulzno širinsko moduliran) pin pa služi regulaciji hitrosti motorja. Za napajanje čipa L293 priključimo pin VCC1 na 5 V. VCC2 (M_SUPPLY) pa skrbi za napajanje motorjev. Tu velja omeniti, da lahko M_SUPPLY povežemo s 5 V in motorje napajamo iz RPi. Oba pina 5 V sta namreč neposredno povezana z micro USB napajalnim adapterjem zato je tok, ki ga lahko dobimo iz teh pinov omejen z maksimalnim tokom napajalnega adapterja, poleg tega pa moramo odšteti še tok, ki ga porabi RPi za svoje delovanje (okoli 700 mA), kar ostane, je na voljo periferiji [3].

(48)

Slika 23: H-krmilje L293. Leva stran lahko neodvisno od desne krmili en motor. Prav tako desna.

H-krmilje ima možnost regulacije hitrosti motorja. Reguliramo lahko hitrost vsakega motorja posebej, če pripeljemo na pina ENABLE pulzno moduliran signal (Slika 26 levo).

Če regulacije hitrosti ne potrebujemo, oziroma če želimo, da se motor vrti z najvišjo hitrostjo, potem lahko pustimo PWM pin nepriklopljen (Slika 24).

Slika 24: Krmiljenje enosmernega motorja z RPi preko H-krmilja

Smer enosmernega motorja krmilimo s smerjo toka, ki teče skozi motor, zato je smer odvisna od stanja pinov s katerimi krmilimo enosmerni motor. Pravilnostno tabelo kaže Tabela 3. To logiko uporabimo pri konstrukciji programa za krmiljenje enosmernih motorjev.

Reference

POVEZANI DOKUMENTI

Razprave naj vsebujejo izvleček (do 1500 znakov s presledki) in ključne besede (5–8), oboje v slovenskem in angleškem jeziku.. Morebitne zahvale in podatki o financiranju naj

• Naslovi člankov naj bodo zapisani pokončno in v narekovajih kot na seznamu li- terature: Draga Ahačič je v članku »Blišč in beda teatralnosti: gledališče Tomaža

členom Pravilnika o doktorskem študiju UL, sprejetim dne 28.5.2019, Dispozicija doktorske disertacije obsega: (1) predlog naslova disertacije v slovenskem

»najatraktivnejše«, bilo pa je poučno. V raziskavi smo ugotovili, da je uporaba IKT zanimivejša za učence kot učitelje. Uporaba IKT v izobraževanju predstavlja za

Ugotavljala sem, kateri stili ustvarjalnega reševanja problemov so značilni za specialne in rehabilitacijske pedagoge ter značilnosti ugotovljenih stilov glede

Erbij (Er) se prav tako uporablja za kontrolne palice v jedrskih reaktorjih, za izdelavo optičnih vlaken v ko- munikacijskih sistemih, izdelavi laserjev in v medicin- ske

Uporaba računalnika Raspberry Pi se nadaljuje še v višješolskem izobraževanju, saj veliko različnih univerz na različne načine vključuje uporabo raču nalnika

Kontrolna skupina je zajemala 57 dečkov, ki so obiskovali rekreacijo športnih iger (mini nogomet, mini košarka, mini rokomet), eksperimentalna skupina pa 41