INTERACTIEVE TOUCHSCREEN MET RGB LEDS

Vergelijkbare documenten
AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT. Geschreven door: Tom Vocke

Hand-out Introductieworkshop LED programmeren

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

Workshop Arduino voor beginners deel 2

Tinyserir-RC5. Datasheet. Tinyserir-RC5 Page: 1 of 8

Het µclab voor Arduino UNO, NANO en Arduino UNO pincompatible

EM2 Microcontroller Project. LED cube

Tweede workshop Arduino

MAKERKLAS WORKSHOP ARDUINO. Maandag 7 december 2015

Workshop Arduino voor beginners. door TkkrLab Enschede

Oefening 1 - Seriële communicatie via USB

Arduino. Arduino UNO. Sam Decoster. CoderDojo Roeselare. Sam Decoster

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR

Fysische Informatica met FLEC

12.1 Input/output-kaart IOK. Informatieblad 12 input/output-kaart versie 1.0. Beperking aansprakelijkheid

Arduino[4KIDS] Maak je eigen muziekinstrument!

Inductiemeter via de parallelle poort

Locobuffer Handleiding

KAEDU : Outputs en inputs

1. Sluit de LED aan zoals afgebeeld 2. Sluit de USB-kabel aan op de Arduino 3. Klik op de knop uploaden 4. De LED begint te knipperen

GEINTEGREERDE PROEF DE COMPUTER ALS TV AFSTANDSBEDIENING

Departement industriële wetenschappen en technologie

Deel 1 De Operationele versterker

Practica bij het vak. Inleiding tot de Elektrotechniek: Practicum 2 Analoge versus digitale signalen en hun overdracht

Stappenmotor Interface. Controller

LocoServo Handleiding

Alles op de kop. Dobbelsteen D02i werkt precies andersom! Johan Smilde

Combinatorische schakelingen

Weerstation. Weerstation met Arduino C.G.N. van Veen. HiSPARC. 1 Weerstation. 2 Arduino. 2.1 Werking van Arduino

De CB channel controller TMS1022NL/NLL en TMS1023NL/NLL. ( Dit is een maskrom-programmed version van de Texas Instruments TMS1000 family)

ES1 Project 1: Microcontrollers

Logo quiz Project Inleiding op de Logo!

Hydrofoon versterker. Een versterker voor de Aquarian H2a. Betreft: Hydrofoon versterker. Door: David Boelee,

Inhoudsopgave LED dobbelsteen

Klasse B output buffer voor een Flat Panel Display Kolom aansturing

LocoIO Handleiding HDM08

LocoServo Handleiding

GIP. De computer gestuurde trein

Arduino : Morse Voltmeter

REGISTERS. parallel in - parallel uit bufferregister. De klok bepaalt het moment waarop de data geladen worden. Mogelijke bijkomende ingangen:

De Arduino-microcontroller in de motorvoertuigentechniek (3)

De Arduino-microcontroller in de motorvoertuigentechniek (4)

De Arduino-microcontroller in de motorvoertuigentechniek (6)

Technisch ontwerp positiebepaling Smart Blocks

Workshop Arduino - deel 2

S88XPressNetLI v1.0. Installatie- en gebruikershandleiding en naslagwerk KDesign Electronics, PCB ontwerp door RoSoft

PSTN to IP Converter Mijn project bij Research & Design

Hoofdstuk 4. Digitale techniek

Insliklezer EMINSL-XXX

dmxdomotica DDC1-IP-RGB Controller. Simplistic Light Domotica in drie stappen:

Handleiding Natural Light Simulator

Inleiding elektronica Presentatie 1

Gebruikshandleiding TFT touchscreen

4x4x4 LED cube deel 2

PROJECT 2 - MAZE DRIVE - OFFERTE RICK VAN VONDEREN

In gebruik nemen en testen. 11. Technische gegevens 13. Bijlage 1 14

Terugmeld module in combinatie met andere merken 13. Aansluiten van de meldingangen 14. In gebruik nemen en testen van de terugmeld module 16

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie

Programmeren met Arduino

Ar-doe-wie-no. Voorwoord

A R D U I N O. addendum bij: Leren programmeren, meten en sturen met de Arduino. 3 e druk INHOUD

Operationele versterkers

Algemene Breadboard tips

RUKRA REMOTE DIGIT IO_44_NL ARTIKELNUMMER: RK-3004

Boe-Bots - Arduino robots

Programmeren met Arduino-software

Bouwbeschrijving UniSAI

RCL Arduino Workshop 1

Sensoren- en actorenoverzicht

COMPUTER GESTUURD LOOPLICHT

Technology, Innovation & Society Delft

Raspberry Pi Interfacing.

Workshop Arduino Uno. Touw dag 6 juni 2015 Harold Pootjes en Simon Pauw

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3)

Elektronica bouwen met M.T.S. LEGEO modulen

WRC S Soundcard Interface

PIC Callgever Door PA1RUM

ADRESSEERBARE ZONE UITBREIDING int-adr_nl 05/14

43 Keerlusprint Werking. informatieblad 43 keerlusprint KLS versie 2.0

Zelfbouw frequentieteller

In- en uitgangssignalen van microprocessoren

Arduino CURSUS. door Willy - 09-juni-2017

Voor de bouw van de BITX 20 Tranceiver zijn de volgende stappen handig. Het bordje is in secties ingedeeld (zie de afbeelding).

7,6. Samenvatting door A woorden 12 april keer beoordeeld. Natuurkunde. Natuurkunde Systemen. Systemen

Hoofdstuk 1: De OPAMP

Geïntegreerde proef. Computer gestuurd domotica systeem

Handleiding Alma Rally & Alma Rally Off-road

Espa 443 Converter. Beschrijving van de Espa 444 naar Espa 443 Converter.

Gebruikershandleiding. robotcar.nl

by Jody Culkin Bronnen die gratis gebruikt, verspreid of aangepast kunnen worden. meestal software of hardware.

b-logicx handleiding PX_DimmerDayNight

Wireless PC Interface installatie handleiding

EEN 3D ACCELEROMETER VOOR IEDEREEN

Gebruikershandleiding

B3C 70cm converter besturing. v PE5PVB bar.net bar.net

ES1 Project 1: Microcontrollers

Bouw een deel van het JeeNode schema zoals beschreven op pagina 5 in de JeeNode handleiding in de handout, maar dan op het breadboard.

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 3: Tijd, licht en warmte

Werkbladen voor Arduino workshop 1

Transcriptie:

Project-medewerkers: Pieter Sijmons, Sybe Natran, Nils Van Butsel 2011 INTERACTIEVE TOUCHSCREEN MET RGB LEDS Verslag voor het vak Vakoverschrijdende Projecten

Inhoudsopgave Introductie... 2 Doelstelling... 2 Basiswerking Hardware... 3 Totaal ontwerp... 3 Ingang... 4 Infraroodsensoren... 5 Schuifregister voor detectie... 7 Aansturing RGB-leds... 10 Opmerking... 12 Basiswerking Software... 12 Inleiding... 12 Uitwerking... 13 Aansturing RGBleds... 15 Uitlezen van infraroodleds... 17 Overzicht printplaat... 19 Testresultaten & Opmerkingen... 20 Conclusie... 21 Datasheets componenten... 23 1

Introductie Doelstelling Ontwerp van hard- en software om een Interactief-aanraakscherm te realiseren en aan te sturen. Het scherm is opgebouwd uit een grove matrix van 24 op 16 beeldpunten en elk beeldpunt beslaat een vierkant van ongeveer 5 op 5 cm. Elk beeldblokje bevat een RGB-led en een infrarood sensor. Een RGB- led bevat in één verpakking een rode, een groene en een blauwe led. Met de gepaste aansturing van de drie leds kunnen alle kleuren bekomen worden. Het aanraken van een beeldpunt wordt gedetecteerd door de infrarood sensor. De mogelijkheden van een dergelijk interactief aanraakscherm zijn legio : interactieve spelconsole, display voor het weergeven van data, animatie, rolkrant enz. In een project van vorig academiejaar werd een module van 4 op 2 RGB-leds gerealiseerd. Dit jaar is het de bedoeling om op basis van deze module verder te gaan en de module te verbeteren en uit te breiden. 2

Basiswerking Hardware Totaal ontwerp 3

Eén bordje bestaat uit 8 RGB-leds en 8 infraroodsensoren. Bovenstaande tekening is het elektronisch schema van de schakeling. Alle leds werken volgens hetzelfde principe. We zien 4 grote delen op het schema: De buffers/ingang De infraroodsensoren Schuifregister voor de detectie Chip voor de aansturing van de leds met de RGB-leds Ingang De signalen komen toe in het bordje via J1. We zien dat we 11 ingangen hebben: SER CLR RETURN_S SH/LD CLK_S BLANK CLK_TC LAT INH RETURN_T SIN Wat de specifieke functie is van deze ingangen zal later nog uitgebreid aan bod komen. Als we de draden volgen, zien we dat alle ingangen naar 2 74HC244 s gestuurd worden. De 74HC244 doet dienst als buffer. Intern heeft deze chip allemaal 3-state buffers die gestuurd worden door de ingangen 1OE en 2OE. Er wordt gewerkt in 2 groepen van 4 zoals te zien is op de figuur vandaar ook dat er 2 output enable s zijn. We kunnen dus 8 signalen bufferen. Er zijn 11 ingangen dus hebben we nog een extra 74HC244 nodig voor de laatste 3 ingangssignalen. 4

Een hoge ingang op 1OE en 2OE zal ervoor zorgen dat alle uitgangen in hun OFF-state staat en de ingangssignalen niet doorgestuurd worden. Voor onze schakeling worden deze ingangen dan ook verbonden met de GND. Als we kijken op het elektronische schema(figuur1) dan zien we dat pinnen 1 en 19 steeds verbonden zijn met de ground. De chip zal ingang A X gebufferd uitsturen naar uitgang Y X. Infraroodsensoren Links onderaan in onderstaande figuur zie je 2 dioden. D2 is een infrarood-led die continu infrarood licht uitzendt omdat deze via een voorschakelweerstand van 100Ω verbonden is met de 3,3V voedingsspanning. Met het blote oog is het infrarode licht niet zichtbaar. Maar indien men kijkt met een gsm-camera, kunnen we controleren of de led inderdaad iets uitzendt(zie foto rechts). Het gaat hier om een INF5940 van Futurlec. D1 is een infrarood-detectie-led die het infraroodlicht zal detecteren zodra men een voorwerp boven D2 houdt, waardoor het infrarode licht kan weerkaatst worden op de detectie-led. De detectieled is een INFD5940 van Futurlec. Op de afbeelding is D2 de witte led die je, als je goed kijkt, ziet oplichten en de zwarte led is D1. Door de manier waarop D1 geschakeld is, zal D1 pas geleiden wanneer hij infrarood licht detecteert. Op dit moment kan er stroom lopen doorheen de tak van D1. Waardoor er een spanning zal staan over de weerstand R1 van 1 MΩ. En dus een spanning op pin 2 van de opamp. De opamp is van het type LM358A. 5

Als we gaan kijken naar het interne schema van de LM358A zien we dat deze eigenlijk bestaat uit 2 opamps. Uit het schema halen we dat pin 3 en dus de plus-klem van de opamp verbonden is met de GND en de min-klem(pin2) verbonden is met de detectieled, pin 2 van de opamp. De tweede opamp in de LM358A wordt gebruikt voor de volgende detectieled. Door de manier van schakelen gaat het hier om een inverterende versterker die de ingangsspanning van de opamp zal versterken aan de uitgang. De uitgangsspanning van de opamp is afhankelijk van de hoeveelheid licht die gedetecteerd wordt en is dus afhankelijk van de afstand tussen het object en de infrarood leds. Hoe dichter het object bij de infrarood leds gehouden wordt, hoe hoger de spanning aan de uitgang. We hebben in totaal 8 detectie-punten dus hebben we 4 LM358A s nodig. De uitgang van de LM358A wordt naar een LM339 gestuurd. Als we gaan kijken naar de datasheet van de LM339 zien we dat dit een quad comparator is. De comparator zal de spanning van de uitgang van de LM358A gaan vergelijken met een referentie-spanning V REF. Deze referentiespanning kunnen we zelf gaan instellen door middel van een pot-meter. Afhankelijk van de hoeveelheid licht in de ruimte waar de touch-screen gebruikt wordt kunnen we V REF gaan verhogen of verkleinen. LM339 Instellen referentiespanning De LM339 bestaat dus uit 4 comparators in één behuizing waardoor we in onze schakeling er slechts 2 in totaal nodig hebben. Dit is hetgeen we kregen na de comparator. 6

Deze uitgangsspanning is zoals je ziet zeer laag: 481mV bij detectie. Omdat het schuifregister goed het verschil moet kunnen detecteren tussen detectie en geen detectie, hebben we deze spanning verhoogd. Uit verslagen van vorig jaar zagen we dat zij opteerden voor een weerstand van 4,5MΩ ipv 1MΩ voor de opamp. Alle weerstanden van 1MΩ werden dan ook vervangen door een weerstand van 4,7MΩ(E12-reeks). Hierdoor kregen we aan de uitgang een spanning van 1,59V bij detectie. De uitgang van de comparator gaat naar een schuifregister, namelijk de 74HC166. Schuifregister voor detectie Het schuifregister bestaat uit een 74HC166. Dit is een 8 bit parallel-in/serial-out schuifregister. Het schuifregister heeft ook een serial-in ingang. Het schuifregister zal alle sensoren overlopen en kijken of er ergens detectie optreedt. Daar dit parallel gebeurt, gaat dit zeer snel. De uitgang van het schuifregister kan ofwel doorgestuurd worden naar een volgende print met weer 8 leds en sensoren of via een jumper naar de microcontroller. De sensoren worden ingelezen met een puls op de LOAD. Dit is pin 15 van de 74HC166. Deze is actief laag dus moeten we een 0 sturen om alles in te lezen. 7

De pinnummering kan je terugvinden in onderstaande tabel. Eén touch-screen bestaat uit 8 sensoren. We kunnen meerdere printen aan elkaar hangen. De uitgang(serial output) van het eerste schuifregister moet dan verbonden worden met de ingang(serial in) van het tweede schuifregister. Een nul op de LOAD zal alle sensoren in het schuifregister laden. Vervolgens zullen de bits doorheen alle printen verschoven worden op het ritme van de CLK_S aan de ingang, als de SH/LD terug hoog is geworden. Als er twee printen met elkaar worden verbonden moeten dus 16 bits worden uitgelezen. Met de INH kan het schuifregister gepauzeerd worden. Een hoge ingang zal ervoor zorgen dat de klok niet meer zal ingelezen worden. De uitgang van het schuifregister is pin 13 en wordt weergegeven in onderstaande figuur door de groene lijn. De bits die worden uitgelezen, gaan dan naar een computer of naar een FPGA waar ze verwerkt zullen worden(zie deel Software). De uitgang van detectieled H is rechtstreeks verbonden met de seriële uitgang. We moeten er dus rekening mee houden als we dit gaan uitsturen dat we deze dit ook gaan uitlezen. De timing van de 8

software-sturing zal dus moeten correct zijn. Onderstaande figuur verduidelijkt dit: Bij het programmeren moeten we ervoor zorgen dat de timing correct is. Uit onderstaande tabel halen we dat de ingangen worden ingeladen bij een lage ingang op PE of bij ons op de SH/LD ingang EN op de stijgende flank van de klok. 9

Aansturing RGB-leds De aansturing van de leds gebeurt met een TLC5952. De leds zijn afkomstig van EvilMadscience en zijn van het type: BL-L105. Eén RGB-led bestaat in principe uit 3 leds: een groene, rode en blauwe led. Door combinatie van deze leds kunnen we iedere gewenste kleur krijgen. Onze leds zijn common anode en moeten aangestuurd worden met een 0 op de kathode om de led te laten branden. We hebben 8 RGB-leds en 3 inwendige leds per RGB-led dus moeten we de RGB-leds aansturen met 24 bits. De aansluitingen van de led gebeurt als volgt: (van links naar rechts) Groen, Blauw, gedeelde anode, Rood. Let op de lengte van de pootjes! Als je deze led wil testen, plaats dan 5V op de gedeelde anode, en de gnd op de gewenste kathode. Vergeet de voorschakelweerstand niet! De TLC regelt dus de aansturing van de leds. De pinconfiguratie van de TLC is als volgt: De 24 bits die de data voor de 8 leds weergeeft worden serieel ingeladen in onze microcontroller via de SIN en zijn afkomstig van een computer. Op het ritme van het kloksignaal CLK_S worden deze 24 bits doorgeschoven. Na 25 klokpulsen komt de data aan de uitgang van onze microcontroller namelijk de SOUT. De TLC5952 bestaat namelijk uit een 25 bit common shift register. De TLC5952 is uitgerust met een brightness control, waarmee de helderheid van de leds bepaald wordt. Vooraleer we de data kunnen sturen voor de RGB-leds, moet eerst de brightness control worden ingeladen. De eerste bit die we sturen, zal bepalen hoe de chip de data moet interpreteren. Voor kleurdata voor de leds moeten we een 0 doorsturen en data die bestemd is voor de brightness control wordt voorafgegaan met een 1. Vandaar dat we 25 bits moeten insturen (1 mode-bit + 24 databits). 10

Om de data naar buiten te brengen moeten we een puls sturen naar de LAT (latch). Een stijgende flank op deze ingang zal ervoor zorgen dat de data uit de registers naar de desbetreffende uitgangen worden gezonden. Voor we data naar de TLC kunnen sturen, moeten we eerst enkele stappen doorlopen om de TLC correct aan te sturen. Bij het opstarten geven we eerst een vijftigtal data bits mee aan de TLC op de SIN. Deze data wordt niet ingelezen zolang er geen puls komt op de LAT van de TLC. Deze bits kunnen zowel 0 of 1 zijn en hebben enkel als doel dat we op deze manier de inhoud van de TLC kennen. De volgende stap is het instellen van de brightness control. We wensen dat alle leds maximaal oplichten. Als eerste sturen we een 1 in op de SIN om duidelijk te maken aan de TLC dat we de brightness willen instellen. Daarna sturen we nog 24 hoge bits op de SIN om alle bits maximaal te laten branden. Als we nu een puls sturen op de LAT worden er 25 hoge bits ingelezen. Om ervoor te zorgen dat alle data correct ingelezen wordt, wachten we nog 1 klokcyclus vooraleer we de LAT doorsturen. Ook laten we deze LAT 2 klokcycli hoog om er zeker van te zijn dat deze doorkomt. Na de LAT wachten we best nog 1 klokcyclus vooraleer we nieuwe data inlezen. Na deze stap sturen we 25 lage bits op de SIN. Ook hier is een puls op de LAT nodig om de data in te lezen. We wachten opnieuw enkele klokcycli zoals hierboven om alle data goed te laten doorkomen. Na deze stap weten we zeker dan alle leds uit zijn voor we aan het eigenlijke programma beginnen. De TLC doet dienst als schuifregister. Hierdoor kunnen er opnieuw meerdere modules na elkaar geplaatst worden. De uitgang van de eerste TLC(SOUT) wordt verbonden met de ingang van de tweede TLC(SIN), enzovoort Hierdoor kunnen meerdere modules na elkaar worden geplaatst. De data voor de eerste module, dus de data op de SIN van de eerste module, is afkomstig van een computer of FPGA. Hierin zal bepaald worden, afhankelijk van de toestand van de detectieleds, hoe de RGB-leds moeten worden aangestuurd. 11

Softwarematig wordt dus de data bepaald die de leds aanstuurt. De aansturing is natuurlijk afhankelijk van welke infrarood leds iets detecteren en welke toepassing de designer wenst. Opmerking Op de module zie je twee jumpers JP1 en JP2. Deze zijn noodzakelijk om de signalen van de laatste module terug te schakelen naar alle voorgaande. Bij de laatste module zullen deze 2 jumpers geplaatst worden, waardoor het signaal terug zichtbaar zal zijn aan de eerste module en er geen onnodige (lange) kabels moeten gelegd worden. Basiswerking Software Inleiding De aansturing van ons bordje gebeurt voorlopig door middel van een Arduino Uno en een computer. Later is het de bedoeling dat de computer en Arduino en computer vervangen worden door een FPGA zodanig dat de module zelfstandig z n werk doet. Ook zal de module uitgebreid worden naar 24 op 16 beeldpunten in plaats van de huidige 4 op 2 beeldpunten. Nu: Later: De code van de Arduino is gebaseerd op een variant van de c-taal (=de Wiring-programmeertaal). 12

Uitwerking Het aansturen van een Arduino vereist een bepaalde manier van werken: Een setup()-functie wordt als eerste uitgevoerd en bevat de initialisatie van de poorten en het opzetten van de verbinding tussen PC en Arduino. Wij gebruiken daarnaast ook deze functie om de registers van de TLC5952-chip te resetten (doorsturen van nullen en eenmaal de latch hoog zetten). Bijvoorbeeld: void setup() { pinmode(sinpin, OUTPUT); pinmode(clk_tcpin, OUTPUT); pinmode(latchpin, OUTPUT); Serial.begin(9600); // Serial.begin(baudrate) Een loop()-functie wordt na de initialisatie continu uitgevoerd. Deze functie gebruiken we om afwisselend de leds een andere kleur te geven. Daarnaast kunnen we ook via deze manier periodiek kijken of er beweging gedetecteerd wordt over de infraroodsensors. Merk op dat de volgorde RGB in de bitstream van rechts naar links moet gelezen worden, bv blauw wordt: 1,0,0. Bijvoorbeeld: void loop(){ readinfrared(); //====OFF==== int bitpatternoff[]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; sendpattern(bitpatternoff); delay(1000); //====WHITE==== int bitpatternwhite[]={ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; sendpattern(bitpatternwhite); delay(1000); //====RED==== int bitpatternred[]={ 0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1 ; sendpattern(bitpatternred); delay(1000); //====GREEN==== int bitpatterngreen[]={ 0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0 ; sendpattern(bitpatterngreen); delay(1000); //====BLUE==== int bitpatternblue[]={ 1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0 ; sendpattern(bitpatternblue); delay(1000); 13

In dit stukje code wordt nog een functie vermeld, nl. de sendpattern()-functie. Deze functie verzorgt dus de synchronisatie tussen de Serial-IN, de Clock_TC en de Latch. De output van zo n functie ziet er als volgt uit: Deze grafiek werd gegenereerd door de Logic Analyzer. Dit apparaat werd verbonden met de pinnen op de Arduino, om te zien welke signalen er werden uitgestuurd naar het led-bordje. Aan de hand daarvan verliep het debuggen zeer vlot, omdat we een directe visuele indruk kregen van de signalen. De setup zag er zo uit: onderaan zien we het bordje, gekoppeld aan de Arduino, die op zijn beurt verbonden is met een laptop én de Logic Analyzer. 14

Aansturing RGBleds De code die bovenstaand signaal genereert, is de volgende: void sendpattern(int *pattern){ int brightnesspattern[]={ 0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1 ; setledbrightness(brightnesspattern); int counter=0; for(int i=0;i<58;i++){ if(i==0){ digitalwrite(sinpin,low); digitalwrite(clk_tcpin,low); digitalwrite(latchpin,low); else if(i==1){ digitalwrite(sinpin,low); digitalwrite(clk_tcpin,high); digitalwrite(latchpin,low); else if(i<50){ if(i%2==0){ digitalwrite(sinpin,pattern[counter]); digitalwrite(clk_tcpin,low); else{ digitalwrite(sinpin,pattern[counter++]); digitalwrite(clk_tcpin,high); digitalwrite(latchpin,low); else if(i==50){ digitalwrite(sinpin,low); digitalwrite(clk_tcpin,low); digitalwrite(latchpin,low); else if(i==51){ digitalwrite(sinpin,low); digitalwrite(clk_tcpin,low); digitalwrite(latchpin,low); else if(i==52){ digitalwrite(sinpin,low); digitalwrite(clk_tcpin,low); digitalwrite(latchpin,low); else if(i<57){ digitalwrite(sinpin,low); digitalwrite(clk_tcpin,low); digitalwrite(latchpin,high); 15

else{ digitalwrite(sinpin,low); digitalwrite(clk_tcpin,low); digitalwrite(latchpin,low); De werking hierachter is als volgt: De waarde voor de kleur of helderheid sturen we door via de Serial-IN, voorafgegaan van een mode-bit die 0 is voor de kleur en 1 voor de helderheid. Op de stijgende flank van de Clock_TC puls wordt de waarde van de Serial-IN gesampled. Wanneer alle 25 bits (1 mode-bit + 24 databits) binnen gekomen zijn, zetten we de Latch hoog om deze waardes te laten interpreteren door de TLC5952-chip. De setledbrightness()-functie werkt op dezelfde manier als de sendpattern()-functie, op die ene mode-bit na. 16

Uitlezen van infraroodleds Dit gebeurt aan de hand van de readinfrared()-functie. Deze wordt aangeroepen tijdens de loop() op de Arduino. Wanneer de sensoren detecteren dat er een afdekking plaatsvindt, wordt er een bitstream van 8 bits in het schuifregister gepusht. Elke bit die 1 is, duidt op een afdekking. De totale bitstream wordt langs de PC-kant via de Arduino uitgelezen in een array (arr_infra). In deze functie worden 3 poorten aangesproken: SER: bevat de 8bit bitstream. CLK_S: op de stijgende flank van de CLK_S puls wordt de waarde van de SER gesampled. SH/LD: geeft bij 0 aan dat de waarden naar het schuifregister moeten worden gepusht. Het signaal in de Logic Analyzer ziet er als volgt uit (wanneer geen enkele led afgedekt is): Wanneer bijvoorbeeld led 4 bedekt wordt, krijgen we het volgende signaal: De inhoud van de array wordt via de Serial.print()-functie getoond op het scherm. Via de Serial Monitor krijgen we bijvoorbeeld het volgende te zien als we één voor één de leds bedekken: 17

void readinfrared(){ int arr_infra[]={ 0,0,0,0,0,0,0,0 ; int j=0; for(int i=0;i<18;i++){ if(i%2==0){ if(i==0){ digitalwrite(shldpin,low); digitalwrite(clk_spin,low); delay(.001); else{ digitalwrite(clk_spin,high); if(i==1){ digitalwrite(shldpin,high); if(i>0){ delay(1); arr_infra[j++]=digitalread(ser); Serial.print("Status: "); for(int i=0;i<8;i++){ Serial.print(arr_infra[i]); delay(1000); Serial.print("\n\r"); digitalwrite(shldpin,low); digitalwrite(clk_spin,low); 18

Overzicht printplaat 19

Testresultaten & Opmerkingen Gedurende de uitwerking van ons nieuw prototype ondervonden we een aantal problemen. Het kiezen van een nieuwe weerstand voor de opamp zorgde alvast voor een betere detectie zoals reeds vermeldt. Een 2 de probleem dat we ondervonden was de enorme storing op de voedingsspanning 3.3V. Daar we niet beschikten over een zeer gestabiliseerde voeding kozen we om de data en vermogensstroom te splitsen. Dit had tot gevolg dat een nieuwe voeding van 5V moest voorzien worden op het bordje. De aansluiting van de leds aan de anode werd dus onderbroken en aangesloten op de aparte voedingsspanning van 5V. De TLC5952 kwam tijdens het testen zeer warm. We besloten om de stroom te beperken en R26 te vervangen door een weerstand van 2,2kΩ BLANK, INH, CLR mogen in principe weg want deze worden niet gebruikt. CLR constant aan voedingsspanning hangen. Deze is standaard actief laag waardoor het register niet kan gereset worden. INH moet dan met de gnd geconnecteerd worden, deze is standaard actief hoog. 20

Conclusie De evolutie van onze prototypes kan niet weerlegd worden, hieronder nog een klein overzicht: Proof of concept prototype: Prototype 1.0: De proof of concept en prototype 1.0 werden behandeld in het project van vorig jaar 2010-2011. Er waren echter zodanig veel wijzigingen aan de print gebeurt dat verder werken hierop niet mogelijk was. 21

Prototype 2.0: Protoype 2.2: Met prototype 2.2 hebben we een werkende testopstelling kunnen simuleren, doch door willekeurige slechte contactpunten op de printplaat (door slecht solderen, veel transport, uitpluggen/inpluggen) werd het testen erg bemoeilijkt. Een industrieel geproduceerde printplaat zou met de aanwezige kennis correct moeten werken. 22

Datasheets componenten 74HC244 : http://www.datasheetcatalog.org/datasheet/philips/74hc_hct244_cnv_2.pdf Infraroodled: http://www.futurlec.com/led/inf5940pr.shtml Infrarooddetectieled: http://www.futurlec.com/led/infd5940pr.shtml LM358A: http://www.datasheetcatalog.org/datasheet/fairchild/lm358a.pdf LM339: http://www.datasheetcatalog.org/datasheet/fairchild/lm339.pdf 74HC166: http://www.datasheetcatalog.org/datasheet/philips/74hc_hct166_cnv_2.pdf TLC5952: http://www.ti.com/lit/ds/symlink/tlc5952.pdf RGB-led: http://cat.emscdn.com/components/semi/led/datasheets/bl-l105.pdf 23