# Uitwerking

# Sensor code

We schrijven de code van de workshop op de accelerometers door dezelfde stappen te volgen van de workshop (opens new window).

Via MBED compilen we de code en zetten we deze over via het STM bordje naar de accelerometer.

setup

# Sensor uitlezen

Na de code correct over te zetten, kunnen we de X, Y & Z waarden van de sensor uitlezen via Putty.

Putty

# Sampling

Deze data zenden we naar de Edge Impulse website (opens new window) via de edge-impulse-data-forwarder (opens new window), na de sensor te registreren op Edge Impulse met de data-forwarder kunnen we beginnen met samplen.

sampling

We hangen de sensor aan een stoelpoot en meten data op.

seat

We samplen 2 categorieën: Empty-seat en Seat-fill.

Bij "Empty-seat" laten de stoel leeg. De metingen zullen dus ook lage waarden hebben.

empty

Bij "Seat-filled" zitten we in de stoel waarbij we soms wat bewegen en soms stil zitten. De meting zullen dus hoge pieken hebben, deze pieken zijn plotse bewegingen.

filled

We verzamelen meer dan een uur aan data.

data

# Neuraal Netwerk model

We creeëren een model met de Impulse Design:

model

De Window size hebben we op 2 seconden en de window increase op 80ms we hebben geporbeerd met andere waarden maar dit gaf niet veel verschil.

Na veel testen concludeerden we dat raw data een goed resultaat gaf.

Daarna sturen we deze features door een Keras Neuraal Netwerk, dit Neuraal Network klassificeerd op de 2 klasses: "Empty-seat & "Seat-filled", dit zijn dan ook de 2 mogelijke outputs.

# Trainen

EON

We doen 20 epochs, na testen gaf dit een naukeurig resultaat zonder dat we te veel last kunnen hebben van overfitting. Learningrate hebben we op de standaard waarden laten staan.

Dit is het resultaat van het model:

EON

We zien dat als de stoel leeg is hij het zo goed als altijd juist heeft, maar als hij gevuld is soms denkt dat hij leeg is. Normaal zal dit geen probleem zijn omdat we de imput gebruiken van meerdere stoelen.

# EON Tuner

EON

De EON Tuner zorgt ervoor dat we het meest optimaal neuraal netwerk verkrijgen.

EON testing

De EON Tuner test verschillende neurale netwerken met verschillende layer configuraties en zoekt de beste configuratie.

De EON Tuner geeft een aanbevolen configuratie voor het Neuraal Netwerk:

EONmodel

# Model testing

Na dit model te laten trainen met de data, testen we het model:

ModelTest

Tijdens het testen merkten we dat het model wel vrij accuraat de bezetting van stoel kon detecteren. Er kwamen wat inaccurate resultaten wanneer we ons best deden om zeer stil te zitten dat het model wat moeite had. We testen dan ook maar kleine momenten, mensen kunnen korte momenten stil zitten, maar op een langer termijn zal de persoon eens bewegen en dan zal het model wel de persoon detecteren.

# Model deployment

Om het model op de sensortile te krijgen maken we er eerst een C++ library van in edge impulse. Die steken we dan in de AB-writing-standalone-inference-mbed (opens new window) programma om het model te testen.

Daarna compileren we het programma en flashen we het op de sensortile. Dit is dan het resultaat die we krijgen in de console: ModelTest

# MQTT

Om nu de effectieve bezettingsgraad van een lokaal te achterhalen moet de data van alle sensortiles op een centraal punt verzameld worden. Dit zal gebeuren door de sensortile met een Raspberry Pi te verbinden. Op deze Pi draait een python programma die de de predicties van de sensortile uitleest over de seriële verbinding (hiervoor wordt de pyserial (opens new window) module gebruikt). Vervolgens zal de Pi deze waarden in een payload gieten en over MQTT versturen naar een broker.

Omdat we geen tijd genoeg hadden om in het lokaal een MQTT broker op te zetten hebben we gekozen om de publice broker mqtthq (opens new window) te gebruiken. Daar kunnen al de waarden op de "SensorTile" topic uitgelezen worden.

output on broker

De python code die dit allemaal realiseerd kan in volgende github repo worden teruggevonden mqtt-repo (opens new window).

# Frontend

Om de data die naar de mqtt broker werd verstuurd deftig weer te geven hebben wij besloten om een web-pagina te bouwen. Hierop krijg je op een deftige manier te zien welke stoelen er precies bezet zijn en welke er vrij zijn. De frontend is dus subscribed op de juiste topic van de mqtt-broker. De repo van de frontend kan hier (opens new window) worden terug gevonden. Het systeem ziet er als volgt uit:

Frontend screenshot

Hier zie je dat de 5de stoel bezet is, en om aan te tonen dat deze wel degelijk van een bericht komt van de mqtt broker. Hieronder de console:

console frontned

Hierop ziet men dat de broker soms wel problemen heeft te connecteren maar naar de 2de of 3de retry lukt dit meestal wel.