Ingenieursvaardigheden Design en prototyping

ing. Y. Verbelen

Vrije Universiteit Brussel Bachelor Industriele¨ Wetenschappen Nijverheidskaai 170, B-1070 Anderlecht [email protected]

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/. v1.3 Voorwoord

Dat de meest elementaire wetten van de elektriciteit en mechanica al eeuwenlang gekend zijn, is toe te schrijven aan hun elegante eenvoud. Al in 1827 ontdekte de Duitse fysicus Georg Simon Ohm dat er een eenvoudig lineair verband bestaat tussen de spanning over een weerstand en de stroom erdoor, nl. de resistiviteit van de weerstand zelf. Een simpel maar krachtig concept, nu gekend als de Wet van Ohm, dat dagelijks door talloze elektronici wordt toegepast. Kirchhoff ontdekte soortgelijke, eenvoudige ver- banden tussen spanningen en stromen in schakelingen, en deze fundamentele wetten hoefden de laatste 200 jaar niet meer herzien te worden.

De realiteit is helaas iets ingewikkelder. De reden waarom vergelijkingen in elektronicahandboeken er zo eenvoudig uitzien, is dat ideale componenten in ideale omstandigheden worden verondersteld: draden die componenten verbinden hebben geen weerstand, de temperatuur blijft steeds constant en interferentie met andere elektromagnetische systemen is onbestaande. In een reele¨ schakeling hebben draden of breadboards echter wel´ een bepaalde weerstand, de capaciteit van condensators hangt af van de spanning erover en hun levensduur, de contacten van schakelaars trillen en oxideren aan de lucht en elk onge¨ısoleerd metalen object in de schakeling werkt als een antenne die ruis van omringende appa- raten of verlichting oppikken, enzovoort. Helaas zijn de meeste van deze factoren onbekend en is het dus moeilijk om ze mee te nemen in berekeneningen of simulaties. Gelukkig is de invloed van deze onbekende factoren doorgaans te minimaliseren door schakelingen goed te ontwerpen, maar zelfs dan nog is er slechts e´en´ manier om zeker te weten of een schakeling werkt zoals je in gedachten hebt: een prototype bouwen en uittesten in het lab.

Totdat je voldoende ervaring hebt opgedaan om schakelingen te kunnen ontwerpen die van de eerste keer werken, zal je eerst ve´el´ schakelingen op breadboard moeten bouwen, uittesten, en je ontwerpen aanpassen. Praktische elektronica neemt nu eenmaal flink wat tijd in beslag om onder de knie te krijgen. Maar eens je de basisvaardigheden van prototyping beheerst, heb je toegang tot een wereld met quasi ongelimiteerde mogelijkheden.

Beschouw deze nota’s eerder als een bundel tips en technieken dan als een syllabus. Laat het geen naslagwerk zijn dat op een stoffige zolder terechtkomt, maar een gids die je actief consulteert als je zelf aan de slag gaat in het lab.

Deze nota’s zijn enkel tot stand kunnen komen dankzij de constructieve feedback en inzichten van Ann Peeters, Lieven Standaert en Laurent Segers, waarvoor dank.

Het staat eenieder vrij om deze syllabus geheel of gedeeltelijk te repliceren en te verspreiden voor niet-commerciele¨ doeleinden zoals vastgelegd in de Creative Commons BY-NC-SA 4.0 International licentie. Vrije toegang tot informatie behoort een basisrecht te zijn voor iedereen.

Anderlecht, augustus 2015 Y. Verbelen

Inhoudstafel

Voorwoord i

1 Inleiding 1 1.1 Project ...... 1 1.1.1 Specificaties ...... 1 1.2 Situering ...... 1 1.3 Materiaal ...... 2 1.3.1 Recuperatiemateriaal ...... 2 1.3.2 Webshops ...... 2 1.3.3 Uitrusting ...... 3 1.4 Vorm en evaluatie ...... 4

2 Elektronica 5 2.1 Modulair ontwerp ...... 5 2.2 Het display ...... 5 2.2.1 Zevensegmentendisplays ...... 6 2.2.2 LED-displays ...... 6 2.2.3 Vacuumfluorescentiedisplays¨ ...... 6 2.2.4 Nixiebuizen ...... 7 2.2.5 Aansturing ...... 8 2.2.5.1 Multiplexing ...... 8 2.2.5.2 Shiftregisters ...... 8 2.2.5.3 Charlieplexing ...... 8 2.3 Het bedieningspaneel ...... 9 2.3.1 Drukknoppen ...... 9 2.3.2 Draaischakelaars ...... 9 2.3.3 Joysticks ...... 9 2.3.4 Touchscreens ...... 10 2.3.5 Potentiometers ...... 10 2.3.6 Debouncing ...... 10 2.4 De klok ...... 10 2.4.1 Real Time Clock ...... 11 2.4.2 Microcontroller ...... 11 2.4.3 Synchronisatie ...... 11 2.5 De buzzer ...... 11 2.5.1 Piezobuzzers¨ ...... 11 2.5.2 Luidsprekers ...... 12 2.6 De voeding ...... 12 2.6.1 Batterijen ...... 12 2.6.2 Netadapter ...... 13 2.6.3 Netvoeding ...... 14 2.6.4 Spanningsregulators ...... 14 2.7 De logica ...... 15

3 Microcontrollers programmeren 17 3.1 De Uno ...... 17 3.1.1 De voeding ...... 19 3.1.2 Randapparatuur ...... 19 3.2 De toolchain ...... 20 3.2.1 C/C++ ...... 20 3.2.2 Shields en bibliotheken ...... 21 3.3 Programmastructuur ...... 21 3.3.1 Declaraties ...... 21 3.3.2 Initialisaties ...... 23 3.3.3 Hoofdroutine ...... 24 3.4 Hardwarecomponenten ...... 25 3.4.1 Digitale pinnen ...... 25 3.4.2 Analoge pinnen ...... 26 3.4.3 Pulsbreedtemodulators ...... 27 3.4.4 Seriele¨ communicatie ...... 28 3.4.5 Interrupts ...... 31 3.4.6 Timers ...... 33 3.5 Documentatie ...... 34 3.5.1 Commentaar ...... 34 3.5.2 Header ...... 35 3.6 Ontwerpcyclus ...... 35

4 PCB-ontwerp 37 4.1 Inleiding ...... 37 4.2 CircuitMaker ...... 38 4.2.1 Installatie ...... 38 4.2.2 De “cloud” ...... 39 4.3 Schema’s tekenen ...... 40 4.4 De PCB ...... 48 4.5 Productie ...... 52 4.5.1 Gerbers ...... 52 4.5.2 3D-model ...... 52

5 Bekabeling 53 5.1 Inleiding ...... 53 5.2 Kabels ...... 53 5.2.1 Structuur ...... 53 5.2.2 Isolatie ...... 54 5.2.3 Dikte ...... 54 5.3 Kabeltypes ...... 55 5.3.1 Bandkabel ...... 55 5.3.2 Coaxkabel ...... 56 5.3.3 UTP-kabel ...... 56 5.3.4 Bundels ...... 56 5.4 Connectors ...... 56 5.4.1 Terminologie ...... 57 5.4.1.1 Geslacht ...... 57 5.4.1.2 Pinafstand ...... 57 5.4.1.3 Type ...... 57 5.4.1.4 Orientatie¨ ...... 58 5.4.2 Printkroonstenen ...... 58 5.4.3 JST-connectors ...... 59 5.4.4 Waferconnectors ...... 59 5.4.5 Headers ...... 60 5.4.5.1 Arduino ...... 61 5.4.5.2 Stacking ...... 61 5.4.6 D-sub-connectors ...... 62 5.4.7 IDC-connectors ...... 63 5.4.8 Standaarden ...... 64 5.5 Kabels maken ...... 64 5.5.1 Strippen ...... 65 5.5.2 Krimpen ...... 65 5.5.3 Isoleren ...... 65 5.5.4 Kabelbomen ...... 66 5.6 Bekabelingstechnieken ...... 66

6 Solderen 69 6.1 Inleiding ...... 69 6.2 Soldeerbout ...... 69 6.3 Soldeerverbindingen maken ...... 70 6.4 Desolderen ...... 72 6.4.1 De tang ...... 72 6.4.2 Desoldeerpomp ...... 72 6.4.3 Litze ...... 72 6.5 Oververhitting ...... 73 6.6 Veiligheid ...... 73

7 Behuizing 75 7.1 Inleiding ...... 75 7.2 Ontwerpvolgorde ...... 75 7.3 Mechanisch ontwerp ...... 75 7.3.1 3D CAD software ...... 76 7.3.2 Rapid prototyping ...... 76 7.3.2.1 Lasercutters ...... 76 7.3.2.2 Templates ...... 77 7.3.2.3 3D-printers ...... 78 7.3.3 Bereikbaarheid ...... 78

1 Inleiding

Things get worse under pressure.

Murphy’s Law of Thermodynamics

1.1 Project

Een´ van de onderdelen van het studiedeel Ingenieursvaardigheden is zelfstandig een project uitwerken waarin je je kennis en vaardigheden inzake elektronica, informatica en mechanica zal moeten toepassen. Het doel van deze opdracht is een wekker te ontwerpen en te bouwen, met alle functionaliteiten die je van een wekker redelijkerwijze kan verwachten. We willen je echter ook de mogelijkheid geven creatief te zijn, in de mate dat de beschikbare tijd en budget dit toelaat.

1.1.1 Specificaties

De opdracht voor het project, en meteen ook de minimumvereiste, luidt als volgt:

Ontwerp een elektronische wekker die de correcte tijd weergeeft op een manier die in het donker zicht- baar is. Via een wekkerfunctie moet een tijdstip kunnen ingesteld worden waarop de wekker moet “aflopen”, en deze gebeurtenis moet met een duidelijk hoorbaar audiosignaal gesignaleerd worden aan de gebruiker. Er moet ook een “snooze”-functie voorzien zijn waarmee het aflopen van de wek- ker onderbroken en met 10 minuten verlaat wordt. De wekker moet visueel aangeven of het alarm op staat of niet.

Uiteraard ben je vrij om naar eigen smaak extra functionaliteit toe te voegen.

1.2 Situering

Het project situeert zich als een opdracht die complementair is bij de WPO’s Basiselektronica. In de WPO’s Basiselektronica wordt de focus gelegd op de individuele componenten en hun eigenschappen, terwijl je ze in dit project zal moeten toepassen in concrete schakelingen.

Daarnaast maak je ook kennis met microcontrollers als intelligente digitale bouwstenen in moderne elektronische schakelingen. Hiervoor wordt de Arduino Uno ge¨ıntroduceerd als low cost, gebruiks- vriendelijk ontwikkelbordje, de ATmega328p als eerste microcontroller, en de taal C als programmeer- 2 DESIGNENPROTOTYPING ing. Y. Verbelen taal voor microcontrollers.

In de volgende hoofdstukken komen deze onderwerpen aan bod:

• basiscomponenten van een wekker;

• ontwerpideeen¨ voor je eigen wekker;

• een introductie tot C/C++ als programmeer taal voor het Arduinoplatform;

• printplaatontwerp in CircuitMaker;

• connectors en bekabeling;

• soldeer- en desoldeertechnieken.

1.3 Materiaal

De mogelijke manieren om een wekker te ontwerpen zijn eindeloos, en hoewel het labo Elektronica een ruime selectie aan componenten beschikbaar heeft, is dat slechts een fractie van het gigantische assortiment aan componenten dat commercieel beschikbaar is. Zo zijn er bijvoorbeeld enkele types LED-displays in voorraad, maar de meeste zal je extern moeten gaan zoeken.

1.3.1 Recuperatiemateriaal

Afgedankte toestellen zoals printers, scanners, elektronisch speelgoed en gadgets, laptops, microgolf- ovens enz. zijn een dankbare bron van de ietwat exotischere componenten die je niet in de voorraad van het labo Elektronica zal aantreffen. Besef dat in een elektronische schakeling e´en´ of een klein aantal defecte componenten ertoe leidt dat een apparaat niet meer naar behoren werkt, en in het containerpark wordt gedumpt. Veruit de meeste onderdelen werken echter nog perfect en kan je dus hergebruiken in je eigen schakelingen. In het laatste hoofdstuk worden enkele tips aangereikt om elektronische compo- nenten van bestaande printplaten af te solderen.

In zowel het labo Elektronica als in het fablab vind je bakken met recuperatieprintplaten, waar je naar believen componenten uit kan vissen. Het fablab huisvest daarnaast nog een extra rek afgedankte apparaten die je eveneens kan open schroeven om er componenten uit te hergebruiken. De enige voor- waarde is dat alles nadien terug wordt opgeruimd.

Elektronica hergebruiken is goedkoper en´ ecologischer dan recycleren, en je kan dus op een hogere score rekenen als je op een verantwoorde manier onderdelen van bestaande toestellen nuttig hergebruikt in je wekker.

1.3.2 Webshops

Als je op zoek bent naar elektronische componenten die je niet in de voorraad van het labo Elektronica vindt, en ook niet de berg recuperatiemateriaal, dan kan je terecht bij Elak (Fabrieksstraat 29 in Brussel). Zij houden eveneens een ruim assortiment componenten op voorraad, en zijn per Villo gemakkelijk te bereiken door de Nijverheidskaai te volgen richting Ninoofsepoort (ca. 5 - 10 min). Bij Elak ben je dus snel geholpen, maar ze zijn relatief duur.

De grootste keuze aan elektronica vind je natuurlijk online. Als je nog niet vertrouwd bent met webshops dan is het wekkerproject daar de ideale gelegenheid voor. Online vind je immers materiaal dat offline moeilijk verkrijgbaar is, zoals Arduino’s bijvoorbeeld. Enkele interessante aanknopingspunten:

• https://www.amazon.com: wereldwijd actieve webwinkel met ruim assortiment en snelle levering, maar relatief duur.

2 ing. Y. Verbelen DESIGNENPROTOTYPING 3

• http://www.aliexpress.com: e´en´ van de grootste webwinkels, gevestigd in China. Gi- gantisch assortiment aan onklopbare prijzen, maar reken 3 weken levertijd. • http://www.ebay.com: kleine broertje van AliExpress, voornamelijk tweedehandsmateri- aal. Gedecentraliseerd, leveringstermijn afhankelijk van locatie. Soms bedenkelijke kwaliteit. • http://www.taydaelectronics.com: gespecialiseerd in elektronische componenten voor de hobbymarkt, uitstekende kwaliteit, levertermijn ca. 2 - 3 weken, maar beperkt assortiment. • https://www.sparkfun.com: focust zich op hacker/maker community, gespecialiseerd in kits en ontwikkelbordjes, maar aan de prijzige kant. • https://www.adafruit.com: innovatieve elektronica-ontwikkelaar, zelfde marktsegment als Sparkfun. Zeer duur. • http://www.polulu.com: kabels en connectors, hoge verzendingskosten. Naast bovenstaande internationale leveranciers zijn er ook lokalere alternatieven die sneller kunnen leveren en waar je zelf langs kunt gaan als je iets echt´ dringend nodig hebt. • http://cotubex.be: ruim assortiment elektronische onderdelen op wandelafstand van cam- pus Etterbeek. • http://www.electroshopdendermonde.be: gereedschap en onderdelen voor zelfbouw- elektronica in de hacker en maker community. • http://floris.cc: Nederlandse verdeler van Sparkfun en Adafruit.

1.3.3 Uitrusting Zelfs in een era van CNC-gestuurde machines zoals lasercutters en 3D-printers wordt de efficientie¨ van ingenieurs grotendeels nog steeds mee bepaald door de vaardigheden die gepaard gaan met het gebruik van essentieel gereedschap zoals multimeters en breadboards. De beperkte tijd die je in het labo door- brengt is niet voldoende om de ervaring op te doen die nodig is om dit gereedschap echt´ vlot te leren gebruiken. Voor een elektronisch ingenieur is een multimeter een verlengstuk van zijn lichaam, een zesde zintuig, en het gebruik ervan moet zo vlot gaan dat het intu¨ıtief verloopt. Om die reden kan je niet anders dan het belangrijkste materiaal zelf aan te kopen zodat je er ook thuis mee kan oefenen. Dit ma- teriaal breng je dan ook mee naar de campus voor gebruik tijdens de WPO’s: met je eigen gereedschap werken is altijd gemakkelijker en prettiger dan met “vreemd” materiaal.

Voorzie het volgende materiaal en gereedschap: • 2 breadboards; • enkele sets breadboardkabeltjes; • een digitale multimeter (voor advies m.b.t. het aankopen van een multimeter: zie labonota’s Basiselektronica); • een striptang; • een kniptang; • een set precisieschroevendraaiers; • een laptop met wifi; • een Arduino Uno; • een USB A naar USB B kabel (het type dat je gebruikt om pc’s met printers of scanners te verbinden). Om praktische en logistieke redenen wordt dit materiaal dus ook niet voorzien door de docenten tijdens de WPO’s. Als je je eigen materiaal dus niet meeneemt, dan zal je niet aan de WPO’s kunnen deelnemen.

3 4 DESIGNENPROTOTYPING ing. Y. Verbelen

1.4 Vorm en evaluatie

Als zelfstandig project is het de bedoeling dat je het ontwerp en de implementatie van de wekker au- tonoom uitvoert. Via practicumsessies krijg je alle nodige praktische vaardigheden aangeleerd, die je meteen ook zelf kan toepassen. Het is vanzelfsprekend aanbevolen om ook met je medestudenten te discussieren¨ over het ontwerp van je wekker en daarbij van elkaar te leren.

Het project wordt geevalueerd¨ in de vorm van een mondelinge presentatie/verdediging. Hierbij zal gepolst worden naar je inzichten in de elektronica- , informatica- en mechanica-aspecten van je ontwerp. Je moet je ontwerpkeuzes dus kunnen motiveren, en bijvoorbeeld kunnen uitleggen wat de functie is van een component in je schakeling of van een bepaalde lijn code in je software. Je mag je dus best laten inspireren op ontwerpen van medestudenten, zolang je begrijpt hoe hun ontwerp in elkaar zit en het ook kan uitleggen.

4 2 Elektronica

Oooh, ahhh, thats how it always starts. Then later there is running and screaming.

Ian Malcolm

2.1 Modulair ontwerp

Complexe elektronische systemen kunnen opgesplitst worden in kleinere bouwstenen die e´en´ specifieke taak verrichten. Dat is ook het geval voor je wekker. De voornaamste elektronische bouwblokken zijn:

• het display waarop de tijd zal aangegeven worden;

• het bedieningspaneel waarmee de wekker kan bediend worden;

• de interne klok waarmee de tijd wordt bijgehouden;

• de buzzer waarmee het audiosignaal wordt geproduceerd;

• de voeding die de wekker van de juiste spanning(en) voorziet;

• de logica die de besturing van de wekker verzorgt.

Het opsplitsen van een ingewikkeld elektronisch probleem in kleinere blokken biedt twee belangrijke voordelen: enerzijds is het gemakkelijker om een klein probleem op te lossen dan een ingewikkeld probleem, en anderzijds kunnen de individuele blokken later hergebruikt worden in andere soortgelijke projecten. Het is dus aangewezen dat je elk blokje afzonderlijk uitwerkt.

Hieronder geven we enkele aanwijzingen om je met de verschillende blokjes op weg te helpen.

2.2 Het display

De taak van het display is om de tijd weer te geven. In principe kan het display zowel elektronisch (met cijfers) als mechanisch (met wijzers) zijn. Een wijzerplaat vergt echter heel nauwkeurige miniatuurme- chanica, en die is erg moeilijk te implementeren. Vandaar dat de scope in dit project beperkt wordt tot elektronische dispays. 6 DESIGNENPROTOTYPING ing. Y. Verbelen

2.2.1 Zevensegmentendisplays

De gemakkelijkste manier om een getal weer te geven is via een zevensegmentendisplay (eng. seven segment display). Zo’n display bestaat uit 7 segmenten die in de vorm van een 8 zijn vormgegeven. Elk segment heeft een afzonderlijke stuurpin waarmee het segment kan aan- of uitgeschakeld worden. Figuur 2.1 toont een voorbeeld van een zevensegmentdisplay.

Figuur 2.1: Voor- en achterkant van een losse zevensegmentdisplay (links) en module met 4 zevensegmentdisplays uit een videorecorder.

Intern zijn deze displays opgebouwd uit 7 LED’s, en je stuurt elke pin dus ook aan alsof je een LED zou sturen. Om het aantal pinnen te beperken, worden de 7 kathodes van de LED’s meestal aan elkaar gehangen en via e´en´ pin naar buiten gebracht. Zulke configuratie heet dan een common cathode display. Het omgekeerde heet een common anode display waarbij ale anodes aan elkaar hangen.

Zevensegmentdisplays bestaan in alle vormen en maten. Sommige versies hebben nog een achtste segment dat een decimaal punt vormt. Net zoals LED’s zijn ook zevensegmentdisplays beschikbaar in allerlei kleuren, waarbij groen, rood en blauw de meest voorkomende kleuren zijn.

2.2.2 LED-displays

Je kan natuurlijk ook met afzonderlijke LED’s werken om de tijd weer te geven. Het voordeel bij deze aanpak is dat je je eigen display kan samenstellen, en dus volledig vrij bent om je creativiteit optimaal te benutten. Denk er wel aan dat je een groot aantal LED’s afzonderlijk bestuurbaar zult moeten kunnen maken. Een mogelijke oplossing hiervoor is om shiftregisters toe te passen.

Displays met afzonderlijk stuurbare LED’s worden ook dot matrix displays genoemd (letterlijk: een matrix van aanstuurbare lichtpunten). Net zoals zevensegmentdisplays zijn ze verkrijgbaar in zowat alle mogelijke vormen, afmetingen en kleuren.

2.2.3 Vacuumfluorescentiedisplays¨

Vacuumfluorescentiedisplays¨ (afgekort VFD’s) zijn de voorlopers van moderne LCD-displays, en ma- ken gebruik van gloeiende segmenten in een glazen vacuumkamer.¨ Het voordeel van VFD’s is dat ze zelf licht uitstralen zonder dat daar een backlight voor nodig is zoals bij LCD- of TFT-displays. Door deze eigenschap hebben VFD’s een hoog contrast en worden ze dus toegepast in situaties waar er veel omgevingslicht aanwezig is, bijvoorbeeld in microgolfovens die in een fel verlichte keuken ook leesbaar moeten zijn. Je komt ze ook tegen in videorecorders, DVD-spelers en soortgelijke consumentenelektro- nica.

VFD’s hebben een lange levensduur ten opzichte van LCD- of TFT-displays, en onderscheiden zich van LCD’s doordat ze ook bij lage temperaturen nog blijven werken terwijl LCD-displays bevriezen. Bij VFD’s met een groot aantal segmenten is de controlelogica steeds ingebouwd waardoor je ze ge- makkelijk digitaal kan sturen.

6 ing. Y. Verbelen DESIGNENPROTOTYPING 7

Figuur 2.2: Numeriek vacuumfluorescentiedisplay¨ met 4 digits uit een videorecorder. Let op de glazen “tuit” in de linkerbovenhoek die tijdens productie werd gebruikt om het display vacuum¨ te zuigen.

2.2.4 Nixiebuizen

Een laatste optie is gebruik te maken van nixiebuizen (eng. nixie tube). Nixiebuizen stammen uit de tijd dat LEDs nog niet gangbaar waren in elektronica (de eerste LED werd pas in 1962 ge¨ıntroduceerd), en waren dus zowat de eerste component waarmee getallen konden weergegeven worden. Van ca. 1950 tot halverwege de jaren ’90 werden nixiebuizen in grote aantallen geproduceerd. Ze zijn momenteel nog steeds verkrijgbaar, maar omdat ze zeldzamer worden stijgt de prijs met de jaren. Online zijn ze echter nog goed verkrijgbaar, bv. via Ebay, AliExpress, SilkRoad etc. Een´ van de voordelen van nixiebuizen, afgezien van hun prettig oranje gloed, is de lange levensduur: de beste buizen kunnen tot ca. 200 000 uren meegaan.

Figuur 2.3: Links twee losse NL5441 nixiebuizen (foto: Kirk Cline, public domain) en rechts een volledige klok opgebouwd met nixiebuizen (foto: Jeff Keyzer, CC BY-SA 2.0)

Net zoals zevensegmentdisplays hebben nixietubes een aansluiting voor elk segment. Alle cijfers van 0 tot 9 worden weergegeven door afzonderlijke segmenten, en nixiebuizen hebben daardoor 10 aan- sluitingen (e´en´ voor elk getal) aangevuld met voedingsspanningen. Vervelend aan nixiebuizen is dat ze een speciale voet (eng. socket) nodig hebbem om in een breadboard of PCB te passen.

Om een nixiebuis te activeren is er, naar moderne standaarden, een erg hoge voedingsspanning nodig (> 200 V DC). Met een eenvoudige transformator of step-up converter is dit gemakkelijk te realiseren. Neem uiteraard de nodige veiligheidsmaatregelen in acht als je met dergelijke hoge spanningen werkt, een schok van 200 V voelt niet prettig aan!

7 8 DESIGNENPROTOTYPING ing. Y. Verbelen

2.2.5 Aansturing Tenzij je een displaytype met ingebouwde controller kiest, blijken alle displaytypes een groot aantal controlesignalen te hebben. Dat resulteert in ingewikkelde printplaatonwerpen en controllers die ook veel (digitale) IO-pinnen nodig hebben. Als je een microcontroller gebruikt, waar op het einde van dit hoofdstuk dieper op ingegaan wordt, dan zal je door het aansturen van het display alleen al te weinig IO-pinnen hebben. Het display is immers niet de enige functionaliteit van de wekker. De oplossing voor dit probleem is efficienter¨ gebruik te maken van de bestaande controllerpinnen.

2.2.5.1 Multiplexing

Het menselijk oog is niet in staat om snelle veranderingen waar te nemen. Van deze traagheid wordt handig gebruik gemaakt in display designs omdat niet alle segmenten of pixels gelijktijdig hoeven aan- gestuurd te worden om toch die perceptie te wekken. Het scherm van je laptop wordt bijvoorbeeld tussen 60 en 100 keer per seconde hertekend (eng. refresh rate) en toch neem je die sequentieel veranderende pixels waar als e´en´ beeld.

Zolang de refresh rate maar hoog genoeg is maakt het dus niet uit of alle segmenten of pixels parallel of sequentieel worden aangestuurd. Je kan dit principe zelf toepassen als je je display aanstuurt. Vooral bij displays met verschillende identieke digits, zoals bijvoorbeeld zevensegmentdisplays, nixiebuizen of vacuumfluorescentiedisplays¨ verloopt dit transparant omdat elke digit beurtelings wordt geadresseerd. Bij een display met bv. 5 digits wordt elk digit dan weliswaar slechts 20 % van de tijd aangestuurd, maar toch zal het lijken alsof alle digits permanent geactiveerd zijn.

Multiplexing op deze manier heeft ook 2 nadelen. Enerzijds zullen digits minder fel oplichten omdat er geen continue stroom door loopt, wat grenzen stelt aan het aantal verschillende digits dat je op die manier nog zichtbaar kan aansturen. Anderzijds moet de refresh rate ook voldoende hoog zijn om te verhinderen dat de sequentiele¨ sturing voor de gebruiker zichtbaar wordt. Snelle bewegingen of vibraties kunnen bij te lage refresh rate tot discontinu¨ıteiten leiden, een fenomeen dat bekend staat als display break up.

2.2.5.2 Shiftregisters

Bij een groot aantal digits is het niet langer praktisch om ze via multiplexing elk om beurt aan te sturen omdat de vereiste klokfrequentie steeds hoger moet worden om een voldoende hoge refresh rate te ha- len, en omdat de duty cycle zo klein zal worden dat de tekst op de displays nauwelijks nog leesbaar is. Een gemakkelijke oplossing hiervoor is gebruik te maken van shiftregisters. Shiftregisters bestaan uit een reeks geheugencellen die parallel naar buiten gebracht worden, maar die serieel ingesteld worden. Op die manier kan een groot aantal extra pinnen gecreeerd¨ worden met e´en´ enkele IO-pin van de micro- controller. Een typisch shiftregister is bijvoorbeeld de 74164, een IC uit de 74-reeks. Een variant hierop is de 74595, een shiftregister met parallelle outputs en output latches.

2.2.5.3 Charlieplexing

Een laatste mogelijkheid is gebruik te maken van Charlieplexing. Deze techniek maakt gebruik van de eigenschap van microcontrollerpinnen dat ze zowel als ingang als output kunnen dienen. Elke pin kan dus niet alleen actief logisch hoog of laag zijn, maar ook hoogimpedant zijn als de pin als ingang wordt geconfigureerd. Op die manier heeft een digitale pin dus 3 staten: hoog, laag of inactief. Charlieplex- ing is vooral voordelig in situaties waar je elementen met een (bijna) identieke drempelspanning wilt aansturen die maar in e´en´ richting geleiden zoals LED’s. Met 3 IO-pinnen kan je bijvoorbeeld 6 LED’s sturen. Voor hogere aantallen pinnen loopt dit aantal snel op: via Charlieplexing kan je met 4 pinnen al 12 LED’s sturen en met 5 pinnen 20 LED’s. Met n pinnen kan je n2 − n LED’s sturen.

Charlieplexing heeft ook enkele nadelen. Het ontwerp van de schakeling, de software en de print- plaat worden veel ingewikkelder, en nadien ook moeilijker te debuggen dan bij meer conventionele mul- tiplexingtechnieken. Bovendien vereist Charlieplexing dat de configuratie van de segmenten (LED’s)

8 ing. Y. Verbelen DESIGNENPROTOTYPING 9 vrij kan gekozen worden, waardoor deze techniek onbruikbaar is voor displays met vooraf vastgelegde segmentconfiguraties zoals zevensegmentdislays die ofwel common anode of common cathode zijn.

2.3 Het bedieningspaneel

Met het bedieningspaneel kan je de (alarm)tijd instellen, en uiteraard moet er een grote “snooze” knop voorzien zijn voor maandagochtend.

2.3.1 Drukknoppen

Drukknoppen zijn de simpelste manier om elektronica te besturen. Als ze worden ingedrukt dan maakt de knop intern contact tussen 2 geleidende plaatjes en gedraagt de knop zich elektrisch als een kortslui- ting. Als ze niet ingedrukt wordt, dan is het elektrisch equivalent een open keten. Als je bv. een LED in serie zet met een drukknop, dan zal de LED oplichten als de knop wordt ingedrukt.

Figuur 2.4: Het meest gebruikte type drukknop (tactile switch) in elektronica (links), een bedieningspaneel met 5 drukknoppen uit een inktjetprinter (midden) en een keypadmodule (rechts).

Een drukknop is dus de perfecte keuze voor de snooze knop!

2.3.2 Draaischakelaars

Een alternatieve besturingstechniek is gebruik te maken van draaischakelaars. Als eraan gedraaid wordt dan geeft de schakelaar een aantal “ticks” dat evenredig is met de hoek waarover gedraaid wordt. Bij de meeste draaischakelaars voelt de gebruiker ook hoeveel posities hij/zij verdraaid heeft.

Sommige draaischakelaars hebben een discreet aantal posities, denk bv. aan het type dat in je mul- timeter zit. Er bestaan ook continue draaischakelaars, die je oneindig ver in beide richtingen kan blij- ven daaien (zoals de draaischakelaars die op het bedieningspaneel van oscilloscopen worden gebruikt). Draaischakelaars worden courant gecombineerd met een drukknop, zodat je zowel kan draaien als druk- ken, bv. de draaiknop van de Ultimaker 3D-printers.

2.3.3 Joysticks

Joysticks bestaan in zowel een digitale als een analoge variant. Digitale joysticks zijn opgebouwd uit 4 of 5 drukknoppen die in een ruitvorm zijn geconfigureerd. Als de stick in e´en´ van deze richtingen wordt geduwd, dan worden de corresponderende drukknoppen ingeduwd. Dergelijke joysticks kan je dus ge- bruiken in plaats van meerdere drukknoppen. De Replicator 3D-printers werken volgens dit principe.

Analoge joysticks zijn mechanisch ingewikkelder omdat ze in zowel een x-richting als een y-richting kunnen draaien, en elke riching is uitgerust met een potentiometer. In rust staan beide potentiometers in het midden. Als de stick naar een bepaalde richting wordt geduwd, worden de potentiometers verdraaid. Afhankelijk van de weerstandswaarde kan zo de positie van de stick bepaald worden.

9 10 DESIGNENPROTOTYPING ing. Y. Verbelen

2.3.4 Touchscreens

Wie opteert voor een LCD-display of TFT-display kan meteen kiezen voor een aanraakscherm (eng. touch screen). Dergelijke displays bieden een extra interface waarmee de coordinaten¨ van een eventu- ele vinger (of meerdere vingers) kunnen worden uitgelezen. Uiteraard is dit enkel zinvol als er op het scherm ook iets te zien is dat kan “aangewezen” worden.

Hou er rekening mee dat touchscreens de duurste oplossing zijn (reken ca. 30 EUR voor een scherm van ca. 15 x 10 cm).

2.3.5 Potentiometers

Tot slot kunnen ook potentiometers gebruikt worden als bedieningselementen. Door aan potentiometers te draaien kan hun impedantie (weerstandswaarde) gewijzigd worden, en uit de impedantie kan je dus de positie afleiden.

Het grootste nadeel aan potentiometers in vergelijking met draaischakelaars is dat het aantal om- wentelingen (eng. turns) beperkt is tot een klein aantal. Er bestaan wel tientoerenpotentiometers die 10 volle toeren kunnen draaien voordat ze tegen hun limiet aanbotsen (zoals gebruikt in bv. voedingen om de spanning te regelen of in je stereo-installatie voor de volumeregeling), maar die zijn duur en niet zo gemakkelijk verkrijgbaar. Voor sommige applicaties, bijvoorbeeld het instellen van het contrast op het display, is een potentiometer perfect geschikt. Om de tijd in te stellen gebruik je echter beter een draaischakelaar met een ongelimiteerd aantal toeren.

2.3.6 Debouncing

Alle mechanische schakelaars zijn gebaseerd op hetzelfde principe: 2 metalen contacten die al dan niet tegen elkaar gedrukt worden. Wanneer een drukknop wordt ingedrukt dan lijkt het alsof die onmiddellijk contact maakt, maar in de praktijk is dat niet zo. Wanneer de metalen contacten elkaar raken dan zullen ze kortstondig trillen, waardoor de verbinding heel snel aan- en uitgeschakeld wordt. Dit is weliswaar een overgangsverschijnsel dat slechts een fractie van een seconde duurt, maar als je een drukknop zou gebruiken als ingang van een teller (eng. counter) dan zou je merken dat er meer dan e´en´ puls geteld wordt omdat de counter ook alle trillingen “ziet”.

Dergelijke trillende schakelaars en knoppen zijn een gekend probleem in de elektronica dat boun- cing (letterlijk: op en neer springen) heet. Om de trillingen weg te werken, het zogenaamde debouncing, bestaat er een waaier aan technieken. De simpelste oplossing is een kleine laagdoorlaatfilter (eng. low pass filter, LPF) toe te voegen. Dergelijk filters bestaan uit e´en´ condensator en e´en´ weerstand, en zullen de trillingen volledig wegwerken. De exacte waarden van deze weerstand en condensator zijn niet kri- tisch. Als steile flanken noodzakelijk zijn, omdat een zuiver digitaal signaal gewenst is, dan kan je een comparator of schmitttrigger toevoegen na de filter. In de meeste gevallen is dit echter niet nodig.

Als je gebruik maakt van een microcontroller dan kan je de debouncing ook in software uitvoeren door een lopend gemiddelde (eng. moving average) te nemen van het ingangssignaal. Als de periode waarover je het gemiddelde berekent lang genoeg is, dan zal bij een druk op de knop het gemiddelde continu toenemen. De software kan dan een bewerking of actie uitvoeren als het gemiddelde een be- paalde drempelwaarde die je zelf kiest overschrijdt.

2.4 De klok

Met een digitale klok hou je intern de tijd bij.

10 ing. Y. Verbelen DESIGNENPROTOTYPING 11

2.4.1 Real Time Clock

Een real time clock (RTC) heeft als taak om de tijd bij te houden. RTC’s zijn verkrijgbaar als ge¨ıntegreerde schakelingen waarop je een kwartskristal moet aansluiten om een stabiel kloksignaal te genereren. Inte- ressanter dan de losse chips zijn RTC-modules, waar vaak ook nog een batterijtje op zit dat de tijd kan bijhouden ook als je wekker niet op de netspanning is aangesloten, of als er bv. ’s nachts een stroom- panne optreedt.

Een courant toegepaste RTC chip is de DS1307, die je digitaal via het standaardprotocol I2C (inter- chipcommunicatie) kan uitlezen. Ze zijn gemakkelijk online verkrijgbaar.

2.4.2 Microcontroller

Microcontrollers zijn ook uitgerust met een kwartskristal, en ze zijn dus ook in staat om de tijd bij te houden door clock ticks te tellen in software. Op Arduino geeft de functie millis() het aantal milli- seconden sinds de processor gestart werd, dat je kan gebruiken om de tijd bij te houden.

De tijd bijhouden in een microcontroller heeft als voornaamste nadeel in vergelijking met een RTC dat de tijd wordt gereset als de spanning uitvalt, tenzij je de volledige microcontroller voedt van een extra backupbatterijtje. De voedingsschakeling wordt dan wel een stuk complexer.

2.4.3 Synchronisatie

In Frankfurt staat een krachtige zender die op een frequentie van 77.5 kHz draadloos een tijd- en da- tumsignaal uitstuurt dat quasi overal in West-Europa te ontvangen is. De zender is aangesloten op een nauwkeurige cesiumklok, en het uitgestuurde signaal bevat o.a. informatie over de tijd (uren, minuten, seconden) en de datum (jaar, maand, dag, dag van de week).

Om dit signaal te ontvangen heb je een kortegolfantenne nodig en een stukje logica om het signaal te decoderen. DCF77 ontvangers zijn ook verkrijgbaar als kant-en-klare modules die je rechtstreeks in je wekker kan integreren. Je kan online talloze schakelingen vinden om zelf zo’n ontvanger te bouwen, en in Elektor worden er ook regelmatig implementaties gepubliceerd.

Het ontvangen van het DCF77-signaal is, net zoals gewone radio, gratis. Het voornaamste voordeel is dat je de tijd niet meer manueel hoeft in te stellen, en dat je wekker automatisch overschakelt van zomeruur op winteruur en vice versa, rekening houdt met schrikkeljaren etc.

2.5 De buzzer

De belangrijkste taak van een wekker is uiteraard om een zodanig ergerlijk lawaai te produceren dat men ervan wakker wordt, en niet meer terug in slaap kan vallen. Het produceren van dit geluid is de taak van de buzzer.

2.5.1 Piezobuzzers¨

Piezobuzzers¨ zijn de gemakkelijkste manier om geluid te produceren. Ze bestaan uit 2 of meerdere laagjes piezo-elektrisch¨ materiaal. Dit materiaal heeft als bijzondere eigenschap dat het mechanisch vervormt als er een spanning over wordt aangelegd. Door deze mechanische vervorming worden trillin- gen geproduceerd, die zich door de lucht voortplanten onder de vorm van hoorbaar geluid.

Een eenmalige spanning aanleggen (DC) zal leiden tot een eenmalige vervorming, en dus een heel korte “klik” van de buzzer. Wil je een een continu geluid, dan moet je de buzzer dus ook aan een continu veranderende spanning (AC) onderwerpen. De frequentie van dit signaal bepaalt de snelheid waarmee het materiaal gaat trillen, en dus ook de frequentie van het geluid. Deze frequenties zijn wel enigszins

11 12 DESIGNENPROTOTYPING ing. Y. Verbelen beperkt in bandbreedte: heel lage frequenties (bassen) kan je er niet mee produceren.

Omdat piezobuzzers¨ elektrostatisch werken, verbruiken ze maar heel weinig energie. Je kan ze dus rechtstreeks voeden uit een eenvoudige transistorversterker, of digitaal aansturen met een MOSFET.

Figuur 2.5: Enkele piezobuzzers¨ (links) en subwoofer met tweeter (rechts).

2.5.2 Luidsprekers Luidsprekers verschillen van piezobuzzers¨ doordat ze elektromagnetisch werken in plaats van elektrosta- tisch. Ze bestaan uit een permanente magneet die in een elektromagneet is opgehangen (of omgekeerd). Een stroom door de elektromagneet zal ervoor zorgen dat de magneet in of uit de elektromagneet be- weegt, en daarbij ook trillingen veroorzaakt. De bewegingsrichting is dus afhankelijk van de stroomzin.

Net zoals een piezobuzzer¨ stuur je een luidspreker aan met een AC-signaal. De frequentie van dit signaal bepaalt de frequentie en toonhoogte van het geproduceerde geluid. Het voornaamste voordeel van luidsprekers is dat ze ook lage frequenties (bassen) goed kunnen produceren, wat piezobuzzers¨ niet kunnen. Het volume kan ook veel groter zijn. Het nadeel is wel dat er een merkbare stroom door de elektromagneet moet lopen, en een luidspreker heeft dus een versterkerschakeling nodig. Afhankelijk van het vermogen van de luidspreker zijn er verschillende versterkerschakelingen mogelijk. De gemak- kelijkste manier is om met een vermogenversterker zoals de TDA2003 te werken, die behoorlijk wat lawaai kan produceren zelfs als je op een 9 V batterijtje werkt!

2.6 De voeding

De taak van de voeding is om alle componenten in je schakeling van de juiste voedingsspanning te voorzien. De complexiteit van de voedingsschakeling hangt dus sterk af van de andere blokken in je schakeling: hoe meer verschillende voedingsspanningen je nodig hebt (bv. 3.3 V, 5 V, 12 V etc.) hoe ingewikkelder de voedingsschakeling zal worden.

2.6.1 Batterijen De simpelste manier om je wekker te voeden, en ook de meest inefficiente,¨ is door gebruik te maken van batterijen. Batterijen gedragen zich als spanningsbronnen waarvan de spanning afneemt naarmate ze “leeg” geraken. Courant gebruikte batterijen zijn alkaline (1.5 V), NiMH (1.2 V), lithium-ion (3.6 V), lithium-polymeer (3.7 V) en loodgel (12 V). De batterijkeuze hangt af van welke spanning(en) je nodig hebt. De meeste hedendaagse batterijen zijn herlaadbaar (secundaire cellen), maar ook niet herlaadbare alkalinebatterijen zijn nog steeds in de handel verkrijgbaar. Deze moet je dus vervangen als ze leeg zijn. Ontwerp de behuizing zodanig dat je gemakkelijk aan de batterijen kan zonder de volledige wekker te moeten demonteren!

Herlaadbare batterijen kan je terug opladen in speciale batterijladers, of je kan de schakeling om de batterij te herladen ook direct integreren in je wekker. Dat spaart de gebruiker de moeite van de

12 ing. Y. Verbelen DESIGNENPROTOTYPING 13

Figuur 2.6: Van links naar rechts: 9 V herlaadbare NiMH batterij, 3.7 V 300 mAh Li-Ion batterij, 3.6 V 2.2 Ah Li-Ion batterij (18650 formaat zoals gebruikt in laptop battery packs), 11.1 V 2.2 Ah LiPo batterij voor quadcopters, en 12 V loodgel batterij als backup voor alarmsystemen. constante batterijwissels uit. Voor zowat alle batterijtypes zijn er speciale chips (IC’s) verkrijgbaar die de volledige laadcyclus controleren, maar de meeste batterijen laten zich ook gewoon laden met een constante laadstroom (zie toepassing stroombronnen in WPO Basiselektronica).

Lithiumbatterijen (zoals gebruikt in laptops of quadcopters) kunnen een fikse stroom leveren, en mo- gen dus in geen geval kortgesloten worden. Ontwerp je schakeling zodanig dat kortsluiting onmogelijk is, en voeg een zekering toe in serie met de batterij(en)!

2.6.2 Netadapter

In compacte toepassingen is er vaak niet genoeg ruimte om een voedingsschakeling te integreren, en dus wordt gebruik gemaakt van een netadapter. Je herkent ze als hermetisch gesloten zwarte doosjes waar aan de ene kant een netstekker (230 V AC) binnenkomt en langs de andere kant een veel lagere DC- spanning kan afgenomen worden. Netadapters voor elektronische toestellen geven gewoonlijk 3.6 V of 5 V voor gadgets zoals GSM’s, mp3-spelers en navi’s, 9 V of 12 V voor speelgoed (zoals modeltreinen etc.) en 19 V of 21 V voor laptops.

Figuur 2.7: Schakelende voeding van een netwerkswitch (links) en 750 W voeding van een gaming pc (rechts).

Netadapters blijven vaak over nadat de toestellen waarvoor ze oorspronkelijk bedoeld waren al lang kapot of in onbruik geraakt zijn. Je hebt thuis in e´en´ of andere schuif zeker nog netadapters van vorige printers, scanners, GSM’s, fototoestellen e.d. liggen die perfect kunnen gebruikt worden om je wekker van stroom te voorzien.

13 14 DESIGNENPROTOTYPING ing. Y. Verbelen

Als de spanning van de netadapter niet precies overeenkomt met de vereisten in jouw schakeling, dan moet je gebruik maken van een spanningsregulator of DC/DC converter om de spanning te verlagen.

2.6.3 Netvoeding

Je kan natuurlijk ook zelf de schakeling bouwen die in netadapters zit, of toch e´en´ die er sterk op lijkt. Moderne netadapters werken met geschakelde voedingen (eng. switched mode power supply) die erg zuinig zijn maar ook zeer ingewikkeld om te bouwen en te debuggen.

Figuur 2.8: Links een netadapter voor een laptop van 19 V. Rechts: een lineaire netvoeding. De grote zwarte component is de transformator, gevolgd door de bruggelijkrichter (zwart blokje aan de linkerkant), en een oranje afvlakcondensator. De lineair spanningsregulator is vastgeklemd op een koelvin (eng. heat sink).

Een eenvoudige lineaire voeding kan je daarentegen gemakkelijk zelf bouwen met een handvol com- ponenten. Met behulp van een transformator verlaag je de 230 V AC naar een lagere AC spanning, die je vervolgens met diodes gelijkricht om er een DC van te maken. Dan alleen nog een filter of span- ningsregulator erachter om de ruis te reduceren, en je eigen voeding is klaar! Online vind je talloze schakelingen van netvoedingen voor allerlei spanningen.

Let op bij het aansluiten van de transformator: transformators werken namelijk in twee richtingen! Als je een transformator met 15:1 ratio gebruikt om de spanning te verlagen dan kom je ca. 15 V uit aan de secundaire zijde, die perfect is voor elektronica. Maar als je hem verkeerd aansluit dan wordt de 230 V netspanning opgetransformeerd tot 3.5 kV wat potentieel levensgevaarlijke situaties oplevert! Vraag dus steeds aan e´en´ van de toezichthoudende docenten om je schakeling te checken alvorens je ze aansluit op het stopcontact.

2.6.4 Spanningsregulators

Stel dat je wekker een voedingsspanning van 6 V nodig zou hebben. Een netadapter met die specifieke spanning ga je niet gemakkelijk vinden, en een USB-adapter van 5 V is te weinig. Je kan natuurlijk 4 1.5 V alkalinebatterijen in serie zetten, maar dat is verre van praktisch.

De oplossing voor dit probleem is te vertrekken van een hogere spanning, en gebruik te maken van een zogenaamde spanningsregulator (eng. voltage regulator). Spanningsregulators zijn elektronische componenten die een DC voedingsspanning omzetten in een andere, lagere DC voedingsspanning naar keuze. Ze zijn verkrijgbaar in uitvoering met constante uitgangsspanning voor veel voorkomende waar- den, bv. 3.3 V, 5 V en 12 V. Positieve regulators krijgen de prefix “78”. Een spanningsregulator voor 5 V wordt dan aangeduid met typenummer “7805”, een regulator voor 24 V met typenummer “7824” enzovoort. Er bestaan ook versies waarmee je zelf de spanning kan kiezen, zoals bv. de LM317.

Spanningsregulators zijn heel gemakkelijk in gebruik, de enige externe componenten die je nodig hebt om ze aan te sluiten zijn een condensator op de ingang (als buffer) en een andere condensator op

14 ing. Y. Verbelen DESIGNENPROTOTYPING 15 de uitgang (als filter). Deze spanningsregulators zijn vooral interessant als de spanning die je wilt over- bruggen niet te groot is, en je ook niet teveel stroom nodig hebt (max. ca. 200 - 400 mA).

Figuur 2.9: Enkele spanningsregulators (van links naar rechts): een 7833 in TO-92 package, een 7805 in TO-220 package, een LM317 regelbare spanningsregulator in TO-3 package. De meest rechtse regulators zijn schakelend (DC/DC): een MC34063 in DIP-8 package en een LM2596 in TO-220-5 package.

Het probleem met lineaire spanningsregulators zoals de 7805 en 7812 is dat het spanningsverschil bij een bepaalde stroom wordt omgezet in warmte. Stel bv. je gebruikt een 7805 lineaire regulator om een voedingsspanning van 12 V om te zetten naar 5 V. Bij een stroom van 100 mA is het vermogen dat gedissipeerd wordt in de regulator P = (12 − 5) · 0.1 = 700 mW. De regulator zal dus behoorlijk heet worden. In de meeste reele¨ situaties zullen deze regulators dus opbranden lang vooraleer je de maximale stroom die in hun datasheets vermeld staat bereikt!

De oplossing voor dit probleem is gebruik te maken van geschakelde regulators (eng. switched mode regulators). Deze regulators maken gebruik van een externe spoel (inductor) om de spanning op de uitgang constant te houden, en hebben in vergelijking met lineaire regulators een hoog rendement. Net- adapters voor laptops werken bijvoorbeeld met dit principe omdat het verschil tussen ingangsspanning en uitgangsspanning behoorlijk groot is, en de adapter een flinke stroom moet kunnen leveren tijdens games. Het nadeel aan geschakelde regulators is, zoals eerder vermeld, dat de schakeling iets ingewik- kelder is. Je hebt een externe spoel nodig, een flybackdiode en minstens 2 condensators. Afhankelijk van het type regulator kunnen daar nog eens weerstanden bijkomen. Een gangbaar type geschakelde regulator is de LM2596, die een stroom van 3 A kan leveren bij ingangsspanningen tot ca. 30 V. Je kan de gewenste uitgangsspanning instellen met een spanningsdeler op de uitgang van de regulator.

2.7 De logica

Je merkt aan de vorige blokken dat je in je wekker deelschakelingen zult moeten laten samenwerken die sterk van elkaar verschillen. Als de blokken zuiver digitaal zijn en de interfaces min of meer gelijk, dan kunnen enkele logische poortjes vaak volstaan. Dit heet “glue logic” en werd vroeger vaak discreet ge¨ımplementeerd met 74xx of 40xx serie IC’s of “chips” (eng. integrated circuit), maar tegenwoordig meestal in e´en´ CPLD of FPGA (eng. Field Programmable Gate Array). Een FPGA kan je beschouwen als een “lege” digitale chip waarin je zelf de gewenste digitale logica zoals AND, OR, XOR etc. poorten kan definieren.¨

Hoewel FPGA’s heel krachtig zijn, is het gebruik ervan nogal omslachtig: ze hebben een groot aan- tal verschillende voedingsspanningen nodig die elk eigen ontkoppelcondensators vereisen, en het grote aantal pinnen maakt het lastig om ze aan te sluiten. Bovendien zijn ze niet verkrijgbaar in een package dat breadboardcompatibel is, wat het ontwikkelen van prototypes veel moeizamer maakt. Bovendien zijn FPGA’s zuiver digitale systemen, dus als je verbinding wilt maken met de analoge wereld, bij- voorbeeld om een licht- of temperatuursensor uit te lezen, dan moet je nog extra chips toevoegen om de analoge signalen te converteren naar digitale signalen die de FPGA kan verwerken. Dat is dus een omslachtige procedure.

15 16 DESIGNENPROTOTYPING ing. Y. Verbelen

Een alternatieve methode om informatie te verwerken en je wekker aan te sturen is door gebruik te maken van software. Software wordt traditioneel uitgevoerd door een microprocessor. Microprocessors zoals je die in je laptop zitten zijn echter gespecialiseerd in het uitvoeren van instructies, en hebben nog een hoop extra chips nodig om bijvoorbeeld hun instructies in te bewaren (flashgeheugen), hun data in op te slaan (RAM-geheugen) enzovoort. Vanwege de grote verzameling benodigde elektronica is een microprocessor dus ook niet erg praktisch voor eenvoudige toepassingen zoals deze wekker.

Een goed compromis is de geavanceerde functionaliteiten van moderne microprocessors te schrap- pen, en een sterk vereenvoudigde processor samen met een stukje RAM-geheugen en een stukje flash- geheugen te integreren in e´en´ enkele chip. Dit heet een microcontroller. Moderne microcontrollers bevatten naast een processorkern, flashgeheugen en RAM-geheugen ook nog een hoop extra logica: via een analoog naar digitaal converter (ADC) kunnen ze meteen analoge signalen inlezen, en ze bevatten extra kernen voor seriele¨ communicatie. High end microcontrollers zoals die in bijvoorbeeld scanners of printers gebruikt worden, kunnen zelfs een ge¨ıntegreerde USB-controller of motorsturing bezitten, zodat je rechtstreeks met een pc kan communiceren via USB! De voornaamste fabrikanten van micro- controllers zijn momenteel Microchip (de PIC serie), Texas Instruments (MSP430 en CC serie), NXP (de LPC serie), Atmel (AT serie) en ST Microelectronics (STM serie). Elke microcontroller heeft zijn eigen functionaliteiten, geheugengrootte, maximale kloksnelheid enzovoort. De juiste microcontroller kiezen voor een bepaalde toepassing is dus geen gemakkelijke opgave, die ook voor ervaren elektronici heel wat tijd in beslag kan nemen. Een te krachtige microcontroller kiezen is immers onnodig duur, en met een te zwakke zal het niet mogelijk zijn om de applicatie te realiseren.

Microcontrollers hebben een hoop pinnen, voor in- en uitvoer van data maar ook voor voeding, aan- sluiting met de programmer enzovoort. Om die reden worden er regelmatig nieuwe ontwikkelbordjes op de markt gebracht. Dit zijn printplaatjes (PCB’s, eng. printed circuit boards) waarop een microcon- troller is gesoldeerd samen met alle logica die hij nodig heeft om ermee aan de slag te kunnen. Typische componenten die je op deze ontwikkelbordjes terugvindt zijn bijvoorbeeld een USB-connector, een voe- dingsconnector, spanningsregulators, een klokgenerator, connectors voor analoge en digitale signalen, enzovoort. Initieel werden deze bordjes ontwikkeld door de microcontrollerfabrikanten zelf onder de naam “evaluation boards” maar tegenwoordig worden de meeste bordjes ontwikkeld door de elektronica “community” die bestaat uit hobbyisten en studenten. Crowdfunding is hierbij een belangrijke drijvende kracht, en als je rondkijkt op crowdfundingsites zoals Kickstarter of Indiegogo zal je talloze dergelijke bordjes tegenkomen.

Veruit het meest gebruikte ontwikkelbord op dit moment is de Arduino Uno. Dit ontwikkelbord van Italiaanse origine bestaat uit een ATmega328p microcontroller van Atmel, een 16 MHz klokgenerator, een USB-controller en USB-connector voor verbinding met je laptop, een spanningsregulator voor 5 V en voor 3.3 V, enkele LED’s, en 4 female board to board connectors om digitale of analoge signalen aan te sluiten op het bord. De Arduino Uno is erg gemakkelijk in gebruik omdat er talloze codevoorbeelden voor te vinden zijn op het internet. De ondersteuning (eng. support) voor een ontwikkelbord bepaalt in belangrijke mate hoe snel je er een applicatie mee zal kunnen prototypen. Als je nog geen eigen Arduino Uno hebt, dan is het wekkerproject de gepaste gelegenheid om enkele exemplaren aan te schaffen. Je kan Arduino’s online vinden, alweer op AliExpress, vanaf ca. 3 EUR per stuk.

De programmatuur (software) is zodanig belangrijk dat er een volledig hoofdstuk aan wordt gewijd.

16 3 Microcontrollers programmeren

If we knew what it was we were doing, it would not be called research, would it?

Albert Einstein

3.1 De Arduino Uno

Het Arduino Uno ontwikkelbord heeft de grootte van een betaalkaart en is daarmee behoorlijk compact. Laat je echter niet verrassen, de mogelijkheden van dit bord zijn erg uitgebreid! Figuur 3.1 toont een schematische weergave van de Arduino Uno met de voornaamste componenten erop.

6 1TX0 0 9 8 7 6 5 4 3 2 13 12 11 10 GND

RESET AREF

DIGITAL (PWM= ) RX0 digitale IO-pinnen 1 USB-connector ICSP2 6 L

TX ON 1 Arduino TM voedingspinnen 2 USB-UART converter RX 7 2 1 spanningsregulators 5 3 ICSP 8 analoge pinnen 4 DC-jack 3 9 9 ATmega328p microcontroller

UART LED's POWER ANALOG IN IOREF RESET

3V3

GND

A5

A4

A3

A2

A1 5V A0 VIN 5 4 GND 7 8

Figuur 3.1: Arduino Uno ontwikkelbord met aanduiding van de voornaamste componenten en connectors (schema Arduino Uno: Nevit Dilmen, CC BY-SA 3.0).

De Arduino Uno heeft 8 connectors: een USB-B connector voor verbinding met de pc, een DC “barrel” jack voor aansluiting van een DC-voeding, en 2 dual row 6 pin headers die als ICSP-connectors voor respectievelijk de USB-UART-converter en de ATmega328p zelf. De belangrijkste connectors zijn echter de 4 female board to board headers die toelaten om het bord te verbinden met de buitenwereld. De pinnen op de digitale headers en de analoge header zijn rechtstreeks verbonden met de ATmega328p microcontroller. Figuur 3.2 toont de functies van deze pinnen. 18 DESIGNENPROTOTYPING ing. Y. Verbelen (diagram: Romano dEzzelino, CC BY-SA 3.0) Figuur 3.2: Pinout van de Arduino Uno, met aanduiding van de functies van de verschillende pinnen en connectors.

18 ing. Y. Verbelen DESIGNENPROTOTYPING 19

3.1.1 De voeding

Net zoals elke andere elektronische schakeling moet ook een Arduino gevoed worden met een geschikte DC-spanning. Omdat de ATmega328p op een spanning van 5 V werkt, moet deze spanning minstens 5 V bedragen. Er zijn 3 manieren om je Arduino te voeden: via de USB-connector, de DC-jack en de Vin pin.

Tijdens de eerste fase van de softwareontwikkeling heb je zelden behoefte aan extra elektronica rond je Arduino, en is het ontwikkelbord alleen voldoende om van start te gaan. De Arduino kan dan perfect gevoed worden via USB (connector 1 in figuur 3.1), die tot 500 mA uit een USB 2.0 en zelfs 5 A uit een USB 3.0 poort kan leveren. Het enige wat je hiervoor hoeft te doen is de Arduino via USB te verbinden met een host device zoals een pc. Van zodra je de kabel inplugt, start de Arduino automatisch op. Op de Arduino zit een zekering van 500 mA die verhindert dat de USB-hub van de pc overbelast geraakt als je teveel stroom door de USB-kabel probeert te trekken. Deze zekering beveiligt echter niet tegen hoge spanningen, sluit nooit een spanning aan op de USB-connector die hoger of lager is dan 5 V ± 0.25 V.

Eens je software (quasi) af is en je wilt je schakeling testen, dan is het lastig om de pc steeds ver- bonden te houden omdat de USB-kabel dan op e´en´ of andere manier uit de behuizing moet, en altijd te kort blijkt te zijn. Voor deze situaties is er een DC-jack (connector 4 in figuur 3.1) voorzien waar je een netvoeding in kunt pluggen, zoals in het vorige hoofdstuk werd besproken. Deze “barrel” jack is center positive wat betekent dat de positieve spanning wordt gedragen door de middelste pin, en de buitenste cilinder errond op grondpotentiaal is. De DC-jack verdraagt ingangsspanningen tot 25 V DC omdat deze ingangsspanning door een lineaire spanningsregulator ( 3 in figuur 3.1) wordt gevoerd die ze verlaagt tot de 5 V die nodig is om de ATmega328p te voeden. Opdat de lineaire regulator correct kan werken, moet de ingangsspanning steeds minstens 500 mV hoger zijn dan de uitgangsspanning. Bijge- volg moet je op de DC-jack een spanning van ca. 7 V of hoger aanleggen, omdat er tussen DC-jack en spanningsregulators nog een diode zit als ompoolbeveiliging. Let op: hoe hoger de ingangsspanning, hoe minder stroom de lineaire regulator zal kunnen leveren doordat het vermogen (= warmte) die kan gedissipeerd worden beperkt is!

Tot slot is er nog de Vin-pin op de power header van de Arduino, connector 7 in figuur 3.1. De eer- ste pin is daar gelabeled als Vin, en kan net zoals de DC-jack gebruikt worden om de Arduino te voeden met een DC-spanning van 6 V of hoger. De DC-jack en de Vin-pin zijn onderling verbonden met een diode, die tussen de DC-jack en de Vin-pin voorwaarts is gepolariseerd. Als je dus zelf geen spanning aanlegt op de Vin-pin dan zal deze diode geleiden als je een spanning op de DC-jack inplugt, waardoor op de Vin-pin dezelfde spanning minus de spanningsval over de diode komt te staan. Omgekeerd gaat niet omdat de diode dan spert. In geen geval mag je op de DC-jack een hogere spanning inpluggen dan een spanning die je op de Vin-pin aanlegt! In dat geval zal de diode namelijk gaan geleiden, en beide voedingen kortsluiten. Maak er dus een goede gewoonte van om of´ de DC-jack of´ de Vin-pin te gebruiken, maar nooit beide.

3.1.2 Randapparatuur

Omdat de ATmega328p en de USB-controller rechtstreeks met de 5 V power rail van de Arduino zijn verbonden, is de Arduino gevoelig voor fluctuaties van deze voedingsspanning. Een te grote stroom afnemen via de 5 V-pin op de power header van de Arduino zal ertoe leiden dat deze spanning in elkaar klapt, waardoor de microcontroller reset en het programma weer vanaf het begin wordt herstart. Te lage spanningen (minder dan 0) of te hoge spanningen (meer dan 5 V) kunnen de ATmega328p zelfs onherstelbaar beschadigen. Dit kan ertoe leiden dat de ATmega328p niet meer kan geprogrammeerd worden, en de Arduino dus definitief onbruikbaar is.

Het risico op dergelijke beschadigingen kan drastisch gereduceerd worden door de 5 V van de Ar- duino zo weinig mogelijk te belasten door externe randapparatuur. Grote verbruikers zoals lange LED- strips, servomotors, DC-motors, relais, stappenmotors enzovoort mag je dus niet voeden via de Arduino,

19 20 DESIGNENPROTOTYPING ing. Y. Verbelen zelfs als ze ook net 5 V nodig hebben (zoals o.a. het geval is bij servomotors). Voor deze belastingen moet je steeds een afzonderlijke voeding voorzien die gescheiden is van de andere elektronica en waarop fluctuaties toegelaten zijn. In talrijke schakelingen die je op het Internet aantreft wordt gezondigd tegen deze regel voor gescheiden voedingen, dus laat je er niet toe verleiden deze fouten over te nemen in je eigen ontwerp.

3.2 De toolchain

Als je de Arduino Uno uit zijn verpakking haalt dan is de microcontroller in feite leeg. Er is enkel een klein stukje software aanwezig dat verantwoordelijk is voor het inladen van nieuwe programma’s, de zogenaamde bootloader. Als je de Arduino Uno inplugt in je laptop via een gewone USB-kabel dan wordt de microcontroller gevoed via de USB-poort en start meteen op. Maar er gebeurt natuurlijk niks omdat er nog geen software in zit! Mogelijk lichten er wel e´en´ of meerdere LED’s op om aan te geven dat het bord gevoed wordt en klaar is voor actie.

Hoe krijg je dan je eigen programma in de microcontroller gedownload? Daarvoor heb je een stukje software nodig op de pc, waarin je de instructies kan invoeren. Deze software is afhankelijk van het type ontwikkelbord dat je gebruikt, en voor Arduino heet deze software Arduino IDE (eng. integrated development environment). Ze is gratis te downloaden van de Arduino website1 en beschikbaar voor Windows en Linux. Download en installeer de Arduino IDE als je dit nog niet gedaan hebt.

Naast een tekstverwerker waar je je programmacode in kan typen, biedt de Arduino IDE nog enkele extra functies. Er zit o.a. een seriele¨ monitor in, een funtie waarmee je data die de Arduino naar de pc stuurt kan inlezen en weergeven als tekst op het scherm. Nog belangrijker is echter de compiler tool- chain. De compiler is verantwoordelijk voor het omvormen van je programmacode naar instructies die de ATmega328p op de Arduino kan begrijpen en uitvoeren. Hier komen heel wat ingewikkelde tussen- stappen bij kijken, maar gelukkig hoef je die niet te kennen om een Arduino te kunnen programmeren omdat de compiler achter de schermen wordt aangeroepen door de Arduino IDE. Nadat je programma gecompileerd is, zal de Arduino IDE de downloader aanroepen die het programma dan naar de Arduino downloadt en in de ATmega328p microcontroller programmeert.

De Arduino IDE vereenvoudigt al deze handelingen via enkele knoppen bovenaan het venster, waar- mee je respectievelijk de syntaxis kan controleren of kan compileren en downloaden in e´en´ stap.

3.2.1 C/C++ De ATmega328p beschikt over 32 kilobytes (kB) flashgeheugen en 2 kB RAM-geheugen (= werkge- heugen). Dit is voldoende om duizenden instructies in op te slaan en uit te voeren, maar niet genoeg om het volledige .NET Framework dat je voor C# nodig hebt te bewaren. Bijgevolg kan je Arduino’s dus helaas niet programmeren in C# maar is er een andere taal nodig die eenvoudiger is en dichter bij de hardware staat. Deze taal heet C. In feite is C# afgeleid van C, en de basissyntaxis van C# komt dus grotendeels overeen met C. De enige verschillen zijn de afwezigheid van alle .NET bibliotheken en de meeste objectgeori¨ enteerde¨ functionaliteit (events, controls etc.) in C. De enige uitzondering hierop zijn klassen en structuren, die je wel kan gebruiken. Declaratie van variabelen, functies, beslissingsstructu- ren en lussen is echter grotendeels identiek.

Momenteel is C de standaardtaal voor het programmeren van microcontrollers. Eens je het principe onder de knie hebt, kan je eigenlijk alle microcontrollers van alle fabrikanten programmeren. Je hoeft dan enkel de specifieke toolchains voor die microcontrolles te installeren op je pc. Microcontrollers programmeren kan je dus vergelijken met fietsen: er zijn wel wat verschillen tussen een stadsfiets en een mountainbike, maar wie kan fietsen kan beide besturen, en je zal er behoorlijk snel aan wennen. Je kan dan je printer, mp3-speler of elk ander toestel met een microcontroller erin programmeren net zoals je je Arduino Uno programmeert!

1https://www.arduino.cc/en/Main/Software

20 ing. Y. Verbelen DESIGNENPROTOTYPING 21

3.2.2 Shields en bibliotheken Doordat er zoveel elektronici bezig zijn met Arduino, zowel hobbyisten als professionals, bestaan er talloze uitbreidingsmodules die op het Arduino Uno ontwikkelbord kunnen ingeplugd worden. Deze modules heten in de Arduinowereld shields. Er bestaan shields die je Arduino toelaten om stappen- motors aan te sturen, verbinding te maken met Ethernet, uitrusten met accelerometers en gyroscopen, enzovoort. Veel van deze shields zijn bovendien open source zodat je ze zelf kan namaken. Shields zijn uitgerust met male headers die in de female board to board headers op de Arduino Uno passen.

Bij shields hoort meestal ook een codebibliotheek die ontwikkelaars helpt om de shields aan te stu- ren in software. Het doel van deze bibliotheken is om het gebruik van de shields transparant te maken voor de programmeur zodat die zich niet hoeft bezig te houden met het uitpluizen van schema’s om pinnummers op te zoeken, of met het doorgronden van datasheets. Bibliotheken vind je online, in repo- sitories zoals Sourceforge of Github, of via webshops die shields verkopen zoals Sparkfun of Adafruit.

Bibliotheken installeren doe je eenvoudigweg door de code te downloaden naar je pc en in de libraries folder van je Arduino IDE bij te plaatsen. Je kan ze dan vervolgens toevoegen aan je codeprojecten via include en vervolgens gebruiken.

Buiten specifieke bibliotheken die bij shields horen, zijn er ook ontelbare bibliotheken beschikbaar die het programmeren van Arduino gemakkelijker maken door te helpen bij het aansturen van interrupts (het equivalent van events op microcontrollers), het reguleren van delays, het berekenen van wiskundige functies enzovoort.

3.3 Programmastructuur

Een Arduinoprogramma bestaat uit 3 structurele elementen die steeds verplicht zijn, aangevuld met optionele functies en procedures. De 3 verplichte elementen zijn de declaraties (eng. declarations), initialisaties (eng. initialization of setup) en hoofdroutine (eng. main loop).

3.3.1 Declaraties Helemaal bovenaan je programma komen de declaraties. Dit zijn directieven voor de compiler, waar- mee je aangeeft welke bibliotheken je wenst te gebruiken, hoe je de pinnen van je Arduino benoemt, en welke variabelen je zal gebruiken in de rest van je programma.

Een eerste type delcaraties zijn includes. Hiermee kan je bibliotheken die je wenst te gebruiken toevoegen aan je programma. Om de bibliotheek voor wiskundige functies math toe te gebruiken in je programma, voeg je dan volgende code toe:

Listing 3.1: Een bibliotheek toevoegen aan het programma

1 // onderstaande regel voegt de bibliotheek math.h toe aan het programma:

2 #include

Je kan zoveel bibliotheken toevoegen als je wenst, maar denk eraan dat het beschikbare geheugen op een Arduino beperkt is! Als je dus onnodige bibliotheken meecompileert, dan zal je Arduino snel “vol” zitten.

Een tweede type declaraties zijn definities. Met definities kan je getallen een betekenis geven. De pinnen van een Arduino hebben allemaal een naam, de digitale pinnen zijn genummerd van 0 tot 13 en de analoge pinnen van A0 tot A5. Om de LED die op pin 13 staat te kunnen aansturen, declareer je pin 13 dus als LED als volgt:

Listing 3.2: Een pindeclaratie

1 // onderstaande regel declareert pin 13 als LED:

2 #define LED 13

21 22 DESIGNENPROTOTYPING ing. Y. Verbelen

Let op: achter definities volgt geen puntkomma! Op dezelfde manier kan je een potentiometer voor volumeregeling op pin A0 declareren, of een tekst HELLO die de waarde “hello world” bevat:

Listing 3.3: Enkele declaraties

1 // declaraties:

2 #define LED 13

3 #define VOLUME A0

4 #define HELLO"hello world"

Definities kennen geen type omdat het preprocessordirectieven zijn. In het geval van de LED zal de preprocessor overal in je code de identifier LED vervangen door het getal 13 of eender welke andere waarde die je aan LED hebt toegewezen. De compiler “ziet” deze definities dus niet omdat ze daarvoor al door de preprocessor vervangen zijn door hun effectieve waarde. Een alternatief is met constanten te werken. Een constante declareren gebeurt als volgt:

Listing 3.4: Een constantedeclaratie

1 // constanten van type double en string delcareren:

2 static const double euler = 2.71828;

3 static const char welcomeMsg[] ="Ready for world domination.";

Omdat declaraties van constanten door de compiler worden uitgevoerd en niet door de preprocessor moet elke declaratie afgesloten worden met een puntkomma. Waar definities enkel kunnen gebruikt worden om een naam te geven aan primitieven zoals getallen, karakters of tekst, kan om het even welk object als constante gedeclareerd worden. Het nadeel aan constanten is dan weer dat hun zichtbaarheid beperkt is tot het bestand waarin ze gedeclareerd zijn. De functie van static wordt hieronder ver- klaard.

Een laatste type declaraties zijn variabelen. Net zoals in C# bewaren variabelen de staat van je programma net zolang het loopt. Variabelen worden dus gewist telkens je de Arduino reset, door op de resetknop te drukken of de USB-kabel uit te trekken en weer in te steken. Een variabeledeclaratie reserveert een bepaalde reeks bytes in het geheugen voor toekomstig gebruik in je programma. Let erop dat je elke variabele initialiseert (een bepaalde waarde toewijst of op 0 zet). De meeste variabeletypes die je in C# kent, bestaan ook in C: int, float, char, byte etc. Variabelen die je bovenaan decla- reert zijn beschikbaar in alle functies en procedures in je programma. Het is echter best mogelijk dat veel voorkomende namen zoals LED, delay, counter etc. ook in bibliotheken worden gebruikt, wat conflicten oplevert. Om dit te verhinderen, declareer je je variabelen best als static. Daardoor zijn ze alleen bekend in het huidige bestand, wat geen conflicten kan opleveren met bibliotheken vermits die in andere bestanden zitten.

Het meest gebruikte variabeletype op microcontrollers is ongetwijfeld de integer, die gehele getallen kan bevatten. Integers zijn standaard bedoeld voor zowel positieve als negatieve gehele getallen. Weet je op voorhand dat je geen negatieve getallen nodig zal hebben, dan declareer je ze als unsigned (geen minteken) met de identifier uint waarbij de u staat voor unsigned. “Gewone” integers zijn dan signed en worden aangeduid met int.

In C is de standaardgroote van een integer afhankelijk van het platform. Op een 32-bit pc is een integer dus standaard 32 bits lang. Dit is echter niet zo op microcontrollers, die ook 8-bit of 16-bit kunnen zijn. Op een Arduino Uno is een integer bijvoorbeeld 16 bits, maar op een Arduino Due (een ander type Arduinobord) is het 32 bits! Dit leidt dus gemakkelijk tot verwarring. Op de pc kan je gerust elke integer 32 bits lang maken, want je hebt toch een zee van ruimte! Op een totaal van 4 GB of meer RAM-geheugen maken enkele bytes meer of minder geen verschil. Op microcontrollers heb je echter niet zoveel geheugen beschikbaar, dus als je op voorhand weet dat je in een lus van 0 tot 50 moet tellen dan heb je geen 32 bits integer nodig, maar kom je met een 8-bit integer ook toe (want 28 = 256 dus je kan tot 255 tellen). Enkele voorbeelden:

Listing 3.5: Delcaratie van variabelen op Arduino

22 ing. Y. Verbelen DESIGNENPROTOTYPING 23

1 // declaraties:

2 // een unsigned8 bit integer(byte) met bereik0 tot 255

3 static uint8_t counter = 0;

4 // een signed 16 bit integer(short) met bereik -32 768 tot 32 767

5 static int16_t bias = -12;

6 // een unsigned 32 bit integer(long) met bereik0 tot4 294 967 295

7 static uint32_t time = 0;

8 // een float(kommagetal) dat divider heet

9 static float divider = 0.0;

10 // een string die str heet en de waarde hello krijgt

11 static char str[] ="hello";

Voor meerdere variabelen van hetzelfde type kan je de declaraties ook combineren als volgt:

Listing 3.6: Gecombineerde variabeledeclaraties

1 // beginwaarden voor de PID-regelaar:

2 static float Kp = 12.0f, Ki = 0.53f, Kd = 0.04f;

3.3.2 Initialisaties

Na de declaraties komt de initialisatie van de microcontroller. In deze sectie wordt de hardware ge- configureerd met initiele¨ waarden. Afhankelijk van welke bibliotheken en shields je gebruikt, zullen er dus extra declaraties vereist zijn. De initialisatie hoort thuis in een speciale procedure die setup heet. Deze procedure retourneert geen waarde, en accepteert ook geen argumenten. De declaratie is als volgt:

Listing 3.7: void setup doet de initialisaties

1 // initialisatie:

2 void setup()

3 {

4 // hier komen alle instructies voor initialisatie

5 }

Er zijn 2 declaraties die steeds terugkomen, nl. het configueren van de seriele¨ poort die toelaat om met de pc te communiceren, en het instellen van de pinnen als inputs (ingangen) of outputs (uitgangen). Om de seriele¨ poort te configureren heb je maar e´en´ lijntje code nodig waarmee je de seriele¨ controller (UART, eng. universal asynchronous receiver and transmitter) vertelt aan welke frequentie er data moet verzonden worden. Deze intialisatie gebeurt als volgt:

Listing 3.8: Initialisatie van de seriele¨ verbinding (UART)

1 void setup()

2 {

3 // initialisatie van UART met een frequentie van 9600 Hz:

4 Serial.begin(9600);

5 }

Na deze intialisatie kan je data naar de pc sturen, of kan je ook commando’s van de pc inlezen! Om de pc te laten weten dat je Arduino actief is, kan je bijvoorbeeld volgende code schrijven:

Listing 3.9: Het eerste programma in elke programmeertaal: Hello world!

1 void setup()

2 {

3 // initialisatie van UART:

4 Serial.begin(9600);

5 // schrijf de tekst"hello world!" naar de pc::

6 Serial.println("hello world!");

7 }

Alle tekst en variabelen die je met de functies Serial.print() en Serial.println() naar de pc stuurt, komen daar op het scherm van de seriele¨ monitor terecht. Dit is dus een interessante manier

23 24 DESIGNENPROTOTYPING ing. Y. Verbelen om te debuggen door de waarden van variabelen naar de pc te schrijven.

Eveneens belangrijk is het instellen van de pinnen als inputs of outputs. Dit gebeurt met behulp van de functie pinMode(). Een pin kan ingesteld worden als input (om een spanning in te lezen) of output (om een logische ‘1’ of ‘0’ op de uitgang te kunnen zetten). Alle digitale pinnen kunnen ingesteld worden om zowel digitale spanningen te lezen of te sturen, de 6 analoge pinnen kunnen ook analoge spanningen inlezen. In het volgende voorbeeld wordt een drukknop ingesteld als digitale input, een potmeter als analoge input, en een LED als digitale output:

Listing 3.10: Initialisatie van de pinnen

1 #define BUTTON 2// drukknop op digitale pin2

2 #define POT A0// potmeter op analoge pin A0

3 #define LED 13// LED op digitale pin 13

4

5 void setup()

6 {

7 // initialisatie van UART:

8 Serial.begin(9600);

9

10 // richting van de gebruikte pinnen instellen:

11 pinMode(BUTTON, INPUT);// digitale input

12 pinMode(POT, INPUT);// analoge input

13 pinMode(LED, OUTPUT);// digitale output

14

15 Serial.println("initalisatie voltooid!");

16 }

De precieze betekenis van analoog en digitaal komt verderop nog aan bod.

3.3.3 Hoofdroutine Na de initialisaties kan je programma pas echt starten. Net zoals de initialisaties thuishoren in hun specifieke void setup wordt de code voor de hoofdroutine, het eigenlijke programma, geschreven in de void loop:

Listing 3.11: Declaratie van de hoofdroutine

1 // hierna volgt de hoofdroutine

2 void loop()

3 {

4 // eigenlijke code voor het programma

5 }

Wat gebeurt er als de laatste instructie in de hoofdroutine loop wordt bereikt? In je C# programma’s sluit het programma dan gewoon af, en wordt de besturing terug overgedragen aan het besturingssys- teem van je pc, zoals Linux of Windows. Op de Arduino draait echter geen besturingssysteem waaraan de controle kan overgedragen worden! De microcontroller zou dan voor eeuwig blokkeren totdat hij wordt gereset. Bij toestellen zoals je GSM of mp3-speler betekent dit dat je de batterij er zou moeten uithalen, en dat is verre van praktisch. Om dit te vermijden wordt de code in microcontrollers in een lus uitgevoerd, in Arduino heet dit dus void loop. Als het einde van void loop wordt bereikt, dan springt de uitvoering terug naar het begin ervan. Alle initalisaties staan echter in void setup en worden dus niet opnieuw uitgevoerd.

Bekijk onderstaand voorbeeld. In dit programma wordt een LED op digitale pin 13 gedeclareerd als OUTPUT. Meteen bij de start van de void loop wordt de uitgang van de LED digitaal “hoog” gemaakt. Er komt dus 5 V op deze uitgang te staan, waardoor de LED die is aangesloten zal oplichten. Vervolgens wordt met delay() 1 seconde gewacht, waarna de spanning weer 0 wordt gemaakt om de LED uit te schakelen, en er weer 1 seconde wordt gewacht.

Listing 3.12: Blink

24 ing. Y. Verbelen DESIGNENPROTOTYPING 25

1 #define LED 13

2

3 void setup()

4 {

5 // initialisatie van de seriele verbinding

6 Serial.begin(9600);

7

8 // configureer LED als output

9 pinMode(LED, OUTPUT);

10 }

11

12

13 void loop()

14 {

15 // doe de LED aan:

16 digitalWrite(LED, HIGH);

17 Serial.println("LED is nu aan!");

18

19 // wacht1 seconde= 1000 ms

20 delay(1000);

21

22 // doe de LED weer uit

23 digitalWrite(LED, LOW);

24 Serial.println("LED is nu uit!");

25

26 // wacht weer1 seconde

27 delay(1000);

28 }

Je zou kunnen denken dat de LED dus slechts e´en´ keer oplicht, en daarna steeds gedoofd blijft. Maar doordat de code in void loop staat, springt de uitvoering van het programma na de laatste delay weer naar de eerste instructie van void loop. Daardoor wordt de LED weer aangeschakeld en begint de cyclus opnieuw. Als je dit programma uitvoert, dan merk je dat de LED op je Arduino eeuwig aan en uit blijft knipperen.

Je kan zoveel code toevoegen als je wil aan void loop, maar denk eraan dat de uitvoering dan ook langer zal duren. Als je programma snel moet reageren, bijvoorbeeld als er op een knop wordt gedrukt, dan moet je trachten de void loop zo kort mogelijk te houden. Hierbij kunnen interrupts helpen, het microcontrollerequivalent van events in C#.

3.4 Hardwarecomponenten

Online zijn er talloze codevoorbeelden (eng. code snippets) te vinden waarmee je snel aan de slag kunt. Het is ook niet de bedoeling van deze handouts om een handboek “Arduino’s programmeren” te imiteren. Het is wel nuttig om enkele vaak gebruikte hardwarefuncties te vermelden en te beschrijven.

3.4.1 Digitale pinnen De Arduino beschikt over 14 digitale pinnen, genummerd van 0 tot 13. Pinnen 0 en 1 zijn gereserveerd voor de seriele¨ verbinding (UART) en gebruik je dus best niet voor andere toepassingen. Digitale pinnen kan je gebruiken als input of als output, respectievelijk.

Listing 3.13: Digitale pinnen

1 #define BUTTON 12

2 #define LED 13

3

4 void setup()

5 {

6 Serial.begin(9600);

7

25 26 DESIGNENPROTOTYPING ing. Y. Verbelen

8 pinMode(BUTTON, INPUT);

9 pinMode(LED, OUTPUT);

10 }

11

12 void loop()

13 {

14 // toestand van de knop inlezen in variabele

15 uint8_t buttonState = digitalRead(BUTTON);

16

17 // doe de LED aan als de knop wordt ingedrukt:

18 digitalWrite(LED, buttonState);

19 }

Op een digitale pin die logisch “1” (HIGH) wordt gezet komt een spanning van ca. 5 V te staan, op een pin die logisch “0” (LOW) is een spanning van 0 V. Omgekeerd levert een digitalRead() van 5 V een logische “1” op en een digitalRead() van 0 V een logische “0”. Praktisch zullen spanningen hoger dan ca. 3.5 V als “1” worden gelezen, en alles wat lager is als “0”.

De stroom die een digitale pin kan leveren (eng. current sourcing) of kan opnemen (eng. current sinking) is gelimiteerd tot ca. 20 mA per pin zoals ook in figuur 3.2 is aangegeven. De volledige AT- mega328p kan maximaal 200 mA leveren, gespreid over alle pinnen. Kleine belastingen zoals LED’s en digitale sturingen van sensors of displays vormen dus geen probleem, maar grotere belastingen zoals een DC-motor of stappenmotor kan de ATmega328p zeker niet aan. Hiervoor heb je dus driverelektronica zoals transistors nodig.

3.4.2 Analoge pinnen De Arduino beschikt ook over 6 analoge pinnen, genummerd van A0 tot A5, zie figuur 3.2. Analoge pinnen zijn intern verbonden met een hardwareblok dat analoge signalen kan converteren naar digitale signalen, de ADC (eng. analog to digital converter). De ADC converteert een spanning tussen 0 V en 5 V naar een getal tussen 0 en 1023. Een spanning van 0 V resulteert dus in 0, 2.5 V resulteert in ca. 512 en 5 V resulteert in 1023 enzovoort. De ADC van een Arduino heeft dus een resolutie van 10 bits, vermits het resultaat van de conversie 210 = 1024 verschillende getallen kan zijn.

Om de ADC te gebruiken moet je de respectievelijke analoge pin als INPUT initialiseren. Je kan de ADC activeren met de functie analogRead(). Merk op dat je de 6 analoge pinnen ook even goed digitaal kan inlezen met digitalRead() als je dat wenst. Je krijgt dan uiteraard een digitale waarde (HIGH of LOW) terug.

Listing 3.14: Analoge pinnen

1 #define TEMP A0// temperatuursensor op analoge pin A0

2

3 void setup()

4 {

5 Serial.begin(9600);

6

7 pinMode(TEMP, INPUT);

8 }

9

10 void loop()

11 {

12 // temperatuur inlezen in een 16 bits unsigned integer:

13 uint16_t temp = analogRead(TEMP);

14

15 if (temp < 300)

16 Serial.println("it’s too cold here!");

17 else if (temp > 800)

18 Serial.println("it’s too hot here!");

19 }

26 ing. Y. Verbelen DESIGNENPROTOTYPING 27

De ADC is erg gevoelig voor overspanningen, dus ontwerp je schakeling zodanig dat er in geen enkele situatie een spanning hoger dan 5 V op de ingangen kan terecht komen! Figuur 3.2 toont de limitaties op deze pinnen.

3.4.3 Pulsbreedtemodulators

Het omgekeerde van een analoog-digitaalconverter (ADC) bestaat ook en heet een digitaal-analoog- converter (DAC). Helaas beschikt de ATmega328p niet over een eigen DAC, maar dit kan opgelost worden via een kleine omweg. De ATmega328p heeft namelijk wel´ pulsbreedtemodulators aan boord (eng. pulse width modulation, PWM). De digitale pinnen waarop een PWM-signaal kan gegenereerd worden, zijn aangeduid in figuur 3.2. Een PWM-generator produceert een continue reeks pulsen waar- van de breedte kan ingesteld worden. In figuur 3.3 zie je enkele voorbeelden van PWM-signalen. De verhouding tussen de pulsbreedte en de periode van het signaal heet de duty cycle en wordt uitgedrukt in procenten. Een PWM-signaal met duty cycle 0 % is dus constant logisch “0”, met duty cycle 50 % half “1” en half “0”, en met duty cycle 100 % constant logisch “1”.

PWM V analoog signaal 1

0 80% 50% 20% 50% 80% duty cycle

Figuur 3.3: Een PWM-signaal, met aanduiding van de duty cycle in procenten op de x-as. In stippenlijn het resulterende analoge signaal na een laagdoorlaatfilter. (figuur: Cyril Buttay, CC BY-SA 3.0)

Je kan een PWM-signaal zonder probleem direct naar een LED sturen, waarmee je hem kan dimmen. Dit doe je door de functie analogWrite() op te roepen op pinnen die aan de PWM-generator van de ATmega328p hangen. De functie analogWrite() verwacht e´en´ byte (= 8-bit integer). Deze pinnen zijn op het Arduinobord gemarkeerd met een tilde. In onderstaand voorbeeld wordt de LED op de Arduino gedimd met de waarde van een potentiometer.

Listing 3.15: PWM-genenerator

1 #define POT A0// potentiometer

2 #define LED 13// LED

3

4 void setup()

5 {

6 Serial.begin(9600);

7

8 pinMode(POT, INPUT);

9 pinMode(LED, OUTPUT);

10 }

11

12 void loop()

13 {

14 // 10 bit waarde van potentiometer inlezen in een 16 bit integer:

15 uint16_t brightness = analogRead(POT);

16

17 // helderheid schalen van 0-1023 naar 0-255 met een logische shift:

18 uint8_t pwm = (brightness >> 2);

19

20 // PWM-generator gebruiken om de LED te dimmen:

27 28 DESIGNENPROTOTYPING ing. Y. Verbelen

21 analogWrite(LED, pwm);

22 }

De shiftoperatie wordt hier gebruikt om een 10-bit getal afgekomstig van de ADC te converteren naar een 8-bit getal door de 2 minst beduidende bits (eng. least significant bits) te laten vallen. Een 10-bit integer type is echter niet gedefinieerd op Arduino, dus moet het originele getal in het dichtstbijzijnde grotere type bewaard worden, in dit geval een 16-bit integer.

Soms wil je een volwaardig analoog signaal en geen PWM, bijvoorbeeld als je met je Arduino mu- ziek wil produceren die via een luidspreker moet afgespeeld worden. Een PWM-signaal zal in dat geval vervelende pieptonen genereren. Dit probleem kan opgelost worden door het PWM-signaal door een laagdoorlaatfilter te sturen, die het omvormt tot een analoog signaal met een ripple die laag genoeg is voor de meeste toepassingen. Figuur 3.4 toont een actieve Sallen-Key laagdoorlaatfilter (eng. low pass filter) die voor deze toepassing kan gebruikt worden. De precieze werking van dit type filter wordt uit- voerig besproken in de cursus Ge¨ıntegreerde Elektronische Systemen in de 3e Bachelor Elektronica.

10µ C1 +5V + C3 100n Arduino PWM R1 R2 A 1k 1k R3 R4 analog C2 IC1A 1k 1k out C4 IC1B B IC1 = LM358 10µ 100n

Figuur 3.4: Een 4e orde Sallen-Key laagdoorlaatfilter om PWM-signalen van een Arduino om te vormen naar een analoog signaal.

Tip: als de ripple na een eerste laagdoorlaatfilter nog te hoog is, kan je er een tweede filter achter plaatsen om de ruis verder te onderdrukken.

3.4.4 Seriele¨ communicatie Seriele¨ communicatie is de voornaamste communicatie-interface met de buitenwereld voor de Arduino. In de ATmega328p wordt dit afgehandeld door de UART-controller (eng. universal asynchronous recei- ver and transmitter). Deze signalen, die RX (ontvanger, eng. receiver) en TX (zender, eng. transmitter) heten, zijn beschikbaar op digitale pinnen 0 en 1 die op de Arduino ook aangeduid zijn als TX en RX (zie figuur 3.2). Deze pinnen gebruik je dus bij voorkeur niet voor andere toepassingen. Via RX kan je dus informatie die van de pc verstuurd wordt in de Arduino ontvangen, via TX kan de Arduino ook zelf informatie versturen.

Omdat nieuwe laptops niet meer uitgerust worden met een DB-9 connector voor seriele¨ interfaces, beschikt de Arduino Uno over een USB-controller die de TX en RX signalen omvormt tot USB-signalen. Die kunnen dan via de pc worden ingelezen. Op die manier kan de Arduino informatie rapporteren aan de pc, of de pc kan commando’s naar de Arduino sturen.

De UART-controller moet ge¨ıntialiseerd worden met de juiste zendfrequentie voor hij gebruikt kan worden. Dat gebeurt met Serial.begin() zoals al eerder werd gedemonstreerd in de void setup functie:

Listing 3.16: Initialisatie van de UART-controller

1 void setup()

2 {

3 // UART-controller initialiseren met een zendfrequentie van 9.6 kHz:

4 Serial.begin(9600);

5 }

28 ing. Y. Verbelen DESIGNENPROTOTYPING 29

De frequentie die je instelt in je Arduino moet dezelfde zijn als die van de seriele¨ monitor op de pc, zo niet zal je enkel rare karakters zien of helemaal niks omdat de pc de data niet correct kan decoderen en vice versa. Een frequentie van 9.6 kHz is min of meer standaard, maar je kan elke frequentie gebruiken zolang je maar dezelfde instelt op Arduino en pc.

Data versturen kan met het commando println() voor een lijn die gevolgd wordt door een re- geleinde, en print() zonder regeleinde. Als je data verstuurt via println() komt die tekst onder elkaar in de seriele¨ monitor op de pc, stuur je met print() dan komt de tekst naast elkaar op dezelfde lijn. Je kan zowel strings, karakters als variabelen versturen:

Listing 3.17: Een analoge lichtsensor en digitale schakelaar rapporteren aan de pc

1 #define LDR A0// lichtsensor

2 #define SWITCH 4// schakelaar

3

4 void setup()

5 {

6 Serial.begin(9600);

7

8 pinMode(LDR, INPUT);

9 pinMode(SWITCH, INPUT);

10 }

11

12 void loop()

13 {

14 // waarde van lichtsensor inlezen:

15 uint16_t illuminance = analogRead(LDR);

16 // toestand van schakelaar inlezen:

17 uint8_t switchState = digitalRead(SWITCH);

18

19 // data over UART versturen naar de pc:

20 Serial.print("Illuminance value is"); Serial.print(illuminance);

21 Serial.print(" and switch is");

22 if (switchState > 0)

23 Serial.println("on.");

24 else

25 Serial.println("off.");

26 }

De te versturen karakters en variabelen worden door de println() en print() functies in de uit- gangsbuffer van de UART-controller geplaatst, die ze vervolgens verzendt aan de frequentie die je hebt ingesteld, bijvoorbeeld 9.6 kHz. Op een Arduino Uno is de buffer 64 bytes groot, dus als je minder dan 64 karakters verzendt dan kunnen die allemaal in de buffer en loopt je programma meteen na uitvoering van de instructie println() of print() verder. De UART-controller verzendt vervolgens de data in zijn buffer aan zijn eigen tempo. Als je meer dan 64 bytes verstuurt, dan pauzeert je programma totdat er ruimte vrijkomt in de buffer.

Data versturen naar de pc is een handige manier om de uitvoering van je programma te volgen, en er is geen limiet op hoeveel tekst je kan versturen. Denk er wel aan dat de UART-controller een grootte- orde trager loopt dan je programma, dat aan een snelheid van 16 MHz wordt uitgevoerd. Een´ karakter versturen kost 11 bits (8 databits, een startbit, een stopbit en een pariteitsbit), en dus kan je aan 9.6 kHz maximaal ca. 870 bytes per seconde naar de pc sturen. Wil je meer, dan zal je de communicatiefre- quentie van de UART-controller moeten opdrijven, om te verhinderen dat de volledige uitvoering van je programma vertraagt.

Naast data versturen kan de UART-controller ook seriele¨ data ontvangen. Net zoals bij het versturen wordt binnenkomende data in een 64 bytes grote buffer geplaatst, waaruit je sequentieel¨ (ene byte na de andere) kan lezen. Je kan checken of er data in de buffer zit met de functie available(), die het aantal bytes retourneert dat in de buffer aanwezig is. Deze bytes kunnen vervolgens uitgelezen worden met de functie read(). De functie read() leest e´en´ byte, met readBytes() kan ook een

29 30 DESIGNENPROTOTYPING ing. Y. Verbelen willekeurig aantal bytes gelezen worden. Beide functies verwijderen de respectievelijke bytes uit de buffer, zodat er ruimte wordt vrijgemaakt om nieuwe data te ontvangen. Als je dus meerdere keren read() achter elkaar aanroept, dan zal je telkens een andere waarde krijgen, op voorwaarde dat er voldoende bytes in de buffer zitten natuurlijk. Als het niet wenselijk is om een byte uit de buffer te verwijderen, maar je wilt de waarde wel kennen, gebruik dan de functie peek(). Herhaaldelijk peek() aanroepen zal steeds dezelfde waarde retourneren. Een voorbeeld:

Listing 3.18: LED controleren vanaf de pc

1 #define LED 13

2 #define ON 49

3 #define OFF 48

4

5 void setup()

6 {

7 Serial.begin(9600);

8

9 pinMode(LED, OUTPUT);

10 }

11

12 void loop()

13 {

14 if (Serial.available() > 0)// check of er bytes in de UART-buffer zitten

15 {

16 // lees het volgende karakter uit de buffer:

17 uint8_t command = Serial.read();

18

19 if (command == ON)

20 // schakel de LED in als het karakter ’0’ wordt gestuurd door de pc

21 digitalWrite(LED, HIGH);

22 else if (command == OFF)

23 // schakel de LED uit als het karakter ’1’ wordt gestuurd door de pc

24 digitalWrite(LED, LOW);

25 }

26 }

In dit voorbeeld wordt gechecked of er bytes in de UART-buffer zitten. Als er minstens e´en´ byte be- schikbaar is in de buffer dan wordt die uitgelezen en in variabele command opgeslagen. Als de byte overeenkomt het het karakter ‘0’ (ASCII code 48) dan wordt de LED op de Arduino uitgeschakeld, is het karakter ‘1’ (ASCII code 49) dan wordt de LED ingeschakeld.

Let op: de buffer die ontvangen data opslaat is slechts 64 bytes groot. Maak er dus een goede ge- woonte van om de buffer regelmatig uit te lezen zodanig dat er steeds voldoende ruimte beschikbaar is om nieuwe data van de pc te ontvangen. Als je probeert om meer dan 64 bytes in de buffer te stoppen dan loopt de buffer over (eng. overflow) en gaat deze data verloren omdat er geen plaats is om ze op te slaan!

Omdat stap voor stap debuggen via breakpoints niet mogelijk is in de Arduino IDE, is de seriele¨ communicatie met de pc de perfecte manier om je programma te debuggen door de waarden van al- lerlei variabelen en toestanden naar de pc te sturen zodat je het verloop van je programma kan vol- gen. Hiervoor zal je typisch op een groot aantal plaatsen in je programma Serial.print() en Serial.println() aanroepen met verschillende argumenten. Eens je programma lijkt te werken wil je echter kunnen testen zonder al deze debugging info. De preprocessor kan hier opnieuw helpen dankzij het #ifdef commando. Hiermee kan je checken of een identifier werd gedefinieerd,¨ en in dat geval extra code toevoegen. Dit kan je gebruiken om gecentraliseerd alle debugging info in e´en´ keer aan of uit te schakelen. Het volgende voorbeeld illustreert dit principe.

Listing 3.19: Debugginginfo aan of uit zetten met ifdef

30 ing. Y. Verbelen DESIGNENPROTOTYPING 31

1 // declaratie van een identifier die DEBUG heet

2 #define DEBUG

3

4 #define WHEEL A0// potentiometer op analoge ingang A0

5

6 void setup()

7 {

8 Serial.begin(9600);

9 pinMode(WHEEL, INPUT);

10

11 // declaratie van DEBUG bepaalt welke lijn code wordt gecompileerd:

12 #ifdef DEBUG

13 Serial.println("Debugging mode activated!");

14 #else

15 Serial.println("Debugging mode disabled.");

16 #endif

17 }

18

19 void loop()

20 {

21 // waarde van de potentiometer inlezen:

22 uint16_t wheelValue = analogRead(WHEEL);

23 #ifdef DEBUG

24 // in debugging mode waarde van de potentiometer naar de pc sturen:

25 Serial.print("Analog value on pin A0:" ); Serial.println(wheelValue);

26 #endif

27

28 // potentiometer omrekenen naar een hoek tussen -90 en 90

29 float wheelAngle = 0;

30 if (wheelValue >= 512) 31 wheelAngle = (wheelValue - 512) * 90 / 512; 32 else 33 wheelAngle = -(512 - wheelValue) * 90 / 512; 34 #ifdef DEBUG

35 // in debugging mode berekende hoek naar de pc sturen:

36 Serial.print("Calculated angle:"); Serial.println(wheelAngle);

37 #endif

38 }

De preprocessor merkt bovenaan je code de declaratie van de identifier DEBUG en zal overal in het programma de lijnen code tussen #ifdef DEBUG en #endif toevoegen aan het programma. Als DEBUG niet is gedefinieerd¨ dan verwijdert de preprocessor deze lijnen code en worden ze dus niet meegecompileerd. In tegenstelling tot een gewone if voorwaarde, die steeds wordt meegecompileerd, vergroot #ifdef je programma dus niet. Om debugging mode uit te schakelen zet je de lijn code die DEBUG declareert simpelweg in commentaar. In de 3e Bachelor Elektronica leer je meer over de verschillende functies van de preprocessor en de compiler, en hoe die je het leven gemakkelijker maken.

3.4.5 Interrupts Interrupts zijn het microcontrollerequivalent van events in C#. Een interrupt is een speciaal mechanisme in microcontrollers die de normale uitvoering van het programma pauzeren om een dringende taak uit te voeren als er een externe impuls of event optreedt. Als de microcontroller zo’n event detecteert, springt de uitvoering van de code onmiddellijk naar een speciale functie, de interruptserviceroutine (ISR), die wordt uitgevoerd. Daarna gaat de uitvoering van het programma verder op de plaats waar het werd onderbroken door de interrupt.

Een Arduino heeft 2 hardware-interrupts, respectievelijk op digitale pinnen 2 en 3, die INT0 en INT1 heten, zoals is aangegeven in figuur 3.2. Signalen op deze pinnen worden dus continu gemonitored. Als er een verandering plaatsvindt op deze pinnen, bijvoorbeeld een signaal dat van logisch “1” naar logisch “0” gaat, dan kan je daar een ISR aan koppelen. In deze functie schrijf je vervolgens de code die moet uitgevoerd worden als de interrupt wordt getriggerd. Hou de code in een ISR steeds zo kort mogelijk.

31 32 DESIGNENPROTOTYPING ing. Y. Verbelen

Delay en timerfuncties kunnen niet gebruikt worden in een ISR. Het voorbeeld hieronder maakt de werking van een ISR duidelijk.

Listing 3.20: Snel inspelen op interrupts via ISR

1 // pinnen van temperatuurinput en reactor

2 #define CRITICAL_TEMP 2

3 #define REACTOR 5

4

5 // volatile variabele die de status van de reactor bijhoudt

6 volatile static uint8_t reactorState = 0;// status

7

8 // functieprototype van de ISR

9 void emergencyStop(void);

10

11 void setup()

12 {

13 Serial.begin(9600);

14

15 pinMode(CRITICAL_TEMP, INPUT);

16 pinMode(REACTOR, OUTPUT);

17

18 // koppel de ISR’emergencyStop’ aan een stijgende flank event op INT0:

19 attachInterrupt(0, emergencyStop, RISING);

20

21 digitalWrite(REACTOR, HIGH);// reactor inschakelen

22 reactorState = 1;// update status

23

24 Serial.println("Reactor started.");

25 }

26

27 void loop()

28 {

29 // statusupdate elke 100 ms

30 if (reactorState)

31 Serial.println("Reactor still running...");

32 else

33 Serial.println("Reactor offline.");

34 delay(100);

35 }

36

37 void emergencyStop()

38 {

39 // interrupt getriggerd, reactor direct uitschakelen!

40 digitalWrite(REACTOR, LOW);

41 Serial.println("omfg reactor overheated, we almost died!");

42 reactorState = 0;// update status

43 }

In bovenstaand voorbeeld wordt de ISR emergencyStop() getriggerd bij een stijgende flank op INT0, fysich digitale pin 2. Dit wordt aangegeven door het RISING sleutelwoord wanneer de ISR aan de interrupt wordt gekoppeld in void setup(). Het omgekeerde is FALLING, nl. het triggeren op een dalende flank. Om op beide flanken te triggeren gebruik je het sleutelwoord CHANGE (elke veran- dering).

De globale variabele reactorState wordt gebruikt om een toestand tussen de ISR en de hoofd- routine te commmuniceren. Omdat bij een interrupt de instructiepointer opeens verspringt zonder de variabelecontext van de lopende code op te slaan, kan je variabelen niet op de normale manier doorge- ven of wijzigen binnen interrupt handlers. Om een globale variabele te wijzigen binnen een interrupt dien je die als volatile te declareren, zoals aangegeven in het voorbeeld.

32 ing. Y. Verbelen DESIGNENPROTOTYPING 33

3.4.6 Timers

In tegenstelling to de meeste andere microcontrollers, zijn de hardwaretimers op een Arduino niet ge- makkelijk rechtstreeks aan te spreken. Om processen te timen, moet je dus gebruik maken van een externe timer die bijvoorbeeld op e´en´ van de interrupts is aangesloten, zoals in de vorige paragraaf werd ge¨ıllustreerd. Gelukkig biedt Arduino nog andere technieken om de tijd bij te houden.

Met de functies millis() en micros() kan het aantal ms resp. µs opgevraagd worden sinds de laatste globale reset van de microcontroller. Het getal dat door millis() wordt geretourneerd neemt dus steeds toe. Het datatype van millis() is een int32 t, en de maximale waarde wordt bereikt na ca. 50 dagen waarna millis() weer vanaf 0 begint te tellen. Het gedrag van micros() is identiek. Je kan beide functies dus gebruiken om een actie uit te voeren nadat er een bepaalde tijd verstreken is.

Listing 3.21: Tijd bijhouden via millis en micros

1 static uint32_t time = 0;

2 static uint16_t ticks = 0;

3

4 void setup()

5 {

6 Serial.begin(9600);

7 }

8

9 void loop()

10 {

11 if (millis() > (time + 1000))// seconde verstreken

12 {

13 time = millis();// huidige aantal milliseconden toewijzen aan variabele time

14 ticks++;// verhoog tick counter

15 Serial.print("Seconds passed since startup:"); Serial.println(ticks);

16 }

17 }

Als je enkel een bepaalde tijd wil wachten in je programma, m.a.w. het programma pauzeren, dan is millis() en micros() hiervoor een omslachtige techniek. Arduino biedt echter ook 2 delayfunc- ties, nl. delay() dat het programma een gewenst aantal ms pauzeert, en delayMicroseconds() dat het programma een aantal µs pauzeert. Het nadeel aan beide delays is dat het programma niks nuttig kan doen terwijl het wacht, de uitvoering wordt effectief geblokkeerd. Volgend voorbeeld illustreert hoe je met delays zelf een PWM-generator kan programmeren.

Listing 3.22: Uitvoering pauzeren met delays

1 #define POT A0

2 #define LED 13

3

4 void setup()

5 {

6 pinMode(POT, INPUT);

7 pinMode(LED, OUTPUT);

8 }

9

10 void loop()

11 {

12 // waarde van potentiometer lezen als input voor de PWM duty cycle

13 uint16_t value = analogRead(POT);

14

15 digitalWrite(LED, HIGH);

16 delayMicroseconds(value);

17 digitalWrite(LED, LOW);

18 delayMicroseconds(1024 - value);// totale periode= 1024 us

19 }

33 34 DESIGNENPROTOTYPING ing. Y. Verbelen

Je merkt meteen ook het nadeel van deze techniek: door de extra rekentijd die nodig is voor de ADC (uitlezen potentiometer) en het berekenen van het verschil tussen 1024 en value zal de werkelijke pe- riode iets langer zijn, en de duty cycle ook afwijken. Voor nauwkeurige sturingen zoals de ESC’s van quadcopters kan je dit dus niet gebruiken, maar voor minder kritische applicaties kan het wel degelijk nuttig zijn.

3.5 Documentatie

Naarmate de complexiteit van je programma’s toeneemt zal ook het aantal variabelen, klassen, functies en andere codestructuren waar je van gebruik maakt toenemen. Omdat het in dergelijke situaties geen evidentie meer is om de precieze functie van bepaalde stukken complexe code te achterhalen, is het van belang je werk voldoende te documenteren. Bij kleine programma’s van minder dan 100 regels code lijkt dit misschien tijdverlies, maar dat is het niet. Stel bijvoorbeeld dat je programma een half jaar vlot draait, en dan besluit je om extra functionaliteit toe te voegen. Hoeveel tijd zou het je kosten om uit te vissen hoe je programma precies werkt zonder documentatie? Als er tientallen variabelen of functies gedeclareerd zijn dan is dat zeker geen evidentie, en heb je misschien de neiging om het programma te- rug vanaf nul te schrijven in plaats van het bestaande programma aan te passen. Dat is dus verloren werk.

Als ingenieur ben je natuurlijk ook niet alleen op de wereld. Het wekkerproject doe je weliswaar zelfstandig, maar volgend jaar wordt je met het Ontwerpproject voor een grotere uitdaging gesteld. Het Ontwerpproject is echter een groepsproject, en dus moet al je code zodanig gedocumenteerd zijn dat je groepsleden ze kunnen begrijpen en er wijzigingen of verbeteringen in kunnen aanbrengen. Om iemand anders zijn code te kunnen debuggen is het niet voldoende om oppervlakkig te weten hoe ze werkt, maar er is diepgaand inzicht voor nodig. Hiervoor is documentatie dus essentieel.

3.5.1 Commentaar De gemakkelijkste manier om je code te documenteren is via commentaar (eng. comments) in C. Com- mentaar herken je aan de groene highlighting (of grijze highlighting in Arduino IDE), en wordt zowel door de preprocessor als de compiler genegeerd. Commentaar dient dus uitsluitend om mensen die de code lezen inzicht te verschaffen in de werking ervan.

In C zijn er 2 manieren om commentaar te markeren. Een enkele lijn commentaar kan je laten voorafgaan met een dubbele slash (//), meerdere lijnen commentaar zet je tussen comment tokens als volgt: /* dit is commentaar */. Omdat de compiler geen rekening houdt met regeleindes, kan je commentaar op het even welke plaats in je code toevoegen.

Listing 3.23: Documentatie met commentaar

1 // definities:

2 #include // voor de exp() functie

3 #define LED 13// LED op pin 13 op Arduino Uno

4 #define G 9.8172// gravitatieconstante

5 #define UART 9600// frequentie voor UART hier aanpassen

6 7 /* aansluiting van de stappenmotor in volgorde: 8 - rood

9 - blauw

10 - groen 11 - zwart */ 12 static const uint8_t stepperPins[] = {4, 5, 7, 6};

13

14 void setup()

15 {

16 // frequentie voor UART aanpassen in definities!

17 Serial.begin(UART);

18

34 ing. Y. Verbelen DESIGNENPROTOTYPING 35

19 // alle pinnen voor de stappenmotor als output configureren

20 for (uint8_t pin = 0; pin < sizeof(stepperPins); pin++)

21 pinMode(stepperPins[pin], OUTPUT);

22 }

3.5.2 Header Omdat je wellicht meerdere versies zal schrijven van je software, die bij verschillende versies van je hardware passen bijvoorbeeld, is het warm aanbevolen om bovenaan je programma versie-informatie toe te voegen en een datum te vermelden. Gebruikelijk staat dit bovenaan je code en heet dan de header van je programa. De versie-informatie kan je dan rechtstreeks ook naar de pc printen via de seriele¨ monitor zodat steeds duidelijk is welke versie van je programma er wordt uitgevoerd. Dit verhindert dat er aanpassingen worden gedaan in verkeerde versies of dat de hardware fout wordt aangestuurd.

Listing 3.24: Versie en datum in commentaar

1 /* 2 Kirov Flight Controller

3 versie 2.4

4 laatste aanpassing: 22/03/2015 door Eric Cartman

5 hoort bij elektronica versie 0.8

6

7 !! bugs in deze versie, niet meer gebruiken!! 8 */ 9 #ifndef VERSION

10 #define VERSION"2.4"

11 #endif

12

13 #define OBSOLETE

14

15 #define LED 13// LED op pin 13

16 #define ENGINE 6// aandrijving op pin6(enkel PWM pinnen!)

17 #define UART 9600// frequentie voor UART hier aanpassen

18

19 void setup()

20 {

21 Serial.begin(UART);

22 Serial.print("Kirov Flight Controllerv"); Serial.println(VERSION);

23

24 #ifdef OBSOLETE

25 Serial.println("Opgelet: verouderde versie, niet meer gebruiken!");

26 #endif

27 }

Bovenstaande voorbeeld toont goed gedocumenteerde code. De versie en datum van laatste aanpassing staan vermeld, en de versie van het programma wordt gedefinieerd¨ als dat nog niet eerder gebeurde. Die versie-informatie wordt serieel¨ naar de pc gestuurd zodat ze op het scherm verschijnt telkens het programma opstart. Er is ook een identifier OBSOLETE voorzien, die kan geactiveerd worden als de code verouderd is. In dat geval wordt er ook een waarschuwing weergegeven.

3.6 Ontwerpcyclus

Telkens je een programma download naar de Arduino, wordt het in het flashgeheugen van de AT- mega328p microcontroller opgeslagen. Flash is een niet-volatiel geheugentype, het behoudt zijn data ook als de stroom wordt uitgeschakeld. Jouw eigen firmware blijft dus in de microcontroller zitten todat je ze overschrijft met een nieuw programma.

Eens je de ATmega328p geprogrammeerd hebt, vervalt eigenlijk het nut van heel wat elektronica op het Arduinobord: de LED’s voor debugging heb je niet meer nodig, de USB-controller ook niet, en de bijhorende USB-connector dus zeker niet (tenzij je een wekker met USB-aansluiting wil natuurlijk!).

35 36 DESIGNENPROTOTYPING ing. Y. Verbelen

Arduino’s zijn in de eerste plaats rapid prototpying hulpmiddelen, en het is niet de bedoeling dat ze in finale versies worden ge¨ıntegreerd. Eens je eerste prototype af is en je software werkt, dan neem je de ATmega328p van de Arduino af, en je integreert hem meteen in je eigen elektronisch design, een printplaatje bijvoorbeeld. Het enige wat je hiervoor nodig hebt, is een kwartskristal van 16 MHz en 2 condensators van 22 pF tot 27 pF om de ATmega328p van een kloksignaal to voorzien. Van zodra je de ATmega328p weer van voeding voorziet, zal je programma meteen weer opgestart worden!

In het volgende hoofdstuk leer je hoe je zelf een printplaat of PCB (eng. ) kan ontwerpen aan de hand van een eenvoudig voorbeeld.

36 4 PCB-ontwerp

Nothing shocks me. I’m a scientist.

Indiana Jones

4.1 Inleiding

Bij het bouwen van je wekkerprototype op breadboard heb je gemerkt dat aan breadboards veel voorde- len, maar ook veel nadelen verbonden zijn. Schakelingen bouwen en testen verloopt weliswaar vlot, en je kan gemakkelijk componenten toevoegen of wisselen, maar de schakeling is ook heel fragiel. Dra- den die loskomen, slecht contact maken, of componenten die niet goed vast zitten, kunnen leiden tot onverklaarbaar gedrag in schakelingen, met alle frustraties van dien. Hoewel een breadboard dus een uitstekend prototypingmedium is, is het zeker niet geschikt voor een finale versie van je wekker die jarenlang op je nachtkastje zal staan. Arduino’s zijn al evenmin geschikt om in finale versies te zitten. Daarvoor moet de elektronica dus omgezet worden naar een robuustere en “definitievere” vorm.

De meest toegepaste oplossing is gebruik makend van gedrukte schakelingen (printed circuit boards, PCB), ook wel prints of printplaten genoemd. PCB’s hebben verschillende voordelen ten opzichte van breadboards:

• componenten zitten vast gesoldeerd, en kunnen dus niet loskomen;

• componenten kunnen veel dichter bij elkaar geplaatst worden, en dus wordt de schakeling kleiner;

• eens je het ontwerp van een PCB hebt, kan je met weinig moeite meerdere kopieen¨ maken;

• de positionering van gaten in de PCB is willekeurig, en dus kan je componenten gebruiken die niet in een breadboard passen;

• PCB’s zijn (op grote schaal) aanzienlijk goedkoper;

• de levensduur van PCB’s is quasi ongelimiteerd.

In de 2e Bachelor wordt in het studiedeel ECAD (Electronic Computer Aided Design) veel dieper inge- gaan op het ontwerp van PCB’s, en leer je alle technieken die nodig zijn om zelf PCB’s te ontwerpen zoals je die vindt in hedendaagse elektronische toestellen zoals laptops en printers. Dit hoofdstuk be- perkt zich tot de basisconcepten die net volstaan om een eenvoudige PCB voor je wekker te ontwerpen. 38 DESIGNENPROTOTYPING ing. Y. Verbelen

4.2 CircuitMaker

Neem eens een PCB ter hand. In het labo Elektronica vind je in de recup-kasten een ruim aanbod aan PCB’s die gerecupereerd zijn uit afgedankte toestellen. Als je goed kijkt, merk je dat onder de groene laklaag (die soldeermasker, eng. solder mask heet), sporen lopen die contrasteren met de achtergrond. Deze sporen zijn eigenlijk zeer dunne koperen strips die de componenten met elkaar verbinden en zo dus een schakeling vormen.

In essentie is een PCB niks anders dan een plaatje isolerend materiaal waarop aan e´en´ of beide zijden een verzameling koperen sporen (eng. tracks of traces) is aangebracht die de componenten met elkaar verbinden. De componenten zelf zijn elektrisch met de sporen verbonden via een proces dat solderen (eng. soldering) heet. In de volgende hoofdstukken wordt dieper ingegaan op soldeertechnieken. Om te verhinderen dat de kopersporen zouden oxideren aan de lucht, worden ze beschermd onder die groene laklaag, die tevens het solderen vergemakkelijkt. Tot slot wordt er bovenop die laklaag tekst gedrukt om aan te duiden waar de componenten moeten geplaatst worden. De laklaag en tekstopdruk zijn volledig optioneel, je kan een perfect werkende PCB maken met de kopersporen alleen, en dat wordt dus ook de focus van dit hoofdstuk.

Het ontwerpen van het patroon kopersporen is waar PCB-ontwerp om draait. Vroeger werd dit manueel gedaan met een zwarte alcoholstift op een blad papier, en voor he´el´ eenvoudige PCB’s is dat misschien nog wel de snelste oplossing. Maar als je een groot aantal componenten moet verbinden met een nog groter aantal draden, dan heb je nood aan betere hulpmiddelen. Hier komen gespecialiseerde softwaretools om de hoek kijken.

Er bestaan verschillende gespecialiseerde softwarepakketten die helpen bij het ontwerpen van PCB’s, en aan de meeste van die (professionele) paketten hangt ook een prijskaartje dat varieert¨ van een high end gaming laptop tot een sportvliegtuigje (!). Voor eenvoudige schakelingen zoals je wekker heb je die zeer ingewikkelde software echter niet nodig en gelukkig bestaan er ook uitstekende softwarepaketten die volledig gratis zijn, zoals bijvoorbeeld Eagle, DesignSpark, gEDA, UltiBoard, KiCad en . Veruit het beste gratis pakket is echter CircuitMaker. CircuitMaker is de gratis hacker- en makereditie van ’s professionele PCB-software waarmee je zal leren werken in de 3e Ba- chelor Elektronica. De twee voornaamste voordelen van CircuitMaker ten opzichte van de alternatieve hierboven vernoemde pakketten zijn enerzijds de intu¨ıtieve gebruikersinterface, en anderzijds de inhoud die volledig open source is.

In dit hoofdstuk wordt gedemonstreerd hoe je zelf een PCB kan ontwerpen met CircuitMaker, en hoe je deze PCB later ook zelf kan maken in het fablab.

4.2.1 Installatie Je kan het installatieprogramma van CircuitMaker rechtstreeks downloaden van de CircuitMaker web- site1 waarna je je nog wel voor een account moet registreren. Dit doe je eveneens via de CircuitMaker website. Het e-mailadres dat je hiervoor moet opgeven kan maar hoeft niet jouw VUB-e-mailadres te zijn. Figuur 4.1 toont het registratieformulier. Check de box I accept Terms and Conditions en klik op Register my account.

Je krijgt vervolgens een e-mail toegestuurd met daarin een wachtwoord. Met dit wachtwoord kan je vervolgens inloggen in CircuitMaker, zoals weergegeven in figuur 4.2. Helaas wordt CircuitMaker momenteel enkel officieel ondersteund op het besturingssysteem . Op de website is een handleiding beschikbaar voor installatie onder Linux via WINE2 maar dit lijkt niet voor iedereen even vlot te werken. Een gebruiksvriendelijker alternatief is CircuitMaker te installeren in een virtuele Windows-omgeving via bijvoorbeeld VirtualBox of VMware. We raden VMware Workstation 123 of

1http://circuitmaker.com/installer-download 2http://circuitmaker.com/blog/3-steps-for-installing-circuitmaker-on-linux 3http://www.vmware.com/go/tryplayerpro-linux-64

38 ing. Y. Verbelen DESIGNENPROTOTYPING 39

Figuur 4.1: Registratie van een CircuitMaker account hoger aan met Microsoft Windows 7 als client besturingssysteem. Let erop dat je virtualisatiesoftware Shadermodel 3.0 ondersteunt, wat nodig is om PCB’s in 3D te kunnen renderen. Hiervoor zal je ook de 3D-acceleratie op je grafische kaart moeten activeren.

Figuur 4.2: Inloggen in CircuitMaker

Vooraleer je je in PCB-design stort, is het verstandig om eerst het willekeurige wachtwoord dat je via e-mail werd toegestuurd te wijzigen in een wachtwoord dat je gemakkelijker kan onthouden, zoals het wachtwoord van je VUB-account bijvoorbeeld. Dit doe je via menu Start → My Account → Change Password. Je moet je oude wachtwoord opnieuw invoeren om je wachtwoord te kunnen wijzigen.

4.2.2 De “cloud”

CircuitMaker is bedoeld voor de hacker- en maker community, en de focus ligt daardoor sterk op het delen van informatie en projecten, en samenwerking in teams. Daarom bewaart CircuitMaker al je pro-

39 40 DESIGNENPROTOTYPING ing. Y. Verbelen jecten op de Altium servers, de zogenaamde “cloud”, en zijn ze vrij toegankelijk voor iedereen. Via Start kan je bestaande projecten bekijken. Het vermijdt ook dat je je projecten via USB-sticks moet rondzeulen en kwijtgeraken, dat je je projecten naar jezelf moet doormailen, of andere archa¨ısche tech- nieken om projecten van de ene naar de andere pc te krijgen.

Het is natuurlijk ook noodzakelijk dat je vrij met CircuitMaker kan leren werken zonder dat je (genante) probeersels meteen zichtbaar zijn voor de hele wereld. Om deze reden laat CircuitMaker ook toe om aan 2 private projecten te werken, in zogenmaamde sandbox modus. Wil je een 3e private project, dan zal je e´en´ van de vorige 2 projecten moeten releasen in de publieke cloud of weer verwijderen. Je kan dus zoveel oefenen als je wil.

4.3 Schema’s tekenen

Vooraleer je componenten op een PCB kan gaan zetten en met elkaar verbinden, moet CircuitMaker eerst weten welke componenten je wil gebruiken, hoeveel pinnen deze hebben, en welke componenten onderling verbonden moeten worden en met welke pinnen precies. Dit doe je door de schakeling die je op PCB wil zetten digitaal te tekenen in CircuitMaker. Deze stap wordt ook wel schematic capture genoemd.

Bij wijze van voorbeeld wordt hieronder gedemonstreerd hoe je zelf een schema van een eenvoudige switched inductor DC/DC converter – een type spanningsregulator – kan tekenen in CircuitMaker.

Stap 1. Start CircuitMaker. Er wordt je gevraagd in te loggen met je gebruikersnaam, die je e- mailadres is, en wachtwoord. Tik Remember Me aan zodat je volgende keer automatisch wordt ingelogd. Figuur 4.2 toont de procedure.

Stap 2. Maak een nieuw project in CircuitMaker. Via tabblad Home en vervolgens Add new project. Vul een zinvolle naam in voor je project en een beschrijving die ook begrijpbaar is voor anderen, en check de optie Sandbox, zoals weergegeven in figuur 4.3. Klik Save.

Stap 3. Vervolgens kom je op de projectpagina terecht. Hier kan je de url van je project wijzigen, een afbeelding toevoegen, een beschrijving geven, en verschillende andere opties instellen. Klik bovenaan op de knop Save als je klaar bent. Je kan hier later steeds naar terugkomen.

Stap 4. Nu het project is aangemaakt in de cloud kan het bewerkt worden. Klik in het projectoverzicht op de knop Open Design. Het workspace panel Projects verschijnt met daarin een leeg project dat PowerSupply.PrjPcb (of een andere naam) heet.

Stap 5. Voeg een schemadocument toe aan het project. Klik op de knop Project in de werkbalk (op tabblad Home) en kies de optie Add New Schematic. Je kan ook rechterklikken op je project in het Projects workspace panel en vervolgens Add New to Project, Schematic kiezen. CicuitMaker vraagt je om dit nieuwe schema een naam te geven, bijvoorbeeld Core.SchDoc. In het workspace panel Projects verschijnt er onder je project nu een nieuw schema dat Core.SchDoc heet, en het schema wordt ook geopend in de editor. Op dit virtuele blad papier zal je je schema tekenen. Merk op dat er in de werkbalk naast Project opeens heel wat nieuwe knoppen tevoorschijn zijn gekomen. De inhoud van de werkbalk verandert dynamisch afhankelijk van het actieve document in de editor. Je kan de naam van schemadocumenten (eng. schematics) nadien steeds wijzigen door erop te rechterklikken in het Projects workspace panel en de optie Rename te kiezen.

Stap 6. Bekijk het functionele schema in figuur 4.4. Deze schakeling zet een ingangsspanning tussen 5 V en 35 V (linkerkant van het schema) om naar een uitgangspannng van precies 5 V, een courante spanning in elektronica. Hoe de schakeling precies werkt is niet belangrijk, daarop wordt in tweede en derde Bachelor uitgebreid ingegaan. Je herkent ongetwijfeld een aantal componenten die je ook

40 ing. Y. Verbelen DESIGNENPROTOTYPING 41

Figuur 4.3: Een nieuw private (sandbox) project aanmaken. in de WPO’s Basiselektronica bent tegengekomen: weerstanden, diodes, condensators, LED, ... Deze basiscomponenten zul je in quasi alle schakelingen terugvinden. Niet verrassend staat een IC (eng. integrated circuit) met typenummer LM2596T-ADJ centraal in deze schakeling, hij vormt dan ook de kern van deze spanningsregulator.

D4 33µH 3A 5V + L1 UF4003 R2 R5 2k7 470 Ω 5V ... 35V LM2596T-ADJ C2 F1 3A R3 + IN FB 470Ω 220µF R1 D1 C1 50V 100µF ON OUT D2 R4 30V 50V GND D3 ON

5.6J 1k UF4003 IC1 UF3008 0 0

Figuur 4.4: Een switched inductor DC/DC converter met 5 V uitgangsspanning op basis van de LM2596 buck controller.

Stap 7. Op het blanco schemadocument kan je zoveel componenten (eng. parts) toevoegen als je wenst. Aangezien de LM2596 de centraal staat in deze schakeling, is het logisch om die als eerst toe te voegen. Hiervoor moet hij opgezocht worden in een bibliotheek met componenten (eng. library). Als het workspace panel Libraries nog niet zichtbaar is, kan je het tevoorschijn halen via tabblad View en vervolgens Libraries te klikken. Je kan workspace panels vastpinnen of automatisch laten inklappen via de middelste knop in hun titelbalken.

41 42 DESIGNENPROTOTYPING ing. Y. Verbelen

Via Libraries kan je zoeken naar componenten in 3 locaties: je eigen favourieten (eng. favorites), de Octopart bibliotheek, of componenten die reeds aanwezig zijn in je project. Selecteer Octopart als search provider in de bovenste combobox. Vervolgens kan je e´en´ of meerdere sleutelwoorden opgeven in het tekstvak eronder om componenten op te zoeken. De tekst in het zoekvak is niet hoofdlettergevoelig. Klik op de knop met het vergrootglas naast dit tekstvak om het zoeken te starten, of druk op de Enter- toets. Na enkele ogenblikken worden er zoekresultaten geretourneerd, zoals weergegeven in figuur 4.5.

Figuur 4.5: Een LM2596 opzoeken in de Octopart component library.

Onder het tekstvak met keywords volgt een lijst met componenten die voldoen aan je zoekcriteria. Hoe ruimer de opgegeven criteria, hoe meer componenten zullen geretourneerd worden. Zoeken op bv. resistor (weerstand) zal aanzienlijk meer resultaten opleveren dan LM2596, dat enkel naar die specifieke component zoekt. Als je naar LM2596T zoekt, krijg je enkel through hole versies (componenten met draden die in een breadboard passen). Voeg je er nog ADJ achter, dan zal je enkel die specifieke through hole LM2596’s krijgen met een instelbare uitgangsspanning. De effcientie¨ van de zoekfunctie zal dus sterk afhangen van de keuze van je sleutelwoorden. Zelfs voor LM2596T-ADJ zullen nog meerdere zoekresultaten geretourneerd worden, omdat verschillende fabrikanten deze component maken. Als je op een component klikt, dan wordt het schemamodel gedownload van de server. Enkel com- ponenten met een CircuitMaker symbool in de linkerbovenhoek zitten in de database en zijn dus be- schikbaar. Voor deze componenten wordt de knop Place beschikbaar. Je kan componenten ook met de

42 ing. Y. Verbelen DESIGNENPROTOTYPING 43 muis uit het Libraries workspace panel naar je schema slepen. Componenten die nog niet in de database zitten kan je zelf toevoegen via de knop Build, dat leer je in het tweede jaar. Tweedejaars zullen je met plezier helpen om ontbrekende componenten toe te voegen. Of je zoekt naar een alternatieve component die wel in de database zit.

Onder de knoppen Place en Build vind je een overzicht van prijsinformatie. CircuitMaker gaat au- tomatisch op zoek naar deze component bij verschillende leveranciers, zodat je je meteen een idee kan vormen van hoeveel je ontwerp zal kosten.

Daaronder volgen schemamodel en footprint, de voetafdruk van de component op de PCB. Elke component heeft minstens e´en´ footprint, maar veel hebben er 2 of zelfs meer. De variaties zitten meestal in de grootte van de pads (soldeereilandjes). Om het jezelf gemakkelijk te maken, zeker als je nog niet veel soldeerervaring hebt, kies je best voor de footprint met de grootste pads.

Onder het schemamodel en footprint(s) volgt een lijst met revisies. CircuitMaker ondersteunt een ingebouwd versiebeheersysteem, en houdt voor elke component een lijst met wijzigingen bij. Je kan dit vergelijken met de manier waarop Wikipedia vorige wijzigingen aan artikels bijhoudt. De laatste versie wordt standaard geselecteed. Als je fouten verbetert (rechterklik op de component in de zoekresultaten en klik Edit) dan wordt die nieuwe versie (revisie) onder jouw naam gepubliceerd.

De Octopart database bevat honderdduizenden componenten, dus de kans dat je niet vindt wat je zoekt is behoorlijk klein. In uitzonderlijke gevallen kan dit toch voorkomen, bijvoorbeeld bij plug-in modules van obscure Chinese fabrikanten, of als je zelf je spoel rolt met draad over een potlood. In die gevallen kan je een eigen component creeren¨ met de optie Build your own helemaal onderaan het Libra- ries workspace panel. De procedure is identiek aan die van een normale Build, behalve dat je “custom” component niet aan de Octopart database wordt toegevoegd en dus alleen voor jezelf beschikbaar is. Vraag tweedejaars om assistentie als je zelf eigen componenten wilt aanmaken.

Als je de LM2596T-ADJ toevoegt aan je schema, dan wordt hij weergegeven met zijn schemasym- bool, in dit geval een generische gele rechthoek met 5 pinnen eraan. De pinnen zijn al genummerd van 1 tot 5 en hebben al een naam gekregen, namen die niet toevallig overeenkomen met die in het schema in figuur 4.4.

Stap 8. Bij sommige componenten staat het stypenummer in het schema, en bv. diodes D1, D2 en D4 zijn dus gemakkelijk op te zoeken via Octopart op dezelfde manier als de LM2596T-ADJ. Voor de UF4003 (Ultra Fast Rectifier no. 4003) heb je 2 stuks nodig, dus die sleep je 2 keer op je schema. Het is ook mogelijk om componenten die al op je schema staan de dupliceren door ze te selecteren met de muis en vervolgens via Ctrl + C, Ctrl + V te kopieren¨ en te plakken.

Stap 9. Helaas zijn niet alle componenten even gemakkelijk te vinden. Voor zekering F1 en spoel L1 staat er enkel de stroom vermeld die ze moeten aankunnen, nl. 3 A. Je kan weliswaar zoeken naar “inductor 33H 3A” via Octopart, maar de lijst met zoekresultaten is behoorlijk beperkt. Anderzijds le- vert zoeken naar “resistor 470 Ω” voor R5 een zeer lange lijst zoekresultaten, waarvan de meeste geen draden hebben (surface mount) en dus niet compatibel zijn met de weerstanden die in het labo aanwe- zig zijn. Octopart is dus vooral handig als je het exacte typenummer van componenten kent, zoals bv. LM2596T-ADJ of UF3008.

Neem bijvoorbeeld inductor L1 als voorbeeld. Je kan erg lang zoeken naar alle mogelijke combina- ties van sleutelwoorden, en toch is de kans klein dat je toevallig op e´en´ van de 33 µH inductors zult stoten die in het labo aanwezig zijn. Als je daarentegen op het exacte typenummer van zo’n inductor zoekt, bv. Panasonic ELC-18B330L, dan zul je wel meteen het juiste zoekresultaat krijgen. Octopart laat helaas niet toe om geparametriseerd te zoeken, zodat je enkel inductors krijgt met een bepaalde waarde, waar- van de pinnen een bepaalde afstand uit elkaar staan, met een specifieke diameter, enzovoort. Hiervoor is een externe zoekmachine nodig, en de zoekmachines van leverancies van elektronische componenten

43 44 DESIGNENPROTOTYPING ing. Y. Verbelen

(eng. suppliers) zijn hier perfect voor. Je hebt reeds met enkele van die leveranciers kennisgemaakt via het workspace panel Libraries. De beste zoekmachine is die van Digi-key4.

Neem condensator C2 als voorbeeld. De enige gegevens die gekend zijn uit het schema zijn de capaciteit (220 µF) en de maximale werkspanning (50 V). Het schemasymbool suggereert ook een ge- polariseerd type. Tik op de website van Digi-key de zoektermen “220 µF 50 V” in, en klik Search. De overgrote meerderheid van de gevonden condensators zit in de categorie Aluminium Capacitor, wat geen verrassing is als je elco’s had verwacht. Binnen Aluminium Capacitor kan je verder verfijnen met een aantal zoekopties.

• de werkspanning van 50 V selecteer je onder Voltage Rating;

• de polariteit selecteer je onder Polarization;

• de capaciteit van 220 µF selecteer je onder Capacitance (als die nog niet geselecteerd is.

Zelfs met deze filters is de lijst met condensators die aan deze parameters voldoen, nog steeds behoorlijk lang. Als je reeds een condensator bij de hand hebt, bijvoorbeeld een exemplaar dat je hebt gerecycleerd van een andere PCB, of eentje die uit de bakjes in het labo elektronica komt, dan kan je ook op afme- tingen gaan filteren. Een schuifmaat is een handig instrument om de afmetingen van componenten op te zoeken. Meet de hoogte, de diameter en de afstand tussen de aansluitdraden.

• afstand tussen draden geef je op onder Lead Spacing;

• hoogte kan je selecteren bij Height - Seated (Max) (hoogte waneer de condensator recht op de PCB staat, gemeten vanaf het oppervlak van de PCB);

• diameter kan je kiezen onder Size / Dimension.

Na filteren op deze aanvullende criteria kan je in de lijst met condensators om het even welk exemplaar kiezen, ze zullen allemaal passen. Een goed type zou bv. ESH227M050AH2AA van Kemet kunnen zijn. Als je op dit typenummer (Manufacturer Part Number) zoekt in CircuitMaker, dan krijg je meteen de juiste condensator voorgeschoteld. Voor de andere componenten kan je rechtstreeks op volgende typenummers zoeken:

• F1: Littlefuse 64600001003

• R1: Panasonic ERZV09D390

• L1: Panasonic ELC-18B330L of Wrth 744772330

• R3: Bourns 3386P-1-471LF

Voorde weerstanden kan je exemplaren uit de Yageo CFR-25JR-52 serie nemen (through hole, 250 mW).

Stap 10. Standaard vult CircuitMaker de typenummers van componenten in als “comment” bij elke component, wat het schema er niet bepaald leesbaarder op maakt. Aangezien je deze info niet echt no- dig hebt, is het nuttiger en´ duidelijker om in je schema bij weerstanden de impedantie (in Ω of kΩ), bij condensators de capaciteit en spoelen de inductantie te vermelden. Dubbelklik op een component om het eigenschappenvenster op te roepen. Links zie je enkele instellingen, rechts een lijst met eigenschap- pen van de component. Klik onderaan op de knop Add om een nieuwe eigenschap Value toe te voegen, en geef die de waarde die je wil toevoegen, bv. capaciteit of inductantie. Figuur 4.7 toont als voorbeeld een 27 pF condensator.

Vink de optie Visible uit en klik op OK om de eigenschap (eng. property) aan de condensator toe te voegen. De eigenschap Value komt nu in de lijst te staan, en kan weergegeven worden. Selecteer vervolgens =Value uit de lijst met mogelijke comments aan de linkerzijde van het venster, zoals in figuur 4.8, en klik vervolgens op OK om de wijzigingen door te voeren.

4http://www.digikey.com

44 ing. Y. Verbelen DESIGNENPROTOTYPING 45

Figuur 4.6: Geparametriseerd zoeken naar componenten via Digi-key.

Stap 11. Alle noodzakelijke componenten staan nu in het schema, maar er is nog geen enkele moge- lijkheid om spanning op de PCB toe te voeren. Er zijn in dit geval 4 aansluitingspunten: V+ en GND als input, en +5V en GND als output. De meest logische manier om dit af te handelen is ze twee aan twee te groeperen in connectors: e´en´ connector voor beide inputs en een andere connector voor beide outputs. Hoewel beide connectors 2 aansluitingspunten hebben, hoeven ze niet van hetzelfde type te zijn. Voor de input kan je bv. een printkroonsteen met 2 posities nemen, die compatibel is met zowat alle mogelijke kabeltypes. Aan de output is een JST-connector een algemeen gebruikte standaard. De typenummers van beide connectors zijn respectievelijk Phoenix 1935161 en JST B2B-XH-A. In het volgende hoofdstuk wordt in detail ingegaan op connectors en bekabeling.

De comments van beide connectors kan je aanpassen naar zinvollere benamingen, bv. input en output, of de ingangsspanning en uitgangsspanning (5 V).

Stap 12. Eens alle componenten op het schema staan, kunnen ze met elkaar verbonden worden. Orga- niseer de componenten zodanig dat de layout min of meer overeenkomt met het oorspronkelijke schema in figuur 4.4, dat maakt het gemakkelijker om ze te verbinden omdat ze dan logisch gegroepeerd staan. Componenten kan je roteren door ze vast te pakken met de muis en op spatiebalk te drukken, spiegelen kan met de X-toets op dezelfde manier. Als het schema te groot wordt kan je zoomen met Ctrl + scroll. Componenten verbinden doe je via de Wire tool die je tussen de Circuit Elements in de werkbalk op tabblad Home vindt.

45 46 DESIGNENPROTOTYPING ing. Y. Verbelen

Figuur 4.7: De waarde (value) 27pF toevoegen aan een condensator.

Figuur 4.8: Het eigenschappenvenster van schemacomponenten.

46 ing. Y. Verbelen DESIGNENPROTOTYPING 47 Figuur 4.9: Het volledige schema.

47 48 DESIGNENPROTOTYPING ing. Y. Verbelen

Stap 13. Er ontbreken nog enkele elementen in het schema. Er is nog geen grondpotentiaal (GND) gedefinieerd, en ook geen voedingsspanning. Een grondpotentiaal en voedingsspanning definieren¨ kan via de functie Place Power Port, die je eveneens in de werkbalk vindt tussen de andere Circuit Elements. In deze relatief eenvoudige schakeling biedt het markeren van de voedingsspanning (5 V output) weinig meerwaarde, maar door de GND power ports te gebruiken kan je het schema wel ietwat vereenvoudigen doordat je de grond niet meer als expliciete wire hoeft te tekenen. Alle verbindingen met GND zijn impliciet met elkaar doorverbonden.

Stap 14. Het is je waarschijnlijk al opgevallen dat er naast heel wat componenten een rode lijn staat, die wijst op een fout. Het probleem met deze componenten is dat ze geen unieke identificatiecode (= de- signator) hebben. Alle condensators heten nog C?, de diodes heten D?, enzovoort. Gelukkig hoef je ze niet allemaal manueel een unieke naam te geven, want in grote designs zou dat een omslachtige bezig- heid zijn. Selecteer het tabblad Tools in de menubalk en klik op Annotate, dan vervolgens op Annotate Schematics Quietly. CircuitMaker vraagt om te bevestigen dat je de designators van 16 componenten wil aanpassen. Antwoord Yes. Alle vraagtekens worden nu vervangen door getallen zodanig dat elke component een unieke designator heeft. Alle rode lijnen zijn meteen verdwenen.

Stap 15. Rechterklik op het schemadocument in het Projects workspace panel en klik Save om het schema op te slaan. Klik vervolgens op het tabblad Home → Project → Compile om het project te com- pileren. CircuitMaker controleert je schema op kortsluitingen en andere fouten. Open het workspace panel Messages via tabblad View → Messages. De melding Compile successful, no errors found ver- schijnt. Het schema is nu klaar om omgezet te worden naar een PCB!

4.4 De PCB

Een correct opgezet schema bevat alle nodige informatie om een PCB te kunnen tekenen: de componen- ten en hun “voetafdruk” (eng. footprint), unieke designators en waarden, en de onderlinge verbindingen. Het omzetten van het schema naar een PCB is op die manier behoorlijk eenvoudig.

Stap 16. Klik op het tabblad Home → Project → Add New PCB en geef de PCB een naam, bijvoor- beeld Core.CMPcbDoc. Klik OK om de PCB toe te voegen aan je project. De PCB-editor wordt geopend, en er verschijnt een zwart vierkant. Dit vierkant weerspiegelt het bovenaanzicht van de PCB. Voorlopig is de PCB nog leeg, aangezien er nog geen componenten of traces op aangebracht zijn. Druk op de 3-toets op je toetsenbord om over te schakelen van 2D naar 3D weergave. De PCB kleurt groen zoals je gewend bent van PCB’s. Je kan de blanco PCB draaien met de muis als volgt: hou de shift-toets ingedrukt om een gele bol tevoorschijn te halen, en sleep vervolgens met de rechtermuisknop over deze bol. De PCB draait of kantelt dan in dezelfde richting. Om terug te keren naar 2D weergave druk je op de 2-toets. Je merkt ook hier dat de knoppen in de werkbalk dynamisch veranderen afhankelijk van de mode (2D of 3D) waarin je de PCB bekijkt.

Stap 17. De volgende stap is de componenten van het schema “vertalen” naar een fysisch equivalent op basis van hun footprints, en ze overbrengen naar de PCB. Klik op het tabblad Home → Project → Import Changes From PowerSupply.PrjPcb (of hoe je project heet). De ECO (Engineering Change Or- der) verschijnt met daarin een overzicht van alle verschillen tussen het schema en de PCB. Eerst worden alle componenten toegevoegd, dan de netten die ze verbinden, en tot slot een klasse waarin de compo- nenten worden opgenomen. Klik onderaan op Validate Changes. CircuitMaker controleert op mogelijke conflicten, en geeft die aan met een groen vinkje of rood kruisje in de Check kolom. Als er overal een groen vinkje staat, dan kan je op Execute Changes klikken om de wijzigingen door te voeren, en de componenten op je PCB toe te voegen. Alle componenten komen nu naast de PCB te staan.

48 ing. Y. Verbelen DESIGNENPROTOTYPING 49

Stap 18. Elke kleur in de footprints vertegenwoordigt een andere layer, en je herkent meteen enkele bekende vormen waaruit je hun functie kan afleiden: rode cirkels met grijze omranding zijn pads (= sol- deereilandjes) met gaten erin waarop je componenten zal solderen, en witte lijnen zijn tekstopdruk, zoals te zien is in figuur 4.11. De gearceerde gebieden geven de grootte van de gekoppelde 3D-modellen aan, die gebruikt worden om te detecteren wanneer componenten elkaar overlappen. De dunne witte lijntjes die de pads met elkaar verbinden, ook ratsnest genoemd, geven aan welke pads onderling elektrisch verbonden moeten worden met traces. Ze zijn van groot belang om de componenten efficient¨ te kunnen plaatsen op je PCB. Met efficiente¨ plaatsing wordt bedoeld: alle connectors op de rand zodanig dat je er kabels in kan steken, en met zo weinig mogelijk kruisingen in de ratsnest. Daarbij probeer je de PCB-oppervlakte te minimaliseren, want hoe groter je PCB hoe duurder hij ook wordt om te maken. Figuur 4.12 toont een voorbeeld van een goede plaatsing van de componenten.

Stap 19. Vooraleer je tracks kan routeren moet CircuitMaker eerst weten hoe breed die tracks moeten zijn, hoe ver ze uit elkaar moeten liggen enzovoort. Deze regels definieer je als design rules. Open het venster met design rules via tab Home → Design Rules → Define Design Rules. Aan de linkerzijde zie je een hele waslijst aan regels, maar de meesten zijn al goed ingesteld en hoef je dus niet te wijzigen. De regels die wel aanpassing vereisen zijn de afstand tussen tracks en pads, deze regel heet Clearance, en de breedte van tracks die Width heet. Klik de Clearance regel open (staat onder Electrical) en pas de minimale clearance aan van 10 mil naar 15 mil of 20 mil. Hoe groter je de clearance zet, hoe gemakke- lijker dat je nadien je PCB kan etsen en solderen, maar hoe moeilijker het wordt de PCB te ontwerpen omdat alle tracks verder van andere tracks verwijderd moeten liggen. Let op: e´en´ mil is een duizendste van een Engelse inch en komt overeen met 0.0254 mm. In PCB-design worden mils en mm door elkaar gebruikt, dus verwar ze niet met elkaar. Figuur 4.10 toont de instelling voor de Clearance regel. Voor de breedte van tracks moet je de Width regel aanpassen, die je onder Routing vindt. Stel de minimale breedte in op 15 mil, en voorkeur op 25 mil. De maximale breedte is niet belangrijk, dus die stel je best voldoende groot in, bv. 100 mil of meer. Figuur 4.10 toont onderaan de instelling voor de Width. Net zoals bij clearance is zijn de waarden empirisch bepaald op basis van vorige ervaring met PCB’s maken in het fablab. De hierboven opgegeven waarden zijn nogal conservatief, en de kans is dus groot dat je PCB van de eerste keer zal lukken. Je kan echter veel kleiner gaan als het echt moet (tot 8 mil clearance en 8 mil width) maar dit vergt veel ervaring, en succes is niet altijd gegarandeerd. Als je dus zelf je PCB wil maken in het fablab, neem je de afmetingen van clearance en width dus bij voorkeur zo groot mogelijk.

Stap 20. Dan kan het echte werk beginnen: de componenten met elkaar verbinden. Vermits de com- ponenten langs de bovenzijde van de PCB worden gemonteerd en dan door de gaten in de pads worden gestoken, moeten ze langs de onderzijde gesoldeerd worden. De bovenzijde wordt daarom ook wel component side genoemd, en de onderzijde solder side. In CircuitMaker moet je dus de traces tekenen op de onderzijde, die daar bottom layer heet. Selecteer de bottom layer onderaan de PCB editor door op het tweede tab te klikken. Tracks tekenen doe je via de wiring tool op het tabblad Home → Routing → Route. De cursor verandert in een pointer (eng. crosshair) die snapt op het centerpunt van pads. Snap hem op e´en´ van de pads die moeten verbonden worden met andere pads, en klik met de linkermuis om de track te plaatsen. Als je nu de muis beweegt, dan volgt de track interactief de positie van de muis. Van zodra je een stukje op de goede plaats hebt liggen, klik je opnieuw met de linkermuisknop om hem vast te leggen. Routeren beeindigen¨ doe je met een rechtermuisklik. Figuur 4.11 toont het principe.

Enkele tips:

• Als je op de tab-toets drukt tijdens het routeren, kan je dynamisch de breedte van je tracks aan- passen. Een breedte van 25 mil is een goede waarde om mee te starten, maar power tracks (VCC en GND) maak je bij voorkeur breder.

• Je kan tracks automatisch plaatsen door tijdens het routeren de control-toets (ctrl) ingedrukt te houden. De resultaten zijn echter niet altijd zo optimaal.

49 50 DESIGNENPROTOTYPING ing. Y. Verbelen

Figuur 4.10: Instellingen voor clearance (boven) en track width (onder).

• Je kan bestaande tracks verplaatsen door een segment te selecteren en het dan te verslepen.

• Je kan geplaatste segmenten verwijderen door het laatste segment te selecteren en op de backspace- toets te drukken. Een geselecteerd segement kan je verwijderen met de delete-toets.

• Je kan ook alle segmenten die aan e´en´ specifiek net toebehoren in e´en´ keer verwijderen via Home → Routing → Unroute → Net. Je merkt meteen het belang van een goede componentenplaatsing: als je teveel kruisingen hebt, wordt het routeren van de PCB een vervelende opgave. Elke minuut die je spendeert aan het plaatsen van je componenten is nadien 10 minuten uitgespaard bij het routeren! In figuur 4.12 zie je een voorbeeld van een track layout. Merk op dat de tracks die veel stroom vervoeren breed zijn gemaakt, terwijl de signaallijnen (naar de feedbackweerstanden of de LED bijvoorbeeld) dun mogen zijn.

Figuur 4.11: Plaatsing van de componenten in de PCB-editor. In 3D-modus kan je visueel controleren of de componenten goed geplaatst zijn. De ratsnest (dunne witte lijnen die pads verbinden) geven aan waar de verbindingen moeten komen. Merk op dat de componenten zodanig geplaatst zijn dat er zo weinig mogelijk kruisingen in de ratsnest zitten. Rechts: het routen van een GND power track.

Stap 21. De PCB is dan weliswaar gerouteerd, maar er is nog geen manier om hem te bevestigen in de behuizing van je wekker! Hiervoor dien je nog enkele montagegaten toe te voegen. De gemakkelijkste

50 ing. Y. Verbelen DESIGNENPROTOTYPING 51 manier om dit te doen is losse pads te plaatsen zonder koperring errond. Pads toevoegen doe je via Home → Place → Place Pad. De cursor verandert weer in een target pointer met een pad dat eronder zweeft. Druk op de tab-toets om de instellingen aan te passen. Maak de gatdiameter (eng. Hole Size) groter zodanig dat er een bout door past. De diameter moet dus enkele tienden mm groter zijn dan de diameter van de bout. Om een M4-bout (4 mm) vlot te laten passen, stel je de diameter van het gat best in op 4.2 mm of zelfs nog iets groter. Zet ook de designator van het gat op 0 om CircuitMaker duidelijk te maken dat dit pad niet elektrisch verbonden hoeft te worden met andere pads. Klik OK om de instellingen op te slaan, en plaats vervolgens zoveel gaten als nodig met de linkermuisknop. Als je er genoeg hebt, annuleer je de operatie met de rechtermuisknip of de escape-toets. Je doet er best aan de gaten zodanig uit te lijnen dat ze een gemakkelijk patroon volgen, bijvoorbeeld een rechthoek, wat het mechanisch design van de behuizing flink vereenvoudigt.

Figuur 4.12: De PCB in 2D-weergave (links) en 3D-weergave (rechts).

Stap 22. De laatste stap is het aanpassen van de omtrek van de PCB, die nog steeds veel te groot is. Alle zwarte gebieden behoren immers tot de PCB, terwijl de componenten en tracks maar een fractie ervan benutten. Je kan de afmetingen freestyle bijsnijden via Home → Board → Edit Board Shape en dan de contourlijnen verslepen. Een alternatieve manier is op de Outline layer, die je onderaan de editor naast Bottom Layer vindt, de contour te tekenen als lijnen (Home → Place → Line). Eens de lijnen een gesloten omtrek vormen, selecteer je ze allemaal samen (shift-toets ingedrukt houden), en vervolgens Home → Board → Define From Selected Objects. De omtrek wordt nu netjes bijgesneden volgens de outline die je zelf hebt gedefinieerd. De highlight resetten doe je via View → Hightlight & Edit Mask → Clear. De PCB is nu klaar!

Stap 23. In het geval je PCB-ontwerp nadien moet aangepast worden, bijvoorbeeld omdat je een an- dere vorm nodig hebt om in je behuizing te passen of omdat je extra functies wil toevoegen, dan zal je een tweede versie moeten ontwerpen, daarna een derde enzovoort. Het is dus nuttig om je eerste versie meteen te markeren alsdusdanig zodat je je verschillende versies later uit elkaar kan houden. Je kan in CircuitMaker vrij tekst toevoegen aan je ontwerp, en als die tekst op de bottom layer staat dan komt hij mee op de PCB terecht. Activeer de tekst tool via Home → Place → String en druk op de tab-toets om de eigenschappen van de tekst aan te passen zoals je dit intussen al een aantal keer gedaan hebt met andere objecten. Let op: je kijkt op de PCB vanuit bovenaanzicht, maar de tekst komt op de bottom layer. Als je hem dus leesbaar wilt maken, dan moet je hem spiegelen (functie Mirror aanvinken). Je kan controleren of de tekst leesbaar is door over te schakelen naar 3D-weergave en de PCB te roteren zodanig dat je de achterkant kan zien.

Vergeet niet je project en PCB op te slaan.

51 52 DESIGNENPROTOTYPING ing. Y. Verbelen

4.5 Productie

PCB’s ontwerpen kan iedereen, maar PCB’s ontwerpen die ook echt kunnen gemaakt en getest worden vergt de vaardigheden van een industrieel ingenieur. PCB’s maken is gelukkig niet zo moeilijk, het vergt enkel wat ervaring. In ons fablab maken we PCB’s met een chemisch proces dat etsen heet (eng. etching). Hierbij wordt vertrokken van een plaat isolerend materiaal waarop een volledige koperlaag is aangebracht. Van deze koperlaag worden dan de ongewenste stukken koper verwijderd in het ets- bad zodanig dat enkel de tracks overblijven. Daarna kan je door de pads gaten boren en ten slotte de componenten erop solderen.

4.5.1 Gerbers Net zoals je DXF-bestanden exporteert van 2D-vectorinformatie voor lasercutters en STL-bestanden van 3D-vectorinformatie voor 3D-printers, zo hebben printplaten ook hun eigen formaat dat Gerber heet. Elke layer van de PCB wordt geexporteerd¨ als een afzonderlijk gerberbestand, dat eveneens een vector- formaat is. Gerberbestanden zijn een internationale standaard die alle PCB-fabrikanten ondersteunen. Deze eenvoudige PCB heeft maar e´en´ layer met nuttige info, namelijk de bottom layer, en dus hoeft ook enkel de bottom layer geexporteerd¨ te worden.

Zorg dat de PCB geopend is in de editor en klik op het tabblad Outputs → Gerber. Er verschijnt een venster met enkele tabs met instellingen. Stel ze als volgt in:

• tabblad General: stel Units in als Inches en Format als 2:5. Wat deze instellingen precies doen is hier niet zo belangrijk.

• tabblad Layers: selecteer de bottom layer in de kolom Plot. Verder hoef je hier niks aan te passen.

• tabblad Drill Drawing: hier hoef je niks te selecteren.

• tabblad Apertures: vink de optie Embedded apertures (RS274X) aan.

• tabblad Advanced: stel Leading/Trailing Zeroes in als Keep leading and trailing zeroes, en Posi- tion on Film als Reference to absolute origin. De andere instellingen mogen op hun standaard- waarde blijven staan.

Klik op OK. Het gerberbestand voor de bottom layer wordt nu geexporteerd,¨ en toegevoegd aan je project. Het bestand heet PcbNaam.GBL wat staat voor Gerber Bottom Layer. Het is net zoals G-code een tekstbestand met commando’s erin. Met dit gerberbestand kan je naar het fablab om je PCB te etsen. De fablabtutorials helpen je vanaf hier verder.

4.5.2 3D-model Naast gerberbestanden biedt CircuitMaker je nog een tweede interessante exportmogelijkheid. Je kan nl. een 3D-model van je volledige PCB inclusief montagegaten en componenten exporteren als STEP- model. Dit model kan je op zijn beurt importeren in jouw favoriete 3D CAD software zoals Inventor of SolidWorks. Dit kan je helpen bij het ontwerpen van de behuizing om bijvoorbeeld de cutouts voor de connectors op de juiste plaats te krijgen, de nodige gaten voorzien die overeenkomen met de montage- gaten op de PCB enzovoort.

Een STEP-model van de PCB exporteren doe je via menu Outputs → Export → STEP. CircuitMaker vraagt om een bestandsnaam en vervolgens enkele opties. Laat de standaardinstellingen staan en klik op OK. CircuitMaker zoekt de 3D-modellen voor alle componenten op de PCB samen en exporteert ze naar het STEP-model.

52 5 Bekabeling

Everything is designed. Few things are designed well.

Brian Reed

5.1 Inleiding

Als prototypes falen, dan is dat in veruit de meeste gevallen niet te wijten aan de elektronica, want die staat vastgesoldeerd op een robuuste PCB. Waar het dan wel´ misloopt is bij de bekabeling, die slechte contacten oplevert als ze verkeerd is uitgevoerd. Ontoereikende bekabeling is een dermate grote oorzaak van frustratie bij prototypes dat dit volledige hoofdstuk wordt gewijd aan goede bekabelingstechnieken.

Met kabels kan je niet alleen interne componenten met elkaar verbinden, ze zijn ook de verbinding naar de buitenwereld toe. Gebruikers zullen kabels gebruiken om je toestel aan te sluiten aan een voe- ding of te interfacen met andere hardware. Hierbij is het dus van groot belang om naast het juiste type kabel ook voor de juiste connectors te kiezen afhankelijk van de toepassing.

In dit hoofdstuk wordt een overzicht gegeven van de voornaamste types kabels en connectors, hun voor- en nadelen, en basistechnieken voor bekabeling en kabelmanagement.

5.2 Kabels

De term kabel en draad worden door elkaar gebruikt, en er is geen duidelijk afgelijnde betekenis. Meestal wordt onder “draad” een al dan niet ge¨ısoleerde geleider verstaan, zoals de draadjes die je ge- bruikt om prototypes op breadboard te bouwen. Een “kabel” bestaat daarentegen uit meerdere ge¨ısoleerde geleiders (ook aders genoemd) die op e´en´ of andere manier samengebundeld zijn. Denk bijvoorbeeld aan een USB-kabel die 4 aders bevat (+5 V, D+, D- en GND), een stroomkabel met 3 aders (L, N en aarding) of een netwerkkabel met 8 aders. Elke ader binnen een kabel is dus een draad.

Draden hebben 3 belangrijke eigenschappen: de kern, de isolatie en de dikte.

5.2.1 Structuur Elektrische draden bestaan uit een geleidende kern met daarrond een elektrische isolator die de man- tel heet. De kern bestaat meestal uit koper, maar kan in sommige gevallen ook staal, aluminium of een 54 DESIGNENPROTOTYPING ing. Y. Verbelen zilver/goudlegering zijn als nog betere geleidbaarheid gewenst is, bijvoorbeeld bij hoogfrequentdesigns.

De structuur van de kern bepaalt de eigenschappen van de draad. De kern kan massief zijn of uit meerdere fijne draadjes bestaan die in elkaar geweven zijn. Beiden hebben specifieke toepassingen.

Het voordeel aan een massieve kern is dat de draad zich gemakkelijk in een bepaalde vorm laat plooien doordat de kern stijf is. Je kan de draad dus bijvoorbeeld in rechte hoeken buigen, en hij laat zich netjes samen bundelen met andere draden. Het nadeel van een massieve kern is dat elke buiging de kern verzwakt, tot het punt dat hij doorbreekt en er dus geen elektrisch contact meer is. Draden met massieve kern gebruik je dus uitsluitend in toepassingen waar de vorm van de draad niet verandert, bijvoorbeeld om PCB’s in hetzelfde toestel met elkaar te verbinden.

Het alternatief is een kern die bestaat uit meerdere fijne draadjes (eng. multicore wire). Hierdoor kan de kern quasi ongelimiteerd gebogen worden zonder te breken. Alle computerkabels (HDMI, USB, eSATA, ...) bestaan uit aders met dit type kern. Multicore gebruik je dus in toepassingen waar de vorm van de draad kan veranderen.

5.2.2 Isolatie

Binnen een kabel worden de verschillende draden elektrisch van elkaar ge¨ısoldeerd door hun mantel, die uit een niet geleidende kunststof of rubber bestaat. De dikte van de isolatie bepaalt hoe groot de spanning tussen naburige aders mag worden vooraleer de islatie doorslaat en er dus kortsluiting ont- staat. Ook het materiaal waarvan de mantel gemaakt is, speelt daarbij een rol.

Bij meeraderige kabels staat de maximale spanning meestal langs de buitenzijde op de kabel ge- drukt. Als vuistregel kan je stellen dat spanningen tot 50 V veilig door bijna elk type kabel kunnen vervoerd worden. In geval van twijfel neem je een kabel met dikker ge¨ısoleerde draden.

Sommige draden en kabels hebben buiten een elektrische isolatie ook een magnetische isolatie, waarmee de signalen die getransporteerd worden afgeschermd worden van elektromagentische interfe- rentie (EMI). Je herkent deze magnetische isolatie een een geweven mantel van staaldraad die rond de draad of kabel is aangebracht. Dergelijke kabels heten afgeschermde kabels (eng. shielded cables).

5.2.3 Dikte

Het metaal waarvan de kern gemaakt is, is nooit een ideale geleider. Als er dus stroom door loopt, dan wordt er een bepaald vermogen gedissipeerd in de draad doordat de weerstand niet 0 is. De draad zal daardoor opwarmen. Als de temperatuur te hoog oploopt, dan kan de isolatie gaan smelten waardoor er opnieuw een risico op kortsluiting ontstaat. Een spanningsval over draden is ook ongewenst omdat het signaalverlies oplevert, en de schakeling zich dus mogelijk niet zal gedragen zoals je verwacht.

Elke draad heeft zijn eigen maximale stroom (eng. current rating) die je moet respecteren. Deze maximale stroom staat ook op de buitenzijde van de kabel samen met de isolatiespanning, of je kan het als parameter in de datasheet van de draden vinden. Als je meer stroom wil vervoeren dan de maximale stroom die door de kabel wordt toegelaten, dan kan je meerdere aders in parallel schakelen.

Voor grote stromen wordt de dikte van draden uitgedrukt in hun oppervlakte als mm2, voor elek- tronische draden is de diameter echter zo klein dat dit moeilijk te meten is. Daarom wordt er gewerkt met de AWG-schaal (American wire gauge). Hoe groter de AWG-waarde, hoe dunner de draad. Het omrekenen van AWG naar diameter is behoorlijk complex, dus het is gemakkelijker om er een tabel voor te gebruiken1. Enkele veel voorkomende waarden staan in tabel 5.1.

1https://en.wikipedia.org/wiki/American wire gauge#Tables of AWG wire sizes

54 ing. Y. Verbelen DESIGNENPROTOTYPING 55

2 AWG diameter (mm) doorsnede (mm ) RCu (Ω/m) Imax (A) 40 0.080 0.005 3.441 0.0137 38 0.101 0.008 2.164 0.0228 36 0.127 0.013 1.361 0.035 34 0.160 0.020 0.856 0.056 32 0.202 0.032 0.538 0.091 30 0.255 0.051 0.339 0.142 28 0.321 0.081 0.213 0.226 26 0.405 0.129 0.134 0.361 24 0.511 0.205 0.084 0.577 22 0.644 0.326 0.053 0.92 20 0.812 0.518 0.033 1.5 18 1.024 0.823 0.021 2.3 16 1.291 1.31 0.014 3.7 14 1.628 2.08 0.083 5.9 12 2.053 3.31 0.052 9.3 10 2.588 5.26 0.033 15 5 4.621 16.8 0.001 47 1 7.348 42.4 0.001 119

Tabel 5.1: Draaddikte volgens de AWG schaal van dun (40 AWG) naar dik (1 AWG). De maximale stroom voor elke draaddikte is eveneens aangegeven.

5.3 Kabeltypes

Hieronder wordt een overzicht gegeven van de belangrijkste types kabels die je zal tegenkomen, en in welke toepassingen je ze gebruikt.

5.3.1 Bandkabel

Bandkabels (eng. ribbon cable of flat cable) bestaan uit meerdere aders die in e´en´ vlak aan elkaar ge- kleefd zijn, en zo een brede “band” vormen. De breedte van de kabel is dus evenredig met het aantal aders.

Elektrisch gezien zijn bandkabels ideaal om digitale signalen te transporteren, omdat alle aders even lang zijn en alle signalen dus op hetzelfde moment op hun bestemming toekomen (isochronie). Band- kabels zijn ook het enige type kabel met een aantal aders dat willekeurig gekozen kan worden.

Voor analoge signalen zijn ze echter niet ideaal omdat de aders zo dicht bij elkaar liggen dat er interferentie onstaat tussen aanliggende aders die crosstalk wordt genoemd. Signalen van de ene ader worden dus ge¨ınduceerd in aanliggende anders en omgekeerd. Als je bandkabels toch wil gebruiken om analoge signalen te transporteren, dan kan je crosstalk onderdrukken door signaaladers af te wisselen met grondaders.

Het meest voorkomende type bandkabel is grijs, met e´en´ zijde die rood of bruin gekleurd is om de eerste ader aan te duiden. Er bestaat ook bandkabel waarbij elke ader een ander kleurtje heeft, en de volgorde de kleurencodering van weerstanden volgt (zie handouts Basiselektronica). Deze versie wordt regenboogkabel genoemd (eng. rainbow cable) en is aanzienlijk duurder dan de grijze tegenhanger. De ader die met pin 1 overeenkomt is dus bruin, die voor pin 2 rood enzovoort. Je bent natuurlijk niet verplicht deze codering te volgen, maar het helpt om sneller te debuggen.

De dikte van bandkabeladers is gestandardiseerd op 26 AWG, wat overeenkomt met een diameter van 0.4 mm. Dit is dus moeilijk op een betrouwbare manier af te strippen en te solderen. Om die reden worden bandkabels steeds gebruikt in combinatie met IDC-connectors, die verderop worden besproken.

55 56 DESIGNENPROTOTYPING ing. Y. Verbelen

Figuur 5.1: Van links naar rechts: grijze en rode bandkabel, een coaxkabel met en zonder BNC-connector, en een 8-aderige UTP-kabel met en zonder RJ-45 connector.

5.3.2 Coaxkabel

Om analoge signalen die gevoelig zijn voor interferentie over lange afstanden te transporteren, moe- ten er maatregelen genomen worden om ze voldoende af te schermen van externe stoorbronnen. Voor deze toepassing gebruik je coaxkabels. Coaxkabels bestaan uit een centrale kern die omringd is door een isolerende mantel, en waarrond nog een extra buitengeleider is aangebracht die bestaat uit gewoven metaaldraad. De buitengeleider gedraagt zich als een Faradaykooi en verhindert dat het signaal in de kabel wordt gecontamineerd door externe interferentie. Omgekeerd verhindert het ook dat signalen naar buiten lekken en zelf voor interferentie zorgen.

Coaxkabel voor elektronische toepassingen is vrij duur omdat de impedantie heel nauwkeurig ge- controleerd wordt voor toepassingen in transmissielijnen, waarover je in de 3e Bachelor Elektronica meer leert. Voor de meeste toepassingen is coaxkabel van iets mindere kwaliteit ook voldoende, en die vind je in elke doe-het-zelfzaak als tv-kabel.

Om de isolatie te bewaren moeten ook connectors afgeschermd zijn. Coaxkabels worden daarom gebruikt in combinatie met BNC-connectors, zoals ze o.a. worden toegepast om probes op een oscillo- scoop aan te sluiten.

5.3.3 UTP-kabel

UTP-kabels bestaan uit 8 geleiders, en worden veel gebruikt om computernetwerken te bekabelen (Ethernet). Ze zijn meestal niet afgeschermd, maar toch geschikt voor digitale signalen als de fre- quentie niet te hoog is (max. enkele kHz). Ze kunnen behoorlijk wat stroom transporteren, dus kleine motors of LED’s aansluiten is geen probleem.

5.3.4 Bundels

Als geen van bovenstaande types geschikt is voor jouw toepassing, bv. als je intern een korte afstand wil overbruggen en het aantal signalen dat je wil transporteren niet te groot is, dan kan je ook zelf een aantal draden bundelen tot een kabel. Je hebt dan de keuze tussen een massieve kern of een multicore, en je kan de dikte van de aders en hun aantal zelf bepalen.

De netste manier om kabelbundels samen te houden is door gebuik te maken van tie-wraps (eng. zip tie, ook kabelbinders of snelbinders genoemd). Ze bestaan uit een dunne nylon strip met ribbels aan de binnenzijde. Eenmaal de vrije zijde door de opening gestoken wordt, gaat ze niet meer terug open. Je kan tie-wraps ook gebruiken om de draden meteen ook vast te zetten in de behuizing, door de tie-wrap door een opening in de behuizing te steken.

5.4 Connectors

Een´ van de gulden regels van PCB design is nooit draden rechtstreeks op de PCB te solderen. De verbinding is een zwak punt omdat de mantel daar van de draad is afgestript, en vroeg of laat breekt de draad van de PCB af. Een uitzondering hierop zijn draadbruggen (eng. jumpers) die je kan gebruiken

56 ing. Y. Verbelen DESIGNENPROTOTYPING 57 om korte afstanden op de PCB te overbruggen, op voorwaarde dat beide uiteinden op dezelfde PCB zijn vastgesoldeerd en´ dat de draad in kwestie niet kan bewegen.

Om kabels te verbinden met een PCB is er dus een speciale interface nodig, die je ondertussen kent als connectors. Elk type kabel heeft zijn eigen connectors specifiek voor dit type kabel, maar er bestaan ook talrijke generische connectors die bruikbaar zijn met quasi alle types kabels. Hieronder wordt een overzicht gegeven van de voornaamste types, en in welke situaties je ze gebruikt.

5.4.1 Terminologie

De terminologie rond connectors kan voor verwarring zorgen omdat er ontelbare varianten bestaan op dezelfde principes.

5.4.1.1 Geslacht

Een connector kan mannelijk (eng. male) of vrouwelijk (eng. female) zijn. Mannelijke connectors heb- ben pinnen of soortgelijke uitsteeksels die in de corresponderende gaten of uitsparingen van vrouwelijke connectors passen. De meeste connectors werken volgens dit principe, maar er zijn ook geslachtloze connectors die symmetrisch zijn.

Om praktische redenen wordt de mannelijke kant, die pinnen heeft, meestal op de PCB gezet omdat dezelfde pinnen rechtstreeks kunnen vastgesoldeerd worden. De vrouwelijke connector plugt er dan op in. Mannelijke PCB connectors zijn om die reden gemakkelijker te vinden dan vrouwelijke, net zo- als vrouwelijke kabelaansluitingen gemakkelijker te vinden zijn dan mannelijke om dezelfde reden. In principe zijn voor PCB-aansluitingen beide echter inwisselbaar.

Een´ belangrijke uitzondering op dit principe zijn situaties waarin een hoge spanning op de kabelkant of de PCB-kant kant kan staan. In dat geval levert een mannelijke connector een risico op omdat de pinnen daar kunnen aangeraakt worden. In dergelijke gevallen is het dus verplicht om voor die kant een vrouwelijke connector te kiezen, en voor de kabel de mannelijke kant. Een goed voorbeeld zijn netstekkers: die zijn mannelijk (kabelkant) en worden in een vrouwelijk stopcontact geplugd.

5.4.1.2 Pinafstand

Buiten de fysische vorm van de connector bepaalt de afstand tussen 2 aanliggende pinnen grotendeels welke connectors compatibel zijn. Deze pinafstand (eng. pitch) verschilt van connectortype tot connec- tortype, en kan uitgedrukt worden in Engelse maten of SI-eenheden. Voor standaardheaders is de pitch bijvoorbeeld precies 100 mil (2.54 mm), en dat geldt ook voor de pitch van breadboards. Bij veel andere connectors wordt de pitch echter uitgedrukt in mm.

Omdat 100 mil zo dicht bij 2.5 mm ligt, worden connectors soms met de foutieve pitch gelabeld. JST-connectors met een pitch van 2.5 mm (zoals in figuur 5.3) worden online courant geadverteerd als 100 mil pitch, hoewel dat incorrect is. Alle JST-connectors gebruiken immers SI-maten in mm. Omdat het verschil in pitch zo klein is (0.04 mm) zullen kleine connectors praktisch wel passen, maar bij brede connectors accumuleert de fout snel en die zullen dus niet meer op de footprint passen.

Het connectortype dat de meeste verwarring oplevert zijn printkroonstenen. Zij zijn verkrijgbaar in versies met talloze verschillende pinafstanden, waarbij 200 mil de meest gangbare lijkt te zijn, maar ook 3.94 mm en 5 mm komen relatief veel voor. Check dus steeds je footprint met de connector in je prototype om er zeker van te zijn dat hij gaat passen.

5.4.1.3 Type

Veruit de meeste connectors zijn bedoeld om kabels te verbinden met PCB’s. In dat geval wordt de mannelijke connector op de PCB gesoldeerd en wordt er een vrouwelijke connector ingeplugd. Dit

57 58 DESIGNENPROTOTYPING ing. Y. Verbelen soort connectors heet wire to board connectors.

Om kabels te verlengen, of verschillende kabels met elkaar te verbinden, worden wire to wire con- nectors gebruikt. Kroonstenen bestaan bijvoorbeeld in een versie met een schroefconnectie langs elke kant (de wire to wire versie) en een versie die langs de andere kant op de PCB wordt gesoldeerd, print- kroonstenen. Die zijn dan wire to board.

Een laatste type connectors is bedoeld om verschillende PCB’s rechtstreeks met elkaar te verbinden, zonder gebruik te maken van kabels. Deze connectors heten dan board to board connectors. Je herkent ze gemakkelijk omdat hierbij ook de vrouwelijke kant op de PCB gesoldeerd zit, wat bij wire to board connectors ongewoon is. Het bekendste voorbeeld van board to board connectors zijn de female headers op Arduino’s, die bedoeld zijn om uitbreidingsmodules (shields) in te pluggen. Andere voorbeelden zijn PCI-e slots en DIMM slots op moederborden.

5.4.1.4 Orientatie¨

Bijna alle connectortypes bestaan in 2 versies: een vertikale versie (eng. straight) waarbij de comple- mentaire connector langs de bovenzijde wordt ingeplugd, en een rechte hoek versie (eng. right angle) waar de complementaire connector langs de zijkant wordt ingeplugd.

Welk type connector het best geschikt is hangt volledig af van de toepassing. Als er niet veel ruimte is boven de PCB dan kan het moeilijk zijn om een kabel in een vertikale connector geplugd te krijgen. Hetzelfde geldt voor stapels (eng. stacks) van PCB’s die met board to board connectors met elkaar verbonden zijn. In deze situaties gebruik je bij voorkeur right angle connectors. Heb je horizontaal niet veel ruimte, dan kies je uiteraard beter voor de straight versies.

5.4.2 Printkroonstenen

De eenvoudigste manier om draden aan te sluiten op een PCB is gebruik te maken van printkroonstenen (eng. screw blocks). Ze bestaan uit kroonstenen met een vertikale pin die bedoeld is om op een PCB gesoldeerd te worden. Draden aansluiten gebeurt dan op dezelfde manier als bij normale kroonstenen, nl. door ze dicht te draaien met een kleine schroevendraaier. Printkroonstenen zijn dus wire to board connectors.

Figuur 5.2: Aansluiting van VCC en GND aan een audioversterker (links). Doordat printkroonstenen in versies met 2 en 3 aders maar niet 4 aders verkrijgbaar zijn, werd er hier geopteerd om 2 printkroonstenen van 2 aders naast elkaar te gebruiken. De meeste types schuiven met een groef in elkaar. Rechts: een schakelende voeding met een LM2596 buckconverter waarvan de in- en uitgangsspanningen worden afgenomen via groene printkroonstenen.

Printkroonstenen kunnen veel stroom verwerken en lenen zich uitstekend om dikke draden op een PCB aan te sluiten, bijvoorbeeld om een 230 V netsnoer met een PCB te verbinden. Ze nemen in ver- gelijking met andere connectortypes de meeste ruimte in beslag per ader, zijn vrij duur, en hebben als

58 ing. Y. Verbelen DESIGNENPROTOTYPING 59 nadeel dat je extra gereedschap nodig hebt om de draden aan te sluiten en weer los te maken.

Printkroonstenen werken enkel betrouwbaar als de draden voldoende dik zijn. Multicore draden zal je eerst moeten vertinnen met soldeertin.

Omdat de pitch bij printkroonstenen niet gestandardiseerd is, moet je bij het ontwerp van je PCB goed opletten. Controleer steeds dat de pitch van je footprint overeenkomt met de werkelijke pitch van de connector.

Waar gebruiken? Waar je een klein aantal dikke draden die veel stroom vervoeren wilt verbinden met een PCB.

5.4.3 JST-connectors

JST-connectors zijn het meest toegepaste connectortype. Ze zijn compact, relatief goedkoop, en zitten dankzij een kliksysteem betrouwbaar vast op de PCB. In tegenstelling tot printkroonstenen kan de aan- sluiting ook gemakkelijk geautomatiseerd worden. Hierdoor lenen ze zich uitstekend voor industriele¨ toepassingen die onderhevig zijn aan schokken of trillingen. JST-connectors zijn dus de keuze bij uitstek voor de meeste verbindingen die je als industrieel ingenieur moet maken tussen PCB’s, met ingebrip van de wekker. De pitch van JST-connectors is geen veelvoud van 100 mil en dus zijn ze niet breadboard- compatibel. De meest voorkomende pitch is 2.5 mm.

Figuur 5.3: PCB van een industriele¨ fotokopieermachine, met witte en blauwe JST-connectors die de H-bruggen interfacen met motors, sensors en andere PCB’s. Rechts: aansluiting van een stappenmotor met female 6-pin JST connector. Merk op dat er maar 4 van de 6 aders in gebruik zijn aan de kabelzijde.

Bij JST-connectors wordt de mannelijke kant steeds op de PCB gesoldeerd. De vrouwelijke kant be- staat uit een lege behuizing waarin afzonderlijke contacten worden vastgeklikt. Om deze contacten op draden te krijgen heb je een krimptang nodig. De werkwijze hiervoor wordt verderop gedemonstreerd.

Wanneer gebruiken? Waar je verschillende PCB’s die niet naast elkaar liggen met elkaar wilt verbinden, om motors e.a. actuators aan te sluiten, enz.

5.4.4 Waferconnectors

Waferconnectors zijn een speciaal type JST-connectors waarbij het omhulsel van de mannelijke connec- tor langs e´en´ kant is weggehaald. Deze connectors hebben dikkere pinnen dan normale JST-connectors en worden dus vooral gebruikt voor de aansluiting van voedingskabels. Het nadeel van waferconnectors is dat de pinnen bloot zitten als de female connector niet is ingeplugd, wat gemakkelijker kan leiden tot kortsluitingen of aanraken. Waferconnectors hebben doorgaans een grotere pitch dan JST-connectors. De standaardmaat heeft een pitch van 3.96 mm.

Wanneer gebruiken? Zelfde applicaties als JST-connectors, maar voor grotere stromen.

59 60 DESIGNENPROTOTYPING ing. Y. Verbelen

Figuur 5.4: Male 5-pin waferconnector met 200 mil pitch op een schakelende voeding (links), aansluiting van het verwarmde bed van een Makerbot 3D-printer (midden) en een 12-pin female waferconnector voor de aansluiting van de voeding op de PCB van een XBox.

5.4.5 Headers Headers zijn historisch gegroeid als de standaardinterface voor PCB’s. Ze bestaan uit e´en,´ twee of meerder rijen pinnen (mannelijke versie) die precies 100 mil (2.54 mm) uit elkaar staan, waardoor ze als enige connectortype breadboardcompatibel zijn. Bij de wire to board variant wordt de mannelijke kant op de PCB gesoldeerd om te interfacen met een vrouwelijke stekker. Omdat headers in essentie enkel bestaan uit pinnen, zijn ze het goedkoopste type connector. Ze worden dus vaak gebruikt als interfaces voor debuggers, testpunten, en allerlei aansluitingen voor kleine signalen. Doordat de pinnen zo dicht bij elkaar zitten is er geen plaats om dikke draden aan te sluiten, en headers zijn dus niet geschikt voor grotere stromen.

Figuur 5.5: Links: een witte en zwarte dual row header, en een 4-pin shrouded header. Rechts: toepassing van dezelfde 4-pin shrouded header in right angle versie voor aansluiting van een eindeloopschakelaar (eng. end stop) op een Makerbot 3D-printer.

Headers die enkel uit pinnen bestaan hebben het nadeel dat de vrouwelijke connector er in 2 richtin- gen kan opgeklikt worden, wat ongewenste effecten of kortsluitingen kan opleveren. Om dit probleem op te lossen wordt er een plastic omhulsel rond geplaatst waar de vrouwelijke connector maar op e´en´ manier in past. Bij headers met 2 rijen pinnen die bedoeld zijn voor gebruik met IDC-connectors, heet dit een shrouded header of box header.

Headers zijn een uitstekende manier om losse draden te verbinden met PCB’s, bijvoorbeeld om sen- sors aan te sluiten. Ze zijn ook de standaardinterface voor servomotors. Net zoals bij JST-connectors en waferconnectors moet je ook bij headers een krimptang gebruiken om draden op de vrouwelijke con- nectors aan te sluiten. De vrouwelijke connectors worden ook Dupont-connectors genoemd.

Headers met 2 pinnen kennen een specifieke toepassing als socket voor jumpers. Jumpers zijn plas- tic blokjes waarin een metalen brugje zit dat contact maakt tussen de 2 pinnen van de header als het over de header geschoven wordt. Jumpers worden gebruikt als goedkope schakelaars die maar weinig moeten verzet worden, bijvoorbeeld om e´en´ of andere instelling te wijzigen op PCB’s. Ze worden veel gebruikt in pc’s op moederborden en dergelijke, maar zijn ook interessant omdat je op een gemakkelijke en betrouwbare manier verbindingen kan maken en weer onderbreken.

60 ing. Y. Verbelen DESIGNENPROTOTYPING 61

Figuur 5.6: 2 voorbeelden van board to board-connectors. Links: male dual row right angle shrouded header op periferiebord en female dual row header op de hoofdprint. Rechts: 4 blauwe female headers zoals op de meeste prototypingborden uit de Arduino-familie te vinden zijn. De zwarte connector linksonderaan is een DC-jack.

Naast wire to board connectors en als jumpers worden headers ook gebruikt als board to board con- nectors. Headers zijn e´en´ van de weinige connectors die verkrijgbaar zijn in zowel een mannelijke als vrouwelijke versie voor PCB-montage. Het bekendste voorbeeld van vrouwelijke headers is op de Ar- duino Uno zelf, waar ze gebruikt worden als board to board connectors waarop andere PCB’s (shields) kunnen ingeplugd worden. Omdat board to board connectors betrouwbaarder en gemakkelijk te mon- teren zijn dan wire to board connectors, worden ze in industriele¨ toepassingen gebruikt om aanliggende PCB’s met elkaar te verbinden of te stapelen. De PCB’s kunnen in dat geval naast elkaar liggen (met right angle connectors), haaks staan op elkaar (e´en´ right angle en e´en´ straight connector), of gesandwi- ched zijn (met 2 straight connectors). Figuur 5.6 toont een voorbeeld van een straight dual row female board to board header op het moederbord van een Xbox, en een right angle dual row shrouded male board to board connector op het periferiebord dat erop inklikt.

Wanneer gebruiken? Waar je een klein aantal signalen over kleine afstanden wil verbinden tussen PCB’s, voor interfacing met sensors of gebruikersinterfaces (knoppen, LED’s, displays etc.).

5.4.5.1 Arduino Arduino’s zijn ongetwijfeld het best bekende voorbeeld van board to board connectors. De Arduino Uno is meerbepaald uitgerust met 4 female headers, respectievelijk met 6, 8 of 10 aders afhankelijk van de versie. Deze headers zijn bedoeld om te interfacen met male headers in dezelfde configuratie zoals je ze aantreft op periferiebordjes, die in de Arduinowereld shields heten.

Helaas nodigen de gaten in deze female headers uit om er losse draden in te steken en de digitale, analoge en digitale pinnen van de Arduino op die manier te verbinden met andere elektronische scha- kelingen. Hoewel deze aanpak in sommige situaties werkt, is het ten zeerste af te raden. De female headers zijn immers ontworpen voor een mate met male headers, die vierkante pinnen hebben. De ope- ningen in female headers zijn bijgevolg ook vierkant zodat de male headers er perfect in passen. Als je echter een losse draad inplugt die rond is, dan zal die draad (met cirkelvormige doorsnede) dus maar op 4 plaatsen elektrisch contact maken met de header. Deze verbinding is bijgevolg onbetrouwbaar, kan door het kleine contactoppervlak weinig stroom verwerken, geeft voortdurend vals contact, en komt ook gemakkelijk weer los.

Female headers zijn dus uitsluitend bedoeld als board to board connectors, en behalve voor pro- totypingdoeleinden mag je ze niet gebruiken als wire to board connectors. Wil je toch een Arduino gebruiken in je finale versies, gebruik dan een periferiebord met de juiste connectors erop dat je op de Arduinoheaders inplugt.

5.4.5.2 Stacking Met board to board connectors kunnen PCB’s op een gemakkelijke manier elektrisch met elkaar ver- bonden worden. Afhankelijk van de gewenste orientatie¨ van de PCB’s onderling kan je hiervoor gebruik

61 62 DESIGNENPROTOTYPING ing. Y. Verbelen maken van combinaties van straight of right angle connectors.

Door een straight connector te combineren met een right angle connector kan je 2 PCB’s in een hoek van 90◦ zetten, zoals in figuur 5.6 gedemonstreerd wordt. De connectors zijn uitsluitend bedoeld om elektrische signalen door te geven, en zeker niet om de opstaande PCB ook mechanisch te ondersteunen. Bij gebruik van board to board connectors moet dus nog een aanvullende methode voor mechanische bevestiging voorzien worden, bijvoorbeeld via montagegaten waarmee de PCB met schroeven of bouten in de behuizing kan vastgezet worden. Bij onvoldoende mechanische bevestiging zullen de resulterende krachten op de connectors ervoor zorgen dat die loskomen of zelfs afbreken.

Door gebruik te maken van board to board connectors kan je behoorlijk wat plaats winnen: je kan PCB’s naast elkaar positioneren, haaks op elkaar zetten, of opstapelen zoals een sandwich. Bovendien spaar je er tijd en kosten mee uit doordat er geen bekabeling nodig is. PCB’s in sandwichconfiguratie heten een stapel (eng. stack). Stacking is de standaardmethode om shields op Arduino’s te monteren.

Vroeg of laat stelt zich de vraag wat in een bepaald project de beste configuratie van de verschillende PCB’s is. Het antwoord is afhankelijk van onder meer het aantal PCB’s dat je met elkaar wilt verbinden, het aantal elektrische verbindingen ertussen, en de plaats die je beschikbaar hebt. Bij vrije keuze is stacking af te raden om 3 redenen:

• Bij stacks van 3 PCB’s of meer is het moeilijk elke PCB mechanisch te bevestigen zonder daarvoor ingewikkelde ladderstructuren te bouwen.

• De hoogte van de componenten op de PCB’s is beperkt, en hoge componenten lopen het risico kortsluiting te maken met de PCB erboven.

• Elektrische contacten, schakelaars of connectors zijn moeilijk bereikbaar, en LED’s zijn niet of nauwelijks zichtbaar.

De gemakkelijkste configuratie is de PCB’s naast elkaar te leggen in hetzelfde vlak (eng. flat layout). Alle componenten zijn dan weliswaar gemakkelijk bereikbaar, maar deze configuratie neemt ook de meeste plaats in beslag.

5.4.6 D-sub-connectors

D-sub-connectors ken je van seriele¨ poorten op pc’s maar zijn veel ouder dan dat. De “D” is afkomstig van de vorm van de connector, die bovenaan breder is dan onderaan. Aan deze vorm kan je D-sub- connectors dus gemakkelijk herkennen. D-sub-connectors bestaan in verschillende versies, elk met een verschillend aantal pinnen.

Figuur 5.7: D-sub-connectors op de achterkant van een pc-moederbord. De paarse, blauwe en groene connectors zijn respectievelijk een 25-pin female D-sub, 15-pin female D-sub (VGA) en 9-pin male D-sub. Links: een digitale DVI-connector.

62 ing. Y. Verbelen DESIGNENPROTOTYPING 63

D-sub-connectors worden zeer veel gebruikt in elektronica: ze zijn robuust, gemakkelijk verkrijg- baar, worden door veel fabrikanten geproduceerd, en de verbinding is afgeschermd dankzij de metalen behuizing. Ze bestaan bovendien in veel maten, en door de “D”-vorm is het onmogelijk om ze verkeerd aan te sluiten. D-sub-connectors bestaan in PCB-versie (zoals de 9-pin versie op de voorbeeld PCB in het vorige hoofdstuk, of de rechtse 25-pin versie in figuur 5.8) maar ook met kabelaansluitingen, voor montage op controlepanelen en met IDC-interface voor bandkabels.

Figuur 5.8: Links: een 25-pin male en 15-pin female D-sub-connector voor paneelmontage. Let op de rechtstreekse aansluiting aan een bandkabel, ge¨ısoleerd met krimpkous. Rechts: dezelfde 25-pin male D-sub-connector, maar nu in right angle versie voor PCB-montage.

Waar gebruiken? Waar je digitale signalen wilt uitwisselen tussen verschillende toestellen, of binnen hetzelfde toestel over lange afstanden (bv. in machines). De pinnen van een D-sub-connector kunnen behoorlijk wat stroom verwerken, dus je kan ze gebruiken om zowel sensors als actuators aan te sluiten.

5.4.7 IDC-connectors IDC-connectors zijn bedoeld voor aansluiting op bandkabels. Ze bestaan uit 2 rijen pinnen en een collet waar de bandkabel wordt tussengeschoven. Vervolgens wordt de collet dichtgedrukt, in een bankschroef bijvoorbeeld, waardoor de pinnen door de isolatie van de bandkabel worden gedrukt en contact maken met de geleiders. Hier komt de afkorting IDC vandaan: insulation displacement connector.

Figuur 5.9: Links: 2 bandkabels met female IDC-connectors aangesloten op dual row pin headers. Midden en rechts: een straight 14-pin shrouded header en een right angle 40-pin shrouded header (met langs de linkerkant een right angle 4-pin waferconnector en langs de rechterkant een 2-pin JST-connector), beide bedoeld voor aansluiting van bandkabels via IDC-connectors.

Het voordeel van een IDC-connector is dat ze gemakkelijk en snel op bandkabels kunnen aange- bracht worden, en dat de verbinding robuust is. IDC-connectors geven zelden slechte contacten. IDC- connectors worden veel gebruikt om bandkabels aan te sluiten op PCB’s. In dat laatste geval is de complementaire mannelijke connector een dual row header, bij voorkeur shrouded om verkeerd aanslui- ten te verhinderen.

Wanneer gebruiken? Telkens wanneer je een bandkabel gebruikt.

Om IDC-connectors op bandkabels te zetten heb je enkel een knijptang of bankschroef nodig.

63 64 DESIGNENPROTOTYPING ing. Y. Verbelen

Figuur 5.10: Om IDC-connectors op bandkabel te zetten heb je enkel een tang nodig. Van links naar rechts: IDC-connector met gewenste aantal aders open trekken, de bandkabel errond plooien zodat de voorkant gelijk komt met de connector, en vervolgens dichtknijpen met een tang of in de bankschroef. Let op de rode markering op de kabel, die pin 1 aanduidt.

5.4.8 Standaarden

De hierboven besproken connectors hebben fundamenteel verschillende karakteristieken, maar hebben desondanks toch e´en´ eigenschap met elkaar gemeen: ze zijn vrij te gebruiken in elke toepassing omdat er geen standaarden gedefinieerd¨ zijn over de spanningen en types signalen die ze mogen vervoeren. Het zijn dus, zoals dit in de elektronica heet, general purpose connectors. Dat betekent ook dat je bv. een mannelijke D-sub-connector niet zomaar in een vrouwelijke D-sub-connector op een andere machine mag pluggen, zelfs als ze passen! Beide connectors zullen hoogstwaarschijnlijk immers ver- schillende spanningsniveaus voeren, en de kans is groot dat e´en´ van beide toestellen beschadigd geraakt.

Figuur 5.11: Standaard en niet-standaardconnectors naast elkaar: een RCA-connector voor composite video en 3 USB-A connectors (links), een mini-DIN-connector voor S-video en een standaard blauwe 15-pin D-sub-connector voor VGA.

Veruit de meeste elektronische connectors zijn echter geen general purpose connectors. De span- ningsniveaus op een USB-connector of een HDMI-connector zijn bijvoorbeeld heel nauwkeurig gede- finieerd,¨ en de taak van elke ader ligt vast in uitgebreide specificatieboeken. Als je dit soort connectors gebruikt moet je de corresponderende specificaties dus nauwgezet volgen, want deze connectors worden verondersteld om uitwisselbaar te zijn tussen verschillende apparaten. Om die reden mag je een USB- connector bijvoorbeeld niet gebruiken om een RGB-LED of stappenmotor met je PCB te verbinden, hoewel hij 4 aders bevat. Vroeg of laat zal iemand immers proberen om die connector in zijn laptop te pluggen, al dan niet onopzettelijk, met alle gevolgen van dien.

5.5 Kabels maken

Bij het bouwen van prototypes zal het aansluiten van kabels op connectors al evenveel tijd in beslag nemen als het solderen van de componenten zelf. Mits de correcte technieken en het juiste materiaal kan deze stap toch vlot verlopen.

Kabel vind je per lopende meter op rollen in het fablab, en zo worden ze ook industrieel aangeleverd. Eens je de gewenste lengte van een kabel kent, zal je die dus op maat moeten maken door een stuk van

64 ing. Y. Verbelen DESIGNENPROTOTYPING 65 een rol af te snijden en langs e´en´ of beide kanten er een passende connector op te bevestigen.

5.5.1 Strippen Met uitzondering van IDC-connectors zal je bij alle andere connectortypes een stukje van de isolerende mantel moeten verwijderen alvorens je de connector erop kan bevestigen. Dit proces heet strippen, en het gereedschap dat je hiervoor gebruikt heet een striptang. Met een striptang kan je snel en veilig de mantel van kabels lossnijden en van de kern afschuiven. Stel de tang zodanig in dat ze net niet tot in de kern snijdt. Op de meeste tangen is hiervoor een instelschroef voorzien. Je hoeft max. 5 mm af te strippen. Als de tang de ader volledig doorknipt, dan staat ze te diep ingesteld en moet je dus de instelschroef bijregelen.

5.5.2 Krimpen Om vrouwelijke headers, vrouwelijke JST-connectors of vrouwelijke waferconnectors (receptacles) met draaduiteinden te verbinden, bestaat er een efficientere¨ techniek dan solderen die krimpen heet. Het bij- horende gereedschap dat je ervoor nodig hebt heet een krimptang. Krimpsockets bestaan uit een manne- lijke of vrouwelijke connector langs de ene kant en 2 of 4 opstaande lippen langs de andere kant. Eens er een draad tussen deze lippen zit worden ze dichtgeduwd door de krimptang waardoor de uiteinden van de lippen zich in de daad vastbijten en er een betrouwbare elektrische verbinding ontstaat. Bij de versie met 4 lippen zijn de buitenste 2 lippen bedoeld om de isolatie van de draad vast te houden. Bij draden met kleine diameter of multicore is het verstandig om de het uiteinde eerst te vertinnen.

Figuur 5.12: De 4 stappen om clips op kabels te krimpen: clip uit de rol knippen (1), clip in de krimptang steken met de open kant naar de grote holte toe (2), draad met afgestripte mantel in de clip schuiven (3) en krimptang toeknijpen om de lipjes om te buigen, vervolgens clip en draad uit de tang nemen (4).

Nadat alle aders van zo’n krimpsocket voorzien zijn, kunnen ze in een krimpbehuizing geschoven worden. Daartoe is er in de behuizing langs e´en´ kant een uitsparing voorzien waar een haaks lipje op de krimpsocket in kan schuiven. Duw de krimpsocket in de krimpbehuizing tot het lipje op zijn plaats zit, je hoort dan ook een klik. Het lipje verhindert dat de krimpsocket weer uit de behuizing kan schuiven.

Figuur 5.13: Schuif draden met clips met de bovenzijde (weerhaakje) in de connectorbehuizing tot het weerhaakje op zijn plaats klikt, en herhaal dit voor alle draden. De pijl op de behuizing duidt pin 1 aan.

5.5.3 Isoleren Soms moet je op connectors, schakelaars of potentiometers solderen die tegen de wand van de behuizing gemonteerd zitten als deel van de gebruikersinterface. Dit resulteert in blote soldeerverbindingen die

65 66 DESIGNENPROTOTYPING ing. Y. Verbelen een risico vormen op kortsluitingen. Hetzelfde probleem doet zich voor als je soldeerverbindingen op hoge spanningen, bv. een netschakelaar, wil beveiligen tegen aanraken.

De eenvoudigste methode is isolatietape te gebruiken. Deze tape kan je rond de blote verbinding draaien totdat alle metalen delen bedekt zijn. Het nadeel van isolatietape is dat ze lijmresten achterlaat en de neiging heeft om los te komen.

Een betere oplossing is krimpkous (eng. heat shrink tube) te gebruiken. Krimpkous is een flexibele kunststof buis waarvan de diameter kan verkleind worden door ze op te warmen. Schuif een klein stukje krimpkous over de blote verbinding, en verwarm ze dan indirect met een aansteker of heteluchtsoldeer- bout. De krimpkous past zich dan perfect aan de vorm van de verbinding aan en sluit ze af van de lucht waardoor ze ook niet meer kan oxideren. Krimpkous weer verwijderen doe je met een mes of scalpel. Als je draden aansluit, dan moet je uiteraard eerst een stukje krimpkous over de draad schuiven vooraleer je hem vast soldeert, anders krijg je de krimpkous er nadien niet meer over.

5.5.4 Kabelbomen Door kabels los te laten hangen in de behuizing zijn ze onderhevig aan krachten die worden veroorzaakt door het verplaatsen of manipuleren van je wekker, bijvoorbeeld als je elke morgen 5 keer keihard op snooze mept. Zelfs goede connectors zullen dan vroeg of laat loskomen. Om dit te vermijden moet je je kabels vastmaken in de behuizing. De meest efficiente¨ manier is door kabels die in dezelfde richting lopen, samen te bundelen en vast te sjorren met een tie-wrap die dan ook tegen de wand van de behuzing wordt vastgezet. Bij het ontwerpen van je behuizing denk je dus best al na waar je de kabels wil laten lopen, en voorzie je de nodige gaten waar ze doorheen passen.

Figuur 5.14: Een voorbeeld van slechte bekabeling. Kabels zijn niet vastgemaakt, lopen door elkaar, en er zijn geen of verkeerde types connectors gebruikt. Slechte contacten door falende verbindingen zijn onvermijdelijk.

Omdat kabels de neiging hebben om te vertrekken vanaf een centrale PCB en zich vervolgens uit te spreiden over het toestel in een structuur die vergelijkbaar is met een boom die zich vertakt, spreekt men over kabelbomen. In het Engels wordt dit ook wel een cable harness genoemd.

5.6 Bekabelingstechnieken

Hoewel je moet weten welke types connectors en kabels er bestaan, is het volstrekt zinloos om alle aan- bevelingen en technieken in dit hoofdstuk van buiten te leren. Kabels en connectors correct gebruiken doe je vooral door zelf de spreekwoordelijke handen uit de mouwen te steken en met je eigen wekker- prototype aan de slag te gaan.

Laat je inspireren door professioneel ontworpen toestellen. Printers, zowel voor particulier als in- dustrieel gebruik, zitten boordevol kabels en connectors en tonen waar je welk type correct gebruikt.

66 ing. Y. Verbelen DESIGNENPROTOTYPING 67

Figuur 5.15: Links: correcte bekabeling in een 17” LCD-scherm. Goede keuze van connectors (wafer voor aansluiting voeding linksboven, JST voor interface tussen display en displaydriver). De zwarte connector op de displaydriver is een Molex-connector. Let op de witte klem die de centrale kabelboom op zijn plaats houdt, en de grijze houder voor de ferrietkern rond de LVDS-kabel die tegen de behuizing is vastgeschroefd. Rechts: een sleeve en lipje in de metalen behuizing om een twee-aderige kabel vast te houden.

Ook scanners, pc’s, microgolfovens, wasmachines e.d. bevatten doorgaans fraaie voorbeelden van cor- rect gebruikte kabeltypes, connectors en kabelbomen. Volledige kabelbomen hergebruiken lukt zelden omdat de kabels nooit de juiste lengte hebben, maar individuele kabels en/of connectors laten zich wel uitstekend hergebruiken. Dit spaart meteen de tijd en moeite om zelf connectors op kabels te krimpen, met krimpkous te isoleren en dergelijke.

67 68 DESIGNENPROTOTYPING ing. Y. Verbelen

68 6 Solderen

If it smells like fried chicken, you’re holding your soldering iron the wrong way.

Mitch Altman

6.1 Inleiding

Nadat je PCB ontworpen en gefabriceerd is, en je hebt de juiste connectors gekozen om de kabels met je PCB te verbinden, dan kan de assemblage beginnen. Om de elektronische componenten en connec- tors vast te zetten op de PCB maak je gebruik van gesmolten metaal in een proces dat solderen (eng. soldering) heet.

Om te solderen heb je een metaallegering nodig met een laag smeltpunt. De meest voorkomende legeringen bestaan uit combinaties van tin, lood, koper, zink en zilver in varierende¨ verhoudingen. In het fablab gebruiken we 2 types: “loodsoldeertin” met een verhouding Sn/Pb van 40/60 en “zilver- soldeertin” waarbij het lood vervangen is door een mengsel van zilver, koper en zink. Solderen met loodsoldeertin is veel gemakkelijker dan met zilversoldeertin, en het is dus warm aan te bevelen om te leren solderen met loodsoldeertin.

Alle soldeertinlegeringen hebben een smelttemperatuur die tussen ca. 200◦C en 300◦C ligt. Dat is dus meteen ook het grote verschil tussen solderen en lassen: bij solderen smelt enkel het soldeertin, bij lassen smelten ook de beide stukken die je aan elkaar wil zetten om e´en´ groot vloeibad te creeren.¨ Een lasverbinding kan je dus niet ongedaan maken, vermits beide stukken letterlijk in elkaar gesmolten zijn, een soldeerverbinding kan echter wel terug uiteen.

6.2 Soldeerbout

Het gereedschap dat je nodig hebt om te kunnen solderen heet een soldeerbout. Een soldeerbout is niks anders dan een geharde metalen punt die door een weerstand op temperatuur wordt gebracht. Een goede soldeerbout heeft een vermogen van meer dan 80 W en een temperatuurregeling. Soldeerbouten zonder temperatuurregeling kan je niet gebruiken om elektronica te solderen omdat ze ofwel te koud zijn ofwel de elektronische componenten verbranden. Dit soort soldeerbouten zijn enkel geschikt om waterleidin- gen mee aan elkaar te solderen, of als wafelijzer dienen. 70 DESIGNENPROTOTYPING ing. Y. Verbelen

Nog beter dan een losse soldeerbout is een soldeerstation. Soldeerstations hebben quasi altijd een temperatuurregeling waarmee je de temperatuur kan instellen, en een houder om de losse soldeerbout in te bewaren. Goede soldeerstations zijn al commercieel verkrijgbaar vanaf ca. 30-50 EUR.

Figuur 6.1: Display voor instelling van de temperatuur op een Weller WD-80 soldeerstation, en bijhorende houder met spons. Gebruik een spuitfles om de spons te bevochtigen.

Even belangrijk als de soldeerbout zelf is de spons. Die gebruik je om de punt van de soldeerbout schoon te maken vooraleer je begint te solderen. De punt moet blinken en vrij zijn van prut of andere aanslag vooraleer je kan solderen. Uiteraad dient de spons licht bevochtigd te zijn, anders verbrandt ze. Her en der wordt op het internet aangeraden om de spons te vervangen door staalwol. Hoewel dat weliswaar werkt, heeft staalwol de eigenschap om veerkrachtig te zijn. Als er nog soldeertin aan de punt hangt, dan heeft dit de neiging om weg te springen als je het afveegt aan de staalwol. Onnodig te vermelden dat rondvliegend gesmolten metaal niet aan te bevelen is. Hou het dus bij een goede, licht bevochtigde spons.

6.3 Soldeerverbindingen maken

Neem alle nodige materiaal bij de hand: de component(en) die je wil solderen, een rol soldeertin, en de soldeerbout zelf met bijhorende bevochtigde spons. Stel de soldeerbout in op 350◦C, wacht tot de soldeerbout warm is, en veeg de punt schoon op de spons.

Om een goede soldeerverbinding te kunnen maken, mogen de componenten niet bewegen terwijl het soldeertin afkoelt, zo niet krijg je een brosse en brokkelige verbinding die slecht contact maakt. Het is aan te bevelen om componenten langs de bovenzijde op de PCB vast te plakken met Tesa-tape vooraleer je begint te solderen. Op die manier blijven ze zeker op hun plaats zitten.

Neem de soldeerbout vast zoals je een pen vastneemt: tussen duim, middelvinger en wijsvinger. Als je rechtshandig bent, dan soldeer je waarschijnlijk ook best met de rechterhand, en omgekeerd. Uiter- aard neem je de soldeerbout vast aan de kunststof handgreep en niet aan de metalen delen.

Het soldeertin dat we gebruiken in het fablab bestaat eigenlijk uit een holle buis soldeertin die ge- vuld is met een substantie die flux heet. Flux is een vetachtige visceuze gel die zeer corrosief wordt als ze wordt verhit. Het doel van flux is de te solderen oppervlakken te reinigen door alle oxidatieresten en andere onzuiverheden op te lossen. De punt van de soldeerbout is echter zodanig heet dat de flux bij contact meteen verdampt zonder zijn werk te kunnen doen! Idealiter mag het soldeertin dus niet recht- streeks in contact komen met de soldeerboutpunt. Hoe kan je dan solderen? Door beide oppervlakken eerst te verhitten en dan pas soldeertin toe te voeren.

Duw de punt van de soldeerbout in een hoek van ca. 45◦ tussen de PCB en de draad van de compo- nent die je wil solderen. Hou hem daar enkele seconden om zowel het soldeereiland op de PCB (pad) en de draad van de component goed op te warmen. Duw nu voorzichtig het soldeertin tegen de draad en het pad zonder dat deze de punt van de soldeerbout raakt, bv. aan de andere kant van de draad.

70 ing. Y. Verbelen DESIGNENPROTOTYPING 71

Figuur 6.2: Solderen in 6 stappen (van links naar rechts): soldeerbout verhit zowel pad als draad, en soldeertin wordt toegevoegd (1). Soldertin smelt (2) en vloeit uit (3) totdat er een glanzende conus wordt gevormd (4) waarna het soldeertin wordt verwijderd (5) en tot slot de soldeerbout wordt weggetrokken om de verbinding te laten stollen (6).

Het soldeertin zal smelten, de flux vloeit uit en verdampt, en enkele ogenblikken later vloeit ook het soldeertin zelf mooi uit. Als het soldeertin niet smelt, dan kan je het eventueel kort tegen de punt van de soldeerbout aantikken. Je kan nu de soldeerboutpunt wegtrekken, en het soldeertin laten stollen.

Bij een goede verbinding glanst het soldeertin, heeft het de vorm van een kegel aangenomen, en heeft zich goed aan beide metalen delen gehecht. Als het soldeertin geen contact maakt met het soldee- reilandje of met de draad, dan is dat een indicatie dat je dat oppervlak onvoldoende warm hebt gemaakt. Geen paniek: je kan de verbinding terug smelten met de soldeerbout, en nieuw soldeertin toevoegen om de flux zijn werk te laten doen en het soldeertin te laten uitvloeien over beide oppervlakken.

goede verbinding lead onvoldoende verhit pad onvoldoende verhit

soldeertin soldeermasker elektrische layer

substraat component lead

Figuur 6.3: Van links naar rechts: een goede conische soldeerverbining, een slechte verbinding waarbij de draad onvoldoende werd verhit, en een slechte verbinding waarbij het soldeereilandje (pad) onvoldoende werd verhit.

Als de verbinding niet glanst maar er eerder dof uit ziet, dan heb je het soldeertin te lang verhit. Ook hier geldt dezelfde remedie: vebinding weer smelten, een weinig nieuw soldeertin toevoegen, en laten uitvloeien.

Als de verbinding er brokkelig uit ziet of het oppervlak van de verbinding niet glad is, dan zijn beide onderdelen bewogen terwijl het soldeertin aan het stollen was. Zelfde remedie als hierboven.

Mits wat oefenen kan je op deze manier de ene verbinding na de andere maken. Een soldeerverbin- ding hoeft niet langer dan 3 - 5 s te duren. Vergeet niet regelmatig de punt schoon te vegen op de spons om de aangekoekte fluxresten te verwijderen.

71 72 DESIGNENPROTOTYPING ing. Y. Verbelen

6.4 Desolderen

Het omgekeerde van solderen heet desolderen. Omdat bij solderen de originele componenten niet be- schadigd worden maar enkel met soldeertin aan elkaar vast zitten, kan je een soldeerverbinding op elk moment weer ongedaan maken. Redenen om te desolderen zijn bv. het vervangen van defecte compo- nenten, het corrigeren van fouten en het hergebruiken van componenten van afgedankte PCB’s.

De 3 voornaamste technieken om te desolderen zijn met een tang, met een desoldeerpompje of met litze (eng. solder wick of solder braid).

6.4.1 De tang

Bij componenten die over slechts 2 aansluitingen beschikken zoals weerstanden, condensatoren, diodes, inductors e.d. is de simpelste manier om te desolderen door gebruik te maken van een tang. Stel de PCB vertikaal op, bijvoorbeeld in een bankschroef of door hem vast te houden, en verhit e´en´ van beide contacten om die los te maken. Trek dan met een fijne tang die kant door de PCB. Een variant hierop is een schroevendraaier als hefboom gebruiken. Voor condensators heb je helemaal geen extra gereed- schap nodig: duw hem van de losse pin naar de nog vastzittende zijde, en de losse pin wordt vanzelf uit de PCB getild.

Vervolgens verhit je de andere verbinding, zodat je de component met dezelfde tang kan lostrekken.

6.4.2 Desoldeerpomp

Een desoldeerpomp bestaat uit een pneumatische zuiger die onder spanning wordt gehouden door een veer. Smelt de verbinding die je wenst te verbreken met de soldeerbout, en duw dan de desoldeerpomp er zo dicht mogelijk tegen. Als de pomp zich ontspant dan zal het gesmolten soldeertin met de omrin- gende lucht mee in de pomp worden gezogen.

Hoewel nuttig om grote hoeveelheden tin te verwijderen is een desoldeerpomp alleen zelden vol- doende om componenten los te maken. Het gebruik ervan vergt ook heel wat oefening.

Figuur 6.4: Desolderen met behulp van een desoldeerpomp (links) en met litze (rechts).

6.4.3 Litze

De meest effectieve manier om te desolderen, en ook de enige techniek die goed werkt bij kleine ver- bindingen met inbegrip van surface mount componenten, is litze. Litze bestaat uit zeer fijn gewoven metaaldraad, meestal koperdraad, dat gedrenkt is in flux. Als het tegen gesmolten soldeertin wordt ge- duwd, zal het tin in de litze worden opgezogen dankzij het capillair effect.

Kies de litze in functie van de toepassing. Voor kleine verbindingen kies je dunne litze, voor grote verbindingen dikke litze. Koperen litze werkt iets gemakkelijker dan stalen litze voor loodsoldeertin, bij

72 ing. Y. Verbelen DESIGNENPROTOTYPING 73 zilversoldeertin is er weinig verschil tussen beide types.

Leg de litze tegen de verbinding die je wenst te verwijderen, en duw er dan de soldeerboutpunt tegenaan. Maak het contactoppervlak tussen litze en soldeerboutpunt zo groot mogelijk om de warmte- overdracht te maximaliseren. Van zodra het soldeertin smelt, zal het opgezogen worden. Indien nodig moet je de litze bewegen om “verse” litze toe te voeren.

6.5 Oververhitting

Elektronische componenten zijn van nature gevoelig voor warmte, en zeker halfgeleiders zoals transis- tors (BJT’s, MOSFET’s, ...) en IC’s zijn erg gevoelig voor oververhitting. IC’s zoals de ATmega328p soldeer je daarom niet rechtstreeks op de PCB, maar plaats je in een socket die je eerst vastsoldeert zonder dat er een IC in zit.

Als je halfgeleiders te sterk verhit, dan bestaat de kans dat ze al kapot zijn nog voor ze goed en wel vast zitten. Je kan dit risico minimaliseren door enkele vuistregels te volgen:

• Zet de temperatuur van de soldeerbout nooit hoger dan nodig, een temperatuur van 300 - 350◦C moet volstaan.

• Verwarm de component kort maar krachtig, nooit meer dan enkele seconden.

• Test halfgeleiders die je gedesoldeerd hebt op een breadboard vooraleer je ze opnieuw gebruikt.

6.6 Veiligheid

Dat tijdens solderen looddampen vrijkomen is een fabeltje omdat lood niet verdampt bij een tempera- tuur van 350◦C zoals iedereen die een basiscursus fysica heeft gehad weet. De dampen die ontsnappen zijn afkomstig van de flux die verdampt als hij in contact komt met de hete soldeerboutpunt. Of de fluxdampen “gezonder” zijn dan looddampen is een zinloze discussie: een substantie die als doel heeft oxidatie op de PCB op te lossen, adem je best niet in. Zorg voor een goed geventileerde werkplek: bij voorkeur ga je voor een open raam zitten, onder een afzuiging (bv. trekkast) of zet je simpelweg een ventilator aan om de dampen van je weg te blazen.

Een tweede veiligheidsaspect is natuurlijk de hete soldeerbout zelf. Zorg dat die altijd in zijn houder staat, en leg hem zeker nooit los op tafel. Alles waar de punt mee in contact komt zal schroeiplekken oplopen, en mogelijk brand veroorzaken. Wijs ook je medestudenten erop dat een soldeerbout warm staat als ze in de buurt van je werktafel komen maar er zich niet van bewust zijn. Het kan een kwartier duren vooraleer een soldeerbout voldoende is afgekoeld om veilig opgeborgen te kunnen worden.

73

7 Behuizing

An expert is a man who has made all the mistakes which can be made in a very narrow field.

Niels Bohr

7.1 Inleiding

Eens je elektronica af is en de software heeft bewezen dat ze correct werkt, dan rest er enkel nog het maken van een behuizing. De behuizing is een omhulsel waar alle onderdelen zoals PCB’s, voeding, bekabeling, eventuele batterijen e.d. in passen. Het doel van de behuizing is je ontwerp robuuster te maken voor alledaags gebruik door de elektronica te beschermen tegen beschadiging en stof. Afhanke- lijk van de toepassing kunnen er andere eisen gesteld worden aan de behuizing. Bij toestellen die buiten gebruikt worden, moet de behuizing de elektronica ook beschermen tegen regen en sneeuw. Tegelijk moet de behuizing de nodige ventilatieopeningen voorzien, zonder dat de gebruiker daarbij de spanning- voerende onderdelen op printplaten per ongeluk kan aanraken. Bedieningselementen zoals knoppen en schakelaars, displays en LED’s moeten echter wel bereikbaar of zichtbaar blijven. Het ontwerp van een behuizing is dus niet altijd triviaal.

7.2 Ontwerpvolgorde

Ontwerp je eerst de behuizing en maak je de elektronica daarna zodanig compact dat alles erin past, of begin je bij de elektronica en teken je de behuizing nadien op maat? Beide pistes zijn mogelijk, maar het is veel gemakkelijker om eerst de elektronica te ontwerpen zonder dat je rekening moet houden met bepaalde afmetingen. Ontwikkel dus eerst de PCB’s. Je moet er in dat design natuurlijk wel op letten dat LED’s in de juiste richting staan, dat connectors op de rand van je PCB zijn gelocaliseerd enzovoort. Als je een LCD-scherm langs de ene kant van je PCB zet en de knoppen langs de andere kant, dan wordt het onmogelijk om er een behuizing voor te ontwerpen nadien.

7.3 Mechanisch ontwerp

De beste manier om te starten is eerst je PCB te exporteren uit CircuitMaker als een STEP-model, zoals in hoodstuk 4 werd gedemonstreerd. Dit STEP-model bevat informatie over de vorm van de PCB, de positie en grootte van montagegaten, de vorm en positie van connectors, en zelfs de hoogte van alle componenten op de PCB. Kortom, op basis van een STEP-model heb je alle nodige informatie om 76 DESIGNENPROTOTYPING ing. Y. Verbelen een passende behuizing te ontwerpen. Als je ontwerp uit meerdere PCB’s bestaat, dan exporteer je afzonderlijke STEP-modellen van elke PCB.

7.3.1 3D CAD software Je zal de behuizing prototypen op basis van onderdelen die je zal lasercutten of 3D-printen in het fablab. Lasercutten en 3D-printen zijn compleet verschillende technologieen,¨ en de werkwijze om de vereiste stukken ervoor te ontwerpen zijn dus ook radicaal verschillend. Om te kunnen 3D-printen heb je een 3D-model nodig, te vergelijken met een STEP-model van de PCB, terwijl je om te lasercutten vectoriele¨ 2D-tekeningen nodig hebt. Om beide te combineren met 3D-modellen van je PCB’s is mechanische ont- werpsoftware vereist die zowel met 2D als 3D overweg kan. Net zoals voor PCB-ontwerp bestaan er ook voor mechanisch CAD verschillende softwarepakketten, de voornaamste zijn AutoCAD, SolidWorks, LibreCAD, , 123D, Sketchup en Inventor. Anders dan bij PCB software is er voor mecha- nisch ontwerp geen pakket dat duidelijk boven de anderen uitsteekt qua performantie en mogelijkheden. Dankzij de uitgebreide documentatie die ervoor beschikbaar is, adviseren we . Een tutorial van Inventor valt buiten het beste van deze cursus.

Figuur 7.1: Een PCB in de editor van CircuitMaker (3D view) links, en dezelfde PCB geexporteerd¨ als STEP-model uit CircuitMaker en ge¨ımporteerd in Autodesk Inventor rechts. Let op de passende contour, en de cirkelvormige cutout in het midden die overeenkomt met een gelijkaardige cutout in de behuizing. Er zijn ook enkele rode en zwarte kabels (14 AWG) aangesloten.

Figuur 7.1 toont een voorbeeld van gecombineerd design. De linkerafbeelding is een 3D-weergave van een PCB in CircuitMaker, waarop alle componenten vertegenwoordigd worden door eigen 3D- modellen. De vorm van de PCB is complexer dan de “standaard” rechthoekige PCB’s die je vaak tegenkomt. Er is ook een uitsnijding voorzien in het midden (eng. cutout) en er zijn verschillende montagegaten voorzien. Na exporteren als STEP-model kan de PCB dan in Inventor ge¨ımporteerd worden, en ingepast worden in het design van de behuizing zoals te zien is op de rechterafbeelding. Je ziet meteen waar er plaats moet gelaten worden voor bekabeling, waar de montagegaten moeten komen enzovoort.

7.3.2 Rapid prototyping 3D-printers en lasercutters zijn allebei beschikbaar in het fablab en even gemakkelijk in gebruik, maar toch verschillen beide types machines fundamenteel van elkaar wat betreft de toepassingen waarvoor je ze gebruikt.

7.3.2.1 Lasercutters

Lasercutters snijden 2D patronen uit vlak materiaal zoals hout, acrylaat (plexiglas), rubber of allerlei andere kunststoffen. Omdat lasercutters snel snijden kan je meteen je prototypes passen en testen, waar- door de ontwerpcyclus ook snel gaat. De voornaamste beperkingen van lasercutters zijn de beperkte

76 ing. Y. Verbelen DESIGNENPROTOTYPING 77 dikte van de materialen die je kan snijden en de types materialen (enkel brandbare of smeltbare mate- rialen, en geen metaal). De diktebeperking kan je gemakkelijk omzeilen door hetzelfde stuk meerdere keren te snijden uit dun materiaal, en de verschillende lagen dan op elkaar te lijmen of te schroeven. Door op deze manier op te splitsen in “lagen” kan je ook met lasercutters eenvoudige 3D-objecten ma- ken.

De simpelste vorm van een gelasercutte behuizing voor je wekker is een doos (eng. box) in de klas- sieke zin van het woord: 4 zijwanden, een bodem en een deksel. Deze 6 stukken kan je afzonderlijk op een lasercutter snijden en dan in elkaar passen. De techniek die je gebruikt om de doos in elkaar te zetten zal bepalend zijn voor de stevigheid en de toegankelijkheid. De 3 belangrijkste manieren zijn vlakke hoeken, vingers en T-slots.

Vlakke hoeken De oudste methode is die met vlakke hoeken. Alle stukken zijn dan zuivere rechthoe- ken. Het voordeel aan deze methode is dat de stukken zo eenvoudig zijn dat je zelfs geen lasercutter nodig hebt om ze te snijden, maar het gaat uiteraard wel sneller. Figuur 7.2 toont links een doosontwerp met vlakke hoeken.

Vingers Een ontwerp met vingers is beter dan vlakke hoeken omdat het contactoppervlak tussen beide stukken wordt vergroot. Dit leent er zich dus beter toe om te lijmen. De patronen worden zodanig complex dat manueel uitsnijden niet meer realistisch is en een lasercutter dus noodzakelijk. Figuur 7.2 toont in het midden een ontwerp met vingers.

Figuur 7.2: Drie technieken om een gelasercutte doos in elkaar te zetten: vlakke hoeken (links), vingers (midden) en een combinatie van vingers en T-slots (rechts). (afbeeldingen: Jon Hollander, www.makercase.com, overgenomen met toestemming van de auteur)

T-slots Het is mogelijk om de vingers zodanig te ontwerpen dat er net genoeg speling zit tussen de stukken om ze te laten in elkaar klemmen en de doos dus in elkaar te zetten zonder lijm. Het is dan wel een lastige opgave om de doos weer uiteen te halen, bijvoorbeeld om batterijen te vervangen. Na ettelijke keren open en dicht gemaakt te zijn, sluiten de stukken ook minder goed aan waardoor ze uiteindelijk niet meer voldoende wrijving hebben om bij elkaar te blijven. Een oplossing hiervoor is schroeven en bouten te gebruiken. Om 2 stukken die haaks op elkaar staan vast te zetten met bouten wordt een T-slot gebruikt. Hierin past langs de ene kant een moer, en de bout wordt er overlangs in gedraaid. T-slots hebben dus 2 voordelen: de gelasercutte stukken hoeven niet perfect in elkaar te passen, en je kan de doos zoveel openen en sluiten als je wilt. Figuur 7.2 toont rechts een voorbeeld van een ontwerp met vingers en T-slots.

7.3.2.2 Templates

Door slim gebruik te maken van symmetrie is het doenbaar om zelf de 6 stukken te ontwerpen in Inventor die je nodig hebt om een doos te assembleren. Als je echter verbindingen met vingers en/of T-slots wilt, dan wordt dit ontwerp ingewikkeld waardoor de kans op fouten toeneemt. Gelukkig bestaan er tal van

77 78 DESIGNENPROTOTYPING ing. Y. Verbelen templates online waarvan je kunt vertrekken. Deze templates kan je dan openen en aanpassen in Inventor waar nodig. Enkele voorbeelden van templates:

• http://www.makercase.com

• http://makeabox.io

• http://boxmaker.connectionlab.org

7.3.2.3 3D-printers 3D-printers bouwen 3D-objecten laag per laag op basis van een kunststof die op lage temperatuur smelt, vergelijkbaar met soldeertin. Deze kunststof wordt geextrudeerd¨ tot dunne draden waarmee laagjes worden getekend. De opeenstapeling van al deze laagjes resulteert in een 3D object. Het voordeel aan 3D-printen is dat quasi elk object dat je kan tekenen in Inventor ook kan geprint worden – theoretisch althans. In de praktijk zijn er beperkingen: grote objecten hebben de neiging los te komen van het printerbed en op te krullen, overhangende storten in tijdens het printen, en fijne details komen niet goed tot hun recht. De laagjes blijven ook een zwak punt in de structuur, en als het contactoppervlak tussen laagjes te klein is dan komen ze los en schilfert je object uiteen. Het voornaamste nadeel van 3D-printers is echter dat ze traag zijn. De snelheid waarmee kunststof kan gesmolten worden in de extruderkop is beperkt, net zoals de snelheid waarmee het gesmolten materiaal weer afkoelt. Afhankelijk van hoe mas- sief je je stuk wenst te printen (eng. material infill) kan het printproces voor grote en complexe stukken vele uren of zelfs dagen in beslag nemen. Als je je prototype snel wilt kunnen assembleren en testen, dan is 3D-printen dus niet de beste keuze.

De kracht van een fablab zit in de combinatie van de verschillende machines. Met lasercutters kan je snel vlakke stukken snijden zoals de 6 “wanden” van een doos bijvoorbeeld. Montagegaten voor bouten of schroeven, ventilatiegaten e.d. nemen nauwelijks tijd in beslag op een lasercutter. 3D-printers lenen zich dan weer uitstekend om knoppen te printen, koppelstukken tussen gelasercutte plaatjes, afstands- houders, beugels om kabels mee vast te zetten enzovoort.

7.3.3 Bereikbaarheid Een behuizing heeft tot doel om de elektronica te beschermen tegen gebruikers en vice versa, maar tegelijk moet de elektronica ook bereikbaar zijn om bijvoorbeeld batterijen te kunnen vervangen. Zon- der bereikbaarheid als ontwerpcriterium zou je ook een halve emmer epoxy over de elektronica kunnen gieten om deze te beschermen. Dit werd vroeger wel eens gedaan om te beschermen tegen vocht en reverse engineering door concurrenten, maar maakt natuurlijk ook elke reparatie onmogelijk. Derge- lijke methodes zijn dus verwerpelijk omdat ze weinig meerwaarde bieden maar hergebruik of recyclage belemmeren.

De kwaliteit van een behuizing wordt naast mechanische stevigheid dus vooral bepaald door de bereikbaarheid van de interne componenten. De behuizing moet zodanig ontworpen zijn dat alle interne componenten bereikbaar en vervangbaar zijn. De mate van bereikbaarheid hangt af van de component in kwestie. Batterijen moet je bij voorkeur kunnen vervangen zonder dat je daarvoor een schroevendraaier nodig hebt, terwijl het voor het vervangen van een display of condensator op de voeding geen probleem is om enkele schroeven te moeten losmaken. Een behuizing die volledig dichtgelijmd zit kan je niet meer openen zonder ze open te breken, en is dus niet acceptabel. Je kan echter wel´ 3 kanten van je doos in elkaar lijmen, en dan enkel de achterkant met schroeven vastzetten zodat de behuizing langs daar kan geopend worden.

78