vgrajen modul za elektriČna tolkala

43
Fakulteta za elektrotehniko, računalništvo in informatiko Smetanova ulica 17 2000 Maribor, Slovenija Klemen Krajnc VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA Diplomsko delo Maribor, junij 2015

Upload: others

Post on 02-Nov-2021

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

Fakulteta za elektrotehniko, računalništvo in informatiko

Smetanova ulica 17 2000 Maribor, Slovenija

Klemen Krajnc

VGRAJEN MODUL ZA

ELEKTRIČNA TOLKALA

Diplomsko delo

Maribor, junij 2015

Page 2: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

VGRAJEN MODUL ZA

ELEKTRIČNA TOLKALA

Diplomsko delo

Študent: Klemen Krajnc

Študijski program: Univerzitetni študijski program

Elektrotehnika

Smer: Elektronika

Mentor: doc. dr. Iztok Kramberger

Somentor: asist. dr. Marko Kos

Lektorica: Mija Čuk, univ. dipl. spl. jez.

Page 3: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

I

Page 4: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

II

Zahvala Hvala mentorju doc. dr. Iztoku

Krambergerju, somentorju asist. dr. Marku

Kosu, Gregorju Nikoliću in Jerneju Ţenku

za pomoč pri izdelavi diplomskega dela.

Zahvaljujem se tudi doc. dr. Boštjanu

Vlaoviču za vse nasvete in nepogrešljivo

pomoč pri nastajanju izdelka.

Posebej bi se zahvalil svojim staršem,

dekletu in vsem prijateljem, ki so me

podpirali pri študiju.

Page 5: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

III

VGRAJEN MODUL ZA ELEKTRIČNA

TOLKALA

Ključne besede: Raspberry Pi, Arduino, Python, C++

UDK: 004.383.3(043.2)

Povzetek:

Diplomsko delo opisuje delovanje modula in prikazuje njegovo izdelavo z Raspberry Pi, na

katerem deluje program za delovanje modula. Serijsko je povezan z mikrokrmilnikom

Atmega8, s katerim zajemamo signal s senzorja, ga pretvorimo v digitalni signal in

pošljemo na Raspberry Pi. Tam predhodno izbrano zvočno datoteko prevajamo z SD-

kartice prek izhoda za slušalke. Nanj je vezan tudi LCD-prikazovalnik, na katerem sta

izpisana trenutno izbrana zvočna datoteka in nivo občutljivosti, ki ga nastavljamo na

mikrokrmilniku.

Page 6: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

IV

EMBEDDED MODULE FOR ELECTRONIC

DRUMS

Key words: Raspberry Pi, Arduino, Python, C++

UDK: 004.383.3(043.2)

Abstract:

The thesis describes the function of the module and shows it's production with the

Raspberry Pi, on which the program is written. It is connected through a serial connection

with the microcontroller Atmega8, which recieves the signal from the sensor, converts it to

a digital signal and sends it to the Raspberry Pi. The preselected sample, which is stored

on the SD card, is played through the headphones out connector. The LCD display is also

connected to the Raspberry Pi, which is displaying the currently selected sample and the

threshold that is selected with the microcontroller.

Page 7: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

V

Kazalo

1. UVOD ........................................................................................................................................ 1

2. PREGLED TEHNOLOGIJ ........................................................................................................ 2

2.1 Piezoelektrični senzor ........................................................................................................ 2

2.1.1 Piezoelektrični pojav .................................................................................................. 2

2.1.2 Lastnosti ..................................................................................................................... 2

2.1.3 Generiranje električnega naboja ................................................................................. 3

2.2 Analogno-digitalna pretvorba ............................................................................................ 4

2.3 Razvojna platforma ............................................................................................................ 5

2.3.1 Specifikacije ............................................................................................................... 5

2.3.2 Uporaba in delovanje ................................................................................................. 6

2.3.3 Samodejni zagon skripte ob vklopu modula .............................................................. 6

2.3.4 Povezava preko serijskega vodila UART ................................................................... 8

2.3.5 Python ...................................................................................................................... 12

2.3.6 C++ ........................................................................................................................... 13

3. ZASNOVA IN IZVEDBA VGRAJENEGA MODULA ......................................................... 14

3.1 Implementacija serijske povezave .................................................................................... 14

3.2 Programiranje mikrokrmilnika Atmega8 z Leonardom ................................................... 14

3.3 Programska oprema .......................................................................................................... 17

3.4 Vgrajena programska oprema .......................................................................................... 20

3.5 Izdelava modula ............................................................................................................... 24

3.5.1 Priprava tiskanine v programu Eagle ....................................................................... 24

3.6 Fizična izdelava ................................................................................................................ 25

4. MERITVE IN REZULTATI .................................................................................................... 27

5. SKLEP ...................................................................................................................................... 29

SEZNAM VIROV ............................................................................................................................ 30

Page 8: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

VI

Kazalo slik

Slika 2.1: Delovanje piezoelektričnega senzorja. ............................................................................... 2

Slika 2.2: Mehanska obremenitev in deformacija. ............................................................................. 3

Slika 2.3: Razmere v neobremenjenem(a) in obremenjenem (b) piezoelektričnem materialu........... 3

Slika 2.4: Napetostni odziv senzorja ob udarcu. ................................................................................ 4

Slika 2.5: Analogno-digitalna pretvorba. ........................................................................................... 4

Slika 2.6: Raspberry Pi. ...................................................................................................................... 5

Slika 2.7: Prikaz ukaza za samodejni zagon programa v skripti. ....................................................... 7

Slika 2.8: Mikrokrmilnik Atmega8 PDIP........................................................................................... 7

Slika 2.9: Uporabljene sponke na Atmega8. ...................................................................................... 8

Slika 2.10: UART povezava med napravama. ................................................................................... 9

Slika 2.11: 16×2 LCD prikazovalnik. .............................................................................................. 10

Slika 2.12: Priključitev LCD prikazovalnika na Raspberry Pi. ........................................................ 11

Slika 2.13: Čitalec SD kartic na USB. ............................................................................................. 12

Slika 3.1: Definiranje noţic na Leonardu. ........................................................................................ 15

Slika 3.2: Priprava Atmega8 za programiranje. ............................................................................... 15

Slika 3.3: SPI priključek................................................................................................................... 16

Slika 3.4: Povezava med Leonardom in Atmega8 na testni ploščici. .............................................. 16

Slika 3.5: Oštevilčenje priključnik sponk plošče Raspberry Pi. ....................................................... 18

Slika 3.6: Shema vezja. .................................................................................................................... 24

Slika 3.7: PCB pogled v programu Eagle. ....................................................................................... 25

Slika 3.8: Spodnja stran tiskanine. ................................................................................................... 25

Slika 3.9: Zgornja stran tiskanine. .................................................................................................... 26

Slika 3.10: Končni izgled modula .................................................................................................... 26

Slika 4.1: Napetostni pulz, ki ga proizvede senzor. ......................................................................... 27

Slika 4.2: Povečan prikaz napetostnega pulza, ki ga proizvede senzor. ........................................... 28

Slika 4.3: Prikaz zakasnitve zvoka ob udarcu na senzor. ................................................................. 28

Kazalo tabel

Tabela 2.1: Priključne sponke LCD prikazovalnika. ......................................................................... 9

Tabela 4.1: Prikaz porabe modula. ................................................................................................... 27

Page 9: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

VII

UPORABLJENE KRATICE

C++ (angl. C plus plus) – C plus plus

PC0 (angl. Port C 0) – vrata C 0

GND (angl. Ground) – zemeljski priključek

SDRAM (angl. Synchronous Dynamic Random-Access Memory) – sinhroni dinamični

bralno-pisalni pomnilnik

LED (angl. Light-Emitting Diode) – svetleča dioda

SD (angl. Secure Digital) – spominska kartica tipa SD

USB (angl. Universal Serial Bus) – univerzalno serijsko vodilo

GPIO (angl. General Purpose Input/Output) – splošno namenski priključek

RCA (angl. Radio Corporation of America) – kompozitni kabel za video

HDMI (angl. High-Definition Multimedia Interface) – priključek za zvočno in slikovno

vsebino

LAN (angl. Local Area Network) – lokalno omreţje

OS (angl. Operating System) – operacijski sistem

SRAM (angl. Static Random Access Memory) – statični bralno-pisalni pomnilnik

EEPROM (angl. Electrically Erasable Programmable Read-Only Memory) – električno

zbrisljivi programirljivi bralni pomnilnik

PDIP (angl. Plastic Dual In-line Package) – plastični dvovrstični čip

UART (angl. Universal Asynchronous Reciever/Transmitter) – univerzalni asinhron

sprejemnik/oddajnik

LCD (angl. Liquid-Cristal Display) – zaslon s tekočimi kristali

ICSP (angl. In Circuit Serial Programming) – metoda za programiranje mikrokrmilnikov

SPI (angl. Serial Peripheral Interface Bus) – standard za sinhrono serijsko povezavo

MISO (angl. Master In Slave Out) – priključek za serijsko povezavo

MOSI (angl. Master Out Slave In) – priključek za serijsko povezavo

Page 10: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

VIII

SCK (angl. Serial Clock) – urin signal za serijsko povezavo

IDE (angl. Integrated Developement Enviroment) – razvijalno okolje

ASCII (angl. American Standard Code for Information Interchange) – ameriški standardni

nabor za izmenjavo informacij

PCB (angl. Printed Circuit Board) – tiskano vezje

SMD (angl. Surface-Mount Device) – površinsko nameščena komponenta

Page 11: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

1

1. UVOD

V glasbenem svetu se vse več uporabljajo umetni zvoki (angl. samples), pa naj bodo to

zvoki akustičnih instrumentov ali elektronsko sprocesirani zvoki. Najbolj pogosta uporaba

teh je kot nadomestitev tolkal. Prednost tega je, da ne rabimo toliko različnih fizičnih

instrumentov, ampak samo eno napravo, t. i. »zvočni modul«, ki predvaja te zvoke, kadar

udarimo po senzorju, ki zazna udarec. Lahko se uporabljajo v studiih pri snemanju glasbe

ali v ţivo.

Najboljši primer uporabe je, če rabimo veliko različnih zvokov bobnov. V eni pesmi se ob

udarcu na elektronski boben, ki zaznava udarec, predvaja zvok bas bobna, v drugi pesmi pa

afriškega bobna.

Takšni moduli so na trgu ţe od začetka devetdesetih let in se dandanes razlikujejo med

seboj po številu funkcij, senzorjev, velikosti in kvaliteti zvočnih datotek, ki jih lahko

predvajajo, nekateri imajo zraven metronom, nanje se lahko priključi kateri koli

predvajalnik glasbe itd. Najbolj znani proizvajalci zvočnih modulov na svetu so: Roland,

Korg, Alesis, Yamaha ...

Izdelali smo svoj zvočni modul na platformi Raspberry Pi, ki predvaja predhodno izbrano

zvočno datoteko ob udarcu po elektronskem bobnu, ki deluje na principu piezoelektričnega

efekta. Programska koda je napisana v jeziku Python. Za zaznavanje udarcev, njihovo

pretvorbo iz analognih vrednosti v digitalne in moţnost nastavljanja občutljivosti pa smo

uporabili mikrokrmilnik Atmel Atmega8, katerega smo sprogramirali s pomočjo jezika

C++ v okolju Arduino. Raspberry Pi in mikrokrmilnik si izmenjujeta podatke preko

serijskega vodila, realiziranega z dodatkom za okolje Python, in sicer pySerial.

Page 12: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

2

2. PREGLED TEHNOLOGIJ

2.1 Piezoelektrični senzor

2.1.1 Piezoelektrični pojav

Nekateri kristali, kot so kvarti, imajo fizično lastnost, da se pod vplivom mehanske

napetosti poleg mehanske deformacije pojavi tudi električna napetost (Slika 2.1).

Piezoelektričen pojav je reverzibilen, to pomeni, da ob pritisku na kristal generira

električen naboj, če pa kristal priključimo na električno napetost, se kristal deformira. V

našem primeru bomo s silo delovali na senzor in kristal bo generiral električno napetost.

Beseda »piezo« izvira iz grške besede »piezein«, ki pomeni pritisniti. To lastnost sta prvič

znanstveno predstavila brata Jacques in Pierre Curie leta 1880.

2.1.2 Lastnosti

Kristal generira električni naboj, proporcionalen s silo, ki deluje nanj.

Kristal zdruţuje lastnosti vzmeti in električnega pretvornika.

Merjena sila generira signal neposredno.

Izhodni signal piezo kristala je linearen in brez histereze.

Piezo senzorji so kompaktni, robustni in visoko občutljivi.

Piezo senzorji so zelo togi, zato so deformacije v rangu mikrometrov.

Ponujajo široko merilno območje.

Piezo kristali imajo visoke lastne frekvence in so zato primerni za meritve procesov

pri visokih frekvencah.

Generirajo električni naboj, ki ga je teţje procesirati.

Slika 2.1: Delovanje piezoelektričnega senzorja.

Page 13: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

3

2.1.3 Generiranje električnega naboja

Ko s silo F delujemo na površino A, ustvarjamo mehansko napetost σ.

(2.1)

Mehanska obremenitev σ ima enoto [N/m2 = 1 Pa], kjer je N simbol za enoto sile

(Newton), osnovna enota obremenitve pa 1 Pa (Pascal). V praksi se izkaţe, da je 1 Pa zelo

majhna enota, saj so tipične obremenitve materialov v razredu megapascalov (MPa) in več.

Po običajnem dogovoru velja pri natezni obremenitvi T > 0, pri stisku pa T < 0.

Mehanska deformacija je definirana kot relativna sprememba dimenzije telesa zaradi

mehanske obremenitve.

(2.2)

Po običajnem dogovoru je pri nategu deformacija oz. raztezek pozitiven ( ) in

obratno, pri stisku je deformacija oz. skrček negativen ( ).

Slika 2.2: Mehanska obremenitev in deformacija.

Linijski integral polja E preko kristala podaja električno napetost V, ki se pojavi med

zgornjo in spodnjo površino na piezoelektričnem materialu zaradi obremenitve (Slika 2.3).

∫ (2.3)

Slika 2.3: Razmere v neobremenjenem (a) in

obremenjenem (b) piezoelektričnem materialu.

Page 14: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

4

Naš senzor generira napetost ob najmočnejših udarcih do 20 V enosmerne napetosti (Slika

2.4).

2.2 Analogno-digitalna pretvorba

Analogno-digitalna (v nadaljevanju A/D) pretvorba je postopek, s katerim analogno

veličino (električno napetost) pretvorimo v ustrezno digitalno vrednost.

A/D pretvornik kvantizira vhodno veličino, zato se pojavijo manjše napake.

Natančnost pretvorbe je odvisna od števila zajetih vzorcev ali resolucije. Večja kot je

resolucija, bolj natančno lahko prikaţemo analogno vrednost.

Slika 2.4: Napetostni odziv senzorja ob udarcu.

Slika 2.5: Analogno-digitalna pretvorba.

Page 15: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

5

(3.1)

V enačbi (3.1) je N število zajetih vzorcev in M resolucija v bitih.

V našem primeru smo uporabili čip Atmel – Atmega8, ki se nahaja tudi na razvijalni plošči

Arduino Leonardo (kasneje Leonardo). A/D pretvornik smo realizirali s programsko kodo,

napisano s programskim jezikom C++, ki pretvori analogni signal napetosti z 10-bitno

resolucijo v digitalni signal.

Pozitivni priključek senzorja smo vezali na priključek PC0 na čipu in negativni na

priključek GND. Vzporedno smo vezali upor z vrednostjo 10 MΩ.

2.3 Razvojna platforma

Raspberry Pi je računalnik velikosti bančne kartice. Nanj lahko priključimo monitor,

tipkovnico in miško in ga uporabimo za pisanje, gledanje multimedijskih vsebin, igranje

igric in programiranje. Bil je razvit v Angliji pri Raspberry Pi Foundation z namenom

učenja osnovnega programiranja v šolah. Obstajajo tri izvedbe, označili so jih z oznakami

model A, model B in model B+. V diplomskem delu je bil uporabljen model B.

2.3.1 Specifikacije

Raspberry Pi model B je velikosti 85 × 56 mm in tehta 45 g. Poganja ga procesor s 700

MHz ARM1176JZF-S in ima 512 MB pomnilniškega prostora (SDRAM). Na zgornji

strani so tudi LED-diode, ki prikazujejo pravilno delovanje vezja. Napajamo ga z

napetostjo 5 V in 1 A toka.

Slika 2.6: Raspberry Pi.

Page 16: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

6

Za priključitev na ostale naprave ima naslednje priključke:

vhod za (SD) pomnilniško kartico,

napajalni priključek (micro USB),

26 (GPIO) priključkov,

kompozitni (RCA) video priključek,

priključek HDMI za prenos slike in zvoka,

2 USB-priključka,

internetni priključek (LAN),

priključek za zvok.

2.3.2 Uporaba in delovanje

Za njegovo uporabo ga je treba priključiti na monitor preko HDMI-priključka ali

kompozitnega priključka, na tipkovnico in miško preko USB-priključka, na internetno

povezavo in preko avdiopriključka za zvok (če za zvok ne uporabljamo HDMI-priključka).

Vanj je treba tudi vstaviti pomnilniško kartico, ki vsebuje operacijski sistem, saj brez nje

Raspberry Pi ne deluje. Na Raspberry Pi, uporabljenem v diplomskem delu, je nameščena

različica OS Linux Debian, imenovana Raspbian.

Ker smo za avdio izhod uporabili analogni priključek in ne HDMI, smo morali to definirati

v ukazni vrstici z ukazom: amixer cset numid = 3 1.

Zadnja številka definira izhod. Za analogni izhod je 1 in za HDMI je 2.

2.3.3 Samodejni zagon skripte ob vklopu modula

Ob zagonu se avtomatsko zaţene program, ki je napisan za delovanje našega modula, zato

je bilo treba napisati skripto.

V terminal napišemo ukaz: sudo nano /etc/rc.local, nato se nam odpre skripta, v kateri so

napisane poti do programov, ki se naj zaţenejo ob zagonu Raspberry Pi. Na koncu dodamo

pot do našega programa, shranimo in ponovno zaţenemo z ukazom: sudo reboot.

Page 17: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

7

Atmega8 je 8-bitni mikrokrmilnik, ki porabi malo moči in deluje na AVR-arhitekturi.

Vsebuje 8 kB programirljivega flash spomina, 1 kB SRAM-a, 512B EEPROM in 10-bitno

A/D pretvorbo. Deluje na frekvenci 16 Mhz in ima 28 noţic, od tega je 23 programirljivih

vhodov/izhodov. Napajalna napetost je med 2,7 in 5,5 V. Programska koda je napisana v

jeziku C++ v okolju Arudino.

Izbrali smo ga, ker je enostavnejši za programiranje in nam njegove sposobnosti ter število

vhodov in izhodov popolnoma zadostujejo.

Slika 2.8: Mikrokrmilnik Atmega8 PDIP.

Slika 2.7: Prikaz ukaza za samodejni zagon programa v skripti.

Page 18: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

8

Razvijati smo začeli na razvijalni plošči Leonardo, ki smo jo uporabili za testiranje, preden

smo izdelali svojo tiskano vezje z mikrokrmilnikom Atmega8 in napisali kodo v

programskem jeziku C++.

S pomočjo kode smo realizirali 10-bitno A/D pretvorbo vhodnega signala, vzpostavili

komunikacijo preko serijske povezave z Raspberry Pi in definirali funkcije tipk za

nastavljanje nivoja vhodnega signala.

Na mikrokrmilniku smo uporabili sponke za napajanje in maso, reset, dve sponki za tipki,

dve sponki za serijsko povezavo, dve sponki za priključitev oscilatorja 16 MHz in za

senzor (Slika 5.2).

Slika 2.9: Uporabljene sponke na Atmega8.

2.3.4 Povezava preko serijskega vodila UART

Da lahko dva različna čipa z različnimi funkcijami delujeta kot eno, je potrebna

komunikacija med njima. To smo realizirali preko serijskega vodila s protokolom UART.

UART pošlje zloge informacije kot samostojne bite drugi napravi, kjer drugi UART

ponovno sestavi bite v zloge. Mi smo uporabljali asinhrone prenose, kjer napravi nista v

stalni sinhronizaciji z urinim signalom, ampak samo takrat, ko pošiljatelj hoče poslati

informacijo prejemniku, katera se začne z začetnim bitom, ki pove prejemniku, da se

morata njuna urina signala sinhronizirati. Prenos se konča, ko prejemnik prejme končni bit.

Preko vodila lahko pošljemo največ 8 bitov informacij naenkrat.

Page 19: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

9

Fizično poveţemo napravi tako, da signal Tx ene naprave poveţemo na signal Rx druge

naprave in obratno. A ker Raspberry Pi deluje na 3,3 V in Atmega8 na 5 V, smo morali

uporabiti napetostni delilnik, ko Atmega, ki ima večjo napetost, pošilja podatke. V obratno

smer pa ni teţav (Slika 5.3).

Slika 2.10: Povezava UART med napravama.

Za prikazovanje pozdravnega sporočila, imena zvočne datoteke in občutljivosti vhodnega

signala smo uporabili dvovrstični LCD-prikazovalnik, s katerim lahko v vsaki vrsti

prikaţemo 16 znakov, za delovanje potrebuje napajalno napetost +5 V in ima 16

priključnih sponk.

Tabela 2.1: Priključne sponke LCD-prikazovalnika.

Številka sponke Simbol Funkcija

1 Vss GND

2 Vdd +5 V

3 V0 Nastavitev kontrasta

4 RS Signal za izbiro registra

5 R/W Bralno/pisalni signal

6 E Omogočeni signal

7 DB0 Podatkovno vodilo

8 DB1 Podatkovno vodilo

9 DB2 Podatkovno vodilo

10 DB3 Podatkovno vodilo

11 DB4 Podatkovno vodilo

12 DB5 Podatkovno vodilo

13 DB6 Podatkovno vodilo

14 DB7 Podatkovno vodilo

15 A/Vee + 4,2 V za LED

16 K Napajanje za osvetlitev

Page 20: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

10

LCD-prikazovalnik smo priključili na Raspberry Pi, ki ob zagonu inicializira. Ko je

program naloţen, se za dve sekundi prikaţe pozdravno besedilo »Hello«, nato pa ime

zvočne datoteke in nivo občutljivosti, ki je ob vsakem zagonu 200 (Slika 6.1). Ko

pritisnemo tipko za izhod iz programa, se na prikazovalniku za dve sekundi prikaţe

sporočilo za konec programa »BYE BYE«.

Slika 2.11: LCD-prikazovalnik 16 × 2.

Za prikaz besedila na zaslonu je bilo treba v programski kodi na Raspberry Pi definirati

pozicijo, kjer se bodo črke začele. To smo napravili z ukazom:

lcd_string (»naše besedilo«,stil)

Stil je število od 1 do 3 in ta števila predstavljajo:

1 = pozicija levo,

2 = center pozicija,

3 = pozicija desno.

V našem primeru, ker smo ţeleli, da se pozdravno sporočilo izpiše na sredini, izgleda ukaz

takole:

lcd_string(»Hello«,2)

Page 21: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

11

Slika 2.12: Priključitev LCD-prikazovalnika na Raspberry Pi.

Zvočne datoteke, ki se predvajajo ob udarcu, so shranjene na zunanji SD-kartici, ki jo

vstavimo v bralnik, ki je priključen preko vhoda USB 2.0 na Raspberry Pi. Bralnik ima

prenos podatkov do 480 Mbps.

Tako lahko vsak uporabnik vstavi pred zagonom modula svojo SD-kartico z drugačnimi

datotekami.

Datoteke morajo biti v izvorni mapi, njihovo ime ne sme biti daljše od 12 znakov, da

skupaj s končnico, ki je dolga 4 znake, zavzamejo zgornjo vrstico prikazovalnika. Podprt

datotečni format je wav in 16-bitna resolucija glasbene datoteke.

Bralnik je bilo treba »mountati« kot zunanji disk, da datoteke vedno beremo iz iste mape,

ki je določena v kodi programa. Program prebere vse datoteke s končnico .wav in jih doda

na seznam zvokov, ki bodo na razpolago med izvajanjem programa.

Page 22: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

12

Slika 2.13: Čitalec SD-kartic na USB.

2.3.5 Python

Python je objektno orientiran visoko-nivojski programski jezik, ki ga je razvilo podjetje

Python Software Foundation. Je brezplačen in deluje na več operacijskih sistemih, kot so

Linux, OS X in Windows. Njegova filozofija kode je zasnovana tako, da lahko uporabnik z

manj vrsticami opiše delovanje programa kot v ostalih programskih jezikih, kot so C++ in

Java.

Na Raspberry Pi smo opisali delovanje programa s programskim jezikom Python v okolju

IDLE, ki je ţe bil nameščen na Raspberry Pi.

Uporabljene knjiţnice:

Serial – za serijsko povezavo z Atmega8,

Pygame – za predvajanje zvočnih datotek,

Sys – za pisanje na zaslon, ko smo v programu. S tem smo preverjali, ali se

določene funkcije izvršijo ali ne in kje smo v programu,

Os – za spreminjanje privzete poti v poljubno, s katere naj bere naše zvočne

datoteke,

Fnmatch – za iskanje datotek v mapi z določeno končnico,

RPi.GPIO – za kontroliranje GPIO-sponk,

Time – za ustavljanje programa za določeno število sekund,

LCD – za prikazovanje informacij na LCD-prikazovalniku.

Page 23: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

13

2.3.6 C++

C++ je objektno orientiran programski jezik, ki ga je razvil Bjarne Stroustrup in je

razširitev programskega jezika C. Velja za srednje nivojski jezik, saj povzema tako niţji

kot tudi visoki nivo programiranja. Je eden izmed bolj priljubljenih jezikov in z njim lahko

izvajamo več različnih operacij, kot so primerjava, aritmetične in logične operacije itd.

V diplomskem delu smo za mikrokrmilnik Atmega8 napisali programsko kodo z jezikom

C++. Programirali smo v programu Arduino IDE, s katerim smo tudi naloţili program na

naš mikrokontroler.

V okolju Arduino je struktura programa sestavljena iz funkcij »setup()« in »loop()«:

funkcija Setup() se izvrši enkrat na začetku programa. Uporabimo jo lahko za vpis

spremenljivk, incializacijo serijske povezave, nastavimo način za priključne sponke

itd.;

funkcija Loop() pa je namenjena programski kodi, ki opisuje delovanje programa.

Ta znotraj zanke neprestano kroţi in se izvaja.

Page 24: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

14

3. ZASNOVA IN IZVEDBA VGRAJENEGA MODULA

3.1 Implementacija serijske povezave

Ko se naš program zaţene, Raspberry Pi po serijskem vodilu pošlje mikrokrmilniku črko

»H«, s tem mikrokrmilnik ve, da smo na začetku programa, in pošlje nazaj nivo

občutljivosti vhodnega signala, ki se izpiše na LCD-prikazovalniku. Raspberry Pi kot tudi

mikrokrmilnik neprestano preverjata serijsko vodilo, ali je druga naprava kaj poslala. Na

mikrokrmilnik sta povezani tudi dve tipki, s katerima spreminjamo nivo občutljivosti. Ko

je katera koli od teh dveh tipk pritisnjena, se spremeni nivo občutljivosti in mikrokrmilnik

na začetku niza pošlje v Raspberry Pi črko »T« in tako on ve, da gre za pritisnjeno, za njo

pa sledi vrednost nivoja, ki ga nato prikaţe na prikazovalniku.

Če na začetku niza ni črke »T«, pomeni, da je bil sproţen senzor in Raspberry Pi predvaja

zvok izbrane zvočne datoteke. Baudrate smo nastavili na 115.200 bit/s za hitrejšo

komunikacijo.

3.2 Programiranje mikrokrmilnika Atmega8 z Leonardom

Ker hočemo izdelati svojo tiskanino, ki bo vsebovala tipke, LCD-zaslon in se popolnoma

prilagajala na Raspberry Pi, je treba nanjo pritrditi tudi mikrokrmilnik. V našem primeru

Atmega8, ki na začetku nima naloţene nobene programske kode. Zato ga je treba

sprogramirati, da bo vezje delovalo tako, kot z Arduinom med testiranjem.

Najprej je bilo treba Leonarda pripraviti, da bomo lahko z njim sprogramirali Atmega8. V

okolju Arduino smo odprli skico z imenom ArduinoISP in jo preuredili tako, da smo reset

linijo spremenili s »SS« na noţico 10 in LED-diodo, ki bi jo lahko povezali na noţico 9,

spremenili na noţico 13, ker ima Arduino na tej noţici ţe vgrajeno LED-diodo (Slika 5.4).

To skico smo poimenovali LeonardoISP.

Page 25: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

15

Slika 3.1: Definiranje noţic na Leonardu.

Skico LeonardoISP smo naloţili na Leonarda, ki je sedaj v vlogi programatorja. Ko je

skica uspešno naloţena, začne LED-dioda na 13. noţici utripati v obliki srčnega pulza.

Nato pripravimo Atmega8 za programiranje. Nanj je treba priključiti napajanje na noţicah

7 in 20, maso na 8 in 22, 16 Mhz kristal na 9 in 10 z vezavo dveh kondenzatorjev z 22 pF

proti masi in upor »pull-up« z 10 k na sponko reset, da se izognemo teţavam z

resetiranjem mikrokrmilnika (Slika 5.5).

Slika 3.2: Priprava Atmega8 za programiranje.

Page 26: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

16

Sedaj nanj poveţemo naš programator preko ICSP-protokola, ki je namenjen za

programiranje mikrokrmilnikov. Leonardo ima te priključke na posebnih šestih noţicah

(Slika 5.6), s katerimi s pomočjo SPI-vodila sprogramiramo naš mikrokrmilnik.

Slika 3.3: SPI-priključek.

Poleg napajanja in mase je treba povezati še naslednje povezave:

Slika 3.4: Povezava med Leonardom in Atmega8 na testni ploščici.

Atmega8:

RX – noţica 2

TX – noţica 3

MISO – noţica 18

MOSI – noţica 17

SCK – noţica 19

RESET – noţica 1

Arduino Leonardo:

RX – digitalna noţica 0

TX – digitalna noţica 1

MISO – ICSP-noţica 1

MOSI – ICSP-noţica 4

SCK – ICSP-noţica 3

RESET – digitalna noţica 10

Page 27: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

17

Ker je naš mikrokrmilnik prazen in ker nalagamo nanj kodo iz okolja Arduino in ne

navadne datoteke .hex, je treba nanj predhodno naloţiti nalagalnik. To je v bistvu del kode,

s pomočjo katere mikrokrmilnik razume kodo programa iz okolja Arduino, in ne

potrebujemo zunanjega programatorja. Nalagalnik zasede na Atmega8 pribliţno 1 kB

»flash« spomina.

Iz menija orodja v okolju Arduino IDE pod programer izberemo Arduino as ISP

(Leonardo) in izberemo posodobi nalagalnik. S tem smo naloţili nalagalnik na naš

mikrokrmilnik. Nato izberemo našo kodo, ki jo ţelimo naloţiti na Atmega8, in iz menija

datoteka izberemo opcijo naloţi s programatorjem. Ko se nalaganje konča, smo uspešno

naloţili program na mikrokrmilnik.

3.3 Programska oprema

Na začetku programa smo določili osnovno mapo, s katere bo program bral datoteke, ki so

shranjene na SD-kartici. Inicializirali smo pygame mixer in s tem nastavili parametre za

naše zvočne datoteke. Funkcija init je sestavljena iz naslednjih parametrov:

init (hitrost vzorčenja, bitna resolucija, število kanalov, pomnilnik)

Hitrost vzorčenja smo nastavili na 44.100 Hz, saj je večina zvočnih datotek tako posneta.

Bitno resolucijo smo izbrali 16 in s tem omejili predvajanje 24- oz. 32-bitnih datotek.

Izbrali smo 2 kanala, da lahko predvajamo tudi stereo datoteke.

Pomnilnik nadzira število notranjih vzorčenj, ki jih uporablja mikser. Manjše kot je to

število, manjša je zakasnitev predvajanja. Število mora biti rezultat potence 2n.

Nato smo določili povezavo tipk na priključne sponke Raspberry Pi. Tipke smo

poimenovali in uporabili številke, ki so zapisane na plošči in si sledijo zaporedno od 1 do

26 (Slika 7.1). To smo definirali z ukazom GPIO.setmode in izbrali gpio.board. Te sponke

smo definirali kot vhodne, saj sprejemajo informacijo, ali je tipka pritisnjena ali ne.

Page 28: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

18

Slika 3.5: Oštevilčenje priključnih sponk plošče Raspberry Pi.

Ustvarili smo seznam, v katerega se bodo shranjevale zvočne datoteke, in ga poimenovali

»L«. Spremenljivki »i« in »x« smo inicializirali na 0. »i« nam bo predstavljala zaporedno

številko skladbe, »x« pa končno število vseh skladb v mapi, s katero bomo preverjali, ali

smo na koncu seznama ali ne.

Nato smo napravili zanko, s katero beremo datoteke iz mape, ki smo jo določili za osnovno

na začetku programa. Zanka pregleda datoteke, ki so na SD-kartici, in doda na seznam

tiste, ki imajo končnico ».wav«.

V naslednji zanki pa preštejemo vse datoteke, ki so shranjene v seznamu, da izvemo število

datotek. To število bomo kasneje uporabili za preverjanje ali smo na koncu seznama ali ne.

Na začetku izvajanja programa se v spremenljivko »f« shrani prva skladba na seznamu. V

spremenljivko »bum« pa shranimo nov objekt iz razreda »Sound«, ki ga bomo kasneje

uporabili za predvajanje.

Page 29: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

19

Inicializiramo serijsko povezavo med Atmega8 in Raspberry Pi z razredom Serial.

Baudrate smo nastavili na 115.200 bit/s za hitrejšo komunikacijo. Parameter timeout smo

nastavili na nič sekund, saj ţelimo serijski port neprestano preverjati.

Ko se program zaţene, se izpiše pozdravno besedilo na LCD-zaslonu, počakamo 2 sekundi

in nato se izpiše v zgornjo vrstico ime zvočne datoteke. Po serijskem vodilu pa Raspberry

Pi pošlje znak »H« mikrokrmilniku Atmega8 in mu s tem sporoči, da se je program zagnal

in mu Atmega8 pošlje nazaj nivo občutljivosti, ki ga Raspberry Pi izpiše v drugo vrstico

LCD-prikazovalnika.

Napravili smo neskončno zanko, da program neprestano preverja, ali je senzor zaznal

udarec ali smo spremenili nivo občutljivosti ali pa je bila pritisnjena katera tipka. Na

vodilu beremo največ 5 zlogov zaporedoma, saj jih več nikoli ne prejmemo.

Na začetku zanke se shrani trenutno izbrana zvočna datoteka v spremenljivko »bum«, nato

pa se preverja, ali je bilo kaj poslano preko serijskega vodila s strani mikrokrmilnika

Atmega8 in kaj je bilo. Če je bilo kaj poslano, potem preverimo prvi zlog, ali je enak

desetiško 84, kar pomeni ASCII znak »T«. Ta znak pošljemo na Raspberry Pi vedno, ko na

mikrokrmilniku pritisnemo tipki za spreminjanje nivoja občutljivosti. Temu znaku nato

sledi nivo občutljivosti, ki se izpiše na zaslon. Tako ločimo, ali gre za udarec ali za

spremembo nivoja občutljivosti. Če prvi zlog ni enak znaku »T«, potem je šlo za udarec in

program predvaja trenutno izbrano zvočno datoteko.

V tem delu kode preverjamo, ali je bila pritisnjena tipka za izbiro prejšnje zvočne datoteke.

Ker imamo datoteke shranjene v seznamu in če pridemo do konca seznama, se moramo

vrniti na začetek, da se izpiše zopet prva datoteka. To smo napravili na sledeč način:

spremenljivka »i« nam predstavlja zaporedno številko datoteke, »x« pa število vseh

datotek. Ko je tipka pritisnjena, najprej preverimo, če smo na začetku seznama. Če smo, se

Page 30: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

20

v »i« shrani število vseh datotek, ker pa je to število za eno večje od zadnje zaporedne

številke, ker smo začeli z nič, se za eno še zmanjša in v »i« se shrani zaporedno število

zadnje datoteke.

Za izbiro naslednje zvočne datoteke se koda razlikuje samo v imenu tipke in da preverjamo

na seznamu, ali smo ţe na koncu, in da skočimo nazaj na začetek.

Spodnji del kode ob pritisku na tipko ustavi program za 200 milisekund, da se signal

»izniha«, in s tem preprečimo večkratno neţeleno proţenje.

Na koncu še preverimo, ali je bila pritisnjena tipka za izhod iz programa. To smo naredili

zato, da ko ne ţelimo več uporabljati programa, lahko z Raspberry Pi nadaljujemo v

normalnem načinu.

Če je bila tipka pritisnjena, potem pobrišemo prvo vrstico LCD-prikazovalnika in v drugo

na sredino izpišemo »BYE BYE«. Nato počakamo 2 sekundi in pobrišemo še drugo vrstico

ter zaključimo program.

3.4 Vgrajena programska oprema

Na začetku programa smo definirali vse spremenljivke, ki jih bomo kasneje v programu

potrebovali:

spremenljivka »Senzor« bo priključena na analogni vhod 0, tipki za spreminjanje

nivoja občutljivosti, ki smo ju poimenovali »btnUP« in »btnDWN«, pa bosta

priključeni na digitalna vhoda 3 in 2;

v spremenljivko »sensorValue« se shrani vrednost, ki jo zajamemo na analogni

noţici 0;

Page 31: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

21

spremenljivki za tipki »ValueBTNup« in »ValueBTNdwn« smo inicializirali na 0

in se bo njuna vrednost ob pritisku na tipko spremenila;

začetno vrednost spremenljivke »Trashold« smo nastavili na 200. Z njo

spreminjamo nivo občutljivosti;

s spremenljivkama »countu« in »countd« preverjamo, ali je tipka nepritisnjena, če

jo dlje drţimo in nato spustimo;

v spremenljivko »firstTime« se shrani čas trajanja programa. To uporabimo za

preverjanje, kako dolgo je tipka pritisnjena;

za preverjanje vsebine serijskega vodila smo ustvarili polje znakov »incomingBy«,

ki je velikosti ena in je prazen. Nanj se shrani vsebina, ki jo pošlje Raspberry Pi

mikrokrmilniku.

V funkciji »Setup()« smo s funkcijo »Serial.begin()«, ki ima za parameter hitrost

podatkovne povezave z enoto [bit/s], definirali serijsko povezavo in nastavili enako hitrost,

kot na Raspberry Pi.

Definirali smo tudi digitalne sponke, kamor so priključene tipke. Z ukazom »INPUT« smo

določili, da bodo vhodnega tipa.

V funkciji »loop()« se program neskončno ponavlja od vrha navzdol. V prvi vrstici kode

preverjamo, ali je bilo kaj poslano s strani Raspberry Pi. Če je bilo, preberemo zloge s

funkcijo »Serial.readBytes()«. Sintaksa te funkcije je:

Serial.readBytes(pomnilnik, velikost);

Pomnilnik je spremenljivka, v katero se naj shrani prejet zlog. V našem primeru je to

spremenljivka »incomingBy«. Velikost pomeni velikost polja te spremenljivke, ki je ena,

Page 32: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

22

saj bomo preverjali samo prvi prejeti zlog. Primerjamo ga z znakom »H« in če se ujema,

pošljemo nazaj na Raspberry Pi nivo občutljivosti. To se zgodi vsakič ob zagonu našega

modula.

Nato preverjamo, ali je senzor udarec zaznal. Če je vrednost senzorja višja od nivoja

občutljivosti, potem pošljemo digitalno vrednost, ki je med 0 in 1023 na Raspberry Pi, in s

tem predvajamo zvočno datoteko. Nato program zaustavimo za 40 milisekund, da signal na

senzorju preneha nihati, da ne pride do ponovnega nehotenega proţenja.

V funkciji »loop()« tudi nenehno preverjamo, ali je bila pritisnjena tipka za povečanje ali

zmanjšanje nivoja občutljivosti. To preverjamo tako, da spremljamo nivo napetosti na

sponki, na katero je vezana tipka. Če se stanje sponke spremeni iz nizkega v visoko,

pomeni, da je bila tipka pritisnjena in nivo se spremeni za eno vrednost. Maksimalna

vrednost je 300 in najmanjša 1. Kar pomeni, da je pri vrednosti 300 senzor manj občutljiv

in potrebuje visok impulz, da ga mikrokrmilnik zazna. Pri vrednosti 1 pa je senzor zelo

občutljiv in ga lahko sproţi ţe majhen tresljaj.

Če drţimo tipko pritisnjeno, se nam vrednosti povečujejo oz. zniţujejo. Da se vrednost

prestavi, traja 200 milisekund. Ker pa bi trajalo predolgo, da pridemo z vrednosti 300 na 1,

smo napisali program tako, da dlje kot je pritisnjena tipka, hitreje se vrednosti prestavljajo,

kar pomeni, da se čas med njimi manjša.

Page 33: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

23

Če drţimo tipko pritisnjeno dlje kot 200 milisekund in manj kot 2 sekundi, se nam čas med

spremembo vrednosti zmanjša na 80 milisekund.

Če pa drţimo dlje kot 2 sekundi, se čas med spremembo vrednosti zmanjša na 20

milisekund. Ko tipko spustimo, se vrednost spremenljivke »count« spremeni na 0 in znova

je čas med spremembo vrednosti 200 milisekund.

Page 34: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

24

3.5 Izdelava modula

3.5.1 Priprava tiskanine v programu Eagle

Za izdelavo tiskanega vezja je bilo najprej treba za vezje, zvezano na testni plošči, narisati

shemo vezja v programu Eagle. Ustvarili smo nov projekt in dodali shematsko datoteko, v

katero smo dodajali elemente. Začeli smo z ţenskim »headerjem« velikosti 2 × 13, ki pride

povezan na Raspberry Pi, saj iz njega dobimo obe napetosti, +3,3 V in +5 V ter maso. Tudi

večina signalnih povezav je povezanih na ta »header«. Nanj smo povezali 3 tipke s »pull-

up« upori vrednosti 3,3 kΩ za prestavljanje zvočnih datotek in izhod iz programa. Dodali

smo tudi ţenski »header« velikosti 1 × 16 za LCD-prikazovalnik. Nanj je povezan trimer z

10 kΩ za nastavljanje intenzitete prikazovalnika.

Nato smo dodali mikrokrmilnik Atmega8 in ga povezali s headerjem, ki je povezan na

Raspberry Pi. Na mikrokrmilnik smo povezali priključek za senzor, ki sprejme ¼ »mono

phone« vtič. Na pozitivni priključek proti masi smo povezali upor z 10 MΩ za krajše

»iznihanje« vhodnega signala. Povezali smo tudi 2 tipki z upori »pull-down« vrednosti 10

kΩ za spreminjanje vrednosti nivoja občutljivosti. Na priključno sponko reset smo dodali

upor »pull-up« vrednosti 10 kΩ, da se izognemo teţavam z resetiranjem mikrokrmilnika.

Dodali smo še kondenzatorje vrednosti 100 nF v kombinaciji z 10 uF za glajenje napetosti

na tiskanini.

Slika 3.6: Shema vezja.

Nato smo iz sheme pretvorili vezje v PCB-pogled, v katerem smo najprej definirali

velikost plošče za tiskano vezje, nato pa postavili vse komponente na ţeleno mesto. Nato

smo začeli povezovati komponente med sabo. Najprej smo povezali napajalne povezave in

maso, ki so široke 16 mils, in nato signalne, ki so široke od 16 do 10 mils, odvisno od

prostora na tiskanini.

Page 35: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

25

Slika 3.7: PCB-pogled v programu Eagle.

Ker nekaterih povezav ni bilo mogoče povezati na spodnji strani tiskanine, je bilo treba

povezavo narediti po zgornji strani. Te so na Sliki 9.2 narisane z rdečo barvo. Prehod z ene

strani na drugo se imenuje »via«. Ker je tiskanina enostranska, so »vije« narejene iz ravnih

tankih ţic (Slika 9.4).

Ko smo povezali vse povezave, smo preverili z orodjem DRC, ali je prišlo do kakšne

uporabniške napake glede na pravila, ki smo jih predhodno vnesli. Orodje preveri, ali so

povezave dovolj odmaknjene med sabo ali od roba oz. komponent, če so povezave širše od

najmanjše dovoljene in ali so luknje dovolj velike. Ko je tiskanina pregledana in pravilna,

je treba izvoziti datoteke »Gerber«. To so datoteke, ki jih stroj za izdelovanje tiskanine

potrebuje, da iz njih razloči, kakšna je tiskanina. Za našo enostransko tiskanino smo

izvozili datoteke »Gerber« za spodnjo plast bakra in za pozicije lukenj.

3.6 Fizična izdelava

Nato rezkalni stroj iz plasti bakra izrezlja povezave in zvrta luknje (Slika 9.3).

Slika 3.8: Spodnja stran tiskanine.

Page 36: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

26

Ko je bila tiskanina izdelana, smo nanjo prispajkali komponente. Vse komponente so tipa

»through-hole« razen gladilnih kondenzatorjev, ki so tipa SMD.

Slika 3.9: Zgornja stran tiskanine.

Končano tiskanino smo nato priključili na Raspberry Pi, dodali LCD-zaslon in zagnali naš

program. Nanj smo povezali še senzor in priključili zvočnike. Program od vklopa potrebuje

70 sekund, da prične delovati.

Slika 3.10: Končni izgled modula

Page 37: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

27

4. MERITVE IN REZULTATI

V laboratoriju smo izmerili tok (I) in napetost (U) ter izračunali moč (P) modula po

Ohmovem zakonu, ki znaša 0,1 W.

(3.1)

Izmerili in posneli smo tudi napetostni odziv senzorja z digitalnim osciloskopom. S Slike

4.1 je razvidno, da A/D pretvornik v modulu prejme napetostni pulz, ob najmočnejših

udarcih do pribliţno 5,5 V.

Slika 4.1: Napetostni pulz, ki ga proizvede senzor.

TOK (A) NAPETOST (V) MOČ (W)

0,0226 4,7 0,10622

Tabela 4.1: Prikaz porabe modula.

Page 38: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

28

Slika 4.2: Povečan prikaz napetostnega pulza, ki ga proizvede senzor.

Z osciloskopom smo še zajeli, kolikšna je časovna zakasnitev med udarcem in med

predvajanjem zvočne datoteke. Zakasnitev je pribliţno 35 ms. Največ časa se porabi za

A/D pretvorbo, branje z SD-kartice in D/A pretvorbo.

Profesionalni moduli imajo zakasnitev pribliţno od 7 do 15 milisekund, odvisno od števila

vzorcev zajemanja, bitne globine, programske opreme in strojne opreme.

Slika 4.3: Prikaz zakasnitve zvoka ob udarcu na senzor.

Page 39: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

29

5. SKLEP

V diplomskem delu smo opisali postopek izdelave modula, ki predvaja zvočno datoteko ob

udarcu na piezoelektrični senzor. Modul smo realizirali s pomočjo razvijalne plošče

Raspberry Pi, na kateri je napisana koda za delovanje v programskem jeziku Python.

Zajem signala s senzorja, analogno pretvorbo in nastavljanje nivoja občutljivosti preko tipk

smo realizirali z mikrokrmilnikom Atmega8. Njegovo delovanje smo opisali s

programskim jezikom C++. Med sabo komunicirata preko serijske povezave UART. Na

modul smo povezali tudi LCD-prikazovalnik za prikaz nivoja občutljivosti in ime zvočne

datoteke, ki se bo predvajala, ter bralnik SD-kartice, na kateri so shranjene zvočne

datoteke. Modul smo izdelali tako, da se preko priključnih sponk priključi na Raspberry Pi

in tako zasede najmanj prostora.

Glede na ostale module na trgu, ki omogočajo več vhodov za senzorje, veliko nastavitev za

različne parametre, kot so krivulja zaznavanja udarca, občutljivost senzorja, kako hitro se

naj zopet začne zajemati signal po udarcu in ojačenje vhodnega signala, ima naš modul

samo tipki za nastavljanje nivoja občutljivosti in najmanjša časovna razdalja med

udarcema je 40 milisekund, kar pomeni da lahko igralec naredi 25 udarcev na sekundo

oziroma 1500 udarcev na minuto. Takšne hitrosti pa ne doseţe noben bobnar.

Modul bi lahko še izboljšali, če bi zmanjšali zakasnitev zvoka glede na udarec, dodali več

vhodov za senzorje in dodali potenciometer za nastavljanje izhodne jakosti.

Page 40: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

30

SEZNAM VIROV

[1] Harmut Janocha. Actuators: Basics and Applications

Berlin: Springler, 2004

[2] Peter Krebelj. Python 3 za začetnike.

Ljubljana: Atelje Doria, 2013

[3] Goran Bervar. C++ na kolenih

Ljubljana: Študentska zaloţba, 2008

[4] Analogno-digitalna pretvorba [13.1.2015, 4.4.2015]

http://en.wikipedia.org/wiki/Analog-to-digital_converter

[5] Raspberry Pi [15.1.2015]

http://en.wikipedia.org/wiki/Raspberry_Pi

[6] Atmel Atmega8, Datasheet [12.2.2015]

http://www.atmel.com/devices/ATMEGA8.aspx?tab=overview

[7] Serijska povezava UART [13.2.2015]

https://www.freebsd.org/doc/en/articles/serial-uart/

[8] Arduino kot SPI programator [15.2.2015]

http://www.instructables.com/id/Arduino-Leonardo-as-Isp/?ALLSTEPS

[9] Nalagalnik programa [3.3.2015]

http://arduino.cc/en/Hacking/Bootloader?from=Tutorial.Bootloader

[10] Vezava LCD prikazovalnika [3.3.2015, 17.3.2015]

https://projects.drogon.net/raspberry-pi/wiringpi/lcd-library/

11] Koda v jeziku Python za krmiljenje LCD prikazovalnika [4.3.2015, 20.3.2014]

http://www.raspberrypi-spy.co.uk/2012/07/16x2-lcd-module-control-using-python/

[12] Pygame [8.4.2015]

http://www.pygame.org/docs/ref/mixer.html

[13] Arduino [9.4.2015, 3.5.2015]

http://www.arduino.cc/

[14] Uporaba programa Eagle [10.4.2015, 12.4.2015]

https://learn.sparkfun.com/tutorials/using-eagle-schematic

[15] Napotki za izdelavo tiskanine [3.5.2015]

http://www.onmyphd.com/?p=pcb.design

Page 41: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

31

Page 42: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

32

Page 43: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA

33