Lect.univ.dr.ing .. Constantinescu Catalin Iulie 201 8 CRAIOVA UNIVERSITATEA DIN CRAIOVA FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ… [606713]
UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI
ELECTRONICĂ
DEPARTAMENTUL DE AUTOMATICĂ ȘI ELECTRONICĂ
PROIECT DE DIPLOMĂ
Buzatu Adrian Mihai
COORDONATOR ȘTIINȚIFIC
Lect.univ.dr.ing .. Constantinescu Catalin
Iulie 201 8
CRAIOVA
UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI
ELECTRONICĂ
DEPARTAMENTUL DE AUTOMATICĂ ȘI ELECTRONICĂ
ACORDOR ELECTRONIC
Buzatu Adrian Mihai
COORDONATOR ȘTIINȚIFIC
Lect.univ.dr.ing . Constantinescu Catalin
Iulie 2018
CRAIOVA
DECLARAȚIE DE ORIGINALITATE
Subsemnatul Buzatu Adrian Mihai student: [anonimizat], C alculatoare și Electronică a Universit ății din Craiova, certific prin prezenta
că am luat la cunoșt ință de cele prezentate mai jos și că î mi asum, în acest context, originalita tea
proiectului meu de licență :
• cu titlul Acordor Electronic
• coordonată de Lect.univ.dr.ing . Constantinescu Catalin
• prezentată în sesiunea Iulie 2018
La elaborarea proiectului de licență, se consideră plagiat una dintre următoarele acțiuni:
• reproducerea exactă a cuvintelor unui alt autor, dintr -o altă lucrare, în limba română sau pr in
traducere dintr -o altă limbă, dacă se omit ghilimele și referința precisă,
• redarea cu alte cuvinte, reformularea prin cuvinte proprii sau rezumarea ideilor din alte
lucrări , dacă nu se indică sursa bibliografică,
• prezentarea unor date experimentale ob ținute sau a unor aplicații realizate de alți autori fără
menționarea corectă a acestor surse,
• însușirea totală sau parțială a unei lucrări în care regulile de mai sus sunt respectate, dar care
are alt autor.
Pentru evitarea acest or situații neplăcute se recomandă:
• plasarea într e ghilimele a citatelor directe și indicarea referinței într -o listă corespunzătoare la
sfărșitul lucrării,
• indicarea în text a reformulării unei idei, opinii sau teorii și corespunzător în lista de referințe
a sursei originale d e la care s -a făcut preluarea,
• precizarea sursei de la care s -au preluat date experimentale, descrieri tehnice, figuri, imagini,
statistici, tabele et caetera ,
• precizarea referințelor poate fi omisă dacă se folosesc informații sau teorii arhicunoscute, a
căror paternitate este unanim cunoscută și acceptată.
Data , Semnătura candidat: [anonimizat] ,
UNIVERSITATEA DIN CRAIOVA
Facultatea de Automatică, Calculatoare și Electronică
Departamentul de Automatică și Electronică Aprobat la data de
…………………
Șef de departament,
Prof. dr. ing.
Emil PETRE
PROIECTUL DE DIPLOMĂ
Numele și prenumele student: [anonimizat]/ -ei:
Buzatu Adrian Mihai
Enunțul temei:
Acordor Electronic
Datele de pornire:
Dezvoltarea si realizarea unei machete funcț ionale a unui
acordor electronic
Conținutul proiectului :
1 .Introducere
2. Raspberry pi (Software si Hardware)
3. Hardware si Software
4. Concluzii
Material grafic obligatoriu:
Consultații:
Periodice
Conducătorul științific
(titlul, nume și prenume, semnătura):
Data eliberării temei :
Termenul estimat de predare a
proiectului :
Data predării proiectului de către
student: [anonimizat]:
UNIVERSITATEA DIN CR AIOVA
Facultatea de Automatică, Calculatoare și Electronică
Departamentul de Automatică și Electronică
REFERATUL CONDUCĂTORULUI ȘTIINȚIFIC
Numele și prenumele candida tului/ -ei: Buzatu Adrian Mihai
Specializarea: Electronică Aplicată
Titlul proiect ului: Variator de tensiune in curent continuu comandat printr -un
dispozitiv bluetooth
Locația în care s -a realizat practica de
documentare (se bifează una sau mai
multe din opțiunile din dreapta): În facultate □
În producție □
În cercetare □
Altă locație:
În urma analizei lucrării candidatului au fost constatate următoarele:
Nivelul documentării Insuficient
□ Satisfăcător
□ Bine
□ Foarte bine
□
Tipul proiectului Cercetare
□ Proiectare
□ Realizare
practică □ Altul
Aparatul matemat ic utilizat Simplu
□ Mediu
□ Complex
□ Absent
□
Utilitate Contract de
cercetare □ Cercetare
internă □ Utilare
□ Altul
Redactarea lucrării Insuficient
□ Satisfăcător
□ Bine
□ Foarte bine
□
Partea grafică, desene Insuficient ă
□ Satisfăcătoare
□ Bună
□ Foarte bună
□
Realizarea
practică Contribuția autorului Insuficientă
□ Satisfăcătoare
□ Mare
□ Foarte mare
□
Complexitatea
temei Simplă
□ Medie
□ Mare
□ Complexă
□
Analiza cerințelor Insuficient
□ Satisfăcător
□ Bine
□ Foarte bi ne
□
Arhitectura Simplă
□ Medie
□ Mare
□ Complexă
□
Întocmirea
specificațiilor
funcționale Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună
□
Implementarea Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună
□
Testarea Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună
□
Funcționarea Da
□ Parțială
□ Nu
□
Rezultate experimentale Experiment propriu
□ Preluare din bibliografie
□
Bibliografie Cărți
Reviste
Articole
Referințe web
Comentarii
și
observații
În concluzie, se propune:
ADMITEREA PROIECTULUI
□ RESPINGEREA PROIECTULUI
□
Data, Semnătura conducătorului științific,
CUPRINS
1 INTRODUCERE
2 ACORDORU L DIGITAL
3 PROGRAME ȘI PLATFORME FOLOSIT E
3.1 Arduino
3.2 Limbajul de programare C
3.3 Mediul de programare Arduino IDE
4 REALIZAREA PROIECTUL UI FIZIC
4.1 Realizarea Hardware
4.2 Realizarea Software
4.3 Transformata Fourier Rapidă (FFT)
5 CONCLUZII
6 BIBLIOGRAFIE
7 ANEXE
1. Introduce re
În prim ul capitol s -a realizat o scurtă introducere a conț inutului lucrarii.
În cel de -al doilea capit ol s-au expus mai multe informaț ii despre Placile de dezvoltare
Arduino si Raspberry pi 3 .
În cel de -al treilea capitol am detaliat informaț iile despre programele folosite pentru realizarea
proiectului de diploma și schemele electronice .
În capitolul patru s-au prezentat conclu ziile acestui proiect de diplomă .
2. Acordorul Digital
Acordorul digital este un dispozitiv electronic folosit in industria muzicala.
Acest dispozitiv este utilizat de majoritatea muzicienilor pentru instrumentele lor muzicale:
• Chitara
• Chitara Bass
• Vioara
• Pian
Înainte de apariția acordorului digital, pentru a -și acorda instrumentul muzical, muzicianul
folosea un diapazon.
În muzica clasică, este o tradiție veche numindu -se “acordatul după ureche”, ajustând notele
unui instrument după o notă de referință. În orchestră, instrumentistul lovește un diapazon
dând nota LA 440 Hz iar ceilalți instrumentiști se acordează după acea notă.
Diapazonul este un instrument acustic mic format dintr -o bară de oțel î n form ă de U, care
vibrează la lovire, emițâ nd de obicei nota muzical ă ‘LA’ și serveș te la acordarea instrumentelor
muzicale sau la indicarea tonului pentru un ansamblu coral.
Diapazonul este cel mai vechi acordor.
Am ales aceastp temp din pasiune pentru muzică .
Am ales sa lucrez cu platforma Raspberry pi 3 datorita unui loc de munca unde am lucrat in
sistemul de operare Linux cu limbajul de programare Python.
Siste mul de operare al platformei Raspberry pi este Raspbian, un sistem de operare bazat pe
Debian (una din nenumaratele distributii de Linux).
În industria muzicală, un acordor electronic este un dispozitiv care detectează și afișează nota
Muzicală cântată de un instrument musical. Nota muzicală este măsurată in Herți (Hz). Acordoarele
simple indică cu ajutorul unor diode LED daca nota este mai joasă sau mai înaltă decât frecvența
perfecta, sau acordoare cu display LCD. În anul 2010 au apărut primele acordoare ca aplicații
software pentru telefoanele mobile care puteau transforma orice dispozitiv smartphone intr -un
acordor. De regulă, cu cât un acordor este mai scump, cu atât el este mai precis în citirea frecvenței
captate. Acordoarele variază în mărime de la acordoare care încap în buzunar, la acordoare care se
folosesc la un rack.
Cele mai simple acordoare detectează si afișează acordarea anumitor note dintr -o gamă muzicală,
de cele mai multe ori gama La sau Mi , sau există acordoare specific pentru un instrum ent musical
cum ar fi acordoarele pentru chitară care conțin numai notele corzilor unei chitări (Mi -nota joasă, La,
Re, Sol, Si, Mi -nota înaltă) .
Acordoarele mai complexe oferă o acordare mai cromatică pentru toate notele musicale și pentru
mai multe octav e.
Acordoarele obișnuite conțin ori o intrare jack pentru instrumente electrice, un microfon, un
sensor pentru vibrații de forma unui clește sau o combinație între acestea. Detectarea notei este afișată
pe un display LCD simulând o imagine a unui ac sau lu mini LED. Unele acordoare conțin și o ieșire
în așa fel încât poate fi conectat în linie dintr -un instrument electric într -un amplificator sau un mixer.
Acordoarele mici sunt de obicei alimentate de o baterie. Multe acordoare pe baza de baterii au și un
jack pentru o alimentare AC opțională.
Majoritatea instrumentelor muzicale generează o formă de undă complexă. Conține un număr de
armonici incluzând frecvența fundamentală (pe care un ascultător tipic o poate percepe ca fiind o
notă). Fiecare instrument pro duce rații diferite de armonici, acest lucru face ca instrumentele diferite
să producă aceeași notă muzicală (nota La 440 Hz produsa de o chitară, o vioară sau un pian) . De
asemenea, această formă de undă se schimbă constant. Asta înseamnă că pentru a avea acuratețe, un
acordor electronic trebuie să proceseze un număr de cicluri și să folosească o medie a notelor înainte
de afișarea acestora.
Zgomotul de pe fundal de la alte instrumente muzicale sau orice alt sunet poate deregla citirea
acordorului arătând o notă greșita în loc sa citească o singură frecvență. De aceea acul de pe display –
ul LCD sau LED tinde să oscileze întotdeauna neavând o poziție fixă.
Acuratețea tipică a acestor acordoare este de +/ – 1/9 nota muzicală.
Acordoarele cu clește se atașează de instrumental musical cu ajutorul unui clește încorporat care
conține un senzor de vibrații. Prins de capătul gâtului unei chitări sau cutia de rezonanță a unei viori,
acest acordor detectează nota chiar și in zone pline de zgomot cum ar fi o încăpere un de toată lumea
se acordează.
Unele acordoare digitale sunt integrate în instrumentul muzical. Câteva exemple sunt Sabine
AX3000 și dispozitivul NTune. Dispozitivul NTune este format din potențiometre, un display dintr -un
disc din plastic, un circuit electr onic și o baterie. Acest dispozitiv este instalat unde este amplasat și
potențiometrul de volum. Potențiometrul de volum lucrează normal daca nu este apăsat. Ca acordorul
sa opereze, butonul de volum trebuie sa fie apăsat. Acordorul deconectează ieșirea c hitării în așa fel
încât chitara să nu mai fie amplificată. Luminile de pe dispozitiv, sub potențiometrul de volum, indică
daca nota muzicală este acordată. Când nota este la frecvența buna, lumina devine verde. După ce
acordajul este gata, muzicianul trag e de potențiometru pentru a opri acordorul și pentru a reporni
amplificarea chitării reconectând dozele chitării la ieșirea jack -ului.
Chitările Gibson au dezvoltat un model de chitara în anul 2008 cu numele Robot Guitar, o
versiune personalizată a modelel or Les Paul sau SG. Chitara vine cu un gât special care conține un
senzor care captează frecvența corzilor.
Acordoarele cu senzor de vibrații se prind de instrument, cum ar fi gâtul unei chitări sau clopotul
unui trombon. Un senzor de vibrații este incorp orate in clește care transmite vibrațiile in circuitul
electronic. Absența microfonului face ca aceste tipuri de acordoare sa fie imune la zgomotele din
fundal așa că muzicienii se pot acorda în orice loc zgomotos incluzând momentele când mai mulți
muzicie ni se acordeaza.
Multe aplicații cu acordoare cromatice sau pentru chitară sunt valabile pentru Android și iOS.
Multe se descarcă și se instalează grauit.
Acordoarele LCD sau LED utilizează un microprocesor pentru a măsura media perioadei unei
forme de und ă. Folosește informația pentru a mișca acul de pe display sau pentru a aprinde luminile
LED. Cand muzicianul cântă o nota, acordorul citește nota. După, acordorul afișează nota direct
proporțională cu frecvența citită și indică nota dacă este mai joasă, ma i înaltă sau perfecta. Dacă nota
este mai joasă decât ar trebui, afișorul arată un ac sau mai multe linii care oscilează spre stânga, dacă
nota muzicală este mai înaltă decat ar trebui, afișorul arată același ac sau linii cum oscilează spre
dreapta.
Unele acordoare scumpe includ și un difuzor care produce sunetle notelor, utilizat în special
pentru antrenarea urechii muzicale.
Distanța de la o notă la următoarea notă muzicala poartă numele de semiton.
Un ton este format din două semitonuri.
Există 12 note m uzicale.
Notele muzicale pot fi afișate în diferite moduri:
A – La A# – La#
B – Si
C – Do C# – Do#
D – Re D# – Re#
E – Mi
F – Fa F# – Fa#
G – Sol G# – Sol#
O octavă este distanța de la o notă muzicală la aceeași notă fiind mai înaltă sau mai joas ă (Do –
Re-Mi-Fa-Sol-La-Si-Do, distanța de la nota Do joasă la nota Do înaltă).
3. Programe si platforme folosite
3.1 Arduino
Arduino este o platformă electronică foarte populară care se bazează pe hardware si software
ușor de utilizat .
Plăcile Arduino sunt capabile să citească intrări – lumină pe un senzor, un deget pe un buton
sau un mesaj Twitter – și să o transforme într -o ieșire – activând un motor, activând un LED,
publicând ceva pe internet.Pentru a face acest lucru, folosiți limbajul de programare Arduino (bazat pe
cablare) și software -ul Arduino (IDE), bazat pe procesare.
Arduino s -a născut la Ivrea Interaction Design Institute ca un instrument ușor de prototipare
rapidă, destinat studenț ilor fără un background în electronică și programare. De îndată ce a ajuns la o
comunitate mai largă, consiliul Arduino a început să se schimbe pentru a se adapta la noile nevoi și
provocări, diferențiind oferta sa de la plăci simple de 8 biți la produse p entru aplicații IoT, imprimări
3D și mediu încorporat.
Toate plăcile Arduino sunt complet open -source, permițându -le utilizatorilor sa le
construiască independent si in cele din urma sa le adapteze la nevoile lor specifice. Software -ul, de
asemenea, este open -source, și este în creștere prin contribuțiile utilizatorilor din întreaga lume.
Software -ul Arduino este publicat ca instrumente open source, disponibil pentru extensie de
către programatori experimentați. Limba poate fi ext insă prin biblioteci C ++, iar oamenii care doresc
să înțeleagă detaliile tehnice pot face saltul de la Arduino la limbajul de programare AVR C pe care se
bazează. În mod similar, puteți adăuga codul AVR -C direct în programele Arduino.
Exemple de p lăci de dezvoltare Arduino
1. Arduino Uno
Arduino Uno este una dintre cele mai populare placi de dezvoltare de la Arduino.
Alimentarea se face fie cu o baterie fie prin conectarea la calculator cu ajutorul cablului USB
standard de tip A -B. Pl aca folosește microcontrolerul ATmega328P, acesteia fiind posibil sa i se
adauge o gama diversificata de Shield -uri (placi cu caracteristici diferite, care folosesc la diferite
aplicații).
Figura 3.1 Placa de dezvoltare Arduino Uno
http://www.arduino.org/products/boards/arduino -uno
2. Arduino Primo
Arduino Primo este prima placă dezvoltată în colaborare cu Nordic Semiconductor, aceasta se
conectează la calculator cu un cablu micro – USB dar poate utiliza conexiuni precum Wi -Fi ,
Bluetooth, NFC si IR(infraroșu). In componenta sa sunt 3 microcontrolere nRF52832, STM32f103,
ESP8266 , tot odată fiind posibila adăugarea unor shiel -dri.
Figura 3.2 Placa de dezvoltare Arduino Primo
http://static.arduino.org/media/k2/galleries/1148/A000111 -Arduino -Primo -1front.jpg
3.Arduino Mega 2560
Placa de dezvoltare Arduino Mega 2560 are la b aza microcontroler -ul ATmega2560 , această
placa are 54 de pini digitali, 16 care pot fi folosiți drept ieșiri PWM si 16 pini analogici. Conexiunea
seriala si alimentarea se face cu ajutorul unui cablu USB standard Tip A -B care vine la pachet .
Figura 3.3 Placa de dezvoltare Arduino Mega 2560
http://static.arduino.org/media/k2/galleries/88/A000067 -Arduino -Mega -2560 -1front.jpg
4. Arduino Micro
Placa de dezvoltare Arduino Micro asigura o conexiune rapida la USB datorita cipului
ATmega32U4. Datorita acestei conexiuni rapide Arduino Micro este ideala pentru aplicații interactive
folosind interfața om -mașina poate fi de a fi recunoscuta de căt re calculator drept un dispozitiv
precum mouse -ul sau tastatură. Arduino Micro este una dintre cele mai mici placi dezvoltate de
Arduino.
Figura3.4 Placa de dezvoltare Arduino Micro
https://cdn -reichelt.de/bilder/web/xxl_ws/B300/ARDUINO_MICRO_A03.png
5. Arduino Leonardo
Placa de dezvoltare Arduino Leonardo asigura o conexiune rapida la USB datorita
cipului ATmega32U4. Datorita acestei conexiu ni rapide Arduino Leonardo este ideala pentru
aplicații interactive folosind interfața om -mașina poate fi recunoscută de către calculator drept
un dispozitiv precum mouse -ul sau tastatură. Arduino Leonardo are un cost de achiziție mai
mare decât Arduino Mi cro oferind tot odată posibilitatea dezvoltării unor aplicații mai
complexe.
Figura 3.5 Placa de dezvoltare Arduino Leonardo
https://www.arduino.cc/en/uploads/Main/Leonardo.jpg
6. Arduino Nano
Arduino Nano este o placa de dezvoltare asemănătoare plăcii Arduino Uno si a fost conceputa
pentru dezvoltarea aplicațiilor pe breadboard. Conectarea acesteia la un dispozitiv se face cu un cablu
de tip Mini – B USB.
Figura 3.6 Placa de dezvoltare Arduino Nano
https://www.arduino.cc/en/uploads/Main/Nano.jpg
7. Arduino Mini
Placa de dezvoltare Arduino Mini este o placă de dezvoltare foarte compactă asem ănătoare
cu placa de dezvoltare Arduino Nano. Aceasta nu are atașat pe placa o conexiune seriala de
tip USB suportă o tensiune maxima de 9V.
Figura 3.7 Placa de dezvoltare Arduino Mini
https://www.arduino.cc/en/uploads/Main/ArduinoMini.jpg
8. Arduino PRO
Placa de dezvoltare Arduino Pro vine in ambele versiuni de 3.3V/8MHz respectiv
5V/16MHz are 14 pini digitali din care pot fi folosiți pentru generarea unui semnal PWM si
alți 6 pentru intrări analogice. Comunicarea se face printr -un cablu USB -TTL23R.
Figura 3.8 Placa de dezvoltare Arduino Pro
https://www.arduino.cc/en/uploads/Main/ProFront.jpg
9. Ard uino Mega ADK
Placa de dezvoltare Arduino Mega ADK se aseamănă cu Arduino Mega 250 dar este
conceputa pentru aplicațiile de android. Folosește un controler ATmega2560 însa se poate
conecta si la telefoanele prin USB cu ajutorul MAX342le IC.
Figura 3 .9 Placa de dezvoltare Arduino Mega ADK
https://www.arduino.cc/en/uploads/Main/ArduinoMegaADK.jpg
10. Arduino LilyPad
Placa de dezvoltare LilyPad este perfectă pentru proiectel e pe materiale textile materiale
datorită aceasta poate sa fie chiar cusută. Conexiunea cu Pc -ul se face cu ajutorul unui port
micro -USB.
Figura 3.10 Placa de dezvoltare Arduino LilyPad
https://www.arduino.cc/en/uploads/Main/E000017_landing.jpg
11. Arduino Industrial 101
Arduino Industrial 101 este o placă de evaluare a modulului LGA Arduino 101.
Aceasta folosește microcontrolerul ATmega32u4 care este integrat în placa de bază si suporta
distribuție a Linux bazată pe OpenWRT numită LininoOS.[8 ]
Figura 3.11 Placa de dezvoltare Arduino Industrial 101
https://store -cdn.arduino.cc/usa/catalog/product/cache/1/image/1800x/
ea1ef423b933d797cfca49bc5855eef 6/a/0/a00 0126_iso.jpg
3.2 Limbajul de programare C
Limbajul de programare C este cel mai popular limbaj de programare acesta fiind implementat pe
majoritatea platformelor existente astăzi. Acest limbaj stă la baza multor alte limbaje de programare
existente in zilele noastre precum C++ sau Java.
Acest limbaj a apărut la începutul anilor 1970 și a fost creat de Ken Thompson si Dennis Ritchie
din necesitatea unui limbaj de programare simplu fiind necesar pentru scrierea sistemului de operare
UNIX.
Limbajul de programarea C este un limbaj de pro gramare care operează in strânsă cooperare cu
partea de Hardware al unui dispozitiv si tot odată este cel mai apropiat de limbajul de asamblare în
comparație cu majoritatea limbajelor de programare.
Limbajul de programare C este considerat/prezenta t uneori drept un „asamblor portabil” făcându –
se astfel diferența intre limbajul C care poate fi rulat aproape pe orice tip de mașină(calculator) , în
schimb un limbaj de asamblare este specific unui anumit model de mașină (calculator).
Crearea sa a avut ca scopul ușurarea scrierii unor programe de dimensiuni mai mari cat și pentru
reducerea numărului de erori in paradigma de programării procedurale.
Cele mai importante caracteristici ale limbajului de programare C sunt :
• Simplitatea limbaj ului dar si deținerea unor funcționalități importante precum funcțiile
matematice cat si cele de manipulare ale fișierelor
• Programarea este facilitată într -un mod structurat fiind focalizat pe paradigma
programării procedurale
• Utilizarea unor seturi simple de date care pot sa împiedice operații nedorite
• Este permisa accesarea memoriei calculatorului la nivel scăzut prin utilizarea
pointerilor;
• Permite folosirea parametrilor, care sunt comunicați funcțiilor prin valoare și nu prin
referință;
• Pointeri la fu ncții, ce permit forme rudimentare de închidere(closure) dar si de
polimorfism;
• Declararea variabilelor ;
• Structuri de date/tipuri de date agreate sunt definite de către utilizator cu ajutorul
comenzii ( struct ) ce permit datelor care sunt înrudite sa fi e combinate si manipulate
ca un întreg;
Principalele caracteristici care lipsesc in limbajul de programare C ,dar care pot fi găsite in alte
limbaje de programare sunt :
• Un sistem automat de colectare a rezid -urilor de memorie
• Clase si obiecte
• Un sistem avansat de tipuri de date
• Programarea generică
• Supraîncărcarea
• Procesarea listelor
Deși limbajul de programare C are destule minusuri acestea nu reprezintă un dezavantaj
suficient de mare pentru renunțarea la acest limbaj in practica deoarece permite scrierea unor noi
compilatoare pe noi tipuri de platforme. Acesta fiind unul dintre motivele care fac codul C sa fie un
cod mult mai eficient decât dacă ar fi scris in alte limbaje de programare.
Una din consecințele acceptării eficienței limbajului de programare C este reprezentată de
faptul ca multe compilatoare, biblioteci si interpretoare ale limbajelor de nivel înalt sunt adesea
implementate in C.
Un exemplu de program C (“Hello World!”)
O astfel de variantă a urmatorului exemplu de program a apărut în prima ediție și a devenit un
exemplu standard de program introductiv in majoritatea cărților de programare indiferent de limbajul
de programare.
Programul afișează la iesirea standard care de obicei este un monitor sau un terminal mesajul
“Hello, World!”.
#include<stdio.h>
int main(void)
{
printf(“Hello World! \n”);
return 0;
}
Prima linie a programului conține o direct ivă preprocesor, #include. Aceasta face ca procesorul să
inlocuiască linia respectivă cu conținutul entității sau fișierului la care sa făcut referire.
În acest caz, antetul standard stdio.h , care conține definițile funcților de manipulări intrăr i cat și
ieșirii standard va înlocuii aceasta funcție.
Următoarea linie definește funcția numită main. Funcția main are un loc bine stabilit in
programele C. Atunci când un program este executat această este prima funcție executată fiind
cunoscută ș i sub numele de punct de intrare în program. Pentru ca un program să poată fi executat
prezența acesteia este obligatorie.
Porțiunea de cod int indică faptul că valoarea întoarsă de funcția main este un întreg. (void) indică
faptul că funcția main nu primește nici un argument de apelare.
Paranteza acoladă deschisă indică începutul codului pentru funcția main .
Funcției printf în acest caz îi este transmis un singur argument , ș irul de caractere “Hello,
World! \n .Secvența \n este denum ită EOL(end of line) rolul acesteia este de a muta cursorul pe
următorul rând.
Funcția return 0; are ca scop terminarea execuției codului funcției main si face ca aceasta să
intoarcă procesului apelant valoarea 0, în cazul de față sistemului de oper are.
Paranteza acoladă închisă indică terminarea codului funcției main.
Tipuri de date
Limbajul de programare C cuprinde tipuri de date cum ar fi:
• Întregi ( aparțin numerelor întregi)
– Unsigned char – caracter fără semn pe 8 biți de la 0 l a +255
– Char – caracter pe 8 biți de la -128 șa +127
– Unsigned int – întreg fără semn/ 16 biți/ 0 la +65535
– Short int – întreg scurt/ 16 biți/ -32768 la +32767
– Int – întreg/ 16 biți/ -32768 la + 32767
– Unsigned long – întreg lung fără semn /32 biți / 0 l a 4.294.967.295
– Long – întreg lung cu semn /32 biți / -2.147.483.648 la +2.147.483.647
• Reale (au un numar finit de zecimale)
– Float 32 de biți/ 3x4x10^ -38 la
– Double – 64 biți/ 1.7×10^ -308 la 1.7×10^308
– Long double – 80 biți/3.4×10^ -4932 la 3.4×10^4932
• numere logice ( acestea au doua valori Adevarat si Fals, atunci cand (valoare >=1) are
valoarea adevarat și fals atunci cand (valoare=0);
De asemenea mai pot fi si enumerări(enum) , structuri(struct) de date si uniuni(union).
Limbajul C utilizează foarte mult pointeri , un tip de referință foarte simplu ce pastrează un obiect
de memorie.
Un pointer null are o valoare rezervată prin inducerea faptului că se face referire la o locație
nevalidă. Acești pointeri sunt foarte f olosiți in programarea generică
In limbajul C anterior tablourile aveau o dimensiune fixa care era cunoscută la momentul
compilării, însă spre deosebire de alte limbaje standard limbajul C evaluează numele tablurilor drept
pointeri.
Este oferită posibiltatea de lucruri cu tablouri multidimensionale (tablouri in tablouri).
Alocarea memoriei
Alocarea memoriei este una dintre cele mai importante funcții ale unui limbaj de programare ,
limbajul de programare C oferă trei astfel de metode di stincte de alocare a memoriei pentru obiecte :
• Alocarea statică a memoriei , în acest tip de alocare a memorie adresele și dimensiunile
obiectelor care folosesc alocarea statică sunt fixate la momentul compilării acestea fiind
plasate într -o zonă de dimens iune fixă care corespunde unei anumite zone din cadrul fișierului
linkeditat final.
• Alocarea automată a memoriei, obiectele temporale precum variabilele locale sunt stocate
într-o stivă asociate funcției apelate , iar spațiul folosit de către aceasta va fi i eliberat automat
iar apoi reutilizat după ce blocul in care au fost declarate va fi părăsit.
• Alocarea dinamică a memoriei, blocurile de memorie de diferite dimensiuni pot să fie alocate
într-o zonă a memoriei numita heap, cu ajutorul funcțiilor malloc( ) , calloc( ) si realloc( ).
Prin apelarea funcției free( ) aceste blocuri au posibilitatea de a fi reutilizate atunci când zona
de memorie a fost eliberată.
Există și anumite variabile care nu sunt alocate automat , acestea fiind alocate static :
• toate va riabilele care sunt globale, chiar dacă au fost sau nu declarate ca fiind statice;
• variabilele locale care au fost declarate drept variabile statice ;
3.3 Mediul de programare Arduino IDE
Mediul de dezvoltare integrat al Arduino, sa u software -ul Arduino (IDE) conține un text editor
unde se face scrierea codului, o zonă unde sunt afișate mesajele, o consolă a textului, o bară de unelte
cu diverse butoane pentru funcții comune și pentru o serie de meniuri. Acesta se conectează cu plăc ile
de dezvoltare Arduino si Genuino pentru a putea fi încărcate programele precum și pentru a putea fii
asigurată o comunicare între calculator și placa de dezvoltare.
Figura 3.12 Interfața mediului de programare Arduino IDE 1.8.2
Schița
Arduino IDE folosește noțiunea de schiță , acesta reprezentând o locație standard pentru
salvarea schițelor cât și a programelor, acesta va fii creat automat , locația poate fi schimbată ulterior
de către utilizator.
Ferestrele si compilarea
Arduino permite utilizarea mai multor schițe în același timp , acestea apar în ferestre separate
fiecare schița are propria fereastra de lucru. Acestea pot fi limbaje precum fișiere in C (extensia .c),
fișiere C++( exten sia .cpp) sau fișiere de tip header.
Bibliotecile Arduino
Bibliotecile Arduino aduc funcționalități în plus care pot fi utilizate in schițe când se
lucrează cu partea de hardware sau în procesul de manipular e al datelor. Acestea inserează una sau
mai multe declarații de tip #include la începutul schiței, o parte din biblioteci vin incluse în softul
Arduino în timp ce altele pot fi găsite în diverse surse. Bibliotecile Arduino se găsesc de obicei in
formatul . zip .[9]
4. Realizarea Proiectului Fizic
(Hardware & Software)
4.1 REALIZAREA HARDWARE
Figura 4.1 .1 Schema bloc a machetei
Figura 4.1.2 Schema hardware a machetei
Realizarea cablajului
Figura 4.1.3 a
Figura 4.1.3 b
Figura 4.1.4 a
Figura 4.1.4 b
Figura 4.1.5
Arduino Uno
Arduino Uno este o placă de dezvoltare bazată pe microcontroller -ul ATmega328P.
Aceasta are 14 pini digitali care pot fi folosiți ca intrare cât și ca ieșire ( dintre care 6 p ini pot fi
folosiți ca ieșiri PWM), 6 intrări analogice ,un oscilator cu cristal de 16 MHz, un port pentru
conexiunea USB, o mufa pentru alimentare, un antet ICSP si un buton pentru resetare.
Acesta conține tot ce este nevoie pentru susțin erea microcontroller -ului pur și simplu se
conectează la un calculator prin intermediul unui cablu USB ,alimentat printr -o sursă AC – DC sau
de o baterie. Acesta este foarte rezistent și foarte fiabil datorita posibilității schimbării
microcontroller -ului in cazul arderii la un preț scăzut.
Specificații
– Microcontroller – ATmega328P
– Tensiunea de lucru: 5V
– Tensiunea de intrarea: 7-12V
– Limitele tensiunii de intrare: 6-20V
– Pini digitali intrări/ieșiri: 14 (dintre care 6 pini destin ați pentru PWM)
– Pini analogici de intrare: 6
– Curent permis pe fiecare pin: 20mA
– Curent permis pe fiecare pin de 3.3V: 50mA
– Memorie flash: 32 KB dintre care 0,5 KB folosiți pentru bootloader
– SRAM: 2 KB
– EEPROM: 1 KB
– Viteza ceasului : 16MHz
Alimentare
Arduino Mega poate fi alimentat prin intermediul conexiunii USB sau printr -o sursă de
alimentare externă. Sursa de alimentare este selectată automat.
Sursa externă poate veni fie de la un adaptor AC-DC , fie de la o baterie. Adapt orul poate fi
conectat prin atașarea unui ștecher de 2.1mm în mufa de alimentare a plăcuței.
Placa poate funcționa cu o sursă externă de 6 până la 20 de volți. În cazul în care este
alimentat cu mai puțin de 5V, placa va deveni instabilă. În cazul în care se utilizează mai mult decât
12V, regulatorul de tensiune se poate supraîncălzi și conduce la o deteriorare prematură a plăcuței.
Intervalul recomandat de utilizare este de 7 volți până la 12 volți.
Pinii de alimentare sunt următorii:
– VIN – reprezintă tensiunea de intrare la placa Arduino când este folosită o sursă de
alimentare externă
– 5V – alimentarea cu energie reglementată utilizat pentru a alimenta microcontroler -ul
și alte componente de pe bord. Acest lucru poate veni fie de la VIN prin intermed iul unui regulator de
bord, fie furnizat printr -un USB sau o altă sursă de tensiune de 5V.
– 3V3 – o sursă de tensiune de 3.3V generată de regulatorul de pe placă. Curentul
maxim admis 50mA.
– GND – pinul de masă.
Memoria
Microcontroller -ul ATmega328 folos ește o memorie flash de 32 KB (dintre care 0.5 KB sunt
folosiți de bootloader), 2 KB de memorie SRAM și 1 KB memorie EEPROM (care pot fi citiți și scriși
cu ajutorul bibliotecii EEPROM).
Intrări/Ieșiri
Fiecare dintre cei 14 de pini digitali pot fi folosi ți fie ca intrare , fie ca ieșire folosind funcțiile
pinMode() , digitalWrite() și digitalRead(). Pinii pot produce sau primește maxim 20mA și conțin un
rezistor de 20-50 kOhm. Valoarea maxima de 40mA nu trebuie depășita pe oricare dintre pini pentru a
fi evitata avarierea permanenta a microcontroller -ului. Unii pini au funcții speciale:
• 0 (RX) și 1 (TX); Sunt folosiți pentru a primi date (RX) și pentru a transmite date prin
comunicații seriale (TX).
• Întreruperi externe: 2 (întrerupe 0) , 3 (întrerupe 1) . Acești pini pot fi configurați
pentru a declanșa o întrerupere la o valoare mică, o scădere bruscă sau o schimbare de valoare.
Funcția attachInterrupt() evidențiază funcționalitatea corespunzătoare.
• PWM: 3, 5, 6, 9, 10, 11. Oferă semnal de ieșire PWM , 8 biți, cu ajutorul funcției
analogWrite().
• SPI: 10 (SS) , 11 (MOSI) , 12 (MISO) , 13 (SCK). Acești pini suportă comunicații
SPI cu ajutorul bibliotecii SPI_library.
• LED: 13 – este amplasat pe placă un LED conectat la pinul digital 13. Când pinul este
HIGH , LED -ul este aprins, iar când pinul este LOW , acesta este stins. Este folosit pentru teste.
• TWI: A4 (numit si pinul SDA) si A5( numit si pinul SCL). Suportă comunicația de tip
TWI folosind librăria Wire .
Comunicații
Arduino Uno oferă numeroase facilități de a comunica cu un calculator, altă plăcuță Arduino
sau alte microcontrolere. ATmega328 oferă posibilitatea comunicației seriale.
Convertorul USB -serial ATmega328 este reprezentat de un port virtual (calculatoarele cu
sistem de operare Windows au nevoie de un fișier cu extensia .inf , însă cele cu sisteme de operare
OSX și Linux detectează automat portul COM. Soft-ul dedicat Arduino include un monitor virtual
unde se pot observa datele care sunt manipulate în timp real.
LED-urile corespunzătoare lui RX și TX se vor aprinde repetat în timp ce datele sunt
transmise prin intermediul convertorului USB -serial.
Biblioteca SoftwareSerial permite comunicația serială pe oricare dintre pinii digitali ai
plăcuței Arduino
Resetarea automata a plăcii Arduino Uno
Mai degrabă decât o apăsare fizică a butonului de resetare înainte de încărcarea unui program,
Arduino Uno este proiectat într-un mod care îi permite să fie resetat cu ajutorul software -ului care
ruleaz ă pe un calculator conectat.
Figura 4.2 Schema electronică a plăcii de dezvoltare Arduino Uno
http://www.elecrom.com/wp -content/uploads/2017/01/Arduino -Uno-R3-Schematic.png
4.2 REALIZAREA SOFTWARE
#include "arduinoFFT.h"
#define SAMPLES 128
#define SAMPLING_FREQUENCY 1000
arduinoFFT FFT = arduinoFFT();
unsigned int sampling_period_us;
unsigned long microseconds;
double vReal[SAMPLES];
double vImag[SAMPL ES];
float hz[] = {0, 55.00, 58.27, 61.74, 65.41, 69.30, 73.42, 77.78, 82.41, 87.31, 92.50, 98.00, 103.83,
110.00, 116.54, 123.47, 130.81, 138.59, 146.83, 155.56, 164.81, 174.61, 185.00, 196.00, 207.65,
220.00, 233.08, 246.94, 261.63, 277.18, 293.66, 311. 13, 329.63, 349.23, 369.99, 392.00, 415.30};
int ledPinR = 11;
int ledPin = 12;
int ledPinL = 13;
int ledPinDiez = 10;
int a = 2; //For displaying segment "a"
int b = 3; //For displaying segment "b"
int c = 4; //For displaying segment "c"
int d = 5; //For displaying segment "d"
int e = 6; //For displaying segment "e"
int f = 8; //For displaying segment "f"
int g = 9; //For displaying segment "g"
int analogPin = analogRead(A0);
void showNote(int i){
if(i == 0 || i == 12 || i == 24){
digitalW rite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(ledPinDiez, LOW);
}
if(i == 1 || i == 13 || i == 25){
digitalWrite(a,HIGH) ;
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(ledPinDiez, HIGH);
}
if(i == 2 || i == 14 || i == 26){
digitalWrite(a,LOW);
digitalW rite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(ledPinDiez, LOW);
}
if(i == 3 || i == 15 || i == 27){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
digitalWrite(ledPinDiez, LOW);
}
if(i == 4 || i == 16 || i == 28){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrit e(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
digitalWrite(ledPinDiez, HIGH);
}
if(i == 5 || i == 17 || i == 29){
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
digitalWrite(ledPinDiez, LOW);
}
if(i == 6 || i == 18 || i == 30){
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite( d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
digitalWrite(ledPinDiez, HIGH);
}
if(i == 7 || i == 19 || i == 31){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(ledPinDiez, LOW);
}
if(i == 8 || i == 20 || i == 32){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,H IGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(ledPinDiez, LOW);
}
if(i == 9 || i == 21 || i == 33){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digita lWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(ledPinDiez, HIGH);
}
if( i == 10 || i == 22 || i == 34){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f ,HIGH);
digitalWrite(g,LOW);
digitalWrite(ledPinDiez, LOW);
}
if(i == 11 || i == 23 || i == 35){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
digitalWrite(ledPinDiez, HIGH);
}
}
void setup() {
Serial.begin(115200);
pinMode(A0, INPUT);
sampling_period_us = round(1000000*(1.0/SAMPLING_FREQUENCY));
pinMode(a, OUTPUT); //A
pinMode(b, OUTPUT); //B
pinMode(c, OUTPUT); //C
pinMode(d, OUTPUT); //D
pinMode(e, OUTPUT); //E
pinMode(f, OUTPUT); //F
pinMode(g, OUTPUT); //G
pinMode(ledPinR, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(ledPinL, OUTPUT);
pinMode(ledPinDi ez, OUTPUT);
}
void displayNote(float freq)
{
int i = 0;
float vL = 0;
float vR = 0;
vR = hz[i+1] – hz[i];
vL = vL /2;
float vLPR = 0;
for(i = 1; i <= 35; i++){
vL = hz[i] – hz[i-1];
vR = vR / 2;
if(freq > 50.00 & & freq < 425.00){
if(freq > hz[i -1] && freq < hz[i+1]){
if(freq > hz[i -1]+vL && freq < hz[i+1] -vR){
vLPR = (hz[i -1]+vL) -(hz[i+1] -vR);
vLPR = vLPR / 3;
if(freq > hz[i -1]+vL && freq < hz[i -1]+vL -vLPR){
showNote(i);
digitalWrite(ledPin, LOW);
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinL, HIGH);
}
if(freq > hz[i+1] -vR+vLPR && freq < hz[i+1] -vR){
showNote(i);
digitalWrite(le dPin, LOW);
digitalWrite(ledPinR, HIGH);
digitalWrite(ledPinL, LOW);
}
if(freq > hz[i -1]+vL -vLPR && freq < hz[i+1] -vR+vLPR){
showNote(i);
digitalWrite(ledPin, HIGH);
digitalWri te(ledPinR, LOW);
digitalWrite(ledPinL, LOW);
}
}
}
}
}
}
void loop() {
//Serial.println(ADiez);
/*SAMPLING*/
for(int i=0; i<SAMPLES; i++)
{
microseconds = micros();
vReal[i] = analogRead(analogPin);
vImag[i] = 0;
while(micros() < (microseconds + sampling_period_us)){
}
}
/*FFT*/
FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(vReal, vImag, SAMPLES, FFT _FORWARD);
FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
double peak = FFT.MajorPeak(vReal, SAMPLES, SAMPLING_FREQUENCY);
/*PRINT RESULTS*/
Serial.println(peak – 2);
displayNote(peak – 2);
delay(500);
}
4.3 TRANSFORMATA FOURIER RAPIDĂ (FFT)
Cunoașterea armonicelor unei forțe perturbatoare ce actionează asupra unui sistem mecanic,
este deosebit de importantă în scopul evitării excitării vreunui mod propriu de vibrație. Odată cu
apariția plăcilor de achiziție de date a apărut nevoia unei transformări a unui șir de măsurători făcute
la intervale echidistante în timp, pe o perioadă, căruia să -i corespundă unui șir de valori în domeniul
frecvență, adică analiza armonică a unui semnal eșantionat. Răspunsul este transformata Fourier
discretă (DFT) [8] și [9]. Conform cu [6] formula discretă a transformatei Fourier discrete este :
−
=−=1
02
0)( )(N
nNknienxNTkX
1 ,…,0−= N k (1)
unde
)(0nx reprezintă valorile eșantionate ale semnalului (în domeniul timp) la intervalele
echidistante de timp T/N, T fiind perioada, iar X(k) reprezintă valorile transformatei Fourier
eșantionate în frecvență cu pasul
1kf în care
T f /11= este armonica fundamentală. Relația (1) este
de fapt un sist em de N ecuații în necunoscutele X(k). Notând cu
Nie W2−=
(2)
relația (1) ia forma
−
==1
00)( )(N
nknWnxNTkX
(3).
Sistemul de ecuații se poate scrie, presupunând pentru exemplificare că N=4, astfel :
+ + + =+ + + =+ + + =+ + + =
)3( )2( )1( )0( )3()3( )2( )1( )0( )2()3( )2( )1( )0( )1()3( )2( )1( )0( )0(
3*3 2*3 1*3 0*33*2 2*2 1*2 0*23*1 2*1 1*1 0*13*0 2*0 1*0 0*0
x W x W x W x W Xx W x W x W x W Xx W x W xW x W Xx W x W x W x W X
(4)
sau matricial
=
)3()2()1()0(
)3()2()1()0(
9 6 3 06 4 2 03 2 1 00 0 0 0
xxxx
WWWWWWWWWWWWWWWW
NT
XXXX (5).
Rezolvarea sistemului (5) presupune efectuarea a
2N operații de înmulțire plus N(N -1)
operații de adunare de numere complexe. Numărul de operații de înmulțire se reduce semnificativ
dacă se utilizează așa numită transformare Fourier rapidă (FFT) cu algoritmul Cooley -Tukey. Acest
algoritm cere ca N să fie o putere a lui 2, în acest caz numărul de operații de înmulțire reducându -se la
N N2log
, iar înmulțirea de matrici se efectuează în
N2log etape. Reducerea numărului de operații
se bazează pe posibilitatea descompunerii matricii NxN într -un produs de
N2log matrici fiecare
conținând pe linie numai 2 elemente nenule, unul fiind unitatea, iar celălalt un număr complex.
Deasemenea se modifică și ordinea elementelor în vectorul [X] din membrul stâng al relației (5), care
devine :
=
)3()2()1()0(
0100 010100 01
10010000 100 1
)3()1()2()0(
2200
3120
xxxx
WWWW
WWWW
NT
XXXX
(6).
După calcularea vectorului [X] se revine la ordinea inițială a elementelor sale p rintr-o
rearanjare a acestora așa cum se arată în [6].
5. Concluzii
Pentru realizarea acestui proiect am parcurs un material bibliografic bogat sub formă de
articole de pe Internet.
Prin utilizarea programului Arduino IDE am realizat o aplicație pract ică care citește
frecvențele instrumentului muzical pentru a calcula notele muzicale și pentru a le afișa în așa fel încât
utilizatorul să poată înțelege pe deplin cum ar trebui să își acordeze chitara.
6. Bibliografie
https://en.wikipedia.org/wiki/Electronic_tuner
https://ro.wikipedia.org/wiki/Transformata_Fourier
https://en.wikipedia.org/wiki/Fast_Fourier_transform
https://en.wikipedia.org/wiki/C_(programming_language)
https://www.arduino.cc/en/Main/Products
https://www.arduino.cc/en/Tutorial/HomePage/
https://coeleveld.com/arduino -microphone/
http://www.instructables.com/id/7 -Segment -Display -On-Arduino/
https://forum.arduino.cc/index.php?topic=299461.0
https://www.norwegiancreations.com/2017/08/what -is-fft-and-how-can-you-implement -it-on-an-
arduino/
7. Anexe
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Lect.univ.dr.ing .. Constantinescu Catalin Iulie 201 8 CRAIOVA UNIVERSITATEA DIN CRAIOVA FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ… [606713] (ID: 606713)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
