Geräuschsensor gibt konstant Werte um ca. 410 aus


#1

Hallo zusammen,

Die Sensebox:edu funktioniert soweit super, bei dem Geräuschsensor gibt es jedoch Probleme.
Es geht um das Mic-Breakout von watterott.com.

Ich habe den Sensor nach Anleitung eingesteckt und dazu den passenden Code geschrieben (https://sensebox.github.io/books-v2/edu/de/projekte/Lauschangriff.html) .

Problem: Der Wert der ausgegeben wird liegt bei 410 und schwankt um maximal ± 2: selbst wenn ich den Sensor beschalle (bsp durch Klatschen, laute Musik in der Nähe des
Sensors).
Ziehe ich das Kabel bei “OUT” raus, schwanken die Werte um 510 ± 5. Hier habe ich das Gefühl, dass die Werte bei Beschallung stärker um 510 schwanken, nie jedoch um mehr als ± 20.
Sind das die richtigen Werte oder könnte der Sensor kaputt sein?

Viele Grüße,
Mat


#2

Hey Mat,

ich baue dein Setup gleich mal nach und schaue wo das Problem liegen könnte :slight_smile: Kannst du hier noch deinen Code und ein Foto vom Aufbau der senseBox MCU und des Geräuschesensors posten?
Hast du den Code in der Arduino IDE geschrieben oder mit Blockly erstellt?

Beste Grüße
Benni


#3

Hallo Benni,

Ich habe den Code einmal in der Arduino IDE geschrieben und einmal in Blockly erstellt.
Den “OUT” des Lautstärkemessers habe ich am Digital Port 1 angestöpselt.

Blockly mit LED- Display:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <senseBoxIO.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

void setup() {
senseBoxIO.powerI2C(true);
delay(2000);
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display.display();
delay(100);
display.clearDisplay();
}

void loop() {
display.setCursor(0,0);
display.setTextSize(1);
display.setTextColor(WHITE,BLACK);
display.println((String("") + String(analogRead(A1))));
display.display();
}

##############################################################

Arduino IDE mit Ausgabe am seriellen Monitor:

int micValue = 0;
int mic = 1; // angesteckt am Port 1

void setup(){
Serial.begin(9600);
pinMode(mic,INPUT);
}

void loop(){
micValue = analogRead(mic);
Serial.println(micValue);
}


#4

Moin zusammen,

bei der Verwendung des Micros ist darauf zu achten, dass dieser nur einen analogen Pegel ausgibt. Dabei kannst du zwischen lauter und leiser unterscheiden, allerdings wird der Wert in keiner physikalischen Messeinheit wie Dezibel angegeben.
Anstatt die Werte über den seriellen Monitor anzuschauen, versucht doch mal den seriellen Plotter zu benutzen. Den findet ihr in der Arduino IDE unter Werkzeuge -> Serieller Plotter. Dabei werdet ihr feststellen, dass nicht der Peak sondern die Amplitude ausschlaggebend ist für die Bestimmung des Pegels. Wenn ihr daraus eine Skala entwickeln wollt müsst ihr euch den Betrag zwischen Maximum und Minimum der Amplitude anschauen.

Viele Grüße
Jan


#5

Hallo zusamen,

wir haben das gleiche “Problem” mit unserem Mikro. Allerdings bekommen wir Werte um 8000 ausgegeben. Wir arbeiten nur mit Blockly und nutzen den angegebenen Block. Hättest du da auch eine Lösung für uns?

Liebe Grüße,
Steffi


#6

Moinsen,

vorausgesetzt dass ihr das Micro am Anschluss A1 gehängt habt sieht eine mögliche Lösung so aus:

Dabei gibt die Variable integral die Anzahl der Schleifendurchläufe an bzw. die Integrationszeit der Messung an.

Schöne Grüße
Jan


#7

Hallo,
wir haben es gerade genauso ausprobiert. Wir haben lediglich uns die Werte auf dem Display anzeigen lassen.Trotzdem bekommen wir zufällige Werte beim lauten Reinsprechen oder Stille. Was kann da nicht stimmen?
Liebe Grüße
Steffi


#8

Könntest du ein Foto von deinem Hardwaresetup posten?


#9

Hallo Jan,
hier die Fotos. Entdeckst du da einen Fehler?


#10

Die Verkabelung sieht soweit gut aus. Allerdings nutzt ihr da den Anschluss A2 und nicht, wie in meinem Beispiel, den Anschluss A1.
Auf der Rückseite des Sensors ist übrigens eine kleine Stellschraube mit der der Sensor Kalibriert werden kann.

Teste das nochmal und wenn es nach wie vor nicht klappt dann tauschen wir das Micro aus.

VG Jan