This shows you the differences between two versions of the page.
pm:prj2023:tmiu:decibelmeter [2023/05/07 21:02] mircea.hristea [Hardware Design] |
pm:prj2023:tmiu:decibelmeter [2023/05/29 17:50] (current) mircea.hristea [Concluzii] |
||
---|---|---|---|
Line 10: | Line 10: | ||
Utilizam un modul microfon pentru captarea sunetului si o placuta Arduino Uno R3 pentru procesarea lui, in functie de intensitatea sunetului se va aprinde secvential un ansamblu de leduri si se va transmite valoarea in dB unui ecran LCD. | Utilizam un modul microfon pentru captarea sunetului si o placuta Arduino Uno R3 pentru procesarea lui, in functie de intensitatea sunetului se va aprinde secvential un ansamblu de leduri si se va transmite valoarea in dB unui ecran LCD. | ||
- | {{:pm:prj2023:tmiu:diagrama.png?200|}} | + | {{:pm:prj2023:tmiu:diagrama.png?300x200}} |
</note> | </note> | ||
Line 17: | Line 17: | ||
<note tip> | <note tip> | ||
- | Piese utilizate(subject to changes): | + | **Componente utilizate:** |
*Arduino Uno R3 | *Arduino Uno R3 | ||
*Breadboard | *Breadboard | ||
*LEDs | *LEDs | ||
- | *Rezistente | + | *Cabluri |
+ | *Rezistente | ||
*Modul microfon | *Modul microfon | ||
*Display LCD | *Display LCD | ||
+ | **Schema hardware:**\\ | ||
+ | {{:pm:prj2023:tmiu:decibelmeter_hw_scheme.png?500x300}} | ||
</note> | </note> | ||
Line 31: | Line 34: | ||
<note tip> | <note tip> | ||
- | **work in progress** | + | <file c++> |
+ | #include <Wire.h> | ||
+ | #include <LiquidCrystal_I2C.h> | ||
+ | LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); | ||
+ | |||
+ | const int sampleWindow = 50; | ||
+ | unsigned int sample; | ||
+ | |||
+ | #define SENSOR_PIN A0 | ||
+ | #define PIN_QUIET1 3 | ||
+ | #define PIN_QUIET2 4 | ||
+ | #define PIN_MODERATE1 5 | ||
+ | #define PIN_MODERATE2 6 | ||
+ | #define PIN_LOUD1 7 | ||
+ | #define PIN_LOUD2 8 | ||
+ | |||
+ | void setup () | ||
+ | { | ||
+ | pinMode (SENSOR_PIN, INPUT); | ||
+ | pinMode(PIN_QUIET1, OUTPUT); | ||
+ | pinMode(PIN_QUIET2, OUTPUT); | ||
+ | pinMode(PIN_MODERATE1, OUTPUT); | ||
+ | pinMode(PIN_MODERATE2, OUTPUT); | ||
+ | pinMode(PIN_LOUD1, OUTPUT); | ||
+ | pinMode(PIN_LOUD2, OUTPUT); | ||
+ | |||
+ | digitalWrite(PIN_QUIET1, LOW); | ||
+ | digitalWrite(PIN_QUIET2, LOW); | ||
+ | digitalWrite(PIN_MODERATE1, LOW); | ||
+ | digitalWrite(PIN_MODERATE2, LOW); | ||
+ | digitalWrite(PIN_LOUD1, LOW); | ||
+ | digitalWrite(PIN_LOUD2, LOW); | ||
+ | |||
+ | |||
+ | |||
+ | lcd.backlight(); | ||
+ | delay(20); | ||
+ | lcd.init(); | ||
+ | } | ||
+ | |||
+ | |||
+ | void loop () | ||
+ | { | ||
+ | unsigned long startMillis= millis(); | ||
+ | float peakToPeak = 0; | ||
+ | |||
+ | unsigned int signalMax = 0; | ||
+ | unsigned int signalMin = 1024; | ||
+ | |||
+ | |||
+ | while (millis() - startMillis < sampleWindow) | ||
+ | { | ||
+ | sample = analogRead(SENSOR_PIN); | ||
+ | if (sample < 1024) | ||
+ | { | ||
+ | if (sample > signalMax) | ||
+ | { | ||
+ | signalMax = sample; | ||
+ | } | ||
+ | else if (sample < signalMin) | ||
+ | { | ||
+ | signalMin = sample; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | peakToPeak = signalMax - signalMin; | ||
+ | int db = map(peakToPeak,0,500,28,85); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("Loudness: "); | ||
+ | lcd.print(db); | ||
+ | lcd.print("dB"); | ||
+ | if(db <= 30){ | ||
+ | digitalWrite(PIN_QUIET1, LOW); | ||
+ | digitalWrite(PIN_QUIET2, LOW); | ||
+ | digitalWrite(PIN_MODERATE1, LOW); | ||
+ | digitalWrite(PIN_MODERATE2, LOW); | ||
+ | digitalWrite(PIN_LOUD1, LOW); | ||
+ | digitalWrite(PIN_LOUD2, LOW); | ||
+ | } | ||
+ | |||
+ | else if (db > 30 && db < 35) | ||
+ | { | ||
+ | digitalWrite(PIN_QUIET1, HIGH); | ||
+ | digitalWrite(PIN_QUIET2, LOW); | ||
+ | digitalWrite(PIN_MODERATE1, LOW); | ||
+ | digitalWrite(PIN_MODERATE2, LOW); | ||
+ | digitalWrite(PIN_LOUD1, LOW); | ||
+ | digitalWrite(PIN_LOUD2, LOW); | ||
+ | } | ||
+ | |||
+ | else if (db >= 35 && db < 40) | ||
+ | { | ||
+ | digitalWrite(PIN_QUIET1, HIGH); | ||
+ | digitalWrite(PIN_QUIET2, HIGH); | ||
+ | digitalWrite(PIN_MODERATE1, LOW); | ||
+ | digitalWrite(PIN_MODERATE2, LOW); | ||
+ | digitalWrite(PIN_LOUD1, LOW); | ||
+ | digitalWrite(PIN_LOUD2, LOW); | ||
+ | } | ||
+ | |||
+ | else if (db >= 40 && db < 45) | ||
+ | { | ||
+ | digitalWrite(PIN_QUIET1, HIGH); | ||
+ | digitalWrite(PIN_QUIET2, HIGH); | ||
+ | digitalWrite(PIN_MODERATE1, HIGH); | ||
+ | digitalWrite(PIN_MODERATE2, LOW); | ||
+ | digitalWrite(PIN_LOUD1, LOW); | ||
+ | digitalWrite(PIN_LOUD2, LOW); | ||
+ | } | ||
+ | |||
+ | else if (db >= 45 && db < 50) | ||
+ | { | ||
+ | digitalWrite(PIN_QUIET1, HIGH); | ||
+ | digitalWrite(PIN_QUIET2, HIGH); | ||
+ | digitalWrite(PIN_MODERATE1, HIGH); | ||
+ | digitalWrite(PIN_MODERATE2, HIGH); | ||
+ | digitalWrite(PIN_LOUD1, LOW); | ||
+ | digitalWrite(PIN_LOUD2, LOW); | ||
+ | } | ||
+ | else if (db >= 50 && db < 60) | ||
+ | { | ||
+ | digitalWrite(PIN_QUIET1, HIGH); | ||
+ | digitalWrite(PIN_QUIET2, HIGH); | ||
+ | digitalWrite(PIN_MODERATE1, HIGH); | ||
+ | digitalWrite(PIN_MODERATE2, HIGH); | ||
+ | digitalWrite(PIN_LOUD1, HIGH); | ||
+ | digitalWrite(PIN_LOUD2, LOW); | ||
+ | |||
+ | } | ||
+ | |||
+ | else if (db >= 65) | ||
+ | { | ||
+ | digitalWrite(PIN_QUIET1, HIGH); | ||
+ | digitalWrite(PIN_QUIET2, HIGH); | ||
+ | digitalWrite(PIN_MODERATE1, HIGH); | ||
+ | digitalWrite(PIN_MODERATE2, HIGH); | ||
+ | digitalWrite(PIN_LOUD1, HIGH); | ||
+ | digitalWrite(PIN_LOUD2, HIGH); | ||
+ | |||
+ | } | ||
+ | |||
+ | delay(200); | ||
+ | lcd.clear(); | ||
+ | } | ||
+ | </file> | ||
+ | |||
+ | Dezvoltat folosind Arduino IDE, am utilizat "Wire.h" si "LiquidCrystal_I2C" pentru interactiunea cu ecranul LCD. | ||
</note> | </note> | ||
Line 37: | Line 187: | ||
<note tip> | <note tip> | ||
- | **work in progress** | + | Realizarea unui decibelmetru functional, usor de folosit, capabil sa lucreze in intervale de sunet uzuale (30dB-65dB). |
</note> | </note> | ||
Line 49: | Line 199: | ||
<note tip> | <note tip> | ||
- | Finished initial doc. (5/6/2023) | + | Finished initial doc. (5/6/2023) \\ |
+ | Added hardware schematic and source code of the project. (5/26/2023) | ||
</note> | </note> | ||