5 februari 2018 • februari 7, 2018 at 3:06 pm Qdraw

Met Tabletop bijhouden of de tafelvoetbal vrij is

Realtime bijhouden of een ruimte bezet is, het kan allemaal met Internet of Things. Als side project heb ik een webapp gemaakt waarbij te zien of een ruimte vrij is of niet. Hier maakt ik gebruik van een Arduino met bewegingssensor die waardes doorstuurt naar een website.

Realtime zien of een kamer vrij is.

In één oogopslag is te zien of ruimte bezet is en in de webapp is er te zien wanneer er voor het laatste activiteit is geweest. In de grafiek onder de laatste activiteit is er een overzicht van alle recente bewegingen.



Met Tabletop bijhouden of de tafelvoetbaltafel vrij is Live – Table footbal webapp ; tabletop, mockup, webapp

Fun facts

De tabletop app draait nu vanaf 10 januari op het kantoor waar ik werk. Het gaat over een periode van 16 werkdagen. Dit zijn leuke weetjes: Er zijn drie pieken op een dag. De eerste piek is om 12:30. Je hebt dan 12% kans dat de tafel dan vrij is. Om 13:00 uur is het tot nu toe altijd piektijd en om half 4 is de kans 25%.



Met Tabletop bijhouden of de tafelvoetbaltafel vrij is Live – Table footbal webapp ; Tabletop, all time
Het aantal bewegingen in de Tabletop kamer. Deze zijn samengevoegd per 5 minuten in één staaf.

 

Hoe werkt Tabletop nu?

Een Arduino met een PIR-sensor houdt bij of er beweging wordt geconstateerd. Een Arduino is een microprocessor waarbij het mogelijk is om relatief eenvoudig zelf programma’s op te zetten. Een PIR-sensor wordt ook gebruikt in buitenlampen met een bewegingssensor. Deze stuurt via het internet berichten door naar een webserver. Deze server kan twee type acties uitvoeren. De eerste actie is het verzamelen van data en deze wegschrijven naar een database. De tweede actie is het tonen van data. Wanneer er een bezoeker op de webapp komt wordt een data visualisatie gemaakt van de meest recente bewegingen.

Voor deze setup heb ik gebruik gemaakt van de volgende technieken:

  • .NET Core 2
  • ASP.NET MVC
  • SignalR SSE/Websockets
  • Send events van een Arduino met een ethernet shield en een PIR-Sensor
  • D3.v4 Javascript Datavisualisation

 

Mocht je geïnteresseerd zijn in de werking dan is de code open source beschikbaar en op Github te downloaden. Heb je vragen stuur mij dan een mailtje dan kunnen we een kopje koffiedrinken.



Met Tabletop bijhouden of de tafelvoetbaltafel vrij is Het aantal bewegingen in de Tabletop kamer. Deze zijn samengevoegd per 5 minuten in één staaf. ; Visual Studio, C#, .Net Core 2, MVC

Gebruik SignalR om de UI realtime te updaten

Dit bericht is geschreven door: Dion

Tags: ,

Gecategoriseerd in:

2 mei 2017 • juli 16, 2017 at 6:20 pm Qdraw

Vanuit de cloud je eigen Hue-ledstrip besturen

Een computer is niet meer het enige device dat online is. Andere apparaten zoals een smartwatch of koelkast zijn ook online. Bij u thuis alleen al kan er een netwerk bestaan uit lampen, een thermostaat, sieraden, de auto’s, en uw koelkast. Samen vormen deze het ‘Internet of Things’.

Dankzij het netwerk van devices automatiseer je het hele huis. Natuurlijk kun je zelf ook op afstand je lampen blijven bedienen.

Een ‘smart home’ klinkt misschien ver weg, maar in dit artikel laten we zien hoe je zelf een Ledstrip smart maakt en deze bestuurt vanuit de cloud. Met niet meer dan een goedkoop ledstripje en een Raspberry Pi kun vanuit je eigen slack-app je kleuren instellen.

Een chatbot waarbij je kleuren kunt aanpassen

Vanuit de chatbot moet het mogelijk zijn om kleuren aan te passen. Gewoon omdat het cool is! In dit project zit het hele proces van het opzetten van een Internet-of-things-device (IOT). Van het aansturen van poorten tot het koppelen aan een internet dienst. Voor dit artikel heb ik gekozen om dit via Slack te doen. Slack is een chatprogramma om snel binnen teams te communiceren. Slack biedt ook de mogelijkheid om een chatbot in deze gesprekken te integreren.

Wat ben ik hiervoor nodig?

  • Raspberry Pi (2 of 3)
    • Micro SD –kaart
    • 2,5 Ampère Micro USB-voeding
  • Ledstrip (12V 5050 RGB-ledstrip)
  • 3 Transistors (BD139)
  • Breadboard en draadjes
  • Leddimmer. (PWM-board: PCA9685)

 

TL;DR

 

Raspberry Pi configuratie

Wanneer je Raspbian (Lite) hebt draaien op je Raspberry Pi dan kun je starten met deze tutorial. In de volgende stappen leg ik uit hoe je dit zelf kunt uitvoeren. Op de site van de Raspberry Pi-foundation staat een goede uitleg om het device te installeren. Zet de image van de site op het SD-kaartje en start de Raspberry Pi op. Standaard start het apparaat op met pi als gebruiker en raspberry als wachtwoord.

Installeer Node.JS

Mijn scripts draaien op Node.js. Node.js is softwareplatform waarop men applicaties kan ontwikkelen en draaien. Die applicaties worden geschreven in JavaScript. Normaal wordt JavaScript uitgevoerd door een webbrowser maar in dit geval wordt JavaScript uitgevoerd door de Raspberry Pi.

In de package-manager van Raspbian is Node.js sterk verouderd. Een package-manager is op dit platform de App-store. Dus daarom installeren we het programma vanaf de officiële website. In de volgende stappen leg ik uit hoe je dat doet.

In deze tutorial maak ik gebruik van Terminal commando’s. Wanneer je niet zo goed weet hoe dit werkt, klik dan hier Je kunt via een commando-regel inloggen vanaf een ander apparaat (SSH). Het is ook mogelijk om via het apparaat zelf commando’s in te geven. Op de Raspberry Pi-site wordt een uitleg gegeven van hoe SSH werkt. In dit artikel gebruik ik het dollar teken om aan te geven dat het een terminal commando is dat als normale gebruiker wordt uitgevoerd. Je hoeft het dollar-teken niet mee te kopieren.

Wanneer je bent ingelogd op het device. Vanaf deze site downloaden we een bestand.

$ wget https://nodejs.org/dist/v7.8.0/node-v7.8.0-linux-armv7l.tar.gz

Vervolgens pak ik dit bestand uit

$ tar -xvf node-v*-linux-armv7l.tar.gz

Wissel ik van map en ga naar de net uitgepakte map

$ cd node-v*-linux-armv7l

Nu ga ik kopieren met speciale rechten (sudo). Het kan zijn dat er gevraagd wordt om een wachtwoord, als je deze niet veranderd hebt is dit: raspberry

$ sudo cp -R * /usr/local/

In de volgende stap controleer je of de installatie goed is gegaan. Als het goed is antwoord het onderstaande commando: v7.8.0

$ node -v

Zet i2c aan

Om te communiceren met het bordje waarmee de leds gedimd worden maken we gebruik van I2C.  I2C is bedacht om op een snelle en goedkope manier te tussen chips te communiceren. Voor de data-overdracht wordt er gebruik gemaakt van twee draden. SCL wordt gebruikt om een klok-signaal door te geven en SDA zorgt voor de data.

Standaard staat I2C op een Raspberry Pi uit en in de onderstaande stappen leg ik uit hoe je dit kunt activeren.

In het volgende bestand verwijderen we het hekje voor de tekst. Om het bestand op te slaan en af te sluiten gebruik je de toetsen combinatie Ctrl-X en toets vervolgens Y voor Yes

$ sudo nano /boot/config.txt

#device_tree_param=i2c_arm=on

Even herstarten en de veranderingen zijn doorgevoerd

$ sudo reboot

Om te controleren of I2C werkt installeer ik i2cdetect

$ sudo apt-get install -y i2c-tools

Met dit commando controleer ik of I2C werkt

$ sudo i2cdetect -y 1

i2cdetect -y 1

Mocht de uitkomst van het commando anders zijn dan hierboven.
De website Adafruit heeft een uitgebreide uitleg over het aanzetten van i2c onder Raspbian.

Clone de webapp

De code van de webapp heb ik gehost op github. Door het volgende commando uit te voeren haal je de code binnen

$ git clone "https://github.com/qdraw/raspberry-pi-rgb-ledstrip"

$ cd raspberry-pi-rgb-ledstrip

Installeer de benodigde packages

$ npm install

Start de webapp

$ npm start

No key file found. One was generated. Here is the public key: mhvr00pcowwqobneq2

App is gestart op http://localhost:5037

https://mhv*q2.localtunnel.me/webhook

De hardware setup

Wanneer de vorige code wordt uitgevoerd gebeurt er nog niks, er is nog geen hardware aangesloten. In deze stap sluiten we de hardware aan. Bij een Raspberry Pi-project is de moeilijkheid dat de combinatie tussen de hardware en software goed moet werken.

Voor setup heb ik een schema gemaakt waarin beschreven staat hoe de aansluitingen gedaan moeten worden.

 


Vanuit de cloud je eigen Hue-ledstrip besturen ; | foto 1

Het aansluitschema (gebaseerd op: Adafruit-documentatie)

 


Vanuit de cloud je eigen Hue-ledstrip besturen ; | foto 2

Dit is de setup zoals het bij mij thuis eruitziet

De keuze om gebruik te maken van een PWM-board

Een Raspberry Pi heeft out-of-the-box 2 PWM-kanalen. Deze 2 PWM-kanalen zijn verdeeld over 4 GPIO-poorten.  Daarnaast heeft de Raspberry Pi ook nog de beperking dat het PWM gebruiken is of een normale schakeling.

Slack API

Slack biedt ook de mogelijkheid om een chatbot in deze gesprekken te integreren. Dit heet Slash Commands. Wanneer je een slack-app aanmaakt op https://api.slack.com/apps?new_app=1

In de volgende stappen lopen door de setup van Slack heen.


Vanuit de cloud je eigen Hue-ledstrip besturen ; | foto 3

Zo ziet het eerste proces van ‘Create an App eruit’


Vanuit de cloud je eigen Hue-ledstrip besturen ; | foto 4

We maken een Slash Command aan. Aan de linkerkant is het menu zichtbaar waar ‘Slash Commands’ zichtbaar zijn. Klik hier op om een nieuw Slash Command aan te maken. Vervolgens klik je op ‘Create New Command’ om verder te gaan.

 


Vanuit de cloud je eigen Hue-ledstrip besturen ; | foto 5

Voer hier de waardes in die de webapp weergeeft geeft. Op
deze manier weet Slack wat er moet gebeuren als er /mycommand wordt ingevoerd.
Tevens is het mogelijk om een omschrijving weer te geven.

Vanuit de cloud je eigen Hue-ledstrip besturen ; | foto 6

Het is gelukt, vanaf nu kun je vanuit Slack een ledstrip besturen. In het voorbeeld gebruik ik /kleur rood om de Raspberry Pi te activeren.


Vanuit de cloud je eigen Hue-ledstrip besturen ; | foto 7

Mocht je vragen hebben over deze tutorial of over de wereld van ‘Internet of Things’ je interesse hebben gewekt. Maar weet je nog niet hoe je dit kunt toepassen en heb je de nodige vragen? Stuur mij dan een mailtje dan kunnen we een kopje koffie drinken.

Deze blogpost verscheen op Qdraw.nl

Dit bericht is geschreven door: Dion

Tags: ,

Gecategoriseerd in: