Scriptie ingediend tot het behalen van de graad van PROFESSIONELE BACHELOR IN DE ELEKTRONICA-ICT
Multi-touch hardware board Nathan Dufour en Berthold Cooreman bachelor elektronica-ICT academiejaar 2010-2011 Interne promotor: Marc Smets,Jeroen Doggen
Dankwoord
Omdat we nooit alles zelf kunnen weten of doen hebben we hulp en informatie gehad van andere mensen. Deze zouden we in dit stuk graag bedanken. Onze promotor Marc Smets wensen wij te bedanken omdat hij de administratie omtrent onze bestellingen in orde heeft gebracht. Ook omdat hij de tijd nam voor het nalezen van onze scriptie. En tevens onze promotor Jeroen Doggen wensen wij te bedanken voor het nalezen van onze scriptie en ons te helpen bij vragen. Tevens wensen we nog iedereen te bedanken die we niet hebben vermeld maar toch een bijdrage hebben geleverd aan onze bachelorproef. Aan allen, bedankt voor uw hulp en tijd Antwerpen, juni 2011 Nathan Dufour en Berthold Cooreman
i
Abstract Het doel van deze bachelorproef is het ontwikkelen van een goedkoper en dunner multi-touch systeem, om in de lagere scholen op een interactieve en speelse manier de leerlingen iets bij te brengen. Ons deel van dit project is het maken van de hardware. Voor de realisatie van dit project is er afstand genomen van het systeem dat werkt met de beamer. Er is gezocht naar een systeem om een actieve backlight te maken, die detecteert en schijnt. Dit systeem zal onder een LCD-plaat van een PC-scherm worden gemonteerd.
ii
Inhoudsopgave Dankwoord
i
Abstract
ii
1 Inleiding 1.1 Globale schets bachelorproef . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Probleemstelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Brainstorm Sessie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 1 1 2
2 Multi-Touch Technieken 2.1 Capacitieve Touch . . . . . . . . 2.2 Diffused Illumination . . . . . . . 2.3 Frustrate Total Internal Reflection 2.4 Surface Acoustic Wave . . . . . . 2.5 Zero Touch . . . . . . . . . . . . 2.6 “ARTESIS"Touch . . . . . . . . 2.6.1 Waarom? . . . . . . . . . 2.6.2 Werking . . . . . . . . .
. . . . . . . .
3 3 5 7 9 11 13 13 13
3 Software 3.1 Controller naar Computer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 TUIO naar Windows 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15 16 16
4 Proof of Concept Fase 4.1 Het Concept . . . . . . . 4.2 P.O.C ontwikkeling . . . . 4.3 Werking bordje . . . . . . 4.4 Uitleg werking code . . . 4.5 Koppeling naar computer
. . . . .
17 17 19 22 23 28
5 Finale Versie 5.1 Benodigdheden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Detectie Board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29 29 29
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
iii
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . . . .
iv
INHOUDSOPGAVE
5.3
5.4 5.5 5.6 5.7
5.2.1 Detectie Board Werking . 5.2.2 Detectie Board Schema . 5.2.3 Detectie Board Print . . . Step-up converter + Driver Print 5.3.1 Step-up Werking . . . . . 5.3.2 Step-up Schema . . . . . 5.3.3 Driver Werking . . . . . . Controller bordje . . . . . . . . Software . . . . . . . . . . . . . Opbouw . . . . . . . . . . . . . Praktijk Test . . . . . . . . . . .
6 Conclusie
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
29 30 32 33 33 33 34 35 35 36 38 39
Lijst van figuren 2.1 2.2 2.3 2.4 2.5 2.6
Verklarende werking Capacitive Touch . . . Verklarende werking Diffused Illumination . Verklarende werking Frustrated Total Internal Verklarende werking SAW . . . . . . . . . . Verklarende werking Zero Touch . . . . . . Schema Artesis Touch . . . . . . . . . . . .
. . . . . .
4 6 7 9 11 13
3.1
Blokschema Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11
Schema van de proof of concept . . . De gebruikte Arduino . . . . . . . . . Het detectie schema . . . . . . . . . . Het FPGA bordje . . . . . . . . . . . Het Olimex bordje . . . . . . . . . . . De testprintplaat . . . . . . . . . . . . Blokschema van de code . . . . . . . . Blokschema van de functie “Charge” . Blokschema van de functie “Discharge” Blokschema van de functie “Shine” . . Blokschema van de functie “Check” . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
17 18 19 21 22 23 24 25 26 27 28
5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8
Schema dubbele matrix . . . . . Schema witte LEDs . . . . . . . Printplaat ontwerp detectie board Schema Step Up Convertor . . . Schema Driver . . . . . . . . . . Print Driver . . . . . . . . . . . De gebruikte Arduino . . . . . . 3D Render finale versie . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
30 31 32 33 34 34 35 37
. . . . . . . . . . . . . . . . . . . . . . .
v
. . . . . . . . . . . . Reflection . . . . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
Hoofdstuk 1 Inleiding 1.1
Globale schets bachelorproef
Ons doel voor deze bachelorproef is het ontwerpen en realiseren van een multi-touch toestel voor een lagere school omgeving. Wij ontwerpen de hardware voor dit toestel en zorgen voor software voor de communicatie met de computer. Hierbij gaan we kijken naar huidige technieken, de kostprijs van deze en dat deze realiseerbaar zijn met het budget. De applicaties voor dit systeem worden door een andere groep gerealiseerd. Ons doel is dus het realiseren van een toestel waarop men enkel de software moet zetten en direct kan beginnen werken.
1.2
Probleemstelling
We hebben diverse factoren waar we rekening mee moeten houden zoals een gelimiteerd budget, innovatie in het ontwerp, degelijkheid van de hardware (kan tegen een stootje), gevoeligheid van detectie, koppeling naar computer. Hierbij zal dus tussen de verschillende factoren een compromis gezocht moeten worden waardoor we een werkend systeem kunnen bekomen binnen vooropgestelde eisen.
1
HOOFDSTUK 1. INLEIDING
1.3
2
Brainstorm Sessie
We zijn vertrokken met het idee om een dun en handelbaar multi-touch systeem te maken. Eén van de eerste ideeën was om met een beamer te werken. Voor dit systeem zou er nog een lens nodig zijn welke binnen budget paste. Omdat het voorgaande idee te duur was is er gedacht aan een systeem te ontwikkelen op basis van een LCD-scherm en daar boven een kader te zetten met aan 2 kanten IR-zenders en aan de overstaande zijdes IR-ontvangers te plaatsen, zoals uitgelegd in sectie 2.5 op pagina 11. Het probleem is dat je geen volwaardig multi-touch systeem kan bekomen. Sommige bewegingen niet zullen gedetecteerd worden om dat er al iets wordt waargenomen. Dan is het idee gekomen van een PC-scherm te demonteren en enkel de LCD-plaat en de bijhorende driver te gebruiken en LEDs als sensor te gebruiken. De LEDs dienen als backlight en als sensor. Het idee om LEDs als sensor te gebruiken is gekomen van een soortgelijk eindwerk [11]. In hoofdstuk 2 hebben we verschillende technieken besproken en overwogen of ze haalbaar waren voor ons project.
Hoofdstuk 2 Multi-Touch Technieken Omdat er meerdere multi-touch technieken zijn en iedere techniek special voor en nadelen heeft. Gaan wij in dit hoofdstuk de meest gebruikte uitleggen zodat we kunnen kijken welke techniek het meest geschikt is. Hierbij zal de werking maar ook de voor- en nadelen van de technieken worden uitgelegd. Deze technologieën veranderen nog steeds en kunnen er dus binnen enkele jaren compleet anders uitzien.
2.1
Capacitieve Touch
Met deze technologie word er op een isolator zoals glas een transparante (substraat) geleidende coating aangebracht zoals indium tin oxide(In2 O3 ). Als men dit oppervlak aanraakt zal er een verandering optreden in het electrostatisch veld van dit oppervlak (omdat de menselijke huid als geleider werkt). Deze veranderingen kunnen gemeten worden door een verandering in capaciteit. Door deze capaciteitgegevens naar een interne controller te sturen worden de aanraakpunten bepaald. Eén van de bekendste producten met een capacitief multi-touch display is de iPhone van Apple[3].
3
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
Figuur 2.1: Verklarende werking Capacitive Touch Voordelen • Betere verwerking van aanrakingen in vergelijking met andere technieken; • Detectie enkel mogelijk vanr geleidende materialen (meestal menselijke vinger). Nadelen • Hoge kostprijs; • Minder accuraat in vergelijking met resistieve schermen.
4
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
2.2
5
Diffused Illumination
Diffused Illumination (DI) is gebaseerd op de techniek dat een wisselend contrast tussen de vinger (aanraakpunt) en het scherm als detectie dient. Er wordt infrarood licht (IR) geprojecteerd op het aanraakvlak via boven of onderkant. Daarom kan men dus Diffused Illumination onderverdelen in twee categoriëen namelijk : • Front Diffused Illumination Hierbij word de infraroodverlichting langs boven erop geprojecteerd. • Rear Diffused Illumination Hierbij word de infraroodverlichting langs onder erop geprojecteerd. Een diffuser word op de boven- of onderkant van het aanraakvlak geplaatst. Wanneer een object op het aanraakvlak komt dan zal er meer infraroodlicht gereflecteerd worden wat kan worden opgevangen door die camera. De diffuser zorgt ervoor dat het infrarood licht beter verdeelt word, zodat er bij aanraking een duidelijker punt ontstaat. Bij Frond Diffused Illumination zal er juist minder licht gereflecteerd worden. Deze camera vangt het gereflecteerde infraroodlicht op en stuurt deze informatie door naar de tracking software. Deze software vertaalt deze reflectie naar coördinaten voor multi-touch invoer. Op deze wiki [8] en de bijhorende community is veel informatie te vinden over Diffused Illumination.
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
Figuur 2.2: Verklarende werking Diffused Illumination Voordelen • Kan ieder transparant oppervlak gebruiken als beschermplaat . • Kan vingers detecteren die een paar millimeter boven het scherm “zweven". • Kan objecten herkennen. Nadelen • Gevoelig aan omgevingslicht (voornamelijk bronnen van infrarood licht zoals de zon). • Diffuser vereist. • Callibratie vereist bij ingebruikstelling en verplaatsing. • Grotere kans voor foutieve detecties.
6
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
2.3
7
Frustrate Total Internal Reflection
Bij FTIR (Frustrated Total Internal Reflection)[20] wordt het computerbeeld door middel van een projector geprojecteerd op een scherm via boven- of onderkant. Dit scherm bestaat vaak uit een doorzichtige acryplaatl waarop een siliconenlaag ligt en een projectiescherm. Aan de zijkant wordt er een rij IR (infrarood) ledjes gemonteerd. Deze zijn zo geplaatst dat ze hun IR licht in de plaat schijnen. Door de interne breking blijven de IR stralen door het plexiglas schijnen. Als er een object op het scherm geplaatst word (vinger of pen), wordt deze breking onderbroken (ook wel gefrustreerd genoemd). Hierdoor zal het licht dat naar buiten verstrooit word worden opgevangen door een IR camera. Deze zal de beelden doorsturen naar de computer waarop software de data zal vertalen naar coördinaten. Volgens zullen deze coördinaten als invoer dienen voor de computer. Op de wiki en community die is de vorige sectie is aangehaald is ook veel informatie te vinden over FTIR [10].
Figuur 2.3: Verklarende werking Frustrated Total Internal Reflection
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
8
Voordelen • Geen gesloten kast nodig. • Goede detectie mogelijk door IR licht. • Door gebruik te maken van goed materiaal kan het aanraakvlak tot een klein puntje gereduceerd worden. Nadelen • Geen glazen oppervlak mogelijk omdat hierbij geen interne breking mogelijk is. • Geen voorwerp herkenning mogelijk , enkel punten worden herkent.
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
2.4
9
Surface Acoustic Wave
SAW staat voor Surface Acoustic Wave. Dit type touchscreen heeft zijn naam te danken aan het feit dat hij gebruik maakt van geluidsgolven. SAW touchscreens geleiden geluidsgolven over een volledig glazen oppervlak. Absorptie van de geluidsgolven door de vingertop bepaalt de positie van de aanraking. Doordat er gebruik wordt gemaakt van puur glas is een optimale beeldkwaliteit gegarandeerd en is het scherm goed bestand tegen chemicaliën. Ook is de kans op beschadiging minimaal omdat er geen gebruik wordt gemaakt van elektrisch geleidende oppervlakken of kunststof films. Het touchscreen blijft in tact onder alle omstandigheden en is ongevoelig voor slijtage of krassen op het scherm. Dit filmpje verklaart de werking van het systeem [14].
Figuur 2.4: Verklarende werking SAW
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
10
Voordelen • Ongevoelig voor vuil en vocht. • Bediening met vinger, handschoen of ander object. Nadelen • Geen object herkenning mogelijk omdat er enkel coördinaten worden gedetecteerd. • Geen volledige detectie mogelijk omdat detectie via de zijkant van het beeld gebeurd . Hierdoor kan het zijn dat een vinger een andere vinger blokkeert , hierdoor zal maar een coördinaat worden doorgestuurd.
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
2.5
11
Zero Touch
Zero Touch, is een detectie methode door middel van infraroodleds die aan de zijkant van het scherm geplaatst worden. Dit type touchscreen is gebaseerd op infrarood detectie. Bij Zero Touch touchscreens worden infrarood golven over een glasplaat geschenen langs de zijkant en wordt een aanraking geregistreerd de golven worden doorbroken door straling. Touchscreens die gebruik maken van infrarood kunnen worden bediend met de blote vinger, handschoenen of een stylus.
Figuur 2.5: Verklarende werking Zero Touch
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
12
Voordelen • Dun systeem. • Hardware voor het systeem is goedkoop. • Geen extra beschermglas nodig voor detectie. • Ongevoelig voor vuil en vocht. Nadelen • Geen volledige detectie mogelijk omdat detectie via de zijkant van het beeld gebeurd . Hierdoor kan het zijn dat een vinger een andere vinger blokeert , hierdoor zal maar een coördinaat worden doorgestuurd. • Niet mogelijk om objecten te detecteren. • Storingen door middel van externe verlichting (zon,gloeilampen).
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
2.6
“ARTESIS”Touch
2.6.1
Waarom?
13
De technieken die we hebben besproken hebben een of meerdere nadelen. Daarom willen we een eigen detectiesysteem maken zodat we we zo min mogelijk tot zwakke punten hebben in vergelijking met de andere technieken. Dit systeem is gebaseerd op het project van Thomas Pototschnig [11] Het voordeel van ons systeem is dat de backlight mee op onze print is geïntegreerd
2.6.2
Werking
Figuur 2.6: Schema Artesis Touch Het systeem maakt gebruikt van IR-LEDs die als sensor worden gebruikt en van witte LEDs worden gebruikt als backlight. De IR-LEDs worden voor een bepaalde tijd gesperd, dit heeft als gevolg dat de junctie van de diode zal opgeladen worden en werken als een condensator. Zie hoofdstuk 4.3 pagina 22. Terwijl dat de ene LED wordt opgeladen zal de LED van de rij er naast schijnen. Wanneer er een beweging wordt gedaan boven de LCD-plaat, zal het licht van de schijnende LEDs reflecteren op het object. Dit zal er voor zorgen dat de opgeladen LEDs
HOOFDSTUK 2. MULTI-TOUCH TECHNIEKEN
14
worden ontladen. De microcontroller die met de LEDs verbonden is zal timen hoelang het duurt voor de LEDs ontladen zijn. Hoe sneller deze ontladen, hoe meer licht er gereflecteerd word. Dit zal als een detectie dienen en als zodanig verwerkt worden door de microcontroller. Vandaar dat het detectiebord verdeeld is in 2 matrices, hierdoor kan 1 matrix schijnen en de andere detecteren. Dit word gedaan om timing van de microcontroller niet te veel te beïnvloeden. Een nadeel hiervan is dat er meer poorten nodig zijn voor aan te sluiten aan de microcontroller. Voordelen • Dunner systeem. • Schaalbaar naar grotere oppervlakken. • Volwaardige multitouch. Nadelen • Kostprijs in kleine hoeveelheden. • Storingen door middel van externe verlichting (zon,gloeilampen en andere bronnen van infrarood licht).
Hoofdstuk 3 Software De hardware levert een constante stroom aan data, maar zonder de nodige software kan er niet veel gedaan worden met het multi-touch systeem. De gebruikte software zal er voor zorgen dat de data van de hardware wordt verwerkt tot native multi-touch commando’s voor Windows 7. De software die gebruikt wordt is MTView, OpenCV voor bepaalde drivers en SG-driver. OpenCV moet men enkel installeren en niet op de achtergrond laten draaien. SG driver vertaalt TUIO commando’s naar native windows 7 multi-touch input. Dit is open source software ontwikkeld door Sensible UI [15]. Dit onder de GPL licentie, dus vrij voor gebruik zolang de bron vermeld wordt. De 2 applicaties die op de achtergrond draaien werken op volgende manier: MTView krijgt de data van de microcontroller en zal deze via TUIO doorsturen naar de SG-driver.
15
HOOFDSTUK 3. SOFTWARE
3.1
16
Controller naar Computer
Figuur 3.1: Blokschema Software Hierbij wordt de data van de controller via als een communicatie poort gesimuleerde usb poort naar de computer gestuurd. Dit gebeurt bij een baudrate van 57600 of 115200 bps.
3.2
TUIO naar Windows 7
We gebruiken hiervoor het programma MTView die serieel data inleest en via TUIO doorstuurt. Tevens moet OpenCV geinstalleerd worden vanwege de CV210.dll , cxcore210.dll en de highgui210.dll die hiervan gebruikt worden. De data word in kolommen doorgestuurd en enkel wanneer er een request is ontvangen. • “S"Request = 1byte is toegewezen aan iedere touch pixel. • “R"Request = 2bytes worden toegewezen per touch pixel.
Hoofdstuk 4 Proof of Concept Fase 4.1
Het Concept
De bedoeling van de proof of concept fase is om te zien wat mogelijk is en wat mogelijke problemen kunnen zijn bij het bouwen van een groter systeem. Wanneer dit eerst in het klein wordt gemaakt kunnen er veel fouten en beperkingen vastgesteld worden. Deze problemen kunnen we dus tijdens de proof of concept fase oplossen zodat we bij de finale versie niet voor verassingen komen te staan. Dit zal ook een beter inzicht geven van hoe we de finale versie kunnen realiseren binnen onze mogelijkheden.
Figuur 4.1: Schema van de proof of concept 17
HOOFDSTUK 4. PROOF OF CONCEPT FASE
18
De setup van de P.O.C is de volgende een ontwikkelbordje van Arduino die gekoppeld is met een matrix van IR LEDs, de Arduino is gekoppeld met een computer.
Figuur 4.2: De gebruikte Arduino Het ontwikkelbordje is een Arduino Mega, dit is een controllerbordje op basis van een ATMega 1280.[7] Dit is een microcontroller in een Thin Quad Flat Package (TQFP) [17] met 128 Kbytes flash geheugen en een totaal van 86 I/O poorten en een maximum werk frequentie van 16MHz. Verder zit er op het bordje een FTDI-chip [9] die een seriële poort gaat simuleren via de USB poort van het bordje. De controller wordt ook via USB geprogrammeerd met de software van Arduino zelf, welke gebaseerd is op Processing[13]. Beide programma’s zijn vrije software en werken op de drie meest courante platformen. Om de werking van het bordje en de software te leren kennen is gebruik gemaakt van het boek Getting Started With Arduino [18].
HOOFDSTUK 4. PROOF OF CONCEPT FASE
19
Figuur 4.3: Het detectie schema De printplaat waarmee de Arduino gekoppeld is bestaat uit twee matrices van elk 8 IR-LEDs, die door elkaar zitten. De 1ste kolom is van matrix 1, de 2de kolom is de 1ste van matrix 2 en zo verder. De matrix is opgesplitst omdat er reflectie moet zijn van IR-licht wanneer er gedetecteerd wordt, dus wanneer een matrix 1 detecteert schijnt matrix 2.
4.2
P.O.C ontwikkeling
Voor de ontwikkeling van het multi-touch systeem is er gestart met een lichtsensor (LDR) en een Arduino. De lichtsensor word uitgelezen langs een analoge poort van de microcontroller, de sensor word visueel weergegeven en afgelezen met een grafiek gemaakt met de ontwikkelomgeving Processing. Dit is een ontwikkelomgeving die geschreven is om visueel te leren programmeren. In deze SDK is er een programma geschreven dat de seriële poort uitleest. De uitgelezen data wordt verwerkt in een vloeiende grafiek die de hoeveelheid licht weergeeft. Om het programma te schrijven is er gebruik gemaakt van het boek Getting Started With Processing [19].
HOOFDSTUK 4. PROOF OF CONCEPT FASE
20
Als alle code werkte met de LDR is er overgestapt naar een LED als sensor, deze was verbonden met een analoge poort van de Arduino en met de software die geschreven was in Processing. Na de tests met de LED op de analoge poort, is de code voor de Arduino herschreven om een digitale poort te gebruiken. De digitale poort is gebruikt omdat 2 standen heeft hoog of laag en een analoge poort heeft oneindig veel toestanden, omdat dit een veranderlijk signaal is. Om de code aantepassen is er gebruik gemaakt van voorbeeldcode die op de website van Arduino[4] te vinden is. We hebben een LCD-scherm gedemonteerd, dit voor de LCD-plaat. Wanneer de lcd-plaat zich boven de detecterende LED bevindt was er geen detectie meer mogelijk, de verklaring hiervoor is de golflengte van het licht. De LEDs waarmee de testen zijn uitgevoerd was een blauwe en een witte, het licht van beide LEDs gaat door de LCD-plaat maar ze detecteren niets. Om dit probleem op te lossen hebben we de LEDs verdubbeld: 1 LED die detecteert en 1 LED dat op hetzelfde ogenblik schijnt,dit als poging om een detectie te hebben door de LCD-plaat. Door de problemen met de gewone LEDs is er overgestapt op IRs LEDs om de detectie uit te voeren. De golflengte van de IR-LEDs is 940nm en deze gaat wel door de LCD-plaat in de 2 richtingen waardoor het mogelijk is om detectie te doen boven de plaat. Voor de finale versie zal er dus gebruik gemaakt worden van IR-LEDs voor de detectie en witte LEDs voor de backlight verlichting. Als de detectie mogelijk was, is er gestart met de detectie van meerdere LEDs Wanneer alle LEDs in 1 matrix worden geplaatst en worden aangestuurd om te schijnen en te detecteren, dan zullen de LEDs die schijnen beginnen knipperen op dezelfde frequentie als de detecterende LEDs. Dit komt door dat de LEDs die moeten detecteren eerst worden gesperd om op te laden en dit zal de schijnende LEDs niet te goede komen want deze staan gewoon in doorlaat. Als dan de LEDs die detecteren worden ontladen over de microcontroller gebeurt dit ook met de schijnende LEDs. Voor de schijnende LEDs is er dus geen aparte massa wat maakt dat deze zich gaan gedragen als detecterende LEDs. Om dit te voorkomen is de matrix opgesplitst in 2 aparte matrices. Op het moment dat de ene matrix schijnt zal de andere detecteren en dit wisselt constant. De 2 matrices zijn gemonteerd op een shield die op de Arduino past, het schema van de matrices is te zien in sectie 4.3 pagina 23. Tussen de LEDs zit een afscherm materiaal, dit moet omdat de schijnende LEDs de detecterende beïnvloeden. Een ander probleem was dat sommige LEDs niet detecteerde of verkeerde waarden gaven. De oorzaak van dit probleem was dat de matrices geen massa hadden met als gevolg dat ze op bepaalde momenten een zwevende pin hadden. Dit is op gelost door de anodes van de LEDs te verbinden met een weerstand en dan met de massa. Het volgende probleem was het wisselen tussen de matrices van detecteren naar schijnen. Eerst geprobeerd met de eerste lijnen van de 2 matrices, alle code herschreven met een “if-else lus” om te wisselen tussen de 2 lijnen. Maar uit het debuggen bleek dat het “else” gedeelte van de lus niet werd uitgevoerd. Het Arduino-forum [5] is ook geraadpleegd voor een oplossing, maar er is geen oplossing gevonden. De code is herschreven met een “switch-case statement” in plaats van de “if-else lus”. Met de “switch-case lus” werkt de code met de 1ste kolommen van de 2 matrices. Daarna is de code uitgebreid zodat alle 4 de kolommen kunnen gebruikt
HOOFDSTUK 4. PROOF OF CONCEPT FASE
21
worden. Voor de finale versie is het de bedoeling dat er gebruik gemaakt wordt van een Field Programmable Gate Array (FPGA) [16] op een ontwikkelbordje van Actel. Dit ontwikkelbordje is op basis van een FPGA namelijk de Igloo M1AGL600[2]. Deze FPGA kan als een microcontroller worden geprogrammeerd, Actel levert voor deze FPGA een compleet project waarin een Cortex M1[1] zit. Als je deze Cortex M1 op de FPGA programmeert dan zal de FPGA werken als een microcontroller. Het probleem met dit bordje is dat er niet veel bruikbare informatie voor handen is. Dit maakt het moeilijk om het bordje te programmeren en te gebruiken. Het programmeren van de Cortex is geluk maar de microcontroller zelf programmeren daar zijn we niet in geslaagd. Het probleem zat bij de configuratie van de debuggingtools, het gebruikte voorbeeld programma was ook door Actel zelf gemaakt. Maar omdat we dat niet werkende kregen en wat tijd verloren zijn hierdoor is er besloten om een andere controller te gebruiken voor de finale versie
Figuur 4.4: Het FPGA bordje Er is ook nog geprobeerd om met een Olimex bordje te werken ter vervanging van de FPGA. Dit bordje was de Olimex LPC-P2148 [12] op basis van de LPC-p2148 dit is een ARM [6] microcontroller. Tijdens het werken met dit bordje is er een fout opgetreden en daar is niet verder achter gezocht. Een ander probleem met dit bordje is dat er niet genoeg I/O aanwezig is.
HOOFDSTUK 4. PROOF OF CONCEPT FASE
22
Figuur 4.5: Het Olimex bordje
4.3
Werking bordje
Zoals eerder vermeld is de matrix opgedeeld in 2 delen, die afzonderlijk van elkaar werken. Wanneer de 1ste matrix detecteert zal de andere matrix schijnen, dit is nodig voor de detectie. Maar voor de LEDs kunnen detecteren worden deze opgeladen zoals beschreven in sectie2.6.2 pagina 13. De tijd die nodig is om een LED op te laden kan berekend worden met de volgen de formule: τ =R∗C • τ in seconden • R in Ω • C in F De LEDs die we gebruiken hebben een gemiddelde capaciteit van 30.5 pF. Deze waarde is een gemiddelde dat is berekend na het meten van 10 LEDs. Verder is er een voorschakel weerstand gebruikt van 82 Ω. Als alle waarden in de formule worden ingevuld krijgen we het volgende: 82Ω ∗ 30.5pF = 2, 5nsec Om een capaciteit voor ongeveer 99% op te laden in er 5 keer de tijdsconstante nodig: 2, 5nsec ∗ 5 = 12, 5nsec
HOOFDSTUK 4. PROOF OF CONCEPT FASE
23
Wanneer de LEDs schijnen en er worden één vinger of meerdere vingers boven de gehele matrix gehouden, dan zal het IR licht worden weerkaatst op de vinger(s) en zullen de LEDs die detecteren dit licht opvangen. Naargelang de hoeveelheid opgevangen licht zullen de detecterende LEDs snel of traag ontladen. De normale ontlaadtijd kan ook berekend worden met bovenstaande formule en het duurt ook 5τ om de LED te ontladen maar wanneer er licht opvalt zal de LED sneller ontladen. De microcontroller (de Arduino Mega) zal timen hoelang het duurt voor de LEDs ontladen zijn. De tijd die nodig was om de LEDs te ontladen wordt opgeslagen in de sensedValue array, als alle LEDs ontladen zijn worden de waarden vergeleken met een vaste waarde. Als de gemeten waarden kleiner is dan de vaste waarde wordt dit aanzien als een detectie, als de gemeten waarde groter is dan de vaste waarde is dit geen detectie. Tijdens het vergelijken wordt er in de detection array een 0 of een 1 weg geschreven, een 1 voor detectie en een 0 voor geen detectie. Dit gedeelte van de code wordt verder uitgelegd met een figuur in sectie 4.4 op pagina 27. Wanneer de microcontroller aan het einde van zijn programma is wordt de array detection serieel door gestuurd naar de PC.
Figuur 4.6: De testprintplaat
4.4
Uitleg werking code
De code is op gebouwd in verschillende delen, de eerste deel is de initïalisatie en declaratie van de variabelen die overal in het programma kunnen gebruikt worden. Het 2de deel is altijd aanwezig in een Arduino programma, hierin wordt o.a. de seriële poort geopend en alle poorten als output gedeclareerd. De delen die volgen achter de “Setup” zijn de functies die in een oneindige lus staan, deze worden uitgelegd onder de figuur.
HOOFDSTUK 4. PROOF OF CONCEPT FASE
Figuur 4.7: Blokschema van de code
24
HOOFDSTUK 4. PROOF OF CONCEPT FASE
25
In de functie “Charge"wordt er per keer 1 kolom LEDs opgeladen. Dit omdat de anodes van de LEDs een lager potentiaal hebben dan de kathodes en dus sperren. Telkens de functie wordt aangeroepen wordt er de volgende kolom opgeladen.
Figuur 4.8: Blokschema van de functie “Charge” Tijdens de functie “Discharge”, worden de LEDs die in de vorige functie zijn opgeladen ontladen en wordt er gemeten hoelang het ontladen duurt. De kolom die net was opgeladen wordt nu LED per LED ontladen, dit duurt enige tijd wanneer er zich niets boven de LED bevind. Wanneer er zich iets boven de LED bevindt zal de junctie sneller ontladen zijn. De waarde van de ontlaadtijd wordt in de sensedValue array geplaatst.
HOOFDSTUK 4. PROOF OF CONCEPT FASE
Figuur 4.9: Blokschema van de functie “Discharge”
26
HOOFDSTUK 4. PROOF OF CONCEPT FASE
27
De functie “Shine” zorgt ervoor dat de LEDs branden. Dit wordt gedaan omdat het systeem berust op het principe van reflectie. Wanneer er veel licht op een object wordt gereflecteerd zullen de detecterende LEDs zich sneller onladen.
Figuur 4.10: Blokschema van de functie “Shine” De functie “Check”, zorgt ervoor dat de waarden in de sensedValue array worden vergeleken met een vaste waarde. Wanneer de waarde van de sensedValue hoger is dan de vaste waarde is er geen detectie en wordt er een 0 in de detection array weg geschreven. Als de waarde kleiner is dan de vaste waarde dan wordt er een 1 weg geschreven in het detection array.
HOOFDSTUK 4. PROOF OF CONCEPT FASE
28
Figuur 4.11: Blokschema van de functie “Check” De laatste instructie zorgt ervoor dat de waarden van de detection array worden verstuurt over de seriële poort. Wanneer dit laatste is gebeurt keert het programma terug tot vlak na de “Setup” en begint terug opnieuw met alle functies.
4.5
Koppeling naar computer
De Arduino is via USB gekoppeld aan een PC. De FTDI-chip op de Arduino zal een seriële poort simuleren om daarover de data naar de PC te sturen. De data wordt doorgestuurd met een baudrate van 115200bps. Op de PC staat een seriële monitor waarop de data getoond wordt.
Hoofdstuk 5 Finale Versie 5.1
Benodigdheden
Dit is een beknopte weergave van welke hoofdonderdelen er nodig zullen zijn voor het realiseren van de finale versie. • Detectie Board Printplaat deze dient voor de LEDs op te monteren. • IR LEDs • Witte SMD LEDs • Tafeltje • Plexiglas • Step-up converter + Driver Printplaat • Voeding
5.2
Detectie Board
Het detectie board is het belangrijkste onderdeel voor onze proef. Deze zorgt namelijk voor de detectie van de vingers zodat deze later verwerkt kunnen worden als invoer voor de computer.
5.2.1
Detectie Board Werking
Het detectie bord is een grote versie van de proof of concept, het enige verschil is dat het nu niet een matrix is van 4x4 maar een van 31x23 die in 2 aparte matrices is opgedeeld. Tevens 29
HOOFDSTUK 5. FINALE VERSIE
30
is er ook een gedeelte dat zorgt voor de backlight, dit bestaat uit Surface Mounted Device (SMD) witte LEDs die tussen de IR-LEDs zijn geplaatst. De werking van het detectie gedeelte is hetzelfde is uitgelegd zoals uitgelegd in sectie 4.3 op pagina22. Het grote verschil is nu dat er niet gewisseld wordt tussen de matrices omdat er niet voldoende poorten beschikbaar zijn op de Arduino Mega. De witte SMD-LEDs staan per 22 in serie en zo staan er 30 kolommen parallel de witte LEDs hangen aan de step-convertor. Deze witte LEDs worden niet aangestuurd door de controller aangezien ze als backlight dienen.
5.2.2
Detectie Board Schema
Figuur 5.1: Schema dubbele matrix
HOOFDSTUK 5. FINALE VERSIE
31
Dit is het schema van het detectie bordje. Hierop kan men zien dat bij de rijen de even en oneven LEDs apart zijn aangesloten . Zo komt het dat men 2 verschillende matrices krijgt.
Figuur 5.2: Schema witte LEDs Dit is het schema van de witte smd LEDs die op het detectie bord geplaatst wordt. Hierop kan men zien dat er 22 LEDs in serie staan en dit 30 keer parallel. Daarom zal er gebruik gemaakt moeten worden van een step-up om aan een hogere spanning te komen.
HOOFDSTUK 5. FINALE VERSIE
5.2.3
32
Detectie Board Print
Figuur 5.3: Printplaat ontwerp detectie board Dit is de afbeelding van de printplaat. De blauwe lijnen geven de verbindingen weer die aan de onderkant van de print zitten . En de rode lijnen geven de verbindingen weer die aan de bovenkant van de print zitten. Hierop kan men dus zien dat het routen van deze verbindingen cruciaal is zodat er geen foute verbindigen worden gemaakt.
HOOFDSTUK 5. FINALE VERSIE
5.3
Step-up converter + Driver Print
5.3.1
Step-up Werking
33
Omdat we bij de detectie print de witte smd LEDjes in serie hebben gezet is er een hogere spanning nodig om deze te laten branden. De LEDs verbruiken 1 mA bij 3 V en aangezien we er 22 in serie hebben wordt de voedingspanning voor deze een 66 V bij 1 mA. Maar we hebben 22 LEDs in een kolom en aangezien er 30 kolommen zijn wordt de specificaties voor de voeding 66 V bij 30 mA. Hiervoor heb ik gekozen voor een MAX1711 deze kan met een ingangspanning van 2 tot 12,5 V een uitgangspanning genereren van de referentie spanning van 12 V. Maar deze kan door het regelen van de weerstanden R1 en R2 tot 66V gemaakt kunnen worden hierbij moet wel gekeken worden naar de werkspanning van de componenten in het uitgangsgedeelte van het circuit.
5.3.2
Step-up Schema
Figuur 5.4: Schema Step Up Convertor
HOOFDSTUK 5. FINALE VERSIE
5.3.3
34
Driver Werking
Tussen de LED-matrix en de controller zit nog een print, deze bevat 31 transitoren. Deze print is nodig omdat de controller niet voldoende stroom kan leveren om 31 kolommen van 23 LEDs aan te sturen. Daarom is er een aparte voeding voorzien voor de LEDs, deze voeding wordt geschakeld door de transitoren. De transitoren worden aangestuurd door de microcontroller.
Figuur 5.5: Schema Driver
Figuur 5.6: Print Driver
HOOFDSTUK 5. FINALE VERSIE
5.4
35
Controller bordje
Figuur 5.7: De gebruikte Arduino Het controllerbordje is een Arduino Mega, dit is een bordje op basis van een ATMega 1280. Dit is hetzelfde bordje dat gebruikt word bij de proof of concept vandaar dat deze gegevens te vinden is in sectie 4.1 op pagina18.
5.5
Software
De software draait op Windows 7. Hierop word MTView, OpenCV voor bepaalde drivers en SG driver geinstalleerd. Daardoor kunnen de signalen die door de hardware naar de computer verstuurd worden verwerkt worden naar multi-touch invoer. Dit is dus dezelfde software als gebruikt word in de proof of concept.
36
HOOFDSTUK 5. FINALE VERSIE
5.6
Opbouw
Voor de opbouw hebben we volgende onderdelen nodig : Naam Scherm 15 inch1280x1024 Plexi Plaat 3mm 550x550 mm Plexiglas 5mm 313x28 mm Connectoren Male 20 polig Connectoren Female 20 polig Resistors 1206 5K Usb Cable Printplaat eurocard formaat Transistor BD439 SMD LED’s 1206 Formaat Printplaat IR LED’s 3mm, 10° Arduino Mega Resistors 1206 0,05 Diode ES2F Capacitor 1206 100nF Mosfet IRF644 Bewerken Plexiglas 217 Gaten Plaat 550x550 mm 3mm Ikea Lack Tafel MAX 1771
Winkel 2dehands.be Bouwplastics.nl Bouwplastics.nl Dickbest Dickbest Dickbest Dickbest Ditronic Ditronic Ebay (1) EuroCircuits Farnell Farnell Farnell Farnell Farnell Farnell ProtoArt Hubo Ikea Maxim IC
Hoeveelheid 1 1 1 5 5 40 1 1 35 800 1 1000 1 5 5 10 2 1 1 1 1
TOTAAL
Prijs per Stuk e35,00 e15,40 e8,35 e1,65 e1,65 e0,10 e1,50 e4,00 e0,20 e0,06 e152,00 e0,03 e35,00 e0,98 e0,59 e0,09 e2,75 e35,11 e12,50 e5,00 e1,85
Totaal e35,00 e15,40 e8,35 e8,25 e8,25 e4,00 e1,50 e4,00 e7,00 e48,00 e152,00 e32,00 e35,00 e4,90 e2,95 e0,90 e5,50 e35,11 e12,50 e5,00 e1,85 e427,46
Tabel 5.1: Onderdelen Finale Versie
HOOFDSTUK 5. FINALE VERSIE
Figuur 5.8: 3D Render finale versie
37
HOOFDSTUK 5. FINALE VERSIE
5.7
38
Praktijk Test
Bij de eerste test werkte de detectie plaat niet . Het probleem was dat de voedingsspanning weg zakte en de stroom enorm toenam. Dit kwam omdat er voor de kolommen met LEDs geen voorschakel weerstanden waren geplaatst. Om dit op te lossen is er in de driverbordjes nog een extra weerstand toegevoegd om de stroom te beperken. Deze weerstand is achter de transistor geplaatst. De berekening voor de weerstanden is de volgende: R = (Uin − ULED )/ILED • R in Ω • Uin = ingangsspanning in V • ULED = werkspanning van de LED in V • ILED = stroom door de LED in A In de datasheet van de LEDs staat dat deze werken op een spanning van 1.25 V tot 1.5 V en een stroom van 20 mA tot maximum 50 mA. Wij hebben gekozen voor een werkspanning van 1.2 V en een stroom van 40 mA en de ingangsspanning is 5 V. Als we dan alles invullen in de formule krijgen we het volgende: (5V − 1, 2V )/0, 04A = 95Ω 95 Ω is niet echt een standaard waarde en dan is er gekozen voor een weerstand van 82 Ω. Maar na testen zij we er achter gekomen dat bij de finale versie de detectie snelheid redelijk traag is . Dit lijkt ons te komen doordat de ontladingstijd variabel is . Hierdoor zal de tijd per LED om zijn waarde door te sturen langer duren . Daarom zal de tijd wanneer de arduino zijn data doorstuurt ook langer duren.
Hoofdstuk 6 Conclusie Het was een leerrijke en interessante bachelorproef, spijtig van het geringe budget. Maar we hebben er wel wat uit geleerd: zo zijn we er in geslaagd van zelf een multi-touch systeem te bouwen. Dit met de nodige problemen maar daar is meestal wel een oplossing voor gevonden. Bijvoorbeeld: dat het niet mogelijk is om detectie te doen door een LCD-plaat met gewone LEDs. Dat de LEDs niet in 1 matrix kunnen staan want dan is er geen detectie meer mogelijk. Het eerste idee is ook niet altijd het beste bv: de software om de hardware te testen . Het eerste idee was om 3 verschillende programma’s te gebruiken, later is een oplossing gevonden die minder van de PC zou vragen. Tijdens het werken aan de proef zijn er nog idëen bijgekomen die eventueel volgend jaar geïmplementeerd kunnen worden. Zoals local dimming toepassen in de LED achtergrondverlichting. Ook zal er gekozen moeten worden voor een andere controller die sneller is met meer I/O. Of eventueel zelfs meerdere controllers die dan later hun data doorsturen naar een hoofdcontroller.
39
Bibliografie [1] Actel, cortex m1. http://www.actel.com/products/mpu/cortexm1/default.aspx. 21 [2] Actel, fpga. http://www.actel.com/products/igloo/default.aspx. 21 [3] Apple, iphone. http://www.apple.com/iphone/. 3 [4] Arduino, led as lightsensor. LEDSensor. 20
http://www.arduino.cc/playground/Learning/
[5] Arduino, the forum. http://arduino.cc/forum/. 20 [6] Arm. http://en.wikipedia.org/wiki/ARM_architecture. 21 [7] Atmega 1280 microcontroller. http://www.atmel.com/dyn/products/product_card. asp?category_id=163&family_id=607&subfamily_id=760&part_id=3633. 18 [8] Di. http://wiki.nuigroup.com/Diffused_Illumination. 5 [9] Ftdi, seriële poort simulator. http://www.ftdichip.com/Products/ICs/FT232R.htm. 18 [10] Ftir. http://wiki.nuigroup.com/FTIR. 7 [11] Led touch with fpga. http://alturl.com/e76vn. 2, 13 [12] Olimex, lpc-h2148. http://www.olimex.com/dev/index.html. 21 [13] Processing. http://processing.org. 18 [14] Saw, touch. http://www.youtube.com/watch?v=Q_suXNSPdE8. 9 [15] Sensibleui. http://www.sensibleui.com/. 15 [16] wikipedia, fpga. http://en.wikipedia.org/wiki/Field-programmable_gate_array. 21 [17] wikipedia, the free encyclopedia. http://en.wikipedia.org/wiki/Thin_Quad_Flat_ Pack. 18 [18] Massimo Banzi. Getting Started With Arduino. O’Reilly, 2008. 18
40
BIBLIOGRAFIE [19] Ben Fry Cassey Reas. Getting Started With Processing. O’Reilly, june 2010. 19 [20] Nick Van Den Vonder en Dennis De Quint. Thesis Multi-touch screen, 2009. 7
41