Netspanning sensor

Op Hackaday zag ik vandaag in het kader van de “2025 component abuse challenge” een geweldige thermische flipflop.

De challenge deed mij denken aan een netspanning sensor die ik in 2017 maakte om de spanning op de motoren van een groot ventilatie systeem in te lezen in een microcontroller. Deze spanning werd ingesteld met een autotransformator en een schakelaar.

De “schakeling” bestaat uit twee weerstanden van 56 kΩ, waarvan er ´één gevoed wordt met de te meten spanning. De andere is de referentie en niet aangesloten. Beiden zijn met lijm thermisch gekoppeld met ds18B20 1-wire temperatuur sensoren. Als de spanning toeneemt, neemt ook het temperatuurverschil tussen de weerstanden toe. Dit is evenredig met het aan de weerstand toegevoerde vermogen, en daarmee met het kwadraat van de aangelegde spanning. Dit is een bekend principe dat ook toegepast wordt in RMS converters, HF-vermogens meters etc. Door beide sensoren van een weerstand te voorzien zijn de thermische tijdconstanten zo veel mogelijk gelijk.

Eigenschappen van dit knutsel zijn:

  • Robuust en traag. Ongevoelig voor interferentie op het net.
  • Direct een toegankelijke digitale OneWire interface.
  • Behoorlijke isolatie van het net. Of het aan formele eisen voldoet is wat anders..
  • True RMS, werkt ook goed met verminkte golfvormen.
  • Nauwkeurigheid na kalibratie een paar %, vanaf 50 V.
  • Opgenomen vermogen 1W bij 230V.

Merk op dat een goede thermische isolatie tussen de weerstanden voor de werking niet nodig is, zie ook de referentie temperatuur in de grafiek. De enige eis is een stabiele thermische weerstand tussen de beide weerstanden en naar de omgeving. Een dicht kastje is belangrijk.

Klok pulsgever

Het doel was een aantal dochter- of nevenuurwerken op de Oude Leidse Sterrewacht weer op tijd te laten lopen. Het klokkennet op de Sterrewacht is helaas verdwenen bij het opknappen van het gebouw, en de modernere pulsgever waar de buitenklok van Faverger boven de voordeur op liep was al enige jaren defect.

Voor hun behoud is het belangrijk dat klokken zo veel mogelijk lopen. Niet iedereen ziet de waarde van een rare oude klok die het niet doet.

Moser Swiss made 24h siderial slave clock with illumination.

Op de foto een van de Moser-Baer uurwerken met verlichting uit 1962. Deze hangt op de noordzuil van de Fotograaf en geeft sterrentijd aan. De sticker is om de wijzerplaat niet te beschadigen geplakt op Scotch Removable tape.

Uitdagingen in dit project zijn dat het gaat om uurwerken die werken op een seconde impuls, en die geen voorzieningen hebben om ze gelijk te zetten. Gelijkzetten kan dan enkel door (iets) sneller te lopen of door stilstaan en wachten. Het is ongewenst en bij de klok boven de voordeur praktisch ondoenlijk om de wijzers met de hand bij te stellen. Een extra uitdaging is dat bij een deel van de telescopen de lokale sterrentijd of siderische tijd noodzakelijk is. Anderen klokken op de Sterrewacht geven UTC aan. De klok boven de voordeur loopt om historische redenen op de lokale zomertijd, dat is UTC + 2 uur. Tot slot zijn de klokken in de donkere koepels voorzien van gloeilampjes in de rand, die natuurlijk ook moeten werken.

Slave clock impuls electronics.

De 3.0 elektronica van de pulsgever. De IC’s zijn een Atmega 328 en een LM358.

Deze pulsgever voorziet in alle genoemde punten. Hij houdt bij waar de wijzers van het uurwerk zijn, slaat de positie op als de netspanning wegvalt, en zorgt dat de klok bij terugkeer van de spanning vanzelf weer gelijk gaat lopen. Op de kast van de klok is een enkele drukknop om de lampjes te schakelen en het uurwerk een klein stukje bij te stellen. Uitlezen van de status en instellen van de wijzer-positie kan via een terminal, maar het laatste kan ook met de drukknop. Een indicatie-led toont de data en status van de DCF. Het geheel is compact en wordt op de DCF ontvanger en een ingekochte 24V netadapter na ingebouwd in of vlakbij de uurwerken.

Één van de 24-uur uurwerken van W. Moser-Baer bij het schoonmaken. De door ons gebruikte olie is Dr. Tillwich Clock 859. Omdat deze uurwerken met secondewijzer 60x zo hard draaien als die op een minuten-impuls is enig onderhoud noodzakelijk. De schakelaar pulst 1x per minuut en gebruiken wij niet. Dit zal een terugkoppeling naar de klokkencentrale geweest zijn.

Dit project is geen moederklok omdat het voor de juiste tijd geheel afhankelijk is van het DCF77 tijdsignaal. Er is geen andere mogelijkheid de interne klok gelijk te zetten, DCF77 is de feitelijke moederklok.

De hardware is gebaseerd op de Arduino Uno, maar dan met een 16 MHz kristal in plaats van de gebruikelijke resonator, en de voortreffelijke DCF77 bibliotheek van Blinkenlight. De laatste implementeert een filter, wat de ontvangst van DCF sterk verbetert als er flinke interferentie is. De H-brug voor het bipolair met 24V sturen van het uurwerk is opgebouwd rond een eenvoudige LM358 opamp. Voordeel van deze oplossing boven andere mogelijkheden is dat hij compact en kortsluitvast is. Er werd gekozen voor draadcomponenten omdat daar nog veel van in huis was. Met het oog op de betrouwbaarheid onder de “buiten” omstandigheden in de koepels is gekozen in de elektronica, buiten de netadapter, geen elco’s toe te passen.

Van dit project zijn de volgende bestanden beschikbaar:

Hoewel ik dit project in 2018 begonnen ben werken wij er inmiddels met meerdere WLS vrijwilligers aan. Het zal mogelijk nooit helemaal “af” zijn, maar de eerste klokken lopen naar tevredenheid.

In een terzijde verkoopt Het Uur complete pulsgevers voor nevenuurwerken. Die werken enkel op gewone tijd, kennen geen gelijk-zet functie en waren daarom niet bruikbaar voor onze toepassing. Hoewel ik er geen ervaring mee heb wil ik ze hier toch graag promoten omdat goed verkrijgbare pulsgevers kunnen voorkomen dat nevenuurwerken gesloopt worden om ze te voorzien van een goedkoop kwartsuurwerk. Dat soort barbaarse praktijken zijn verdrietig voor liefhebbers van deze interessante oude uurwerken. Hoe een klok loopt is onderdeel van zijn identiteit.

Burroughs BarGraph display

Burroughs Bargraph BG-12201-2

Op zoek naar iets anders in de schuur van mijn vader kwam ik deze displays tegen. Het zijn Burroughs BarGraph glow-transfer displays, type BG-12201-2. De displays zijn uit 1972 en geven twee neon bar graph uitlezingen met 201 streepjes. Een soort moderne bar-variant van een Nixie. Zij werden typisch toegepast voor L en R audio levels in allerlei professionele studio apparatuur.

Het was onbekend of ze nog werkten, dus besloot ik te proberen ze te testen.

Een eerste lastigheid was de connector, of het gebrek daar aan. Ik loste dit voor de test op door het display op een blokje hout te plakken, losse draadjes in de 0,6 mm brede contact-sleuf tussen glasplaat en keramiek te steken en het geheel met plakband te fixeren.

Burroughs Bargraph BG-12201-2

De displays bestaan uit een witte keramische plaat waarop de kathodes, hun verbindingen en een afdeklaag ge-zeefdrukt zijn, dan iets van 0,5 mm ruimte voor het neongas afgedekt met een glasplaat met daarop de anodes.

Op het internet is de nodige informatie te vinden over hoe de displays werken. Als eerste wordt een start kathode ontstoken, het eerste streepje, waarna de ontlading door middel van een drie fasen klok over de rest van de streepjes loopt. Dit spel herhaald zich tientallen malen per seconde, zodat het display niet knippert.

Burroughs noemt dit het glow-transfer principe. Omdat de anode spanning bij een actieve ontlading door de stroombegrenzingsweerstand daalt tot onder de ontsteek spanning kan enkel een naast de actieve kathode gelegen volgende kathode ontstoken worden. De driefasen klok zorgt dat dit steeds het streepje rechts naast het op dat moment brandende zal zijn. Feitelijk is de aansturing zo dus digitaal.

Op deze slimme manier is met relatief weinig aansluitingen en elektronica een lange bar met hoge resolutie te realiseren. Ook een logaritmische schaal is geen probleem, wat voor audio wenselijk is.

Als de gewenste indicatie bereikt is wordt de anodespanning van de betreffende bar voor de rest van de cyclus uitgeschakeld.

Burroughs Bargraph BG-12201-2 circuit.

Overgenomen uit Burroughs Bulletin BG101C, July 1976.

Om eenvoudig een snelle test te kunnen doen gebruikte ik een Arduino als besturing, en liet de anode sturing weg. Door de klok te stoppen en een reset te geven kan de bar ook afgebroken worden. De uitlezing is dan wel altijd voor beide kanalen gelijk, en de helderheid wordt een beetje afhankelijk van de lengte.

Ik tekende geen schema, maar de keep-alive anode weerstand is 1 MΩ, voor de twee gewone anodes is dat 22 kΩ (ze worden heet..) en de gebruikte transistoren zijn MPSA42’s van de Baco met een 10 kΩ basisweerstand. De voedingsspanning van het geheel is 250 V uit een Delta E300-0.1.

Burroughs bargrap display on breadboard with Arduino Micro.

Op Breadboard.

De gebruikte Arduino code is als volgt. Deze doet een “looplichtje”, voor de foto’s gebruikte ik een langere sluitertijd en zette ik de bar stil.

Het lijkt mogelijk te zijn door middel van het sturen van stroom en tijd enige variatie in de helderheid van de uitlezing te realiseren.

Dit was een plezierige middag uitzoeken en knutselen. Tijd om een mooie audio level meter te bouwen?

Steward platform telescoop

Een spiegeltelescoop is niets meer dan een spiegel en een oculair in de juiste positionering ten opzichten van elkaar. Om die juiste positionering te bereiken zijn mechanische instellingen noodzakelijk zoals scherpstelling en collimatie, het uitlijnen van de optica.

Gewoonlijk worden deze instellingen verzorgt door een aantal aparte mechanieken. Om deze praktisch goed te laten werken zodat de instellingen voorspelbaar werken, elkaar niet beïnvloeden en na het instellen vast blijven staan, moet de gehele constructie een voldoende stijfheid hebben.

Een andere benadering is alle instellingen door 1 mechaniek te laten verzorgen, in dit geval een zogeheten Steward platform. Dit soort moderne’ oplossingen is mogelijk door het inzetten van motoren bestuurd door een computersysteem, een Arduino microcontroller. Het lijkt aantrekkelijk om alles vlot en gemotoriseerd in te kunnen stellen, zodat het beeld al dan niet automatisch en op afstand voortdurend geoptimaliseerd kan worden en stijfheid minder belangrijk wordt.

Dit is gunstig bij grote telescopen, die relatief minder stijf zijn dan kleine, en specifiek voor Dobson (alt-azimuth) monteringen is het praktisch dat het Steward platform ook direct in een rotatie as voorziet.

Persoonlijk vond ik het echter vooral een interessant en elegant idee om eens mee te experimenteren. Er zijn een aantal professionele telescopen gebouwd met deze constructie, echter met beperkt succes. Ook zijn er projecten met deze constructie enkel voor een handmatige collimatie. Hoewel ik later nog eens een grotere privé telescoop wil bouwen besloot ik dit idee nu uit te proberen in een klein experiment.

Home build Steward platform telescope.

De spiegel is een wat gehavende surplus 205 mm f/2,5. De camera is een oude, maar behoorlijk gevoelige, C-mount kleuren videocamera CV-S3300 zonder lens. De montering is een EQ6. De niet 3D-geprinte onderdelen zijn van multiplex, de stangen eenvoudig 5/8″ elektra buis van de Gamma.

Design on paper.

Het ontwerp is geschetst op papier. Op de schets mat ik ook de onderlinge positie van de kruiskoppelingen op. Deze manier van werken heeft een beperkte nauwkeurigheid, maar de constructie blijkt zo flexibel dat er niets afbreekt als de sturing om enige reden niet helemaal juist is.

Steward platform telescope 3D printed universal joint.

De noodzakelijke kruiskoppelingen zijn uitgevoerd als levende scharnieren, 3D-geprint in PLA. Om deze goed te laten werken is het belangrijk de scharnieren voor het printen goed te plaatsen in de printer. Er is er nog geen een gesneuveld. De scharnierpunten van de stangen liggen niet in 1 vlak en komen van twee stangen ook niet in 1 punt samen. Dit is niet optimaal, maar het lijkt geen probleem te geven. Aan de onderzijde zijn zij hetzelfde, maar groter opdat de motor in het midden past.

Steward platform telescope stepper motors.

Voor de motoren koos ik goedkope stappenmotoren met vertraging type 28-BYJ-48. Deze zijn eigenlijk ongeschikt. Zo is er in alle richtingen een aanzienlijke speling op de as. Ook zijn ze erg traag. Dat is voor het gebruik geen probleem, maar onhandig bij het ontwikkelen. Toch heb ik het project hiermee doorgezet, het ging er immers niet om de beste telescoop ooit te maken maar om te zien of ik het geheel werkend kan krijgen.

Op de as van de motoren is een stuk M5 schroefdraad bevestigd, dat in de PVC buis loopt in twee M5 moeren waar door de 3D geprinte houder de speling uit gedrukt wordt. Dit idee werkt keurig, jammer dat de motor zelf zo veel speling heeft…

De sturing wordt verzorgd door een Arduino Mega met drie ULN2803 darlington array’s. Omdat ik geen Arduino code kon vinden welke geschikt was voor een Steward platform met lineaire actuators heb ik zelf iets geschreven.

Feitelijk hoeft men slechts 1/6 deel van de code te bedenken, de rest is copy-paste met enige verwisselingen. De user interface bestaat uit een kleine joystick en drie leds.

De onderkant van de telescoop met o.a. de Arduino.

De eerste resultaten zijn bemoedigend, het lukt vlot om de kerktoren en later enige sterren in focus te krijgen. De kijker goed collimeren lukte echter nog niet.

Boven de top van de kerktoren in de schemering, onder enige sterren met veel coma op de monitor.

Het blijkt lastig het platform in het donker goed te bedienen omdat dan niet zichtbaar is hoe het beweegt. Ook laat de code nu enkel het maken van stappen toe: groot, medium of klein, wat niet handig werkt. Er is dus nog genoeg te verbeteren 🙂

Voor wie geïnteresseerd is verzamelde ik de gebruikte 3D-ontwerpen en de Arduino code in een ZIP:

IBM Meteobridge display

Van een collega kreeg ik deze week een gloednieuw IBM display cadeau, van een type dat bedoeld is om op een kassa te schroeven. Omdat de ervaring leert dat zo een doosje ongemerkt een tijd in de kast kan blijven liggen, en je er dan weinig lol van hebt, besloot ik er deze regenachtige zaterdag direct iets van te maken.

Het werd een extra display voor mijn weerstation voor op mijn werkkamer.

IBM display as Meteobridge display.

Het display is een HD44780 compatibel met 2×20 karakters in groot formaat, 9 mm karakter hoogte. Het heeft een ietwat onhandige 2 mm pitch header.

De aanwezige IBM elektronica was voor mij niet eenvoudig opnieuw te gebruiken, en had ook geen handige functionaliteit. Deze werd daarom vervangen door een PCF8574 I2C expander printje dat ik jaren geleden maakte voor een Makerspace project, en een Wemos D1, dat is een gebruiksvriendelijke ESP8266 microcontroller module met Wifi.

PCF8574 and ESP8266 in IBM display

Omdat het led backlight een V of 8 nodig had kwamen daar een kleine 5V step down en een 68 Ω / 1W weerstand bij. Dit opdat het geheel op een enkele netadapter van 12V kan werken. Tot slot voegde ik een drukknop toe om de legenda te tonen en het backlight in- en uit te schakelen.

Het energieverbruik uit het stopcontact is 2,7 W met de backlight aan, 2,0 W met de backlight uit.

De actuele metingen van het weerstation worden op het locale netwerk beschikbaar gemaakt door de Meteobridge als een tekstfile. Deze text wordt opgehaald door de ESP. Vervolgens wordt een selectie van acht van de beschikbare meetwaarden op het display getoond.

De Arduino code is zo simpel mogelijk. Een captive portal voor de instellingen zou fraai zijn, maar ik zit daar niet goed in en de toegevoegde waarde is beperkt. De USB aansluiting van de ESP is te bereiken zonder alles te demonteren. Het opzoeken van de te tonen waarde in de tekst gebeurd simpelweg door het aantal spaties te tellen.

Al die getallen lijken misschien wat onoverzichtelijk, maar met enige gewenning is het display in één oogopslag af te lezen. Nu kan ik ook op mijn werkkamer zien wat voor weer het buiten is zònder de gordijnen open te doen 🙂

Onderstaande de Arduino code van dit project.


Update augustus 2024: Omdat de volgorde van de regels in het bericht blijkt te kunnen veranderen na een herstart van de Meteobridge is een nieuwe DisplayMeteo() functie geschreven die hier niet gevoelig voor is.

Temperatuur logger

Om, uit nieuwsgierigheid, te onderzoeken hoe mijn koelkast regelt en reageert op zijn omgevingstemperatuur bouwde ik een simpele temperatuur logger op basis van een Arduino Uno en ingegoten Dallas 1-Wire temperatuursensoren uit China.

De data logger en de omgevingstemperatuur sensor.

Het gebruikte shield is een merkloos “Arduino data logger shield” met daarop een ds1307 I2C real time klok en een SD-kaart slot. Hierop bouwde ik de 1-Wire interface voor ds18b20 sensoren, feitelijk een header en een enkele pull-up weerstand op pin 8. Verder zijn er een kleine groene led om de cpu belasting te tonen en een grotere rode om een waarschuwing te geven dat er geschreven wordt naar de sd kaart, en het te melden als dat onverhoopt mislukt.

Het geheel is op een plaatje aluminium met daar onder een harddisk magneet met plakfluweel geschroeft, zodat het zonder schade als een koelkastmagneet op de deur geplakt kan worden. De verbindingen naar de sensoren in de koelkast en het vriesvak gebruijken flatcables voor een zo goed mogelijke afsluiting van de deuren.

Voordat de datalogger code geladen wordt moet de klok gestart en gelijk gezet worden door middel van bijvoorbeeld het ds1307-voorbeeld dat met de Adafruit RTClib bibliotheek mee komt. Dit programma neemt de tijd van compileren mee als tijd om de klok gelijk te zetten, wat in de Arduino omgeving goed werkt omdat er weinig tijd zit tussen het compileren en de daaropvolgende eerste start van de firmware. De klokt loopt overigens keurig, hij blijft binnen een minuut afwijking per maand.

Ook moeten de unieke 64-bit OneWire adressen van de individuele temperatuursensoren bekend zijn. Deze zijn eenvoudig uit te lezen met het DS18x20_Temperature-voorbeeld van de OneWire bibliotheek. Hierbij worden ze één voor één aan de logger hardware aangesloten en wordt het adres gekopieerd naar de code van de logger.

1-Wire adressen in de code. Deze zijn voor mijn sensoren, en met zekerheid anders dan die van alle andere 1-Wire sensoren.

Als een sensor door de logger vanwegen slecht contact of interferentie een periode niet uitgelezen kan worden is zijn waarde in de log “nan”, van “Not A Number”. Om de sensoren eenvoudig uit elkaar te kunnen houden zijn ze gemerkt met gekleurd PVC tape.

De logging firmware, te vinden op mijn Github, kent systeemtikken van 100 ms. De sensoren worden door een non-blocking routine in twee stappen uitgelezen omdat hier een conversie-wachttijd van 800 ms bij inbegrepen zit. Deze routine heb ik ooit geschreven voor gebruik op de ESP8266. Efficient gebruik van de CPU tijd is hier niet meer dan elegant, het is echter van levensbelang als er nog meer moet gebeuren dan het lezen van de sensoren, zoals het onderhouden van de Wifi verbinding op de ESP.

De gekozen instellingen zijn: 1x per 2s uitlezen, 1x per minuut een gemiddelde temperatuur berekenen en loggen en tot slot deze log 1x per tien minuten naar de kaart schrijven. Er is op de Atmega 328 microcontroller 2 kB RAM, waarvan zo een paar honderd bytes in gebruik zullen zijn voor de verzamelde data voordat deze op de kaart opgeslagen wordt. Dat lijkt nog veilig gezien er bij het compileren 606 bytes voor lokale variabelen over blijven, en werkt in de praktijk goed.

In zowel het vriesvak als de koelkast zijn twee sensoren geplaatst, ´één in een blikje met water en één gewoon los. Dit om tegelijk eens te kijken hoe deze bekende methode voor een betere meting van de temperatuur van een koelkast uitpakt.

Het eerste resultaat is een fraaie grafiek:

Temperatuur in koelkast gemeten met Arduino datalogger.
De temperatuur in de koelkast en het vriesvak over twee dagen.

Hier is te zien dat de duty cycle van het koelen vrij sterk afhankelijk lijkt van de temperatuur. Om een uur of vijf de tweede dag werd de instelling van de mechanische thermostaat omlaag aangepast. Het bevriezen van het water in het vriesvak is in de gele lijn fraai te zien. Later bleek dat hierbij het blik is geknapt door de druk van het ijs! Ook is te zien dat de temperatuur in het blikje met water altijd onder die in de koelkast lijkt te liggen. Komt dit door verdamping? Of wijkt deze sensor af? In het viesvak is de amplitude in het blikje met ijs nog aanzienlijk. Zat de sensor te veel aan de buitenkant in het blik?

Hier is duidelijk ruimte voor nader onderzoek. De logger werkt prima, hij logt weken lang zonder problemen. Ik had nog geen ervaring met loggers. De eenvoud van het gebruik van een SD kaartje in vergelijking met het direct loggen naar de cloud of een eigen server bevalt goed.

Geknapt blikje door het ijs in het vriesvak. Het lijkt er op dat de sensor te zien is, en dus helemaal aan de buitenkant zat.

Monochromator als spectrometer

Hoewel dit project al weer een tijd geleden gerealiseerd is heb ik er hier door drukte, verhuizing en corona nooit over geschreven: Een opstelling rond een monochromator om optische spectra te meten.

De gehele opstelling. Links de spectrometer, rechts de voeding en meters voor de te onderzoeken led.

Op de monochromator zijn een stappenmotor en een eindschakelaar gemaakt, zodat hij door een Arduino ingesteld kan worden. Er achter zit een grote bijbehorende fotocel, welke het signaal via een zelfgebouwde voorversterker aanbiedt aan dezelfde Arduino.

De monochromator met zijn motor rechtsboven, de fotocel daar links op aangesloten. Vooraan de voorversterker. In het zwarte kastje zit de Arduino die het geheel aanstuurd.

Voor het testen en wat de golflengte betreft kalibreren van de opstelling gebruik ik een kwiklamp. Als alles ongeveer goed is ingesteld ziet het spectrum daarvan er zo uit:

De code van de Arduino voorziet in een simpele command interface en is hier te vinden: https://github.com/AartSchipper/Monochromator_controller/blob/master/Sturing.ino

De fotodiode voorversterker is opgebouwd rond de klassieke TL072, hij zal besproken worden in een aparte post.

Met deze opstelling heb ik in een samenwerking met Eluke gezellig een middag gemeten aan blauw-achtige leds voor in zijn jongleerballen.