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
© Copyright 2024 ExpyDoc