vgrajen modul za elektriČna tolkala
TRANSCRIPT
![Page 1: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/3.jpg)
I
![Page 4: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/29.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/30.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/33.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/34.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/35.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/36.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/37.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/38.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/39.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/40.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/41.jpg)
31
![Page 42: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/42.jpg)
32
![Page 43: VGRAJEN MODUL ZA ELEKTRIČNA TOLKALA](https://reader031.vdocuments.net/reader031/viewer/2022012505/6180935ee2f6c921cd51c529/html5/thumbnails/43.jpg)
33