Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf ·...

67

Transcript of Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf ·...

Page 1: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,
Page 2: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

0

1

2

2.1

2.2

2.3

2.4

2.5

3

3.1

3.2

3.2.1

3.2.2

3.2.3

3.2.4

3.2.5

3.2.6

3.2.7

3.2.8

4

4.1

4.2

4.3

4.4

4.5

5

6

7

8

9

Table of ContentsIntroduction

Dankwoord

Hoofdstuk 1 Voorbereiding

Concept

Benodigdheden-Materiaallijst

Raspberry pi

Operating System

Configuration

Hoofdstuk 2 Software

server

Webage features

Weer

News

Datum en tijd

Wifi

Lunch

Quotes

Audio

screensaver

Hoofdstuk 3 Hardware

Sensoren

Leds

Speakers

Microfoon

Connecting Hardware

Hoofdstuk 4 Audio issue

Hoofdstuk 5 Autoboot

Hoofdstuk 6 Montage

Hoofdstuk 7 Resultaat

Hoofdstuk 8 Besluit

Page 3: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

IntroductieNovember five een IT bedrijf gevestigd in het hartje van Antwerpen aan de voet van de Kathedraal , Tot voor kort gingNovember Five nog door het leven als Appstrakt. Deze naam dekte echter al lang niet meer het volledige pakketwaar het bedrijf mee bezig was. November five heeft namelijk de dag van vandaag buiten ondersteunendediensten maar liefst 7 afdelingen: strategy and service design, Experience design, Native Application development,web development, Hardware engineering, product operations, client operations. Zoals je kan merken zijn het nietenkel apps meer, waar de meer als 50 werknemers zich dagelijks mee bezig houden.

Om het nieuwe gezicht en imago, dat met de naamsverandering gepaard ging te etaleren, ontstond het idee voordeze bachelor proef. Zoals de titel van deze scriptie wel doet vermoeden, is het onderwerp van dit project en scriptieeen spiegel. Dit is vanzelfsprekend niet een soortgelijke spiegel zoals degene die menig medemens in zijnbadkamer heeft hangen. Deze spiegel toon naast een weerspiegeling van de ruimte waar hij hangt ook nuttigeinformatie. Zo kan je ook het uur de datum, weersvoorspellingen, nieuwsberichten, enz. aflezen. Verder kan despiegel ook muziek fragmenten afspelen, spreken en bepaalde commando’s begrijpen. Dit soort spiegelsnoemen we smart-mirrors.

Smart-mirrors zijn goed op weg om binnen IOT “the next big thing” te worden. Er wordt steeds meer aandacht aanbesteed en je ziet meer en meer verscheidene projecten en eigen versies verschijnen. Het doel van dit project wasdan ook om met deze spiegel te tonen dat November Five mee is met de laatste technologische nieuwtjes. Verdertoont dit project aan dat technologie zo ver kan gaan als je zelf wilt.

Het project beschreven in deze scriptie is ontwikkeld op de hardware afdeling. Hier wordt aan zowel projecten voorklanten als voor intern gebruik gewerkt. Een voorbeeld hiervan is de automatisatie van de garage poort en raamblindering. Of de coin-dispenser waar je, je badge kan scannen, van de coin-dispenser een 1euro muntstuk krijgtvoor in de drank automaat. En deze één euro op je rekening zet.

Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi, linux, python, node.js, express,javascript, html, css , bootstrap en elektronica componenten gebruikt. Het resultaat is een vernuftige, moderne engebruiksvriendelijke interactieve spiegel.

Er kan geconcludeerd worden dat dit een zeer innovatief en interessant project was. Die met zijn ideale combinatietussen hardware en software de volledige breedte van de richting elektronica ICT dekte.

Page 4: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

DankwoordTijdens de voorbije maanden bij November Five heb ik niet enkel veel bijgeleerd van het werken aan mijnbachelorproef maar ook van mij collega’s van het hardware team. Ik zou willen beginnen met hun te bedanken.Iedere ochtend stond een stand up gepland. We namen samen de stand van zaken door, bespraken wat sinds devorige meeting afgehandeld was en waar ik momenteel mee bezig was. Zo konden problemen worden opgelostworden of nieuwe inzichten verworven worden. Ook tussen stand ups door kon ik steeds bij hun terecht voor eenopinie of hulp. Elke donderdag sloten we de week af met een demo, hier moesten Oliver en ik onze resultaten vande voorbije weken tonen. Deze werden getest en bijgestuurd of goed bevonden. Ook deze feedback was steedsweer opbouwend. Hen zou ik graag bedanken voor de bijstand, inzichten en raad.

In het bijzonder wil ik Nick Verbaendert, CTO Hardware bedanken. Hij was hoofd van de hardware afdeling en mijnstage mentor bij november five. Hij volgde de tijdsplanning van het project nauwlettend op, zorgde dat ik steedsvoorzien was van benodigd materiaal, Liep men code door, gaf opmerking waar verbetering nodig was en maaktesteeds tijd vrij wanneer nodig. dankzij hem kreeg ik de kans te proeven van de gang van zaken in het bedrijfsleven.Hiervoor en voor de algemene coaching, bedankt.

Verder zou ik nog Oliver Hofkens, Mede-stagiair van AP elektronica –ICT in dit hardware team willen bedanken.Oliver is toegewijd fan van Linux en Opensource software. Wanneer ik als onervaren Linux gebruiker ergens danigmee vast zat. Kon ik steeds beroep doen op zijn raad. Hij kwam vaak met handige tips and tricks of goed advies opde proppen.

Daarnaast zou ik ook Mede stagiair Thaïs Lenglez uit het design team willen bedanken. Zij heeft onder toezicht vanhaar stage mentoren, Fervent de user interface van de spiegel ontworpen.

Ook de nog niet genoemde collega’s bij November Five verdienen een woord van dank. Zij ontvingen Oliver en mijmet open armen, altijd vriendelijk, waren steeds te vinden voor een goede babbel, stonden steeds paraat om tehulp te schieten als we iets niet konden vinden of dergelijk. De vriendschappelijke en gemoedelijke sfeer binnenNovember Five is zeker niet vanzelfsprekend en bij weinig bedrijven in zo een hoge mate aanwezig.

Laatst, maar niet allerminst is een woord van dank voor dhr. Tim Dams nog op zijn plaats. Als mijn interne promotorvoor dit eindwerk / deze bachelorproef. Kreeg ik ook van hem steeds feedback op mijn verslagen. Verder volgde hijde voortgang van het project op de voet aan de hand van men logbestanden. Samen met dhr. Luyts is hij zelfshalverwege de stageperiode ter plekken een demo van zowel Oliver als mij komen bijwonen. Ik kon steedsrekenen op opbouwende commentaar en een duwtje in de rug als het tijd was in gang te schieten voor eennaderende deadline. Voor al de wijze raad, een woord van dank.

Antwerpen, 6 juni 2015 Stijn Schrauwen

Page 5: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

ConceptHet concept is dus een intelligente spiegel. Maar hoe wordt technisch verwezenlijkt, dat er effectief tekst ofafbeeldingen te zien zullen zijn op de spiegel? Dit is de eerste vraag die bovenkomt bij dit project. Dit lijkt geeneenvoudige vraag, het antwoord is echter eerder simpel . Door gebruik te maken van een half-doorlaat-spiegel.Een half-doorlaat-spiegel is een spiegel waar je langs de ene zijde je spiegelbeeld ziet en langs de andere zijdezoals een raam kan door kijken. Een alom gekend voorbeeld zijn de spiegels in de Politie verhoorkamers. Hetspiegel effect werkt slechts wanneer het donker is aan de niet spiegelende zijde. De tekst die u ziet, staat op eenachterliggend scherm, dit is feitelijk een website die in Fullscreen gedisplayed wordt. Als een scherm van zijnbehuizing ontdaan wordt kan deze mooi aansluitend tegen deze de niet spiegelende kant van de spiegel wordtgeplaatst. De achtergrond van de webpagina moet zwart zijn. Waar het scherm zwart is, is er geen licht achter despiegel. Op deze plaatsen zal de spiegel dus spiegelen. De plaatsen waar preferabel witte maar eventueel lichtekleuren worden getoond, is er licht achter de spiegel. Het spiegelend effect valt hierdoor weg. De webpagina draaitop de localhost van een Raspberry pi. Een Raspberry pi is een minicomputer die makkelijk achter het scherm kanverborgen worden. Door middel van sensor zullen we detecteren of personen voor de spiegel staan en hieropreageren.

Page 6: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Benodigdheden/materiaallijstHieronder staat de lijst met benodigdheden om het project uit te voeren

RaspberryScherm met HDMI aansluitingHDMI kabelHalf-doorlatende spiegel http://www.glasopmaat.be/confrontatie-spiegel-6mm-dik/Dotstar Ledstrip https://www.adafruit.com/products/2238Quad Level-Shifter (3V to 5V) https://www.adafruit.com/product/1787Infrarood sensorPir sensorADC bv. MCP3008Speakers Indien geen 3m ingang op het scherm aanwezig is, kies dan voor boxen die via USB afspelen. De3m jack van de pi kan namelijk niet tegelijk gebruikt worden voor geluid en PWM sturingen.Breadboard / ProtoboardWires to connect componentsUSB MicrofoonUSB wifi dongleBehuizing voor de spiegel in te hangenVoeding voor ledstripsVoeding Raspberry piToetsenbordMuis

Page 7: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Raspberry PiZoals eerder aangehaald zal een Raspberry Pi gebruikt worden in dit project. Een Raspberry Pi is een goedkopecomputer ter grote van een creditcard. De Raspberry Pi is het hart en brein van dit project. Hij bevat alle intelligentie.Alle andere onderdelen zullen op zijn commando werken. De Pi zal de sensor data inlezen deze behandelen enhierop de webpage en leds laten reageren. Raspberry Pi heeft ondertussen verschillende versies. Bij aanvang vandit project werd gebruik gemaakt van de meest recente versie: de Raspberry 2B. Halverwege dit project kwam eennieuwere versie uit de Raspberry pi 3. Deze beschikt over een beter CPU een 64bit in plaats van de 32bit van de Pi2. Verder is het CPU van de nieuwe Pi gebouwd op nieuwere architectuur, die meer taken kan uitvoeren perprocessor omwenteling. De clock snelheid ligt nu rond 1.2GHz dit is 300MHz meer dan de Pi 2. Verder is degrafische kaart dezelfde gebleven maar werkt deze op 400MHz in plaats van 250MHz bij de oudere Pi. Tot slot, eenwat vaak vergeten upgrade aan deze nieuwe versie is de verdubbeling in Snelheid van het RAM geheugen. Degrote van het RAM geheugen blijft hetzelfde, maar de snelheid stijgt van 450MHz naar 900 MHz. Tijdens dit projectkwam een Audio Probleem boven. De liedjes van de Spotify API speelde niet volledig, of helemaal niet af. Bijhorendcrashte het geluid van chromium. Wat resulteerde in helemaal geen geluid meer. Er zijn verschillende oplossingenvoor dit probleem gezocht na verscheidene pogingen zonder resultaat. Kwam het idee dat een hardware upgradehet probleem misschien zou kunnen oplossen. Over schakelen van Raspberry pi is een koud kunstje. Alles vandata tot operating system staat op de Micro-SD kaart. Na de SD-kaart in de nieuwe Pi gestoken te hebben, de GPIOkabel en USB connecties van muis, toetsenbord, microfoon, voeding boxen en wifi-dongle naar de nieuwe pi tehebben overgebracht kan deze opgestart worden en is geen overige of nieuwe configuratie nodig. Jammer genoegloste ook dit de audio problemen niet op hierover later meer.

Page 8: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Operating systemZoals net Geëxpliceerd in de paragraaf over Raspberry Pi staat alles van data tot Operating system op de micro-SDkaart aangebracht in de Raspberry Pi. Er staat dus geen standaard operating system op. De eerste stap die eenRaspberry gebruiker maakt is dus het kiezen en installeren van een OS.

Raspbian

Initieel is bij dit project gekozen voor de laatste versie van Raspbian, op dat moment Jessie. Vernoemd naar delaatste gelijknamig versie van Debian, versie 8.0. Raspbian is een OS gebaseerd op Debian, geoptimaliseerd voorde Raspberry Pi Hardware. Debian zelf is een open operating system. Net zoals alle Debian versies is ook dezeversie naar een toy story personage, in dit geval Jessie vernoemd.

Na het formateren van een micro SD kaart met voldoende geheugen. Kan de image gedownload en geïnstalleerdworden. Hier is gekozen voor NOOBS, een makkelijke operating system installer. Deze bevat verscheidene OS'enwaaronder Raspbian. Noobs is te downloaden op onderstaande link.

https://www.raspberrypi.org/downloads/noobs/.

Na het uitpakken van de gedownloade zip op de SD-kaart, Het veilig verwijderen en het in pluggen er van in de pi.Zal bij het booten een venster getoond worden waar uit een lijst een operating sytem gekozen moet worden om deinstallatie ervan te starten. Na een succesvolle installatie zal een melding getoond om dit te bevestigen wordengetoond. Tot slot zal de Raspberry pi rebooten waarna de installatie voltooid is.

ARCH Linux

Na ettelijke pogingen de eerder genoemde audio problemen op te lossen. Tot zelfs het upgraden van de hardwaretoe. Zoals uitgelegd in de paragraaf over Raspberry. Geen resultaat opleverde. Werd overwogen eens de kans meteen ander operating system te wagen. Dit plan werd extra gesterkt door het niet voorkomen van de audioproblemen bij het runnen van de server en webpage op een Windows of Apple laptop. Oliver Hofkens medestagairvan AP bij November Five. Maakte initieel bij zijn “viewroom control” project gebruik van een Raspberry Pi waar Arch

Page 9: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

op draaide. Later schakelde hij over op een photon, deze zijn nog vele malen kleiner dan Raspberry ’s. De keuzewas dus voor de hand liggend om naar dit al correct geïnstalleerd operating system Arch over te schakelen. Alsgroot fan van opensource gebruikt Oliver Arch Linux als operating system voor zijn eigen laptop. De ervaring dieOliver met Arch had maakte de keuze voor Arch voor hem evident.

Arch Linux is een Lichtgewicht en flexibele distributie. Dit wil zeggen dat Arch met zo min mogelijk pregeïnstalleerde software komt. Slechts de minimum vereisten om als OS te bestaan is aanwezig. Alles dat je extrawilt moet je achteraf zelf nog installeren. Standaard werkt Arch via terminal en niet via user interface. Deze kanuiteraard geïnstalleerd worden en vanuit de terminal gestart worden. Uit persoonlijke ondervind kan ik alsnieuweling in linux stellen dat de instap drempel voor Raspbian aanzienlijk lager ligt als de instap drempel naarArch.

Niet te min loste de overstap naar Arch de audio problemen op. Wat minder positief was het feit dat alle instellingen configuratie opnieuw moesten gemaakt worden. Voorbeelden hiervan zijn juiste scherm resolutie instellen hetautomatisch booten van de server etc. Verder was er buiten het operating system zo goed als niets geïnstalleerdSupervisord, Dotstar library, etc. moesten allemaal opnieuw worden geïnstalleerd.

Page 10: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

ConfiguratieIn dit hoofdstuk vindt u de configuraties voor Arch linux. Instellingen die hetzelfde resultaat voor Raspbian haddenzal ik niet mee geven. Omdat de eenvoudige reden dat de relevantie ervan wegvalt na de audio issues die we erondervonden.

Display in fullscreen

De default video instelling van Arch gebruiken een resolutie van 1824x984. Het scherm daarentegen is een full HDscherm. Er verschijnen zwarte randen rond het scherm. Door onderstaande lijn toe te voegen aan de config.txt filezal het beeld naar correcte grote geschaald worden.

disable_overscan=1

Set Timezone

Om te zorgen dat de klok van de Pi juist staat moeten de juiste tijdszone ingesteld worden.

timedatectl set-timezone Europe/Brussels

Er zal een pop up venster verschijnen dat vraagt naar het wachtwoord van “alarm”. Dit passwo ord was nog steedshet default: “alarm”. De tijd zal niet onmiddellijk aanpassen.

Auto Login on boot

Het automatisch inloggen van de juiste gebruiker hoort misschien eerder thuis in het hoofdstuk Autoboot. Het isimmers niet gewenst dat gevraagd wordt om een gebruiker en wachtwoord op te geven bij het herstarten. Het is debedoeling dat de spiegel zonder menselijke hulp zelfstandig kan opstarten. Als dit automatisch inloggen later tochzal ingesteld worden, kan dit beter al bij aanvang van het project worden gedaan. Dat vergemakkelijkt het werk.

cp /usr/lib/systemd/system/[email protected] /etc/systemd/system/[email protected] -s /etc/systemd/system/[email protected] sudo nano /etc/systemd/system/getty.target.wants/[email protected]`

Pas de ExecStart lijn aan als volgt

ExecStart=-/sbin/agetty -a USERNAME %I 38400

Nu moete enkel de deamon bestanden herladen worden, services opnieuw gestart en gereboot.

systemctl daemon-reloadsystemctl start [email protected] reboot

Autoboot in Gui

Een grafische interface werk stukken aangenamer als een terminal. Om niet steeds via de terminal naar deGrafische user interface te moeten switchen zal ook dit worden geautomatiseerd. Arch beschik niet standaard overeen Gui. Bij dit project is gekozen voor “xinitrc” en bijhorende frontend “startx”. Xinitrc wordt vooral gebruikt om“desktop enviroments” en “Window managers” te draaien. Later in dit project in het hoofdstuk “Autoboot” zal nog

Page 11: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

een aantal keren verwezen worden naar het .Xinitrc bestand. Om de muiscursor te verbergen of om te voorkomendat het scherm in slaapstand gaat. Met ander woorden en ook wel logischerwijs desktop gerelateerde zaken. Omte beginnen moet een Window manager geïnstalleerd worden. De keuze hiervoor lag bij openbox. Daarna moetxinitrc geïnstalleerd en juist geconfigureerd worden.

npm install openboxpacman -S xorg-Xinitcp /etc/X11/xinit/xinitrc ~/.xinitrcsudo nano ~/.xinitrc

Na bovenstaande commando’s te hebben uitgevoerd. Zou de .Xinitrc file moeten openstaan. De onderstaandelijnen moeten in commentaar gezet worden door er een # voor te plaatsen. Gevolgd door onder deze lijnen “exec”en de Gui die automatisch gestart moet worden toe te voegen. In dit geval openbox LXDE. Wat dus in “execstartlxde” dat moet toegevoegd worden resulteert.

twm &xclock -geometry 50x50-1+1 &term -geometry 80x50+494+51 &term -geometry 80x20+494-0 &exec xterm -geometry 80x66+0+0 -name login

Installeren van programma’s

Volgende programma’s zijn nodig voor dit project. De namen spreken voor zich waarvoor ze gebruikt zullen worden.

sudo pacman -S gitInstall Express, requestnpm install Expressnpm install requestnmp install Python-shellnpm install socket.ionpm install rpi-gpiopip install RPi.GPIOpacman -S python-imaginggit clone https://github.com/adafruit/Adafruit_DotStar_Pi.git

Page 12: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Verder is het interessant om Bittorrent-Sync te installeren. Dit Synchroniseert bestanden tussen 2 devices. Zo kanje aanpassingen maken op je windows laptop in webstorm, visual studio of variant en hoef je niet telkens tecommiten, pushen en pullen om deze aanpassingen op de pi te krijgen.

http://www.wikihow.com/Set-Up-Bittorrent-Sync-on-Your-Raspberry-Pi

Enable SPI

Om analoge waarden in te lezen via de GPIO pinnen is het nodig om SPI te gebruiken. Hierover kan u meer lezen inhet hoofdstuk over hardware. SPI is echter standaard uitgeschakeld op een Raspberry Pi. SPI kan als volgt wordeningeschakeld:

sudo nano /etc/modules-load.d/raspberrypi.conf

Voeg deze lijnen achteraan in.

spi-bcm2708spidev

Kijk of het bestand /etc/modprobe.d/raspi-blacklist.conf bestaat. Als dit bestaat, open het.

sudo nano /etc/modprobe.d/raspi-blacklist.conf

Plaats een # voor de SPI lijn.

#blacklist spi-bcm2708blacklist i2c-bcm2708

Ook zal je “dtparam=spi=on” aan je config.txt. bestand moeten toevoegen.

sudo nano /boot/config.txt

Voeg het volgende toe.

dtparam=spi=on

Start opnieuw op.

Wifi

De Raspberry heeft zich op twee netwerken bevonden bij November Five Het “IOT” netwerk, dit is een test netwerkwaar elk apparaat met het juiste wifi passwoord toegang tot heeft. Hierop is de webpage van de spiegelontwikkeld. Mijn laptop kon op hetzelfde netwerk wat bitsync mogelijk maakte. Dit netwerk genoot wel niet van allerechten. Bijgevolg kon door veiligheidsmaatregels geen toegang gemaakt worden tot de “guest wifi” of de “menuvan de week”. Dit kon wel op het “CommonTest” netwerk. Zelfs met correct passwoord krijgen hier enkel toestellenwaarvan het mac adres geregistreerd staat toegang tot het netwerk.

Algemene netwerk instellingen.

sudo nano /etc/network/interfaces

Page 13: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Dit bestand moet er als volgt uitzien.

auto loiface lo inet loopbackauto eth0iface eth0 inet dhcpauto wlan0iface wlan0 inet manualwpa-roam /etc/wpa_supplicant/wpa_supplicant.config

Netwerk afhankelijke instellingen

IOT

sudo nano /etc/wpa_supplicant/wpa_supplicant-wlan0

ctrl_interface=/run/wpa_supplicantnetwork={ ssid="IOT" key_mgmt=WPA-PSK psk="*******"}

sudo nano /etc/dhcpd.conf

# IOTinterface wlan0static ip_address=192.168.100.31/24static routers=192.168.100.1static domain_name_servers=8.8.8.8 8.8.4.4

Common-Test

Op de Common-Test is het belangrijk een statisch IP adres in te stellen. Zo blijft het IP adres hetzelfde integenstelling tot het IP adres op te vragen bij de DHCP-server. Als het IP adres telkens veranderd is het quasionmogelijk om te SSH-en. Hiervoor wordt immers het IP adres gebruik.

sudo nano /etc/wpa_supplicant/wpa_supplicant-wlan0

Page 14: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

network={ ssid="Common-Test" key_mgmt=WPA-PSK pairwise=CCMP TKIP psk="*******"}

sudo nano /etc/dhcpd.conf

# Common-Testinterface eth0static ip_address= 192.168.96.1/22 static routers=192.168.96.1static domain_name_servers= 192.168.96.1

Page 15: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

WebpageDe webpagina die draait op de localhost is geschreven in html, javascript, jquery en css. De mappen structuur isals volgt opgebouwd: een publieke map met twee html bestanden en een assets map. De index.html pagina is depagina die getoond zal worden. Op de input.html pagina kan je makkelijk de quotes getoond op het schermtoevoegen en verwijderen. In de Assets map bevinden zich de mappen: audio, css, fonts, img, javascript, json,weathericons.

In de audio map staan lokaal opgeslagen spraak bestanden.In de Javascriptmap bevinden zich twee bestanden voor elke Html één javascript. De javascript van deindex.html pagina is volledig object georiënteerd geschreven. Bovenaan de Javascript van de “spiegel pagina”staan 4 variabelen. Naargelang deze gelijkgesteld zijn aan “true” of “false”, zal de webpage zich anders gaangedragen.

Wanneer de variabele _DEBUG_MODE op true staat zal op de voorgrond steeds een venster te zien zijnwaar logs verschijnen. Deze logs kunnen functies zijn die worden uitgevoerd of inhoud van data die wordtbinnen gehaald. Deze zal uiteraard enkel tijdens het ontwikkelingsproces getoond worden.De _BYPASS_MIC variabele zorgt ervoor dat we kunnen debuggen zonder telkens de commando’s temoeten uitspreken. Ook dit zal enkel in de ontwikkelingsfase gebruikt worden._BYPASS_SOCKET Zorgt ervoor dat de sensoren geen effect meer hebben en we de screensaver kunnenaf en op zetten zonder de sensoren te gebruiken. Wederom ook weer enkel in de ontwikkelingsfasegebruikt._SPEECH is de enige variabele die na de ontwikkelingsfase zal gebruikt worden. Deze bepaald of eentekst to speech library of lokale audio files gebruikt zullen worden om spraak commando’s te latenweerklinken.

In de fonts maps staan de drie costume Fonts gebruikt voor deze webpage. De image mat bevat het logogebruikt voor de screensaver en de afbeelding van de microfoon. Beide zijn transparant zodat bij kleurverandering de afbeeldingen niet hoeven aangepast te worden.In de json map bevind zich momenteel enkel nog een Lijst met quotes die op het scherm getoond worden injson formaat.Tot slot in de weather icons map bevinden zich 6 video’s met de .webm extensie. Een van deze zal telkensachter de temperatuur van nu getoond worden om de weersomstandigheid aan te geven.

Voor alle Audio en video elementen is Html5 gebruikt. Voor de styling is css en bootstrap gebruikt zodat dit projectmakkelijk op andere schermgroten kan worden gebruikt. Het Desing is zoals eerder vermeld in het dankwoord,ontworpen door Thaïs Lenglez. Zij deelde haar ontwerpen met mij via zeplin. Een samenwerkings tool tussendesingers en developers. De afmetingen en tekstgrote konden eenvoudig nagekeken worden, Dit vermakkelijktehet implementeren van het desing.

Page 16: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Hier ziet u Object Georiënteerde javascript met de quotes code blok uit geklapt om werkwijze te kunnen zien.

Page 17: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,
Page 18: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,
Page 19: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,
Page 20: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Node ServerDe webpagina van de spiegel is gehost op een node server draaiend op de Raspberry pi. Deze server isgeschreven in “express” een webframework voor “node.js”. De pagina zal beschikbaar zijn op poort 3000 en niet viaeen http maar via een HTTPS. verbinding bereikbaar. Dit omdat google het niet toelaat om websites via httpverbinding blijvend toegang tot u microfoon toe te vertrouwen. Hoe dit komt en waarom dit nodig is kan u lezen inhet hoofdstuk “hardware” in de paragraaf “microfoon”. Een HTTPS verbinding is een SSL-verbinding(SecureSockets Layer) met daarin een normale HTTP-verbinding.

Pythonshell

Bij het opstarten van de node server start de server met pythonshell het script dat de sensoren en ledstripsaanstuurt. Bij Arch is de standaard python, python3 het script om de sensoren te controleren is in python2geschreven. Daarom moet dit expliciet meegegeven worden bij het starten van het script om fouten en het mogelijkcrashen van het script te vermijden. Pythonshell zal luisteren naar de logs die het python script maakt. Deze zal deafstand van de IR of PIR sensor loggen. Zo weet de server wanneer er een persoon voor de spiegel aanwezig is.Dit zal de node-server dan via io.sockets naar de client sturen. Meer uitleg over de sockets vindt u in dit hoofdstukbij paragraaf "screensaver".

Spotify playlist

Bij het opstarten van de server word een Spotify playlist opgevraagd. Dit wordt elke 24u opnieuw gedaan zodat deafspeellijst up to date blijft. Elke Spotify afspeellijst heeft een id. De “Top 100 tracks currently on Spotify” is de bij ditgebruikte afspeellijst en heeft volgend ID: “4hOKQuZbraPDIfaGbM3lKI”. Spotify afspeellijsten kunnen niet zomaaropgevraagd worden. In de header moet een geldige access token aanwezig zijn. Deze kan je verkrijgen met eenclient ID en een bijhorende secret key. Door te een applicatie te registreren wordt een client ID en Secret keygekoppeld aan de applicatie. Er zijn 3 verschillende autorisatie manieren om een access token te krijgen. De“Authorization Code”, “The Client Credentials flow” en de “The Implicit Grant flow”. De “Authorization Code” kan bestserverside gehouden worden om de integriteit van de secret key te behouden.“The Client Credentials flow” is altijdserver-to-server. terwijl de “The Implicit Grant flow” Client side is. Bij dit project is er voor de “Client Credentials flow”gekozen.

Page 21: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Meer informatie over de flows en acces token op: https://developer.spotify.com/web-api/authorization-guide/#client_credentials_flow.

Code die de authorisatie en opvraging van spotify playlist afhandeld.

var playlist_id = "4hOKQuZbraPDIfaGbM3lKI";var client_id = '4dfc86767e744f25bd900dbc69af7450'; // Your client idvar client_secret = '********************************'; // Your client secretvar redirect_uri = 'https://localhost:3000/index.html'; // Your redirect urivar authOptions = { url: 'https://accounts.spotify.com/api/token', headers: {'Authorization': 'Basic ' + (new Buffer(client_id + ':' + client_secret).toString('base64'))}, form: { grant_type: 'client_credentials' }, json: true };var playlist = nullfunction getPlaylist(){ request.post(authOptions, function(error, response, body) { if (!error && response.statusCode === 200) { // use the access token to access the Spotify Web API var token = body.access_token; console.log("time" + body.expires_in) var options = { url: "https://api.spotify.com/v1/users/spotify/playlists/" + playlist_id + "/tracks", headers: { 'Authorization': 'Bearer ' + token }, json: true }; request.get(options, function(error, response, body) { console.log(body); playlist = body; }); } });

Posts

Page 22: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

De node server heeft één post functie. Die wordt aangeroepen als aanpassingen zijn gemaakt aan de quotes listop de input.html pagina. Deze post zal de oude json file door de nieuwe vervangen.

Get

Als een get request gemaakt wordt naar /playlist.json dan wordt de lokaal opgeslage versie van de Spotify playlistdoor gestuurd naar de client.

Page 23: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Weervoorspelling

Op de spiegel zijn 3 temperaturen met opschriften now, later en tomorrow erboven te zien. De temperatuur van“now” komt vanzelfsprekend met de momentele temperatuur overeen de temperatuur bij later is de voorspeldetemperatuur over drie uur. De temperatuur bij morgen is de gemiddelde voorspelde temperatuur overdag. Voor deweersgegevens is gebruik gemaakt van de API van http://openweathermap.org. Deze heeft verschillende Api’s voorverschillende plaatsen ter beschikking. Degene die wij gebruiken zij de volgende:

NOW Current weather data http://api.openweathermap.org/data/2.5/weather?id=2803138,uk&units=metric&appid=439c7e095ae17682acab6e0ed64014f7",LATER 5 day / 3 hour forecast http://api.openweathermap.org/data/2.5/forecast?id=2803138,uk&units=metric&cnt=2&appid=439c7e095ae17682acab6e0ed64014f7",TOMORROW 16 day / daily forecast http://api.openweathermap.org/data/2.5/forecast/daily?id=2803138&mode=json&units=metric&cnt=7&appid=439c7e095ae17682acab6e0ed64014f7

Tussen deze drie links merken telkens 2 gelijkheden de id=2803138 enappid=439c7e095ae17682acab6e0ed64014f7 de 2803138 is de id van Antwerpen deze bepaald dus de locatievan de opgevraagde gegevens. Aan de hand van de Appid’s kan open weathermap bijhouden, hoe vaak en watvoor gegevens de appicatie opvraagt, wie de eigenaar is en voor wat voor doeleind deze app gebruikt wordt. Vooreen appid moet eerst een account aangemaakt worden bij openweathermap. Met deze account kunnen applicatiesgeregistreerd worden voor een appid. Voor testing kan de appid uit de code voorbeelden van openweathermapgebruikt worden. Deze blijven echter maar een week geldig.

Achter “Now” en de daarbij horende Temperatuur is een animatie overeenstemmend met de weersconditiezichtbaar zo zal bij storm een donderwolk getoond worden, bij regen regendruppels, bij sneeuw sneeuwvlokjes,etc. Deze animaties zijn filmpjes die met het html5 video element worden afgespeeld. In de data verkregen vanOpenweathermap is steeds een weer id meegegeven deze komt overeen met een weertoestand. Ondanks dat erettelijke weersituaties zijn, worden deze als gegroepeerd in vijf hoofdsituaties met bijhorende animaties.

De verschillende weer codes en hun bijhorende weersconditie is te vinden op volgende pagina.http://openweathermap.org/weather-conditions. Als het weer id onder de 300 ligt, dit komt overeen met deonweersgroep zal de onweeranimatie getoond worden. Tussen 300 en 400 de miezer groep of tussen de 500 en600 de regen groep. Zal neerslag getoond worden. Een ID tussen 600 en 700 duid valt onder de sneeuwgroep. Erworden sneeuwvlokjes getoond. Weer ID 800 staat voor open lucht 801 voor zeer licht bewolkt. Dit is een speciaalgeval. Oorspronkelijk werd een zon getoond bij in deze situatie maar dit was natuurlijk niet geheel correct. Bij eenheldere open lucht ‘s nachts zou een zon getoond worden. Daarom is dit voor de correctheid aangepast zodat bijopen hemel eerst wordt vergeleken of de huidige tijd tussen zonsopgang en zonsondergang ligt. Is dit het gevalword een zonnetje getoond anders word een maantje getoond. Deze weersituatie heeft dus in tegenstelling tot deandere weersituaties 2 animaties in plaats van één. Id’s tussen de 802 en 805 duiden op bewolking daarom zalhierbij een voorbij glijdende wolk getoond worden. Rekening houdend met de gemiddelde weer condities hier inBelgië en het klimaat is gekozen om Id’s die niet aan voorgaande voorwaarden voldoen, ook als bewolk wordenbeschouwd.

Page 24: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

twee zon en maan achter temperatuur

Page 25: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Newsfeed

Een van de features van de spiegel is een news-widget. Hier worden vijf actua headlines getoond. Oorspronkelijkwerd hier de RSS feed van “de redactie” voor gebruikt. Later werd dit veranderd naar de RSS feed van het VTMnieuws http://feeds.feedburner.com/vtm/NMdG. We gebruiken RSS feeds bij gebrek aan nieuws API’s. RSS kan nietzoals JSON of XML zomaar worden opgevraagd. We maken gebruik van de Google AJAX Feed API. Hiermee kan jeeender welke public Atom, RSS, of Media RSS feed mee downloaden. We willen natuurlijk dat dit nieuws zo actueelmogelijk is daarom zal het nieuws elk kwartier opnieuw worden opgevraagd. Niet al het nieuws in de RSS feed iseven relevant. Zo zitten er ook artikels met link naar video fragmenten bij. Deze artikels beginnen steeds met dekarakters “[VIDEO] – “. De spiegel zal enkel de headlines tonen en heeft geen functionaliteit om deze fragmenten afte spelen. Het melden van de aanwezigheid van video fragmenten heeft dus weinig toegevoegde waarde. Naoverleg met Nick heeft deze beslist, deze artikels niet te negeren en in hun plek andere artikels te tonen. Maar omde bovenstaande karakters uit de titel te filteren en enkel het relevante deel ervan te laten zien. Tot slot is het nieuwsin tegenstelling tot de rest van de spiegel in het Nederlands in plaats van in het Engels. Dit komt door gebrek aanEngels talige Belgische nieuws feed. Engels talige nieuws feeds zijn dan weer weinig relevant hier in België omdatdeze vooral nieuws over het Verenigd koninkrijk en USA bevatten.

Zonder en met spiegelglas voor het scherm

Page 26: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Uur en datum

Om het uur en de datum op het scherm te tonen is gebruik gemaakt van Moment.js . Een javascript library voor hetparsen, valideren, manipuleren en formatteren van datums en tijden. Bij het laden van de pagina wordt de dag ende maand juist gezet. Deze word elke nacht eenmaal om 12u ge-update. De tijd wordt gestart bij het laden en zalvanaf het laden van de pagina elke seconde worden ge-update. November five heeft ook een kantoor in New York.De plaatselijke tijd van daar wordt ook getoond. Deze wordt verkregen door de "utcoffset" functie van moment.js tegebruiken, New York ligt in tijdzone “UTC-5”.

Zonder en met spiegel glas

Page 27: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Guest-wifi Password

Het November Five guest wifi password veranderd wekelijks en zal ook op de spiegel getoond worden. Hier warenwat problemen met access right door veiligheidsmaat regels. Na de pi toe te voegen aan een vertrouwd netwerk,dat toegang aan apparaten verleed aan de hand van hun mac adders. Had de pi toegang tot de api.

Page 28: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Lunch

In de voormiddag meer bepaald tussen half negen en twaalf verschijnt na het begroeten van de gebruiker deresterende tijd tot het middagmaal en wat op het menu staat. Tussen deze tekst staan emoticons, het design vande spiegel is in tegenstelling zwart – wit en eerder strak dan speels. De emoticons passen dus niet binnen hetdesign en worden weg gefilterd. Tussen twaalf en een wordt “lunch is now” met menu getoond. De menu komt vanspencer. Spencer is de bedrijfs-app van November Five Hier kan je zaken zien zoals de menu van de week etc. Voorde spiegel een API request kon maken moest eerst een uitbreiding aan spencer geprogrammeerd worden dooreen van de backend collega’s, voor de spiegel toegang tot deze data kreeg.

Page 29: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Quotes

Is het niet tussen half 9 ‘s morgens en 1u ’s middags dan wordt er elke minuut een andere random quote en dequoter ervan getoond. Deze random quotes zijn door Nick gekozen. Ze worden lokaal op de Pi bewaard in eenJSON bestand. Om deze makkelijk te kunnen aanpassen zonder de spiegel telkens te moeten demonteren. Is een2de webpagina ontwikkeld. Op deze pagina is een lijst met quotes en hun quoters te zien. Een quote kangeselecteerd worden en daarna verwijderd of nieuwe quotes met bijhorende quoter kunnen worden toegevoegd.

met en zonder spiegelglas

Page 30: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

AudioHet audio object bevat twee HTML5 audio elementen. Eén voor het afspelen van muziek en één voor het afspelenvan spraak commando’s.

Spraaktechnologie

De interactie met de spiegel zal auditief gebeuren. Bij gebruik van Touchscreen zou het scherm binnen de kortstekeren vol vingerafdrukken en vegen staan. Zoals eerder aangehaald zijn er twee manieren om de spiegel te latenspreken. Enerzijds het afspelen van vooraf opgenomen audio bestanden die de boodschap bevatten. Anderzijdshet gebruik van een tekst naar spraak library die strings zal om zetten naar spraak berichten. De aanwezigheid vandeze twee mogelijkheden is als volgt ontstaan. Initieel was het idee om op een site zoals “fiverr” mensen met eenmooie stem de boodschappen te laten opnemen. Deze bestanden waren nog niet te beschikking maarondertussen moesten de speakers en stukken code met audio wel getest worden. Daarvoor is gebruik gemaaktvan ResponsiveVoice.JS http://responsivevoice.org/. Dit is een instant HTML5 gebaseerde tekst naar spraakbibliotheek. Hiermee kan je strings in een oogwenk naar een spraakbericht omzetten. Deze library ondersteund totwel 51 talen in 168 verschillende stemmen. In dit project is gebruik gemaakt van de “UK English Female”. Dezelibrary overtrof alle verwachtingen. Ze werkte betrouwbaar, snel en eenvoudig. De stem is dezelfde als destandaard google translate stem voor Engelse teksten. Ze wordt dus door gebruikers al geassocieerd alscomputerstem en komt al redelijk natuurlijk over. Het resultaat was zo bevredigend dat later werd besloten om dezelibrary te blijven gebruiken. Een klein nadeel is dat bij zware belasting van het host apparaat soms het begin vankortere boodschappen wordt afgekapt. Dit valt echter weinig voor, valt enkel op als erop wordt gelet en stoort dusamper. Een groot voordeel van de tekst naar spraak library is dat bij eventuele latere aanpassingen. Een string kanweggelaten, bijgevoegd of aangepast worden zonder enige extra kosten. Bij het gebruik van audio files moet jedezelfde spreker terug te pakken krijgen of alle boodschappen opnieuw laten opnemen. Om alle opties open tehouden is naast de tekst naar spraak library toch de mogelijkheid ingebouwd voor het gebruik van audio files. Dezeworden lokaal opgeslagen in de assets/audio map. De files die hier momenteel voor gebruikt worden zijn gemaaktop een website waar tekst naar audio files kan omzet worden. Deze hebben .ogg als extensie. Deze extensie isgeoptimaliseerd voor goede compressie en streaming.

De spraak commando’s voorlopig houdt de spiegel het op volgende commando’s:

Welkom bericht als de screensaver verdwijnt

Bij gebruik van audio files is dit eenvoudig: “welcome”.Bij de tekst to speech library zijn er momenteel drie mogelijke berichten waarvan er een random gekozenzal worden"Hello gorgeous, I'm Cindy, I'll be your assistant for today.","Hi goodlooking, I'm Samantha, I'll be your assistant for today.","How you doing?"Visuele ondersteuning van de boodschap

De vraag of hij een liedje wilt horen

"Do you want me to play a song?"Visuele ondersteuning van de boodschap

Page 31: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Als hij dit niet heeft verstaan vraagt hij eenmalig om dit te herhalen."I did not understand, can you please repeat?"

Spraak herkenning

Na het stellen van de vraag: “Do you want me to play a song?”. Wacht de spiegel op interactie van de gebruiker. Hijluistert naar het gesproken antwoord van de gebruiker. De spraak herkenning toepassen op dit antwoord isverwezenlijkt met behulp van de javascript web Speech API. Deze kan jammer maar ook wel logisch slechts naareen taal tegelijk luisteren en daar de spraak van naar tekst Omzetten. Voor deze spiegel is dat Amerikaans Engelsgeworden. Alles over de microfoon en hoe het geluid wordt opgenomen staat beschreven in het hoofdstuk overhardware.

Visueel wordt duidelijk aangegeven dat een gebruiker op de vraag kan antwoorden met "Yes" of "No". zijn viermogelijke scenario's die kunnen voorvallen. De eerste optie is het antwoorden van "No". In dit geval verdwijnt devraag en functioneert de spiegel verder in stilte tot de screensaver opnieuw is getoond en verborgen. Spraaktechnologie is niet eenvoudig omdat elke persoon een ander toonhoogte, intonatie en uitspraak heeft. Daarom ishet mogelijk dat in combinatie met achtergrond geluid de spiegel een gesproken commando met een homofoneuitspraak verward. Dit is eenvoudig opgelost door niet enkel tegen het woord "No" te filteren maar tegen allewoorden die soortgelijk klinken. Tijdens het debuggen ondervonden we dat dit enkel "nope" was. In de array metontkenningen zitten dus de 2 woorden: "no" en "nope". Voor de bevestigende woorden is dit:"Yes","us" en "this". Eentweede mogelijkheid is dat de spiegel de gebruiker hoort antwoorden, maar deze niet verstaat of een ander woordverstaat dan de 5 bovenstaande uit de array van ontkenning of bevestiging. De spiegel zal vragen om je commando

Page 32: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

te herhalen. Na overleg is beslist dat als de spiegel dit bij het herhalen nogmaals niet verstaat er vanuit maggegaan worden dat er een gesprek tussen twee personen aan de gang is of hij achtergrond geluid oppikt. Zodat hijdeze vraag niet oneindig blijft herhalen. De derde mogelijkheid is dat de spiegel helemaal geen geluid oppikt. In ditgeval zal hij de vraag laten verdwijnen en niet meer opnieuw stellen. De laatste mogelijkheid is het antwoorden vanYes. Het woord “yes” op het scherm krijgt een rode kleur. De boodschap blijft nog enkele seconden staan.

Muziek

Het tweed audio element zal een random gekozen nummer uit een Spotify afspeellijst afspelen. Spotifyafspeellijsten kunnen niet zomaar met een get request opgevraagd worden. In de header moet een geldige accesstoken aanwezig zijn. Het opvragen hiervan kan op verschillende manieren gebeuren. Hier is gebruik gemaakt vande "Client Credentials Flow". Dit dient voor server-to-server authenticatie en zal dus logischerwijs door de serverworden uitgevoerd. Dit wordt verder uitgelegd in het hoofdstuk over de server. De frontend stuurt een request naarde node server. De server heeft bij het opstarten de playlist bij Spotify opgevraagd en daarvan een versie lokaalopgeslagen. De lokale versie stuurt de server door naar de client. Hij zal de playlist elke 24u opnieuw bij Spotifyopvragen. Dit is vooral nuttig bij Hitlijsten die wekelijks anders zijn samengesteld. De front-end zal steeds bij hetopstarten en om middernacht de afspeellijst opnieuw bij de node server opvragen en op zijn beurt lokaal opslaan.Het opvragen bij het opstarten gebeurt met enkele seconden vertraging. Gebeurt dit niet dan zal bij het opstartenvan de pi de node server opstarten onmiddellijk gevolgd door chromium dat naar de spiegel webpage surft. Als bijhet laden van de client onmiddellijk de afspeellijst worden opgevraagd zullen de server en Spotify nog niet klaar zijnmet authentiseren. De node server zal een lege afspeellijst naar de client terug zenden. Om dit te voorkomen en deserver voldoende tijd te geven de access token op te vragen wachten we enkele seconden voor we de playlist bij deserver gaan opvragen.

Uit de verkregen afspeellijst zal een random liedje gekozen worden. Eerst wordt gecheckt of dit nummer een linknaar een fragment van het nummer bevat. Is dit niet het geval, wordt een nieuw nummer gekozen. Tot een nummermet URL gevonden wordt. Het fragment van de link zal door het tweede audio element van het audio object het

Page 33: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

element voor muziek afgespeeld worden. Er verschijnt een muziek widget met de titel van het nummer en de albumhoes.

Page 34: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

ScreensaverAls een persoon vlak voor de spiegel staat moet de webpagina met functionaliteit getoond worden. Staat erniemand vlak voor de spiegel. Moet een zwart achtergrond met het November Five logo getoond worden.

Io Sockets

Zoals eerder aangehaald monitort de node server met pythonshell het python script van de ledstrips en sensoren.Door de logs van dit script te bestuderen weet de server wanneer een persoon voor de spiegel staat. Om via debackend de frontend in te lichten wordt “socket.io” gebruikt. Met “Socket.io” kan realtime event-based bi-directionelecommunicatie worden opgezet. In dit project zal de communicatie eenzijdig van server naar client plaats vinden.“socket.io” werkt op elk platform browser of device met de focus op betrouwbaarheid en snelheid.

Screensaver

Aan de hand van wat de webpage via de sockets binnen krijgt zal bepaald worden. Of de screensaver op of af staat.IR sensoren zijn gevoelig aan omgevingslicht hierin bevind zich immers ook Infrarood licht. Proefondervindelijk isgebleken dat met kleine marge we kunnen stellen dat bij waardes hoger dan 15 er een persoon zich voor despiegel bevind. Als de socket waarden hoger dan 15 ontvangt zal de screensaver verdwijnen. Bij waarden lagerdan 15 zal deze opnieuw worden getoond, dit zal er eveneens voor zorgen dat alle audio stopt met spelen.

Page 35: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,
Page 36: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

HardwareOm te kunnen communiceren met de spiegel beschikt deze over enkele hardware componenten. voorlopig tweesensoren en twee ledstrips. Deze zullen in dit hoofdstuk over hardware besproken worden. Het aansturen van deSensoren en LED-strips gebeurd via een pythonscript. De code is geschreven in python2 dit kan van belang zijn bijhet runnen van de code. Op raspbian wordt python code zonder verdere specificatie als python2 code beschouwdop Arch is de standaard python, python3. Een van de vereisten van de spiegel was dat deze een screensavermoest tonen als er geen persoon vlak voor de spiegel stond, Als een persoon voor de spiegel plaatsnam moest deleds opgloeien en de screensaver verdwijnen. Om te weten of een persoon voor de spiegel staat moeten sensorenworden gebruikt worden.

Page 37: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Infrarood sensor

Initieel werd de Sharp GP2Y0A21YK gebruikt om aanwezigheid van personen te detecteren. Deze werkt op 5V entrekt 33mA. Deze sensor heeft drie aansluitingen: VCC, GND en een data-pin. Door zijn beperkte bereik (tot 80cm)is al snel overgeschakeld naar de grote broer: "de Sharp GP2Y0A02YK0F". Met een bereik van 20 tot 150cm . Zijnwerking is dezelfde, er moeten enkel 2 draadjes omgewisseld worden bij de aansluiting. Een Raspberry pibeschikt over GPIO pinnen om data in te lezen of uit te sturen, zoals de data van de data-pin van de sensor. Ditbleek echter minder evident dan gedacht, toen duidelijk werd dat de GPIO pinnen van een Raspberry pi enkeldigitaal zijn en geen een Raspberry pi over geen enkele analoge pin beschikt. Voor Output valt dit probleem nogredelijk eenvoudig op te lossen met PWM sturingen. voor input was dat een ander verhaal. Na enig research werkwerd de oplossing aangeboden in volgende fantastische guide https://learn.adafruit.com/downloads/pdf/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi.pdf Hierin wordt beschreven hoe je met behulp vaneen externe ADC zoals de MCP3008 met bit banged SPI code in Python analoge waarden kan inlezen. Omdat in destock van November Five de nagenoeg gelijke MCP3004 aanwezig was, is deze gebruikt i.p.v. de MCP3008. Hoe desensors aangesloten en aangestuurd moeten worden bespreken we later in de paragraaf: "inlezen van sensoren".

PIR sensor

Aangeraden is om in combinatie met de Infrarood sensor ook gebruik te maken van een PIR sensor, zoals de PIRMini Sensor ID 28033 van parallax. Ondanks dat Pir sensors ook infrarood sensors zijn, zijn er enkelebelangererijke verschillen. Hierdoor kan in geval van goede aansturing het combineren van deze twee sensoreneen enorme meerwaarde bieden. Om te beginnen heeft de PIR sensor een breder detectie gebied 100° en groterbereik tot ongeveer 3.5m. De Pir sensor zal echter geen spanning in verhouding tot de afstand met het bewegendobject op zijn uitgang genereren, Maar een hoog signaal in geval van detectie en een laag signaal wanneer geenbeweging word gedetecteerd. Een nadeel aan de Pir sensor is dat wanneer een gebruiker voor de sensoronbeweeglijk stilstaat de sensor geen verandering meer meet en dus een Laag signaal aan zijn uitgang zalkrijgen. Daarom zal het aansturingsscript logica bevaten die zorgt dat wanneer de PIR sensor geen aanwezigheiddetecteert, maar de IR sensor nog wel. De waarde van de IR zal doorgestuurd worde naar de Node server. Verderzullen er timers aanweezig zijn, deze moeten voorkomen dat er in de frontend te snel getoggeld wordt tussenscreensaver aan en uit, of tussen het in en uitfaden van de ledstrips. Als de Pir sensor nog beweging detecteert ende IR sensor een bepaalde periode geen aanwezigheid detecteert, betekend dit dat er personen in de buurt van despiegel bevinden maar er niet recht voor staan. De Leds rond de spiegel zullen oplichten maar de screensaver blijftgetoond.

Page 38: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Inlezen van de sensoren

Zoals eerder aangehaald staat in deze guide https://learn.adafruit.com/downloads/pdf/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi.pdf hoe we analoge waarden kunnen inlezen via de GPIO pinnenvan de Raspbeery pi. Aansluit schema en Voorbeeld code kan u terug vinden in de guide. Volgende lijnen code enhet het stuk achter de Titel "Run it. mogen alvast weg gelaten worden, ze dienen louter om het volume van deRaspberry pi aan te passen door aan de potentiometer te draaien. Voor onze toepassing is dit dus overbodig. Hetenkel inlezen van de waarden volstaat.

weg te laten code

print 'Volume = {volume}%' .format(volume = set_volume)set_vol_cmd = 'sudo amixer cset numid=1 -- {volume}% > /dev/null' .format(volume = set_volume)os.system(set_vol_cmd) # set volume

Als dit script werkt, is het weinig moete om de potentiometer te vervangen door de infraroodsensor. De sensor zalnaarmate een object zich dichter bij bevind een hogere uitgangsspanning genereren. Om ook de PIR in te lezen enniet enkel de IR sensor lezen we een 2de maal een waarde van de DAC in dit maal op pin 1 waar de PIR sensor isaangesloten ipv op pin 0 van de IR sensor.

Het finale script om de sensoren uit te lezen zal er als volgt uitzien. Zoals eerder aangehaald zal de IR sensor zijnuitgangs waarde in verbandstaan met de afstand die hij meet. De PIR sensor daarintegen zal enkel beweging ofgeen beweging detecteren, dus een logische 1 of 0 op zijn uitgang generenen. Zoals ook eerder aangehaald is deIR sensor gevoelig aan infraroodlicht in omgevingslicht. Met een kleine marge op dit opgepikt omgevings licht kangesteld worden dat waarden hoger dan 15 duiden op een object of persoon binnen in het bereik van onze sensor.

Page 39: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

De Pir sensor zal bij detectie van beweging een waarde schommelend rond de 60 uitsturen. Als hij geen bewegingdetecteerd zal deze waarde nul of net boven nul liggen. Om de uniformheid en een zekere marge in te bouwenkiezen zal ook de waarde van de pir sensor met waarde 15 vergeleken worden. Meten beide sensoren niets (leesals waarde lager als 15), dan word waarde nul gelogd. detecteerd een van de 2 een object of persoon (lees: eenwaarde hoger dan 15), dan word de waarde van een sensor gelogd. De waarde van de IR sensor heeft voorhangop degen van de PIR sensor. Omdat de waarde van de IR sensor meer informatie bevat dan de waarde van de PIR.Deze maakt enkel duidelijk dat er aanwezigheid is. Terwijl de IR data niet enkel op aanwezigheid duid maar ook deafstand tot de spiegel. Detecteren beide sensoren een object of persoon dan zal enkel de data van de IR sensorworden doorgestuurd. Enkel als de PIR een hoge uitgang heeft en de IR sensor een waarde lager als 15 zal dewaarde van de PIR doorgestuurd worden. Om te voorkomen dat op de frontend de screensaver frequent op en afspringt, zijn timers ingebouwd. Pas als vijf seconden lang aanwezigheid wordt gedetecteerd zal de waarde geprintworden, gevolgd door 5seconde pauze voor de volgende waarde geprint wordt. Dit voorkomt dat de spiegelopspringt bij het voorbij wandelen ervan. De spiegel zal pas uitschakelen na drie seconden geen aanwezigheidmeer gedetecteerd te hebben. Dit zorgt ervoor dat als een gebruiker bijvoorbeeld zeep neemt, niet onmiddelijkwaarde nul wordt geprint en de screensaver in de frontend opspringt, omdat het script geen aanwezigheid meerdetecteerd.

#!/usr/bin/env pythonimport timeimport sysimport osimport RPi.GPIO as GPIOGPIO.setmode(GPIO.BCM)DEBUG = 1

#ADC + sensor# read SPI data from MCP3008 chip, 4 possible adc's (0 thru 3)def readadc(adcnum, clockpin, mosipin, misopin, cspin): if (adcnum > 3) or (adcnum < 0): return -1 GPIO.output(cspin, True)

GPIO.output(clockpin, False) # start clock low GPIO.output(cspin, False) # bring CS low

commandout = adcnum commandout |= 0x18 # start bit + single-ended bit commandout <<= 3 # we only need to send 5 bits here for i in range(5): if (commandout & 0x80): GPIO.output(mosipin, True) else: GPIO.output(mosipin, False) commandout <<= 1 GPIO.output(clockpin, True) GPIO.output(clockpin, False) adcout = 0

# read in one empty bit, one null bit and 13 ADC bits for i in range(16): GPIO.output(clockpin, True) GPIO.output(clockpin, False) adcout <<= 1 if (GPIO.input(misopin)): adcout |= 0x1

GPIO.output(cspin, True)

adcout >>= 1 # first bit is 'null' so drop it return adcout

# change these as desired - they're the pins connected from the# SPI port on the ADC to the pi

Page 40: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

SPICLK = 23SPIMISO = 21SPIMOSI = 19SPICS = 24

# set up the SPI interface pinsGPIO.setwarnings(False)GPIO.setup(SPIMOSI, GPIO.OUT)GPIO.setup(SPIMISO, GPIO.IN)GPIO.setup(SPICLK, GPIO.OUT)GPIO.setup(SPICS, GPIO.OUT)

# read analog inputsIR_SensorMid = 0;PIR_Sensor = 1;

Last_Read_IR = 0Last_Read_PIR = 0Tolerance = 100 Output_IR = 0Output_PIR = 0detection_counter = 0no_detection_counter = 0

while True: # read the analog pins Value_IR = readadc(IR_SensorMid, SPICLK, SPIMOSI, SPIMISO, SPICS) Value_PIR = readadc(PIR_Sensor, SPICLK, SPIMOSI, SPIMISO, SPICS)

# how much has it changed since the last read? Adjust_IR = abs(Value_IR - Last_Read_IR) Last_Read_IR = Value_IR Adjust_PIR = abs(Value_PIR - Last_Read_PIR) Last_Read_PIR = Value_PIR

if (Adjust_IR > Tolerance ): Output_IR = Value_IR / 81.92 # convert 13bit adc0 (0-8192) trim pot read into 0-100 volume level Output_IR = round(Output_IR ) # round out decimal value Output_IR = int(Output_IR ) # cast volume as integer

if (Adjust_PIR > Tolerance ): Output_PIR = Value_PIR / 81.92 # convert 13bit adc0 (0-8192) trim pot read into 0-100 volume level Output_PIR = round(Output_PIR ) # round out decimal value Output_PIR = int(Output_PIR ) # cast volume as integer

if(Output_IR > 15 or Output_PIR > 15): no_detection_counter = 0 detection_counter = detection_counter + 1 if(detection_counter > 5): detection_counter = 0 if(output_IR > 15): print(output_IR) else: print(output_PIR) else: detection_counter = 0 no_detection_counter = no_detection_counter + 1 if(no_detection_counter > 3): no_detection_counter = 0 print(output_IR)

time.sleep(1)

Page 41: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,
Page 42: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

### Ledstrips

Boven en onder de spiegel komen Ledstrips. Een Ledstrip is een strook van aaneengeschakelde Leds. Demeeste Ledstrips hebben 2 aansluiting waarmee de hele strip mee kan worden opgelicht. Ledstrips zijnverkrijgbaar in verschillend aantal leds per meter. Dit project werd verwezenlijkt met strips 30 leds per meterbevatten en een lengte van 1 meter. Initieel werd gebruik gemaakt van RGB Neopixel led strips van Adafruit. Dezebeschikken niet over twee maar drie aansluitingen naast een 5V en een GND ook over een datapin. Dankzij dezedatapin kunnen we de leds individueel aansturen en zo bepalen of ze aan of uit staan hun kleur en intensiteit.Wanneer de Raspberry pi enkele taken tegelijk moet uitvoeren en daar zwaar mee belast word. Werd de benodigdekloksnelheid niet meer behaald, dit resulteerde in ongewenst gedrag, zoals flikkeren kleur veranderingen van vanbepaalde pixels etc. Daarom werd overgeschakeld naar de Dotstar ledstrips van Adafruit deze bevat maar liefst 4pinnen een 5V, GND, Data pin en een clockpin. Elke pixel kan op volledige sterkte tot 60mA trekken. Dit voor 60 ledskomt overeen met 3.6 ampère. De 5V van de Raspberry kan dus niet als voeding gebruikt worden. Deze kanmaximaal 2A leveren. Er zal dus van een externe voeding gebruik gemaakt worden. Naast externe voeding laten wede Ledstrips aan een lagere intensiteit branden. De Dotstar datapin werkt op 5V. De GPIO pinnen van de Raspberryleveren echter slechts 3.3V. Met een spanningsomvormer zoals de 74AHCT125 de spanning van 3.3V naar 5Vconverteren.

Aansturen van de Ledstrips

Page 43: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Om de Dotstar ledstrip te kunnen aansturen moet je gebruik maken van de Dotstar library. Deze is te vinden ophttps://learn.adafruit.com/adafruit-dotstar-leds/overview. Hier kan zowel een library voor Arduino als een pythonmodule voor Raspberry pi gedownload worden. Na het downloaden van de python module voor Raspberry pi is hetvoldoende te zorgen dat de Dotstar.so file in de zelfde map als het python script dat de leds aanstuurt staat.Aangeraden is om eerst te testen of de ledstrips correct aangesloten zijn. Door het voorbeeld programma uit depyton module strandtest.py te runnen kan gecheckt worden of de leds correct aangesloten zijn. Dit programmacombineert looplichtjes met faden naar andere kleuren etc. Het zal overduidelijk zijn als een ledstrip zich nietcorrect gedraagt. De spiegel moest de leds enkel geleidelijk kunnen in en uit faden, In dezelfde kleur. Het eersteledstrip controle script deed dit door een voor een de pixels kleur te veranderen. Dotstar pixels zijn RGB pixels. Ditbetekend dat een pixel uit drie kleuren pixels bestaat een rode, groene en blauwe. Door deze leds op verschillendeintensiteiten te laten branden kan je zowat elke andere kleur bekomen. De waarde 0 komt overeen met nietbranden, de waarde 255 betekend volle sterkte. Zo is de RGB waarde 255,255,0 bijvoorbeeld geel. Branden de drieleds even fel zal de kleur wit te zien zijn. Dit maakt van wit een speciale kleur. Dit is de enige kleur waarvan je deintensiteit kan bepalen door de ander leds van kleur te laten veranderen. Branden de drie leds elk op 255 dan is dekleur wit te zien. Branden de leds elks op 128 dan is nog steeds de kleur wit te zien maar op halve sterkte. Hetpython script voor de leds zou dus de leds een voor een aflopen, in dit geval alle dertig en een voor een de kleurmet een waarde verhogen of verlagen. Na het aanpassen van de laatste led werd de strip geüpdatet en werden deresultaten zichtbaar. Dit werd herhaald tot een van de twee absolute bereikt was. Afhankelijk of de leds in ofuitfaden. Dit wit licht voelde echter koud aan in het meer warme geler omgevingslicht. Daarom werd ook de kleurvan de leds aangepast naar 255,255,60

Met een andere kleur als wit is het onmogelijk de strip op voorgaande manier te laten in faden of uitfaden. In plaatsvan aan het begin van het script de intensiteit van de strip in te stellen en achteraf de kleuren aan te passen. Zal nude kleur bij het opstarten van het script gezet worden en zal achteraf de intensiteit verhoogd of verlaagd worden.Een voordeel is dat dit voor de hele strip geld en dus veel sneller gebeurd dan een voor een de kleuren van depixels aan te passen.

Hier ziet u een test script met 2 functies dit zal de leds laten in en uitfaden tot het script stopt. De maximalebrightness (intensiteit) is nooit 255 dit is veel te fel een zal een gebruiker van de spiegel verblinden. In het oudescript waar de kleur wit nog gebruikt werd. Is de brightness op ¼ van het maximum ingesteld, wit licht is immersfeller dan geler licht. In het nieuwere script met gele licht is de brightness naar 2/5 gezet.

Script met wit licht.

Page 44: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

#!/usr/bin/python

import timefrom dotstar import Adafruit_DotStar

numpixels = 30 # Number of LEDs in stripstrip = Adafruit_DotStar(numpixels) # Use SPI (pins 10=MOSI, 11=SCLK)

strip.begin() # Initialize pins for outputstrip.setBrightness(64) # Limit brightness to ~1/4 duty cycle

head = 0 # Index of first 'on' pixeltail = -10 # Index of last 'off' pixelcolor = 0xFF0000 # 'On' color (starts red)

def fadein(strip, wait_ms=5): for j in range(256): for i in range(strip.numPixels()): strip.setPixelColor(i, j,j,j) strip.show() time.sleep(wait_ms/1000.0)

def fadeOut(strip, wait_ms=5): for j in range(256): for i in range(strip.numPixels()): strip.setPixelColor(i,255-j,255-j,255-j) strip.show() time.sleep(wait_ms/1000.0)

while True: # Loop forever fadein(strip) fadeOut(strip)

Script met geel licht

#!/usr/bin/python

import timefrom dotstar import Adafruit_DotStarnumpixels = 30 # Number of LEDs instrip = Adafruit_DotStar(numpixels) # Use SPI (pins 10=MOSI, 11=SCLK)strip.begin() # Initialize pins for outputfor i in range(strip.numPixels()): # set color for each pixel, pixel by pixelstrip.setPixelColor(i,255,255,60) # DEPENDING ON THE COLOR YOU CAN SET THEstrip.setBrightness(0) # BRIGHTNESS, IF THE COLOR CHANGES CHANGE THE BRIGHTNESS!strip.show()

def fadeIn(strip): for j in range(100): strip.setBrightness(j) strip.show() time.sleep(0.01)

def fadeOut(strip): for j in range(100): strip.setBrightness(99 – j) strip.show() time.sleep(0.01)

while True: # Loop forever fadein(strip) fadeOut(strip)

Page 45: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,
Page 46: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Speakers

De spiegel moet met een persoon kunnen communiceren en als deze dat vraagt een sample van een spotifynummer afspelen. Het scherm dat gebruik is heeft geen interne boxen. Daarom zullen externe boxen gebruiktmoeten worden. De Raspberry pi beschikt over een 3mm analoge audio uitgang. Deze is echter nutteloos bij ditproject. Een Raspberry pi is een low cost computer, om kosten te bespraken beschikt deze dus niet over eenvolwaardige geluidskaart en gebruikt Pulse width modulation om zijn audio af te spelen. Dit heeft als aanzienlijknadeel dat er geen audio via de 3mm pin kan worden afgespeeld tegelijk met het gebruiken van PWM sturingen.Geluid Via HDMI afspelen kan wel perfect, omdat dit geluid digitaal is. De dotstarLeds maken gebruik van PWM,daarom is het niet mogelijk de 3mm output pin van de Raspberry pi te gebruiken. Er zijn verscheideneoplossingen. Enkele oplossingen zijn:

Gebruik boxen die via USB aangesloten zijn.USB is uiteraard digitaal, zoals eerder vermeld is het voor digitale audio geen probleem om tegelijk PWMsturingen te doen. USB Audio devices hebben vaak een interne geluidskaart om de audio via de USBconnectie van digitaal naar analoog om te zetten en daarna naar de boxen te sturen.

Een andere optie is het kopen van een scherm met interne boxen.Zo kan het geluid via HDMI naar het scherm worden gestuurd en kan daar de audio Afgespeeld worden.

De boxen gekocht voor dit project zijn USB powerd dit spaart heel wat plek van een extra adapter uit. Ietsminder is dat de audio nog steeds via een 3mm pin moet worden aangebracht. Het scherm had dan wel geeninterne boxen maar gelukkig wel een 3mm audio output aansluiting. We konden dus via HDMI audio naar hetscherm sturen die deze audio dan via de 3mm audio output dit naar de boxen stuurde....

Page 47: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Speak up module

Voor de USB-microphone is research gedaan naar de speak up. Met deze module kan je commando’s opnemen.Als de module een van deze opgenomen commando’s hoort zal hij erop reageren. De module kan stand alonegebruikt worden. Dan communiceert hij via zijn GPIO pinnen. Andersheid kan hij ook in click-mode gebruikt worden.Hier communiceert hij via USB of UART. Hij kan tot 200 commando’s onthouden. Jammerlijk bleek de speakupmodule niet geschikt voor dit project. Deze module had volgend probleem, Hij was stem afhankelijk. Enkelcommando’s gesproken door dezelfde persoon als bij de opnamen zullen herkend worden. Dit komt doordat elkepersoon een unieke stem heeft, verschillende toon hoogte, intonatie en uitspraak. Sterker nog zelfs commando’sgesproken door dezelfde stem als de opname werden niet steeds herkend. Dit probleem kon eventueel nogopgelost worden door hetzelfde commando meerderen malen op te nemen.

USB microfoon

De spiegel moet instaat zijn antwoorden te registeren en begrijpen die worden gegeven op de vragen die hij stelt.Een Raspberry pi beschikt niet over een 3mm microfoon ingang. Daarom is een USB microfoon de meest voor dehand liggende keuze. Deze hebben meestal geen extra configuratie nodig. Chromium zal echter telkens een httpwebpagina de microfoon wil gebruiken een pop up venster tonen waar je de website Toestemming kan geven demicrofoon te gebruiken. Om veiligheidsreden is het niet mogelijk een http pagina als vertrouwd in te stellen.Localhost is standaard een Http verbinding. Om dit om te vormen naar een https verbinding moet een ssl-certificaatworden uitgeschreven. Een certificaat kan gekocht worden bij bedrijven zoals Globalsign. Deze schrijvencertificaten uit die zonder problemen door de browser vertrouwd worden omdat een Root-certificaat aanwezig is.Het is ook mogelijk zelf een ssl-certificaat uit te schrijven. Je moet dit dan achteraf wel zelf manueel toevoegen aande lijst met vertrouwde certificaten in chromium. Anders zal een de pagina alsnog geblokkeerd worden. Van zodrade localhost succesvol als https webpagina beschikbaar is kunnen we deze als vertrouwd instellen en kan onzewebpage zonder meldingen de microfoon activeren.

Page 48: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,
Page 49: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Connecting hardwareZoals de meeste test opstellingen werd de schakeling eerst op een breadboard gemaakt. Er bestaan handigekoppelstukken om van de gpio pinnen naar een breadboard door te verbinden. Achteraf is een protoboard gebruiktom de componenten op te solderen zijn. Na aan weerszijde de 2buitenste pinnen los te solderen kan je dezelfdeconnector tussen Gpio van de pi en het protoboard gebruiken als voor het breadboard. Als deze pinnen niet losgesoldeerd zijn zal de connector niet passen in het protoboard. Deze pinnen hebben verder ook geen specialefuncties ze exact hetzelfde als de GND,3.3V en 5V pinnen op het middelste gedeelte van de connector. DeHardware componenten (Ledstrips en sensoren) zijn via connectoren op het protoboard aangesloten, zo zijn zeeenvoudig te vervangen bij een defect. De connecties aan de ledstrips zijn met krimpkousen afgewerkt.

Connecties

FROM pin TO pin

pi 19 MCP 11

21 MCP 12

23 MCP 13

24 MCP 10

SCLK MCP 12

MOSI Levelshifter 9

GND Levelshifter 13,10,7

GND MCP 14,9

GND PIR GND

GND IR GND

GND Ext 5V Source GND

GND LEDS GND

5V MCP 15,16

5V Levelshifter 1

5V PIR 5V

5V IR 5V

FROM pin TO pin

Ext 5V Source 5V LEDS 5V

GND pi GND

Page 50: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

FROM pin TO pin

LEDS 5V Ext 5V Source 5V

GND pi GND

DI Levelshifter 11

CL Levelshifter 8

FROM pin TO pin

PIR VDD pi 5V

GND pi GND

OUT MCP 2

FROM pin TO pin

PI VDD pi 5V

GND pi GND

OUT MCP 1

FROM pin TO pin

Levelshifter 7 pi GND

8 LEDS DI

9 pi MOSI

10 pi GND

11 LEDS CI

12 pi GND

13 pi SCLK

14 pi 5V

FROM pin TO pin

MCP 1 IR OUT

2 PIR OUT

9 pi GND

10 pi 24

11 pi 19

12 pi 21

13 pi 23

14 pi GND

15 pi 5V

16 pi 5V

Page 51: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Breadboard

De breadboard testopstelling

Schematic of protoboard drawn in fritzing

Blue are the onboard wiresRed are 5V wiresBlack are GND wiresYellow and White are Data and clock data wires

Page 52: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

.

Protoboard

Door gebrek aan rode draad in het labo is gebruik gemaakt van witte kabel voor de +5V draden. De zwarte dradenzijn GND draden. Grijs en geel zijn draden voor data of kloksignalen.

In de Afbeelding zijn de ledstrips er nog niet aan gesoldeerd.

Page 53: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Connectors

Om onze externe componenten te verbinden met ons protoboard gebruiken we connectors. Zo zijn ze eenvoudigaansluit en vervangbaar.

Connector From External source for leds to Protoboard

Page 54: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

.

Connectors From Protoboard to leds and sensors

Connector From Raspberry pi to Protoboard

Page 55: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

# Audio issue Omdat de geprobeerde oplossingen zeer breed waren. Past deze paragraaf niet in een van deandere hoofdstukken. Verder is van het tijdsbestek van dit project een aanzienlijk stuk aan het oplossen aan dezeaudio problemen besteed. Vandaar dit weleens waar klein maar volledig toegewijd hoofdstuk aan de audioproblemen.

Het probleemHet enkel afspelen van Spotify tracks in een loop achter elkaar verliep in 90% van de gevallen perfect. Het enkelafspelen van commando’s (welkom bericht gevolgd door de vraag achter of een liedje moest af gespeeld worden)werkte ook. Wanneer de twee werden samen gebracht liep er telkens iets mis. of de helft van gesprokenboodschappen werd afgekapt, of liedjes begonnen niet te spelen, of liedjes speelde 10 seconden en liepen danvast. Soms speelde de eerste keer na opnieuw opstarten alles perfect. Maar na de screensaver te tonen enopnieuw te verberg werden enkel de commando's afgespeeld. Het vreemde was dat de audio als ware crashtegoogle gaf namelijk nog steeds aan dat er muziek werd gespeeld door in het tabje de speaker te tonen dat ergeluid van die web pagina kwam. Maar er klonk geen geluid meer.

De oplossingenEr zijn ettelijke oplossingen geprobeerd hieronder zijn de voornaamste opgelijst.

Voice recognition

Eerst werd gedachten dat de Voice recognition in combinatie met het afspelen van de audio misschien tebelastend was. Dit te overbruggen had geen effect op de audio problemen.

Callback

Er is gekeken of er een probleem was met de callback functie door gebruik te maken van set time-outs in plaatsvan de callback fucntie. Ook dit loste de problemen niet op. Er is geprobeerd time outs in de callbacks te gebruikenzodat het audio element meer tijd kreeg of te laden. Er is zelfs geprobeerd deze wachttijd onacceptabel lang temaken. Maar zelfs met lang laad tijd bleven de audio issues verschijnen

Geforceerd stoppen

er is geprobeerd de audio geforceerd te stoppen door de audio stop functie meermaals na elkaar aan te roepen.Voor het afspelen van een nieuwe audio file

multi platform

zowel HTML5 audio, javascript audio, jquerry audio is geprobeerd.

Scheiding van audio elementen

Oorspronkelijk werd een element gebruikt voor het afspelen van audio dit is gesplitst naar 2 elementen. Één voormuziek en één voor commando’s dit is nog tot op heden zo maar loste de problemen niet op.

local opgeslagen commando’s of tekst to speech api

Page 56: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Er is getest of het verschil maakte of de Text to speech library werd gebruikte of lokaal opgeslagen .ogg files. Ook ishet verschil tussen .mp3 files en .ogg files is geprobeerd.

Nieuwe track? Nieuw Audio ellement

Het verschil is getest tussen één audio element aan te maken bij het laden van de pagina en hier telkens als eentrack eindigde onmiddellijk nieuwe tracks in te laden, maar er is ook geprobeerd elke keer audio moest wordengespeeld, het vorige audio element te verwijderen en telkens een nieuw aan te maken. Ook dit zonder resultaat.

back to basics

verder is een 2de versie test versie van de webpage aangemaakt die zo basic mogelijk was waar alles dat niet voorde audio nodig was, was weg "gestript". Maar ook hier kwamen de audio issues voor.

Preloaden

Er is geprobeerd tracks te pre-loaden. Het eerste liedje werd ingeladen bij het laden van de pagina. Decommando’s werden via een ander audio element afgespeeld dat dit liedje veel laadtijd kreeg. Het 2de liedje werdonmiddellijk geladen na het eindigen van het eerste liedje. Maar ook dit alles hielp niet.

Andere Browsers

Ik heb verschillende browsers geprobeerd Chromium 45 de huidige nieuwste versie van Raspbian. Raspbian wiltsteeds stabiel zijn en loopt daarom express een aantal versies achter zodat de versies die ze aanbieden zeker bugvrij zijn. Daarom heb ik deze guide gevolgt om te updaten naar de laatst uitgekomen versie van chromium

Page 57: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

https://www.raspberrypi.org/forums/viewtopic.php?t=121195. Zonder resultaat verder heb ik nog ICE-weaselgeprobeerd een fork van firefox ook zonder resultaat.

Hardware

Er dachten dat misschien de hardware van de pi te zwaar belast werd. We schakelden over van de Raspberry pi 2Bnaar een gloed nieuwe net gereleaste Raspberry pi 3. Maar ook dit deed de problemen niet verdwijnen.

Veranderen van Operating System

Het leek on onwaarschijnlijk dat deze nieuwe Raspberry Pi dit niet zou aankunnen, dus ik probeerde vanaf mijlaptop via het ip adres van de pi naar de webpagina te surfen en dit werkte zonder audio issues. Dit heb ik dannogmaals geprobeerd vanaf de Raspberry Pi van Oliver die als os Linux ARCH gebruikte in plaats van Raspbian.Ook hier werkte de pagina feilloos. Zoals u in hoofstuk1 al heeft kunnen lezen was dit de uit eindelijke oplossing,de audio problemen bleken dus aan Raspbian te liggen.

Page 58: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

De pi autobootable makenHet is gewenst dat als de spiegel zonder stroom valt deze niet volledig uit elkaar moet gehaald worden om eentoetsenbord te kunnen aansluiten en alles terug manueel op te starten. Dit moet geautomatiseerd worden zodat despiegel zichzelf opstart, zonder menselijke handeling. Net zoals in het hoofdstuk over configuratie zal enkel de Archconfiguratie besproken worden, ondanks dezelfde instelling ook op raspbian gemaakt zijn. De relevantie van deRaspbian configuratie valt jammerlijk weg door de audio issues die we daarmee ondervonden.

Auto boot node server

Om de node server op te starten bij boot gebruiken we supervisor. Dit is een Client/server system dat gebruikerstoelaat processen te monitoren en te controleren op UNIX-like operating systems. Oliver had supervisor reedsgebruikt voor zijn project. Ik moest dit dus niet opnieuw installeren. Oliver had in de “supervisor.conf “ file volgende 2lijnen toegevoegd:

[include]files=/etc/supervisor.d/*.ini

Dit zorgt ervoor dat supervisor alle .ini files in de supervisor.d map zal uitvoeren. Indien deze programma’s crashenze opnieuw opstarten. Het volstond dus om een nieuwe file met volgende inhoud aan te maken

sudo nano /etc/supervisor.d/server.ini

[program:nodeServer]directory = /home/dev/repos/apps-0002-interactive-mirror-hardware/myapp/command=sudo node app.jsuser=devstartsec=0startretries=0autorestart=true

Autoboot pythonscript

Het pythonscript zal nog steeds door Pythonshell in de node server gestart en gemonitord worden. Bij Arch is destandaard python het echter python3 terwijl bij Raspbian dit Python 2 is. Onze code is in Python 2 geschreven. Delijnen die bij Raspbian ons script startte zullen nu dezelfde error veroorzaken als een python2 script met Python 3runnen. Door het server script aan te passen en als optie het pad naar python 2 mee te geven, zal python 2 gebruikworden om het script te runnen.

PythonShell = require('python-shell'),pyshell = new PythonShell('Pythonscript.py'),

PythonShell = require('python-shell'),options = {pythonPath: 'usr/bin/python2'}pyshell = new PythonShell('Pythonscript.py',options),

Autoboot chromium

Om Chromium te auto booten is gebruik gemaakt van LXsession. In te stellen via de LXsession configuratie userinterface . Deze is te vinden onder home > preferences > Default applications for LXSession. Voeg volgende lijn toe:

Page 59: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

chromium-browser --incognito --allow-running-insecure-content --kiosk https://localhost:3000

De “incognito” parameter zal zorgen dat bij het uitvallen en opnieuw opstarten van de spiegel geen melding voorhet herstellen van pagina’s te zien zal zijn. De “allow-running-insecure-content” zorgt ervoor dat de data van de weerAPI geladen wordt deze wordt standaard geblokt omdat de gegevens van een HTTP verbinding komen terwijl deverbinding van de spiegel webpage HTTPS is. De weer api is niet beschikbaar in HTTPS.

De “kiosk” parameter zorgt dat dat zoekbalken, scrolbalken, etc verborgen worden.

Verbergen van de muis cursor

Als de pi boot en automatisch chromium in kiosk mode opstart blijft de muispointer zichtbaar. Zelfs als geen muisaangesloten is. Door in de /.xinitrc onderstaande lijn toe voegen, zal de muiscursor na korte periode van inactiviteitverborgen worden. Is er wel een muis aangesloten is het genoeg deze te bewegen om de cursor opnieuw te latenverschijnen.

unclutter -grab &

vermijd scherm slaapstand

Na tien minuten geen gebruikers activiteit te registreren, gaat het scherm voor ecologische redenen in slaapstandhet scherm wordt zwart tot een toets wordt aangeslagen of de muis beweegt. Dit moet bij deze toepassinguiteraard worden vermeden. Volgende lijnen code in de /.xinitrc file zullen vermijden het scherm in slaapstand telaten gaan.

xset -dpms &xset s noblank &xset s off &

Deze configuratie kan ten allen tijden gecheckt worde met commando “xset –q”. Achter de lijn “prefer blanking”moet het woord “no” staan.

Page 60: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Monteren van de spiegelDe spiegel zal met een ijzer gelast frame worden opgehangen. Achteraan in het frame is een cirkelvormig gat opengelaten hier zal een gat door de muur geboord worden zodat de stroom uit achterliggende kamer kan wordenafgetapt. Zo kunnen de kabels door dat gat weg gewerkt worden

Je ziet dat het frame opgedeeld is in 5 vlakken. In het middelste vlak komt de spiegel in elke hoeke van dit vlakmerk je een klein kubusjes met uitsparing op. Deze zijn 3D geprint en zullen zorgen dat het scherm in het middenvan het frame staat en geen ijzer hoeft aan te raken. Onderaan kan u de van hun behuizing ontdane speakers zien.

Page 61: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Initieel was het plan om de Raspberry achter het scherm aan te brengen maar met alle aansluitingen was ookhiervoor het frame te ondiep. Omdat de spiegel over de hele breedte van de muur komt. Kan de pi zonder probleemnaast het frame plaatsen. Voor de draden is rechts onderaan een sleuf gemaakt.

Op deze foto ziet u ook dat het protoboard in een 3D geprint doosje is vastgevezen. Zodat dit deftig kon wordenopgehangen.

Page 62: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Op deze foto ziet u ook dat het protoboard in een 3D geprint doosje is vastgevezen. Zodat dit deftig kon wordenopgehangen.

Hier ziet u het scherm in het frame geplaatst.

Page 63: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Plaatsen van de spiegel

Page 64: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

Een L-profiel boven en onderaan houden de spiegel op zijn plaats

Op volgende Foto’s merkt u boven de spiegel een bakje op. Hierin zitten de sensoren. Rechts was plaats voor demicrofoon voorzien. Deze bleek echter geluid goed genoeg achter de spiegel te kunnen registreren. Zonder demicrofoon kan het bakje vele malen kleiner. Ondertussen is een nieuw kleiner bakje 3D geprint. Dit moet enkel nogworden vervangen. Op termijn komen de sensoren misschien onder de wasbak zodat deze ook mooi weg gewerktzijn.

Page 65: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,
Page 66: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

ResultaatAan het einde van dit project kunnen we tevreden terugblikken en trots zijn op het resultaat. Enkel het inbouwen vanbluetooth beacons is niet verwezenlijkt. Dit Kwam echter door externe oorzaken, zoals het ontbreken van regelsover rechten van zo een beacon binnen het bedrijf omm security issues te vermijden. Deze moesten eerstopgesteld worden voor deze konden worden geïntegreerd. Alle overig gestelde doel einden zijn bereikt.

Een minder puntje aan de spiegel is dat het spiegelbeeld redelijk donker is. Dit valt op photo niet te zien. Maar hiervalt natuurlijk weinig aan te veranderen. Er is met verschillende spiegels getest. Maar ze waren alle even donker.Ondanks dit kan zeker gesteld worden dat het project de verwachtingen heeft ingevuld. De spiegel hangt en heefteen moderne professionele uitstraling. De audio klinkt helder zonder haperingen, de spiegel begrijpt commando’sgoed. Zelf voor de gebruikers die de spiegel niet interactief gebruiken bied hij een meerwaarde. Het herinneren vande datum, enkele nieuws flashes, het uur. Allemaal in een oog opslag terwijl je toch je handen staat te wassen. Detijd die vroeger enkel naar het wassen van handen ging wordt nu dubbel besteed.

Page 67: Table of Contents - AP Hogeschoolbeta.eaict.ap.be/wp-content/uploads/2016/06/schrauwen1516.pdf · Om deze bachelor proef te verwezenlijken zijn technologieën zoals Raspberry pi,

BesluitOver de eerste weken van de stage mag zeker gezegd worden dat het wat zoeken was. Zonder enigenoemenswaardig ervaring met Raspberry Pi en zo goed als geen ervaring met Linux. Was de instap in dit projectniet evident. Door het dagelijks gebruik vlotte het leerproces uiteraard goed. Tegen de tijd dat halverwege hetproject de overstap van Raspbian naar Arch gemaakt moest worden. Vormde Bash al lang geen probleem meer.Wat de overstap naar Arch vergemakkelijkte. De instap drempel naar Arch ligt als beginner immers een stuk hogerdan de instap drempel naar Raspbian. Verder heb ik tijdens dit project via zelfstudie een nieuwe programmatie taalaangeleerd. Voor dit Project had ik immers nog nooit een lijn python code gezien. Dit zijn maar enkele voorbeeldenvan de kennis verrijkt bij dit project. Er kan dus zeker en vast gesteld worden dat dit een leerrijk project was. Stapper stap sprint per sprint ging het project vooruit. Wat eerst nog lang niet op de spiegel leek die het moest worden.Veranderde onmiddellijk toen de eerste test spiegel aankwam. Dit gaf extra motivatie om het project succesvol teeindigen. Elk einde van de week was duidelijk de progressie te zien. Week na week werd de spiegelindrukwekkender, tot het uiteindelijke mooie eindresultaat werd bekomen. Het feit dat er een fysiek resultaat is, datook nog eens gezien mag worden geeft enorme voldoening. Net zoals na zo lang aan een project werken, allegestelde doelen te behalen. En zo een afgewerkt product te kunnen afleveren. Momenteel zijn de aansluitkabelsnog niet weg gewerkt. Maar eens ook deze door een gat in de muur worden weg gewerkt. Zal de spiegel een vanzeer strakke, moderne uitstraling genieten. Nu de spiegel in gebruik genomen door het brede publiek is, ben ik erzeker van dat nieuwe ideeën van collega’s en cliënteel zullen binnenstromen. Met als gevolg dat er innovaties enuitbreidingen aan de spiegel zullen blijven gemaakt worden. Dit maakt dat de spiegel na updates zal blijvenverbazen en geen vergeten project bekomt. Ook dit draagt bij tot het met een voldaan gevoel afsluiten van ditproject.

Een ding staat vast, terwijl toilet bezoeken en het achteraf wassen van de handen normaal saai en steeds hetzelfdezijn. Zullen ze toilet bezoeken bij November Five aangenaam en verrijkend zijn.