Seltsames Problem mit ADXL345, Buzzer und Arduino

Ich habe eine serielle Schnittstelle über ein Bluetooth-Modul (HC05) eingerichtet. Ich verwende eine JavaFX-App, die ich geschrieben habe, um die serielle Schnittstelle zu lesen, die Beschleunigungswerte (über ADXL345) aufzuzeichnen und ein Alarmbit (1 für EIN und 0 für AUS) an die serielle Schnittstelle zurückzuschreiben, wenn eine bestimmte Funktion von accelX erreicht wird über einen Wert.

Das Seltsame ist, wenn Arduino das ON-Bit erkennt und den Summer einschaltet, werden meine Beschleunigungswerte ziemlich laut! Ich habe meine Codes sowohl auf der Arduino-Seite als auch auf der Java-Seite überprüft und konnte kein Problem finden.

Dann habe ich eine LED anstelle des Summers eingesetzt und zu meiner Überraschung eingeschaltet, ohne die Beschleunigung zu beeinträchtigen. Lesungen !!

Ich weiß wirklich nicht, was das Problem mit dem Summer ist. Kann jemand helfen?

Hier ist mein Verdacht:
Ich verwende ein Breakout-Board für ADXL345. Ich bin mir nicht sicher, ob es 5 Volt verträgt. Ich habe die 3,3 Volt von Uno an die Vcc angeschlossen und verwende I2C für die Kommunikation. (mit zwei 4,7-k-Pull-up-Widerständen, die zwischen den SDA- und SCL-Pins und den 3,3 V von Uno angeschlossen sind).
Könnte es sein, dass der Summer beim Einschalten irgendwie so viel Strom zieht, dass diese Pull-up-Widerstände gestört werden?

Hier ist das Foto meines Setups (die untere rote Linie ist 3,3 V und die obere rote Linie ist 5 Volt, beide kommen von Uno. Alle Erdungen sind miteinander verbunden):

mein SchaltungsaufbauUnd hier sind die Messwerte von Accels. im LEERLAUF:
IDLE-Modus Java

Und ich bekomme diese Messwerte aus der seriellen Schnittstelle:

Dump der seriellen Schnittstelle

Aber immer wenn ich das Steckbrett neige (Grenze für den Alarm beträgt 20 Grad), piept es korrekt, aber aufgrund lauter Beschleunigungen startet, stoppt und startet der Summer in einem zufälligen Muster:

Summerstörung bei den Messwerten des ADXL345

Ich vermute, dass der Summer einige Probleme verursacht. Vibrations- oder EM-Rauschen. Die Tatsache, dass eine LED dieses Problem nicht verursacht, unterstützt diese Idee, da die LED eine statische Ein / Aus-Situation ist, während der Summer das Geräusch durch physische Bewegung erzeugt, die durch ein sich änderndes elektrisches Feld verursacht wird. Da sich alles auf derselben Steckplatine befindet, würde ich sagen, schließen Sie den Summer an eine andere Platine an (oder lassen Sie ihn einfach an einigen fliegenden Kabeln aus) und sehen Sie, was nach dem Isolieren der physischen Vibrationen passiert.
@Puffafish Ja! Ich hielt den Summer über Luft, indem ich ein Signalkabel daran klebte, und er piept kontinuierlich mit wenig (oder keinem) Einfluss auf die Beschleunigungswerte! Es ist sehr seltsam, wie ein so billiges und bescheidenes Teil elektromagnetische Störungen hervorrufen kann! Ist es wirklich mechanisch oder EM? Danke
@Puffafish Und wie kann ich seine Auswirkungen unterdrücken?
Ich habe versucht, es in meiner Antwort unten zu erklären.

Antworten (1)

Um meinen Kommentar zu erweitern:

Dies könnte leicht am Summer selbst liegen: entweder physische Vibration oder EM-Rauschen. Die Tatsache, dass der Summer durch eine LED ersetzt wird, unterstützt dies, da die LED keine physische Bewegung erzeugt und eine schöne konstante Strommenge zieht. Da sich der Summer auf der gleichen Steckplatine wie die LED befindet, ist er mechanisch fest mit dem Sensor verbunden und gleichzeitig elektrisch nah, und daher ist es schwierig zu sagen, was aus physikalischem oder EM-Rauschen wahrscheinlicher ist (meine Vermutung wäre physikalisch Bewegung, die leichter zu verursachen und leichter zu heilen ist).

Um zu bestätigen, dass es der Summer ist, der das Problem verursacht, würde ich empfehlen, den Summer über einige fliegende Kabel anzuschließen. Dadurch wird der Summer mechanisch vom Sensor getrennt. Wenn der Test wiederholt wird und der Sensor nicht den "komischen" Messwert liefert, den Sie jetzt sehen, ist die mechanische Bewegung des Summers die Ursache. Die Abhilfe dafür ist dann einfach: Isolieren Sie den Summer mechanisch vom Sensor (stecken Sie den einen oder anderen oder beide auf fliegende Kabel). Wenn Sie dies für Ihre Anwendung nicht tun können, können Sie entweder das Summersignal dämpfen (mit Gummihalterungen) oder Ihre Software ändern, um das Rauschen herauszufiltern (was häufig durch Oversampling und Mittelwertbildung geschieht Daten).

Sie haben auf meinen Kommentar geantwortet, dass die fliegenden Kabel das Problem beheben, also haben Sie jetzt verschiedene Möglichkeiten: Mechanisch: Isolieren Sie den Summer auf beliebige Weise vom Sensor (Kabel, Gummihalterungen) Software: Abtasten Sie die Daten und filtern Sie sie heraus sich schnell ändernde Werte (die Mittelung über einen bestimmten Zeitraum ist am einfachsten) Hardware: Verwenden Sie einen anderen Sensor, der mit einer langsameren Rate abtastet (so dass die Bewegung nicht vom Summer erfasst werden kann). Wenn Sie einen anderen Sensor mit einem analogen Ausgang verwenden, können Sie den Ausgang mit einem einfachen Kondensator filtern.

Da dies hauptsächlich ein Softwareprojekt zu sein scheint, würde ich mich für einen einfachen Softwarefilter entscheiden. Die Spezifikationen davon hängen von Ihrer Anwendung ab; Reaktionsgeschwindigkeit auf Änderungen, gewünschte schnelle Änderung usw. Abhängig von Ihrer Anwendung können Sie mit dem Filtern viel erreichen, indem Sie Folgendes verwenden: Mittelung, Änderungsrate, Frequenzanpassung, Entprellung.