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> | ||