smart coffee tablejordi20192020.kogekaschoolverlaters.be/downloads/jordi... · 2020. 6. 11. ·...
TRANSCRIPT
Naam: Jordi Timmers
Klas: T3EI6
Geïntegreerde proef
Smart Coffee Table
2019-2020
T3Ei6
Jordi Timmers Smart Coffee Table 2
Inleiding Ik ben Jordi Timmers. Mijn hobby’s zijn basket, coaching, fitness en
gamen. Ik studeer de richting Elektronica/ICT in Sint-Jozefinstituut Geel. Ik heb deze richting gekozen nadat ik twee jaar Industriële
Wetenschappen heb gedaan in Technisch Heilig-Hartinstituut Tessenderlo. Ik was meer geïnteresseerd in programmeren, elektronica en minder in de
grote industriële machines, mechanica en elektriciteit.
Voor mijn eindwerk heb ik gekozen om een ‘Smart Coffee Table’ te maken. De bedoeling hiervan is dat er op de koffietafel spelletjes gespeeld
kunnen worden. Maar als je geen spelletjes aan het spelen bent kan je
andere thema’s instellen die je standaard koffietafel een beetje mooier zal laten ogen.
T3Ei6
Jordi Timmers Smart Coffee Table 3
Samenvatting Voor mijn eindwerk heb ik een koffietafel gekozen. Deze zal verschillende
programma’s kunnen runnen. De programma’s kan je via een website met data base aansturen. Om te detecteren of er iets op de tafel staat werk ik
met infrarood. Voor de ledjes ga ik een ledstrip gebruiken, die ik van elkaar knip en terug aan elkaar soldeer.
De spelletjes/thema’s kunnen variëren. Hier enkele voorbeelden: Snake,
Tetris, Lichteffecten op muziek,…
In dit document ga ik meer uitleg geven over hoe ik alles heb gedaan en
welke componenten ik heb gebruikt.
T3Ei6
Jordi Timmers Smart Coffee Table 4
Inhoudstabel
Inhoud Inleiding .......................................................................................... 2
Samenvatting ................................................................................... 3
Inhoudstabel .................................................................................... 4
Figurentabel ..................................................................................... 7
1 Prijslijst en Vermogen berekening ................................................. 8
2 Blokschema ................................................................................ 9
2.1 Beschrijving blokschema ......................................................... 9
3 Situatieschema ......................................................................... 10
3 Keuze componenten ..................................................................... 11
4.1 Microcontroller/Microprocessor ............................................... 11
4.1.1 Arduino ....................................................................... 11
4.1.2 Raspberry Pi ................................................................. 11
4.1.3 Mijn keuze ................................................................... 12
4.2 Sensor ................................................................................ 12
4.2.1 Capacitieve touch sensor ............................................... 12
4.2.2 Infrarood zender/ontvanger ........................................... 13
4.2.3 Mijn keuze ................................................................... 13
4.3 Belichting ............................................................................ 14
4.3.1 Individuele RGB’s .......................................................... 14
4.3.2 LED strip I²C/SPI .......................................................... 14
4.3.3 Mijn keuze. .................................................................. 14
4.4 Hout ................................................................................... 15
4.4.1 MDF ............................................................................ 15
4.4.2 Afgewerkt meubelpaneel ................................................ 15
4.4.3 Mijn keuze ................................................................... 15
5 Constructie tafel ........................................................................ 16
5.1 Poten .................................................................................. 16
5.2 Kader .................................................................................. 16
5.3 Raster & latten ..................................................................... 16
6 Eagle to JLCPCB ........................................................................ 17
6.1 Create board ........................................................................ 17
T3Ei6
Jordi Timmers Smart Coffee Table 5
6.2 Eagle board to Gerber-File ..................................................... 17
6.3 Printjes bestellen .................................................................. 19
7 Componenten ........................................................................... 20
7.1 IR333 (IR-Zender) ................................................................ 20
7.2 TSOP 31238 (IR-Ontvanger) .................................................. 21
7.3 APA102C (Ledstrip) ............................................................... 22
8 Raspberry Pi ............................................................................. 23
8.1 OS ...................................................................................... 23
8.2 Installeren ........................................................................... 23
8.3 Hardware ............................................................................ 23
8.4 Bussen ................................................................................ 24
8.4.1 I²C .............................................................................. 24
8.4.2 SPI.............................................................................. 24
9 Programmeertalen ..................................................................... 25
9.1 Python ................................................................................ 25
9.2 HTML (HTML5) ..................................................................... 25
10 Matrix .................................................................................... 26
10.1 Werking matrix .................................................................. 26
10.2 Matrix IR-zenders .............................................................. 27
10.3 Matrix IR-ontvangers .......................................................... 27
11 Code ..................................................................................... 28
11.1 Led strip ........................................................................... 28
11.2 Infrarood ontvangers .......................................................... 29
12 Werking ................................................................................. 30
12.1 Werking IR zender/ontvanger .............................................. 30
12.1.1 Ontvanger .................................................................... 30
12.1.2 Zender ........................................................................ 30
12.2 APA102C protocol .............................................................. 31
13 Prototype ............................................................................... 32
13.1 Eerste jury ........................................................................ 32
13.2 Tweede jury ...................................................................... 32
14 Debugging ............................................................................. 34
14.1 IR Zender frequentie .......................................................... 34
14.1.1 Probleem ..................................................................... 34
14.1.2 Niet-Geslaagde oplossing ............................................... 34
14.1.3 Uiteindelijke oplossing ................................................... 34
T3Ei6
Jordi Timmers Smart Coffee Table 6
14.2 Infrarood licht te fel ........................................................... 34
14.2.1 Probleem ..................................................................... 34
14.2.2 Niet-Geslaagde oplossing ............................................... 34
14.2.3 Uiteindelijke oplossing ................................................... 35
14.3 Matrix detecteert niet ......................................................... 35
14.3.1 Probleem ..................................................................... 35
14.3.2 Niet-Geslaagde oplossing ............................................... 35
14.3.3 Uiteindelijke oplossing ................................................... 35
14.4 Matrix werkt niet ................................................................ 35
14.4.1 Probleem ..................................................................... 35
14.4.2 Niet-Geslaagde oplossing ............................................... 35
14.4.3 Uiteindelijke oplossing ................................................... 36
T3Ei6
Jordi Timmers Smart Coffee Table 7
Figurentabel Figuur 1 - Blokschema ....................................................................... 9
Figuur 2 - Situatieschema ................................................................ 10
Figuur 3 - Arduino ........................................................................... 11
Figuur 4 - Raspberry Pi .................................................................... 11
Figuur 5 - Touch Sensor .................................................................. 12
Figuur 6 - Infrarood Z/O .................................................................. 13
Figuur 7 - Individuele LED ................................................................ 14
Figuur 8 - Led Strip ......................................................................... 14
Figuur 9 - MDF ............................................................................... 15
Figuur 10 - Meubelpaneel ................................................................ 15
Figuur 11 - Poten ............................................................................ 16
Figuur 12 - Kader ........................................................................... 16
Figuur 13 - Lasercut ........................................................................ 16
Figuur 14 - TSOP 31238 .................................................................. 21
Figuur 15 - Python .......................................................................... 25
Figuur 16 – HTML ........................................................................... 25
Figuur 17 - Principe IR Z/O .............................................................. 30
Figuur 18 - Eerste jury .................................................................... 32
Figuur 19 - Twede jury .................................................................... 33
T3Ei6
Jordi Timmers Smart Coffee Table 8
1 Prijslijst en Vermogen berekening
Naam Aantal Prijs enkel Prijs totaal
Raspberry Pi 3B+ 1X 39 euro 39 euro
HC-06 Bluetooth module 1X 6 euro 6 euro
Adressable RGB Lightstrip 1X
25 euro
25 euro
IR 333-H0L10 EVL 50X 0,17 euro 8,5 euro
TSOP 31238 (ingebouwde weerstand) x50 0,57 euro 28,5 euro
Resistor 47 Ohm (IR LED) x20 0,083 euro 1,66 euro
RE 200-C3 x2 4,47 euro 8,96 euro
Hout, verf,… - 26,99 euro 26,99 euro
------------------------
144,61 euro
Naam GEM. Vermogen Max vermogen
Led strip 0.2W/Led 1W/Led
Infrarood Led 0,5W/Led 5W/Led
Infrarood ontvanger 0,00015W/stuk 0,01W/stuk
Raspberry Pi 1,75W 4,75W
-------------------- -------------------
2,5W 11W
T3Ei6
Jordi Timmers Smart Coffee Table 9
2 Blokschema
Figuur 1 - Blokschema
2.1 Beschrijving blokschema Mijn eindwerk vertrekt vanaf een Raspberry Pi. Deze gaat infrarood
sensoren inlezen en aan de hand van die gegevens de led’s aansturen. Wanneer de Raspberry Pi de led’s gaat aansturen, zal afhangen van het
programma dat hij aan het runnen is. Deze programma’s zal ik kunnen inschakelen via een website met een database. In deze database zullen
dus de verschillende programma’s zoals het spelletje ‘Snake’ in opgeslagen worden. Als uitbereiding zou ik een app willen maken
waarmee ik dan de programma’s zou kunnen aansturen, in plaats van een website. Dit is iets wat ik al heel lang heb willen leren en als ik er tijd voor
heb ga ik dit zeker proberen te maken door zelfstudie.
T3Ei6
Jordi Timmers Smart Coffee Table 10
3 Situatieschema
Figuur 2 - Situatieschema
T3Ei6
Jordi Timmers Smart Coffee Table 11
3 Keuze componenten
4.1 Microcontroller/Microprocessor
4.1.1 Arduino
Een Arduino is een microcontroller die in het eerste opzicht is gemaakt om het
gebruik van microcontrollers simpel te maken, maar is ondertussen
uitgegroeid naar een relatief krachtige microcontroller.
Een voordeel van de Arduino is dat hij analoge inputs heeft. In mijn project
zou dit kunnen gebruikt worden om de waarde van de infrarood ontvanger te
lezen.
Het grote nadeel bij een Arduino is dat hij eerder is ontworpen voor simpele en repetitieve programma’s uit te voeren. Een Arduino heeft dan
ook maar 1 core. Multithreaden zal dus al geen optie zijn. Als je de Arduino dus 2 dingen tegelijk wil laten doen zal hij dit dus niet kunnen.
4.1.2 Raspberry Pi
In tegenstelling tot de Arduino, is de
Raspberry Pi eerder een computer (SingleBoardComputer) dan een
microcontroller. Het is ontworpen door de hooggeprezen Universiteit
van Cambridge en word dus ook vooral gebruikt voor educatieve
doeleinden.
Voordelen van de Raspberry Pi zijn uiteraard dat hij 4 cores heeft en dat
die cores dan ook nog eens krachtig
zijn. Dit maakt het mogelijk om complexere programma’s te runnen. Een ander voordeel van de Raspberry
Pi is dat hij echt op een besturingssysteem draait. Meestal word hier Linux voor gebruikt, maar je kan zelfs een oudere versie van Windows er op
draaien.
Een nadeel van de Raspberry Pi is dat hij zonder een ADC (Analoog-Digitaal-Converter), geen analoge data kan inlezen. Al de GPIO pinnen
kunnen alleen een 1 of een 0 inlezen. GPIO staat voor General Purpose
Figuur 3 - Arduino
Figuur 4 - Raspberry Pi
T3Ei6
Jordi Timmers Smart Coffee Table 12
Input/Output. Een ander klein nadeel is dat het laatste model van de Raspberry Pi (3B+) moeite had met de warmte van de processor. Je bent
bijna verplicht om er nog zelf een koelvin op te plaatsen. Als je dit niet doet en je laat een zwaarder programma draaien, zal de CPU
(Central processing unit) veel te warm worden. Als een processor te warm word gaat hij aan ‘thermal throttling’ doen. Wat wil zeggen dat wanneer
de CPU niet meer op een veilige warmte kan blijven (bij het 3B+ model 80°C), de core frequentie van de CPU verminderd zal worden. Als de
frequentie van 1.5GHz naar 1.2GHz gaat, zal de performance van de CPU dalen.
4.1.3 Mijn keuze
Beide keuzes hebben hun voor- en nadelen. Ik heb gekozen om voor dit
project de Raspberry Pi 3B+ te gebruiken. Ondanks het gebrek aan analoge inputs denk ik dat dit toch de betere optie is. Het inlezen van het
analoge signaal van mijn infrarood ontvangers is te omzeilen met het gebruik van een ADC (Analoog Digitaal Converter). Voor dit project kan ik
ook zeker de meerdere cores gebruiken.
4.2 Sensor
4.2.1 Capacitieve touch sensor
Een capacitieve touch sensor is een sensor
die zal detecteren als je huid het aanraakt.
Het voordeel van deze sensor is dat het heel gemakkelijk is om te programmeren
aangezien de output van deze sensor een waarde geeft die 1 of 0 is.
Het grote nadeel hiervan is dat dit alleen
huid detecteert. Als je iets anders over deze sensor legt gaat dit niet werken. Je kan deze
sensor ook niet gebruiken door plexiglas, wel door een dun laagje glas.
Figuur 5 - Touch Sensor
T3Ei6
Jordi Timmers Smart Coffee Table 13
4.2.2 Infrarood zender/ontvanger
Infrarood zender en ontvanger kunnen op verschillende manieren worden gebruikt. De
zender straalt simpelweg infrarood uit. Als je de ontvanger er tegenover zet kan je het
gebruiken als detecteersensor. Leest de
ontvanger geen infrarood in, wil dat zeggen dat er iets tussen staat en is er dus iets
gedetecteerd.
Je kan infrarood ook als een soort afstandsmeter laten werken. Infrarood kan
weerkaatsen op een aantal oppervlakken. Als bijvoorbeeld het licht kaatst tegen een auto in een garage, dan kan de
infrarood ontvanger de lichtintensiteit meten en het zo kalibreren dat de lichtintensiteit gelinkt is aan afstand.
In mijn project zou ik een combinatie van de twee methodes doen. Ik zou mijn zender en ontvanger langs elkaar zetten, aangezien ze beide onder
het plexiglas moeten, maar ik zou geen afstand meten. Ik zou wel op dezelfde manier als met afstand meten, de lichtintensiteit opvragen. Als je
iets op de tafel zet en het IR licht kaatst tegen het voorwerp dat op de
tafel staat, dan gaat de lichtintensiteit dus hoger worden. Als de intensiteit ‘hoog’ is, dan zou mijn programma zeggen dat er iets oplicht en anders
niet. Op die manier kan ik al de verschillende programma’s maken.
4.2.3 Mijn keuze
Voor mijn project heb ik eigenlijk maar 1 keuze als ik plexiglas wil gaan
gebruiken en dat is de infrarood zender/ontvanger. Het is wel iets dat snel problemen met zich mee kan brengen maar het is dan ook goedkoper dan
de touch sensors.
Figuur 6 - Infrarood Z/O
T3Ei6
Jordi Timmers Smart Coffee Table 14
4.3 Belichting
4.3.1 Individuele RGB’s
Voor de belichting van mijn eindwerk kan ik gaan werken met individuele RGB led’s per
‘blokje’ van de tafel.
Het voordeel hiervan zou zijn dat deze relatief makkelijk zijn aan te sturen en dat de prijs
laag ligt.
Het nadeel is dat ik heel veel GPIO pinnen
nodig zou hebben dus dat ik dan nog IO-expanders zou moeten gaan bijkopen wat het
dan weer iets moeilijker en duurder maakt.
4.3.2 LED strip I²C/SPI
Deze led strips zijn individueel bestuurbaar.
Dit wil dus zeggen dat ik elk ledje een andere kleur kan geven ook al is het een
strip. De aansturing hiervan gebeurt met het
I²C protocol of SPI protocol.
Voordelen hiervan zijn dat je niet veel GPIO pinnen nodig hebt aangezien je deze led
strip serieel aanstuurt en dat de helderheid van een led strip sterker is dan van
individuele ledjes.
Het nadeel is wel dat een ‘adressible’ led strip wel relatief veel kost.
4.3.3 Mijn keuze.
Omdat ik met zo min mogelijk IO-expanders wil gaan werken, aangezien
ik deze al moet gebruiken bij mijn zenders en ontvangers, heb ik gekozen om een led strip te gebruiken. De kostprijs ligt wel een heel deel hoger
maar het heeft wel een aantal cruciale voordelen ten opzichte van individuele RGB led’s.
Figuur 7 - Individuele LED
Figuur 8 - Led Strip
T3Ei6
Jordi Timmers Smart Coffee Table 15
4.4 Hout
4.4.1 MDF
MDF of Medium-Density Fibreboard is geperst hout met een middelhoge dichtheid. Deze
middelhoge dichtheid zorgt er wel voor dat deze plaat moeilijk te verven is aangezien het
hout verf kan opnemen. Dit is te omzeilen door er eerst een laag primer over te doen. Primer
zorgt er voor dat de verf wel op het hout blijft.
Het voordeel van MDF is dat het een relatief glad hout is zonder houtnerven. Dit is mooi als
je zoals mij, het hout wit wil verven. MDF kost ook niet veel.
Het nadeel is dat het niet altijd het
gemakkelijkste hout is om mee te werken
aangezien MDF dus verf, etc.. kan opnemen.
4.4.2 Afgewerkt meubelpaneel
Een andere optie zou zijn om een afgewerkt
meubelpaneel te kopen en op maat te laten zagen.
Het voordeel is dat ik deze niet meer moet
verven en het me dus tijd zou besparen.
Maar het nadeel is wel, als je het hout laat
zagen dan heb je houtkleurige zijkanten. Hier moet je dan weer iets over maken dat
dit bedekt, wat op zich niet zo erg is, maar het steekt dan aan beide kanten weer een
aantal millimeter naar buiten wat mij dan weer irriteert.
4.4.3 Mijn keuze
Ik heb, ondanks het de iets moeilijkere optie is, toch gekozen om met
MDF te gaan werken omdat ik denk dat ik hiermee een mooier resultaat kan behalen dan met afgewerkte meubelpanelen.
Figuur 9 - MDF
Figuur 10 - Meubelpaneel
T3Ei6
Jordi Timmers Smart Coffee Table 16
5 Constructie tafel
5.1 Poten Om de poten te maken heb ik een lange tuinbalk
gekocht. Hier heb ik 4 gelijke stukken van afgezaagd en daarna heb ik ze geveild en
opgeschuurd. Omdat ik het hout te licht vond, heb ik er nog twee lagen kleurvernis op gedaan. Dit
zorgt er voor dat het hout gladder aanvoelt en algemeen beter is afgewerkt.
5.2 Kader Om het kader van de tafel te maken heb ik een
grote MDF plaat laten zagen in de afmetingen die ik nodig had. Ik heb er 2 lagen primer over gedaan
zodat de witte verf beter blijft. Daarna heb ik de platen gewoon wit geverfd.
5.3 Raster & latten Het raster en de latten om de
vakjes te onderscheiden is ook MDF hout. Ik heb deze beide
laten lasercutten. Ze zijn allemaal uitgesneden uit platen
van 3mm dik.
Figuur 11 - Poten
Figuur 12 - Kader
Figuur 13 - Lasercut
T3Ei6
Jordi Timmers Smart Coffee Table 17
6 Eagle to JLCPCB
6.1 Create board
Maak je board zoals je ze normaal zou maken. Let wel op de kabeldiktes en dat deze niet te dicht bij elkaar liggen. Anders kan dit problemen
geven bij het maken van de printjes
6.2 Eagle board to Gerber-File
Open de ‘CAM Processor’.
T3Ei6
Jordi Timmers Smart Coffee Table 18
Kies in de linker balk ‘Gerber’ en selecteer ‘Gerber RS247-X’
als output-type
Klik nu op ‘Process Job’. Al de nodige Gerber files
worden nu aangemaakt. Om het jezelf makkelijk te maken kan je best direct een map aanmaken om de
Gerber files in te zetten.
Als je ook met drill files
werkt moet je na de gerber files, ook nog
‘Excellon files’ aanmaken. Dit kan je doen door in de
linkerbalk ‘Drill’ aan te klikken en opnieuw op
‘Process Job’ klikken.
T3Ei6
Jordi Timmers Smart Coffee Table 19
Je zou nu volgende files moeten hebben:
• *.cmp (Copper, component side) • *.drd (Drill file)
• *.dri (Drill Station Info File) – Meestal niet nodig • *.gpi (Photoplotter Info File) – Meestal niet nodig
• *.plc (Silk screen, component side) • *.pls (Silk screen, solder side)
• *.sol (Copper, solder side)
• *.stc (Solder stop mask, component side)
• *.sts (Solder stop mask, solder side)
Maak van je gerber files nu een .ZIP of
.RAR (Rechter muisklik op map)
6.3 Printjes bestellen Ga naar https://jlcpcb.com/
Kies het aantal
printjes, layers,..
Klik op ‘Add your gerber file’ en selecteer je
.ZIP op .RAR map.
Kijk nog een laatste keer na of al de gegeven informatie klopt en dan kan
je de printjes bestellen!
T3Ei6
Jordi Timmers Smart Coffee Table 20
7 Componenten
7.1 IR333 (IR-Zender)
Maximum waardes:
Karakteristieken:
T3Ei6
Jordi Timmers Smart Coffee Table 21
7.2 TSOP 31238 (IR-Ontvanger)
Maximum waardes:
Karakteristieken:
1 = GND, 2 = Vs, 3 = OUT:
Figuur 14 - TSOP 31238
T3Ei6
Jordi Timmers Smart Coffee Table 22
7.3 APA102C (Ledstrip)
Specificaties:
Connecties:
Protocol: Zie bladzijde 30.
T3Ei6
Jordi Timmers Smart Coffee Table 23
8 Raspberry Pi
8.1 OS
De Raspberry Pi die ik gebruikt draait op het besturingssysteem ‘Raspbian’. Dit is een versie van Linux die speciaal is ontworpen voor
Raspberry Pi’s. Ik heb Raspbian geinstalleed doormiddel van een image die we van school hebben gekregen. Hier staan de meeste instellingen al
juist en een aantal programma’s al op geïnstalleerd zoals bijvoorbeeld WiringPi (Library voor het besturen van GPIO pinnen).
8.2 Installeren
Webserver installeren:
• sudo apt-get install apache2 • sudo apt-get install php5
• sudo service apache2 restart
Bestanden die moeten aangepast worden om vlot met Wi-Fi te werken: • etc/dhcpcd.conf
• etc/wpa_supplicant/wpa_supplicant.conf
Pc programma’s: • Sublime Text Editor
• Putty • Filezilla
8.3 Hardware De Raspberry Pi versie die ik gebruik is de 3B+.
Dit zijn de specs: • SoC: Broadcom BCM2837B0 quad-core A53 (ARMv8) 64-bit @
1.4GHz • GPU: Broadcom Videocore-IV
• RAM: 1GB LPDDR2 SDRAM
• Networking: Gigabit Ethernet (via USB channel), 2.4GHz and 5GHz 802.11b/g/n/ac Wi-Fi
• Bluetooth: Bluetooth 4.2, Bluetooth Low Energy (BLE) • Storage: Micro-SD
• GPIO: 40-pin GPIO header, populated • Ports: HDMI, 3.5mm analogue audio-video jack, 4x USB 2.0,
Ethernet, Camera Serial Interface (CSI), Display Serial Interface (DSI)
• Dimensions: 82mm x 56mm x 19.5mm, 50g
T3Ei6
Jordi Timmers Smart Coffee Table 24
8.4 Bussen
8.4.1 I²C
I²C is een bus die werkt op basis van twee buslijnen, namelijk SDA (serial data) en SCL (serial clock). Dataoverdracht werkt al volgt:
• Data verzenden wordt geïnitieerd met een startbit.
• Nuttige data wordt verzonden. • Als de overdracht compleet is wordt een stopbit.
• Ten einde valse detecties te voorkomen wordt het niveau van de SDA veranderd op de dalende flank van SCL.
8.4.2 SPI
SPI is een bus die werkt op basis van drie lijnen:
• SCLK : seriële clock: wordt geleverd door de master.
• MOSI : Master output slave input: op deze lijn wordt de data verzonden die de output van de master en de input van de slave is.
• MISO: Master input slave output: de data van de slave wordt hierover naar de master gestuurd.
• SS: Slave select: Deze lijn wordt actief laag aangestuurd. De lijn voor de geselecteerde slave zal laag zijn
Een van de grote voordelen van SPI is dat het full duplex is. Er kan dus
simultaan gezonden en ontvangen worden. Als nadeel heeft SPI wel dat hij 4 draden nodig heeft terwijl I²C er maar 2 nodig heeft.
T3Ei6
Jordi Timmers Smart Coffee Table 25
9 Programmeertalen
9.1 Python Python is een van de meest gebruikte
programmeertalen van de wereld. De taal word gebuikt. De taalconstructies en
objectgeoriënteerde aanpak zijn bedoeld om programmeurs te helpen duidelijke, logische code
te schrijven voor kleine en grote projecten.
In mijn eindwerk gebruik ik python als hoofdtaal. Ik zal met python al mijn actoren en sensoren inlezen en
aansturen. Ook zal mijn Flask server werken met python. Hiermee ga ik informatie van python naar
de html code sturen.
9.2 HTML (HTML5)
Hypertext Markup Language oftewel HTML is de standaard opmaaktaal voor documenten ontworpen
om te worden weergegeven in een webbrowser. Meestal word HTML ondersteund door Cascading
Style Sheets (CSS) en een scripttaal zoals
JavaScript of PHP.
In mijn project gebruik ik HTML in combinatie met CSS om mijn website op te maken en te lay-outen.
Een deel van de informatie die de HTML code zal weergeven krijgt hij van de python code. (zie 9.1)
Figuur 15 - Python
Figuur 16 – HTML
T3Ei6
Jordi Timmers Smart Coffee Table 26
10 Matrix
10.1 Werking matrix Een matrix is een aaneenschakeling van inputs en/of outputs. Hiermee
kan je inputs en/of outputs mee aansturen of inlezen zonder al te veel kabels te hoeven gebruiken. Een voorbeeld, als je 9 drukknoppen wil
inlezen zou je normaal gezien 27 kabels nodighebben. 9 als voeding, 9 als GND en 9 als data.
Je zou ook een matrix kunnen maken van 3 op 3 drukknoppen. Je hebt
dan 3 kabels nodig voor voeding, 3 als GND, en 3 als data. Hetzelfde principe kan ook toegepast worden op uitgangen, dit is een voorbeeld van
een matrix van 9 led’s.
Figuur 17 - Matrix Led's
Als je bij dit schema led 5 zou willen laten branden voed je de 2de pin en trek je de 2de pin naar de GND. Natuurlijk zou dit in de realiteit met
voorschakelweerstanden moeten gebeuren. Als er altijd maar 1 led tegelijkertijd moet branden kan je gewoon werken met 3
voorschakelweerstanden die je bij de voedingen zet.
T3Ei6
Jordi Timmers Smart Coffee Table 27
10.2 Matrix IR-zenders
In mijn eindwerk heb ik twee matrixen. De eerste is die van de IR-zenders. Deze is hetzelfde opgebouwd als het schema op de vorige
pagina. Het enige verschil is dat ik werk met een 9 op 5 matrix en ik heb voor elke led individueel nog een voorschakelweerstand.
10.3 Matrix IR-ontvangers Voor mijn ontvangers moet ik natuurlijk werken met een extra lijn om te
weten of de ontvangers een signaal ontvangen of niet.
Figuur 18 - Matrix Schakelaars
T3Ei6
Jordi Timmers Smart Coffee Table 28
11 Code
11.1 Led strip
Om in python met de led strip te communiceren maak ik gebruik van een
library. Om deze te installeren moet je dit in de shell ingeven:
• sudo pip3 install apa102-pi
Nu kunnen we deze library gaan gebruiken in python. Om de library te importeren in python gebruik ik volgende code:
• from apa102_pi.driver import apa102
Het enige wat we nu nog moeten doen om de strip aan te sturen is er voor zorgen dat python onze strip kent. We gaan hier ook meegeven
hoeveel leds je hebt. In mijn geval zijn dit er 45. Ook zeggen we hier dat de volgorde van de kleuren R (Red), G (Green), B (Blue) is. Als de kleuren
van de ledstrip zouden omgedraaid zijn zou je hier bijvoorbeeld ook ‘bgr’ kunnen zetten om het op te lossen.
• strip = apa102.APA102(num_led=150, order='rgb')
Om te beginnen laat ik eerst al de led’s uit gaan. Deze stap is niet persé
nodig als je het vorige programma altijd goed hebt verlaten, maar ik zet het er toch bij uit zekerheid. Op deze manier ben ik er zeker van dat ik
met een led strip start dat alle led’s uit zijn.
• strip.clear_strip()
Nu kan ik de leds individueel aansturen. (de library gebruikt pixel als
benaming voor 1 led) Je moet met deze functie 2 dingen meegeven: De nummer van de led die je aanstuurt (0-45), en de kleur. De kleur wordt
wel hexadecimaal aangegeven. Alleen groen is bijvoorbeeld ‘0x00FF00’. Dit wil wel zeggen dat je in totaal alle 16,777,216 RGB kleuren kan
maken.
• strip.set_pixel_rgb(2, 0x00FF00) #Groen • strip.set_pixel_rgb(5, 0x0000FF) # Blue
Nu als je deze functie doorloopt zal je merken dat de ledjes nog niet
oplichten. Dit komt omdat deze objecten in een buffer gaan geduwd worden van de led strip. Om de led strip dan te laten oplichten moet je
volgende code gebruiken
• strip.show()
T3Ei6
Jordi Timmers Smart Coffee Table 29
Nu worden al de objecten die in de buffer staan de led strip echt laten oplichten. In mijn code zorg ik er voor dat elke ‘pixel’ de gewenste kleur in
de buffer heeft zitten voor ik de led strip laat oplichten.
Tot slot moeten we voor we de code afsluiten, de verbindingen voorbereiden voor het volgende gebruik. Hiervoor gebruiken we deze code
als we het programma gaan afsluiten.
• strip.cleanup()
Dit is dus alles wat ik gebruik om de led strip aan te sturen. Welke led ik welke kleur geef zal af hangen van het programma of spel dat op die
moment aan het runnen is.
11.2 Infrarood ontvangers
De ontvangers die ik gebruik geven als output 5V of 0V, afhankelijk van als hij een 38kHz signaal ontvangt of niet. (5V als hij niks ontvangt) Dit is
dus simpel in te lezen. Ik laat de uitgang van de ontvangers rechtstreeks naar mijn Raspberry Pi gaan.
• if GPIO.input(Pinnummer):
doorloop functie
• else:
doorloop functie
Als ik dit per kolom van mijn matrix doe is dat alles wat ik nodig heb on
de ontvangers in te lezen.
T3Ei6
Jordi Timmers Smart Coffee Table 30
12 Werking
12.1 Werking IR zender/ontvanger De bedoeling is dat er gedetecteerd word als er iets op de tafel staat/ligt.
Zoals al aangehaald heb ik gekozen om dit te doen met een infrarood zender en ontvanger. De IR zender (IR led) zal naar boven schijnen. Als
er zich niets bevind, zal er niets gedetecteerd worden. Als er wel iets staat of ligt boven de led, zal het infrarood signaal weerkaatst worden. De
ontvanger gaat dan het signaal ontvangen en dan kunnen we spreken van een gedetecteerd voorwerp.
Figuur 19 - Principe IR Z/O
12.1.1 Ontvanger
De ontvanger die ik heb gekozen is de TSOP31238. Dit is eigenlijk een ontvanger voor afstandsbedieningen van bijvoorbeeld Tv’s. Dit heeft voor-
en nadelen. Deze ontvanger leest niet zomaar een infrarood signaal in. Het leest pulsen in op 38kHz, dit zorgt er voor dat het moeilijker is om het
juiste signaal te bekomen. Het grote voordeel hiervan, is dat zonlicht, wat heel het lichtspectrum bevat, geen enkel invloed zal hebben op mijn
ontvanger.
12.1.2 Zender
De zender die ik heb gekozen is een simpele IR LED. Ik heb deze gekozen
met typenummer IR333. Zoals aangehaald moet ik deze aansturen tegen 38kHz. In plus minus 0.00002 seconden moet de led dus 1 periode
hebben doorlopen. De enige manier om dit te doen is met hardware PWM (Pulse-Width Modulation). Ik gebruik een ULN in combinatie met een
T3Ei6
Jordi Timmers Smart Coffee Table 31
mosfet type IRL530. Ik heb maar 1 hardware pin dus ik trek al mijn led’s 38000 keer per seconde naar de GND.
12.2 APA102C protocol Eerst en vooral start het protocol met een start frame van 32 bits. Deze
frame bestaat uit alleen maar nullen. Vanaf dan gaan er led frames worden verstuurd. Een led frame start altijd met 3 enen, vervolgens 5
algemene bits die gebruikt worden voor de intensiteit. Hierna zullen er voor elke kleur (rood, groen, blauw) 8bits zijn voorzien.
Deze informatie zal worden verwerkt door middel van een soort
schuifregister. Ik zeg een soort schuifregister omdat deze led strip niet werkt zoals de schuifregisters van de iets bekendere ws2812b led strips.
Een APA102C led ontvangt een SPI signaal en zal ook een SPI terug
uitzenden naar de volgende led. De data lijn is alleen nuttig als de clocklijn stijgend is. Dit zou normaal een probleem zijn. Het simpelweg
invoeren van het ingangssignaal naar de uitgang zou niet genoeg tijd
overlaten om de binnenkomende gegevens te checken en eventueel wijzigingen te maken. Dit zou kunnen resulteren in vervelende
omstandigheden.
Om dit probleem op te lossen is de output van de APA102C met een halve clock vertraagd. dit wordt gedaan door het binnenkomende kloksignaal
aan de uitgang om te keren. De gegevensuitvoer wordt doorgestuurd tijdens de stijgende flank van de inkomende klok, maar wordt alleen
geldig voor het volgende apparaat aan de stijgende flank van de uitgaande klok. Dit is heel handig omdat er nu geen interne clockbron
nodig is.
T3Ei6
Jordi Timmers Smart Coffee Table 32
13 Prototype
13.1 Eerste jury
Voor onze eerste evaluatie wou ik, zonder dat ik al alles af had, de jury toch een goed idee geven over hoe mijn tafel er uit zou zien. Ik heb mijn
tafel zelf laten zien en een miniatuurversie gemaakt van het praktische.
Mijn
eerste prototype bestond uit een miniatuurtafel die was gelasercut. Hierin zaten twee modules, gemaakt met een printplaat die ik zelf had
gesoldeerd, die bestond uit een infrarood zender en ontvanger en ook een led. Als je een voorwerp boven op het tafeltje zette dan lichtte de led op.
13.2 Tweede jury
Voor mijn tweede jury wou ik de tafel in zijn geheel laten zien. Natuurlijk kan dan nog niet alles werken want dan zou alles al af zijn, maar ik wou
toch een goed idee geven van wat de mogelijkheden waren.
Figuur 20 - Eerste jury
T3Ei6
Jordi Timmers Smart Coffee Table 33
Figuur 21 - Tweede jury
Fysiek was de tafel volledig af. Alle printjes zaten in de tafel, de plexiglas plaat lag er op en de led strip was ook al geïnstalleerd. Het enige wat niet
werkte was de matrix. Ik heb 1 vakje laten detecteren of er iets op lag of niet. Als er iets op lag kwam er een lichteffect tevoorschijn. Het effect kon
je kiezen op de website.
T3Ei6
Jordi Timmers Smart Coffee Table 34
14 Debugging
14.1 IR Zender frequentie
14.1.1 Probleem
Toen ik begon met mijn project kwam ik al direct mijn eerste probleem tegen. Ik moet mijn led’s sturen tegen 38kHz, maar ik heb maar 1
hardware-pwm pin op mijn Raspberry Pi.
14.1.2 Niet-Geslaagde oplossing
Ik heb geprobeerd om dezelfde frequentie te sturen met zowel software
PWM en DMA (Direct Memory Acces) PWM. Beide werkten niet. Na wat opzoekwerk heb ik dus ondervonden dat onze Pi niet tegen die snelheid
softwarematig kan sturen.
14.1.3 Uiteindelijke oplossing
Ik kan de led’s niet allemaal gelijk aansturen want ik heb maar 1 hardware pin. Maar met behulp van een mosfet kan ik wel de led’s
allemaal samen naar de GND trekken. Dus ik gebruik nu een ULN die aan de GND hangt door middel van de mosfet. Van mijn hardware pin stuur ik
een signaal van 38kHz wat er dus voor gaat zorgen dat als de ULN pin van de LED hoog wordt gemaakt dat de LED 38 duizend keer per seconde naar
de GND wordt getrokken.
14.2 Infrarood licht te fel
14.2.1 Probleem
Wanneer ik mijn eerste prototype heb gemaakt merkte ik dat het
infrarood licht te fel was. Dit zorgde er voor dat als je een voorwerp er ver boven hield, de ontvanger het licht al detecteerde. Dit kan ook als gevolg
hebben dat als je het licht schuin zou weerkaatsen dat je infrarood
ontvangers van andere vakjes kan laten afgaan. Dit is uiteraard niet de bedoeling.
14.2.2 Niet-Geslaagde oplossing
Ik dacht er aan om de duty cycle van mijn led aan te passen zodat de led minder aan staat per periode. Dit zou als resultaat moeten geven dat de
lichtintensiteit daalt. Ik kan dit niet doen met de ontvanger die ik gebruik. Om de ontvanger iets in te laten lezen moet je led tegen 38kHz laten
pulsen. De duty cycle moet 50% zijn dus kan ik deze niet veranderen met
de ontvanger die ik gebruik.
T3Ei6
Jordi Timmers Smart Coffee Table 35
14.2.3 Uiteindelijke oplossing
Ik had eerst een weerstand van 50 Ohm gebruikt om voor mijn infrarood led te zetten aangezien deze toch 100mA kan trekken. Ik heb de
weerstandswaarde verhoogd tot 470 Ohm zodat er een kleinere stroom gaat vloeien en de led dus minder fel oplicht.
14.3 Matrix detecteert niet
14.3.1 Probleem
De matrix van mijn ontvangers detecteerde niet of er iets boven de
ontvanger lag of niet. Zonder de matrix werkte dit niet maar in de matrix niet.
14.3.2 Niet-Geslaagde oplossing
Ik dacht eerst dat dit aan de ontvanger zelf lag omdat deze hoog zijn
(Vcc) wanneer er niks gedetecteerd wordt. Ik heb dan een multimeter gebruikt om te kijken of er iets veranderde wanneer ik een 38kHz signaal
stuur.
14.3.3 Uiteindelijke oplossing
Eerst was ik de ontvanger aan het voeden door een UTC62783 en de
negatieve kant van de ontvanger gewoon aan de GND te hangen. De matrix werkt alleen als ik de pluspool aan de 5V hang en de minpool naar
een ULN2803A laat gaan, die dan zal bepalen of deze ook echt naar de
GND wordt getrokken of niet.
14.4 Matrix werkt niet
14.4.1 Probleem
Ik heb eerst geprobeerd om een simpele 1x3 matrix op te bouwen, maar
heb zelfs dit in stappen gedaan. Wanneer ik 1x1 stuurde werkte dit perfect. Wanneer ik 1x2 stuurde werkte alleen de tweede en wanneer ik
1x3 stuurde werkte geen enkele meer.
14.4.2 Niet-Geslaagde oplossing
Ik heb geprobeerd verschillende dingen te veranderen in mijn code (tijd aan, tijd uit, tijd tussen laten). Maar geen enkele van deze dingen bleek te
werken.
T3Ei6
Jordi Timmers Smart Coffee Table 36
14.4.3 Uiteindelijke oplossing
Ik heb een condensator tussen de 5V en de GND gezet. Dit is een tantaal condensator. Sinds dien werkt elke matrix. Dus ook de 5x9