This is an old revision of the document!


Sound Sistem

Introducere

Descriere Generală Proiectul este un sistem de lumini controlat de un microcontroler Arduino, conceput pentru a răspunde la sunet. Sistemul este ideal pentru utilizarea în scenografii, spectacole sau decoruri interactive, unde lumina trebuie să fie sincronizată cu muzica sau alte sunete ambientale.

Componente Utilizate Arduino Uno: Platforma principală pentru controlul tuturor componentelor. LED-uri: Iluminare de bază, care se aprinde și se stinge în funcție de sunet. Matrice de LED-uri MAX7219: Display grafic pentru a crea diverse efecte luminoase. Diodă Laser: Efect vizual suplimentar pentru a accentua răspunsul la sunet. Rezistoare: Protejează LED-urile și asigură funcționarea corectă a circuitelor. Senzor de Sunet: Detectează sunetele ambientale și trimite semnalul către Arduino. Fire de Conexiune și Breadboard: Pentru realizarea conexiunilor electrice.

Descriere generală

Senzor de Sunet -Detectează variațiile acustice din mediul înconjurător și trimite semnale digitale către Arduino.

Arduino: -Primește semnalul de la senzorul de sunet și controlează toate componentele luminoase (LED-uri, dioda laser și matricea de LED-uri MAX7219) în funcție de sunetul detectat.

LED-uri: -LED-urile sunt conectate la pini digitali ai Arduino și se aprind sau se sting în funcție de sunet.

Diodă Laser: -Conectată la un pin digital al Arduino, se activează în funcție de sunet, oferind un efect vizual suplimentar.

Matrice de LED-uri MAX7219: -Conectată la Arduino, afișează diferite animații și efecte luminoase sincronizate cu sunetul detectat.

Hardware Design

Componente Utilizate Arduino Uno: Platforma principală pentru controlul tuturor componentelor. LED-uri: Iluminare de bază, care se aprinde și se stinge în funcție de sunet. Matrice de LED-uri MAX7219: Display grafic pentru a crea diverse efecte luminoase. Diodă Laser: Efect vizual suplimentar pentru a accentua răspunsul la sunet. Rezistoare: Protejează LED-urile și asigură funcționarea corectă a circuitelor. Senzor de Sunet: Detectează sunetele ambientale și trimite semnalul către Arduino. Fire de Conexiune și Breadboard: Pentru realizarea conexiunilor electrice.

botea2.pdf

Software Design

Design Software pentru Sistemul de Lumini Responsiv la Sunet Mediul de Dezvoltare Mediul de dezvoltare folosit pentru acest proiect este Arduino IDE, care oferă o platformă ușor de utilizat pentru scrierea, compilarea și încărcarea codului pe placa Arduino Uno.

Biblioteci și Surse Terțe Biblioteca LedControl: Folosită pentru a controla matricea de LED-uri MAX7219, simplificând comunicarea și oferind funcții pentru controlul LED-urilor individuale sau a rândurilor/coloanelor întregi.

#include <LedControl.h> #include <Parola.h> Algoritmi și Structuri Algoritmul de bază implică citirea valorilor analogice de la senzorul de sunet, compararea acestora cu pragurile predefinite și controlul componentelor de iluminat pe baza acestei comparații. Codul este structurat în jurul funcțiilor setup și loop.

Inițializare: În funcția setup, toate componentele necesare sunt inițializate, inclusiv stabilirea modurilor de pini pentru LED-uri și matricea MAX7219, precum și inițializarea comunicării seriale pentru depanare.

Bucle Principale: Funcția loop citește continuu valorile senzorului și controlează LED-urile și matricea de LED-uri pe baza acestor citiri.

Funcții Implementate și Descrierea Codului Inițializare și Setare

#include <Arduino.h> #include <LedControl.h>

#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978

#define NOTE_REST 0 #define REST 0

Constants for pin numbers const int DO = 10; Pin for Digital Output - DO const int DA = A0; Pin for Analog Output - AO const int threshold = 527; Set minimum threshold for LED lit const int thresholdMatrix = 527; Set minimum threshold for MATRIX lit const int buttonPin = 9; Pin for button const int buzzerPin = 8; Pin for buzzer using digital pin 8 const int ledPins[] = {2, 3, 4, 5, 7, 11}; Array of LED pins, excluding pin 9 and 8

int sensorValue = 0; bool buttonState = HIGH; Variable to hold the last button state LedControl lc = LedControl(12, 13, 6, 1); Pins: DataIn, CLK, LOAD, numDevices

int melody[] = {

NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, REST,
NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, REST,
NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, REST,
NOTE_A4, NOTE_G4, NOTE_A4, REST,

NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, REST,
NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, REST,
NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, REST,
NOTE_A4, NOTE_G4, NOTE_A4, REST,

NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, REST,
NOTE_A4, NOTE_C5, NOTE_D5, NOTE_D5, REST,
NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, REST,
NOTE_E5, NOTE_D5, NOTE_E5, NOTE_A4, REST,

NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, REST,
NOTE_D5, NOTE_E5, NOTE_A4, REST,
NOTE_A4, NOTE_C5, NOTE_B4, NOTE_B4, REST,
NOTE_C5, NOTE_A4, NOTE_B4, REST,

NOTE_A4, NOTE_A4,
//Repeat of first part
NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, REST,
NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, REST,
NOTE_A4, NOTE_G4, NOTE_A4, REST,

NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, REST,
NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, REST,
NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, REST,
NOTE_A4, NOTE_G4, NOTE_A4, REST,

NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, REST,
NOTE_A4, NOTE_C5, NOTE_D5, NOTE_D5, REST,
NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, REST,
NOTE_E5, NOTE_D5, NOTE_E5, NOTE_A4, REST,

NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, REST,
NOTE_D5, NOTE_E5, NOTE_A4, REST,
NOTE_A4, NOTE_C5, NOTE_B4, NOTE_B4, REST,
NOTE_C5, NOTE_A4, NOTE_B4, REST,
//End of Repeat

NOTE_E5, REST, REST, NOTE_F5, REST, REST,
NOTE_E5, NOTE_E5, REST, NOTE_G5, REST, NOTE_E5, NOTE_D5, REST, REST,
NOTE_D5, REST, REST, NOTE_C5, REST, REST,
NOTE_B4, NOTE_C5, REST, NOTE_B4, REST, NOTE_A4,

NOTE_E5, REST, REST, NOTE_F5, REST, REST,
NOTE_E5, NOTE_E5, REST, NOTE_G5, REST, NOTE_E5, NOTE_D5, REST, REST,
NOTE_D5, REST, REST, NOTE_C5, REST, REST,
NOTE_B4, NOTE_C5, REST, NOTE_B4, REST, NOTE_A4

};

int durations[] = {

8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 4, 8,

8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 4, 8,

8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 8, 4, 8,

8, 8, 4, 8, 8,
4, 8, 4, 8,
8, 8, 4, 8, 8,
8, 8, 4, 4,

4, 8,
//Repeat of First Part
8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 4, 8,

8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 4, 8,

8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 4, 8, 8,
8, 8, 8, 4, 8,

8, 8, 4, 8, 8,
4, 8, 4, 8,
8, 8, 4, 8, 8,
8, 8, 4, 4,
//End of Repeat

4, 8, 4, 4, 8, 4,
8, 8, 8, 8, 8, 8, 8, 8, 4,
4, 8, 4, 4, 8, 4,
8, 8, 8, 8, 8, 2,

4, 8, 4, 4, 8, 4,
8, 8, 8, 8, 8, 8, 8, 8, 4,
4, 8, 4, 4, 8, 4,
8, 8, 8, 8, 8, 2

};

Melody notes and durations int melody[] = { NOTE_REST, NOTE_D4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5, NOTE_A4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_GS4, NOTE_D4, NOTE_D4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_F5, NOTE_E5, NOTE_DS5, NOTE_B4, NOTE_DS5, NOTE_D5, NOTE_CS5, NOTE_CS4, NOTE_B4, NOTE_G4, NOTE_AS4, NOTE_D5, NOTE_AS4, NOTE_D5, NOTE_AS4, NOTE_DS5, NOTE_D5, NOTE_CS5, NOTE_A4, NOTE_AS4, NOTE_D5, NOTE_CS5, NOTE_CS4, NOTE_D4, NOTE_D5, NOTE_REST, NOTE_AS4, NOTE_D5, NOTE_AS4, NOTE_D5, NOTE_AS4, NOTE_F5, NOTE_E5, NOTE_DS5, NOTE_B4, NOTE_DS5, NOTE_D5, NOTE_CS5, NOTE_CS4, NOTE_AS4, NOTE_G4 }; int durations[] = { 2, 4, 4, 8, 4, 2, 4, 2, 2, 4, 8, 4, 2, 4, 1, 4, 4, 8, 4, 2, 4, 2, 4, 2, 4, 4, 8, 4, 2, 4, 1, 4, 2, 4, 2, 4, 2, 4, 2, 4, 4, 8, 4, 2, 4, 1, 4, 4, 2, 4, 2, 4, 2, 4, 2, 4, 4, 8, 4, 2, 4, 1 }; void setup() { Serial.begin(9600); Initialize the MAX7219

lc.shutdown(0, false);  // Wake up displays
lc.setIntensity(0, 8);  // Set intensity level (0 is min, 15 is max)
lc.clearDisplay(0);     // Clear display register

// Set all LED pins to OUTPUT mode, excluding pin 9 and 8
for (int ledPin : ledPins) {
  pinMode(ledPin, OUTPUT);
}

// Set button pin to INPUT_PULLUP mode
pinMode(buttonPin, INPUT_PULLUP);
// Set buzzer pin to OUTPUT mode
pinMode(buzzerPin, OUTPUT);

}

void loop() {

sensorValue = analogRead(DA);
Serial.print("Analog: ");
Serial.print(sensorValue);  // Print the analog value
Serial.print("  ");
Serial.print("Digital: ");
Serial.println(digitalRead(DO));  // Print the digital value
if (sensorValue >= threshold) { // Compare analog value with threshold
  setAllLeds(HIGH);
} else {
  setAllLeds(LOW);
}
if (sensorValue >= thresholdMatrix) {
  lightUpMatrix();
} else {
  lc.clearDisplay(0);
}

// Check if the button is pressed
bool currentButtonState = digitalRead(buttonPin);
if (currentButtonState == LOW && buttonState == HIGH) { // Button press detected
  Serial.println("Button pressed!");
  playMelody(); // Play the melody
}
buttonState = currentButtonState; // Update button state

}

void setAllLeds(int state) {

for (int ledPin : ledPins) {
  digitalWrite(ledPin, state);
}

}

void lightUpMatrix() {

for (int i = 0; i < 8; i++) {
  lc.setRow(0, i, B11111111); // Light up all LEDs in the row
}

}

void playMelody() {

for (int i = 0; i < sizeof(melody) / sizeof(melody[0]); i++) {
  int duration = 1000 / durations[i];
  tone(buzzerPin, melody[i], duration);
  delay(duration * 1.3); // Pause between notes
  noTone(buzzerPin);
}

}

În funcția loop, valoarea senzorului este citită folosind analogRead(), iar valoarea este afișată pe monitorul serial. Dacă valoarea senzorului depășește pragul predefinit, toate LED-urile sunt aprinse, iar matricea MAX7219 afișează un model. Dacă valoarea este sub prag, LED-urile și matricea sunt stinse.

===== Rezultate Obţinute =====

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

===== Concluzii =====

===== Download =====

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ă ;-).

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.

===== Jurnal =====

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

===== Bibliografie/Resurse =====

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

pm/prj2024/avaduva/stefan.botea.1716764646.txt.gz · Last modified: 2024/05/27 02:04 by stefan.botea
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