Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:iotelea:stefan_paul.buracu [2024/05/26 02:47]
stefan_paul.buracu
pm:prj2024:iotelea:stefan_paul.buracu [2024/05/27 00:17] (current)
stefan_paul.buracu
Line 76: Line 76:
   * Mediul de dezvoltare: Arduino IDE.   * Mediul de dezvoltare: Arduino IDE.
   * Bibloteci folosite: SD, TMRpcm, FastLED, SPI   * Bibloteci folosite: SD, TMRpcm, FastLED, SPI
-  * Sursele mele: apollo_part_BuracuStefan331CB+  * Sursele mele: apollo_party_BuracuStefan331CB
 </​note>​ </​note>​
 ==== Implementare:​ ==== ==== Implementare:​ ====
-<note tip> 
 Pentru inceput am incarcat cantece pe cardul microSD in formatul .wav cu specificatiile:​ Pentru inceput am incarcat cantece pe cardul microSD in formatul .wav cu specificatiile:​
   * rate: 16000 Hz   * rate: 16000 Hz
   * audio channels: mono   * audio channels: mono
   * format: PCM unsigned 8-bit   * format: PCM unsigned 8-bit
-</note>+**Variabile globale** 
 +<code c> 
 +#include <​SD.h> ​          // biblioteca pentru cardul SD 
 +#include <​TMRpcm.h> ​      // biblioteca pentru controlul difuzorului 
 +#include <​FastLED.h> ​     // biblioteca pentru banda LED 
 +#include <​SPI.h>​ 
 + 
 +// LED STRIP 
 +#define LED_PIN ​    8 
 +#define NUM_LEDS ​   10 
 +#define LED_TYPE ​   WS2812B 
 +#define COLOR_ORDER GRB 
 +CRGB leds[NUM_LEDS];​ 
 +int pause_nr = 1; 
 +uint8_t start_rainbow = 0; 
 + 
 +// SD 
 +#define SD_ChipSelectPin 4   // pinul de selectie a cipului pentru cardul SD 
 +TMRpcm tmrpcm; ​ // un obiect pentru biblioteca TMRpcm 
 +int temp = 1; // variabila pentru selectarea cantecului 
 +// butoane 
 +int prev = 5; 
 +int pause = 6; 
 +int next = 7; 
 + 
 +// senzor sunet 
 +#define sensorPin A0 
 +// valori de calcul 
 +float sensorValue = 0, filteredSignal = 0; 
 +float filteredSignalValues[] = {5.3, 5.2, 5.1, 5.05, 5.0, 4.95, 4.9, 4.85, 4.8, 4.6, 4.4, 4.2, 4.0, 3.7, 3.4, 3.1, 2.7, 2.4, 2.0, 1.6, 1.2, 0.8, 0.4, 0.20, 0.19, 0.18, 0.17, 0.16, 0.15, 0.14, 0.13}; 
 + 
 +</​code>​ 
 +**Functii** 
 +  * 1. //​setup()://​ 
 +Defineste ledurile, configureaza pinii pentru butoane, pinul pentru difuzor, face verificarile pentru cardul microSD, seteaza volumul pentru muzica, verifica daca exista primul cantec si da play la acesta. 
 +<code c> 
 +void setup() { 
 +  delay(2000);​ 
 +  // initializare banda LED 
 +  FastLED.addLeds<​LED_TYPE,​ LED_PIN, COLOR_ORDER>​(leds,​ NUM_LEDS);​ 
 +  FastLED.setBrightness(50);​ 
 +  // butoane 
 +  pinMode(pause,​ INPUT_PULLUP);​ 
 +  pinMode(next,​ INPUT_PULLUP);​ 
 +  pinMode(prev,​ INPUT_PULLUP);​ 
 + 
 +  tmrpcm.speakerPin = 9;  // pin pentru difuzor 
 +  Serial.begin(9600); ​    // serial communication 
 + 
 +  Serial.print("​Initializing SD card..."​);​ 
 +  if (!SD.begin(SD_ChipSelectPin)) {  // incerc sa citesc cardul SD 
 +    Serial.println("​Card failed, or not present"​);​ 
 +    return; ​ // return daca nu il gaseste 
 +  } 
 +  Serial.println("​SD card initialized."​);​ 
 +  char song[] = "​song1.wav";​ 
 +  // verifica daca am cantec 
 +  if (SD.exists(song)) { 
 +    Serial.println("​File exists."​);​ 
 +  } else { 
 +    Serial.println("​File does not exist."​);​ 
 +  } 
 + 
 +  // setez volum (0 to 7) 
 +  tmrpcm.setVolume(6);​ 
 + 
 +  // play song 
 +  tmrpcm.play(song);​ 
 +  if (tmrpcm.isPlaying()) { 
 +    Serial.println("​The sound is playing."​);​ 
 +  } else { 
 +    Serial.println("​The sound is not playing."​);​ 
 +  } 
 +
 +</​code>​ 
 +  * 2. //​FilterSignal(float sensorSignal)://​ 
 +Calculeaza valoarea semnalului in functie de un semnal de la senzor 
 +<code c> 
 +// functie calculat semnal 
 +void FilterSignal(float sensorSignal) { 
 +  filteredSignal = (0.8 * filteredSignal) + (0.04995 * sensorSignal);​ 
 +
 +</​code>​ 
 +  * 3. //​CompareSignal(float filteredSignal)://​ 
 +Compara semnalul si decide in ce interval se afla acesta pentru a aprinde ledurile cu o culoare corespunzatoare 
 +<code c> 
 +// functie colorare banda LED in functie de semnal 
 +void CompareSignal(float filteredSignal) { 
 +  if (filteredSignal > filteredSignalValues[i]) { 
 +    fill_solid(leds,​ NUM_LEDS, CRGB::​COLOR_i);​ 
 +    FastLED.show();​ 
 +    delay(50);​ 
 +  } 
 +
 +</​code>​ 
 +  * 4. //song (void):// 
 +Alege la ce cantec sa dea play in functie de variabila temp 
 +<code c> 
 +// functie alegere cantec in functie de variabila temp 
 +void song (void) 
 +
 +  if (temp == i) 
 +  { 
 +    char song[] = "​song_i.wav";​ 
 +    tmrpcm.play(song);​ 
 +  } 
 +
 +</​code>​ 
 +  * 5. //​loop()://​ 
 +Aceasta functie are in vedere functionalitatea principala a programului dupa cum urmeaza: 
 +  * extrage semnalul senzorului in functie de ce aude 
 +  * foloseste functia de filtrare a semnalului 
 +  * verific daca butonul de pauza este apasat si aprind ledurile in model de curcubeu ce se deplaseaza atata timp cat e muzica oprita 
 +  * daca nu am pauza apelez functia de comparare a semnalului pentru a si aprinde ledurile dupa acest semnal 
 +  * daca am apasat butonul de pauza se opreste muzica 
 +  * daca am apasat butonul de next se incrementeaza temp si se apeleaza functia song pentru a da play la urmatorul cantec 
 +  * daca am apasat butonul de prev se decrementeaza temp si se apeleaza functia song pentru a da play la cantecul precedent 
 +<code c> 
 + 
 +void loop() { 
 +  // calculez o valoare pentru senzor 
 +  sensorValue = (float) analogRead(sensorPin) * (5.0 / 1024.0); 
 +  Serial.println(sensorValue);​ 
 +  FilterSignal(sensorValue);​ 
 +  // apelez functia pentru a aprinde banda LED in functie de semnal 
 +  if (pause_nr % 2 == 0) { 
 +    fill_rainbow(leds,​ NUM_LEDS, start_rainbow,​ 255/​NUM_LEDS);​ 
 +    FastLED.show();​ 
 +    delay(10);​ 
 +    start_rainbow ++; 
 +  } else{ 
 +    CompareSignal(filteredSignal);​ 
 +  } 
 +  // verific daca am apasat un buton 
 +  while (digitalRead(pause) == 0 || digitalRead(next) == 0 || digitalRead(prev) == 0) 
 +  { 
 +    // am dat pauza 
 +    if (digitalRead(pause) == 0) 
 +    { 
 +      pause_nr ++; 
 +      tmrpcm.pause();​ 
 +      while (digitalRead(pause) == 0); 
 +    } 
 +    // am dat next 
 +    else if (digitalRead(next) == 0) 
 +    { 
 +      if (temp < 20) { 
 +        temp = temp + 1; 
 +      } else { 
 +        temp = 1; 
 +      } 
 +      while (digitalRead(next) == 0); 
 +      song(); 
 +    } 
 +    // am dat prev 
 +    else if (digitalRead(prev) == 0) 
 +    { 
 +      if (temp > 1) { 
 +        temp = temp - 1; 
 +      } else { 
 +        temp = 20; // Set temp to the last song 
 +      } 
 +      while (digitalRead(prev) == 0); 
 +      song(); 
 +    } 
 +  } 
 +
 +</code>
  
 ===== Rezultate ===== ===== Rezultate =====
 +Am reusit sa imi acopar toate planificarile pentru acest proiect folosind concepte spi pentru card SD, transformare din semnal analogic in digital cu senzor dar si pwm cu leduri ;-)
 <​note>​ <​note>​
 Am atasat clipul: Am atasat clipul:
 +  * [[https://​drive.google.com/​file/​d/​13v_hs0RTp1iZvAQ_Inq0mK0wcsWTKSM7/​view?​usp=drive_link]]
 +  * [[https://​www.youtube.com/​watch?​v=v2Cs-0qUORs&​t=7s]]
 </​note>​ </​note>​
 ===== Concluzii ===== ===== Concluzii =====
 +Mi-a placut sa lucrez la acest proiect, chiar daca la inceput am avut dificultati legate de ce piese sa cumpar si cum sa le leg impreuna, dupa mult stres a aparut si satisfactia cand am vazut ca totul functioneaza si ma pot juca cu melodiile si ledurile. Desi am ars un arduino si un difuzor, nu m-a oprit nimic sa continui proiectul si sa merg mai departe m(. Am avut de munca cu tema culorilor alese pentru a reinterpreta globul original din apollo, dar eu spun ca am facut o treaba buna si acum il am si acasa :-P.
  
 ===== Download ===== ===== Download =====
-<​note>​Arhiva cu codul: </​note>​+<​note>​Arhiva cu codul: ​ 
 +{{:​pm:​prj2024:​iotelea:​apollo_party_buracustefan331cb.zip|}} 
 +</​note>​
  
 ===== Jurnal ===== ===== Jurnal =====
Line 101: Line 273:
   * 15 mai: Comandat alte piese   * 15 mai: Comandat alte piese
   * 17 mai: Hardware   * 17 mai: Hardware
 +  * 19 mai: Am scris cod pentru cardSD si cumva am reusit sa ard arduinoul 8-O
 +  * 20 mai: Am luat alt arduino si am confectionat castile pentru proiect in loc de difuzorul pe care il aveam initial in plan 
 +  * 21 mai: Am continuat codul si am reusit sa redau melodiile pe casti si sa adaug butoane
 +  * 22 mai: Am lucrat cu banda led si senzorul si le-am facut sa se aprinda in functie de acesta
 +  * 23 mai: Am adaugat aprinderea ledurilor in curcubeu atunci cand muzica e data pe pauza
 +  * 24 mai: Am mai retusat pagina de pe ocw
 </​note>​ </​note>​
  
Line 115: Line 293:
 </​note>​ </​note>​
  
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
  
pm/prj2024/iotelea/stefan_paul.buracu.1716680823.txt.gz · Last modified: 2024/05/26 02:47 by stefan_paul.buracu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0