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.
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.
- Quellcode : https://github.com/linuxluigi/OpenDecibelMeter
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.
- Website URL: https://opensensemap.org/
- Quellcode : https://github.com/sensebox/openSenseMap
Dokumentation¶
Die Dokumentation wurde mit Sphinx [29] erstellt und gehostet auf readthedocs.io und github.com.
- Quellcode : https://github.com/linuxluigi/OpenDecibelMeter
- Online Dokumentation: http://opendecibelmeter.readthedocs.io/de/latest/
Präsentation¶
Die Präsentation wurde in LibreOffice Impress erstellt und ist auf github.com gehostst.
- Präsentation : Download Link
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.
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.
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.
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.
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
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.
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.
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
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.
Anschließend muss nur noch seine zuvor erstellen nuzterdaten von Opensensemap eingeben werden und auf den Login Button klicken.
Wenn der login erfolgreich war, sieht man sein Opensensemap Account mit ein Gravatar Bild in der Navigationsleiste.
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 keinesensorBox
ausgewählt wird, werden keine Daten hochgeladen!!!
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¶
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.
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¶
Text Quellen¶
Die Dezibel Vergleichswerte wurde vonn http://www.sengpielaudio.com/TabelleDerSchallpegel.htm [8] und https://www.noisehelp.com/noise-level-chart.html [9] verwendet.
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/. |