Bekijk online

Smartphone based user interface
Academiejaar 2013-2014
Tom Mouton
Promotoren: prof. ir. Luc Colman, ir. Bjorn Van Keymeulen
Begeleiders: dr. Ir. Frederick Bossuyt, dr. Ir. Thomas Vervust
Masterproef ingediend tot het behalen van de academische graad van
Master of Science in de industriële wetenschappen: elektronica-ICT.
Afstudeerrichting: elektronica
Vakgroep Industriële Technologie en Constructie
Vakgroep Elektronica en Informatiesystemen
Faculteit Ingenieurswetenschappen en Architectuur
Smartphone based user interface
Academiejaar 2013-2014
Tom Mouton
Promotoren: prof. ir. Luc Colman, ir. Bjorn Van Keymeulen
Begeleiders: dr. Ir. Frederick Bossuyt, dr. Ir. Thomas Vervust
Masterproef ingediend tot het behalen van de academische graad van
Master of Science in de industriële wetenschappen: elektronica-ICT.
Afstudeerrichting: elektronica
Vakgroep Industriële Technologie en Constructie
Vakgroep Elektronica en Informatiesystemen
Faculteit Ingenieurswetenschappen en Architectuur
De auteur en promotor geven de toelating deze scriptie voor consultatie beschikbaar te stellen
en delen ervan te kopiëren voor persoonlijk gebruik. Elk ander gebruik valt onder de
beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting
uitdrukkelijk de bron te vermelden bij het aanhalen van resultaten uit deze scriptie.
This author and promoter give the permission to use this thesis for consultation and to copy
parts of it for personal use. Every other use is subject to the copyright laws, more specifically
the source must be extensively specified when using from this thesis.
Gent, June 2014
De promoters
Prof. Ir. Luc Colman
Ir. Bjorn Van Keymeulen
De begeleiders
Dr. Ir. Frederick Bossuyt
Dr. Ir. Thomas Vervust
De auteur
Tom Mouton
Woord vooraf
De thesis is de kers op de taart van een academische opleiding. Ik ben altijd veel bezig
geweest met het uitwerken van hardware. Daarom wou ik ook een thesis waarbij dit aanwezig
is. Dit heb ik gevonden bij de onderwerpen van CMST. Het onderwerp waar ik voor gekozen
heb is “Smartphone based user interface”, hierin is het de bedoeling een systeem te maken dat
bedienbaar is met een smartphone.
Een volledige thesis kan men nooit alleen maken men heeft hiervoor altijd goede begeleiders
nodig, daarom dank ik mijn promotoren prof. Ir. Luc Colman en ir. Bjorn Van Keymeulen. En
men begeleiders dr. Ir. Frederick Bossuyt en dr. Ir. Thomas Vervust. Voor de goede
begeleiding en de vele tips die ze gaven.
Ook bedank ik alle docenten die in de loop der jaren les gegeven hebben, met de kennis die ik
heb opgedaan, zonder deze kennis kon ik deze thesis niet tot een goed einde brengen.
Alsook bedank ik mijn vriendin en mijn familie voor de steun tijdens de moeilijke momenten.
Met een extra voor mijn ouders die mij de kans geven om een hoger diploma te behalen.
Daarnaast dank ik ook alle medeleerlingen het tijdens de volledige opleiding zeer aangenaam
hebben gemaakt. Met speciale aandacht voor Joren De Witte waarmee voor de gezellige sfeer
in het labo. En aan de drukker Michaël De Coster voor het goede drukwerk dat hij heeft
afgeleverd.
Tom Mouton, juni 2014
Abstract Nederlands
CMST had als doel een smartphone based user interface te creëren. Het systeem moet
sensoren en actuatoren bedienen, deze moeten allemaal uitgelezen en bediend kunnen worden
door een smartphone. Een bijkomend vereiste is dat alle sensoren en actuatoren plug en play
zijn. Zo kan de gebruiker bijkomende sensoren of actuatoren aansluiten. Voor de
communicatie wordt de I²C bus gebruikt waarop een automatisch adresseersysteem is
aangebracht. Het systeem zal volledig autonoom werken, het zal opdrachten uitvoeren als
bepaalde sensorwaarden zijn overschreden. Deze opdrachten kunnen via de smartphone
ingesteld worden. De applicatie voor de smartphone is speciaal opgebouwd voor deze
toepassing. Het systeem wordt draagbaar gemaakt hierdoor wordt er gebruik gemaakt van een
batterij. De batterij wordt opgeladen door het QI systeem.
Kernwoorden: android, I²C bus, automatisch adresseren, sensoren en actuatoren bedienen, QI,
draadloos opladen
Abstract English
CMST aimed to create a smartphone based user interface. The system has to operate an array
of sensors and actuators, these can be operated with whit a smartphone. An additional
requirement is that all the sensor and actuators must be plug_and_play. Thus the user can
connect additional sensors and actuators whenever he wants. The choice for communication is
the I²C bus, this bus system uses an automatic addressing system which is implemented in
software. The system will operate completely autonomously, it will execute commands when
certain sensor values are exceeded. These commands can be set via the smartphone. The
smartphone application will be specially build for this application. The system will be
portable, that’s why the use of a battery is needed. For charging the battery we will use the QI
system to wireless charge the battery.
Keywords: android, I²C, I²C automatic addressing, operate sensors and actuators, QI, wireless
charging
Inleiding:
Deze thesis werd uitgevoerd in opdracht van het centre for microsystems technology (CMST).
Het doel van de thesis was om een gebruikersinterface te ontwikkelen dat een bijhorend
systeem zal aansturen.
De ontwikkelde gebruiksinterface zal geïmplementeerd worden op een smartphone of ander
draagbaar apparaat. Deze zal draadloos communiceren met het systeem, zo zijn er geen
problemen met verschillende aansluitingen en warrige kabels.
Het systeem zal bestaan uit een basismodule waarop verschillende sensoren en actuatoren zijn
aangesloten. Deze sensoren en actuatoren kunnen zeer uiteenlopend zijn zo kan men
accelerometers, temperatuursensoren, drukknoppen,… maar ook leds, motors,
servomotors,… allemaal op hetzelfde systeem aansluiten. De sensoren en actuatoren zullen
plug en play zijn. Dit wil zeggen dat men een sensor of actuator kan wegnemen of bijplaatsen
zonder dat het systeem volledig moet heropgestart moet worden.
Enkele bijkomende functionaliteiten van het totale systeem zijn, de gebruiker kan bepaalde
opdrachten instellen, zo kan een datalogger worden geïmplementeerd maar het kan ook
dienen als een alarm als een bepaalde waarde van een sensor is overschreden.
Het systeem zal draagbaar worden, hiervoor wordt er gebruik gemaakt van een oplaadbare
batterij. De energie waarmee de batterij zal opgeladen worden, zal draadloos worden
doorgezonden.
Het systeem werkt volledig autonoom, de applicatie op de smartphone zal enkel gebruikt
worden om het systeem in te stellen, en om metingen zichtbaar te maken.
Inhoud
Woord vooraf .......................................................................................................................................... 5
Abstract Nederlands ................................................................................................................................ 6
Abstract English ....................................................................................................................................... 7
Inleiding: .................................................................................................................................................. 8
Inhoud ..................................................................................................................................................... 9
Deel 1: Functionele beschrijving ........................................................................................................... 11
1
Vooropgestelde specificaties: ................................................................................................... 12
2
Systeem opbouw/architectuur.................................................................................................. 14
2.1
Sensoren aansluiten op het systeem ................................................................................ 14
2.2
Plug and play maken van het systeem .............................................................................. 17
2.3
Stroomvoorziening: ........................................................................................................... 17
2.4
Communicatie met de applicatie ...................................................................................... 18
2.5
Applicatie opbouw............................................................................................................. 18
3
Toepassingsvoorbeeld: .............................................................................................................. 19
Deel 2: Technisch beschrijving .............................................................................................................. 20
4
Inleiding: .................................................................................................................................... 21
5
Systeem keuzes ......................................................................................................................... 21
5.1
Keuze bussysteem ............................................................................................................. 21
5.2
Keuze van spanning batterij en oplader ............................................................................ 29
5.3
Keuze microcontroller ....................................................................................................... 31
6
Onderdelen van het systeem .................................................................................................... 32
6.1
Sensoren en actuatoren .................................................................................................... 32
6.2
Geheugen node ................................................................................................................. 35
6.3
Batterijmonitor .................................................................................................................. 36
6.4
Systeemhoofd:................................................................................................................... 37
7
Communicatie met smartphone: .............................................................................................. 38
8
Werking van het systeem .......................................................................................................... 40
8.1
Communicatie in het systeem ........................................................................................... 40
8.2
Communicatie tussen smartphone en systeem ................................................................ 47
9
Opbouw applicatie .................................................................................................................... 48
Deel 3: technisch ontwerp .................................................................................................................... 51
10
Inleiding ................................................................................................................................. 52
11
Hardware modules ................................................................................................................ 52
11.1
Batterij + voedingsmodule ................................................................................................ 52
11.2
Systeemhoofd .................................................................................................................... 54
11.3
Het hub systeem ................................................................................................................ 55
11.4
Led driver ........................................................................................................................... 56
11.5
Accelerometer ................................................................................................................... 57
12
Programmeren ...................................................................................................................... 58
12.1
Microcontrollers ................................................................................................................ 58
12.2
Applicatie ........................................................................................................................... 62
13
13.1
14
Software ................................................................................................................................ 65
Microcontrollers ................................................................................................................ 65
Applicatie ............................................................................................................................... 72
14.1
Onderdelen programma .................................................................................................... 72
14.2
Node maken ...................................................................................................................... 73
14.3
Code................................................................................................................................... 73
15
Testen .................................................................................................................................... 77
15.1
Test automatische adressering ......................................................................................... 77
15.2
Meerdere adresaanvragen ................................................................................................ 77
15.3
Rendementsmeting van het oplaadsysteem ..................................................................... 79
15.4
Bussnelheid ....................................................................................................................... 82
16
Demo’s................................................................................................................................... 86
16.1
Demo 1: RGB leds aansturen ............................................................................................. 86
16.2
Demo 2: hoofdmenu + automatische herkenning ............................................................ 87
17
Verbeteringen en uitbereidingen .......................................................................................... 89
Bijlage A ................................................................................................................................................. 90
Figuurlijst ............................................................................................................................................. 104
Tabellijst .............................................................................................................................................. 106
Bibliografie .......................................................................................................................................... 107
Deel 1: Functionele beschrijving
11
1
Vooropgestelde specificaties:
Voordat het ontwikkelingsproces kan gestart worden moeten eerst en vooral de
specificaties van het systeem gekend zijn. Met de specificaties bedoelen we hoe men het
systeem voor zich ziet en welke functies het systeem moet kunnen uitvoeren, waar het
zal gebruikt worden en hoe het bediend zal worden. De specificaties voor dit systeem
werden vooraf opgesteld door CMST. Het systeem moet er als volgt uitzien:
Figuur 1: Systeem architectuur
In figuur 1 wordt de systeemarchitectuur weergegeven. Van hieruit start het
ontwikkelingsproces.
Na het bestuderen van de figuur zijn er 6 grote blokken zichtbaar. Een eerste blok zijn
de sensoren en actuatoren die worden aangestuurd, deze moeten zeer algemeen zijn.
Dit wil zeggen dat het systeem zo moet ontworpen worden zodat iedere sensor of
actuator die er bestaat kan aangestuurd worden met het systeem. Enkele voorbeelden
van sensoren zijn: een temperatuur sensor, accelerometer, lichtsensor,… Voorbeelden
van actuatoren zijn, een led-driver, motors, servomotors,… Doordat er een breed
gamma aan sensoren en actuatoren wordt ondersteund kan het systeem voor meerdere
doeleinden worden gebruikt. Dit was een van de vereisten die gesteld werden.
Het tweede blok, is de centrale processing unit (CPU). De CPU zal het volledige
systeem laten werken en staat in voor alle communicatie in het systeem.
Het derde blok is de stroomvoorziening. Een vooropgestelde vereiste is dat het
systeem draagbaar moet zijn. Hiervoor moet er gebruik gemaakt worden van een
batterij, deze zal de nodige energie leveren om het systeem te laten werken. Om het
gebruiksgemak te vergroten wordt er gebruik gemaakt van een oplaadbare batterij. De
gebruiker moet dan geen batterijen vervangen, hij moet deze enkel opladen, dit
gebeurt via een oplaadsysteem. Dit oplaadsysteem maakt gebruik van een draadloze
oplaad unit. Deze zal draadloos energie doorsturen om de batterij op te laden.
12
Hiervoor zijn er enkele systemen op de markt die in opmars zijn. Vooral bij
smartphones wordt deze techniek van batterij opladen al toegepast. Men wil dit verder
uitbereiden naar andere toestellen, zoals laptops maar ook naar keukentoestellen zodat
men geen problemen heeft met snoeren en stopcontacten.
Het vierde blok is het communicatieblok, dit is de verbinding die wordt gebruikt om
opdrachten te ontvangen van het draagbare toestel. Omdat het systeem aangestuurd
wordt met een draagbaar toestel moet ook de verbinding met het systeem snel kunnen
worden opgezet en verbroken. Er wordt daarvoor dan ook een draadloze verbinding
gebruikt en geen verbinding maken met een kabel. Welke communicatie er zal
gebruikt worden kan worden gewijzigd. Dit is afhankelijk van de toepassing van het
systeem en de voorkeuren van de gebruiker.
Het voorlaatste blok is het geheugen, in het systeem moet ook een geheugen aanwezig
zijn zodat gegevens kunnen opgeslaan worden.
Het laatste blok is het draagbaar toestel, er is hierin een grote keuze. Men kan een
laptop gebruiken of overgaan naar de nieuwere draagbare systemen zoals een
smartphone of tablet. Deze keuze was al gemaakt door CMST, zij hebben gekozen
voor een smartphone. Op de smartphone zal een applicatie aanwezig zijn voor de
bediening van het systeem. In het volgende deel gaat er dieper in gegaan worden over
de opbouw van de applicatie.
Hieronder volgt een lijst met alle specificaties die aanwezig moeten zijn:







Het systeem moet modulair zijn. Het moet dus in blokken ontworpen worden die
uitwisselbaar zijn. Als er een blok in het systeem overbodig of stuk is dan kan
deze verwijderd worden en al dan niet vervangen worden. Dit geeft een
toegevoegde waarde aan het systeem. Namelijk als er een blok stuk is kan men
dit vervangen en moet men niet het volledige systeem in de vuilbak smijten.
Het systeem moet pug en play zijn. De sensoren en actuatoren moeten op ieder
moment kunnen worden verbonden of losgekoppeld worden.
Het systeem moet bedienbaar zijn met een mobiel toestel zoals smartphone of
tablet. Ook moet het systeem autonoom blijven doorwerken als het toestel
verwijderd is. Met andere woorden, het draagbare toestel zal enkel dienen voor
het systeem in te stellen, de waarden uit te lezen en de actuatoren in te stellen.
Het systeem moet zichzelf automatisch configureren en te weten komen welke
sensoren en actuatoren zijn aangesloten. Als er sensoren of actuatoren
aangesloten of verwijderd worden bij een systeem dat al ingesteld is moet het
systeem dit automatisch opvangen en de nodige configuratie uitvoeren
Een sensor of actuator moet opdrachten kunnen uitvoeren, vb een sensor die om
de 2 minuten zijn waarden opslaat.
Het systeem moet draagbaar zijn en de batterij moet draadloos worden
opgeladen.
Er moet geheugen aanwezig zijn in het systeem om waarden op te slaan.
13
2
2.1
Systeem opbouw/architectuur
Sensoren aansluiten op het systeem
Aan de hand van de specificaties wordt nu de systeemopbouw voorgesteld. Als eerste
werd onderzocht hoe de sensoren en actuatoren worden aangesloten op het systeem.
Figuur 2: Aansluiten sensoren denkpiste 1
Een eerste denkpiste was iedere sensor of actuator apart aansluiten op de CPU. Deze
denkpiste werd snel gestopt, dit werkt goed als men maar 1 of 2 dezelfde sensoren of
actuatoren aansluit maar kan niet meer gebruikt worden als men 10 sensoren of
actuatoren wil aansluiten. Hiervoor zijn te veel hardware aansluitingen nodig. Een
bijkomend probleem is dat het systeem niet weet welke sensoren of actuatoren er zijn
aangesloten.
Over naar de tweede denkpiste. Hierin wordt een bussysteem gebruikt. Door dit te
doen kunnen de sensoren en actuatoren niet direct aangesloten worden op de bus.
Hierdoor moet er bij de sensor of actuator een CPU bijgeplaatst worden, deze zal de
opdrachten ontvangen via de bus en zal deze dan vertalen naar de gepaste opdrachten
voor de sensor of actuator.
14
Figuur 3: Aansluiten van de nodes
Door een microcontroller bij de sensors en actuators te plaatsen worden het slimme
sensoren en actuatoren. In het verdere verloop van de thesis gaan we beiden onder een
andere benaming gebruiken, namelijk nodes. Terwijl de nodes de werkpaarden zijn
van het systeem moet er ook een opzichter zijn. Deze wordt in het vervolg het
systeemhoofd genoemd. Het systeemhoofd staat ook in voor de communicatie met de
smartphone.
Er zijn natuurlijk veel bussystemen op de markt, nu is de vraag welke de juiste is om
te gebruiken in dit systeem. Hieronder worden de specificaties opgesomd die de bus
moet hebben, in het technische deel gaan we verder in op welke bus we gebruiken en
waarom.
15
Het bussysteem zou de volgende specificaties moeten hebben:
 Weinig hardware aansluitingen
 Adressering van de aangesloten toestellen
 Controle op ontvangst van de data
 Grote data overdracht
 Iedere aangesloten node kan een andere node bereiken
Hoe zijn de specificaties tot stand gekomen:
Om de aansluitingen van de nodes te beperken gaan we proberen een bussysteem te
vinden met 2 aansluitingen. Samen met de spanning komt dit dan op 4 aansluitingen in
totaal. Hierdoor wordt de connector niet te groot en neemt deze geen overbodige plaats
in beslag.
Door een adressering te gebruiken op het bussysteem kan iedere node die aangesloten
is op de bus apart bereikt worden, zonder bijkomende hardware aansluitingen. Het zou
een groot pluspunt zijn als het bussysteem kan controleren dat de data goed worden
verzonden. Er is een mogelijkheid dat de ontvangst node niet meer is aangesloten. Als
er geen controle aanwezig is, zou men dit zelf eerst moeten controleren dan gaat dit
ten koste van de capaciteit van de bus. Als men zeer snelle metingen wil uitvoeren die
men opslaat op een andere node, dan is een grote bandbreedte nodig om al deze data
over te zenden. Hierbij moet men ook rekening houden dat iedere node de kans krijgt
om de bus te kunnen gebruiken.
Er moet een systeem aanwezig zijn die de controle over de bus beheert, een
busbeheerder. De busbeheerder zal in software worden uitgevoerd. Hij zal ervoor
zorgen dat iedereen die data wil verzenden elk om beurt de kans krijgt dit te doen. De
werking bestaat uit verschillende fases. De eerste fase is de aanvraagfase, in een
bepaald tijdsbestek moet iedere node die data wil overzenden een aanvraag plaatsen
bij de controle eenheid. Hierna gaat men over naar de tweede fase. In deze fase krijgen
de nodes die in de vorige fase een aanvraag hebben geplaatst één voor één de
toestemming om hun data over te zenden. Nadat iedere node zijn data heeft
overgezonden gaat de controle-eenheid terug over naar de eerste fase en wacht terug
op aanvragen van de andere nodes.
Het zou gewenst zijn dat iedere node elke andere node kan bereiken zo kan de data
meteen naar de juiste node worden gestuurd zonder tussenkomst van een derde
apparaat.
16
Figuur 4: Onderdelen systeemhoofd
2.2
Plug and play maken van het systeem
Een groot struikelblok is het systeem plug en play maken. Als men een node aansluit
op het systeem dan moet deze een adres krijgen en moet de applicatie op het mobiele
toestel ook op de hoogte gebracht worden van de aangesloten hardware. Hiervoor gaan
we een adresseereenheid maken die gaat instaan voor het uitdelen van de adressen aan
de nodes. Net zoals de busbeheerder zal de adresseereenheid in software
geïmplementeerd worden.
De adresseereenheid zal op 2 momenten in werking treden. Ten eerste als het systeem
opstart na een power down. Dan zijn alle adressen die uitgedeeld werden voor de
power down ongeldig en zal alles opnieuw ingesteld moeten worden. Het andere
moment is wanneer het systeem volledig ingesteld is en er een nieuwe node wordt
aangesloten. Dan vraagt deze een adres aan, maar voor de node een adres kan
aanvragen moet hij eerst een busaanvraag uitvoeren.
Als het systeem opstart na een power down dan gaat iedere node een adresaanvraag
willen indienen. Om dit op een goede manier af te werken moet iedere node om de
beurt een aanvraag indienen. Tijdens het opstarten gaat iedere node een random tijd
wachten voor de aanvraag in te dienen. Hierdoor gaan niet alle adresaanvragen op
hetzelfde moment gebeuren. Nu kunnen alle aanvragen volledig juist worden
afgehandeld.
Bij het aansluiten van een nieuwe node in het systeem zal deze dezelfde procedure
doorlopen als tijdens de opstart. Maar terwijl dit gebeurt zullen de andere nodes
opdrachten aan het versturen zijn.
2.3
Stroomvoorziening:
Zoals eerder vermeld zal het systeem zijn energie halen uit een batterij. Als de batterij
leeg is en hier geen melding van zou gebeuren dan kan het systeem plots uitvallen
zonder enige waarschuwing. Dit is zeer ongewenst. Hiervoor gebruikt men een
17
batterijmonitor, deze zal een schatting maken van de overgebleven capaciteit van de
batterij. Deze batterijmonitor heeft nog bijkomende functies die gewenst zijn. Zo zal
deze bescherming bieden tegen kortsluitingen en overbelasting. Het systeem zal
hierdoor geen schade oplopen door verkeerd gebruik. De oplader zal een aparte blok
zijn in dit systeem. Zo kan men kiezen welk systeem men wil gebruiken om de batterij
op te laden.
Figuur 5: Onderdelen voedingsmodule
Om iedere module van spanning te voorzien is er een hub module nodig, deze voorziet
aansluitingen voor een aantal nodes. Op deze module wordt de spanning verdeeld naar
alle nodes en het systeemhoofd. Maar de bus die naar iedere module loopt wordt hier
opgesplitst. Op deze bus zijn er buffers geplaatst om de juiste werking van de bus te
garanderen. Als men een te lange kabel zou aansluiten op de bus zou de capaciteit van
de kabel de werking van de bus verstoren. Hierdoor zou de snelheid van de bus
drastisch verminderen. Als men gebruik maakt van de buffers wordt de capaciteit
kleiner en kan de bus met een hogere snelheid werken.
2.4
Communicatie met de applicatie
De communicatie met de applicatie zal verlopen via het systeemhoofd. Het
systeemhoofd vormt de brug tussen het systeem en de applicatie. Hiervoor staat de
opdrachtverwerkingseenheid in. Als de gebruiker een opdracht wil uitvoeren zal de
applicatie de waardes doorsturen. De opdrachtverwerkingseenheid ontvangt dit en
stuurt dit dan door naar de gewenste node over de bus. Iedere node zal eerst het
ontvangstadres ontvangen. De node met het juiste adres weet dan dat de data die
volgen voor hem bestemd zijn
2.5
Applicatie opbouw
De applicatie zal opgebouwd worden uit verschillende menu’s met elk hun eigen
specifieke functie. Na het opstarten van de applicatie moet de gebruiker kiezen welke
verbinding hij zal gebruiken om te communiceren met het systeem. Er zal verbinding
proberen gemaakt worden met het systeem. Als de verbinding is opgesteld, komt men
in het hoofdmenu. Dit zal een lijst zijn met de aangesloten sensoren en actuatoren. De
18
gebruiker kan dan kiezen welke sensor hij wil uitlezen of welke actuator hij wil
aansturen. Als men gekozen heeft komt men in de specifieke menu van de gekozen
sensor of actuator. Men kan hier dan een meting uitvoeren of de actuator instellen. De
gebruiker kan in dit menu ook een opdracht geven, men kan dan bijvoorbeeld instellen
om de hoeveel tijd er een meting moet uitgevoerd worden. Nadat de gewenste
instellingen actief zijn keert men terug naar het hoofdmenu en kan men een andere
sensor of actuator instellen of de applicatie afsluiten.
3
Toepassingsvoorbeeld:
Om een beter beeld te krijgen over hoe het volledige systeem werkt volgt hier een
toepassingsvoorbeeld. In dit voorbeeld wordt er een kleine robot met 2 armen en een
aandrijfeenheid gebruikt. Dit toepassingsvoorbeeld is niet uitgewerkt in deze thesis
maar is gekozen omdat de opstelling makkelijk visualiseerbaar is.
De aandrijfeenheid bestaat uit een basis met 2 rupsbanden en 2 aparte motors voor
iedere band. Men begint bij de basis module, in de basismodule bevinden zich de
batterij met oplader, het systeemhoofd, de communicatie met de smartphone en een hub
module. De hub module zal aansluitingen voorzien voor de spanning maar ook voor de
bus die van het systeemhoofd naar de node loopt.
Als de gebruiker de aandrijfeenheid aansluit aan de basismodule dan bekomt hij een
robot dat kan rijden in elke richting. Het systeemhoofd in de basis module gaat op zoek
naar alle aanwezige nodes. Het zal de aandrijfnode ontdekken, en deze een uniek adres
geven. De applicatie zal een commando krijgen van het systeemhoofd dat er een
aandrijfmodule is aangesloten en op welk adres deze te vinden is. In het hoofdmenu van
de applicatie zal er een icoon te zien zijn van deze aandrijfmodule. Als de gebruiker
hierop klikt komt men in het menu van de aandrijfmodule. Hierin kan hij dan kiezen als
de robot vooruit, achteruit, links of rechts moet rijden.
Als de gebruiker de armen van de robot aansluit. Deze hebben in dit voorbeeld een
simpele werking, ze kunnen enkel hoog en omlaag bewegen. Het systeemhoofd zal deze
opnieuw ontdekken en deze elk een uniek adres geven. Het systeemhoofd zal daarna de
applicatie op de hoogte brengen dat er 2 armen zijn aangesloten. Deze worden dan
zichtbaar in het hoofdmenu, de gebruiker kan dan kiezen welke arm hij wil bedienen.
Als er nu één van de aangesloten nodes niet meer reageert zal deze uit de lijst worden
gehaald zodat de gebruiker deze niet meer kan aansturen.
19
Deel 2: Technisch beschrijving
20
4
Inleiding:
In het vorige deel werd de algemene opbouw van het systeem besproken, in dit deel
wordt er dieper in gegaan op het technische aspect van deze thesis. Hier worden alle
technische keuzes onderzocht en toegelicht. De communicatie tussen de verschillende
onderdelen zal worden toegelicht samen met de ontwikkelde nodes. Er zullen 3 nodes
verder ontwikkeld worden, een led driver node, een accelerometer node en een
geheugen module.
Figuur 6: Onderdelen van het systeem
5
5.1
Systeem keuzes
Keuze bussysteem
Vandaag de dag zijn er veel bussystemen beschikbaar. Doordat er microcontrollers
gebruikt worden moet het bussysteem hardwarematig ondersteund worden anders
moet de volledige werking van het bussysteem in software uitgeschreven worden. Het
is mogelijk dat de verschillende fabrikanten van microcontrollers sommige
bussystemen wel ondersteunen en andere niet. Om compatibel te zijn met zoveel
mogelijk verschillende microcontrollers gaan we eerst onderzoeken welke
bussystemen het meest voorkomen.
21
Tabel 1: Ondersteunde bussystemen [1-4]
texas
instruments
fabrikant
(msp 430)
bussystemen I²C
UART
SPI
LIN
CAN
USB
atmel
I²C
UART
SPI
LIN
CAN
USB
silicon
laboratories
I²C
UART
SPI
USB
NXP
I²C
UART
SPI
LIN
CAN
USB
Tijdens het opstellen van deze lijst is er rekening gehouden met bepaalde voorwaarden
van de microcontroller. Er is gezocht naar een reduced instruction set (RISC)
microcontroller. Er is hiervoor gekozen omdat deze een eenvoudige werking hebben
en vaak de goedkoopst zijn. Uit deze lijst blijkt dat de meeste fabrikanten dezelfde
bussystemen ondersteunen. Er kan dus vrij gekozen worden welk systeem er gebruikt
wordt.
In het vorige deel zijn er specificaties opgesteld waaraan de bus zou moeten voldoen.
Om een juiste keuze te maken worden de verschillende bussystemen met elkaar
vergeleken.
De gedefinieerde busspecificaties:
 Weinig hardware aansluitingen
 Adressering van de aangesloten toestellen
 Controle op ontvangst van data
 Grote data overdracht
 Iedere aangesloten node kan een andere node bereiken
De universal serial bus (USB) en de controller area network (CAN) zijn aanwezig op
de complexe microcontrollers. Deze zijn groter in omvang en hebben meer functies
die overbodig zijn in het systeem. Door de grote functionaliteit zijn deze ook duurder.
Dit is niet gewenst want als deze duurdere microcontrollers aangebracht worden op de
nodes dan stijgt de kostprijs van deze nodes. Daarom worden deze bussystemen niet
verder onderzocht.
5.1.1
local interconnect netwerk (LIN)
Het LIN systeem is ontworpen door autobouwers Audi, BMW, Volkswagen, Volvo en
Daimler-Chrysler in samenwerking met chipfabrikant Motorola en technologie
centrom Volcano Communications. Deze bedrijven zorgen voor de standaardisatie en
verbeteringen in het bussysteem. Het systeem werd ontworpen als goedkoop
alternatief voor de CAN bus.
22
Figuur 7: LIN netwerk opbouw[7]
Werking:
Het LIN systeem is een broadcast netwerk. Waarbij 1 master en meerdere slave
modules aanwezig zijn. Het aantal slave modules is beperkt tot een maximum van
zestien. De communicatie verloopt over één geleider. Daardoor is dit een asynchroon
systeem, er is namelijk geen tweede geleider om het klok signaal over te zenden.
Iedere communicatie wordt gestart door de master. De master kan dan data ophalen of
verzenden van een slave module. Maar hij kan ook de opdracht geven om 2 slave
modules met elkaar te laten communiceren. De maximale snelheid met deze bus is
20kbit/s als men zich aan het LIN protocol houdt (LIN v 2.0). Het is wel mogelijk een
grotere snelheid te bekomen, maar dan voldoet men niet meer aan het standaard LIN
protocol. [5-7]
Figuur 8: LIN frame[7]
Voldoet deze bus aan onze vooropgestelde specificaties:
Pro:
 Er zijn weinig hardware aansluitingen het bussysteem heeft maar 1 connectie
nodig samen met de voedingsspanning zijn dit 3 aansluitingen in totaal.
 Iedere node kan elke andere node bereiken, maar de master moet hier eerst de
opdracht toe geven.
23
Contra:
 Het aantal modules dat men kan aansluiten is te beperkt. Als deze bus gebruikt
moet er uitbereiding gemaakt worden om meer modules te kunnen aansluiten.
 Er is geen controle op ontvangst.
Conclusie:
Er zal niet voor dit systeem gekozen worden omdat er te weinig nodes kunnen
aangesloten worden en er geen controle is op ontvangst van de data.
5.1.2
De serial peripheral interface (SPI)
De SPI bus is een synchrone seriële communicatie. Dit systeem is altijd full duplex,
men ontvangt en verzend data op hetzelfde moment. Deze bus heeft 4 connecties, de
klok lijn (SCLK) over deze lijn wordt de klok meegezonden, de master output slave
input (MOSI) lijn wordt gebruikt om data verzenden van de master naar de slave, de
master input slave output (MISO) lijn wordt gebruikt om data van de slave naar de
master te zenden. De vierde lijn is de chip select lijn, deze wordt gebruikt om de slave
te selecteren waarnaar men wil zenden of data wil ophalen. Als er meerdere slaves
aanwezig zijn in het systeem dan heeft iedere slave een aparte chip select lijn nodig.
Figuur 9: SPI opbouw[8]
Werking SPI bus:
Eerst wordt de chip select lijn van de slave die bereikt moet worden laag (0) gemaakt.
Hierna gaat de master het kloksignaal genereren. De data komt op de lijn met het ritme
van de klok. Na de data verzonden te hebben komt de chipselecte lijn weer hoog (1) en
is de communicatie afgelopen. De programmeur kan instellen wanneer een bit moet
worden uitgelezen, dit kan op de stijgend of de dalende flank zijn van het klok signaal.
24
Hoe wordt de data op de bus geplaatst?
De data die overgezonden wordt staat in een schuifregister dat één byte groot is. De
laagste bit wordt op de bus geplaatst, en de overige bits worden doorgeschoven.
Hierdoor komt de hoogste bit vrij. Omdat de SPI bus full duplex is gaat de slave op
hetzelfde ogenblik ook een bit doorsturen. De bit van de slave wordt op de vrije plaats
in het schuif register geplaatst. Bij de volgende klokcyclus wordt deze bit samen met
de andere bits ook door geschoven. Totdat de volledige byte is verzonden. [8, 9]
Figuur 10: SPI schuifregister[9]
Nu de werking van de SPI bus gekend is wordt onderzocht of ze voldoet aan onze
specificaties:
Pro:
 Doordat de SPI bus snelle kloksnelheden kan bereiken is er een grote
dataoverdracht mogelijk. Dit is de enige specificatie dat van toepassing is.
Contra:
 De SPI bus heeft een groot aantal aansluitingen, per slave apparaat dat
aanwezig is in het systeem moet er een aparte chip select pin aanwezig zijn.
Als men bijvoorbeeld 10 slave apparaten wil aansluiten dan heeft men 10 chip
select pinnen nodig en 3 pinnen voor de communicatie. Dit komt neer op een
minimum van 13 pinnen. Hierdoor moeten we voor een grote microcontroller
kiezen die duurder zijn, en een groter formaat hebben. Dit leidt tot onnodig
plaats verbruik.
 Een slave apparaat kan geen ander slave apparaat bereiken, er is altijd
tussenkomst nodig van de master.
 Een slave node kan geen master worden, zo kan een node het systeemhoofd
niet op de hoogte brengen wanneer er data moet verzonden worden.
 Als de master begint te zenden kan hij niet weten of de slave nog is
aangesloten op het systeem. Er is geen controle die nagaat of de data goed
worden verzonden en aankomen.
25
Aanpassingen om SPI bus toch te gebruiken:
Als we de SPI bus toch willen gebruiken moeten er aanpassingen gebeuren aan de
werking van het systeem. Zo moeten we af van de chip select lijnen. Als we dit
doen moeten in de software een adresseringssysteem inbouwen, zo kunnen we de
verschillende aangesloten apparaten bereiken.
Er moet een systeem in software ontwikkeld worden dat zal instaan voor de
controle als het slave apparaat aanwezig is. En een controle als de data goed
ontvangen worden.
Als er geen chip select aanwezig is kunnen alle apparaten op de bus met elkaar
communiceren, dus kan ieder apparaat communiceren met ieder ander apparaat.
Maar nu moet er wel een bus arbitrage zijn die in software moet worden
geïmplementeerd zodat geen twee apparaten op hetzelfde moment kunnen zenden.
Conclusie:
Bij de SPI bus moet er nog een groot aandeel in software worden
geïmplementeerd dit neemt de nodige tijd in beslag die nuttiger kan besteed
worden. Misschien zijn er bussystemen die aan meer specificaties voldoen dan de
SPI bus.
5.1.3
De Universal asynchronous receiver/transmitter (UART)
Een UART zorgt ervoor dat parallelle data worden omgezet naar een seriële
communicatie. Dit was vooral populair bij computers voor randapparaten te
verbinden, zoals muis, printer en andere toestellen. Om een verbinding te maken zijn
er 2 UARTs nodig de eerste UART zet de parallelle data om naar seriële data en
verzend deze. De tweede zal dan de data ontvangen en terug omzetten naar parallelle
datawoorden. [10, 11]
Figuur 11: UART verbinding
Deze verbinding wordt gebruikt om te communiceren met 2 apparaten, maar kan ook
gebruikt worden om te communiceren met meerdere devices. Een probleem hierbij is
dat er geen onderscheid kan gemaakt worden tussen de verschillende aangesloten
devices. De slave nodes kunnen ook niet onderling met elkaar communiceren, als er
2 slave modules data met elkaar willen uitwisselen moet dit eerst naar de master
verzonden worden en dan van de master naar de desbetreffende node.
26
Figuur 12: UART verbinding met meerdere slaves[12]
Voldoet deze bus aan de opgestelde specificaties?
Pro:
 De uart verbinding kan grote hoeveelheden data versturen.
 Weinig hardware aansluitingen, deze communicatie heeft maar 2
hardware aansluitingen nodig.
Contra:
 De nodes kunnen enkel communiceren met de master en niet met
elkaar.
 Er is geen adressering deze moet softwarematig ingebouwd worden
 Er is geen controle op de ontvangst van data, er kan dus gezonden
worden zonder dat er een ontvanger is.
5.1.4
De inter intergrated circuit (I²C) bus:
De I²C bus werd ontwikkeld als vervanging van andere bussystemen. Het is een
multimaster seriële connectie, dat ontwikkeld werd door Philips semiconductors
tegenwoordig is dit NXP een onderdeel van Philips. De I²C bus is gestandaardiseerd.
Een andere benaming voor deze bus is two wire interface (TWI). Deze bus is
ontwikkeld door andere fabrikanten als reactie op de I²C bus van Philips.
Figuur 13: I²C opbouw [13]
Werking:
De bus is opgebouwd uit 2 lijnen één voor de data over te zenden en één voor de
klok over te zenden. Het is dus een seriële half-duplex communicatie. Het begin van
iedere communicatie start met een start conditie, hierdoor weten alle aangesloten
apparaten dat er een communicatie zal beginnen. Daarna komt het adres van de node
27
waar er naar gezonden moet worden dit adres is 7 bit groot, hierdoor kunnen we 127
(27) apparaten aansluiten. De achtste bit is de directie bit, deze bit laat de slave weten
als er data wordt verzonden naar hem(0) of dat hij data moet zenden naar de master
(1). Na 8 bits (1byte) komt een acknowledge bit. Deze bit dient om te controleren dat
de slave met het voorgaande adres aanwezig is. Als de slave aanwezig is zal hij de
data lijn laag(0) maken. De master ontvangt dit en weet hierdoor dat de ontvanger
aanwezig is en zal dan beginnen met het zenden of ophalen van data. Na 8 bits komt
er weer een acknowledge bit. Hierdoor kan de master controleren of de slave zijn
data goed heeft ontvangen. Dit gaat door totdat alle data zijn verzonden of
opgehaald. Daarna komt een stop conditie.
Dit systeem heeft ook een bijkomend voordeel, als de slave niet kan volgen kan hij
aan “clock stretching” doen. Hierdoor kan de slave de master op de hoogte brengen
wanneer hij niet kan volgen. Dit doet hij door de klok lijn laag te houden en pas als
hij klaar is om zijn taak uit te voeren wordt de klok lijn weer hoog gemaakt.[13, 14]
Start
ACK
Figuur 14: I²C data overdracht
Voldoet deze bus aan onze specificaties:
Pro:
 Er wordt gebruik gemaakt van adressering, hierdoor kan ieder aangesloten
apparaat apart bereikt worden.
 Het bussysteem bestaat uit 2 geleiders.
 Iedere apparaat kan ieder ander apparaat op de bus bereiken, als deze een
master kan worden.
 Er is een controle op de ontvangst van de data, door de acknowledge bit.
 Met adres 0x00h kan men ieder apparaat op de bus bereiken, hierdoor kan
men naar ieder apparaat sturen op hetzelfde moment.
Contra:
 Bij grote dataoverdracht is de I²C bus traag, dit komt door de acknowledge bit
na iedere byte die wordt overgezonden.
Conclusie:
Dit bussysteem komt het best overeen met onze vooropgestelde specificaties. Maar er
moet wel rekening gehouden worden met de hoeveelheid bytes die er worden
doorgezonden, zodat de verbinding niet te traag wordt. De bus laat wel geen
automatische adressering toe, dit moet nog worden ingebouwd in software.
28
5.2
Keuze van spanning batterij en oplader
Doordat het systeem draagbaar is moet er een batterij aanwezig zijn. Om het milieu te
sparen en om de gebruiker niet op te zadelen met het vervangen van batterijen is er
gekozen voor een oplaadbare batterij. In de categorie oplaadbare batterijen zijn er
verschillende soorten, zo zijn er nikkel-cadmium (NiCd), nikkel metaal hydride
(NiMH) , lithium-ion (Li-ion), lithium polymeer (LiPo)… batterijen. Maar welke is nu
de beste batterij voor het gebruik in het systeem.
Tabel 2: Soorten batterijen[15-18]
batterij soort
cel spanning (V)
NiCd
NiMH
1,2
1,2
500oplaad cyclussen
2000 2000
140energie dichtheid (W*h/L) 50-150 300
specifieke energie
(W*h/kg)
40-60
60-120
geheugen effect
ja
ja
Li-ion
3,7
4001200
250620
100250
minder
LiPo
3,7
>1000
300
130200
minder
Deze lijst geeft de belangrijkste eigenschappen van batterijen weer. Zo moet er
rekening gehouden worden met de celspanning. Dit is de spanning die 1 cel genereert,
als er een hogere spanning verreisd is moet men meerdere cellen in serie plaatsen.
Er moet ook aan de levensduur van de batterij gedacht worden. Maar het
allerbelangrijkste is de energie dichtheid en specifieke energie, deze geven indicatie
over hoeveel energie de batterij kan opslaan en zijn grote.
Uit de tabel kunnen we opmaken dat de Li-ion en de LiPo de grootste hoeveelheid
energie kunnen opslaan per kilogram. Deze batterijen hebben ook geen last van een
geheugen effect. Dit verschijnsel treedt op bij Ni-Cd of NiMH batterijen. Het
geheugeneffect is een capaciteitsvermindering van de batterij. Het treedt op door het
veelvuldig opladen van de batterij terwijl deze nog niet volledig leeg is. Het
geheugeneffect is ook aanwezig bij de lithium batterijen maar in mindere mate.
Er is gekozen voor een LiPo batterij, dit zijn de beste batterijen die vandaag op de
markt te verkrijgen zijn. Dit soort van batterijen wordt ook gebruikt in smartphones en
tablets. Ze kunnen ook via een snellader geladen worden, hierdoor kan men de batterij
in één uur opladen i.p.v. meerdere uren bij de Ni-Cd of NiMH batterijen.
Nu de soort batterij gekozen is kunnen we bepalen op welke spanning het systeem zal
werken. De celspanning van een LiPo batterij is 3.7V deze spanning wordt in de
elektronica zeer weinig gebruikt. Er moet dus een andere werkspanning gebruikt
worden, na onderzoek van bepaalde microcontrollers en andere elektronica chips, is de
keuze gemaakt om een werkspanning van 3.3V te gebruikten.
29
De batterij kan maar een beperkte hoeveelheid energie opslaan. Daarom moeten de
batterij opgeladen worden, zoals vermeld in het vorige deel gaat dit draadloos
gebeuren. Er zijn verschillende systemen op de markt die draadloos energie
overzenden.
Vooral bij smartphones wordt draadloos opladen toegepast. Dit zal gebruikt worden
als vervanging van de verschillende oplaadadapters en aansluitingen van de
verschillende fabrikanten. Om te voorkomen dat er talloze verschillende draadloze
oplaadsystemen op de markt komen hebben een aantal fabrikanten de hoofden bij
elkaar gebracht en het wireless power consortium opgericht. Dit consortium heeft de
eerste standaard gedefinieerd voor draadloze energie overdracht. Deze heeft de naam
QI (‘chie’) meegekregen.[19, 20]
Figuur 15: Logo wireless power consortium
Het constortium legt de specificaties vast voor de standaard, maar zorgt er ook voor
dat alle apparaten waar het QI label is aangebracht voldoen aan de standaard. Alle
apparaten met het label zijn compatibel met elkaar. Men kan dus een willekeurige
oplader gebruiken om de batterij op te laden zolang het QI label aanwezig is.
Er is voor dit systeem gekozen omdat het ondersteund wordt door grote fabrikanten
zoals samsung,texas instruments,… en men wil het gebruik van dit systeem niet enkel
beperken tot smartphones of gsm opladen maar ook om andere toestellen aan te sturen
(vb in de keuken, laptops,…). Dit systeem is steeds populairder aan het worden, als
dit ook in andere toepassingen gebruikt wordt zal het QI systeem snel ingeburgerd
zijn.
Door deze redenen wordt gekozen voor het QI systeem, en niet een ander systeem.
Werking QI systeem:
Het systeem werkt via een zender en een ontvanger, de zender zal een magnetisch veld
uitzenden door een hoog frequent signaal te sturen in een spoel. Dit magnetisch veld
wordt opgevangen door een secundaire spoel en wordt omgezet naar een
gelijkspanning die de batterij oplaadt. Dit geldt voor de energie overdracht, maar in
het QI systeem is er ook een communicatie ingebouwd tussen de ontvanger en de
transmitter. De ontvanger kan communiceren met de transmitter door gebruik te
maken van backscatter modulatie. De ontvanger communiceert door het vermogen te
regelen dat hij opneemt. Dit heeft invloed op het magnetisch veld, de zender zal deze
veranderingen opmerken doordat de spanning en stroom zal varriëren. Door deze
techniek kunnen de zender en ontvanger met elkaar communiceren.
Als er geen ontvanger aanwezig is, zal er geen communicatie mogelijk zijn en zal de
zender uitschakelen. Hierdoor zal er minder energie verbruikt worden. Na een
bepaalde tijd zal de zender een ping signaal uitsturen om een ontvanger te detecteren,
30
als er een ontvanger in de buurt is zal de zender energie blijven uitsturen, zoniet zal de
zender weer uitschakelen.
De ontvanger kan ook aangeven dat het opladen voltooid is, zo kan de zender op zijn
beurt weer uitschakelen om energie te besparen. Een ander voorbeeld waarvoor de
communicatie gebruikt wordt is om het magnetisch veld te regelen. Afhankelijk van
de last aan de ontvanger moet er meer of minder energie worden doorgezonden, ook
hier treedt de communicatie in werking, als de ontvanger te weinig energie heeft zal
deze om meer vragen, de zender zal deze dan doorsturen. Ook als de primaire spoel en
secundaire spoel niet op de goede manier geplaatst zijn is er meer energie nodig om de
gewenste spanning te bereiken dan als de spoelen goed geplaatst zijn. [19, 20]
5.3
Keuze microcontroller
De keuze van de microcontrollers is zeer belangrijk, er moet namelijk hardware
ondersteuning aanwezig zijn voor de I²C-bus. Als dit niet zo is moet men de complete
werking van het bussysteem in code uitschrijven. Het zou ook gewenst zijn om een 2de
bussysteem te hebben omdat de meeste sensoren en actuatoren via een bussysteem
bediend worden.
Omdat we een draagbaar systeem gaan ontwerpen moet er ook rekening gehouden
worden met het energie verbruik van de microcontroller. Het zou gewenst zijn dat de
microcontroller in een wachtstand kan geplaatst worden waarin weinig energie
verbruikt wordt. Het aantal randcomponenten rond de microncontroller zoals een
kristal zou ook tot een minimum beperkt worden zodat de kostprijs van de nodes niet
zal stijgen.
De keuze is gemaakt om een MSP430 van texas instruments te gebruiken, deze is
speciaal ontworpen om weinig energie te verbruiken. Er zijn 4 verschillende low
power modes dit zijn modes waarin sommige delen van de microcontroller worden
uitgeschakeld en zo geen energie meer verbruiken. De microcontroller heeft ook 2
aparte bus modules, dit wil zeggen dat er 2 bus systemen op hetzelfde moment kunnen
aangesloten en gebruikt worden. In het systeem zal de ene bus de communicatie met
het systeemhoofd voorzien en de andere bus zal al dan niet gebruikt worden voor het
communiceren met de sensor of de actuator.
De microcontrollers moeten natuurlijk geprogrammeerd worden, er zijn verschillende
programmeertalen. Zo is er bijvoorbeeld assembler, C, C++,…
Assembler en C worden zeer vaak gebruikt om microcontrollers te programmeren en
C++ wordt vaak op computers gebruikt. In deze thesis is gekozen om C te gebruiken,
omdat dit eenvoudiger is om het systeem te ontwikkelen dan assembler. Er is niet voor
C++ gekozen omdat C++ een grote hoeveelheid geheugen verreist en dit is niet
aanwezig in de kleine microcontrollers die hier gebruikt worden. Om de code op de
microcontroller te plaatsen wordt er gebruik gemaakt van de olimex programmer.
31
Voor het aansluitschema van deze programmer en verdere informatie over de
programmeer software is te vinden in het volgende deel.
Figuur 16: Olimex jtag tiny programmer [21]
6
6.1
Onderdelen van het systeem
Sensoren en actuatoren
In deze thesis wordt een basis opstelling ontworpen, hiervoor zijn er dus ook
verschillende sensoren en actuatoren nodig. Een actuator zal vooral opdrachten
ontvangen en weinig of niets versturen. Een sensor zal zijn instellingen ontvangen
maar daarna zal hij vooral de metingen versturen. Een sensor zal dus vooral data
zenden en een actuator data ontvangen. Om het volledige systeem te kunnen testen
moet er dus van elk minstens één aanwezig zijn. Het zou ook gewenst zijn dat er een
geheugen module aanwezig is zodat de sensor zijn waarden kan opslaan in het
geheugen. Evenals een batterij monitor zodat deze een waarschuwing kan genereren
als de batterij bijna leeg is. Als deze 4 verschillende componenten aanwezig zijn in het
systeem dan krijgt men een goed overzicht over hoe het systeem zal werken en hoe de
verschillende componenten samenwerken.
Als actuator werd geopteerd voor een led driver, deze led driver zal meerdere RGB
(rood, groen, blauw) leds sturen. Er is hiervoor gekozen omdat het gebruik van led
drivers zeer sterk is toegenomen. Doordat er meer led verlichting gebruikt wordt in
woningen en bedrijven. Als sensor werd geopteerd voor een accelerometer, deze meet
de versnelling op in 3 richtingen. Men kan dan de snelheid bepalen door berekeningen
uit te voeren of men kan de metingen opslaan in het geheugen.
Voor het geheugen is er gekozen om een micro SD-kaart te implementeren. Er zal ook
een FAT (file allocation table) systeem gebruikt worden zo kan de micro SD-kaart
makkelijk door een computer worden uitgelezen.
6.1.1
De led driver node (actuator):
De led driver node bestaat uit een microcontroller en een led driver chip. De
microcontroller zal zoals eerder toegelicht alle opdrachten ontvangen, en vertalen naar
32
de juiste instructies voor de microcontroller. Als men de functionaliteit van de node
wil uitbreiden moet men dus meer functies in de microcontroller implementeren.
Werkwijze:
Eerst wordt het adres ontvangen als dit overeenstemt met het adres van de node zal de
software verdere stappen ondernemen. Als het juiste adres is ontvangen moet de node
weten welke functie hij moet uitvoeren. De functie wordt weergegeven door het
functienummer. Nadat de functie gekend is zal het programma wachten tot al de data
die hij nodig heeft ontvangen is. Zijn alle data ontvangen dan gaat de software verder
met het uitvoeren van de functie. Deze werkwijze wordt voor iedere node gehanteerd.
De geïmplementeerde functies:

De RGB instelfunctie (functienummer: 0x10h):
Deze functie zal een bepaalde led een RGB kleur geven. Hiervoor zijn vijf input
waarden nodig:





De led nummer (8bit)
De hoeveelheid rode kleur (16 bit)
De hoeveelheid groene kleur (16 bit)
De hoeveelheid blauwe kleur (16 bit)
De brightness (8 bit)
De hoeveelheid kleur is een 16 bits getal, hoe hoger dit getal hoe meer het kleur
aanwezig zal zijn. Als men dit toepast op een rode, groen en blauwe led die
aangebracht zijn in één behuizing dan kan men iedere kleur instellen. De felheid
staat gelijk aan het dimmen van de led, zo kan men de led zachter of feller laten
branden.

De kleur functie (functienummer: 0x11h) :
Deze functie zal iedere led dezelfde kleur geven. Deze heeft dezelfde input
waarden als de RGB kleurfunctie met uitzondering van de led nummer. Deze
input waarde is overbodig want men stelt alle leds in met hetzelfde kleur.
Input variabelen:




De hoeveelheid rode kleur (16 bit)
De hoeveelheid groene kleur (16 bit)
De hoeveelheid blauwe kleur (16 bit)
De brightness (8 bit)
Deze variabelen hebben dezelfde functie als bij de RGB instelfunctie.
33

Onboard led functie (functienummer 0xAEh, 0xAFh ):
Op iedere node zijn er 2 extra leds aangebracht aan de microcontroller. Met deze
functie kunnen de onboard leds aangestuurd worden. Op iedere node zijn 2 leds
geplaatst die kunnen worden gestuurd door de gebruiker. Beide leds worden met
een afzonderlijke functie bediend. De functie met nummer 0xAEh zal de eerste
led toggelen. En de functie met nummer 0xAFh zal dit doen bij de andere led.
Deze functie heeft geen input waarden.

6.1.2
Prioriteit instelfunctie (functienummer: 0xB0): deze functie zal het
prioriteitsniveau van de node instellen. Standaard zal het prioriteitsniveau van de
node ingesteld zijn op het laagste niveau.
Input variabelen:
 Prioriteitsniveau (1 tot 4)
Accelerometer node (sensor)
Ook de accelerometer node werkt op dezelfde manier als de led driver node. Maar er
zijn hier ook functies die data zullen terug zenden naar het systeem.
De gekozen accelerometer (ADXL350) zal de versnelling opmeten in 3 richtingen,
met een resolutie van 13 bit.
Functies bij de accelerometer node:
 Prioriteit instelfunctie (functienummer: 0xB0): deze functie zal het
prioriteitsniveau van de node instellen. Standaard zal het prioriteitsniveau van de
node ingesteld zijn op het laagste niveau.
Input variabelen:
 Prioriteitsniveau (1 tot 4)

Datalog functie (functienummer: 0x10): deze functie zal een datalogger
instellen die na een bepaald tijdsinterval een meting uitvoert en de waarden van
alle 3 de richtingen opslaan op een geheugen node. Er kan slechts 1 datalogger
worden ingesteld, in een later stadium kan dit nog uitgebreid worden.
Input variabelen:
 Tijd: om de hoeveel milliseconden moet een meting gebeuren,
maximaal 1000 milliseconden.
 Adres van de geheugen node waar de data moet worden opgeslagen.

Datalog aan/uit (functienummer: 0x11): deze functie zet de datalog functie aan
of uit.
Input variabelen:
 Datalog aan >0, datalog uit = 0
34
6.2

Opdracht opslaan(functienummer: 0x12): met deze functie kan men een
opdracht opslaan in het flash geheugen van de microcontroller. Men moet dan
wel de “opdracht aanmaak” functie gebruiken om de opdracht te activeren
Input variabelen:
 Functie nummer, zo weet de microcontroller in welke databank de bytes
moet opgeslaan worden.
 Maximaal 9 databytes, als er meer bytes moeten opgeslagen worden
moet men deze functie nog eens uitvoeren. De microcontroller zal de
bytes die in de volgende functie oproep komen automatisch achter de
bytes plaatsen die al in de geheugenbank aanwezig waren.

Opdracht aanmaken(functienummer: 0x13): deze functie zal gebruikt worden
om de opdracht aan te maken en in te stellen zodat deze op de gewenste manier
reageert.
Input variabelen:
 Opdracht nummer
 Totale grote van de opdracht (maximaal 64)
 Te controleren waarde (1 = X waarde < threshold, 2 = X waarde >
threshold, 3 = Y waarde < threshold, 4 = Y waarde > threshold, 5 = Z
waarde < threshold, 6= Z waarde > threshold)
 Threshold, waarde waarop de opdracht moet getriggerd worden.
Geheugen node
De geheugenmodule werd door tijdsgebrek enkel onderzocht en niet geïmplementeerd.
Er werd geopteerd om een micro SD kaart te gebruiken. Deze neemt weinig plaats in
en heeft een grote opslagcapaciteit. De SD kaart kan ook makkelijk verwijderd en
vervangen worden en door een computer uitgelezen worden. Maar om het uitlezen te
vergemakkelijken moet er een bestandssysteem (vb. FAT,NTFS) aanwezig zijn op de
SD kaart. Hierdoor moet ook de microcontroller met de geheugen node overweg
kunnen met het bestandssysteem.
Omdat het moeilijk is om de volledige werking van het bestandssysteem in code te
implementeren is er gezocht naar een bestaande oplossing. De oplossing hiervoor is
“FatFs” dit is een fat module die speciaal werd ontwikkeld voor microcontrollers. Met
deze software module kan een programma data schrijven en ophalen van een FAT
systeem.
Door de complexiteit van de FAT module is er een microcontroller met voldoende
geheugen nodig. Zodat hij de data tijdelijk kan bufferen als er veel nodes naar hem
zenden.
Er is wel al onderzocht welke functies er zouden geïmplementeerd worden.
Functies van de geheugen node:
 Sla op (functie nummer: 0x10h): deze functie zal de waardes die volgen opslaan
in het bestand van de node waarvan de data afkomstig waren.
35
Input variabelen:
 Adres herkomst node: om de verschillende waarden uit elkaar te houden
 Maximaal 9 bytes data, deze moeten worden opgeslagen op de SD
kaart.
6.3

Vrije geheugen(functienummer: 0x11h): zal het beschikbare geheugen
teruggeven, zo kan men controleren of deze nog voldoende geheugen heeft.
Input variabelen: geen

Unmount kaart (functienummer: 0x12h): deze functie zorgt ervoor dat de SD
kaart veilig kan verwijderd worden, zodat er geen schrijffouten kunnen optreden.
Input variabelen: geen

Mount kaart (functienummer: 0x13h): zorgt ervoor dat de SD kaart ter
beschikking staat van het programma.
Input variabelen: geen

Onboard led functie (functienummer 0xAEh, 0xAFh ): met deze functie kunnen
de onboard leds worden aangestuurd. Op iedere node zijn 2 leds geplaatst die
kunnen worden gestuurd door de gebruiker. Beide leds worden met een
afzonderlijke functie bediend. De functie met nummer 0xAEh zal de eerste led
toggelen. En de functie met nummer 0xAFh zal dit doen bij de andere led.

Prioriteit instelfunctie (functienummer: 0xB0): deze functie zal het
prioriteitsniveau van de node instellen. Standaard zal het prioriteitsniveau van de
node ingesteld zijn op het laagste niveau.
Input variabelen:
 Prioriteitsniveau (1 tot 4)
Batterijmonitor
De batterijmonitor die gebruikt wordt is afkomstig van Maxim integrated. De
batterijmonitor zal enkel gebruikt worden om de batterij te controleren en om
waarschuwingen te generen als deze bijna leeg is.
Functies van de batterijmonitor:
 Overgebleven capaciteit (functienummer: 0x10h): deze functie zal de
overgebleven capaciteit teruggeven.
Input variabelen: geen
36
6.4

Temperatuur meting(functienummer: 0x11h): deze functie zal de temperatuur
opmeten van de batterij. De gebruikte chip heeft een ingebouwde
temperatuursensor, hiervoor moet echter de chip tegen de batterij geplaatst
worden.
Input variabelen: geen

Spanningsmeting (functienummer: 0x12h): deze functie zal de spanning van de
batterij opmeten en doorsturen.
Input variabelen: geen

Onboard led functie (functienummer 0xAEh, 0xAFh ): Met deze functie kunnen
de onboard leds worden aangestuurd. Op iedere node zijn 2 leds geplaatst die
kunnen worden gestuurd door de gebruiker. Beide leds worden met een
afzonderlijke functie bediend. De functie met nummer 0xAEh zal de eerste led
toggelen. En de functie met nummer 0xAFh zal dit doen bij de andere led.

Prioriteit instelfunctie (functienummer: 0xB0): deze functie zal het
prioriteitsniveau van de node instellen. Standaard zal het prioriteitsniveau van de
node ingesteld zijn op het laagste niveau.
Input variabelen:
 Prioriteitsniveau (1 tot 4)
Systeemhoofd:
Ook het systeemhoofd heeft zijn eigen functies. Zo heeft hij functies om de onboard
leds aan te sturen en om data door te sturen.
Geïmplementeerde functies:
 Onboard led functie (functienummer 0xAEh, 0xAFh ): Met deze functie kunnen
de onboard leds worden aangestuurd. Op iedere node zijn 2 leds geplaatst die
kunnen worden gestuurd door de gebruiker. Beide leds worden met een
afzonderlijke functie bediend. De functie met nummer 0xAEh zal de eerste led
toggelen. En de functie met nummer 0xAFh zal dit doen bij de andere led.

Data doorzend functie(functienummer 0x10h ): deze functie zal data doorzenden
van de applicatie naar het systeem. Deze functie zal enkel opgeroepen worden
door de applicatie.
Input variabelen:
 Adres van de bestemmingsnode
 Maximaal tien bytes om door te zenden.
37

7
Zend data (functienummer 0x11h): deze functie zal data zenden van het systeem
naar de applicatie. Deze functie zal enkel door de nodes opgeroepen worden en
zal niet vanuit de applicatie gebruikt worden.
Input variabelen:
 Maximaal tien bytes
Communicatie met smartphone:
Een smartphone is een zeer krachtig toestel, men kan films afspelen, muziek
beluisteren, mails beantwoorden en nog veel meer. Maar de communicatie
mogelijkheden naar de buiten wereld zijn beperkt. Zo hebben we de gsm connectie die
verbinding maakt met de gsm mast. Deze kan niet worden gebruikt voor de
communicatie met het systeem. Als deze verbinding gebruikt zal worden, kan de
gebruiker geen oproepen en SMS berichten ontvangen. Er moet dus een andere
verbinding gebruikt worden.
Op alle smartphones is er steeds wifi en bluetooth aanwezig. De wifi connectie dient om
een snelle netwerk connectie op te stellen, zo kan men surfen op het internet. De
bluetooth connectie wordt gebruikt voor communicatie met randapparaten zoals een
hands free carkit, of andere toestellen met een bluetooth connectie. Aangezien bluetooth
specifiek gemaakt is voor connectie met randapparaten gaat deze verbinding gebruikt
worden in het systeem.
Op de nieuwste duurdere smartphones is er nog een derde soort verbinding, namelijk
near field communication (NFC). Integenstelling tot bluetooth en wifi heeft NFC een
kleiner bereik. Zo gaat NFC over een afstand van enkele centimeters, bluetooth en wifi
gaat over enkele meters. NFC zal ook worden ondersteund in het systeem, de gebruiker
staat vrij te kiezen welke verbinding hij wil gebruiken.
Zoals eerder vermeld is bluetooth ontworpen om te communiceren met randapparatuur.
Zo is het energieverbruik laag (<2 milliwatt), in tegenstelling tot wifi waar het
energieverbruik hoger is (~80 milliwatt). Bluetooth is dus zeer geschikt voor mobiele
toepassingen en is zeer sterk ingeburgerd. Om tijd te besparen is geopteerd om een
bluetooth module aan te kopen. Zo gaat er geen tijd verloren in ontwikkeling en testen
van een zelfgemaakte module.
Er werd gekozen om de JY-MCU bluetooth module (V1.06) te gebruiken. Deze module
zal een seriële connectie opstellen tussen zichzelf en het toestel dat verbinding maakt.
Het heeft een zeer lage kostprijs (€5.33), en wordt vaak gebruikt bij doe het zelf
projecten.
38
Figuur 17: Bluetooth module[22]
Figuur 18: Communicatie smartphone van/naar systeem
De module staat in verbinding met het systeemhoofd via een UART connectie. Als het
systeemhoofd data wil zenden naar de applicatie dan zal het systeemhoofd de data
doorsturen naar de bluetooth module via een UART bus. De module gaat op zijn beurt
de data overzenden via bluetooth naar de smartphone. De ontvanger in de smartphone
zal de data aan de applicatie bezorgen. Als er data moet verzonden worden van de
applicatie naar het systeemhoofd zal dit in omgekeerde volgorde verlopen.
De gebruiker zal ook kunnen kiezen voor een NFC verbinding. Een voordeel van een
NFC verbinding is dat deze een klein bereik heeft, bluetooth heeft een groter bereik en
kan zo makkelijker door iemand worden ontvangen, zonder medeweten van de
gebruiker (bluejacking).
39
Om een NFC verbinding te gebruiken zal een andere module noodzakelijk zijn. Doordat
NFC nog niet ingeburgerd is, is het moeilijker om een module te vinden. Omdat de
verbinding tussen de bluetooth module en het systeemhoofd een UART bus is moet
deze bij de NFC module ook UART zijn. Daardoor kan de gebruiker simpelweg de ene
module eruit halen en de andere module aansluiten.
Na wat speurwerk is de keuze gevallen op een module van iteadstudio. De kostprijs van
de NFC module is iets duurder dan deze van een bluetooth module, namelijk €17.08.
Figuur 19: NFC module[23]
De communicatie tussen het systeem en de smartphone werkt op dezelfde manier als bij
de bluetooth module. Maar de data worden via NFC verzonden in plaats van bluetooth.
8
Werking van het systeem
In dit deel wordt de samenwerking tussen alle verschillende onderdelen toegelicht. Dit
is opgespitst in twee delen. Het eerste deel gaat over de communicatie tussen de
verschillende nodes en het systeemhoofd. Het tweede deel gaat dieper in op de
communicatie tussen het systeem en de smartphone.
8.1
8.1.1
Communicatie in het systeem
Busaanvraag
Als een node een adres wil verkrijgen of als hij data wil verzenden moet de node
eerst een busaanvraag plaatsen bij het systeemhoofd. Pas als het systeemhoofd een
goedkeuring stuurt mag de node zijn adresaanvraag uitvoeren of zijn data verzenden.
Doordat het systeemhoofd de controle heeft over wie wanneer mag zenden wordt er
ook een prioriteitssysteem ingebouwd. Het prioriteitssysteem zal voorrang geven aan
belangrijke nodes.
Er zullen 4 prioriteitsniveaus ingebouwd worden, het hoogste niveau is de
systeemprioriteit. Dit niveau wordt gebruikt om alle nodes die de goede werking van
het systeem moeten garanderen voorrang te geven op alle andere nodes. Een
voorbeeld van een node op dit niveau is de batterijmonitor, deze heeft een schatting
40
van de overgebleven capaciteit van de batterij. Als deze te laag wordt dan moet de
gebruiker hiervan op de hoogte gebracht worden. Dit moet met zo weinig mogelijk
vertraging gebeuren zodat de gebruiker direct actie kan ondernemen om de batterij
op te laden of te vervangen. De nodes die op dit prioriteitsniveau aanwezig zijn, gaan
automatisch herkend worden door het systeemhoofd, en gaan automatisch met het
juiste niveau ingesteld worden.
Figuur 20: Prioriteitsniveau's
De overige 3 prioriteitsniveaus staan ter beschikking van de gebruiker, het
prioriteitsniveau van een bepaalde node kan dan door de gebruiker worden ingesteld.
Als het systeemhoofd start met het uitdelen van de goedkeuringen zal er rekening
gehouden worden met de prioriteiten. Nadat alle nodes met systeemprioriteit hun
data hebben verzonden, is het de beurt aan de nodes met hoge prioriteit, daarna aan
de nodes met midden prioriteit, en dan de nodes met laagste prioriteit.
Werking:
We starten vanuit een systeem dat volledig spanningsloos is. Er wordt een batterij
aangesloten, hierdoor zal het systeem opstarten. Als het systeemhoofd volledig is
opgestart stuurt deze een general call (adress 0x00), dit wordt ontvangen door iedere
node op de bus. Deze oproep zal iedere node de opdracht geven een aanvraag te laten
sturen indien deze data moeten verzenden. De nodes gaan één voor één een aanvraag
indienen, hierbij geven ze hun adres en hun prioriteitsniveau. Na een bepaalde tijd
zal het systeemhoofd stoppen met aanvragen opnemen of als het systeemhoofd vijftig
aanvragen heeft ontvangen zal hij overgaan naar fase twee. Hierna gaat hij over naar
fase 2 van de busaanvraag. Hij deelt nu toestemmingen uit aan iedereen die een
aanvraag had geplaatst. De volgorde hangt af van het prioriteitsniveau. Nadat een
node al zijn data heeft overgezonden zal deze het systeemhoofd contacteren dat hij
geen data meer heeft. Daarna contacteert het systeemhoofd de volgende node en zal
deze op dezelfde manier tewerk gaan.
41
Figuur 21: Aanvraag en verwerkingsfase
De kleur van de verschillende blokken staat voor de richting van de data, hieronder
staat de verklaring van de verschillende kleuren.
Figuur 22: Richting van de dataoverdracht
8.1.2
Adressering
De nodes vragen automatisch een adres aan het systeemhoofd maar eerst moeten ze
daarvoor een aanvraag doen. De werkwijze werd punt 8.1.1 Besproken.
Stel node 1 wil een adres aanvragen, in de aanvraag gaan 3 bytes doorgezonden
worden.
 De eerste byte is het adres van de aanvraag node, dit zal aangezien de node
nog geen specifiek adres geeft 0x02h zijn. Dit is het standaard adres waar
dat iedere node heeft als deze wordt opgestart.
42


De tweede byte is het prioriteitsniveau, dit zal de laagste prioriteit zijn, dit
wil zeggen dat nieuwe nodes als laatste aan de beurt komen.
De derde byte is een random nummer, dat gegenereerd word door de node
zelf. Dit random getal wordt bekomen door een meting uit te voeren met de
interne analoog digitaal convertor (ADC) van de microcontroller. Het getal
zal gebruikt worden om alle nodes die op adres 0x02h aanwezig zijn van
elkaar te onderscheiden. Er kunnen namelijk meerdere nodes aanwezig zijn
op dit adres.
Figuur 23: Adresaanvraag
De node zal door het systeemhoofd gecontacteerd worden, het systeemhoofd zal het
random getal van node 1 doorsturen naar adres 0x02h. Hierdoor weten alle nodes op
adres 0x02h welke de toestemming heeft, omdat ze allemaal een ander random getal
hebben. Hierna gaat de node zijn adres ophalen van het systeemhoofd.
Figuur 24: Bus toelating
43
Dit gebeurt in twee fases. Bij de eerste fase gaan er data van de node naar het
systeemhoofd. Er worden 2 bytes overgezonden, de eerste byte is een systeem code.
Het systeemhoofd kan nagaan of de node die is aangesloten ondersteund wordt in
zijn softwarepakket.
Figuur 25: Adres ophalen
Als dit niet zo is kan het systeem die node niet bedienen en wordt deze node
genegeerd. De tweede byte is het node identificatie nummer (NIN). Iedere soort node
heeft een aparte nummer. Hieronder staat een lijst met alle nummers en hun
bijhorende nodes.
Tabel 3: Node identificatienummers (NIN)
node
NIN
led driver
0x03h
accelerometer
0x04h
batterijmonitor 0x05h
Geheugen
module
0x06h
Met deze nummers kan de applicatie weten welke node er is aangesloten op dat adres
zo kan deze de gepaste menu openen.
Alle NIN worden bijgehouden in een lijst op het systeemhoofd maar ook op de
smartphone. Doordat de lijst op 2 plaatsen wordt bijgehouden moeten deze
gesynchroniseerd worden met elkaar. Dit zal in eerste instantie gebeuren door de
gebruiker zelf, hij moet op de refresh knop klikken in het hoofdmenu. In een later
stadium zal deze lijst automatisch uitgewisseld worden.
In de tweede fase gaan er data van het systeemhoofd naar de node. Hierin wordt het
adres teruggegeven, de node zal dan dit adres instellen als zijn eigen uniek adres op
de bus.
8.1.3
Data zenden
Als een node data wil zenden gaat deze iets anders tewerk, in de aanvraag fase zal
deze geen random getal doorsturen, omdat deze al een uniek adres heeft en er geen
ander node aanwezig kan zijn met hetzelfde adres.
44
Figuur 26: Zend aanvraag
Er zijn dus maar 2 bytes die worden doorgezonden, het adres van de aanvraag node
en het prioriteitsniveau van de node.
Als het systeemhoofd nu toestemming geeft zal deze één byte doorsturen.
Figuur 27: Zend toestemming
De node zal nu zijn data overzenden naar de gewenste node, om ervoor te zorgen dat
iedere node de bus kan gebruiken mag de node niet eindeloos bezig zijn met zenden.
Er wordt een maximum gedefinieerd voor het aantal over te zenden of op te halen
bytes. Er is hier gekozen voor een maximum van tien databytes.
Figuur 28: Data bytes
Als de node zijn data heeft overgezonden naar de bestemmeling, zal hij het
systeemhoofd contacteren. Zo laat hij het systeemhoofd weten dat hij klaar is en zal
de volgende node aan de beurt komen.
45
Voorbeeld:
Als voorbeeld wordt een RGB led aangestuurd. In punt 6.1.1 werden de functies van
de led driver besproken. We zullen led 3 rood doen oplichten zonder dat deze gedimd
is. De functie oproep wordt dan:
Figuur 29: Data bytes led instellen
8.1.4
Opdrachten uitvoeren
Een sensor kan ingesteld worden om een bepaalde opdracht uit te voeren wanneer er
een bepaalde waarde is bereikt of wanneer een meting is uitgevoerd. Deze opdracht
zal worden ingesteld via de applicatie.
Zo kan men bijvoorbeeld een led laten branden van zodra de temperatuur te hoog
wordt. De data voor de opdrachten bevind zich in het flashgeheugen van de
microcontroller op de desbetreffende node. Het flash geheugen bestaat uit 2 grote
delen, het main geheugen en het informatie geheugen. Er wordt gebruik gemaakt van
het informatiegeheugen, deze bestaat uit 4 segmenten. Ieder segment staat voor één
opdracht, er zullen dus 4 opdrachten ingesteld kunnen worden. Ieder segment bestaat
uit 64 bytes, één opdracht bestaat dus maximaal uit 64 bytes.
Figuur 30: Onderdelen flash geheugen[24]
46
Als de opdracht wordt opgeroepen zal de node één voor één de data ophalen en
beginnen verzenden als deze toestemming gekregen heeft om de bus te gebruiken.
Hoe ziet er een goede opdracht uit:
Men moet eerst het adres van de node plaatsen, zo weet de microcontroller naar waar
hij data moet verzenden. Daarna komt een byte die de lengte van de functie oproep
weergeeft. Na deze byte volgen de input variabelen van de functie, deze zijn
maximaal 10 bytes lang. Als er meerdere functies moeten opgeroepen worden dan
komt terug het adres van de bestemmeling, dit kan een andere zijn dan de
voorgaande functieoproep. Daarop volgt ook een byte die de lengte van de
functieoproep weergeeft, daarna terug alle inputvariabelen voor deze functie.
8.2
Communicatie tussen smartphone en systeem
De opdrachten die van de smartphone naar het systeem zullen gestuurd worden zullen
enkele bytes meer bevatten, deze bytes worden gebruikt om het systeemhoofd de juiste
functies te laten uitvoeren. De bytes die extra moeten verzonden worden zijn:
 De functie die het systeemhoofd moet uitvoeren
 Het adres van de node
Als men terugkijkt naar het voorbeeld in 5.1.3 dan wordt er een led aangestuurd, dit
zijn de bytes die worden overgezonden van het systeemhoofd naar de node. De
opdracht hiervoor werd echter gegeven door de applicatie. In volgende figuur staan de
bytes die worden overgezonden van de smartphone naar het systeemhoofd.
Figuur 31: Dataframe van smartphone naar systeem
47
9
Opbouw applicatie
In dit deel wordt de werking van de applicatie besproken, men krijgt een beschrijving
van de werking samen met alle functies dat ieder scherm heeft en hoe men ermee moet
werken.
Figuur 32: Keuzemenu
Werking:
Als de applicatie wordt opgestart zal de gebruiker de verbinding moeten kiezen. In de
eerste versie zal dit enkel kunnen via bluetooth of NFC. Als men op bluetooth klikt
krijgt men het bluetooth menu scherm, hierop bevind zich een lijst met alle vooraf
gepairde toestellen. De gebruiker moet dan een keuze maken met welk toestel hij
verbinding wil maken. De module die hier gebruikt zal worden heeft de naam “HC-06”.
Nadat er een keuze is gemaakt moet de gebruiker op de knop verbinden klikken. De
applicatie zal dan een bluetooth connectie opstellen tussen de smartphone en het
systeem.
Figuur 33: Bluetooth menu
48
De verbinding die gemaakt word in het bluetooth menu moet beschikbaar blijven in de
volledige applicatie. Dit wordt gedaan door een service op te starten. Deze service is
aanwezig op de achtergrond en maakt connectie met het gekozen apparaat. De volgende
menu’s van de applicatie zullen dan verbinding maken met deze service om data door te
sturen naar het systeem. Maar de service staat ook in voor het ontvangen van de data,
als de service data ontvangen heeft zal ze het doorsturen naar het actieve scherm. De
waarden zullen dan verwerkt worden en zichtbaar gemaakt worden op de display.
Als de verbinding gemaakt is kan de gebruiker op doorgaan klikken, zo komt hij in het
hoofdmenu terecht. In dit hoofdmenu staat een lijst met alle aangesloten nodes. De
gebruiker kan dan kiezen welke node hij wil bedienen. Er is ook een refresh knop
voorzien. Als er een nieuwe node wordt aangesloten moet de gebruiker op refresh
klikken, hierdoor wordt de lijst met apparaten vernieuwd en zal de aangesloten node
verschijnen in de lijst.
Figuur 34: Hoofdmenu
Als de gebruiker voor een NFC verbinding kiest zal deze geen keuzemenu tonen. Ze zal
rechtstreeks een NFC service opstarten en overgaan naar het hoofdmenu. Deze service zal
net zoals bij de bluetooth verbinding de connectie tussen de smartphone en het systeem
onderhouden.
Menu’s van de nodes:
Led driver node:
Als men in het hoofdmenu een led driver kiest komt men in volgend menu. De
gebruiker kan kiezen welke led hij zal aansturen, hij kan elke led apart aansturen maar
hij kan ook alle leds op hetzelfde moment aansturen. Hierna moet hij de kleur instellen
die hij wil, dit doet hij met 3 schuifbalken die de rood, groen en blauwe kleur
weergeven te verschuiven. Met de laatste schuifbalk kan de gebruiker de leds dimmen,
deze heeft invloed op alle leds. Hierna klikt de gebruiker op toepassen en worden de
gekozen leds ingesteld met de kleur die werd gekozen.
49
Als de gebruiker de knop automatisch toepassen klikt dan gaan de leds automatisch
ingesteld worden met de gekozen kleur. De laatste knop “leds uit” zal alle leds
uitschakelen.
Figuur 35: Led driver menu
Accelerometer menu
Als men een accelerometer kiest komt men in een ander menu dan de led driver, in dit
menu krijgt men de keuze of men een opdracht wil toevoegen of men een datalogger
wil instellen. Als men kiest voor een opdracht krijgt men het opdrachtscherm de
gebruiker moet eerst instellen welke variabele hij wil controleren. Hij moet ook de
waarde meegeven waartegen de meetwaarde wordt gecontroleerd. Daaronder komt de
lijst met alle aangesloten apparaten. De gebruiker kan dan kiezen welke node er wordt
aangestuurd uit de opdracht. Als hij de gewenste node aanklikt komt hij in het menu
van de gekozen node en kan hij instellen wat die node moet doen. Daarna klikt hij op
instellen en zullen alle waarden worden doorgestuurd.
Als de gebruiker ervoor kiest om een datalogger in te stellen komt hij in een ander
menu terecht. In dit menu moet hij eerst het interval tussen de metingen instellen.
Hieronder staat een lijst met alle geheugen modules die aanwezig zijn in het systeem.
In deze lijst kan hij één node aanduiden waar de waarden van de metingen worden
opgeslagen. Daarna klikt hij op instellen en zal de applicatie de gepaste waarden
doorsturen.
Voor de andere nodes werd er nog geen menu uitgedacht, dit zal in een later stadium
ontworpen worden.
50
Deel 3: technisch ontwerp
51
10 Inleiding
In dit deel wordt de opbouw van iedere module toegelicht. Verder wordt ook de
software besproken, hierbij worden alle aanwezige functies toegelicht. De datasheets
van de gebruikte chips zijn terug te vinden op de cd in de map datasheets. De schema’s
van de verschillende modules en de lay-out van de printborden is te vinden in de
bijlagen en op de cd van de thesis.
11 Hardware modules
11.1
Batterij + voedingsmodule
De voedingsmodule bestaat uit 2 delen, een QI ontvanger en een module waar een
batterijmonitor en een buck boost convertor op geplaatst is.
QI ontvanger
Batterijmonitor
Buck boost convertor
Figuur 36: Voedingsmodule
De QI ontvanger bestaat uit 1 chip, in deze chip is een QI ontvanger aanwezig maar
ook een batterijlader. De keuze van de chips voor de QI ontvanger was beperkt, de
enige fabrikant die op dit moment QI chips verkoopt is texas instruments. Hierin
hebben we de keuze tussen een ontvanger met of zonder batterij lader. Hier is
gekozen voor een chip met een ingebouwde oplader (BQ51050B).
Aansluitingen QI ontvanger:
Figuur 37: QI ontvanger
52
In de volgende tabel worden de functies van ieder pin beschreven.
Tabel 4: Aansluitingen QI ontvanger
Pin
naam
TS
EN2
GND
Functie
temperatuursensor van de batterij, NTC weerstand van 10kΏ
als dit laag signaal(0) is zal de oplader werken, bij hoog
signaal (1) zal de oplader uitgeschakeld zijn
massa connectie
BAT
TS2
GND
uitgangsspanning van de oplader, moet naar de batterij
zelfde connectie als TS,
massa connectie
De C1 en C2 connector dient om de secundaire spoel aan te sluiten. Deze spoelen
moeten voldoen aan de QI compatibel zijn.
Op het tweede deel is een batterijmonitor en een buck boost convertor geplaatst. Bij
de keuze van de batterijmonitor was er een groot aanbod. Er wordt een chip van
Maxim (DS2764) gebruikt. Deze chip werd gekozen omdat deze de batterijcapaciteit
bijhoudt en ook de batterij beveiligt tegen kortsluitingen en overbelasting. Om de
batterij te beveiligen wordt er gebruik gemaakt van 2 mosfets die worden gestuurd
vanuit de batterijmonitor.
De buck boost convertor is aanwezig om een constante spanning te verkrijgen
waarmee het systeem zal werken. Er is een buck boost convertor (LT3113) gekozen
die maximaal 3A kan leveren. De buck boost convertor zal de fluctuerende
batterijspanning omzetten naar een constante spanning. Als de batterijspanning onder
de 3.3V zakt zal hij de spanning optransformeren tot 3.3V.
Aansluitingen:
Figuur 38: Aansluitingen voeidingsmodule
53
De linkse connector zal gebruikt worden om de QI oplader aan te sluiten. De
aansluitingen van deze connector komen overeen met deze van de QI oplader.
De connector rechtsboven op het bord is de aansluiting voor de lithium batterij met
een celspanning van 3.7 V. De middelste aansluiting is voor de NTC weerstand die
aanwezig is in de cel. Als er geen NTC weerstand aanwezig is moet deze pin met een
10kΩ weerstand aan de massa verbonden worden. De NTC wordt gebruikt als
thermische veiligheid terwijl de batterij oplaad.
De tweede connector dient om de I²C communicatie van de batterijmonitor aan te
sluiten aan een aparte microcontroller. Deze lijnen mogen niet rechtstreeks op de bus
aangesloten worden omdat ze de communicatie op de bus kunnen verstoren.
De connector rechtsonder is de uitgang van de 3.3V, deze zal gebruikt worden om het
volledige systeem van spanning en stroom te voorzien.
11.2
Systeemhoofd
Het systeemhoofd bestaat uit 1 microcontroller, deze kan aangesloten worden op de
hub module. Er is ook een tweede aansluiting voorzien om de communicatie module
op aan te sluiten.
Aansluitingen systeemhoofd:
Figuur 39: Aansluitingen systeemhoofd
Aan de rechterzijde bevindt zich de connector naar het hub systeem. Het
systeemhoofd krijgt zijn voedingsspanning van het hub systeem, en wordt ook
aangesloten op de bus met één connector. De tweede connector is deze voor de
communicatiemodules, op deze connector wordt de voedingsspanning doorgegeven
naar de module en wordt de uart bus ook doorverbonden naar de module.
De connector om de microcontroller te programmeren staat boven aan het bord, de
aansluitingen en verdere informatie komt verder in deze thesis.
54
Systeemhoofd
Hub-module
Bus buffer
Figuur 40: Systeemhoofd en hub module
11.3
Het hub systeem
Het hub systeem staat in voor het verdelen van de stroom en het splitsen van de bus.
De voedingsmodule wordt aangesloten op de middelste connector, deze connector
staat in verbinding met alle connectoren die de voedingsspanning moeten verdelen.
De bus wordt hier ook opgesplitst, om de capaciteit van de busgeleiders te beperken
worden er buffers geplaatst op iedere uitgang. Hierdoor kan de kloksnelheid van de
bus verhoogd worden. Door de buffers kunnen de geleiders die naar de node gaan
langer worden.
55
Aansluitingen:
Figuur 41: Aansluitingen hub module
Aan dit hub systeem kunnen maximaal 4 nodes worden aangesloten en één
systeemhoofd.
11.4
Led driver
Op de led driver node zijn er 4 RGB leds, een led driver en een microcontroller
aanwezig. Er zijn twee aansluitingen onderaan het bord, één voor de
voedingsspanning en één voor de bus. De derde op de rechterkant van het bord is de
programmeer connector, deze wordt enkel gebruikt om de microcontroller te
programmeren.
De led driver is een chip die speciaal ontworpen is om RGB leds aan te sturen. De
microcontroller(msp430f2122) zal de led driver aansturen via een SPI bus.
Aansluitingen led driver:
Figuur 42: Aansluitingen led driver
56
Opmerking:
De connector voor de bus heeft niet dezelfde volgorde zoals de connector bij het hub
systeem. De klok lijn en data lijn zijn omgewisseld, dit wordt opgelost door de draden
voor de connector te draaien. De programmeer connector wordt verder besproken.
11.5
Accelerometer
De accelerometernode heeft net zoals de led driver drie aansluitingen. Één voor de
voedingsspanning, één voor de bus en één om te programmeren. Ook hier is er een
microncontroller (msp430f2122) die de accelerometer zal aansturen via een SPI bus.
De accelerometer meet de versnelling in 3 richtingen met een resolutie van dertien
bit.
Aansluitschema accelerometer:
Figuur 43: Aansluitingen accelerometer
Ook hier zijn de SDA en de SCL lijn van de node omgedraaid ten opzichte van de
aansluiting op de hub.
57
12 Programmeren
12.1
Microcontrollers
In het vorige deel werd al gezegd dat we de olimex MSP-JTAG-TINY gaan gebruiken
om de microcontrollers te programmeren. Het programmeren van de microcontroller
verloopt via twee lijnen, de test en reset lijn. De andere lijnen worden gebruikt om de
software te debuggen.
Figuur 44: Programmeer aansluiting[25]
De jtag connector op het schema is dezelfde als de aansluitingen van de olimex
programmer. Door een fout tijdens het tekenen van de printborden is de
programmeerconnector gespiegeld. Door behulp van draadjes en een tweede kabel
wordt dit opgelost.
Figuur 45: Programmeer connector
58
De olimex programmer wordt via USB aangesloten aan een computer. Er zijn
verschillende compilers waarmee de microcontrollers kunnen geprogrammeerd
worden. Maar bij sommige programma’s wordt het installeren van de drivers voor de
programmer niet ondersteund.
Er is gekozen om de IAR embedded workbench te gebruiken. Bij dit programma
kunnen we de driver makkelijk installeren en kan men de code stap voor stap
debuggen.
Hoe wordt de driver geïnstalleerd.
De driver is te vinden in de map olimex. In de olimex map vindt men alle bestanden
die nodig zijn om de programmer aan te sturen.
Maak een map aan in C:\Program Files\IAR Systems\Embedded Workbench
6.5\430\drivers en geef deze de naam “Olimex”. Kopieer de inhoud van de map
drivers uit de olimex map van de cd naar de pas aangemaakte map op de computer.
Kopieer daarna de files van de map “Olimex” van de cd exclusief de map drivers naar
de map C:\Program Files\IAR Systems\Embedded Workbench 6.5\430\bin. De
olimex programmer is nu beschikbaar in de compiler.
Nu moeten we de compiler instellen zodat hij de olimex programmer gebruikt. Dit
doen we door in de linkerkolom, met de rechtmuisknop op de projectnaam te klikken
en dan opties te kiezen.
Figuur 46: IAR opties menu
59
In het “general options” menu moet men eerst de juiste microcontroller kiezen.
Figuur 47: IAR opties menu, keuze microcontroller
Hierna gaat men naar het “debugger” menu, in dit menu zegt men aan de compiler dat
men een debugger wil gebruiken en dat men de code niet wil simuleren.
Figuur 48: IAR opties menu, driver keuze
60
Daarna gaat men naar het “FET Debugger” menu, hier moet men de juist programmer
kiezen. In het dropdown menu kiest men “olimex USB”. Daarna klikt men op de knop
met de drie puntjes. De computer geeft nu een lijst met alle programmers. De
programmer die gebruikt werd had het nummer “TN030007d0”, dit is niet bij iedere
programmer hetzelfde.
Figuur 49: IAR opties menu, keuze debugger
Nu moet men nog het debug protocol vastleggen, de microcontrollers zijn aangesloten via
de spy by wire interface. Men kiest eerst manual selection en dan spy by wire. Nu klikt
men op ok en kan men de microcontrollers programmeren.
Om de code te compileren en op de microcontroller te plaatsen moet men op download en
debug knop klikken.
Nu komt men in het debug programma en moet men de
microcontroller starten door op go
te klikken. Men kan hier ook stap voor stap de
code laten uitvoeren en men kan de inhoud van de registers opvragen.
61
12.2
Applicatie
Eerst en vooral moet men op de smartphone de ontwikkelaarsopties zichtbaar maken.
Men doet dit door naar het menu “instellingen” te gaan. Dan klikt men op “meer”,
hierna gaat men naar “toestelinfo”. Daarna klikt men 8 keer op “buildnummer”. Nu
zijn de ontwikkelaarsopties actief. Om applicaties te kunnen uitvoeren vanaf de
compiler rechtstreeks op het toestel moet “USB - foutopsporing” aanzetten.
De android applicatie wordt geprogrammeerd met “eclipse”, er is voor deze compiler
gekozen omdat deze het makkelijkst te gebruiken is. Er bestaan ook nog andere
compilers zoals android studio, deze staat echter nog in zijn kinderschoenen. Hierdoor
zitten er nog fouten in de compiler en wordt deze niet gebruikt in deze thesis.
Nu gaan we over naar de compiler op de pc. De compiler is te downloaden van de
android developers site (http://developer.android.com/sdk/index.html). Download deze
software en installeer deze. Omdat android een java gebaseerde taal is moet men ook
de Java SE Development Kit (JDK) installeren. Anders kan men geen applicaties
compileren.
Als men een project opent in de eclipse compiler moet de gebruiker eerst een paar
instellingen aanpassen. Eerst klikt men op het pijltje naar de play toets
gaat men naar “run configurations”.
. Daarna
Figuur 50: Eclipse opties menu
In de linkerkolom klikt men eerst het project aan waar men aan het werken is. Klik
daarna op “target”. Hier kan men kiezen waar men de applicatie wil uitvoeren, dit kan
op een virtueel apparaat zijn of op een fysiek apparaat.
62
Kies nu de optie “always prompt to pick device”. En klik op close.
Figuur 51: Eclipse opties menu, target keuze
63
Nu klikken we terug op het pijltje naast de play toets, maar in plaats van “run
configurations” te klikken, kiezen we voor “run as”. Nu verschijnt er een submenu in
dit menu kiest men “android application”. Nu kan men kiezen op welk apparaat men
de applicatie wil uitvoeren. De eerste lijst zijn fysieke apparaten en de tweede lijst zijn
virtuele apparaten. Dubbelklik op het gewenste apparaat. De applicatie zal worden
gecompileerd en uitgevoerd op de gekozen node.
Figuur 52: Eclipse opties menu, apparaat keuze
64
13 Software
De code zal nog worden aangepast nadat deze tekst is opgesteld, hierdoor kunnen
sommige functies een andere opbouw krijgen, in de code zal er bij iedere functie een
uitgebreide beschrijving aanwezig zijn. Maar in het volgende deel staat een overzicht
van alle functies en waar ze gebruikt moeten worden.
13.1
13.1.1
Microcontrollers
Overzicht code opbouw
Hoe moet men de code opbouwen voor de microcontroller van de node. De code
bestaat uit 3 delen, de main code, de bus code en de specifieke node code. De bus
code is voor iedere node dezelfde, deze is te vinden op de cd in de map
software\microcontrollers. De beschikbare functies worden besproken bij de
leddriver node.
De specifieke node code is afhankelijk van node tot node, zo is de code voor de
leddriver anders dan deze voor de accelerometer.
In de main functie worden alle functies van de node gedeclareerd. Dit ziet er als
volgt uit:
Figuur 53: Opbouw van een functie in een node
De microcontroller zit in een oneindige lus door “while(1)”, hierdoor voorkomen we
dat de microcontroller opnieuw opstart als deze aan het einde van zijn
programmacode is gekomen. Daarna controleren we als er data zijn ontvangen, dit
doen we aan de hand van een if statement. We blijven hier wachten totdat er data zijn
aangekomen.
Als er data zijn aangekomen moet we controleren welke functie we oproepen. Dit
wordt opnieuw gedaan door een if statement. In dit voorbeeld is het functienummer
0xAAh. Indien men een functie oproept met een andere nummer zal dit niet
uitgevoerd worden aangezien de functie niet ondersteund is.
Als daarentegen de functienummer wel klopt zal de code van de desbetreffende
functie uitgevoerd worden. Als er nog extra data nodig zijn zal deze eerst wachten
65
totdat ze allemaal zijn aangekomen en zal daarna de code van de functie verder
uitvoeren.
Na het uitvoeren van de functie zal de code terug wachten totdat er weer data
aankomen.
Indien men de functionaliteit van een node wil uitbereiden dan moet men
bijkomende if statements voorzien. Maar men moet deze telkens een ander nummer
geven.
13.1.2
Systeemhoofd
De software voor het systeemhoofd bestaat uit 4 delen het main bestand, het
bluetooth bestand, het bus bestand en het interrupt bestand. Deze 4 files zorgen voor
de goede werking van het systeemhoofd en hebben elk hun eigen functie. In de main
code worden alle functies dat het systeemhoofd kan uitvoeren gedefinieerd, in het
bluetooth bestand zijn alle functies aanwezig om data te ontvangen en te verzenden
naar de communicatie module en in het bus bestand zijn alle functies gedefinieerd
om te communiceren via de I²C bus. In het interrupt bestand zijn alle interrupt
functies samengebracht, deze functies worden door de microcontroller opgeroepen
als er data ontvangen of verzonden worden.
Bluetooth bestand:
Functies:
 Init_bluetooth(void);
 Unsigned char data_available(void);
 Unsigned char give_next_byte(void);
 Void send_data(char data);
Beschrijving:



Init_bluetooth(void)
Deze functie zal de UART module van de microcontroller instellen samen
met de interrupts van de UART module. De snelheid van de UART zal hier
ook ingesteld worden, deze is momenteel vastgelegd op 9600 baud. Deze
functie geeft geen waarden terug en heeft geen input waarden nodig.
Data_available (void)
Alle ontvangen bytes worden in een circulaire buffer opgeslagen, dit is een
buffer die steeds rond loopt. Als de buffer vol is zal deze terug naar het
begin gaan en daar data opslaan. Maar er de kans bestaat dat er hij aan data
die nog niet zijn verwerkt overschrijft. Dit mag niet gebeuren want anders
loopt het volledige systeem vast.
De functie zal een “true ” teruggeven als er data beschikbaar zijn in de
buffer. Het zal een “false” teruggeven als er geen data beschikbaar zijn. Er
zijn geen input waarden nodig voor deze functie.
Give_next_byte(void)
66

Deze functie geeft de volgende ontvangen byte uit de buffer terug, indien
deze beschikbaar is. De return waarde van de functie is een karakter zonder
teken.
Send_data(char data)
Deze functie zal één byte data verzenden naar de module. Er zijn geen
return variabelen enkel één inputvariabele, dit is de byte die zal worden
overgezonden.
Bus bestand:
Functies




Void Init_bus(void)
Void adress_resolver(void)
Void send_adress(void)
Void send_tx_rx(int send_adress, int tx_bytes, int rx_bytes)
Beschrijving




Init_bus (void)
Deze functie zal de I²C bus module initialiseren en wachten totdat er
minstens 1 node contact opneemt en een adres aanvraagt. Ook de interrupts
worden ingesteld. Evenals de nodelijst wordt hier volledig verwijderd,
zodat deze opnieuw kan geïnitialiseerd worden. Deze functie heeft geen
input en return waarden.
Adress_resolver(void)
Deze functie gaat opzoek naar het volgende beschikbaar adres en zet deze
klaar in de adres zend buffer. Deze buffer wordt enkel gebruikt om
adressen te verzenden. Het adres staat klaar voor de volgende node die een
adres aanvraagt. Deze functie heeft geen return waarden en geen input
variabelen.
Send_adress(void)
Deze functie wordt gebruikt om het systeemhoofd in te stellen om een
adres te geven. Hij ontvangt 2 bytes controleert deze en slaat ze op de juiste
plaats. Daarna verzend hij het adres en vervolgt hij het programma. Deze
functie heeft geen input en return waarden.
Send_tx_rx(int send_adress, int tx_bytes, int rx_bytes)
Met deze functie kan men maximaal 10 bytes verzenden naar een
specifieke node. De bytes die verzonden moeten worden moeten eerst in de
zendbuffer geplaatst worden. Daarna voert men deze functie uit, als input
variabelen moet men het adres, het aantal bytes dat men wil verzenden en
het aantal bytes dat men wil ontvangen opgeven. De ontvangen bytes zullen
in de ontvangstbuffer worden opgeslagen. En kunnen daarna verwerkt
worden.
67
Main bestand
In het main bestand zal de opstart procedure en de functies van het
systeemhoofd worden gedefinieerd. In de opstart procedure worden de
initialisatie functies opgeroepen. Daarna komt het programma in een oneindige
lus terecht. In deze lus wordt iedere functie in een if statement
geprogrammeerd. De eerste byte die altijd ontvangen wordt is het
functienummer, dit wordt gecontroleerd door een if opdracht. Als de gevraagde
opdracht overeenkomt met de functienummer zal de code in de if opdracht
uitgevoerd worden. Als de functie is uitgevoerd zal het programma terug
wachten totdat er nieuwe data zijn aangekomen en dan terug de desbetreffende
opdracht uitvoeren.
Functies
 Functie 1 (functienummer: 0x02h):
Switch onboard led 0. Deze functie zal de led 0 aan of uitschakelen.
 Functie 2 (functienummer: 0x03h):
Switch onboard led 1. Deze functie zal led 1 aan of uitschakelen.
 Functie 3 (functienummer: 0x04h):
Zend de device lijst naar de applicatie. Deze functie gaat alle node
nummers aan de applicatie bezorgen.
 Functie 4(functienummer: 0x05h):
Deze functie zal de data die hij ontvangen heeft doorzenden naar de gepaste
node. Deze functie zal gebruikt worden om de applicatie te laten
communiceren met het systeem.
 Functie 5(functienummer: 0x06h):
Deze functie zal data van het systeem naar de applicatie terug zenden. Zo
kan het systeem communiceren met de applicatie.
13.1.3
Led driver
De code van de led driver heeft gelijkenissen met die van het hoofdmenu, er is ook
een main code en code om de bus te bedienen. Maar in plaats van code voor de
bluetooth module is er hier code voorzien om de led driver te bedienen.
De main functie is de lijm tussen de twee anderen. De functies van de node werden
in het vorige deel beschreven. De code om de bus te bedienen is bij iedere node
gelijk, daarom zal deze maar één maal besproken worden.
Bus code (I²C.c)
Functies
 Void Init_sensor(void)
 Void Set_slave(void)
 Send_tx_rx(int send_adress, int tx_bytes, int rx_bytes)
68
Bespreking

Init_sensor (void)
Deze functie zal de node initialiseren en een adres laten ophalen. In
afwachting van het busaanvraag systeem is er een andere oplossing
bedacht om de verschillende nodes na elkaar te laten opstarten. Er zal een
meting gebeuren met de ADC van de microcontroller, aan de ingang van
de ADC is er niks aangesloten. Hierdoor zal de ADC enkel de ruis
opmeten dat aanwezig is. Dit is bij iedere node verschillend. Dit getal zal
gebruikt worden om een timer te laten lopen, terwijl de timer loopt zal de
microcontroller niet verder gaan met het programma. Doordat de getallen
verschillend zijn zal de opstarttijd van de verschillende nodes ook
verschillend zijn en gaat iedere node elk apart een adres aanvragen.
Deze functie heeft geen input of return waarden.
 Set_slave(void)
Deze functie zal de node instellen als een slave module zodat hij klaar
staat om opdrachten te ontvangen vanuit het systeemhoofd. Eenmaal dit
gebeurd is zal het programma in een oneindige lus terecht komen en
wachten totdat hij opgeroepen wordt.
 Ook alle interrupt functies zijn in deze file aanwezig, er zijn functies voor
het verzenden en ontvangen van de data, maar ook functie voor de timer
en de ADC.
 Send_tx_rx(int send_adress, int tx_bytes, int rx_bytes)
Met deze functie kan men maximaal 10 bytes verzenden naar een
specifieke node. De bytes die verzonden moeten worden moeten eerst in
de zendbuffer geplaatst worden. Daarna voert men deze functie uit, als
input variabelen moet men het adres, het aantal bytes dat men wil
verzenden en het aantal bytes dat men wil ontvangen opgeven. De
ontvangen bytes zullen in de ontvangstbuffer worden opgeslagen. En
kunnen daarna verwerkt worden.
Deze functie zal gebruikt worden om opdrachten te verzenden naar
andere nodes en om met het systeemhoofd te communiceren.
Led driver file
Deze file heeft functies om de leds van de led driver aan te sturen met een
specifieke kleur en felheid.
Fucnties



Private functies
void init_spi(void);
void reset_data(void);
void send_word(void);
69
Publiek functies
 void set_r_gs(int led,unsigned char value1, unsigned char value2);
 void set_g_gs(int led,unsigned char value1, unsigned char value2);
 void set_b_gs(int led,unsigned char value1, unsigned char value2);
 void set_brigh(int color,unsigned char value);
 void led_on(void);
 void led_off(void);
 void test_led(void);
 void reset_values(void);
Er is een onderscheid gemaakt tussen enkele functies, zo zijn er private en publieke
functies, de private functies mogen niet door de gebruiker opgeroepen worden. Deze
worden gebruikt door de publieke functies. Met de publieke functies kan de gebruiker
alles instellen.
Beschrijving:
Private functies:
 void init_spi(void);
Deze functie zorgt voor de initialisatie van de SPI bus die gebruikt wordt
voor de bediening van de led driver.

void reset_data(void);
Deze functie zorgt ervoor dat de tijdelijke buffer wordt leeg gemaakt.

void send_word(void);
Deze functie zendt alle waarden uit de tijdelijke buffer naar de led driver.
Hierdoor worden de leds ingesteld op de gewenste stand.

Publieke functies:
void set_r_gs(int led,unsigned char value1, unsigned char value2);
Met deze functie kan men de rode kleur instellen van een bepaalde led
aangesloten op de leddriver. De eerste inputvariabele is de led nummer,
op de ontwikkelde node ligt dit getal tussen 0 en 3. De twee volgende
getallen stellen de hoeveelheid kleur voor, dit is een 16 bits getal. In
value1 komen de hoogste 8 bits van het 16 bits getal. En in value2 komen
de laagste 8 bits van het getal.

void set_g_gs(int led,unsigned char value1, unsigned char value2);
Zelfde functie als de vorige maar voor de groene kleur.

void set_b_gs(int led,unsigned char value1, unsigned char value2);
Zelfde functie als de vorige maar voor de blauwe kleur.

void set_brigh(int color,unsigned char value);
70
Deze functie stelt de felheid van de leds in, hiermee kan men de leds
dimmen.
13.1.4

void led_on(void);
Deze functie laat de leds branden met hun ingestelde waarden.

void led_off(void);
Hiermee kan men alle leds uitzetten, met de vorige functie kan men alle
leds weer aanleggen. De instellingen blijven opgeslagen op de
microcontroller.

void test_led(void);
Dit is een testfunctie, hiermee kan men kijken of alle kleuren van de leds
nog werken.

void reset_values(void);
Deze functie zorgt ervoor dat de leds helemaal uit staan. En dat de vorige
waarden verwijderd worden.
Accelerometer
Deze code moet wordt opgebouwd nadat deze tekst geschreven is. De details van
deze code zullen aangebracht worden in de code zelf.
13.1.5
Geheugen node
Deze code is wegens tijdsgebrek nog niet uitgewerkt. De fatfs code staat wel op de
cd en is afkomstig van http://elm-chan.org Op deze site staat ook meer informatie
over hoe men de module moet gebruiken en welke bijkomende functies men moet
voorzien.
71
14 Applicatie
14.1
Onderdelen programma
Een android applicatie bestaat uit verschillende bestanden. Zo zijn er java bestanden,
hierin wordt de werking van de applicatie beschreven. Er zijn ook layout bestanden,
dit zijn bestanden waarin de grafische opbouw van de schermen in wordt beschreven.
Figuur 54: Bestandsindeling android applicatie
Tussen deze 2 grote groepen bestaat er een wisselwerking, in de layout files plaatst
men alle schuifbalken, tekstvlakken,… Om deze te kunnen bereiken uit de java file
moet men deze declareren en opzoeken. Dit doet men door volgende regel toe te
passen:
Button nfcbutton = (Button)findViewById(R.id.nfc);
Met deze regel declareert men een knop in de java code die men linkt aan een knop die
in de layout file aanwezig is met de naam “nfc”. Eenmaal dit gebeurt is kan men de
72
knop gebruiken als een input. Men moet dezelfde werkwijze toepassen voor de andere
objecten die men wil gebruiken.
Een ander belangrijk bestand is het android manifest (AndroidManifest.xml), in deze
file staan alle toestemmingen dat de applicatie nodig heeft, maar ook alle services dat
de applicatie zal opstarten, ook alle onderdelen van de applicatie zijn hier aanwezig.
14.2
Node maken
Als men een nieuwe node heeft gemaakt en hiervoor C code heeft opgebouwd, moet
men natuurlijk nog de applicatie aanpassen zodat deze ook kan werken met de nieuwe
node. Eerst en vooral gaan we beginnen met het aanmaken van een klasse voor de
node. Hierin wordt de code geschreven om de nieuwe node te bedienen. Men moet er
wel rekening mee houden dat men maximaal 10 bytes mag doorzenden in één keer.
Omdat de werking van het systeem zo is opgebouwd.
In de map res\layout maak je een nieuw XML bestand aan met dezelfde naam als de
klasse. In dit bestand wordt de layout van het scherm gedefinieerd. Men kan ook
meerdere schermen definiëren indien dit nodig is om de node goed te kunnen instellen.
In het hoofdmenu moet men ook de nieuwe node definiëren. Dit is noodzakelijk
anders kan het hoofdmenu de juiste naam niet weergeven van de node. En weet hij ook
niet welke menu hij moet oproepen. Verdere uitleg op welke plaatsen men code moet
toevoegen of verwijderen staat bij de code van het hoofdmenu.
14.3
Code
Ieder onderdeel van de applicatie is onderverdeeld in een verschillend bestand, zo heb
je het keuzemenu, het bluetooth menu, de bluetooth service, de NFC service,het
hoofdmenu, de led driver en de accelerometer. Zo kan men ieder scherm en de
functionaliteit van ieder scherm programmeren zonder het overzicht te verliezen.
14.3.1
Keuzemenu:
In het keuze menu wordt de verbinding naar het systeem gekozen. Als men op de
gepaste knop klikt gaat er een “intent” uigevoerd worden. Deze intent zal ervoor
zorgen dat men naar het juiste scherm wordt gebracht, zo zal als men bluetooth kiest
de volgende intent gebruikt worden:
Intent intent = new Intent(getBaseContext(),Bluetooth_menu.class);
Deze intent zal de bluetooth_menu klasse oproepen en de code beginnen uitvoeren
die in de onCreate() functie staat.
73
Als er op de knop NFC geklikt wordt zal in plaats van de bluetooth_menu klasse de
NFC_menu klasse geopend worden. De intent ziet er als volgt uit:
Intent intent = new Intent(getBaseContext(),NFC_menu.class);
De NFC_menu klasse zal ontwikkeld worden nadat deze tekst is opgesteld, deze
klasse zal nu niet besproken worden.
14.3.2
Bluetooth menu:
Als het bluetooth menu wordt opgeroepen zal eerst de code in de functie onCreate
uitgevoerd worden, in deze functie wordt het scherm ingesteld met alle knoppen en
tekst. Maar ook alle onClickListeners worden ingesteld. Dit zijn processen die
reageren als een knop wordt ingedrukt. Zo kan men reageren als de gebruiker een
knop indrukt. De tegenhanger van de onCreeate functie is de onDestroy functie.
Deze functie wordt automatisch opgeroepen als het bluetooth_menu scherm wordt
afgesloten.
Voor het communiceren met de service zijn er enkele functies opgesteld:
 onServiceConnected
 onServiceDisconnected
 doBindService()
 doUnBindService()
 sendMessageToService(int command, int valuetosend)
Beschrijving:
 onServiceConnected
Deze functie zal opgeroepen worden om het bluetooth_menu aan te
melden bij de service. Zo weet de service dat er iemand misschien met
hem wil communiceren. Indien dit niet gebeurt zal de service afgesloten
worden door het oprating systeem.
 onServiceDisconnected
Hiermee zal men zich afmelden van de service, zo weet hij dat het
bluetooth menu hem niet meer nodig heeft.
 doBindService()
Deze functie zal een kanaal opzetten tussen het bluetooth menu en de
bluetooth service. Dit kanaal is nodig om te kunnen communiceren met
elkaar.
 doUnBindService()
Deze functie zal het communicatiekanaal terug afbreken, eenmaal dit
gebeurt is kan men niet meer communiceren met de service.
 sendMessageToService(int command, int valuetosend)
Hiermee kan men data zenden naar de service. Men moet eerst het
commando opgeven, met dit commando weet de service wat hij met de
doorgezonden data moet doen.
74
Tabel 5: Commando's van de bluetooth service
Commando
nummer
Commando naam
MSG_REGISTER_
1 CLIENT
MSG_UNREGISTE
2 R_CLIENT
MSG_SET_INT_V
3 ALUE
MSG_SET_STRIN
4 G_VALUE
5 MSG_SET_DEV
Beschrijving
registreert een client, komt overeen
met onServiceConnected functie
verwijdert een client, komt overeen
met onServiceDisconnected
struurt de data door naar het
systeem
stuurt een string door naar het
systeem
wordt gebruikt om met het juiste
toestel verbinding te maken
MSG_DISCONNE
6 CT
zorgt ervoor dat de bluetooth
verbing wordt verbroken
GET_DEVICE_LIS gaat de device lijst ophalen van het
7 T
systeemhoofd
Deze functies zijn ook aanwezig in alle menus waar er moet gecommuniceerd
worden met het systeem en dus ook met de service. Het zijn altijd dezelfde functies
met dezelfde functionaliteiten.
Er is ook een “incomming message handler voorzien” deze zal alle ontvangen data
van de service naar het menu verwerken.
14.3.3
Bluetooth service
Deze zal de communicatie verzorgen tussen de smartphone en het systeem. Er zijn
daarvoor functies geïmplementeerd om de communicatie te vergemakkelijken.
Functies:
 findBT()
 openBT()
 beginListenForData()
 sendData(int in)
 closeBT()
75
Beschrijving:





14.3.4
findBT()
Deze functie zal de bluetoothmodule in de smartphone oproepen en
initialiseren zodat deze klaar staat om gebruikt te worden.
openBT()
Met openBT zal er een bluetooth connectie gemaakt worden met het
gekozen apparaat. Als de connectie geslaagd is zal de
beginListenForData functie uitgevoerd worden.
beginListenForData()
Hier wordt een proces opgestart dat zal wachten totdat er data ontvangen
worden. Als er data ontvangen worden zullen deze worden doorgestuurd
naar het actieve scherm.
sendData(int in)
Deze functie zendt de input waarde naar het systeem. Dit gebeurt enkel
als er connectie is, indien er geen is wordt er niets ondernomen.
closeBT()
Deze functie zal de volledige bluetooth verbinding afsluiten.
Hoofdmenu
Het hoofdmenu is de brug naar de verschillende menu’s. Ook het hoofdmenu moet
kunnen communiceren met het systeem, het is dus noodzakelijk dat hij moet kunnen
communiceren met de service. Dus zullen ook hier alle service functies aanwezig
zijn. Er zijn ook functies die de lijst met aangesloten nodes gaan ophalen en
weergeven op het scherm. Als men een node kiest gaat de applicatie op zoek naar het
soort node dat is aangesloten, en zal dan het gepaste menu openen.
14.3.5
Led driver menu
In dit bestand zijn ook de service functies van het bluetooth menu aanwezig. Zo kan
het leddriver menu communiceren met het systeem. Voor iedere schuifbalk is er een
changelistener ingesteld, wanneer de gebruiker iets veranderd aan een schuifbalk zal
de applicatie dit direct doorsturen naar de node. Dit gebeurt door de functie
send_data op te roepen, deze zet alle data uit de buffers in de goede volgorde voor de
microcontroller. En stuurt deze één voor één door naar het systeem.
14.3.6
Accelerometer menu
Deze menu moet nog worden opgebouwd, dit werd gedaan nadat de tekst werd
geschreven. Doordat de opbouw van deze code nog niet volledig was opgesteld
wordt deze hier niet besproken. De uitleg over de menu is wel te vinden in de code
zelf.
76
15 Testen
15.1
Test automatische adressering
In deze test wordt de automatische adressering gecontroleerd. Bij deze test is het
buscontrole systeem nog niet geïmplementeerd. Er wordt wel een random getal
gecreëerd deze zal gebruikt worden in een timer om een random opstarttijd te
bekomen. Als dit niet zo is zal iedere node op het zelfde moment zijn adres gaan
ophalen waardoor het systeem vastloopt.
Benodigdheden voor deze test

Code in de map adres test

Systeemhoofd + hub

Één node

Batterij + voeding

Oscilloscoop met bus uitlezing (hier analog discovery scoop)
Resultaten:
Figuur 55: Data overdracht adres aanvraag
Als we de resultaten bekijken zie we dat de node contact opneemt met het
systeemhoofd op adres 0x01h. Hij geeft eerst zijn systeemcode, daarna zijn node
identificatie nummer. Hierna maakt hij een restart omdat hij nu data moet ophalen
vanuit het systeemhoofd, zo haalt hij zijn adres op en een bijkomend byte op, deze
byte wordt momenteel niet gebruikt. Daarna stelt hij zijn adres in, en wacht totdat hij
een opdracht ontvangt.
15.2
Meerdere adresaanvragen
Deze test is grotendeels hetzelfde maar in plaats van één node zijn er hier meerdere
aangesloten. Doordat het aanvraag systeem nog niet is opgebouwd is er een
willekeurige opstarttijd ingebouwd. Hierdoor kan het systeemhoofd de aanvragen
verwerken.
Benodigdheden:

Code in de map adres test

Systeemhoofd + hub

3 nodes

Batterij + voeding

Oscilloscoop met bus uitlezing (hier analog discovery scoop)
77
Resultaten:
Figuur 56: Adresaanvraag meerdere nodes
Net zoals in de eerste test zien we opnieuw het zenden naar het systeemhoofd en het
ontvangen van het adres. Door de random opstarttijd komen de drie aanvragen niet op
hetzelfde moment. De aanvragen bestaan uit hetzelfde aantal bits die worden
overgezonden. Maar toch is er een groot verschil in tijd tussen de drie verschillende
nodes. Tussen de tweede en de derde is er een tijdsverschil van ongeveer 100µs. Dit
verschil is er omdat de klok van de microcontrollers wordt gemaakt door een RC
circuit. Hierdoor is er een groter verschil tussen de frequenties van het kloksignaal.
Als er een kristal gebruikt werd zou er minder verschil geweest zijn. Maar als men een
kristal bijplaatst zou de kostprijs van de node stijgen.
Omdat het verschil in de opstarttijden soms te klein is, is het systeemhoofd nog niet
klaar om een volgende adresaanvraag af te handelen. Hierdoor loopt het systeem soms
vast. Dit probleem wordt opgelost van zodra het aanvraag systeem is ingebouwd.
78
Rendementsmeting van het oplaadsysteem
In dit stuk gaan we dieper in op het rendement van het oplaadsysteem en wordt dit
ook eens vergeleken met een standaard oplaadsysteem.
Benodigdheden:
 QI zender
 QI ontvanger + voedingsmodule
 4 multimeters
 Spanningsbron
Resultaten:
Batterijspanning
4,000
3,900
Spanning (V)
3,800
3,700
batterijspanning
3,600
3,500
3,400
2
12
22
32
42
52
62
72
82
92
102
112
122
132
142
152
162
172
182
192
202
212
222
232
15.3
Tijd (min)
Figuur 57: Grafiek batterijspanning
Grafiek… geeft het verloop van de batterijspanning weer. Deze zal in de eerste fase
snel stijgen maar na verloop van tijd zal deze minder snel stijgen omdat de
celspanning bijna bereikt is. De celspanning is normaal 3.7V, als men naar de grafiek
kijkt ziet men dat de spanning hier hoger wordt. Dit komt omdat de eigenlijk
celspanning onbelast ongeveer 4V is. Maar als men de batterij belast is dit 3.7V.
79
Ingangs- en uitgangangsvermogen
3
Vermogen (W)
2,5
2
Pin
1,5
Pout
1
0,5
230
218
206
194
182
170
158
146
134
122
110
98
86
74
62
50
38
26
14
2
0
Tijd (min)
Figuur 58: grafiek in- en uitgangsvermogen
Figuur 59: Grafiek rendement oplaadsysteem
Op deze grafiek zien we het rendement in functie van de tijd, we zien hier dat het
rendement daalt naarmate de batterij meer en meer is opgeladen. Dit komt omdat er
meer energie moet gebruikt worden om de batterij op te laden.
Met deze grafiek kunnen we een vergelijking maken van een normaal oplaad systeem
en het draadloze oplaad systeem. Een normaal oplaad systeem heeft een rendement
van ongeveer 70%. als we kijken naar het rendement van de draadloze oplader zien we
dat dit gemiddeld 44.10% is. Dit wil zeggen dat we ongeveer 25.9% van onze energie
verliezen. Deze verliezen zijn te wijten aan het gebruik van de spoelen. Doordat de
spoel een bepaalde weerstand heeft gaan hier verliezen in optreden, waardoor het
rendement van de schakeling daalt.
80
Figuur 60: Opstelling rendementsmeting
81
15.4
Bussnelheid
Wegens tijdsgebrek is het aanvraag systeem voor de bus niet in de praktijk omgezet.
Om toch een inschatting te maken van de snelheid van de bus werd deze berekend.
Eerst hebben we voor iedere fase berekend hoeveel bits er moeten overgezonden
worden. Daarna is er berekent hoelang iedere fase duurt en welke snelheden het
systeem heeft.
Figuur 61: Simulatie input waarden
In deze simulatie gaan word onderzocht wat de invloed is van het aantal nodes die
een aanvraag plaatsen. Hierbij zal iedere node tien databytes verzenden. Het aantal
nodes met aanvraag zal van 0 tot 50 lopen.
Uit deze simulatie is er een bijkomend eigenschap gekomen, als er maar 1 node een
aanvraag wil indienen moet het systeemhoofd niet wachten totdat 50 aanvragen
ingediend worden. Na een aanvraag start een timer voor een bepaalde tijd. Als de
timer afloopt zal de aanvraagfase beëindigd worden en zal het systeemhoofd
overgaan naar fase 2. Als er nu echter een aanvraag binnenkomt voordat de timer
afloopt zal de timer gereset worden en zal het systeemhoofd weer een tijdje wachten.
In de map simulaties is het Excel bestand te vinden “bussnelheid”. In dit bestand
wordt er gebruik gemaakt van macro’s, standaard staat dit geblokkeerd in Excel.
Men moet dit inschakelen als men deze simulatie wil uitvoeren.
82
Datasnelheid
Datasnelheid (kByts/s)
5,9
5,7
5,5
5,3
Datasnelheid(kByte/s)
5,1
4,9
4,7
4,5
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49
Aantal nodes
Figuur 62: Grafiek datasnelheid
In deze grafiek staat de relatie tussen het aantal nodes en de datasnelheid van het
systeem. Als er weinig nodes zijn is de snelheid trager dan als er meer nodes zijn. Dit
komt omdat er meer overhead is door de aanvraag dan dat er effectieve dataoverdracht
is. Dit is maar een schatting van de datasnelheid, er wordt vanuit gegaan dat de
microcontrollers direct na elkaar beginnen zenden en dat er geen leemtes ontstaan.
In grafiek 63 staat de frequentie van de aanvraagcyclussen. Als er weinig nodes zijn
die willen zenden kan de aanvraagcyclus snel opnieuw starten. Bij 50 nodes komt de
aanvraagcyclus 11 keer per seconde voor. Als er daarentegen maar 1 node wil zenden
is er een frequentie van 476 Hz.
83
Snelheid systeem
500
snelheid systeem (Hz)
Aanvraag frequentie (Hz)
400
300
200
100
0
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49
Aantal nodes
Figuur 63: Grafiek snelheid van het systeem
84
De volgende grafieken stellen het aandeel van de verschillende fazen in de tijd voor.
Percentage fase 1
75
Precentage (%)
65
Percentage fase 1
55
45
35
25
15
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49
Aantal nodes
Figuur 64: Percentage fase 1
Percentage fase 2
90
Percentage (%)
80
70
60
Percentage fase 2
50
40
30
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49
Aantal nodes
Figuur 65: Percentage fase2
Er is te zien dat het aandeel van de aanvraagfase groter is dan het aandeel van de
tweede fase waar nuttige data word overgezonden. Als er één node wil zenden dan is
er een grote overhead om deze ene node te laten zenden. Naarmate er meer willen
zenden dat is de overhead kleiner omdat er veel meer nuttige data worden
overgezonden. Het is dus beter dat er meer nodes aanvragen indienen.
85
16 Demo’s
Er zijn verschillende demo opstellingen gemaakt, deze geven een beeld hoe het systeem
werkt.
Alle software staat in de map demo’s op bijhorende cd, er is ook een film van de werking
terug te vinden in deze map.
16.1
Demo 1: RGB leds aansturen
Benodigdheden:
 Led driver
 Systeemhoofd
 Batterij + voedingsmodule
 Bluetooth module
 Smartphone + applicatie uit map demo 1
 Code voor microcontrollers uit map demo 1
Werkwijze:
Men sluit de led driver aan op het systeemhoofd, samen met de voedingsmodule en
de batterij. Nu gaan de microcontrollers opstarten en zal de led driver zijn adres
krijgen. Dit adres is 0x03h. Nu sluit men de bluetooth module aan op het
systeemhoofd. Het systeem is op dit moment volledig klaar voor gebruik.
De applicatie kan nu opgestart worden, men komt terecht in het menu om de
verbinding te kiezen. Aangezien we daarjuist de bluetooth module aangesloten
hebben klikt men op bluetooth.
De gebruiker komt dan terecht in het bluetooth keuze menu, hier kiest men de
module “HC-06”. Als deze niet in de lijst staat moet men de applicatie afsluiten en
naar de bluetooth instellingen van het apparaat gaan. Daarin moet men het apparaat
“pairen”. Als dit gebeurt is kan men de applicatie terug opstarten en de vorige
stappen doorlopen. Als men op de module geklikt heeft moet men op de knop
“verbinden” klikken, hierna de knop doorgaan.
Nu komt men in het led driver menu, men kan nu iedere led kiezen en deze een
bepaalde kleur geven of alle leds hetzelfde kleur geven. De gebruiker moet steeds op
toepassen klikken, als hij dit niet meer wil doen dan kan hij op de knop “automatisch
toepassen” klikken. Als hij nu een schuifbalk verplaats zal bij het loslaten van de
balk de kleur automatisch ingesteld worden.
86
Figuur 66: Opstelling demo 1
16.2
Demo 2: hoofdmenu + automatische herkenning
Benodigdheden:
 Enkele nodes
 Systeemhoofd
 Batterij + voedingsmodule
 Bluetooth module
 Smartphone + applicatie uit map demo 2
 Code voor microcontrollers uit map demo 2
Deze demo zal de automatische herkenning van de nodes en het hoofdmenu tonen.
Ook het aansluiten van nieuwe nodes op een bestaand systeem wordt hier
weergegeven.
Werkwijze:
Sluit één node en het systeemhoofd aan op de hub module. Sluit nu de
spanningsmodule en batterij aan. Nu hebben we een basissysteem. Sluit eveneens de
bluetooth module aan op het systeemhoofd.
Start nu de applicatie op en klik bluetooth. Kies daarna voor “HC-06” klik op
connect en daarna op doorgaan. Nu komt men in het hoofdmenu. Men ziet nu de
aangesloten node in de lijst staan. Men kan deze node instellen zoals men zelf wil.
87
Als men nu een nieuwe node aansluit, zal deze een adres krijgen. Als de gebruiker nu
op refresh klikt komt de pas aangesloten node tevoorschijn in de lijst. Nu kan men
deze node ook bedienen. Als men nu nog een node aansluit zal deze ook in de lijst
verschijnen en kan men ze bedienen.
Wanneer men één of meerdere nodes zal loskoppelen zullen deze niet meer kunnen
aangestuurd worden. Deze nodes zullen ook niet meer in de lijst getoond.
Figuur 67: Opstelling demo 2
88
17 Verbeteringen en uitbereidingen
Deze thesis is niet volledig af, er kunnen nog verbeteringen en uitbreidingen voor dit systeem
bedacht worden. Hieronder staat een lijst met verbetering en uitbreidingen voor het systeem.




Men kan de snelheid van de bus opdrijven zo kan men sneller data overbrengen. Men
moet wel rekening houden met de capaciteit van de busgeleiders.
Er moeten buffers aan beide zijden van de kabel geplaatst worden. Zo kan men langere
kabels gebruiken. Nu is er maar aan één zijde een buffer geplaatst.
Het energieverbruik van de microcontrollers kan ook nog verminderd worden. Op dit
moment blijven de microcontrollers steeds volledig werken. Met de ingebouwde lowpower modes kan men het energieverbruik beperken door de microcontrollers in een
slaapstand te plaatsen. Als er dan data voor hem aankomen zal hij uit zijn slaapstand
komen en zijn opdracht uitvoeren en terug in slaapstand gaan.
Bijkomende nodes ontwikkelen die kunnen aangesloten worden, zoals drukknoppen,
temperatuursensor, motors,…
89
Bijlage A
Schema’s en print lay-outs

QI-ontvanger

Figuur 68: Schema QI ontvanger
90
Figuur 69: QI ontvanger
Figuur 70: QI ontvanger bottom
91
Figuur 71: QI ontvanger top
92

Voedingsmodule
Figuur 72: Schema voedingsmodule
Figuur 73: Voedingsmodule
93
Figuur 74: Voedingsmodule bottom
Figuur 75: Voedingsmodule top
94

Systeemhoofd
Figuur 76: Schema systeemhoofd
Figuur 77: Systeemhoofd
95
Figuur 78: Systeemhoofd bottom
Figuur 79: systeemhoofd top
96

Hub module
Figuur 80: Schema hub module
Figuur 81: Hub module
97
Figuur 82: Hub module bottom
Figuur 83: Hub module top
98

Led driver
Figuur 84: Schema led driver
99
Figuur 85: Led driver
Figuur 86: Led driver bottom
Figuur 87: Led driver top
100

Accelerometer
Figuur 88: Schema Accelerometer
101
Figuur 89: Accelerometer bottom
Figuur 90: Accelerometer top
102
Figuur 91: Accelerometer
103
Figuurlijst
Figuur 1: Systeem architectuur ............................................................................................................. 12
Figuur 2: Aansluiten sensoren denkpiste 1 ........................................................................................... 14
Figuur 3: Aansluiten van de nodes ........................................................................................................ 15
Figuur 4: Onderdelen systeemhoofd..................................................................................................... 17
Figuur 5: Onderdelen voedingsmodule ................................................................................................. 18
Figuur 6: Onderdelen van het systeem ................................................................................................. 21
Figuur 7: LIN netwerk opbouw[7] ......................................................................................................... 23
Figuur 8: LIN frame[7] ........................................................................................................................... 23
Figuur 9: SPI opbouw[8] ........................................................................................................................ 24
Figuur 10: SPI schuifregister[9] ............................................................................................................. 25
Figuur 11: UART verbinding................................................................................................................... 26
Figuur 12: UART verbinding met meerdere slaves[12] ......................................................................... 27
Figuur 13: I²C opbouw [13] .................................................................................................................... 27
Figuur 14: I²C data overdracht .............................................................................................................. 28
Figuur 15: Logo wireless power consortium ......................................................................................... 30
Figuur 16: Olimex jtag tiny programmer [21]........................................................................................ 32
Figuur 17: Bluetooth module[22] .......................................................................................................... 39
Figuur 18: Communicatie smartphone van/naar systeem .................................................................... 39
Figuur 19: NFC module[23] ................................................................................................................... 40
Figuur 20: Prioriteitsniveau's ................................................................................................................. 41
Figuur 21: Aanvraag en verwerkingsfase .............................................................................................. 42
Figuur 22: Richting van de dataoverdracht ........................................................................................... 42
Figuur 23: Adresaanvraag...................................................................................................................... 43
Figuur 24: Bus toelating......................................................................................................................... 43
Figuur 25: Adres ophalen ...................................................................................................................... 44
Figuur 26: Zend aanvraag ...................................................................................................................... 45
Figuur 27: Zend toestemming ............................................................................................................... 45
Figuur 28: Data bytes ............................................................................................................................ 45
Figuur 29: Data bytes led instellen ........................................................................................................ 46
Figuur 30: Onderdelen flash geheugen[24]........................................................................................... 46
Figuur 31: Dataframe van smartphone naar systeem........................................................................... 47
Figuur 32: Keuzemenu ........................................................................................................................... 48
Figuur 33: Bluetooth menu ................................................................................................................... 48
Figuur 34: Hoofdmenu .......................................................................................................................... 49
Figuur 35: Led driver menu ................................................................................................................... 50
Figuur 36: Voedingsmodule................................................................................................................... 52
Figuur 37: QI ontvanger......................................................................................................................... 52
Figuur 38: Aansluitingen voeidingsmodule ........................................................................................... 53
Figuur 39: Aansluitingen systeemhoofd ................................................................................................ 54
Figuur 40: Systeemhoofd en hub module ............................................................................................. 55
Figuur 41: Aansluitingen hub module ................................................................................................... 56
Figuur 42: Aansluitingen led driver ....................................................................................................... 56
Figuur 43: Aansluitingen accelerometer ............................................................................................... 57
Figuur 44: Programmeer aansluiting[25] .............................................................................................. 58
104
Figuur 45: Programmeer connector ...................................................................................................... 58
Figuur 46: IAR opties menu ................................................................................................................... 59
Figuur 47: IAR opties menu, keuze microcontroller .............................................................................. 60
Figuur 48: IAR opties menu, driver keuze ............................................................................................. 60
Figuur 49: IAR opties menu, keuze debugger ....................................................................................... 61
Figuur 50: Eclipse opties menu.............................................................................................................. 62
Figuur 51: Eclipse opties menu, target keuze ....................................................................................... 63
Figuur 52: Eclipse opties menu, apparaat keuze ................................................................................... 64
Figuur 53: Opbouw van een functie in een node .................................................................................. 65
Figuur 54: Bestandsindeling android applicatie .................................................................................... 72
Figuur 55: Data overdracht adres aanvraag .......................................................................................... 77
Figuur 56: Adresaanvraag meerdere nodes .......................................................................................... 78
Figuur 57: Grafiek batterijspanning....................................................................................................... 79
Figuur 58: grafiek in- en uitgangsvermogen.......................................................................................... 80
Figuur 59: Grafiek rendement oplaadsysteem...................................................................................... 80
Figuur 60: Opstelling rendementsmeting ............................................................................................. 81
Figuur 61: Simulatie input waarden ...................................................................................................... 82
Figuur 62: Grafiek datasnelheid ............................................................................................................ 83
Figuur 63: Grafiek snelheid van het systeem ........................................................................................ 84
Figuur 64: Percentage fase 1 ................................................................................................................. 85
Figuur 65: Percentage fase2 .................................................................................................................. 85
Figuur 66: Opstelling demo 1 ................................................................................................................ 87
Figuur 67: Opstelling demo 2 ................................................................................................................ 88
Figuur 68: Schema QI ontvanger ........................................................................................................... 90
Figuur 69: QI ontvanger......................................................................................................................... 91
Figuur 70: QI ontvanger bottom............................................................................................................ 91
Figuur 71: QI ontvanger top .................................................................................................................. 92
Figuur 72: Schema voedingsmodule ..................................................................................................... 93
Figuur 73: Voedingsmodule................................................................................................................... 93
Figuur 74: Voedingsmodule bottom ..................................................................................................... 94
Figuur 75: Voedingsmodule top ............................................................................................................ 94
Figuur 76: Schema systeemhoofd ......................................................................................................... 95
Figuur 77: Systeemhoofd ...................................................................................................................... 95
Figuur 78: Systeemhoofd bottom ......................................................................................................... 96
Figuur 79: systeemhoofd top ................................................................................................................ 96
Figuur 80: Schema hub module............................................................................................................. 97
Figuur 81: Hub module .......................................................................................................................... 97
Figuur 82: Hub module bottom ............................................................................................................. 98
Figuur 83: Hub module top ................................................................................................................... 98
Figuur 84: Schema led driver ................................................................................................................. 99
Figuur 85: Led driver............................................................................................................................ 100
Figuur 86: Led driver bottom .............................................................................................................. 100
Figuur 87: Led driver top ..................................................................................................................... 100
Figuur 88: Schema Accelerometer ...................................................................................................... 101
Figuur 89: Accelerometer bottom ....................................................................................................... 102
105
Figuur 90: Accelerometer top ............................................................................................................. 102
Figuur 91: Accelerometer .................................................................................................................... 103
Tabellijst
Tabel 1: Ondersteunde bussystemen [1-4] ........................................................................................... 22
Tabel 2: Soorten batterijen[15-18]........................................................................................................ 29
Tabel 3: Node identificatienummers (NIN) ........................................................................................... 44
Tabel 4: Aansluitingen QI ontvanger ..................................................................................................... 53
Tabel 5: Commando's van de bluetooth service ................................................................................... 75
106
Bibliografie
[1] Texas Instruments, Texas Instruments, 1995-2014. [Online]. [Geopend Januari - Juni 2014].
[2] Atmel Corporation, „Atmel,” 2014. [Online]. Available:
http://www.atmel.com/products/microcontrollers/avr/default.aspx. [Geopend Januari 2014].
[3] Silicon Laboratories Inc., „ Silicon Laboratories Inc.,” 2014. [Online]. Available:
http://www.silabs.com/products/mcu/Pages/8-Bit-Microcontrollers.aspx. [Geopend Januari
2014].
[4] NXP Semiconductors, „ NXP Semiconductors,” 2006-2014. [Online]. Available:
http://www.nxp.com/parametrics/50809/#/p=1,s=0,f=,c=,rpp=,fs=0,sc=,so=,es=. [Geopend
Januari 2014].
[5] National Instruments Corporation, „National Instruments Corporation,” 2014. [Online].
Available: http://www.ni.com/white-paper/9733/en/. [Geopend Januari 2014].
[6] „John' s Specifications,” 2006-2008. [Online]. Available:
http://www.specifications.nl/lin/lin_NL.php. [Geopend Januari 2014].
[7] E. E. Herald, „Totally EEHerald,” 2006. [Online]. Available:
http://www.eeherald.com/section/design-guide/esmod10.html. [Geopend Januari 2014].
[8] Total Phase, Inc., „Total Phase,” Total Phase, Inc., 2014. [Online]. Available:
http://www.totalphase.com/support/articles/200349236-SPI-Background. [Geopend Februari
2014].
[9] Wikipedia, „Serial Peripheral Interface Bus,” Wikipedia, 21 Mei 2014. [Online]. Available:
http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus. [Geopend Februari 2014].
[10] Wikipedia, „Universal asynchronous receiver/transmitter,” Wikipedia, 14 Mei 2014. [Online].
Available: http://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter.
[Geopend Februari 2014].
[11] L. Bies, „Seriële UART informatie,” Februari 2013. [Online]. Available:
http://www.lammertbies.nl/comm/info/nl_serial-uart.html. [Geopend Februari 2014].
[12] Mosaic Industries, „Mosaic documentation web,” Mosaic Industries, [Online]. Available:
http://www.mosaic-industries.com/embedded-systems/gui-user-interface/qvga-lcdtouchscreen/instrument-control/spi-rs232-serial-rs485-protocol-uart-usart. [Geopend Februari
2014].
[13] Wikipedia, „I²C,” Wikipedia, 27 Mei 2014. [Online]. Available:
http://en.wikipedia.org/wiki/I%C2%B2C. [Geopend Februari 2014].
107
[14] „Introduction to I²C and SPI protocols,” Byte paradigm, 2014. [Online]. Available:
http://www.byteparadigm.com/applications/introduction-to-i2c-and-spi-protocols/. [Geopend
Februari 2014].
[15] „Li-ion vs. NiCad,” Diffen, [Online]. Available: http://www.diffen.com/difference/Liion_vs_NiCad. [Geopend Oktober 2013].
[16] Wikipedia, „Nickel–metal hydride battery,” Wikipedia, 9 April 2014. [Online]. Available:
http://en.wikipedia.org/wiki/Nickel%E2%80%93metal_hydride_battery. [Geopend Oktober
2014].
[17] Wikipedia, „Lithium-ion battery,” Wikipedia, 27 Mei 2014. [Online]. Available:
http://en.wikipedia.org/wiki/Lithium-ion_battery. [Geopend Oktober 2013].
[18] „Lithium polymer battery,” 21 Mei 2014. [Online]. Available:
http://en.wikipedia.org/wiki/Lithium_polymer_battery. [Geopend Oktober 2013].
[19] Wireless power consortium, „Wireless power consortium,” Wireless power consortium, [Online].
Available: http://www.wirelesspowerconsortium.com/. [Geopend December 2013].
[20] W. p. consortium, System description wireless power transfer, Volume 1, part 1 Version 1.1.2,
Wireless power consortium, June 2013.
[21] RobotItaly, „AVR-USB-JTAG,” 2014. [Online]. Available: http://www.robot-italy.com/en/avr-usbjtag-optoisolated-usb-jtag-dongle-for-programming-and-em.html. [Geopend 2014].
[22] Dealextreme, „DX,” 2014. [Online]. Available: http://www.dx.com/p/jy-mcu-arduino-bluetoothwireless-serial-port-module-104299#.U4X9Q3J_s09. [Geopend 2014].
[23] Dealextreme, „DX,” 2014. [Online]. Available: http://www.dx.com/p/13-56mhz-nfc-rfid-shieldmodule-pn532-for-arduino-iso14443-blue-233152#.U4X9jHJ_s09. [Geopend 2014].
[24] T. Instruments, MSP430x2xx Family User's Guide, Texas Instruments, Juli 2013.
[25] T. Instruments, MSP430 Hardware Tools User's Guide, Texas Instruments, September 2013.
108
109