This shows you the differences between two versions of the page.
pm:prj2022:cstan:22 [2022/04/22 19:36] lucian.flutur |
pm:prj2022:cstan:22 [2022/06/02 11:16] (current) lucian.flutur [Descriere generală] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Speaker Bluetooth cu matrice LED ====== | + | ====== Bluetooth transmitter with LED matrix for speakers====== |
===== Introducere ===== | ===== Introducere ===== | ||
Lucian Flutur 1222A | Lucian Flutur 1222A | ||
<note tip> | <note tip> | ||
- | Acest proiect are ca scop relizarea unui spekaer bluetooth cu o matrice LED controlată de un microfon. | + | Acest proiect are ca scop relizarea unui transmitator bluetooth cu o matrice LED controlată de un microfon. |
</note> | </note> | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
<note tip> | <note tip> | ||
- | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | ||
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | |
+ | Placa Arduino este folosită pentru conectarea matricei LED și a microfonului pentru a crea un circuit de analiză de spectrum. Acestea sunt conectate sub o tensiune de 5V pe breadboard. Tot prin breadboard este conectat și transmițătorul Bluetooth 5.0 și un fan pentru răcirea circuitelor. Tensiunea de alimentare de 5V este luată de pe placa Arduino iar placa Arduino este alimentată prin mufa USB 2.0. semnalul audio din transmițător este luat mai departe pe mufa RJ45 și se conectează la orice boxă cu mufa RCA. | ||
+ | |||
+ | |||
+ | |||
</note> | </note> | ||
Line 17: | Line 21: | ||
<note tip> | <note tip> | ||
- | Aici puneţi tot ce ţine de hardware design: | + | 1 x Arduino MEGA 2560 |
- | * listă de piese | + | 1 x Elected microhone |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | 1 x LED matrix 8x8 |
- | * diagrame de semnal | + | 1 x Breadboard |
- | * rezultatele simulării | + | 1 x Bluetooth 5.0 Transmitter |
+ | 1 x RJ45 | ||
+ | 1 x RCA | ||
+ | 1 x Fan 5V 0.23A | ||
</note> | </note> | ||
Line 28: | Line 36: | ||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | #include "LedControl.h" |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
- | ===== Rezultate Obţinute ===== | + | /* Led matrix - Max7219 Declared */ |
+ | LedControl lc = LedControl(12, 10, 11, 1); | ||
- | <note tip> | + | const int maxScale = 11; |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
- | ===== Concluzii ===== | + | /* Sensor - Max9812 Declared */ |
+ | const int sensorPin = A4; | ||
+ | const int sampleWindow = 50; // 50ms = 20Hz | ||
+ | unsigned int sample; | ||
- | ===== Download ===== | + | unsigned long startMillis; |
+ | unsigned long timeCycle; | ||
- | <note warning> | + | unsigned int signalMax = 0; |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | unsigned int signalMin = 1024; |
+ | unsigned char index = 0; | ||
+ | |||
+ | unsigned int peakToPeak[8]; | ||
+ | unsigned int displayPeak[8]; | ||
+ | unsigned int temp[8]={0,0,0,0,0,0,0,0}; | ||
+ | unsigned int signalMaxBuff[8]; | ||
+ | unsigned int signalMinBuff[8]; | ||
+ | |||
+ | |||
+ | void setup() { | ||
+ | // Led matrix | ||
+ | lc.shutdown(0, false); // bật hiện thị | ||
+ | lc.setIntensity(0, 1); // chỉnh độ sáng | ||
+ | lc.clearDisplay(0); // tắt tất cả led | ||
+ | |||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | startMillis = millis(); | ||
+ | //peakToPeak = 0; | ||
+ | |||
+ | signalMax = 0; | ||
+ | signalMin = 1024; | ||
+ | |||
+ | // Get data in 50ms | ||
+ | while (millis() - startMillis < sampleWindow) { | ||
+ | sample = analogRead(sensorPin); | ||
+ | |||
+ | if (sample < 1024) { | ||
+ | if (sample > signalMax) { | ||
+ | signalMax = sample; | ||
+ | } | ||
+ | if (sample < signalMin) { | ||
+ | signalMin = sample; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // 20Hz - 64Hz - 125Hz - 250Hz - 500Hz - 1kHz (timeCycle = 1/F)(ms) | ||
+ | timeCycle = millis() - startMillis; | ||
+ | if (timeCycle == 1 || timeCycle == 2 || timeCycle == 4 || timeCycle == 8 | ||
+ | || timeCycle == 16 || timeCycle == 32 || timeCycle == 40 || timeCycle == 50) { | ||
+ | signalMaxBuff[index] = signalMax; | ||
+ | signalMinBuff[index] = signalMin; | ||
+ | index = (index + 1) % 8; | ||
+ | delay(1); | ||
+ | //Serial.println(timeCycle); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Delete pointer to array | ||
+ | index = 0; | ||
+ | |||
+ | // Calculation after get samples | ||
+ | for (int i = 0; i < 8; i++) { // i = row (led matrix) | ||
+ | // sound level | ||
+ | peakToPeak[i] = signalMaxBuff[i] - signalMinBuff[i]; | ||
+ | |||
+ | // Map 1v p-p level to the max scale of the display | ||
+ | displayPeak[i] = map(peakToPeak[i], 0, 1023, 0, maxScale); | ||
+ | |||
+ | // Show to led matrix | ||
+ | displayLed(displayPeak[i], i); | ||
+ | |||
+ | // Led drop down | ||
+ | if (displayPeak[i] >= temp[i]) { | ||
+ | temp[i] = displayPeak[i]; | ||
+ | } | ||
+ | else { | ||
+ | temp[i]--; | ||
+ | } | ||
+ | |||
+ | lc.setLed(0, i, temp[i], true); | ||
+ | delayMicroseconds(250); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | void displayLed(int displayPeak, int row) { | ||
+ | switch (displayPeak) { | ||
+ | case 0 : lc.setRow(0, row, 0x80); break; | ||
+ | case 1 : lc.setRow(0, row, 0xC0); break; | ||
+ | case 2 : lc.setRow(0, row, 0xE0); break; | ||
+ | case 3 : lc.setRow(0, row, 0xF0); break; | ||
+ | case 4 : lc.setRow(0, row, 0xF8); break; | ||
+ | case 5 : lc.setRow(0, row, 0xFC); break; | ||
+ | case 6 : lc.setRow(0, row, 0xFE); break; | ||
+ | case 7 : lc.setRow(0, row, 0xFF); break; | ||
+ | } | ||
+ | } | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | ||
</note> | </note> | ||
- | ===== Jurnal ===== | + | ===== Rezultate Obţinute ===== |
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | Rezultatul obținut în urma realizării proiectului este un transmițător audio Bluetooth funcțional care poate fi folosit cu orice boxă cu input RCA și voltaj de referință -10dBv. |
</note> | </note> | ||
- | ===== Bibliografie/Resurse ===== | + | ===== Concluzii ===== |
- | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
- | </note> | ||
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | + | <note tip> |
+ | |||
+ | |||
+ | Să faci un proiect Arduino când este criză de semiconductori global, nu este distractiv. | ||
+ | |||
+ | </note> | ||