Zauberling v0.2

Na het ontwerpen en printen van de 3D behuizing en het ontwikkelen van een universele interface- en voedingsprint, was het tijd om alle nieuwe inzichten, wensen en ideeën sinds het prototype van deze module te gaan verwerken.

Op deze pagina meer over de ontwikkeling van de Zauberling versie 0.2. Deze heeft inmiddels enkele extra drukknoppen, vier ingangen en met verschillende vermogens-niveau's uitgevoerde uitgangen. Hij is omschakelbaar tussen positieve of negatieve logica en is voor optimale terugkoppeling naar de gebruiker uitgevoerd met een klein beeldscherm.

Video : toestemming voor cookies nodig
Instellingen
Zauberling without lid

De volgende stap...

Door zijn veelzijdigheid en configureerbaarheid is de Zauberling een z.g. 'drop-in replacement' voor elke traditionele Silberling. Door zijn programmeerbaarheid, instellingsmogelijkheden en vermogensuitgangen gaat hij zelfs nog een stuk verder. En doordat de module vrij programmeerbaar is, maakt hij desgewenst ook de functionaliteit van de kleine configureerbare elektronica modules zoals de E-Tec Module (fischertechnik nr. 108227),  Electronics Module (fischertechnik nr. 152063), de Robotics MiniBots Module (fischertechnik nr. 156499) beschikbaar en combineerbaar met de Silberlingen.

Het idee doorontwikkeld

Hierdoor kwam vanzelfsprekend al snel de wens op meerdere exemplaren van deze plooibare module te maken. Het bouwen van het prototype van de Zauberling was echter behoorlijk arbeidsintensief en er dienden zich inmiddels al weer nieuwe inzichten en ideeën aan. Om de beperkte binnenruimte in de behuizing (slechts 40x70x25 mm) optimaal te benutten besloot ik tot het maken van een universele voedingsprint die ook meteen de programmeerinterface en I2C bus kan verzorgen. De hoofdprint van de Zauberling  (of al het andere dat ik daarna nog zou kunnen bedenken) zou dan als een 'sandwich' hierop kunnen worden gedrukt.

Het was hoog tijd voor een lijstje met de wensen en ideeën voor de volgende generatie Zauberlingen:

  • De 'serieproductie' zou liefst een stuk minder bewerkelijk worden door kant en klare printplaten te laten produceren.
  • Waar mogelijk zouden SMD (Surface Mounted Device) componenten op de toekomstige printplaatjes ruimte kunnen besparen. Om alles in de beperkte ruimte van een Silberling-behuizing te realiseren zou immers al voldoende uitdaging zijn.
  • Vier ingangen (in plaats van drie) is beter in overeenstemming met het aantal uitgangen. Hiermee wordt bovendien het dubbel uitvoeren van logische functies (zoals twee AND-poorten) mogelijk.
  • Aansluitbussen voor de traditionele fischertechnik stekkers nemen op het front én op de onderliggende printplaat onevenredig veel plaats in. Een enorm voordeel van een ruimtebesparende oplossing hiervoor zou zijn dat de verscheidene voedingsspanningen, maar ook signaalvarianten van de uitgangen op het front beschikbaar gemaakt zouden kunnen worden.
  • Het idee dat op de ingangen automatisch positieve, of negatieve logica kan worden gebruikt (zie software prototype) was een prikkelend idee, maar blijkt beperkend voor sensoren waarvan de ingangsstatus bij start van de controller niet altijd vast bepaald is. Daarom zou een globale instelling voor positieve, of negatieve logica van de module praktisch zijn. Op deze logica-keuze zouden dan óok meteen de juiste uitgangsniveaus voor gebruik van de Zauberling in combinatie met de traditionele Silberlingen (met negatieve logica) kunnen worden afgestemd.
  • Bovenstaand punt brengt de wens met zich mee, naast de analoge motoruitgangen die tot het spanningsniveau van de externe voedingsbron kunnen leveren, uit oogpunt van compatibiliteit ook zuiver digitale uitgangen op de module te hebben die gelimiteerd zijn tot 'Silberlingen niveau' (9 volt).
  • Idealiter zou de I2C bus naar buiten moeten worden gevoerd zodat er communicatie tussen Zauberlingen of andere modules mogelijk wordt. Dit vergemakkelijkt het aansluiten van diverse externe sensoren of controllers (voor bijvoorbeeld servo's of stappenmotoren).
  • Door bovenstaand punt heeft het beschikbaar maken van servo aansluitingen, zoals op het prototype van de Zauberling, minder prioriteit.
  • Een RESET-drukknop op het front van de Zauberling zou het mogelijk maken, bijvoorbeeld na het maken van de eenmalige functionaliteit- of logica-instellingen de processor opnieuw op te starten zonder noodzakelijke onderbrekingen van de voedingsspanning(en).
  • Mocht het mogelijk zijn qua ingangen, zou een universele 'Trigger'-drukknop op het front prettig zijn. Hiermee wordt het mogelijk, afhankelijk van de functie, zonder noodzakelijke aansluitingen op de ingangen gedrag van de module te testen. Bij een teller zou deze knop bijvoorbeeld een manuele reset kunnen zijn, bij een motorsturing een hoofdschakelaar, enz.
  • Omdat de Zauberling door de DIP-switch instellingen zoveel functionele gedaantes aan kan nemen, zou een klein display op het front de kers op de taart zijn. Op het display zou de huidige functie van de Zauberling kunnen worden weergegeven. Ook zouden er teller- of analoge waarden op kunnen worden getoond. Omdat een display ook meteen de feedback over de in- en uitgangen zou kunnen weergegeven, scheelt dat nogal wat (controle) LED's op het front (en de onderliggende printplaat).

Een display op de Zauberling

Een Zauberling kan zich als een functionele kameleon plooien naar zijn onderhavige taak. Maar bij gebruik van meerdere van dergelijke modules in een regeling, zou men het overzicht al snel kwijt kunnen raken. In principe doet zich ditzelfde euvel voor bij de alle modules die met DIP-switches configureerbaar zijn (zoals fischertechnik's eigen E-tec-, of Elektronics- Module) en verder geen feedback geven over hun ingangen, uitgangen, gedag of functionaliteit.

Allerlei LED's op het front van de Zauberling nemen veel plaats in, en lossen het probleem natuurlijk slechts gedeeltelijk op; bij het foutzoeken geven ze nog geen uitsluitsel over de ingestelde functionaliteit van de betreffende module. Een klein display zou daarom een mooie uitbreiding zijn. Naast duidelijke feedback over de in- en uitgangen, zou hierop ook allerlei nuttige andere (tekstuele!) informatie kunnen worden getoond.

Toen ik eenmaal zo ver was dat ik de bussen voor aansluiten van de traditionele fischertechnik stekkers van het front geweerd had, kwam daarop met het nodige schuiven en puzzelen wel ruimte voor een klein display. Aangezien de poorten A4 (SDA) en A5 (SCL) toch al voor het beschikbaar maken van de I2C bus waren gereserveerd, lag de keuze voor een I2C display voor de hand. Het display SSD1306 biedt met 128X64 OLED pixels op ~2,5 cm (0,96 inch) beelddiagonaal al voldoende mogelijkheden voor feedback.

Display on Zauberling

Voor- en nadelen van een display

Bij het experimenteren en testen van de nieuwe Zauberling op een experimenteerboard, kwamen een paar beperkingen aan het licht:

  • Het schrijven naar een display is relatief traag en beïnvloedt de snelheid van de hoofd-loop van de Arduino, waarin de ingangen worden gescand. In de praktijk is de 16 MHz van de Arduino Pro Mini voldoende om hier weinig van te merken, maar men dient zich te realiseren dat snelle impulsen op de ingangen hierdoor gemist zouden kunnen worden.
  • Het adres op de I2C bus van het display is niet (of, afhankelijk van het type, slechts beperkt) instelbaar. Dit beperkt bij het via I2C koppelen van meerdere Zauberlingen het gelijktijdig (en uniek) gebruik van het display op elke module.
  • De meeste software bibliotheken voor de SSD1306, zoals de Adafruit library, hebben voor het aansturen van het display de helft van de beschikbare 2 Kb SRAM geheugen van de Arduino Pro Mini nodig! Hoewel ik met 1KB overblijvende programmeerruimte nog geen problemen had alle basisfunctionaliteiten in de Zauberling te programmeren, geeft dit niet veel ruimte voor het gebruik van extra libraries. Dit beperkt wellicht het gebruik van specifieke I2C-sensoren die een relatief grote software bibliotheek vereisen (zoals de VL53LXX Time-of-Flight sensor die ik probeerde).

Het enorme voordeel van een uitlezing op de Zauberling woog tot nu toe in de praktijk nog gemakkelijk op tegen deze belemmeringen. Bovendien is het altijd mogelijk bij specifieke toepassingen het gebruik van het display op de betreffende Zauberling te laten vervallen. En wellicht wordt het in de toekomst nuttig te onderzoeken hoe het display, misschien beperkter en minder grafisch, kan worden gebruikt zonder de relatief grote claim op SRAM van de processor.

'Trigger'-drukknop via een truukje

Bij het ontwerp moest het gebruik van de analoge ingangen van de Arduino Pro Mini op een goudschaaltje worden gewogen. Het idee om in-/uitgangen te besparen door de DIP-switch voor de configuratie met één analoge ingang uit te lezen (zie voor concept hier of hier), liet ik echter toch varen. Omdat ik de I2C bus (A4/A5) graag naar buiten wilde voeren, bleven er namelijk slechts zes analoge ingangen over voor de twee potentiometer-settings en de vier (analoge) ingangen.

Hiermee waren alle in- en uitgangen gebruikt, terwijl de felbegeerde 'universele Trigger'-drukknop op het front van de Zauberling nog niet eens gerealiseerd was. Met een beetje puzzelen is het echter gelukkig toch gelukt deze functioneel te maken. De DIP-switch voor de instelling van de functionaliteit wordt immers alleen tijdens de initialisatiefase van de Zauberling eenmalig uitgelezen. Met de 'Trigger'-drukknop wordt via een 'logische OR' (met vier diodes) alle schakelaars van de DIP-switch tegelijk (setting 15) 'actief' gedrukt. Hierdoor kan deze 'Trigger'-drukknop keurig worden gedetecteerd. De enige beperking is natuurlijk, dat de 'Trigger'-drukknop niet kan worden gebruik bij initiële functiekeuze 15 van de DIP-switch. Omdat een dergelijke extra drukknop niet bij elke functie noodzakelijk is, valt hier natuurlijk prima mee te leven.

Het aangepaste schema

De servo-aansluitingen zijn verwijderd. De vier analoge ingangen, zijn met een DIP-switch omschakelbaar tussen weerstands- of voltage-meting. De functiekeuze DIP-switch wordt tijdens initalisatie van de Zauberling gelezen voor de functie-instelling, en kan tijdens het programmaverloop daarna met een drukknop worden overbrugd met de 'Trigger'-knop op het front. De keuze voor positieve of negatieve logica kan met een schuifschakelaar worden gemaakt.

Zauberling V0.2 Schematics
2x NAND Zauberling

Ook is er nu op het front een RESET drukknop te vinden. Er zijn op de nieuwe Zauberling nu twee potentiometers beschikbaar voor het instellen van drempelwaarden of andere analoge configuratie. De digitale uitgangen die de motor-uitgangen aansturen, zijn gebufferd op 9 volt Silberlingen-niveau beschikbaar. Deze signalen zijn wel gekoppeld en niet separaat aanstuurbaar, maar dit kan bij sommige experimenten zelfs een voordeel zijn.

De huidige functie van de Zauberling en andere configuratie (zoals de keuze voor positieve of negatieve logica) alsmede de status van de ingangen en uitgangen zijn op het display zichtbaar. Tevens kan hier per functie specifieke informatie (zoals een teller of de aflopende tijd van een mono-flop) worden getoond.

Omdat de keuze voor aansluiten op het front inmiddels op z.g. 'female header connectors' was gevallen, was het gemakkelijk de verschillende voedingsspanningen hier ook beschikbaar te maken. Handig om bijvoorbeeld actieve sensoren eenvoudig (desgewenst met één stekker, zoals bij een servo) van een voedingsspanning te voorzien.

De printplaat en samenbouw

Het uitgangspunt bij het ontwerpen van de hoofdprint van de Zauberling, was dat de connectoren die aansluiten op de signaal- en voedings-rails van de voedings- en interfaceprint op de juiste plek zitten. Maar na het maken van een bruikbare opstelling van de componenten die de layout van het front bepalen, bleef er weinig ruimte over om de andere noodzakelijke componenten de (kleine) dubbelzijdige print te plaatsen. Het werd al snel duidelijk dat er waar mogelijk liefst met SMD componenten moest worden gewerkt, zodat de twee kanten van de print optimaal zouden kunnen worden benut.

Zowel de ATmega328 microprocessor als de TB6612FNG motor-driver zijn vanzelfsprekend in SMT (Surface Mount Technology) techniek beschikbaar, maar voor beide componenten koos ik uiteindelijk toch voor een compleet boardje. Deze waren gemakkelijker verkrijgbaar en vreemd genoeg nog goedkoper. En omdat het in dit geval toch om een kleine serie semi-prototypen ging, leek me het voordeel van nog meer pcb-lagen voor de kopersporen opwegen tegen de 'piggy-back' montage van deze kleine boardjes op een serie ongeboorde SMT-kopereilandjes.

Door header strips op de SMT-eilandjes te solderen en deze daarna af te knippen, valt in de praktijk het monteren erg mee. Op de foto's is te zien hoe de componenten aan beide zijden van de print zijn gemonteerd. De op deze manier uit meerdere lagen opgebouwde hoofdprint, wordt op zijn beurt weer samengevoegd met de voedings- en interfaceprint die onderin de behuizing is gemonteerd. Daardoor gebruikt zo onstane 'sandwich', de beperkte ruimte in de behuizing ook in de hoogte optimaal.

 Zauberling V0.2 copper topZauberling V0.2 pcbZauberling V0.2 sandwichZauberling V0.2 build-in

Zauberling output indicators

Onderaan het scherm van de Zauberling kunnen, afhankelijk van de gekozen functie, de vier digitale óf de twee motoruitgangen gemonitord worden. Bij een motorfunctie worden strips getoond, waarin de positie en lengte van de balken de uitgangsspanning en draairichting aangeven.

Voor sommige toepassingen kan het nuttig zijn beide uitgangstypen te gebruiken. Bijvoorbeeld om een digitaal signaal beschikbaar te hebben dat de draairichting van een motor weergeeft. Om de uitgangssignalen snel te kunnen overzien, bieden een paar 'uitgangs-indicators' met LEDs (met voorschakelweerstand), die direct op de uitgangen kunnen worden geprikt, dan uitkomst. Het ene geeft een goede blik op de digitale uitgangssignalen, de andere bevat twee bi-color LEDs waardoor eenvoudig de draaisnelheid en -richting van een motoruitgang kan worden afgelezen.

Zauberling piggy backZauberling V0.2 sandwich side-viewZauberling Look Inside

De eerste experimenten

De basis Sketch voor de Zauberling kunnen worden gedownload van GitHub. De verschillende functies in de Zauberling kunnen met de 'Function' DIP-switch worden ingesteld. Na het maken van wijzigingen in de configuratie, is een korte druk op de RESET knop op het front voldoende om de volgende functie te kunnen gebruiken. Standaard zijn twaalf nuttige functies en één motor-demo sequentie oproepbaar.

Met Flip-Flops die als 3-bit binaire teller werken en twee Zauberlingen die dit binaire getal weer decoderen, licht bij elke druk van de knop het volgende LEDje in de reeks op. Een leuke 'proof-of-concept' voor enkele basisfuncties, maar zuiver digitaal nog niet echt iets dat veel toevoegt aan de traditionele Silberlingen. Sterker nog, deze zullen hem hierbij qua snelheid met hun razendsnelle parallel opererende discrete elektronica gemakkelijk naar de kroon steken.

Maar de Zauberling komt vanzelfsprekend het meest tot zijn recht als PLC (Programmable Logic Controller) voor procesautomatisering of voor het toevoegen van specifieke functies die met de Silberlingen simpelweg nooit gemaakt zullen kunnen worden. Zijn kracht ligt hierbij in zijn programmeerbaarheid en samenwerkingsmogelijkheden met de traditionele Silberlingen.

3x FF - 2x decoder - Zauberling
I2C Nunchuk Zauberling

I2C bus

De toevoeging van de I2C bus maakt het mogelijk de Zauberling te gebruiken met allerhande externe sensoren. Als voorverkenning op dit gebied probeerde ik een paar toepassingen alvast uit. Het bleek vrij eenvoudig om twee motoren te besturen met een z.g. Nunchuk (hand-controller). Zowel de Nunchuk als de motoren kunnen direct op de Zauberling worden aangesloten. De status van de drukknoppen, of de versnellings/positie informatie van de Nunchuk zou via de I2C bus kunnen worden gecommuniceerd voor verwerking door andere Zauberlingen of specifieke I2C-modules. Zo experimenteerde ik al even met een I/O expander (PCF8575 of MCP23017) die in de toekomst een aparte Silberling-behuizing zou kunnen worden ondergebracht.

Een tweede I2C sensor-experiment deed ik met de kleursensor TCS34725. De uitgangen 1 t/m 4 worden respectievelijk geactiveerd bij het detecteren van een rode, groene, blauwe of gele dominosteen. Het maken van een automatische kleur-sorteerder wordt hierdoor mogelijk.

De I2C bus maakt extra in- en uitgangen, communicatie, het aansluiten van sensoren of het aansturen van servo's of stappenmotoren mogelijk. Veelzijdigheid die prikkelt om ook eens wat oude bouwvoorbeelden uit de Hobby4-boekenreeks in moderne techniek na te gaan bouwen. Voldoende materiaal voor experimenten met de Zauberling voor de toekomst, dus... wordt vervolgd! 😉

I2C Color detect Zauberling