# 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.

# Sensor uitlezen
Na de code correct over te zetten, kunnen we de X, Y & Z waarden van de sensor uitlezen via 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.

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

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.

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.

We verzamelen meer dan een uur aan data.

# Neuraal Netwerk model
We creeëren een model met de Impulse Design:

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

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:

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

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

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:

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

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:

# 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.

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:

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:

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