UPORABA MINI RAČUNALNIKA RASPBERRY PI ZA POUČEVANJE ROBOTIKE

Size: px
Start display at page:

Download "UPORABA MINI RAČUNALNIKA RASPBERRY PI ZA POUČEVANJE ROBOTIKE"

Transcription

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: izr. prof. dr. Slavko Kocijančič Kandidat: 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 Univerza v Ljubljani University of Ljubljana Faculty of Education Pedagoška fakulteta Kardeljeva ploščad Ljubljana, Slovenija telefon +386 (0) faks +386 (0) (0) IZJAVA O AVTORSTVU DIPLOMSKE NALOGE/DELA PODATKI O ŠTUDENTU/-KI Ime in priimek Dekliški priimek Rok Černelič Način študija X redni izredni Vpisna številka Študijski program Fizika in tehnika 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 I

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

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

14 VSEBINA 1 UVOD Namen in cilji Metode raziskovanja Pregled vsebine ostalih poglavij RASPBERRY PI Svetovni fenomen Namestitev operacijskega sistema (OS) Prvi zagon Priključitev v mrežo Oddaljena povezava konzolni način Statični IP naslov Oddaljena povezava grafični način Pisanje in urejanje kode WebIDE PRVI PROGRAM Svetleča dioda Utripanje svetleče diode Tipka Štetje števila pritiskov tipke Preprečevanje odboja - Debounce ZAHTEVNEJŠE KRMILJENJE Krmiljenje enosmernega motorja Python funkcije Pulzno širinska modulacija Krmiljenje servo motorja IV

15 4.2.2 Zatemnitev svetleče diode Krmiljenje hitrosti enosmernega motorja LCD zaslon POSODOBITVE IN RAZŠIRJANJE FUNKCIONALNOSTI Komunikacija SPI Analogni vhod Komunikacija I2C Razširitev digitalnih vhodov in izhodov na Raspberry Pi Priklop LCD zaslona preko I2C Vzporedno izvajanje dveh (ali več) neskončnih zank Nadzor GPIO preko spleta Samodejni zagon Python skripte ob zagonu RPi RAZŠIRITVENA PLOŠČICA Prototip Programska knjižnica Pregled funkcij in primeri uporabe Priprava na proizvodnjo ZAKLJUČEK LITERATURA V

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 I 2 C 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) VI

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

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 Piejm 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. 2

19 2 RASPBERRY PI Začelo se je leta 1971, ko je bil narejen in komercialno dostopen prvi mikroprocesor 4- bitni Intel 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. 3

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, kosov, pa so z zahtevo 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] 4

21 Tabela 1: Specifikacije modelov RPi [5] MODEL A Čip Procesna enota Grafično procesna enota MODEL B Broadcom BCM2835 SoC full HD Multimedia Applications Processor 700 MHz Low Power ARM1176JZ-F Aapplications Processor 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 Operacijski sistem SD, MMC, SDIO 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 5

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 6

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

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 8

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

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 10

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 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 To je Address element. Začetek ( ) omrežja določa element Network, konec ( ) 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 11

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 netmask network broadcast gateway 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 12

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 13

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 c5 kjer pomeni opcija c5 count 5, število ping odzivov. Kličemo lahko tudi spletno stran: $ ping 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: 14

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 ( 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 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 15

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 16

33 SSH Integrated DB Support GUI Designer Unit Testing Code Templates Code Folding UML Editing / Viewing Line Numbering Bracket Matching Smart Indent Source Control Integration Error Markup Integrated Python Debugging Multi-Language Support Auto Code Completion Commercial / Free Cross Platform 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] 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 17

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

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 in vnesemo oba kjuča (Slika 16). 19

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

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

38 22

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) - I 2 C 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 I 2 C, 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 23

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

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 _LED_on.py (Priloga 9.2) #!/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. 25

42 # =========== # 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) 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, print "LED ON" 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 _LED_blink.py (Priloga 9.2) # ========== # 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. 26

43 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) 27

44 _LED_btn.py (Priloga 9.2) 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 28

45 svetilke, tretji pritisk pa svetilko ugasne. Potrebujemo mehanizem, ki lahko šteje in beleži število pritiskov tipke. V poglavju je opisan primer krmiljenja hitrosti motorja z eno tipko _BTN_count.py (Priloga 9.2) prev_inpt = 0 Ker bo program preverjal trenutno stanje tipke s prejšnjim stanjem, določimo spremenljivko prev_inpt, ki ima začetno vrednost i = 0 while True: inpt = GPIO.input(17) if ((not prev_inpt) and inpt): 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 i = i + 1 print i prev_inpt = inpt sleep(0.01) 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 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. 29

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

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]. 31

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

49 a_DC_motor.py (Priloga 9.2) GPIO.setup(22, GPIO.OUT) GPIO.setup(23, GPIO.OUT) # ======== # program # ======== try: while True: GPIO.output(22, 1) GPIO.output(23, 0) sleep(2) GPIO.output(22, 0) GPIO.output(23, 1) sleep(2) except KeyboardInterrupt: GPIO.output(22, 0) GPIO.output(23, 0) Nastavimo pina za krmiljenje H-krmilja. Neskončno ponavljanje zanke. Motor se dve sekundi vrti v eno smer. Nato se dve sekundi vrti v drugo smer. Ob izhodu iz programa s CTRL+C motor zaustavimo Tabela 3: Pravilnostna tabela krmiljenja enosmernega motorja A0 A1 DC motor Python funkcije Funkcije v Pythonu nam lahko velikokrat skrajšajo delo. Omogočajo, da ponovno uporabimo že obstoječo kodo, s čimer smo lahko bolj učinkoviti. V splošnem se splača uporabiti funkcijo, če bi morali kodo uporabiti več kot dvakrat. Sledi primer uporabe funkcij, ki sicer v tem primeru nič ne skrajša pisanje programa, a nam funkcije pridejo prav, če imamo opravka z daljšo kodo b_DC_motor.py (Priloga 9.2) # ========= # funkcije # ========= def desno(): Funkcijo definiramo z ukazom def GPIO.output(22, 1) GPIO.output(23, 0) def levo(): GPIO.output(23, 0) GPIO.output(23, 1) V bloku funkcije zapišemo vsebino funkcije. 33

50 def stop(): GPIO.output(22, 0) GPIO.output(23, 0) # ======== # program # ======== try: while True: desno() sleep(2) levo() sleep(2) except KeyboardInterrupt: stop() V programu kličemo funkcijo, kar izvede kodo znotraj zgoraj definirane funkcije. Funkcija, ki zaustavi motor. 4.2 Pulzno širinska modulacija Pulzno moduliran signal je mogoče generirati na več načinov. V osnovi gre za izmenično menjavanje logičnih stanj 0 in 1 (Slika 25), ki temelji na izbrani frekvenci (f). Programski pristop bi od nas zahteval»ročno«menjavanje stanj s časovno zakasnitvijo, cikel pa bi se ponovil v času določenem iz frekvence (1/f). Recimo: f = 50 while True: GPIO.output(18, 1) time.sleep(0.5 * 1/f) GPIO.output(18, 0) time.sleep(0.5 * 1/f) Čas stanja logične 1 je 50% celotnega cikla, prav tako čas stanja logične 0. Cikel traja 1 torej 1/f. Slika 25: Primer enega cikla pulzno širinske modulacije Med menjavo stanj procesor ne dela nič. Čaka na ponovno menjavo stanja. Boljša je generacija PWM signala brez stalnega programskega nadzora. Nekateri mikroprocesorji omogočajo t.i. hardversko (elektronsko) pulzno širinsko modulacijo [22]. RPi ima pin GPIO18 namenjen elektronski pulzno širinski modulaciji. 1 Če smo zelo natančni traja cikel dlje kot 1/f, saj se ena vrstica izvaja določen čas, ki je podan s taktom procesorja, koda pa je zapisana v štirih vrsticah (N = 4). Čas izvajanja je torej t = 1 f + N( 1 takt procesorja ). 34

51 Ostalim pinom lahko določimo pol-elektronsko pulzno širinsko modulacijo na povsem enak način kot jo določimo za pin GPIO18. Razlika je ta, da pol-elektronska oziroma semi-hardverska PWM ne zagotavlja velike natančnosti in je morda podrejena prekinitvam, če izgubi nadzor procesorja (ko ta izvaja vmesne naloge) [12, 17] Krmiljenje servo motorja Servo motorji so pomemben del robotike, saj so prisotni pri mnogih napravah, od vozil na daljinsko upravljanje do industrijskih robotov. Krmiljenje servo motorja je nekoliko zahtevnejše, kot se zdi na prvi pogled, saj servo motorja ne moremo preprosto priključiti na plus in minus in ga krmiliti kot enosmerni motor. V osrčju servo motorja je enosmerni motor in nekaj elektronskih komponent, tudi potenciometer. Potenciometer preverja pozicijo motorja in jo poskuša uskladiti s signalom, ki ga pošljemo servo motorju. Da pozicijo spremenimo, pošiljamo določeno širok signal nosilne frekvence. Širino signala imenujemo DutyCycle (DC), ki pove kolikšen odstotek časa enega cikla (1/f) je signal v logični enici. Modelarski servo motorji za krmiljenje potrebujejo pulz širine med 0.5 ms za eno skrajno lego in 1.5 ms za drugo skrajno lego. Pulz med navedenima vrednostima postavi servo motor v pozicijo, ki pripada izbrani vrednosti. Glede na nosilno frekvenco pretvorimo pulz v DutyCycle, ki je podatek, ki ga razume RPi [18]. Pretvorbo izračunamo po preprosti enačbi DC = (pulz[s] f) 100 (1) Rezultat je, kot rečeno, odstotek časa celotnega cikla (1/f). Slika 26 prikazuje opisan primer pulzno širinske modulacije. 35

52 Slika 26: Splošen primer pulzno širinske modulacije (levo) in primer uporabe pulzno širinske modulacije za krmiljenje servo motorja z izračunanimi vrednostni DutyCycle za skrajni legi servo motorja (desno). Servo motor priključimo na pin GPIO18, saj je to pin, ki omogoča elektronsko pulzno širinsko modulacijo. Slika 27: Krmiljenje servo motorja z RPi 36

53 06_SERVO_motor.py (Priloga 9.2) 13 GPIO.setup(18, GPIO.OUT) # frekvenca f = 50 p = GPIO.PWM(18, f) # ======== # program # ======== # pulz sirine 0.5 ms premakne servo v skrajno lego # pulz sirine 2.5 ms premakne servo v drugo skrajno lego # DutyCycle je podatek, ki ga posredujemo servo motorju # DutyCycle = (pulz * 50Hz) * 100 desno = 2.5 levo = 12.5 sredina = (desno + levo) / 2 # zacni na sredini p.start(sredina) try: while True: p.changedutycycle(levo) time.sleep(1) p.changedutycycle(sredina) time.sleep(1) p.changedutycycle(desno) time.sleep(1) p.changedutycycle(sredina) time.sleep(1) except KeyboardInterrupt: p.stop() GPIO.cleanup() Raspberry Pi ima samo en izhod namenjen pulzno širinski modulaciji (PWM). To je pin GPIO18, ki ga določimo za izhod, medtem ko lahko za pulzno širinsko modulacijo uporabimo tudi druge izhode, a je njihova natančnost zaradi simuliranja pulzno širinske modulacije (semi-hardware PWM) omejena [12, 17]. Ustvarimo dogodek p, ki vsebuje navodila pulzno širinske modulacije. Pin 18 krmilimo s frekvenco 50 Hz. Zaženemo dogodek p in s tem vključimo pulzno širinsko modulacijo na pinu 18. Servo motor začne na poziciji»sredina«. Dogodku p spremenimo širino pulza (DC) z ukazom ChangeDutyCycle in tako spremenimo pozicijo servo motorja. Ob izhodu ustavimo pulzno širinsko modulacijo in počistimo stanja izhodov Zatemnitev svetleče diode Eden izmed preprostejših primerov, ki so lahko izhodišče za naprednejšo pulzno širinsko modulacijo, je primer svetleče diode, ki jo preko digitalnega pina zatemnimo. S tem dajemo občutek, da spreminjamo napetost, saj tak pojav opazimo pri lučeh s potenciometrom. Primer spodaj pa je preprosta Python zanka (na podlagi pulzno širinske modulacije), ki povečuje in zmanjšuje širino pulza. Vezavo pripravimo po Slika

54 7 07_LED_dim.py (Priloga 9.2) p = GPIO.PWM(18, 50) Pin 18 določimo za PWM pin s frekvenco 50 Hz p.start(0) try: while True: for DC in range(0, 100, 1): p.changedutycycle(dc) sleep(0.01) for DC in range(100, 0, -1): p.changedutycycle(dc) sleep(0.01) except KeyboardInterrupt: p.stop() GPIO.cleanup() Svetleča dioda je v začetku ugasnjena. Zanka for šteje DC v obsegu (range) s korakom 1. Začne z 0 in vsako stotinko sekunde, sleep(0.01), s korakom 1 šteje do 100. To število ima ime DC, ki je argument funkcije ChangeDutyCycle, torej vsako stotinko sekunde posodobi širino pulza, kar v končni fazi poveča osvetljenost (začeli smo pri 0) svetleče diode. Enak postopek ponovimo za zatemnitev svetleče diode Krmiljenje hitrosti enosmernega motorja Hitrost enosmernega motorja krmilimo s pulzno širinsko modulacijo. V osnovi spreminjamo čas logične enice čas stanja 5 V. Kolikšen odstotek časa teče skozi motor tok, s takšno hitrostjo se vrti. V primeru čipa L293 to reguliramo s spreminjanjem pulzno širinske modulacije, ki jo pošiljamo na vhod ENABLE. 38

55 Slika 28: Regulacija hitrosti enosmernega motorja Primer regulacije hitrosti enosmernega motorja uporablja dve tipki za spreminjanje širine pulza, ki posledično spremeni hitrost. Ena tipka hitrost povečuje, druga jo zmanjšuje. Primer a sledi splošni logiki, b pa uporablja kodo iz poglavja o štetju števila pritiskov. Oba povsem enakopravno zadostita nalogi: a_DC_motor.py (Priloga 9.2) 08b_DC_motor.py (Priloga 9.2) # ======== # program # ======== p.start(0) i = 40 # motor zacne v levo levo() try: while True: # tipka na pinu 17 while GPIO.input(17) == 1: sleep(0.01) if GPIO.input(17) == 0: sleep(0.01) if i == 100: i = 80 i = i + 20 print i # ======== # program # ======== prev_inpt1 = 0 prev_inpt2 = 0 p.start(0) i = 40 # motor zacne v levo levo() try: while True: # tipka na pinu 17 inpt1 = GPIO.input(17) if ((not prev_inpt1) and inpt1): if i == 100: i = 80 i = i + 20 print i # posodobi prejsnje stanje 39

56 p.changedutycycle(i) # tipka na pinu 4 while GPIO.input(4) == 1: / / except KeyboardInterrupt: p.stop() stop() prev_inpt1 = inpt1 # pocakamo zaradi debounce sleep(0.01) p.changedutycycle(i) # tipka na pinu 4 inpt2 = GPIO.input(4) / / except KeyboardInterrupt: p.stop() stop() Gre za zanko, ki neprestano preverja stanje obeh tipk (while True), vrstica 12. Med vrsticami se zgodi preverjanje stanja tipke program ugotovi, če je bila tipka pritisnjena samo enkrat. Vrstice povečajo širino pulza za 20, vendar največ do 100. Vrstica 26 posodobi pulz in ga pošlje izhodu. 4.3 LCD zaslon Kadarkoli naletimo na LCD zaslon, ki ima 16 priključkov, je zelo verjetno da uporablja HD44780 čip. To pomeni, da imajo vsi LCD zasloni z omenjenim čipom enako konfiguracijo pinov, zato so relativno enostavni za uporabo. Za povezavo z mikrokrmilnikom uporabljajo serijsko povezavo, zato potrebujejo veliko povezav za krmiljenje. Za naše potrebe bo dovolj, če uporabimo štiri podatkovne pine (4-bitno možnost), in dva kontrolna pina. Opis funkcij posameznih pinov prikazuje Tabela 4. 40

57 Tabela 4: Razčlenitev pinov LCD zaslona, ki temelji na čipu HD44780 [23] PIN SIMBOL STANJE FUKCIJA 1 VSS 0 V Ozemljitev (GND) 2 VDD 5 V Napajanje vezja 3 V0 Nastavitev kontrasta. Če priključimo potenciometer, lahko nastavimo kontrast. Za maksimalni kontrast priključimo na GND. 4 RS H/L 5 R/W H/L Pin RS (register select) ima dve funkciji: 0: Instruction register V stanju logične ničle pošilja ukaze LCD zaslonu (npr. pomik kurzorja, brisanje zaslona). Temu pravimo zapis navodil. 1: Data register v stanju logične enice pa je register v stanju, ko pošilja podatke, ki se izpišejo (ali jih prebere) na LCD zaslonu. Pin R/W (read/write) v stanju: logične ničle zapisuje (write) logične enice bere (read) 6 E H, H->L Pin E (enable, clock) moramo prožiti, da lahko podatke zapisujemo v registre. Zapis se zgodi ob prehodu stanja iz visokega v nizko (Falling edge trigger). 7 DB0 H/L Štirje podatkovni pini nizkega reda (low order 8 DB1 H/L bidirectional tristate data bus pins), ki skrbijo za pošiljanje in sprejem podatkov med mikrokrmilno 9 DB2 H/L enoto in čipom HD Med 4-bitno komunikacijo 10 DB3 H/L teh bitov ne potrebujemo. 11 DB4 H/L Štirje podatkovni pini visokega reda (high order 12 DB5 H/L bidirectional tristate data bus pins), ki skrbijo za pošiljanje in sprejemanje podatkov med 13 DB6 H/L mikrokrmilno enoto in čipom HD DB7 lahko 14 DB7 H/L uporabimo kot oznako za zasedenost (busy flag). 15 LEDA 5V 16 LEDK 0V Napajanje osvetlitve LCD zaslona Neposredno povezavo z RPi prikazuje Slika 29, LCD pa je mogoče priključiti tudi na posebne čipe, ki se obnašajo kot razširitev digitalnih vhodov in izhodov, če nam za projekt zmanjkuje pinov (Poglavje 5). 41

58 Slika 29: Priklop LCD zaslona na RPi Ko smo uspešno povezali LCD z RPi, je za delovanje LCD zaslona potrebna knjižnica, ki komunicira s čipom HD Najenostavneje bo, če kopiramo že ustvarjeno knjižnico podjetja Adafruit. Knjižnico že imamo, če smo namestili WebIDE, v nasprotnem primeru pa kopiramo celotno knjižnico Adafruit. Knjižnica se nahaja na github portalu, ki je neke vrste oblačna shramba za programerje in omogoča kolaboracijo projektov in deljenje kode. Kloniranje knjižnic iz githuba omogoča program git $ apt-get install git nato iz povezave prenesemo knjižnico $ git clone git://github.com/adafruit/adafruit-raspberry-pi-python-code.git Knjižnica, ki jo bomo uporabili za delovanje LCD zaslona se sedaj nahaja na disku v mapi $ cd Adafruit-Raspberry-Pi-Python-Code $ cd Adafruit_CharLCD 42

59 Z nameščeno knjižnico lahko nadziramo funkcije LCD zaslona. Najuporabnejše so nanizane spodaj Ukazi za nadzor LCD zaslona def begin(self, cols, lines): def message(self, text): def home(self): def clear(self): def setcursor(self, col, row): def nodisplay(self): def display(self): def nocursor(self): def cursor(self): def noblink(self): def blink(self): def DisplayLeft(self): def scrolldisplayright(self): Začne zaslon. Parametre določimo glede na velikost zaslona. Ukaz za vnos besedila. Pomakne kurzor na začetek (prva vrstica, prvi stolpec). Pobriše zaslon. Postavi kurzor na določeno mesto. Izključi zaslon. Vključi zaslon. Izključi kurzor. Vključi kurzor. Kurzor ne utripa. Kurzor utripa. Pomik besedila za eno v levo. Pomik besedila za eno v desno. LCD zaslon pa ne bo deloval, če niso pini pravilno definirani. Pravzaprav ni pomembno kako povežemo LCD in RPi (Slika 29), pomemben je vnos v knjižnico. Spremeniti moramo vrstico v datoteki Adafruit_CharLCD.py [24]. $ cd Adafruit-Raspberry-Pi-Python-Code $ cd Adafruit_CharLCD $ sudo nano Adafruit_CharLCD.py Poiščemo vrstico: def init (self, pin_rs=25, pin_e=24, pins_db=[23, 18, 27, 22], GPIO=None): #DB4=GPIO23 #DB5=GPIO18 #DB6=GPIO27 #DB7=GPIO22 43

60 in preverimo, če se dejansko stanje priklopa LCD zaslona sklada z vnosom v knjižnici. Datoteko shranimo, sedaj je LCD zaslon povezan in pripravljen za uporabo. Najpreprostejši primer je opisan spodaj, več funkcionalnosti pa omogočajo prej opisani Ukazi za nadzor LCD zaslona _LCD.py (Priloga 9.2) from Adafruit_CharLCD import Adafruit_CharLCD # =========== # nastavitve # =========== LCD = Adafruit_CharLCD() LCD.begin(8, 2) # ======== # program # ======== message = raw_input("besedilo: ") Uvozimo knjižnico Ustvarimo dogodek LCD, ki vsebuje funkcionalnost knjižnice. Programu sporočimo pričetek LCD dogodka, parametri so število stolpcev in število vrstic LCD zaslona, ki ga uporabljamo. raw_input(string) izzove uporabnika in shrani njegov vnos. 18 LCD.message(message) Vrstica 18 izpiše uporabnikov vnos na LCD zaslonu. 44

61 5 POSODOBITVE IN RAZŠIRJANJE FUNKCIONALNOSTI Dotaknili se bomo nekaterih možnosti povezovanja RPi z drugimi napravami. Tu izstopata predvsem protokola SPI in IIC. Preko njiju lahko priključimo mnoge druge čipe in tako razširimo možnosti uporabe RPi. Prednost in tudi uspešnost naprav kot sta Raspberry Pi in Arduino je ravno v razširljivosti. Če ju potrebujemo za specifično nalogo (recimo meritev zračnega tlaka), je rešitev preprosta. Osnovi Raspberry Pi (ali Arduino) namestimo razširitveno ploščico (imenovano tudi Shield ali Expansion Board), ki opravlja to specifično nalogo. Posameznih razširitvenih ploščic je mnogo, del te diplomske naloge pa je tudi izdelava razširitvene ploščice, za potrebe pouka robotike, ki združuje funkcionalnost več razširitvenih ploščic (Poglavje 6). Namestitev razširitvene ploščice ali priklop čipa, ki doda funkcionalnost osnovnemu modelu, je tesno povezana s posodobitvami. Linux operacijski sistem uporablja t.i. repository (skladišče). Gre za centralizirano spletno shrambo vseh zadnjih in posodobljenih različic programskih in sistemskih paketov. Da bi vedno dosegli optimalno delovanje RPi in razširitvenih ploščic in čipov, je potrebno RPi posodabljati [17]. Posodobitev začnemo z ukazom $ sudo apt-get y update && sudo apt-get y upgrade kjer bo prvi del ukaza ponovno sinhroniziral Python Package Index, ki je seznam paketov programske opreme za Python programski jezik [25]. Seznam paketov, ki so na voljo, bo prenesen in zapisan v /etc/apt/sources.list. Iz istega /sources.list drugi del ukaza namesti nove različice. Vrstni red je pomemben, saj bodo posodobljeni le paketi, ki so nazadnje vpisani v seznam /sources.list [14]. Opcija y dodeli vsem vprašanjem, ki se pojavijo med namestitvijo odgovor yes. Namestitev lahko traja dalj časa, ko pa je končana je potrebno posodobiti še firmware RPija. Namestimo program, ki bo izvedel posodobitev $ sudo apt-get install rpi-update Posodobitev poženemo z ukazom 45

62 $ sudo rpi-update kar lahko traja nekaj časa, konec posodobitve pa označuje izpis besedila za tremi zvezdicami v terminalu. Zatem RPi ponovno zaženemo. *** A reboot is needed to activate the new firmware $ sudo reboot Včasih je koristno, če posodobimo tudi distribucijo nameščenega operacijskega sistema. To je dolgotrajnejši postopek, saj je posodobitev kar zajetna. Izvedemo jo z ukazom $ sudo apt-get dist-upgrade 5.1 Komunikacija SPI Pomemben del povezave z drugimi čipi ali napravami je protokol SPI Serial Peripheral Interface (serijski periferni vmesnik). Gre za sinhroni serijski protokol s tremi nujnimi povezavami in eno opcijsko. Komunikacija določa, da je ena naprava gospodar (master), druga pa suženj (slave). Odvisno od uporabe nastavimo čip kot master ali slave. Povezave med dvema mikrokrmilnikoma so - MOSI (master out slave in) je izhod za master in vhod za slave, - MISO (master in slave out) je vhod za master in izhod za slave enoto, - SCLK je (serial clock) izhod za master in vhod za slave in določa takt prenosa podatkov, - SS (včasih CS) slave select (chip select) je izhod na master in ni nujno v uporabi. Preko njega slave ugotovi, ali ga je master izbral. MOSI je povezan z MOSI, MISO z MISO in SCLK s SCLK. Izhod master mikrokrmilnika je opcijsko povezan z SS [22]. 46

63 Slika 30: Blokovni diagram komunikacije SPI [18] SPI protokol bomo uporabili za povezavo s serijskim analogno digitalnim pretvornikom, ki bo dodal osem analognih vhodov RPi. Namestitve se lotimo tako, da v mapi /dev/ $ cd /dev/ $ ls najdemo (med mnogimi drugimi) zapisana vnosa spidev0.0 spidev0.1 Zapis pomeni, da ima RPi»napravo«za komunikacijo SPI. Ker pa mnogo uporabnikov dodatnih naprav ne uporablja, so kot privzeto izključene. To prihrani nekaj časa pri zagonu RPi. Ker bomo SPI uporabili za analogni vhod, ga omogočimo. Uredimo vsebino datoteke: $ sudo nano /etc/modprobe.d/raspi-blacklist.conf Z urejevalnikom nano, uredimo datoteko raspi-blacklist.conf tako, da pred vsako vrstico, ki jo želimo odstraniti iz blacklist, dodamo simbol lojtra # - naredimo komentar. Vrstico blacklist spi-bcm2708 spremenimo v #blacklist spi-bcm2708 Datoteko shranimo in RPi ponovno zaženemo z ukazom $ sudo reboot 47

64 Namestitev SPI nadaljujemo z ukazom python-dev, ki omogoči namestitev dodatkov za programski jezik Python. Med drugimi ukaz potrebujemo za namestitev SPI modula. $ sudo apt-get install python-dev git 2 Sedaj naložimo wrapper, modul za Python, ki omogoča, da uporabljamo Python programski jezik tudi, ko kličemo ne-python knjižnice. $ git clone git://github.com/doceme/py-spidev s programom git kopiramo (clone) vsebino mape py-spidev. Podobno 3 naredimo, če presnamemo datoteke, ki jih potrebujemo. Nato se prestavimo v mapo $ cd py-spidev/ in začnemo setup.py. $ sudo python setup.py install ki namesti modul spidev. Namestitev omogoča uporabo SPI povezave s programskim jezikom Python. Z ukazom $ cd ~ 2 Ukaz je sestavljen iz: $ sudo apt-get install python-dev $ sudo apt-get install git 3 Ročno bi ukaz izvedli tako: $ mkdir py-spidev $ cd py-spidev $ wget $ wget 48

65 se vrnemo v začetno mapo [26]. RPi je sedaj pripravljen na delo s SPI povezavo. V nadaljevanju bomo uporabili SPI čip, ki bo RPi dodal funkcionalnost analognih vhodov, možne pa so tudi mnoge druge rešitve, ki uporabljajo protokol SPI Analogni vhod Raspberry Pi nima analognih vhodov. To pomeni, da nobeden izmed GPIO pinov ne omogoča analogno digitalne pretvorbe signala. Dobimo ga, če uporabimo zunanji čip, ki ga priključimo preko I 2 C ali SPI vodila. Uporabili bomo čip MCP3008, 10-bitni, 8- kanalni analogno digitalni pretvornik (ADC), ki ga povežemo z RPi preko SPI vodila. Čip se napaja z 2,7 V do 5,5 V na pinu VDD. DGND in AGND priključimo na 0 V, pomenita pa ozemljitvi internega digitalnega in analognega vezja. Za delovanje ADC potrebujemo še štiri priključke: - CLK priključimo na SP10 SCLK (pin 23), - DOUT (Data Out) na SP10 MISO (pin 21), - DIN (Data In) na SP10 MOSI (pin 19) in - CS/SHDN (Chip Select/Shutdown Input) na SP10 CE0 N (pin 24) 49

66 Slika 31: Povezava RPi in analogno digitalnega pretvornika MCP3008 Ko je mikrokrmilnik povezan, na kanale CH0-CH7 (pin 1-8) pripnemo analogni vhod. Slika 31 podaja primer kako lahko s spodnjo kodo preberemo napetost potenciometra priključenega na analogno digitalni pretvornik MCP3008 na kanal 0. 50

67 _ADC.py (Priloga 9.2) # ========== # knjiznice # ========== import spidev from time import sleep # =========== # nastavitve # =========== # vzpostavi SPI povezavo na Bus 0, Device 0 spi = spidev.spidev() spi.open(0,0) # ========= # funkcije # ========= def get_adc(channel): # SPI komunikacija r = spi.xfer([1, (8 + channel) << 4, 0]) Uvozimo spidev wrapper, ki bo izvedel komunikacijo med master (RPi) in slave (MCP3008) mikrokrmilnikoma. Ustvarimo dogodek spi, ki vsebuje definicije iz knjižnice spidev.»odpremo«(vključimo) spi napravo (0,0) Bus0, Device0. Ustvarimo funkcijo get_adc, ki vsebuje argument channel (kanal). Vrnjeno vrednost shranimo v spremenljivko r. Če želimo pravilno razumeti dogajanje SPI komunikacije, potem potrebujemo podroben vpogled v podatkovni list čipa MCP3008. Vrstica 22 je tista, ki komunicira med master in slave čipom. Na»napravi«(dogodku) spi izvedemo funkcijo xfer (transfer), ki potrebuje tri argumente. 22 spi.xfer([byte1, byte2, byte3]) Funkcija xfer deluje vzajemno. Argument je byte (8-bitno število) in za vsak byte, ki ga pošljemo, dobimo nazaj en byte. Kaj poslati, razberemo iz podatkovnega lista. Spodnji del Slika 32 prikazuje»izmenjavo«bytov. Začetek komunikacije sprožimo, če pošljemo byte število 1. To zapišemo v byte1. Drugi byte, byte2, vsebuje informacijo o kanalu, ki ga želimo prebrati. Oblikujemo ga na podlagi Tabela 5. Prve štiri bite byta byte2 preberemo iz tabele, opazimo pa tudi, da so pomaknjeni za štiri mesta levo. To zapišemo s shift oznako, ki določa premik za določeno število bitnih mest. Kaj pošljemo za byte3 ni pomembno, ker ga komunikacija ignorira. Končen rezultat je vrstica spi.xfer([1, (8 + channel) << 4, 0]) 51

68 Slika 32: SPI komunikacija čipa MCP3004/3008 [27] Tabela 5: Del tabele konfiguracijskih bitov MCP3008 [27] Kontrolni biti desetiški Vhodna Single (8 + kanal) D2 D1 D0 zapis konfiguracija /Diff Kanal (8 + 0) single-ended CH (8 + 1) single-ended CH (8 + 2) single-ended CH (8 + 3) single-ended CH (8 + 4) single-ended CH (8 + 5) single-ended CH (8 + 6) single-ended CH (8 + 7) single-ended CH7 / / Kot rečeno, za vsak byte, ki ga pošljemo, prejmemo en byte (r[0-2]). 10-bitno število, ki je podatek analognega 10-bitnega vhoda, najdemo v byte2 (r[1]) in byte3 (r[2]). r[0]???????? r[1]?????? D9 D8 r[2] D7 D6 D5 D4 D3 D2 D1 D0 Sestavimo število D9D8D7D6D5D4D3D2D1D0. Bita D9 in D8»izrežemo«in pomaknemo levo za osem, zraven pa prištejemo byte3 (r[2]). ((r[1]&3) << 8) + r[2] 52

69 _ADC.py (Priloga 9.2) # filtriraj adcout = ((r[1]&3) << 8) + r[2] percent = int(round(adcout / 10.23)) # oblikovan izpis print("adc Output: {0:4d} Percentage: {1:3d}%".format(adcOut,percent)) sleep(0.2) # ======== # program # ======== vnos = int(raw_input("iz katerega kanala (0-7) ADC naj berem? ")) while True: get_adc(vnos) Spremenljivka adcout vsebuje torej 10-bitno število analognega vhoda. Število zaokrožimo in izpišemo v odstotkih. Z nekaj ukazi za oblikovanje besedila uredimo izpis, ki je smiseln. Od uporabnika zahtevamo vpis številke kanala, iz katerega preberemo analogno vrednost. V zanki kličemo funkcijo get_adc, za argument pa vstavimo število kanala, ki ga je podal uporabnik. Vsaki dve desetinki sekunde, sleep(0.2), se izpiše vrstica Komunikacija I2C I2C, I 2 C, ali IIC (Inter Integrated Circuit bus) je serijska povezava preko dveh vodnikov. Sestavljata ga SDA (Serial DAata line) in SCL (Serial CLock line). Komunikacija poteka dvosmerno po obeh vodnikih. Vzporedno lahko priključimo več I2C naprav, vsaki pa določimo unikaten naslov. Naslov se tako kot podatek posreduje serijsko. I2C protokol omogoča velikemu številu naprav, da komunicirajo med seboj (Slika 33). Slika 33: Blokovni diagram I2C komunikacije [18] 53

70 Običajno je en gospodar in eden ali več sužnjev, komunikacija pa steče, ko gospodar pošlje začetni bit (start bit), takoj za tem pa pošlje še naslov sužnja. Določeni suženj se odzove, ostali pa sporočilo ignorirajo in čakajo naslednji poziv z njihovim naslovom. I2C se uporablja takrat, ko hitrost komunikacije ni tako zelo pomembna, saj je hitrost prenosa podatkov okoli 1 Mbit/s. Za hitrejše prenose se poslužujemo SPI vodila, ki ima hitrosti nad 10 Mbit/s [18]. Za uporabo I2C komunikacije konfiguriramo RPi tako, da v datoteko $ sudo nano /etc/modules dodamo vrstici i2c-bcm2708 i2c-dev Podobno kot SPI, tudi I2C omogočimo preko datoteke $ sudo nano /etc/modprobe.d/raspi-blacklist.conf kjer blacklist i2c-bcm2708 spremenimo v #blacklist i2c-bcm2708 Datoteko shranimo in namestimo še orodje, s katerim lahko preverimo koliko I2C naprav je priključenih in kakšni so njihovi naslovi. Zato namestimo še $ sudo apt-get install python-smbus $ sudo apt-get install i2c-tools in RPi ponovno zaženemo z ukazom $ sudo reboot 54

71 Po ponovnem zagonu poglejmo naslov priključenega čipa MCP230xx (MCP23008 ali MCP23017), ki smo ga povezali po vzoru Slika 34. Naslov vseh priključenih I2C čipov torej prikažemo z ukazom $ sudo i2cdetect 1 4 Priklopljen čip se izpiše v mreži, z naslovom ki mu pripada: a b c d e f 00: : : : : : : : Razširitev digitalnih vhodov in izhodov na Raspberry Pi Čip MCP230xx razširi RPi z dodatnimi 8 ali 16 digitalnimi vhodi ali izhodi. Spodnji primer opisuje kako priključimo in krmilimo digitalne pine čipa MCP230xx. Pri povezovanju in komunikaciji s čipom se sklicujemo na Tabela 6. Čip MCP23008 ima 8 digitalnih vhodov in izhodov, čip MCP23017 pa 16. Odvisno od zahtev uporabimo primeren čip. Tabela 6: Tabela naslovov za MCP230xx [28] A2 A1 A0 I 2 C GND GND GND 0x20 GND GND 3V3 0x21 GND 3V3 GND 0x22 GND 3V3 3V3 0x23 3V3 GND GND 0x24 3V3 GND 3V3 0x25 3V3 3V3 GND 0x26 3V3 3V3 3V3 0x27 4 Številko 1 uporabimo, če uporabljamo Raspberry Pi, model B, rev2 55

72 Slika 34: Povezava I2C MCP23008 čipa Knjižnica, ki jo bomo uporabili za delovanje I2C komunikacije so spisali uporabniki in moderatorji podjetja Adafruit Industries. Kako jo naložimo, smo pokazali že v poglavju 4.3 LCD zaslon. Do knjižnic dostopamo z urejevalnikom WebIDE oz. v mapi $ cd Adafruit-Raspberry-Pi-Python-Code $ cd Adafruit_MCP230xx V isti mapi naredimo novo datoteko, da bo pot do knjižnice nedvoumna _I2C_portexp_multithread.py (Priloga 9.2) from Adafruit_MCP230xx import Adafruit_MCP230XX from time import sleep Uvozimo knjižnico za komunikacijo s čipom MCP

73 # =========== # nastavitve # =========== pinout = 3 pinin = 4 # num_gpios = 8 (MCP23008) or 16 (MCP23017) mcp = Adafruit_MCP230XX(address = 0x20, num_gpios = 8) mcp.config(pinout, mcp.output) # Set pin 3 to input, pullup resistor enabled mcp.config(pinin, mcp.input) mcp.pullup(pinin, 1) # ========= # funkcije # ========= def firstfunction(): while True: mcp.output(pinout, 1) # Pin 8 High sleep(1) mcp.output(pinout, 0) # Pin 8 High sleep(1) def secondfunction(): while True: print "Stanje pina %d je %d" % (pinin, (mcp.input(pinin) >> pinin)) # ======== # program # ======== t1.start() t2.start() Zaženemo funkciji first in second. Določimo en vhod in en izhod. Pine čipa MCP23008 naslavljamo z 0-7, MCP23017 pa V spremenljivko mcp zapišemo funkcionalnost čipa, skupaj s pravilnim naslovom in številom pinov. MCP230XX čip ima vgrajen pull-up upornik, ki ga lahko nadzorujemo programsko. Prva funkcija v neskončni zanki izvaja utripanje pina pinout. Druga funkcija v neskončni zanki izpisuje stanje pina pinin. Če pošljemo zahtevo po številki vhodnega pina dobimo binarni (2pin) izpis. Pomik v desno za zahtevano število pinov izpiše iskano decimalno obliko pina while True: sleep(1) Pomen funkcije sleep znotraj redundantne zanke je razložen v naslednjem poglavju Priklop LCD zaslona preko I2C V poglavju 4.3 smo videli, da potrebuje LCD zaslon veliko pinov za delovanje. Če imamo večji projekt nam na RPi lahko hitro zmanjka priključkov. S čipom MCP23008 razširimo število pinov in nanj priključimo LCD zaslon. Povezavo prikazuje Slika

74 Slika 35: Priklop LCD zaslona preko čipa MCP23008 Za delovanje LCD zaslona uporabimo enake funkcije kot pri poglavju 4.3, saj uvozimo enake knjižnice. Vse skupaj pa komunicira s čipom MCP23008, zato vključimo še knjižnico za komunikacijo, kar smo že opisali pri prejšnjem poglavju _I2C_LCD.py (Priloga 9.2) # =========== # nastavitve # =========== bus = 1 # rev2 = 1, rev1 = 0 address = 0x21 # I2C address of the MCP230xx num_gpios = 8 # num_gpios = 8 (MCP23008) or 16 (MCP23017) mcp = MCP230XX_GPIO(bus, address, num_gpios) LCD = Adafruit_CharLCD(pin_rs =7, pin_e =5, pins_db =[4,3,2,1], GPIO=mcp) cmd = "ip addr show eth0 grep inet awk '{print $2}' cut -d/ -f1" I2C naslov izberemo glede na tabelo 7. Ustvarimo mcp adapter, ki nosi prej definirane nastavitve. Ustvarimo dogodek LCD v katerega vstavimo mcp adapter. Pazimo na pravilno naslavljanje pinov. Sledijo si po vrsti: RS, E, DB4-DB7. Spremenljivka cmd nosi niz besedila, ki bo kasneje služil kot ukaz za pridobitev IP naslova 58

75 # ========= # funkcije # ========= def run_cmd(cmd): p = Popen(cmd, shell=true, stdout=pipe) output = p.communicate()[0] return output # ======== # program # ======== LCD.clear() IPaddr = run_cmd(cmd) LCD.message("%s\n%s" % ((IPaddr[0:8]), (IPaddr[8:16]))) sleep(10) LCD.clear() V funkcijo run_cmd vstavimo spremenljivko cmd, ki niz besedila»obdela«in vrne IP naslov v obliki xxx.xxx.xxx.xxx. Program izpiše IP naslov v dveh vrsticah. IPaddr ločimo na znake od prvega do osmega [0:8] in na devetega do šestnajstega [8:16]. Ker je uporabljen 8x2 LCD zaslov, v prvo vrstico zapišemo prvih osem znakov IP naslova, v drugo pa z znakom \n drugih osem znakov. 5.3 Vzporedno izvajanje dveh (ali več) neskončnih zank Še enkrat si oglejmo program 11_I2C_portexp_multithread.py. Tokrat razčlenimo še preostale vrstice. Vsebujejo programsko kodo za funkcionalnost vzporednega izvajanja kode (Multithreading). Rešitev pride prav, ko želimo preverjati dve zanki hkrati ali ko izvajamo dve časovni funkciji neodvisno eno od druge _I2C_portexp_multithread.py (Priloga 9.2) from Adafruit_MCP230xx import Adafruit_MCP230XX from time import sleep from threading import Thread # ========= # funkcije # ========= Def firstfunction(): while True: mcp.output(pinout, 1) # Pin 8 High sleep(1) mcp.output(pinout, 0) # Pin 8 Low sleep(1) Uvozimo knjižnico za komunikacijo s čipom MCP23008 Uvozimo knjižnico za multiopravilnost (vzporedno izvajanje kode). Definiramo dve funkciji, ki ju bomo izvajali vzporedno. Prva funkcija v neskončni zanki izvaja utripanje pina pinout. 59

76 def secondfunction(): while True: print "Stanje pina %d je %d" % (pinin, (mcp.input(pinin) >> pinin)) # Multithreading setup t1 = Thread(target = firstfunction) t2 = Thread(target = secondfunction) Druga funkcija v neskončni zanki izpisuje stanje pina pinin. Če pošljemo zahtevo po številki vhodnega pina dobimo binarni (2 pin ) izpis. Pomik v desno za zahtevano število pinov izpiše iskano decimalno obliko pina. Vrstici 39 in 40 pripišeta spremenljivkama t1 in t2 funkcionalnost niti (Thread). Niti lahko izvajamo hkrati, kar pomeni, da se lahko firstfunction in secondfunction izvajata sočasno t1.daemon = True t2.daemon = True # ======== # program # ======== t1.start() t2.start() while True: sleep(1) Funkcija daemon opredeli dogodka t1 in t2 tako, da so daemon funkcije aktivne (»žive«) samo če se izvaja še kakšna druga funkcija, ki ni daemon (nondaemon) [29].Zato določimo če redundantno zanko, vrstica 49, ki skrbi, da se izvajajo vse daemon funkcije. Ko končamo while True zanko, se končata tudi funkciji 1 in 2. Brez daemon, se funkciji ne bi nikoli končali in takega programa ni mogoče končati (niti s tipko CTRL+C). 5.4 Nadzor GPIO preko spleta Omenimo še zanimivo orodje, s katerim priključimo RPi svetovnemu spletu. Vsak dan je vse več naprav pozvanih v mrežo, zavedajoč se sebe in svoje okolice. Ta fenomen so poimenovali Internet stvari (Internet of Things - IoT). Za preprost (pa tudi naprednejši) nadzor GPIO pinov uporabimo program WebIOPi in priključimo RPi Internetu stvari. Program kopiramo na disk, pri tem pa na spletni strani ( preverimo, če bomo prenesli najsodobnejšo različico. $ wget $ tar xvzf WebIOPi tar.gz $ cd WebIOPi $ sudo./setup.sh 60

77 Skripta setup.sh bo namestila potrebno vsebino iz apt-get skladišča programa WebIOPi, nato pa zgradila kodo in jo namestila. Ko se namestitev zaključi, na RPi vključimo program $ sudo /etc/init.d/webiopi start do njega pa dostopamo preko brskalnika. V brskalnik vpišemo pri čemer localhost zamenjamo z IP naslovom RPi. Pojavi se okno za prijavo, kamor vpišemo webiopi za uporabniško ime in raspberry za geslo. Ko se povežemo lahko vidimo grafično reprezentacijo (Slika 36) pinov GPIO. Pine lahko nastavimo kot vhod ali izhod, logično stanje izhodov lahko spreminjamo ali razberemo stanje vhodov [3]. Naprednega krmiljenja diplomsko delo ne opisuje, uradna spletna stran pa ponuja podrobna navodila za krmiljenje tudi I2C, SPI in drugih čipov. Slika 36: Gumb za grafični nadzor GPIO pinov preko spleta 5.5 Samodejni zagon Python skripte ob zagonu RPi Večkrat je koristno, da se ob zagonu RPi zažene tudi program. Zamislimo si lahko mnogo situacij, kjer je to potrebno. Za začetek izberimo preprost primer. Po zgledu poglavja 4.3 smo LCD zaslon priključili na RPi. Sedaj želimo, da se ob vsakem zagonu RPi na LCD zaslonu izpiše IP naslov RPi. Najprej je potrebno, da se ob zagonu uporabnik (default: pi) samodejno prijavi. To naredimo tako, da spremenimo vsebino datoteke /etc/inittab $ sudo nano /etc/inittab 61

78 Nekje nižje najdemo 1:2345:respawn:/sbin/getty in vrstico spremenimo v komentar: #1:2345:respawn:/sbin/getty Nakar pod vrstico dodamo 1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1 V dodani vrstici smo pozorni na pi, to je uporabniško ime, ki ga uporabljamo za prijavo v RPi [30]. Shranimo in se na konec datoteke bashrc $ nano ~/.bashrc lotimo dodajanja ukaza (kot bi ga običajno vnesli v terminal). Ker želimo zagnati program 12_LCD_IP.py, ki izpiše IP naslov RPi, na konec datoteke dodamo ukaz sudo python /home/webide/repositories/my-pi-projects/diploma/12_lcd_ip.py Ukaza ni potrebno spraviti v eno vrstico, saj bo RPi ob zagonu prebral datoteko bashrc po vrsti in izvedel vse zapise v njej. Preizkusimo s ponovnim zagonom, potem pa lahko pregledamo vse aktivne procese (če nas zanima, kaj se izvaja v ozadju) z ukazom $ ps axu Če želimo proces, ki se izvaja v ozadju zaustaviti, to storimo z ukazom $ sudo kill <pid> ali $ sudo killall <process-name> 62

79 6 RAZŠIRITVENA PLOŠČICA Vsakdo, ki začne uporabljati RPi, hitro ugotovi, da za osnove robotike potrebuje dodatke, kot so prave žice za priklop, senzorjev ali motorjev, specifične čipe, prave knjižnice za delo s programskim okoljem Tudi izkušnje iz poletne šole robotike, kjer sem sodeloval kot vodja raziskovalne skupine, so pokazale, da se brez prave razširitvene ploščice poučevanje zakomplicira in učence zmede. Večino prikazanih primerov (iz poglavij 3-5) sem izvedel s skupino 7 udeležencev poletne šole robotike Posamezne naloge (Priloga 9.3) smo izvedli s sestavljanjem osnovnih komponent na testni ploščici (protoboard). Ugotovil sem, da se pri vezavi čipov in nalog z velikim številom povezav delo zaplete. Udeleženci so večkrat napačno priključili povezavo, kar je bilo razumljivo pri tako številčnih povezavah. Velik problem je nastal zaradi preverjanja napačno povezanega čipa, kar je naredilo zamik v jemanju nove snovi, uspešnejši udeleženci pa so včasih čakali. S takim načinom dela smo se veliko ukvarjali z elektroniko in vezavo komponent, manj pa s samo robotiko. Ob uspešni vezavi pa je potrebno preučiti še programsko kodo Tak način dela je vsekakor temeljit in omogoča učencu, da spozna vsak posamezni element, ki v končni fazi omogoča krmiljenje robota. Spozna tudi programsko kodo. Učenje je zato dolgotrajno in neprimerno za mlajše (ali manj spretne) učence. Testna skupina je pokazala, da je izdelava razširitvene ploščice, ki vsebuje vse elemente za osnovno in napredno poučevanje robotike upravičena. Izdelana razširitvena ploščica je lahko ključen element pri predmetu Robotika v tehniki v osnovnih šolah. Diplomsko delo Urške Trošt pojasnjuje potrebnost kvalitetnega vmesnika, v kombinaciji z zbirko Fisher Technik, za dosego učnih ciljev [31, 32]. Z znanjem iz tega diplomskega dela lahko enostavno zamenjamo vmesnik za Raspberry Pi. Nujno potrebna je v tem primeru primerna razširitvena ploščica. Rešitev je predlagana v sledečih poglavjih. 6.1 Prototip Pred izdelavo razširitvene ploščice, ki bo skupaj z RPi služil kot robotski krmilnik za robotiko, je smiselno preveriti kakšne so že obstoječe rešitve. Izbral sem nekaj kriterijev, na podlagi katerih bodo primerjane razširitvene ploščice. Kriteriji so izbrani glede na učni načrt, splošno uporabnost, enostavnost uporabe in izkušnje iz poučevanja robotike. 63

80 Analogni izhod Releji LCD ali priklop zanj LED Tipke Izhod z odprtim kolektorjem Močnostni priklopi Dostop do GPIO pinov Digitalni vhodi/izhodi Hardverska PWM Analogni vhod Zgledujejo se tudi po dobrih izkušnjah pri uporabi vmesnika eprodas-rob1 [33]. Primerjavo prikazuje Tabela 7, na koncu tabele je vključen tudi prototip razširitvene ploščice, ki je nastala v okviru diplomske naloge. Tabela 7: Primerjava bolj znanih komercialnih razširitvenih ploščic za Raspberry Pi [34] PiFace Digital N N 2 0 Gertboard GertDuino chipkit ATmega ATmega328 +ATmega PIC32MX250F Y N 0 2 N N 2 0 Y N 0? MotorPiTX N N 1 0 Matboard Y N 4 0 BrickPi 5 5? 0 N N 0? FishPiMix Y PROTOTIP GPIO Zelena najsupešenjši med konkurenti Y Y Prilagojen enotam LEGO Mindstorms. 6 Primer dobre prakse v osnovni šoli Martina Krpana v Ljubljani. Obiskal sem učitelja tehnike, ki je izdelal svojo razširitveno ploščico. 64

81 Slika 37: PiFace Digital [35] Slika 38: Gertboard [36] Slika 39: GertDuino [37] Slika 40: chipkit PI [38] Slika 41: MotorPiTX [39] Slika 42:Matboard [40] Slika 43: BrickPi [41] Slika 44: FishPiMix Na voljo je še mnogo dodatkov, ki izpolnijo naše kriterije, a jih je mogoče dobiti kot posamezne module. Po pregledu vidimo, da ima prototip potencial. Konkurenčni izdelki niso v celoti primerni za pouk robotike, povrhu tega pa imajo nekateri še dodaten 65

82 mikroprocesor (npr. AtMega328), ki ga krmilimo preko Arduino ali podobnega programskega okolja. Tak program namestimo na RPi. Za preprosto krmiljenje lahko uporabljamo le funkcije enega mikroprocesorja. Za neposredno krmiljenje s programskim okoljem Python vseh vhodov in izhodov v Tabela 7, ne upoštevamo znaka + in številke za njim, ker se navezujejo na uporabo dodatnega mikroprocesorja. Zmogljivejši je le Gertboard, ki pa je tudi namenjen naprednejšim uporabnikom, je pa tudi robustnejši in večji. V prid prototipu so tudi priključni terminali, ki omogočajo priklop poljubnih elementov z žicami. Izbranim kriterijem (Tabela 7) ustrezajo komponente, ki so predstavljene v Tabela 8. Izbrane so zaradi široke uporabe in posledično dobre podpore knjižnic. Razporeditev posameznih komponent in elementov prikazuje Slika 45. Tabela 8: Izbrane komponente prototipa IC1 0x20 MCP23008 Nanj so priključene tipke 8-bitni serijski razširitveni IC2 0x21 MCP23008 Krmiljenje LCD zaslona čip z osmimi vhodi ali Z njim krmilimo čipa IC5 IC3 0x22 MCP23008 izhodi in IC6 IC4 / MCP bitni analogno digitalni pretvornik IC5 / L293D / IC6 / L293D Močnostni izhod do 1A (Hkrmilje) / IC7 / L293D IC8 0x40 PCA bitni 16-kanalni PWM čip Krmilijo ga GPIO pini 23, 24, 25, 27 Slika 45: Pozicije izbranih elementov in priključkov 66

83 Komponente so na testni ploščici razporejene zelo udobno. Razlog temu je velikost testne ploščice, končni izdelek pa bi obsegal približno velikost RPi in bi»sedel«nanj, kot je to v navadi pri razširitvenih ploščicah. Opazimo (Slika 45) tudi ploščico podjetja Adafruit Industries, ki služi lažjemu dostopu do pinov površinsko nameščenega SMD čipa PCA9685, saj potrebuje uporabnik za spajanje čipa precizna orodja in več izkušenj, kot sem jih imel samo ob nastajanju prototipa. Slika 46: Dimenzije in pogled na zgornjo stran prototipa Slika 47: Spodnja stran 7 prototipa. 7 Slika sovpada s prikazom zgornjega dela 67

84 6.2 Programska knjižnica Za delo s prototipom je pripravljena knjižnica, ki vključuje funkcionalnost vseh komponent prototipa. Knjižnic je več, povzete in predelane pa so delovanje skupaj z prototipom. Skupaj z diplomskim delom je torej nastal paket knjižnic imenovan RoPi_v0.1-beta. Gre za prvo testno različico, ki povsem deluje, a jo bo mogoče na nekaterih mestih še optimizirati. Zato ji pripada ime beta. Pogledali bomo njeno namestitev in primere uporabe. Obiščemo github, portal za skladiščenje programske kode, kjer je shranjena in kjer bo na voljo vedno najsodobnejša različica knjižnice: Slika 48: Shramba vseh izdaj paketa knjižnic RoPi Shranimo povezavo do Source code (tar.gz) najsodobnejše različice in jo vnesemo v terminal RPi $ wget Prenesli smo arhivirano datoteko, zato jo razširimo z ukazom tar -zxvf [ime datoteke]. $ tar -zxvf v0.1-beta.tar.gz RoPi-1.0-beta/ RoPi-1.0-beta/README.md 68

85 RoPi-1.0-beta/RoPi_examples.py RoPi-1.0-beta/RoPi_lib.py RoPi-1.0-beta/RoPi_lib_CharLCD.py RoPi-1.0-beta/RoPi_lib_I2C.py RoPi-1.0-beta/RoPi_lib_MCP230XX.py RoPi-1.0-beta/RoPi_lib_PCA9685.py $ cd RoPi_v0.1-beta Vsebina se razširi v mapo RoPi_v0.1-beta, zato se pomaknemo vanjo. Vidimo tudi vse druge knjižnice, ki so potrebne za delovanje prototipa. Vedno ko želimo RoPi knjižnico uporabiti, je potrebno, da se nahajamo znotraj omenjene mape, saj drugače povezave med knjižnicami ne delujejo. Znotraj mape torej ustvarimo svoj projekt, za uspešno delovanje pa v vsakem novem Python programu, za katerega uporabljamo prototip, na začetku iz knjižnice uvozimo vse elemente: from RoPi_lib import * Pregled funkcij in primeri uporabe PORTA (RoPi_examples.py) #!/usr/bin/env python # UL PeF, Rok Cernelic, 2014 from RoPi_lib import * # ========================== # PORTA (ANALOGNI VHOD) # ========================== PORTA(pin) # Primer 1 while True: print PORTA(1) pin obsega kanale 0-7, ki jih kličemo kot prikazuje Primer 1. PORTB (RoPi_examples.py) #!/usr/bin/env python # UL PeF, Rok Cernelic, 2014 from RoPi_lib import * # ============================== # PORTB (DIGITALNI VHOD/IZHOD) # ============================== PORTB.setup(pin, PORTB.IN) 69

86 PORTB.pullup(pin, 1) PORTB.input(pin) PORTB.setup(pin, PORTB.OUT) PORTB.output(pin, value) # Primer 2 while True: if PORTB.input(7) == 0: print "7" if PORTB.input(6) == 0: print "6" if PORTB.input(5) == 0: print "5" if PORTB.input(4) == 0: print "4" if PORTB.input(3) == 0: print "3" if PORTB.input(2) == 0: print "2" if PORTB.input(1) == 0: print "1" if PORTB.input(0) == 0: print "0" # Example 3: while True: PORTB.output(7, 1) sleep(1) PORTB.output(7, 0) sleep(1) PORTB nastavimo kot vhod ali izhod. Znotraj knjižnice je PORTB že nastavljen kot vhod, saj so nanj priključene tipke. Vključen je tudi»pull-up«upornik. Če želimo, lahko PORTB uporabimo tudi kot digitalni izhod. Vnesemo pin 0-7 in njegovo logično stanje 0/1. Primer 2 preverja stanje tipk. Ob pritisku na tipko (ki ima vključen pullup upornik) sklenemo vhod z ozemljitvijo. To izpiše številko pritisnjene tipke. Vhod 7 v primeru 3 je izhod, ki vsako sekundo spremeni logično stanje. PORTC (RoPi_examples.py) #!/usr/bin/env python # UL PeF, Rok Cernelic, 2014 from RoPi_lib import * # ====================================== # PORTC (DIGITALNI MOČNOSTI IZHOD, 0.6A) # ====================================== PORTC.output(pin, value) PORTE.pwm(0, DC) PORTE.pwm(1, DC) PORTE.pwm(2, DC) PORTE.pwm(3, DC) PORTC je definiran samo kot izhod. Ima pine 0-7, z vrednostmi 1/0. Če priključimo enosmerni motor na PORTC, potem lahko reguliramo njegovo hitrost, če povežemo izhod PORTE na ENABLE priključek čipov IC5 in IC6. Nastavimo kanal (0-3) in vpišemo širino pulza (0-4095). Frekvenca je znotraj knjižnice poenostavljena na 50 Hz. 70

87 Slika 49: Priključek za PWM na IC5, IC6 in IC7 # Primer 4 try: while True: PORTC.output(4, 0) PORTC.output(5, 1) except KeyboardInterrupt: # stop PORTC.output(4, 0) PORTC.output(5, 0) # Primer 5 PORTC.output(4, 0) PORTC.output(5, 1) def speed(): for DC in range(0, 4095, 10): PORTE.pwm(2, DC) sleep(0.01) for DC in range(4095, -1, -10): PORTE.pwm(2, DC) sleep(0.01) Če želimo največjo hitrost enosmernega motorja, potem se ne ukvarjamo s povezovanjem PORTE in ENABLE priključkov. Če pustimo pin ENABLE prazen, se motor vrti z najvišjo hitrostjo. Za regulacijo hitrosti motorja, nastavimo PORTE in priključimo potrebne pine ENABLE s PORTE. Primer 5 zvezno spreminja hitrost motorja od najnižje do najvišje in nazaj. try: while True: speed() except KeyboardInterrupt: # stop PORTC.output(4, 0) PORTC.output(5, 0) PORTD (RoPi_examples.py) #!/usr/bin/env python # UL PeF, Rok Cernelic, 2014 from RoPi_lib import * 71

88 # ============================ # PORTD (GPIO + IC7) # ============================ PORTD.setmode(PORTD.BCM) PORTD.setup(pin, PORTD.IN) PORTD.input(pin) PORTD.setup(pin, PORTD.OUT) PORTD.output(pin, value) # Primeri 2-4 PORTD si delijo štirje močnostni izhodi čipa IC7 in pini GPIO22, GPI17, GPIO4 in GPIO 18. Močnostne izhode čipa IC7 krmilimo s pini GPIO23, GPIO24, GPIO25 in GPIO27. Nastavimo številčenje. Pine GPIO22, GPI17, GPIO4 in GPIO 18 lahko nastavimo kot vhode. Pine GPIO4, GPIO17, GPI18, GPIO22, GPIO23, GPIO24, GPIO25, GPIO27 lahko nastavimo kot izhode. PORTD uporabimo v primerih 2-4 PORTD (RoPi_examples.py) #!/usr/bin/env python # UL PeF, Rok Cernelic, 2014 from RoPi_lib import * # ================================================== # PORTE (SERVO PWM DRIVER) # ================================================== PORTE.pwm(pin, DC) # Primer 6 while True: # PORTE.pwm(channel, position-dc) PORTE.pwm(8, DCmin) sleep(2) PORTE.pwm(8, DCmax) sleep(2) PORTE mora imeti priključeno 5V napajanje. To lahko storimo tako, da povežemo 5V izhod RPi z vhodom M_SUPPLY (Slika 49). PORTE služi hardverski pulzno širinski modulaciji. Nastavimo pin 0-15, DC je širina pulza (DutyCycle), ki mora biti celo število med 0 in Primer 6 spremeni pozicijo servomotorja priključenega na pin 8 iz ene v drugo skrajno lego. DCmin in DCmax sta določena znotraj knjižnice in predvidevata uporabo običajnih servo motorjev. 72

89 # Primer 7 # Control servo position with potentiometer connected to 10bit ADC input (PORTA) while True: ADC = PORTA(0) DC = DCmin + ((DCmax - DCmin) * (ADC / )) PORTE.pwm(8, int(dc)) Primer 7 preverja vrednost potenciometra priključenega na PORTA pin 0. Dobljeno število prebere in pretvori v vrednost pozicije servo motorja. To je na primer uporabno za krmiljenje volana. LCD (RoPi_examples.py) #!/usr/bin/env python # UL PeF, Rok Cernelic, 2014 from RoPi_lib import * # ================================= # LCD # ================================= # Primer 8 message = raw_input("vnos: ") while 1: LCD.clear() LCD.message("%s\n%s" % ((message[0:8]), (message[8:16]))) sleep(2) Za opis pogostih funkcij za nadzor dogodkov LCD zaslona se sklicujemo na poglavje 4.3. Primer 8 izpiše besedilo v dve vrstici. 6.3 Priprava na proizvodnjo Po izdelavi prototipa sem zrisal (Priloga 9.4) in pripravil risbo razširitvene ploščice, ki nosi delovno ime RoPi (Rok Raspberry Pi). Projekt je izdelan v programu Eagle, iz katerega je mogoče izvoziti projekt v obliki GERBER datotek. Gre za industrijski standardni format, po katerem izdelajo tiskano vezje, ki smo ga v simulaciji pripravili. Slika 50 prikazuje prvo različico projekta RoPi_v0.1-beta. Projekt obsega dosti manjšo ploščico, zato je narejen kompromis, kjer čip IC1 nima svojih izhodov na PORTB (kar bi omogočilo dodatno funkcionalnost v primeru nerabe tipke), ampak so tam izhodi za GND in IC7. Razpolovljeno je tudi število priključkov napajalnih napetosti 3.3 V in 5 V. 73

90 Slika 50: Simulacija tiskanega vezja (zgoraj) in napisi (Silk Screen) na tiskani ploščici (spodaj) 74

Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54

Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54 Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54 Boštjan Lemut Prva povezava na L-54 s povezovalnim kablom povežemo mrežna vmesnika na računalniku in L-54 v brskalniku vpišemo

More information

Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig

Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig Boštjan Lemut Prva povezava na L-54 s povezovalnim kablom povežemo mrežna vmesnika na računalniku in L-54

More information

Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja

Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja Navodila za vaje pri predmetu Internetne tehnologije VAJA 2 Dušan

More information

sodobne poslovnoinformacijske rešitve Birokrat Kratka navodila za namestitev demo verzije programa Birokrat

sodobne poslovnoinformacijske rešitve   Birokrat Kratka navodila za namestitev demo verzije programa Birokrat sodobne poslovnoinformacijske rešitve www.andersen.si Birokrat Kratka navodila za namestitev demo verzije programa Birokrat Kratka navodila za namestitev demo verzije programa Birokrat Pošiljamo vam demo

More information

RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA

RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA POPRBAZA je namenjen večji reorganizaciji podatkov v računalnikovem spominu. Reorganizacijo narekujejo bodisi zakonske spremembe, bodisi novosti v programu. Zato je

More information

Vodnik skozi Google Analytics Beta verzija 1. del. prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js)

Vodnik skozi Google Analytics Beta verzija 1. del. prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js) Vodnik skozi Google Analytics Beta verzija 1. del prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js) Ta vodnik je povzetek Googe vodiča ' Tracking Code Migration Guide Switching from urchin.js

More information

Sistemske zahteve za SAOP

Sistemske zahteve za SAOP Sistemske zahteve za SAOP Samostojna delovna postaja višji). icenter je ERP sistem, ki zagotavlja popolno kontrolo nad vsemi poslovnimi procesi v podjetju. V tej postavitvi je SAOP icenter nameščen na

More information

Povezava DEQ v omrežje

Povezava DEQ v omrežje Povezava DEQ v omrežje 17.10.2016 KAZALO 1. NI INTERNETNE POVEZAVE... 2 1.1. Direktna povezava med računalnikom ter DEQ... 2 1.2. Povezava DEQ na dostopno točko... 3 2. INTERNETNA POVEZAVA... 5 2.1. Žični

More information

Navodila za nastavitev varne povezave po protokolu SSH

Navodila za nastavitev varne povezave po protokolu SSH Datum: 28. 9. 2010 Navodila za nastavitev varne povezave po protokolu SSH 1. Pogoji za zagotovitev varne povezave po protokolu SSH Za uspešno zagotovitev in nastavitev varne povezave po protokolu SSH je

More information

Povezava regulatorja DEQ v omrežje

Povezava regulatorja DEQ v omrežje KAZALO 1. OBJEKT NIMA INTERNETNE POVEZAVE... 2 1.1. Direktna povezava med računalnikom ter DEQ... 2 1.2. Povezava DEQ na dostopno točko... 4 1.3. Povezava preko GSM omrežja... 7 2. OBJEKT IMA INTERNETNO

More information

» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije

» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije Obrazec P-5 Specifikacije 30K250316» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije KAZALO VSEBINE 1. Predmet javnega naročila...3 1.1. SKLOP-1: STORITEV VZDRŽEVANJA ORACLE LICENČNE

More information

Naslavljanje v IP. Miran Meža

Naslavljanje v IP. Miran Meža Naslavljanje v IP Miran Meža Omrežje vseh omrežij Avtonomni sistem Avtonomni sistem Avtonomni sistem Avtonomni sistem Avtonomni sistem Avtonomni sistem Omrežje vseh omrežij Usmerjanje prometa: poznati

More information

Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x

Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x 1 Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x 2 družina standardov, ki opisujejo delovanje lokalnih (LAN) in mestnih (MAN) omrežij delo opravljano v delovnih skupinah več na

More information

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Četrtek, 2. junij 2016 SPLOŠNA MATURA

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Četrtek, 2. junij 2016 SPLOŠNA MATURA Državni izpitni center *M16178113* SPOMLADANSKI IZPITNI ROK NAVODILA ZA OCENJEVANJE Četrtek, 2. junij 2016 SPLOŠNA MATURA RIC 2016 M161-781-1-3 2 IZPITNA POLA 1 1 1 2 1 3 3 4 1 5 3 6 2 7 1 8 1 9 1 10 3

More information

Lotus Quickr Najhitrejši način izmenjave poslovne vsebine

Lotus Quickr Najhitrejši način izmenjave poslovne vsebine Lotus Quickr Najhitrejši način izmenjave poslovne vsebine Zoran Povh, IT specialist zoran.povh@si.ibm.com 2007 IBM Corporation Vsebina Kaj je Lotus Quickr? Integracija z namiznimi programi Skupinski prostori

More information

Hitra rast hranjenih podatkov

Hitra rast hranjenih podatkov Tomaž Borštnar - član uredništva računalniške revije Monitor od začetka (oktober 1991; ne-pc okolja (Unix, etc) - sodelavec YUNAC in ARNES od začetka - postavil in upravljal večino strežnikov na SiOL -

More information

Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje. doc.dr. Mira Trebar

Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje. doc.dr. Mira Trebar Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje doc.dr. Mira Trebar 2 Vaja 1 (11.10.2010) Vaje so obvezne (delo v laboratoriju + doma) S1: Logisim MIPS procesor eno-cikelna izvedba ( logisim ) MIPS

More information

Navodila za namestitev CREO 3.0 in Audax nastavitev

Navodila za namestitev CREO 3.0 in Audax nastavitev Navodila za namestitev CREO 3.0 in Audax nastavitev Potrebujete: Iz PTC spletne strani ali z DVD-ja prenesite namestitvene datoteke za program Creo 3.0 in jih razširite na lokalni disk. Audax Nastavitve

More information

Tehnike programiranja PREDAVANJE 9 Uvod v binarni svet in računalništvo

Tehnike programiranja PREDAVANJE 9 Uvod v binarni svet in računalništvo Tehnike programiranja PREDAVANJE 9 Uvod v binarni svet in računalništvo Predavanje 9 Uvod v binarni svet Birnarna aritmetika Polprevodniške tehnologije Računalnik Mikroprocesor ldos.fe.uni-lj.si >študij

More information

Uvod v svetovni splet

Uvod v svetovni splet Univerza v Ljubljani Fakulteta za gradbeništvo in geodezijo Uvod v svetovni splet Računalništvo in informatika, GR-UNI, GR-VSŠ Tehnična dokumentacija in informatika, VKI-UNI št. leto 2007/08, 1. semester

More information

Osnovna navodila za uporabo programskega paketa V3.1 STEP 7 MicroWIN 32

Osnovna navodila za uporabo programskega paketa V3.1 STEP 7 MicroWIN 32 ŠC Novo mesto Višja strokovna šola - elektronika Osnovna navodila za uporabo programskega paketa V3.1 STEP 7 MicroWIN 32 mag., univ. dipl. inž. ŠOLSKI CENTER NOVO MESTO, november 2004 KAZALO stran 1 UVOD...

More information

Navodila za interaktivne naloge Bober

Navodila za interaktivne naloge Bober Avtorji dokumenta: Dean Gostiša , Lovro Podgoršek Verzija dokumentacije: 1.1 Datum in kraj: 24. 7. 2013, Ljubljana Navodila za interaktivne naloge Bober Uvod 1.

More information

Navodila za uporabo izdelkov programske opreme Microsoft

Navodila za uporabo izdelkov programske opreme Microsoft Navodila za uporabo izdelkov programske opreme Microsoft Kazalo Navodila za konfiguracijo odjemalca za e-pošto Outlook Splošno 3 Nastavitev poštnega predala s protokolom MAPI v odjemalcu Outlook 2007 s

More information

IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK

IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK UDK621.3:(53+54+621 +66), ISSN0352-9045 Informacije MIDEM 39(2009)2, Ljubljana IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK Sasa Klampfer, Joze Mohorko, Zarko Cucej University

More information

Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje.

Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje. Delo z datotekami Razred File Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje. Deklaracija objekta File poteka tako: File ime = new File(pot_do_datoteke_in_ime);

More information

Prometno načrtovanje xdsl

Prometno načrtovanje xdsl Prometno načrtovanje xdsl 1 Kazalo Prometno načrtovanje naročniške zanke Prometno načrtovanje MSAN Izbira agregacijskega modela Izbira opreme 2 Potrebe po pasovni širini Zahtevana pasovna širina na uporabnika

More information

Prirejanje in preverjanje tipov

Prirejanje in preverjanje tipov Uvod v C# Drugi del Dedovanje Sintaksa Prirejanje in preverjanje tipov Kaste preverjenih tipov Prekrivanje metod Dinamično povezovanje (poenostavljeno) Skrivanje Dinamično povezovanje (s skrivanjem) Fragile

More information

How we calculate volume with the use of NTF method. Kako izračunamo volumen z uporabo metode NTF

How we calculate volume with the use of NTF method. Kako izračunamo volumen z uporabo metode NTF RMZ Materials and Geoenvironment, Vol. 55, No. 1, pp. 127-134, 2008 127 How we calculate volume with the use of NTF method Kako izračunamo volumen z uporabo metode NTF An e s Du r g u t o v i ć 1, Mi l

More information

Raspberry Pi 2 kot multimedijski predvajalnik z Ambilight tehnologijo

Raspberry Pi 2 kot multimedijski predvajalnik z Ambilight tehnologijo Inovative IT and Web services ProteusLab Raspberry Pi 2 kot multimedijski predvajalnik z Ambilight tehnologijo A. Slika 1: Izdelek Rpi2 + Ambilight Postojna, Maj 2015 1. Povzetek V projektni nalogi sem

More information

Navodila za namestitev in uporabo medprogramja HID ActivClient za Windows

Navodila za namestitev in uporabo medprogramja HID ActivClient za Windows Navodila za namestitev in uporabo medprogramja HID ActivClient za Windows Februar 2017 CREA plus d.o.o., www.creaplus.si, prodaja@creaplus.si 1 / 24 Kazalo 1. Programska oprema HID ActivClient... 3 1.1

More information

E R S Š G L J U B L J A N A Š O L S K O L E T O

E R S Š G L J U B L J A N A Š O L S K O L E T O Datotečni sistem E R S Š G L J U B L J A N A Š O L S K O L E T O 2 0 1 0 / 1 1 Vsebina Programska oprema Sistemska programska oprema Operacijski sistem Lupina (shell) Datotečni sistem Programska oprema

More information

UDF for volume calculation with the use of NTF method. Lastne Excel funkcije za izračun prostornin po NTF metodi

UDF for volume calculation with the use of NTF method. Lastne Excel funkcije za izračun prostornin po NTF metodi RMZ Materials and Geoenvironment, Vol. 54, No. 3, pp.419-425, 2007 419 UDF for volume calculation with the use of NTF method Lastne Excel funkcije za izračun prostornin po NTF metodi Mi l i v o j Vu l

More information

Q: Do You made a backup before upgrade? A: Only cowards make backups!

Q: Do You made a backup before upgrade? A: Only cowards make backups! Q: Do You made a backup before upgrade? You z malo - you A: Only cowards make backups! Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies.

More information

Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5

Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5 Univerza v Ljubljani Fakulteta za računalništvo in informatiko Roman Gorišek Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5 DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike

formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike Strojni vid pri tehnoloških meritvah formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike formati slike in branje slike slika je običajno

More information

BLUETOOTH KOMUNIKATOR ZA WINDOWS MOBILE 6.5

BLUETOOTH KOMUNIKATOR ZA WINDOWS MOBILE 6.5 Alen Rojko BLUETOOTH KOMUNIKATOR ZA WINDOWS MOBILE 6.5 Diplomsko delo Maribor, april 2013 BLUETOOTH KOMUNIKATOR ZA WINDOWS MOBILE 6.5 Diplomsko delo Študent(ka): Študijski program: Alen Rojko Visokošolski

More information

Transakcije v MariaDB/MySQL (transakcija A)

Transakcije v MariaDB/MySQL (transakcija A) Transakcije v MariaDB/MySQL (transakcija A) Pomožni elementi In [1]: # pyodbc import pyodbc try: cn1.close() except: pass # MariaDB/MySQL conn = "DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=localhost;DATABASE=sandbox;UID=tu

More information

SERVISI ZA ODDALJEN DOSTOP DO RAČUNALNIKOV

SERVISI ZA ODDALJEN DOSTOP DO RAČUNALNIKOV Fakulteta za elektrotehniko, računalništvo in informatiko Tadej Šetinc SERVISI ZA ODDALJEN DOSTOP DO RAČUNALNIKOV Diplomsko delo Maribor, Avgust 2015 SERVISI ZA ODDALJEN DOSTOP DO RAČUNALNIKOV Diplomsko

More information

Program za avtomatsko preverjanje algoritmov napisanih v programskem jeziku C++

Program za avtomatsko preverjanje algoritmov napisanih v programskem jeziku C++ Univerza v Ljubljani Fakulteta za računalništvo in informatiko Tadej Golobič Program za avtomatsko preverjanje algoritmov napisanih v programskem jeziku C++ DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI

More information

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA DIPLOMSKO DELO GREGOR IVANŠEK

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA DIPLOMSKO DELO GREGOR IVANŠEK UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA DIPLOMSKO DELO GREGOR IVANŠEK UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA Študijski program: Matematika in tehnika Prilagoditev odprtokodnega sistema Drupal za uporabo

More information

Primerjava orodij za razvoj mobilnih aplikacij

Primerjava orodij za razvoj mobilnih aplikacij UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Miloš Jovanov Primerjava orodij za razvoj mobilnih aplikacij DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO

More information

Vmesnik za vodenje sistema Lego Mindstorms v razvojnem okolju Siemens Step7

Vmesnik za vodenje sistema Lego Mindstorms v razvojnem okolju Siemens Step7 Univerza v Ljubljani Fakulteta za računalništvo in informatiko Martin Šimac Vmesnik za vodenje sistema Lego Mindstorms v razvojnem okolju Siemens Step7 DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

POSTAVITEV SPLETNEGA SISTEMA ZA PRIKAZ NAČRTA PROIZVODNJE

POSTAVITEV SPLETNEGA SISTEMA ZA PRIKAZ NAČRTA PROIZVODNJE UNIVERZA V LJUBLJANI FAKULTETA ZA ELEKTROTEHNIKO Aljaž Tomažič POSTAVITEV SPLETNEGA SISTEMA ZA PRIKAZ NAČRTA PROIZVODNJE DIPLOMSKO DELO VISOKOŠOLSKEGA STROKOVNEGA ŠTUDIJA PRVE STOPNJE Mentor: višji pred.

More information

Obravnava izjem (exception handling)

Obravnava izjem (exception handling) Obravnava izjem (exception handling) Ko umre programer Uvod Ne glede na to, kako dobro smo načrtovali nek program, je še vedno možnost, da lahko med izvajanjem pride do kakšnih napak. Dobro načrtovan program

More information

DB2 podatkovna baza v praksi

DB2 podatkovna baza v praksi DB2 podatkovna baza v praksi Aljoša Trivan, Mikropis holding d.o.o. aljosa.trivan@mikropis.si 2007 IBM Corporation Agenda Mikropis Splošno Fleksibilnost Vzdrževanje Backup SQL objekti in SQL stavki Novosti

More information

PREPREČEVANJE IZPADA IN ZAGOTAVLJANJE VARNOSTI JAVNIH RAČUNALNIŠKIH SISTEMOV

PREPREČEVANJE IZPADA IN ZAGOTAVLJANJE VARNOSTI JAVNIH RAČUNALNIŠKIH SISTEMOV UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Aljaž Bratkovič PREPREČEVANJE IZPADA IN ZAGOTAVLJANJE VARNOSTI JAVNIH RAČUNALNIŠKIH SISTEMOV DIPLOMSKO DELO VISOKOŠOLSKEGA STROKOVNEGA ŠTUDIJA

More information

APLIKACIJE ZA SOCIALNA

APLIKACIJE ZA SOCIALNA UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Boštjan Lotrič APLIKACIJE ZA SOCIALNA OMREŽJA DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor: doc. dr. Zoran Bosnić Ljubljana, 2011 Rezultati

More information

Specification and Implementation of a Light-Weight Internet Content Delivery Platform

Specification and Implementation of a Light-Weight Internet Content Delivery Platform University of Ljubljana Faculty of Computer and Information Science Marko Čeferin Specification and Implementation of a Light-Weight Internet Content Delivery Platform DIPLOMA THESIS First cycle professional

More information

Primerjava izvornega in hibridnega razvoja mobilne aplikacije

Primerjava izvornega in hibridnega razvoja mobilne aplikacije UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Luka Vidmar Primerjava izvornega in hibridnega razvoja mobilne aplikacije DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

Preregistracija 2013

Preregistracija 2013 Preregistracija 2013 Priprava dokumentov in slik za uporabo v spletni aplikaciji NZS December 2012 1 Preregistracija 2013 Kazalo: Fotografija osnovne informacije; Priprava fotografije; Dokumenti skeniranje

More information

Posodobitev adapterja Push2TV

Posodobitev adapterja Push2TV Posodobitev adapterja Push2TV 2 NETGEAR priporoča, da posodabljate adapter Push2TV, ker nove posodobitve lahko podpirajo še več brezžičnih prikaznih naprav. 1. S prenosnim računalnikom ali mobilno napravo

More information

Šolski center Novo mesto Srednja elektro šola in tehniška gimnazija Šegova ulica 112, 8000 Novo mesto. Maturitetna seminarska naloga

Šolski center Novo mesto Srednja elektro šola in tehniška gimnazija Šegova ulica 112, 8000 Novo mesto. Maturitetna seminarska naloga Šolski center Novo mesto Srednja elektro šola in tehniška gimnazija Šegova ulica 112, 8000 Novo mesto Maturitetna seminarska naloga Šolsko leto 2007/08 Avtor: Mentor: prof. Albert Zorko Novo mesto, 10.7.

More information

Sistemske zahteve za Saop icenter

Sistemske zahteve za Saop icenter Sistemske zahteve za Saop icenter Izdaja 27 080 13 20 info@saop.si www.saop.si 18.6.2018 Sistemske zahteve 2 Samostojna delovna postaja icenter je ERP sistem, ki zagotavlja popolno kontrolo nad vsemi poslovnimi

More information

Metode logičnega snovanja Programabilne logične naprave in VHDL. Miha Moškon

Metode logičnega snovanja Programabilne logične naprave in VHDL. Miha Moškon Metode logičnega snovanja Programabilne logične naprave in VHDL Miha Moškon Programabilne logične naprave Metode logičnega snovanja, 1. laboratorijska vaja 2 Programabilna logična vezja V času proizvodnje

More information

Arhitektura oblaka Upravljanje v oblaku Delovanje v oblaku Arhitekturni okvir računalništva v oblaku

Arhitektura oblaka Upravljanje v oblaku Delovanje v oblaku Arhitekturni okvir računalništva v oblaku 1 Predstavitev 2 Področja delovanja 3 GRC knjižnica 4 Primeri CAI in CCM Aplikacijska varnost 5 CCSK 6 Zaključek Globalna, neprofitna organizacija 23,000+ članov, 100 korporativnih članov, 50 odsekov Gradimo

More information

Interfacing with Raspberry Pi 3 Model B Updated: 9/19/17

Interfacing with Raspberry Pi 3 Model B Updated: 9/19/17 Interfacing with Raspberry Pi 3 Model B Updated: 9/19/17 A. Objectives 1. Learn about basics of Python programming 2. Learn how to use Python and Shell scripts to control GPIO ports on the Pi B. Time of

More information

Osnove programskega jezika C++

Osnove programskega jezika C++ Osnove programskega jezika C++ 1 O S N O V E P R O G R A M I R A N J A V C + + U P O R A B A P R O G R A M A CODE::B L O C K S programski stavek Nekaj osnovnih pojmov (1.) definicija, deklaracija, ukaz

More information

NAMESTITEV WINDOWS 7 OKOLJA Z UPORABO MICROSOFT WAIK ORODIJ

NAMESTITEV WINDOWS 7 OKOLJA Z UPORABO MICROSOFT WAIK ORODIJ Organizacija in management informacijskih sistemov NAMESTITEV WINDOWS 7 OKOLJA Z UPORABO MICROSOFT WAIK ORODIJ Mentor: dr. Branislav Šmitek Kandidat: Aleš Frelih Kranj, november 2012 ZAHVALA Zahvaljujem

More information

Andrej Jamšek. Namestitev programske opreme s poudarkom na tehnologiji MSI

Andrej Jamšek. Namestitev programske opreme s poudarkom na tehnologiji MSI UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Andrej Jamšek Namestitev programske opreme s poudarkom na tehnologiji MSI DIPLOMSKO DELO NA VISOKOŠOLSKEM STROKOVNEM ŠTUDIJU Mentor: izr.

More information

OMREŽNI UKAZI OS LINUX

OMREŽNI UKAZI OS LINUX Višja strokovna šola Velenje Informatika Murska Sobota Računalniške komunikacije in omrežja II OMREŽNI UKAZI OS LINUX Priročnik za laboratorijske vaje Druga popravljena in razširjena izdaja Pripravil:

More information

Twitter Bootstrap in razvoj spletnega repozitorija za Cacti

Twitter Bootstrap in razvoj spletnega repozitorija za Cacti Univerza v Ljubljani Fakulteta za računalništvo in informatiko Fakulteta za matematiko in fiziko Nejc Župec Twitter Bootstrap in razvoj spletnega repozitorija za Cacti DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI

More information

Spletno luščenje podatkov z uporabo Pythona in knjižnice BeautifulSoup

Spletno luščenje podatkov z uporabo Pythona in knjižnice BeautifulSoup UNIVERZA V LJUBLJANI NARAVOSLOVNOTEHNIŠKA FAKULTETA ODDELEK ZA TEKSTILSTVO, GRAFIKO IN OBLIKOVANJE Spletno luščenje podatkov z uporabo Pythona in knjižnice BeautifulSoup Seminarska naloga Ime in priimek:

More information

HITRI VODNIK ZA. nameščanje gonilnikov Nokia Connectivity Drivers

HITRI VODNIK ZA. nameščanje gonilnikov Nokia Connectivity Drivers HITRI VODNIK ZA nameščanje gonilnikov Nokia Connectivity Drivers Vsebina 1. Uvod...1 2. Kaj potrebujete...1 3. Nameščanje Gonilnikov Nokia Connectivity Cable Drivers...2 3.1 Pred namestitvijo...2 3.2 Nameščanje

More information

Osnovna informacijska znanja, Word, Osnove interneta in e-pošte GRADIVO ZA TEČAJ. Računalniška pismenost za odrasle

Osnovna informacijska znanja, Word, Osnove interneta in e-pošte GRADIVO ZA TEČAJ. Računalniška pismenost za odrasle Osnovna informacijska znanja, Word, Osnove interneta in e-pošte GRADIVO ZA TEČAJ Računalniška pismenost za odrasle Avtor: Dušan Brglez, mag. posl. inform Ptuj, december 2008 1 VSEBINA: TEMELJNA INFORMACIJSKA

More information

Oddaljen dostop do namiznega računalnika

Oddaljen dostop do namiznega računalnika UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Siniša Grubor Oddaljen dostop do namiznega računalnika DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN INFORMATIKA

More information

Calculation of volume with the use of NTF method. Izračun volumnov z uporabo NTF metode

Calculation of volume with the use of NTF method. Izračun volumnov z uporabo NTF metode RMZ - Materials and Geoenvironment, Vol. 53, No. 2, pp. 221-227, 2006 221 Calculation of volume with the use of NTF method Izračun volumnov z uporabo NTF metode Milivoj Vulić 1, Anes Durgutović 2 1 Faculty

More information

Reševanje težav. PTC Creo 4.0. Podlubnik 1b, 4220 Škofja Loka , Reševanje težav PTC Creo 4-1-

Reševanje težav. PTC Creo 4.0. Podlubnik 1b, 4220 Škofja Loka ,   Reševanje težav PTC Creo 4-1- Reševanje težav PTC Creo 4.0 Podlubnik 1b, 4220 Škofja Loka 04 50 62 300, info@scsl.si, www.scsl.si različica 4.4, 16. marec 2018 Reševanje težav PTC Creo 4-1- Reševanje težav Namestitev programa se ne

More information

Informatika v medijih

Informatika v medijih 3.1. Osnove operacijskih sistemov. Sistemska programska oprema. Hiter neumen stroj Računalniki: Strojna oprema (hardware) Omejene sposobnosti Znajo računati samo osnovne matematične operacije in logične

More information

Statistika 2 z računalniško analizo podatkov

Statistika 2 z računalniško analizo podatkov Statistika 2 z računalniško analizo podatkov Risanje grafov 1 V Statistične analize v SPSS-ju V.5 Risanje grafov V.5.1 Oblikovanje grafov V.5.2 Grafična predstavitev frekvenčne porazdelitve: histogram,

More information

ABBYY rešitve za prepoznavo in klasifikacijo dokumentov

ABBYY rešitve za prepoznavo in klasifikacijo dokumentov ABBYY rešitve za prepoznavo in klasifikacijo dokumentov preabbyy FlexiCapture 9.0. Overview. 1 doc: 10977 Lokalna prisotnost ABBYY: Moscow, Russia; Munich, Germany; Bracknell, UK; Kiev, Ukraine; Milpitas,

More information

A Generic Timing Receiver for Event-Driven Timing Systems

A Generic Timing Receiver for Event-Driven Timing Systems ELEKTROTEHNIŠKI VESTNIK 82(4): 205-211, 2015 ORIGINAL SCIENTIFIC PAPER A Generic Timing Receiver for Event-Driven Timing Systems Benjamin Ocepek Univerza v Ljubljani, Fakulteta za elektrotehniko, Tržaška

More information

Sistem za upravljanje zgradb

Sistem za upravljanje zgradb UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Andrej Kavrečič Sistem za upravljanje zgradb UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN INFORMATIKA Mentor: prof. dr. Saša

More information

Vgrajen sistem za avtomobilsko diagnostiko z vmesnikom Bluetooth

Vgrajen sistem za avtomobilsko diagnostiko z vmesnikom Bluetooth UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Robert Vurušič Vgrajen sistem za avtomobilsko diagnostiko z vmesnikom Bluetooth DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

Gooligum Electronics 2015

Gooligum Electronics 2015 The Wombat Prototyping Board for Raspberry Pi Operation and Software Guide This prototyping board is intended to make it easy to experiment and try out ideas for building electronic devices that connect

More information

Časovno omejevanje dostopa do interneta

Časovno omejevanje dostopa do interneta Univerza v Ljubljani Fakulteta za računalništvo in informatiko Edi Medvešček Časovno omejevanje dostopa do interneta DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN

More information

Ime in priimek: Kazalo

Ime in priimek: Kazalo Ime in priimek: Datum: Naloga: Multicast Kazalo Naloga... 1 1. Uvod... 1 1.1. IP multicast... 1 1.2. Protokol IGMP... 1 1.3. Unicast in multicast usmerjanje/posredovanje... 2 1.4. Ethernet multicast (IGMP

More information

Skriptni jezik lupine Bash

Skriptni jezik lupine Bash Robert Meolic meolic@uni mb.si Skriptni jezik lupine Bash interno gradivo za predmet VSO, 2006/07 1. LITERATURA Pri sestavljanju gradiva o skriptnem jeziku lupine Bash sem uporabljal internet in naslednji

More information

IZDELAVA SPLETNIH STRANI SIMON HORVAT ANITA URAN

IZDELAVA SPLETNIH STRANI SIMON HORVAT ANITA URAN IZDELAVA SPLETNIH STRANI SIMON HORVAT ANITA URAN Višješolski strokovni program: Informatika Učbenik: Izdelava spletnih strani Gradivo za 2. letnik Avtorja: Simon Horvat, univ. dipl. inţ. ŠOLSKI CENTER

More information

Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript

Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript Predavanje 2 Ponovitev Predavanje 1 Naloge Uvod v JavaScript Pravila Primeri Priprava na laboratorijske vaje Pregled orodij ldos.fe.uni-lj.si >študij

More information

Vsebina paketa. Navodila za namestitev brezžičnega usmerjevalnika z modemom ADSL2+ N150 DGN1000Bv3

Vsebina paketa. Navodila za namestitev brezžičnega usmerjevalnika z modemom ADSL2+ N150 DGN1000Bv3 Blagovne znamke NETGEAR, logotip NETGEAR in Connect with Innovation so blagovne znamke in/ ali registrirane blagovne znamke družbe NETGEAR, Inc. in/ali njenih povezanih družb v ZDA in/ali drugih državah.

More information

Postavitev in upravljanje zasebnega oblaka z uporabo Microsoft System Center 2012 R2 in Windows Azure Pack za ponudnike storitev

Postavitev in upravljanje zasebnega oblaka z uporabo Microsoft System Center 2012 R2 in Windows Azure Pack za ponudnike storitev UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Gašper Govek Postavitev in upravljanje zasebnega oblaka z uporabo Microsoft System Center 2012 R2 in Windows Azure Pack za ponudnike storitev

More information

OpenAT aplikacija za Wavecom GSM/GPRS modeme

OpenAT aplikacija za Wavecom GSM/GPRS modeme DGPS.DR.AT OpenAT aplikacija za Wavecom GSM/GPRS modeme Kratek opis in navodilo za uporabo Verzija: 090130 (2.10) DGPS.DR.AT je OpenAt aplikacija, ki omoča prenos DGPS / RTK korekcije preko GSM omrežja.

More information

Mx381/382 komunikacijski vmesnik P1

Mx381/382 komunikacijski vmesnik P1 Mx381/382 komunikacijski vmesnik P1 Document History Edition Date Description Author V0.1 4.06.2018 Informacija Davor Mikulić Portfolio manager V0.2 4.07.2018 Dodane karakteristike vmesnika Davor Mikulić

More information

Izdelava e-gradiva za robotiko v programskem okolju Bascom

Izdelava e-gradiva za robotiko v programskem okolju Bascom UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA Program: Matematika in tehnika Izdelava e-gradiva za robotiko v programskem okolju Bascom DIPLOMSKO DELO Mentor: dr. Slavko Kocijančič Kandidatka: Tanja Kozjek

More information

Vzpostavitev spletnega vmesnika za prikaz tenziomiografskih meritev

Vzpostavitev spletnega vmesnika za prikaz tenziomiografskih meritev UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Nejc Poljanšek Vzpostavitev spletnega vmesnika za prikaz tenziomiografskih meritev DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

PREDSTAVITEV DELOVANJA OPERACIJSKIH SISTEMOV V OKOLJU OSEBNIH RAČUNALNIKOV

PREDSTAVITEV DELOVANJA OPERACIJSKIH SISTEMOV V OKOLJU OSEBNIH RAČUNALNIKOV ICES VIŠJA STROKOVNA ŠOLA Program: Informatika PREDSTAVITEV DELOVANJA OPERACIJSKIH SISTEMOV V OKOLJU OSEBNIH RAČUNALNIKOV Mentor: mag. Miran Novak Lektorica: Ana Peklenik, prof. slov. Kandidat: Igor Majer

More information

TI C2000: Družina za vgrajene (embedded) aplikacije

TI C2000: Družina za vgrajene (embedded) aplikacije CPU MIPS RAM (words) ROM (words) Flash (words) BootROM (words) Event Manager CAP/QEP TIMER PM(CMP) ADC TIMER Resolution 12 # ofchan 16 Conv time McBSP EXMIF atch Dog SPI SCI (UART) CAN Volts (V) # I/O

More information

Lokacijske storitve na mobilnih napravah

Lokacijske storitve na mobilnih napravah UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Aleš Rosina Lokacijske storitve na mobilnih napravah DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor: doc. dr. Rok Rupnik Ljubljana, 2012

More information

DINAMIČNO DODELJEVANJE NAVIDEZNIH KRAJEVNIH OMREŽIJ V BREZŽIČNIH OMREŽJIH

DINAMIČNO DODELJEVANJE NAVIDEZNIH KRAJEVNIH OMREŽIJ V BREZŽIČNIH OMREŽJIH UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Adrijan Bradaschia DINAMIČNO DODELJEVANJE NAVIDEZNIH KRAJEVNIH OMREŽIJ V BREZŽIČNIH OMREŽJIH DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM

More information

Algoritmi in podatkovne strukture 2. Urejanje (sorting)

Algoritmi in podatkovne strukture 2. Urejanje (sorting) Algoritmi in podatkovne strukture 2 Urejanje (sorting) osnove, metode deli in vladaj, kopica Andrej Brodnik: Algoritmi in podatkovne strukture 2 / Urejanje (sorting) osnove, metode deli in vladaj, kopica

More information

INFORMACIJSKA PODPORA ZA NADZOR IN UPRAVLJANJE RAČUNALNIŠKIH OMREŽIJ

INFORMACIJSKA PODPORA ZA NADZOR IN UPRAVLJANJE RAČUNALNIŠKIH OMREŽIJ Domen Rogina INFORMACIJSKA PODPORA ZA NADZOR IN UPRAVLJANJE RAČUNALNIŠKIH OMREŽIJ Diplomsko delo Maribor, september 2013 INFORMACIJSKA PODPORA ZA NADZOR IN UPRAVLJANJE RAČUNALNIŠKIH OMREŽIJ Diplomsko delo

More information

Windows 10. Microsoft. brezmejna strast. Uporabniška navodila. ko tehnologija postane. Avtor. Mentorica

Windows 10. Microsoft. brezmejna strast. Uporabniška navodila. ko tehnologija postane. Avtor. Mentorica ko tehnologija postane brezmejna strast Microsoft Windows 10 Uporabniška navodila Avtor Leon Ritovšek, študent Ekonomsko-poslovne fakultete Maribor Kontakt: leon.ritovsek@student.um.si Mentorica dr. Simona

More information

Raspberry Pi NTP Clock Setup Guide

Raspberry Pi NTP Clock Setup Guide Raspberry Pi NTP Clock Setup Guide Several steps are involved in getting your Raspberry Pi to operate as a NTP Clock. To begin with, you must obtain a LCD Plate (www.adafruit.com) and build it. You must

More information

Kosovnica. Marko Obid. Kosovnica. Marko Obid

Kosovnica. Marko Obid. Kosovnica. Marko Obid PROGRAM ZA IZDELAVO TEHNIČNE DOKUMENTACIJE V CATIA-ji Zagon programa: Program je bil izdelan z namenom, da nam olajša: Izdelavo kosovnice, Izris risb (delavniške, sestavne) Vpis podatkov v glavo risbe

More information

Aleksander Berus Analiza ogrodja MonoGame za medplatformni razvoj iger na mobilnih platformah

Aleksander Berus Analiza ogrodja MonoGame za medplatformni razvoj iger na mobilnih platformah Univerza v Ljubljani Fakulteta za računalništvo in informatiko Aleksander Berus Analiza ogrodja MonoGame za medplatformni razvoj iger na mobilnih platformah DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor:

More information

Čitalnik kartic zdravstvenega zavarovanja GCR5500-Si. Navodila za namestitev v okolju Linux

Čitalnik kartic zdravstvenega zavarovanja GCR5500-Si. Navodila za namestitev v okolju Linux Čitalnik kartic zdravstvenega zavarovanja GCR5500-Si Navodila za namestitev v okolju Linux Čitalnik kartic zdravstvenega zavarovanja Gemalto GCR5500-Si Navodila za namestitev v okolju Linux CREA plus d.o.o.,

More information

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Dean Črnigoj. Izdelava odjemalca NFS za Windows DIPLOMSKO DELO

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Dean Črnigoj. Izdelava odjemalca NFS za Windows DIPLOMSKO DELO UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Dean Črnigoj Izdelava odjemalca NFS za Windows DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN INFORMATIKA

More information

Računalnik INFORMATIKA 1. LETNIK ŽILBERT TIVADAR

Računalnik INFORMATIKA 1. LETNIK ŽILBERT TIVADAR Računalnik INFORMATIKA 1. LETNIK ŽILBERT TIVADAR Kaj je računalnik? osrednji in najpomembnejši del informacijske tehnologije; pripomoček, ki olajša naše delo; računalnik nenehno ponavlja štiri opravila:

More information

Metodologija migracije iz Exchange v Office 365

Metodologija migracije iz Exchange v Office 365 UNIVERZA V LJUBLJANI F Grega Lausegger Metodologija migracije iz Exchange v Office 365 DIPLOMSKO DELO PRVE Ljubljana, 2018 UNIVERZA V LJUBLJANI F Grega Lausegger Metodologija migracije iz Exchange v Office

More information

Čitalnik kartic zdravstvenega zavarovanja GCR5500-Si. Navodila za namestitev v okolju Windows

Čitalnik kartic zdravstvenega zavarovanja GCR5500-Si. Navodila za namestitev v okolju Windows Čitalnik kartic zdravstvenega zavarovanja GCR5500-Si Navodila za namestitev v okolju Windows Čitalnik kartic zdravstvenega zavarovanja Gemalto GCR5500-Si Navodila za namestitev v okolju Windows CREA plus

More information