Inleiding: printen zonder printen
Wie weleens een paar regels code heeft geschreven of iets over programmeren heeft gelezen, kent ongetwijfeld het zinnetje ‘hello world’. Het is van oudsher de boodschap die je schrijft als je een nieuwe programmeertaal leert. Elektronicahobbyisten hebben een aantal van dit soort ‘hello world’-projecten en het meest basale daarvan betreft het laten knipperen van een ledje. Niet voor niets begint ongeveer elke Arduino-uitleg met de sketch die het ingebouwde ledje van een Arduino-bordje laat knipperen: het toepasselijk genaamde ‘blink’.
Een paar projecten verder krijg je te maken met een ander traditioneel project: een klokje. Om een of andere reden is het bouwen van een klokje, in welke verschijningsvorm ook, een geliefde bezigheid. Kijk bijvoorbeeld naar de prachtige nixieklok die we eerder in deze .build-reeks de revue lieten passeren. Maar ook eenvoudigere klokjes of juist veel complexere, zoals klokken waarvan elk cijfersegment uit een aparte stappenmotor is opgebouwd, zijn leuk om te maken en nog leuker om naar te kijken. In een tijd dat je gewoon kunt zeggen: “Hey Google, hoe laat is het?” heeft het toch iets om nog een fysieke klok te hebben.
:strip_exif()/i/2003507718.jpeg?f=imagenormal)
Nog een stapje verder dan een klok is een ‘robot’ die een tekening maakt of tekst schrijft. Natuurlijk kun je je desktopprinter in een paar seconden stapels papier laten printen en de vellen aan elkaar plakken, maar een apparaat zelfstandig over een stuk papier of whiteboard laten bewegen en je tekening of tekst ‘tot leven’ zien komen, heeft iets speciaals. Wie een 3d-printer heeft, kan dit overgangsritueel voor een appel en een ei realiseren, of eigenlijk voor de prijs van een elastiekje en een stift. Heel veel meer dan een stift, pen of ander soort schrijfgereedschap aan je printkop bevestigen hoef je niet te doen om een 'computertekening' op een stuk papier, hout of wat je er maar onder kunt leggen, te realiseren.
:strip_exif()/i/2003507552.jpeg?f=imagenormal)
Uri Shaked laat op website Medium zien hoe je van je 3d-printer een plotter maakt
Maar wat als je geen 3d-printer hebt? Los van er zo snel mogelijk een kopen, kun je ook op andere manieren een pen over papier of iets anders laten bewegen. Een aardige methode om dat te doen is met een zogeheten wall plotter, een tegen een muur geplakt apparaat dat tekst of afbeeldingen print. Net als bij de zelfgemaakte klok zijn er zoveel projecten als doe-het-zelvers om zo'n wall plotter te maken, en je kunt het zo gek maken als je zelf wil.
Een wallplotter
We hebben als proof-of-concept een zeer eenvoudig en goedkoop plottertje gevonden, Stringent genaamd, dat vooral als leer- en experimenteerplatform dient. Voor een heel laag bedrag kun je namelijk al van start met deze muurtekenaar, mits je bereid bent op de post te wachten natuurlijk. Zoals gebruikelijk zijn de onderdelen namelijk in Chinese webshops aanzienlijk goedkoper verkrijgbaar dan bij ons.
:strip_exif()/i/2003507596.jpeg?f=imagenormal)
De 3d-geprinte onderdelen
We hadden het al eerder even over een 3d-printer en die heb je in principe nodig voor dit project om de basisplaat voor de plotter te maken. Heel kieskeurig is het principe van deze versie echter niet en je zou naar alternatieven kunnen zoeken om het skelet te bouwen. Een plaatje hout met een paar gaten is al voldoende, zolang je de componenten er maar op kunt monteren. De wielen die voor de voortbeweging zorgen, en de montage van de pen of stift zouden de grootste uitdagingen vormen.
De wiskunde achter de beweging van de muurplotter en het eenvoudige schema voor de elektronica
Hoe werkt zo'n plotterrobot eigenlijk? In beginsel lijkt hij sterk op een willekeurige printer of cnc-machine, en je kunt hem ook maken om g-code, de taal van 3d-printers en veel cnc's, te interpreteren. Je hebt namelijk twee steppermotoren nodig, die een precies aantal stappen draaien om de robot over een oppervlak te laten bewegen. Met een hangende plotter als deze gebruik je touwen die om katrollen heen lopen en zo het apparaat over de x- en y-as laten bewegen. Daarmee kun je je het touw voorstellen als substituut voor de gebruikelijkere tandriemen in 3d-printers of schroefdraad in cnc-machines. Met de nodige wiskunde kun je exact berekenen hoever elk katrolwiel moet draaien om de gewenste positie in een tweedimensionale ruimte te bereiken.
Zoals zo vaak met dit soort projecten zorgt een Arduino voor de aansturing van de stepperdrivers. Om de pen of stift te bedienen, is een servomotor nodig, die bij sommige ontwerpen de complete robot van de wand drukt en bij andere ontwerpen enkel de stift omhoog of omlaag beweegt. Als je kiest voor een ontwerp dat afbeeldingen op een vaste ondergrond kan schrijven danwel tekenen, kun je kiezen voor een interpreter die met g-code overweg kan. Je bewegingen zijn dan echter niet variabel en je kunt daarom alleen op een vel papier of whiteboard van vaste afmetingen plotten.
/i/2003508872.png?f=imagenormal)
/i/2003508874.png?f=imagenormal)
Ons ontwerp maakt geen gebruik van g-code, maar verwerkt onboard de vectorgebaseerde afbeeldingen die je op een sd-kaartje zet. Het voordeel van deze methode is dat je dezelfde svg's op diverse afmetingen kunt plotten. Je bent dus geheel vrij in de keus van je achtergrond, waar je met op g-code gebaseerde plotters altijd eerst g-code moet genereren op de gewenste afmetingen. Daar is niets mis mee en zoals gezegd, als je altijd op hetzelfde whiteboard wil tekenen, is dat de gemakkelijkste oplossing. De interpretatie van vectorafbeeldingen naar opdrachten voor de steppermotoren is namelijk niet altijd even storingsvrij. Bovendien is de rekenkracht beperkt en kun je slecht curves maken. Die moet je opdelen in kleine stukjes rechte lijn.
Om een afbeelding te laten plotten, moet je deze als vereenvoudigde vectorgraphic op een sd-kaartje zetten. Vervolgens kun je met je zelfgeprogrammeerde afstandsbediening je bestand kiezen en bepalen op welke afmetingen je wil plotten. Na kalibratie van je muurplotter kun je namelijk kiezen voor een afbeelding op dertig procent van je gekalibreerde afmetingen of negentig procent daarvan. Standaard plot je op zestig procent van de beschikbare oppervlakte. Je kunt pauzeren en prints hervatten, dus als je met verschillende kleuren stiften wil experimenteren, of simpelweg geen tijd meer hebt of een lege batterij moet vervangen, dan is dat geen probleem.
De onderdelen
Zoals we al eerder aangaven, zijn er veel manieren om zo'n muurplotter te bouwen. Om het behapbaar, eenvoudig en goedkoop te houden, hebben we voor de zogenaamde Stringent Wall Plotter gekozen. Naast de hierboven beschreven voor- en nadelen, heeft deze plotter een, in marketingtermen, vrij unique selling point: zijn prijs. Je kunt het apparaat namelijk voor pakweg tien of vijftien euro bouwen. Haal je je componenten in Nederland of België, dan kan de prijs verdubbelen, maar nog steeds zul je niet aan de geeuwhonger hoeven om het te bouwen.
De benodigde hardware op basis van een Arduino Uno
We hebben namelijk maar vijf of zeven onderdelen nodig en je kunt die bill of materials nog verkleinen als je creatief bent. We hebben een Arduino Uno nodig, die als brein van de operatie dienstdoet, een micro-sd-kaartlezer om je kaartjes met svg-bestanden op te zetten, een infraroodontvanger en een willekeurige, oude afstandsbediening, een kleine hobbyservo en twee steppermotoren met bijbehorende driver. Nu zijn die laatste twee benodigdheden vaak prijzig, relatief groot en power hungry, maar we maken gebruik van de allergoedkoopste, simpelste steppers die er zijn: de 28BYJ-48. Dat zijn steppertjes van ongeveer twee euro die over het algemeen compleet met driver geleverd worden. Die driver is een simpel pcb met aansluitingen voor de aansturing, voeding en steppers, en vier ledjes die leuk zijn om naar te kijken, maar verder overbodig. De daadwerkelijke stepperdriver is een dubbele h-brug, ofwel een ic'tje met een paar Darlington-transistors erin.
De servo gebruiken we om de stift van het papier of whiteboard te tillen en daarvoor gebruiken we alweer een extreem goedkoop SG90-servootje. Dat is een servo van negen gram, vandaar de naam, die niet veel meer dan een euro mag kosten. De tandwieltjes zijn van plastic en het miniding heeft een torsiekracht van 1,5kg/cm. Dat lijkt veel, maar met een arm van drie centimeter blijft daar maar vijfhonderd gram van over. De grotere vraag is of de plastic tandwieltjes de krachten aankunnen. Daarom kun je ook kiezen voor de ‘veel duurdere’ SG90S, bijna dezelfde servo, maar met metalen tandwieltjes en meestal iets meer torsie. Je betaalt dan wel al gauw het dubbele, tot misschien wel drie euro!
Boodschappenlijst wall plotter |
Alternatief webgestuurde wall plotter |
1x Arduino Uno 2x 28BYJ-48 stepper met ULN2003-driver 1x Arduino micro-sd-kaartlezer spi 1x SG90-servo (of MG90S) 1x 4838 ir-ontvanger (of soortgelijk) 1x oude ir-afstandsbediening 1x voeding, bijv. 9V-batterij met clips 1x voedingsregelaar 5V, bv AMS1117 Diversen als touw, schroefjes, stift etc. 3d-geprinte body |
1x ESP8266, bv LoLin V3-board 2x 28BYJ-48 stepper met ULN2003-driver 1x SG90-servo (of MG90S) 1x voeding, bijv. 9V-batterij met clips 1x voedingsregelaar 5V, bijv. AMS1117 Diversen als touw, schroefjes, stift etc. 3d-geprinte body |
Het kaartlezertje dat we gebruiken, is eveneens extreem goedkoop en supersimpel. Het betreft een break-out-pcb met micro-sd-kaartlezertje dat via spi wordt aangesloten. Spi is een communicatieprotocol dat staat voor serial peripheral interface en het is naast i2c het meestgebruikte protocol om apparatuur aan Arduino's en verwante microcontrollers te knopen. Naast de voeding heb je maar vier lijntjes nodig: een kloksignaal, een selectiesignaal om het aangesloten apparaat te selecteren en twee communicatielijnen: een voor elke richting.
:strip_exif()/i/2003508876.jpeg?f=imagenormal)
Ten slotte is een infraroodontvanger nodig om signalen van je afstandsbediening om te zetten in signalen die de Arduino vertellen welk bestand moet worden geprint, of om de plotter handmatig te bedienen. De meestgebruikte ir-ontvanger hiervoor is de tsop4838, een klein ontvangertje met drie pootjes. Het heeft drie pootjes omdat het niet alleen een ir-led is, maar ook de benodigde logica om ruis te filteren en signalen te versterken, is ingebouwd. Als je geen ir-ontvanger hebt of er geen wil kopen, dan is er goede kans dat je een ir-ontvanger van een willekeurig printplaatje kunt slopen en gebruiken. Als er drie pootjes aan zitten, is ie waarschijnlijk te gebruiken. Als er markeringen opstaan, is het wel zo handig om de datasheet op te zoeken. Bij de ene is het middelste pootje namelijk aarde en zijn de buitenste de voeding en het signaal, maar bij een andere kan de middelste voeding zijn en de buitenste twee aarde en signaal. Als je op 3,3V begint met je Arduino en de ir-testsketch, blaas je waarschijnlijk niets op, maar weten is beter dan gokken.
Verder zul je natuurlijk wat losse dingen als een voeding, bijvoorbeeld een 9V-batterij met bijbehorend stekkertje, moeten hebben, wat touw en wat dupontkabeltjes om alles aan elkaar te knopen, of met een experimenteerprintplaat aan de slag moeten gaan.
De bouw
Dit project leent zich uitstekend voor experimenteren en als je nooit met Arduino's hebt gespeeld of sommige onderdelen niet kent, kun je ze allemaal afzonderlijk proberen. Voor het sd-kaartlezertje is namelijk een voorbeeldsketch beschikbaar, net als voor de steppers die je laten testen of alles goed werkt. Een verplichte test en installatie van de voorbeeldsketch zijn er voor de ir-ontvanger. Je moet namelijk zelf een codetabel maken van de signalen die de door jou uit een la opgediepte, vergeten afstandsbediening afgeeft. Voor onze build hebben we een rgb-controller voor een ledstrip gebruikt, maar een oude tv-afstandsbediening of die van een al lang weggegooide dvd-speler kan ook; het is maar net wat je hebt liggen. Desnoods kun je een afstandsbediening pakken die je nog gebruikt. Er gebeurt niets geks mee en zolang hij maar met infraroodledjes werkt, is het goed.
Tip
Als je niet zeker weet of een oude afstandsbediening nog werkt of met infraroodledjes is uitgerust, kun je dat eenvoudig testen met je smartphone. Open de camera-app van je telefoon en richt de afstandsbediening op de lens. Op je scherm zul je de ir-leds zien oplichten als de afstandsbediening werkt.
Om een codetabel voor je afstandsbediening te maken, gebruiken we de ir-voorbeeldsketch in de Arduino-IDE, IRRecvDump of IRRecvDumpV2, die beschikbaar is na toevoeging van de IRRemote-library. Via de seriële monitor kun je meekijken met je Arduino terwijl je een voor een de toetsen van je afstandsbediening indrukt en de remote richt op de ir-ontvanger die op je Arduino is aangesloten. Zo krijg je een serie hexcodes die corresponderen met alle toetsen. Die codes kun je later in de plottersketch invullen, zodat je de afstandsbediening kunt gebruiken om de plotter te bedienen. Zelfs als je nooit zo'n plotter gaat bouwen, is dit een nuttige toevoeging aan je Arduino-arsenaal. Je kunt nu immers willekeurig welke afstandsbediening inzetten om jouw projecten op afstand te besturen, al is het maar om lampen zelf te schakelen of met een 230V-relais een apparaat zonder uitknop helemaal uit te kunnen zetten.
FF28D7 left in |
FFA857 right in |
FF6897 left cal |
FFE817 small |
FF08F7 left out |
FF8877 right out |
FF48B7 right cal |
FFC837 big |
FF30CF 1 |
FFB04F 2 |
FF708F 3 |
FFF00F cont drive |
FF10EF 4 |
FF906F 5 |
FF50AF 6 |
FFD02F no cont dri |
FF20DF 7 |
FFA05F 8 |
FF609F 9 |
FFE01F |
Voorbeeld: tabel met ir-codes
Als alle afzonderlijke onderdelen goed werken, kun je de plotter gaan breadboarden en controleren of alles netjes samenwerkt. Doen de steppers wat ze moeten doen als je op de knoppen op je afstandsbediening drukt? Zie je output in de seriële monitor als je een bestand op je sd-kaart selecteert en je plotter laat printen? Dan is het tijd voor de laatste stap: het monteren van alle onderdelen op je 3d-geprinte ondergrond en beginnen met het ophangen en afstellen.
Opmerkingen bij de bouw en het gebruik
Voor de bouw hebben we eerst alle componenten afzonderlijk getest en tijdens het testen bleken de 28BYJ-48-drivers niet helemaal bestand tegen de gebruikte spanning. De door ons gebruikte variant is weliswaar een 5V-versie, maar volgens 'het internet' kun je die ook gewoon met 9V-batterijen gebruiken, handig voor wat extra kracht ook. Wellicht is het te wijten aan het feit dat we een oplaadbare batterij gebruiken met een spanning van ongeveer 10,5V. Hoe het ook zij, we hebben vervangende 28BYJ-48-steppers gekocht en een voedingsregulator tussen de batterij en de overige componenten ingebouwd. Dat is een simpel spanningsregelaartje op basis van de AMS1117, dat keurig 5V afgeeft. Om het geheel netjes aan te sluiten op de Arduino, hebben we van experimenteerboard een soort shield voor de Arduino gemaakt met daarop de spanningsregulator, de uitgangen naar de steppercontrollers, de ir-sensor en de kaartlezer.
Enkele stappen van de assemblage
Er zijn twee alternatieve manieren om deze plotter te bouwen waarbij je het apparaat niet met een ir-afstandsbediening, maar via een webserver kunt bedienen. Het alternatief dat vrijwel gelijk is aan deze .build, is het gebruik van een esp8266-microcontroller. Dat is in doe-het-zelfkringen een bekend bordje dat over een esp12-wifichip, en een sloot geheugen en interfaces beschikt. Bovendien is het gewoon programmeerbaar via de Arduino-ide, en sketches die op een Arduino-microcontroller draaien, werken ook op esp8266’s. Dat gezegd hebbende wordt je project met een eps8266 een stuk eenvoudiger, want je hebt geen infraroodcontroller meer nodig en ook het kaartlezertje kun je achterwege laten. Het enige wat je nog aan hoeft te sluiten, zijn je steppercontrollers en de servo om de pen op te tillen. Via een op de esp8266 draaiende webserver kun je vervolgens alles bedienen en je ontwerpen uploaden.
Het tweede alternatief betreft het hergebruik van de onderdelen uit de vorige .build. Als je de airhockeytafel gebouwd hebt en uitgespeeld bent, kun je de onderdelen hergebruiken om een schrijvende robot te bouwen. Die laat je dan niet op een whiteboard tegen de muur schrijven, maar op een plaat acrylaat op je bureau. Daarmee is het project wellicht iets handzamer en overzichtelijker. Je hebt naast de onderdelen die je al hebt, nog wel een paar metalen staven nodig om de armen van de juiste lengte te maken, maar meer dan een paar euro hoeft het hele project je dan niet te kosten. Een uitgebreide handleiding voor het recyclen van je airhockeyproject kun je vinden op de website van JJRobots.
Toegift: een schrijvende klok
Nu kunnen we begrijpen dat niet iedereen heel veel zin heeft om een plotter voor aan de muur te maken, want afgezien van praktische bezwaren is het vooral leuk om vergaderzalen met whiteboards op te leuken. Het leerproces om met de diverse onderdelen kennis te maken, en te begrijpen hoe ze werken en hoe je ze kunt gebruiken, is daarentegen wel altijd een nuttige tijdsbesteding. Wil je nu toch een 'robotje' maken dat iets kan schrijven, dan hebben we nog een toegift voor je.
We vonden op een struintocht op internet de zogenaamde plotclock. Daarmee sla je twee vliegen in één klap: je maakt een klokje én een apparaat dat kan schrijven. Bovendien is de plotclock niet alleen extreem goedkoop om te fabriceren, je kunt ook nog eens zelf kiezen waarmee je het skelet bouwt. Uiteraard kun je weer van een 3d-printer gebruikmaken, maar dezelfde onderdelen zijn ook te lasersnijden en veel gemakkelijker: te figuurzagen. Daarbij neemt het hele ding ook vrijwel geen ruimte in beslag, want de plotclock is amper tien bij tien centimeter groot.
:strip_exif()/i/2003507686.jpeg?f=imagenormal)
De hier geprinte onderdelen kun je ook zelf uitzagen van hout of acrylaat, of (laten) lasersnijden
Je hebt dezelfde servo's nodig als hiervoor beschreven voor de wall plotter, maar dit keer zijn het er drie. Ook de Arduino Uno kun je hergebruiken en je hebt weer een stift, of een pen of potlood nodig. Als je een stift neemt, kun je het best voor uitwisbare inkt kiezen, dat maakt het een stuk leuker. Je moet ook een kleine wisser maken, die met een stukje vilt eronder de inkt kan wissen.
De zeer bescheiden bill of materials voor een plotclock
Tip
Mocht je een errormelding krijgen tijdens het compileren van de Arduino-sketch die lijkt op “setTime was not declared in this scope”, dan kun je dat verhelpen door een extra library aan te roepen met “#include <TimeLib.h>”. Je code compileert dan hoogstwaarschijnlijk wél.
Wat doet deze plotclock namelijk? Twee servo's bedienen armen waaraan een stifthouder zit en de derde servo tilt de stift van de ondergrond. De twee servo's zorgen voor schrijfbewegingen van de pen en de derde verbreekt het contact met de ondergrond op de juiste momenten. De klok schrijft simpelweg de huidige tijd op een papieren of plastic ondergrond en vervolgens wist hij deze direct. Een seconde later begint het proces opnieuw.
Na het bouwen moet je de klok een beetje kalibreren, wat vooral betekent dat je de servoarmen op de juiste plek moet krijgen om netjes op de ondergrond te schrijven. De tijd stel je in via de Arduino-sketch en als je de klok uitzet, klopt die dus niet meer. Daar valt een mouw aan te passen, want als je gecharmeerd bent van dit aandoenlijke klokje, kun je vrij eenvoudig een realtimeclockmodule toevoegen. Een uitgebreide handleiding vind je bijvoorbeeld op Instructables. Dat is een kleine module met eigen cr2032-batterijtje die de tijd vasthoudt en laat doortellen. In principe is dat vergelijkbaar met de module op een moederbord die de biostijd actueel houdt en ook door een knoopcel wordt gevoed. Dan zijn er nog een paar aanpassingen in de code nodig, eigenlijk alleen een kwestie van een voorgebakken optie om een rtc-module uit te lezen en te ontcommenten.
Boodschappenlijst Plotclock
1x Arduino Uno
3x SG90-servo (of MG90S)
Body van hout, plastic of 3d-print
Eventueel DS1307 rtc-module
Eventueel DHT22-temperatuursensor
Diversen als schroefjes en stift etc.
Het mooiste resultaat krijg je als je in ieder geval het schrijfoppervlak van de klok van acrylaat maakt, zodat het zo glad mogelijk is. Zo kun je de sporen van de dry-erase-marker goed wissen. Dat lukt vooral goed als je dat onderdeel laat lasersnijden of zelf uitzaagt van een plaatje acrylaat of perspex. Als je een 3d-printer hebt en op glas print, kun je natuurlijk ook mooie, gladde onderdelen krijgen. Zorg dan wel voor de juiste oriëntatie van je schrijfplaat. Een andere manier om een mooie gladde ondergrond te verkrijgen, is met plakband. Met breed tape voor dozen kun je ook in één keer een gemakkelijk uitwisbaar schrijfoppervlak krijgen.
Er zijn zelfs varianten van deze plotclock waarmee je een rol papier, zoals een kassarol, laat meelopen en je nooit iets hoeft te wissen. In plaats daarvan scrollt het papier na elke keer de tijd schrijven een stukje verder. Aan de ene kant versimpelt dat het bouwen, want je hoeft niet meer te wissen, aan de andere kant wordt het juist complexer doordat je het papier moet laten bewegen. Een andere variant is er een met een temperatuursensor aan je Arduino geknoopt. Dan kun je in plaats van de tijd de temperatuur laten opschrijven. Daarvoor heb je een goedkoop thermometertje nodig, de DHT22 is een populaire sensor die naast de temperatuur ook de luchtvochtigheid meet, mocht je die ook willen bijhouden.
Deze twee projecten blinken uit door hun lage prijs en eenvoud. Bovendien kunnen ze uitstekend dienen als leerplatform voor de gebruikte componenten. Omdat ze zo goedkoop zijn, is het ook niet erg als je in het bijzonder de muurplotter niet vaak gebruikt. We raden je in ieder geval aan de plotclock te bouwen, want na wat gepruts met de pen en wisser is dat een fantastisch, koddig robotje.