Welcome to OpenDecibelMeter’s documentation!

Inhalt

Einleitung

Idee

Eine Android App zu entwickeln die mittels des eingebauten Micophones die Umgebungslautstärke in Dezibel misst.

Diese gesammelten Daten sollen in einer internen SQL Datenbank in ein Minuten Intervall gesichert werden, zusätzlich zu den Dezibel Wert soll auch die genaue Zeit & GPS Standort enthalten sein. Die Daten sollen anschließend in Dateiformat exportierbar sein, sodass andere Anwendungen darauf zugreifen können. Außerdem zur Visualisierung, sollen die Daten auch auf https://opensensemap.org/ hochgeladen werden können. Um die Daten auf https://opensensemap.org/ zu exportieren wird die Öffentliche API des Anbieters angesprochen: https://docs.opensensemap.org/

Umgesetzt wurde

Eine Android App die die Amplituden auschläge von den internen Micophonen misst, diese umrechnet in ein Dezibel Wert (db) und in der internen SQLite Datenbank speichert und live zur https://opensensemap.org/ mittels der REST API hochlädt. Außerdem ist es möglich die gemessenden Werte in einer csv Datei zu exportieren.

Die App alle 200 Millisekunden und berechnet aus 600 Messdaten ein Durchschnitt, welcher in der SQLite Datenbank gesichert wird & auf opensensemap pupliziert wird.

Software Design

Software Design

UI Elemente:

  • Login Form zur Opensensemap
  • User Profile für Opensensemap
  • Messbereich mit vergleichs Visualesierung der Lautstärke
  • Simple grafische Auswertung der Messwerte
  • Listenansicht aller gesicherten Werte mit löschfunktion

Integrierte Sprachen:

  • Englisch
  • Deutsch

Android App

Die Android App wurde mittels Android Studio 3.1.2 erstellt.

App Screenshot - Messbereich

App Screenshot - Messbereich

Opensensemap

Mittels https://opensensemap.org/ werden die gemessenden Daten visualesiert. Opensenemap ist ein OpenSource Projekt welches als Plattform für Sensordaten dient, es ist möglich eigene Sensordaten auf Opensensemap zu posten.

Opensensemap

Dokumentation

Die Dokumentation wurde mit Sphinx [29] erstellt und gehostet auf readthedocs.io und github.com.

Präsentation

Die Präsentation wurde in LibreOffice Impress erstellt und ist auf github.com gehostst.

Quickstart

Permission

Damit die Fehlerfrei funktioniert müssen alle Rechte der App aktiviert werden, dazu muss in Android über Settings -> App -> OpenDecibelMeter -> Permissions alle switches aktiviert werden.

App Screenshot - App-Info

App Screenshot - App-Info

App Screenshot - App-Rechte

App Screenshot - App-Rechte

Microphone

Da jedes Android Gerät unterschiedliche verbaute Microphone verwendet unterscheiden sich die gemessenden Werte von Gerät zu Gerät. Um dies bestmöglich aus zu gleichen ist es nötig das Gerät zu Kalibrieren, dazu muss in den Messbereich auf Gerät einstellen oder Calibrate Device geklickt werden.

App Screenshot - Messbereich

App Screenshot - Messbereich

Darauf erscheint ein weiterer Bereich wo sich ein Eingabetextfeld & ein Switch sich befindet, nach aktivieren des Switches wird die aktuelle Amplitude des Micophones gemessen, dies sollte an einen Ort getätigt werden, wo keine Geräusche sind.

Es ist auch möglich die Amplitude Manuell ein zu stellen, dafür muss auf der Zahl geklickt werden.

App Screenshot - Kalibrieren

App Screenshot - Kalibrieren

Nachdem die Amplitude eingestellt wurde, muss auf Sichere Amplitude bzw. save Amplitude geklickt werden.

Position bestimmen

Um die letzte bekannte Position des Gerätes automatisch zu orten muss nur auf Lade Position bzw. get position geklickt werden.

App Screenshot - Positionsbestimmung

App Screenshot - Positionsbestimmung

Die Positions Koordinaten werden nur für den Upload in Opensensemap benötigt, wenn dies nicht erwünscht ist, muss die Position 0, 0 angeben werden.

Upload der Daten auf Opensensemap

Neue senseBox auf Opensensemap erstellen

Um Daten auf Opensensemap.org hoch zu laden, wird ein Account benötigt. Dieser kann auf https://opensensemap.org/ erstellt werden

Opensensemap - login

Opensensemap - login

Nach der Registration muss eine neue SenseBox erstellt werden, dafür auf opensensemap einloggen und oben rechts auf das User Profil Icon klicken & im dropdown menu New senseBox auswählen.

Opensensemap - erstelle neue senseBox

Opensensemap - erstelle neue senseBox

Im General Bereich die pflicht Felder ausfüllen „Name of your station*“ & bei „Exposure*“ Mobile auswählen. Die Location wird später vom Gerät bestimmt und muss somit nicht manuell angegeben werden.

Opensensemap - Einstellungen: General

Opensensemap - Einstellungen: General

Unter Hardware „Manual configuration“ auswählen und ein Sensor mit folgenden Eigenschaften erstellen. Anschließend auf Next klicken und auf der nächsten seite die neue senseBox bestätigen.

  • Icon: Lautsprecher
  • Phenomenon: decibel
  • Unit: db
  • Type: db
Opensensemap - Einstellungen: Hardware

Opensensemap - Einstellungen: Hardware

Opensensemap - Einstellungen: Bestätigen

Opensensemap - Einstellungen: Bestätigen

In App Login

Um sich in der App ein zu loggen muss oben links auf den Menu Button (Hamburger) geklickt werden und anschließend auf Login.

App - Navigation zum login

App - Navigation zum login

Anschließend muss nur noch seine zuvor erstellen nuzterdaten von Opensensemap eingeben werden und auf den Login Button klicken.

App - Login

App - Login

Wenn der login erfolgreich war, sieht man sein Opensensemap Account mit ein Gravatar Bild in der Navigationsleiste.

App - Navigation mit eingeloggten Konto

App - Navigation mit eingeloggten Konto

Als nächstes muss in Navigationsbereich Profile ausgewählt werden und dort im Dropdown bereich seine sensorBox im Dropdown auswählen.

WICHTIG
Auch wenn nur eine sensorBox im Opensensemap Konto eingetragen wurde, muss diese erst noch ausgewählt werden, wenn keine sensorBox ausgewählt wird, werden keine Daten hochgeladen!!!
App - Profile

App - Profile

Datenerfassen und hochladen

Zum Datenerfassen und live hochladen zu Opensensemap muss ein Account von Opensensemap in der App eingeloggt sein und im Messbereich auto upload data aktiviert werden. Optional kann Position bestimmen verwendet werden um seine aktuelle Position automatisch mit dem Dezibel Wert auf Opensensemap zu posten.

Anschließend nur noch auf start loggin klicken und die Daten werden in einer localen SQLite Datenbank auf dem Gerät gesichert und ca alle 2 Minuten auf Opensensmap hochgeladen.

App - Messbereich mit auto upload

App - Messbereich mit auto upload

Ausgaben der Daten auf dem Gerät

Listenansicht

Die Listenansicht mit Löschfunktion (nach links oder rechts wischen) befindet sich im Menü unter Log.

App - Listenansicht

App - Listenansicht

Graphenansicht

Die Graphenansicht befindet sich im Menü unter Graph.

App - Graphenansicht

App - Graphenansicht

App

Messung

Als Grundlage wurde der Stackoverflow Beitrag von Daniel Hernandez Ramirez [1] und Soham [2] verwendet.

Der Algorhytmus ist: Dezibel = 20 * log10( Amplitude / ReferenceAmplitude)

GPS

Es wid nur die letzte bekannte Position des Gerätes bestimmt, dazu wurde als Code Grundlage swiftBoy [3] verwendet.

Login

Der Login wurde mittels der Android Studio vorgefertigten Activity Sign-in erstellt und mittels API request für Opensensemap angepasst.

Gravatar

Wenn der User erfolgreich eingeloggt ist, wird immer ein Bild von https://en.gravatar.com/ heruntergeladen. Wenn der User bei Gravatar existiert wird das entsprechende Bild heruntergeladen, wenn der User sich nicht zuvor mit der gleichen Email Addresse wie in Opensensemap registiert hat, wird ein default Gravatar Bild heruntergeladen.

Für die integration wurde auf den Beitrag von Android Developer [4] aufgebaut.

SQLite

Die SQL Integration wurde mit hilfe des Offiziellen Video Tutorial von Google [5] erstellt.

API

Für die API request wurde Android Asynchronous Http Client [6] verwendet, welches Rest API Zugriffe in Java handelt.

Um die Kommunikation zu OpenSenseMap zu verwirklichen, wurden alle Request basierend auf der OpenSenseMap API documentation [7] erstellt.

Lautstärken Vergleich

Bilder Quellen

Alle Bilder wurden von https://pixabay.com/ heruntergeladen welche mit einer CC0 Creative Commons Lizenz dort publiziert wurden.

  • Stones, Meditation, Balance [10]
  • Sewing Needle, Thread, Mend [11]
  • Rocket Launch, Smoke, Rocket [12]
  • Crash Test, Collision, 60 Km H [13]
  • Riffles, Guns, Drill, Weapon, War [14]
  • Military Raptor, Jet, F-22 [15]
  • Aircraft, Airport, Departure, Start [16]
  • Audience, Bleachers, Crowd, Game [17]
  • Storm, Lightning, Weather, Nature [18]
  • Lion, Predator, Mane, Cat, Yawn [19]
  • Superbike, Motorsport, Fast, Speed [20]
  • Bmw, Car, Front, Sports Car, Tuned [21]
  • The Eleventh Hour, Time To Rethink [22]
  • Adult, Bath, Beautiful, Close-Up [23]
  • Human, Children, Girl, Talk [24]
  • Little Houses, Stone Road, Stone [25]
  • Bach, Forest, Water, Flow, Nature [26]
  • Girls, Whispering, Best Friends [27]
  • Autumn Leave, Japan, Nature, Maple [28]

Auswertung

Probleme

Genauigkeit

Ein großes Problem ist es die verschiedene Microphone von den unzähligen Android Geräten einheitlich ein zu stellen, so das ein vergleichbarer Messwert herauskommt. Hierzu wurde nur ein Workaround genutzt der immer zuverlässig ist. Wie in Quickstart Microphone beschrieben wird dazu ein leiser bereich benötigt um das Microphone ein zu stellen, besser wäre hier ein Geräusch wie z.B. von einer Stimmgabel in einer exakt abgemessener Distanz zum Microphone als Eichgeräusch zu verweden. Hinzu kommt auch noch das in einigen Geräten mehrere Microphone verbaut wurden um mit Alogorhytmen und mehreren Audioquellen das Hintergrund rauschen raus zu filter, was in diesen fall zum teil benötigt wäre.

Unstable

Bei Aktionen wie Position bestimmen und Upload der Daten auf Opensensemap treten regelmäßig noch Ausnahmefehler die nicht behandelt bzw. nicht fest gestellt wurden.

Was mit mehr Zeit umgesetzt wäre

User Interface

Durch die Zeitintensive integration von Opensensemap war es mir leider nicht mehr mögich gewesen ein besseres UI für die Graphen Darstellung zu nehmen und anderswertige App Interne Auswertungen dar zu stellen.

Permission

In der aktuellen version muss noch über App-Info alle Permission manuell aktiviert werden, der nächste step wäre gewesen dies über die Internen funktionen von Android auf zu rufen um den User nach allen Permissions zu fragen.

Opensensemap API Integration

Anstellen von den 4 manuellen API request wäre es sinnvoller ein vollständigen API-Client zu integrieren, welche alle Funktionen von Opensensemap integriert um so Fehler vor zu beugen und schneller & sauber neue Features hiunzufügen zu können.

Literaturverzeichnis

[1]Audio - measuring decibels with mobile phone. URL: https://stackoverflow.com/questions/15693990/measuring-decibels-with-mobile-phone#15703029.
[2]Decibel sound meter for android. URL: https://stackoverflow.com/questions/9597767/decibel-sound-meter-for-android.
[3]swiftBoy. Geolocation - how do i get the current GPS location programmatically in android? URL: https://stackoverflow.com/questions/1513485/how-do-i-get-the-current-gps-location-programmatically-in-android.
[4]Bitmap - how to load an ImageView by URL in android? URL: https://stackoverflow.com/questions/2471935/how-to-load-an-imageview-by-url-in-android.
[5]Contribute to ud845-pets development by creating an account on GitHub. original-date: 2016-07-10T23:04:26Z. URL: https://github.com/udacity/ud845-Pets.
[6]James Smith. Android asynchronous http client. URL: http://loopj.com/android-async-http//.
[7]openSenseMap API documentation. URL: https://docs.opensensemap.org/.
[8]Tabelle schalldruckpegel dezibel tabelle vergleich druck dB vergleich skala umrechnung von schalldruck in schall-intensitaet test beispiele verhaeltnisse dB lautheit druck vergleich geraeusch uebersicht umrechnungstabelle schalldruck intensitaet lautheit lautstaerke faktor faktoren zimmerlautstaerke laerm geraeusch pegel laermpegel schall entfernung werte - sengpielaudio sengpiel berlin. URL: http://www.sengpielaudio.com/TabelleDerSchallpegel.htm.
[9]Noise level chart: dB levels of common sounds. URL: https://www.noisehelp.com/noise-level-chart.html.
[10]TanteTati. Free image on pixabay - stones, meditation, balance. noise_0. URL: https://pixabay.com/en/stones-meditation-balance-1058367/.
[11]stevepb. Free image on pixabay - sewing needle, thread, mend. noise_10. URL: https://pixabay.com/en/sewing-needle-thread-mend-541737/.
[12]WikiImages. Free image on pixabay - rocket launch, smoke, rocket. URL: https://pixabay.com/en/rocket-launch-smoke-rocket-take-off-67723/.
[13]Pixel-mixer. Free image on pixabay - crash test, collision, 60 km h. URL: https://pixabay.com/en/crash-test-collision-60-km-h-1620608/.
[14]PublicDomainPictures. Free image on pixabay - riffles, guns, drill, weapon, war. URL: https://pixabay.com/en/riffles-guns-drill-weapon-war-218799/.
[15]skeeze. Free image on pixabay - military raptor, jet, f-22. URL: https://pixabay.com/en/military-raptor-jet-f-22-airplane-582888/.
[16]Fotoworkshop4You. Free image on pixabay - aircraft, airport, departure, start. URL: https://pixabay.com/en/aircraft-airport-departure-start-1555434/.
[17]Pexels. Free image on pixabay - audience, bleachers, crowd, game. URL: https://pixabay.com/en/audience-bleachers-crowd-game-1866738/.
[18]BrinWeins. Free image on pixabay - storm, lightning, weather, nature. URL: https://pixabay.com/en/storm-lightning-weather-nature-sky-730653/.
[19]Alexas\_Fotos. Free image on pixabay - lion, predator, mane, cat, yawn. URL: https://pixabay.com/en/lion-predator-mane-cat-yawn-roar-3317670/.
[20]sms467. Free image on pixabay - superbike, motorsport, fast, speed. URL: https://pixabay.com/en/superbike-motorsport-fast-speed-930715/.
[21]Free-Photos. Free image on pixabay - bmw, car, front, sports car, tuned. URL: https://pixabay.com/en/bmw-car-front-sports-car-tuned-918408/.
[22]Alexas\_Fotos. Free image on pixabay - the eleventh hour, time to rethink. URL: https://pixabay.com/en/the-eleventh-hour-time-to-rethink-3410476/.
[23]Pexels. Free image on pixabay - adult, bath, beautiful, close-up. URL: https://pixabay.com/en/adult-bath-beautiful-close-up-face-1867380/.
[24]Pezibear. Free image on pixabay - human, children, girl, talk. URL: https://pixabay.com/en/human-children-girl-talk-763156/.
[25]Free-Photos. Free image on pixabay - little houses, stone road, stone. URL: https://pixabay.com/en/little-houses-stone-road-stone-road-1149379/.
[26]Alexas\_Fotos. Free image on pixabay - bach, forest, water, flow, nature. URL: https://pixabay.com/en/bach-forest-water-flow-nature-3477711/.
[27]Olichel. Free image on pixabay - girls, whispering, best friends. URL: https://pixabay.com/en/girls-whispering-best-friends-young-914823/.
[28]ImageDragon. Free image on pixabay - autumn leave, japan, nature, maple. URL: https://pixabay.com/en/autumn-leave-japan-nature-maple-1415541/.
[29]Spinx Dokumentation. URL: http://www.sphinx-doc.org/en/stable/.