experiment

In de vorige blogpost liet ik een belletje rinkelen, in deze ga ik een lampje laten branden. Een neonlampje, want ik houd van het oranje licht van neonlampjes en nixiebuizen. In veel nixieklokken zie ik neonlampjes als scheidingsteken tussen de uren en minuten, waarvan maar 1 elektroden licht geeft omdat het lampje op DC wordt gebruikt. Dat kan voor het lampje geen kwaad, maar ik vind het mooier wanneer beide elektroden oplichten. Dus in deze blogpost ga ik beide elektroden van een neonindicatorlampje laten oplichten.

(Chicago Miniature A1C neon indicator lampje)
(Chicago Miniature A1C neon indicator lampje)

De ingewikkelde manier

Met dit schema, gebaseerd op de smps uit vorige blogposts kun je AC maken en op die manier beide electroden van een neonindicatorlampje licht laten geven. (Eigenlijk hetzelfde trucje als het laten rinkelen van de telefoon, maar op een hogere frequentie zodat je het neonlampje niet ziet knipperen en de koppelcondensator kleiner kan.)

Maar dat is een beetje Rube Goldberg. Het werkt wel:

Het kan een stukje simpeler:

De eenvoudiger manier

Door beide elektroden van het neonlampje een weerstand naar + en een transistor naar – te geven, kan vrij eenvoudig in elke richting stroom door het lampje gestuurd worden:

Een volledige H-brug zou energiezuiniger zijn, maar dit is een eenvoudiger en compacter schakeling.

Dit maakt het mogelijk beide elektroden van een neonlampje afzonderlijk te sturen.

Hier een demofimpje van een looplicht / binaire teller. 4 bits, op 2 neonlampjes:

(Als de hieronder ingebedde video niet werkt kun je dezelfde video op youtube kijken)

De sourcecode staat hier, puur voor de compleetheid.

De achtergrond

Beide elektroden van een neon-indicatorlampje afzonderlijk aansturen geeft de mogelijkheid bijvoorbeeld een heel nerdy (binair) neonlampjes-horloge te maken. Er bestaan nixie-horloges, maar een neonlampjeshorloge heb ik nog niet gezien. Of een neonlampjesklok met 30 of 60 lampjes in een cirkel.

In plaats van een neonlampjes-looplicht of -klok zou je ook een wat exotisch type stappenmotor (inchworm piëzo motor) aan kunnen sturen. (Mogelijk wil je dan wel een volledige H-Brug. En een instelbare spanning voor precisie-positionering: iets met een dedicated SMPS-IC en een DAC om het setpoint in te stellen, niet een microcontroller die het naast andere taken doet).

En natuurlijk om beide elektroden licht te laten geven in de scheidingstekens van luxe nixieklokken. Er zijn een aantal makers van hele mooie luxe nixieklokken. Vaak voor bedragen waarvoor ik eerder een oscilloscoop zou kopen (en normale mensen een tweedehands auto). Maar kijken kan.

Dalibor Farny maakt zelfs de nixiebuizen zelf (Hij verteld er van alles over op youtube en op zijn site). Ik weet niet of de seperators in zijn klokken ook zelfgemaakt zijn, maar ik vind ze mooier dan een ‘standaard neonlampje’.

Andere makers, zoals nixieshop gebruiken een IN-3 (of dergelijke), net als mijn nixieklok.

Maar bijvoorbeeld elektor en retrotimes gebruiken ‘gewone’ (NE-2 achtige) neonindicatorlampjes. Omdat je bij deze klokken tegen de bovenkant van de neonindicator op kijkt zie je eigenlijk niet dat er maar 1 electrode licht geeft. Bij Millclock, toch hele mooie luxe klokken, zie je het wel.

(Geen van deze links is gesponsord, en ik heb ook met geen van deze bedrijven ervaring, ik vind het gewoon mooie klokken.)

Door ‘speciale’ neonlampjes (IN-3 en whatever Dalibor Farny gebruikt) als uren/minuten/seconden scheidingstekens te gebruiken, heb je niet dat er maar 1 electrode van een ‘standaard’ neonindicatorlampje oplicht.

Maar, je zou dat effect ook juist kunnen gebruiken: met 2 bits per neonlampje zou je extra informatie kunnen weergeven op de scheidingstekens van een nixieklok. Bijvoorbeeld de (buiten)temperatuur, binair weergegeven in 6 bits op 3 lampjes. Of, met wat meer lampjes, als lineair (bargraph) display van bijvoorbeeld de luchtvochtigheid.

Met de step-up uit de vorige post en wat verdere microcontroller-magie (sinus PWM-en) is het mogelijk een T65 telefoon te laten rinkelen. Dat zou bijvoorbeeld bij toneel of theater gebruikt kunnen worden, ware het niet dat we inmiddels modernere telefoons hebben. Ik gebruik het hier vooral als demonstratie van wat er kan met een step-up en een sinustabel, maar ik snij wat bochtjes kort af. Het is dus geen kant-en-klaar nabouwbaar project.

Als je een GSM modem in een T65 wilt inbouwen om mobiel te bellen met je draaischijftelefoon, of als je een intercomsysteem met meerdere T65’s wilt opzetten, heb je hier niet genoeg aan, maar het kan misschien een deeltje van je project worden.

Goed. Eerst maar eens een filmpje van het resultaat. Tuur niet naar de oscilloscope, plaatjes van het scherm volgen later:

(Als onderstaande ingebedded video niet werkt, kun je dezelfde video op youtube kijken)

Dan de techniek:

Hoe?

Een telefoonlijn biedt normaalgesproken -48 Vdc aan en om de telefoon te laten rinkelen wordt daar in te telefooncentrale 60 tot 105 Vrms bij 20 Hz mee in serie gezet. Of 25 Hz, in Europa. Hoewel ik in Europa woon heb ik in eerste instantie 20 Hz gebruikt voor de demo (ik las pas over het frequentieverschil tijdens het schrijven van de blogpost.) Wordt je telefoonlijn niet gemaakt door een telefooncentrale, maar door bijvoorbeeld een Fritz!box, dan is dat 35 Vdc en als belspanning 32 Vrms.

(Er zal normaalgesproken wel wat spanningsval zijn over de bedrading tussen telefooncentrale en huis, en als de ‘centrale’ in je huis staat in de vorm van een kabelmodem/gateway/fritsbox heb je die spanningsval niet.)

Een schema van het binnenste van een T65:

Schema van T65/W65 telefoontoestel, van Picbasic.nl (https://www.picbasic.nl/frameload.htm?https://www.picbasic.nl/t65-telefoon.htm)
(Deze afbeelding is afkomstig van de Picbasic.nl website. Een Heemaf 1955 is vergelijkbaar.)

Omdat de condensator in de telefoon (C1) gelijkstroom blokkeert, heb ik niet de moeite genomen om -48 VDC in serie te zetten die er daarna toch weer af gaat. Sterker nog: ik maak niet eens AC: de spanning wisselt niet van polariteit. (Zie scope-plaatjes verderop)

Voor een T65 en dergelijke eenvoudige toestellen maakt dat niet uit. De condensator in serie met de bel lost dat wel op. Voor modernere telefoons waar electronica in zit gaat dat niet werken. (Zo’n modern toestel heeft waarschijnlijk de -48VDC nodig en zal misschien ook onblij worden van de DC component in het belsignaal. Ik weet niet of het stuk gaat, maar ga er maar van uit dat het op zijn minst Niet Werkt en ook wel eens Stuk Zou Kunnen Gaan. Niet mij boos opbellen als je telefoon stuk gegaan is, dus. Dit is een kort afgesneden bocht. U bent gewaarschuwd.)

Don’t try this at home

Probeer dit dus niet op een modernere telefoon. Of op zijn minst: wordt niet kwaad als ‘ie stuk gaat. Misschien nog beter: Probeer dit geheel niet. En wordt überhaupt niet kwaad. En ik ga er van uit dat als je dit werkend krijgt, je ook het benul hebt om van spanningsvoerende delen af te blijven.

Het voor het 20Hz gedeelte van het filmpje gebruikte schema staat hierboven (maar er is een verbetering mogelijk, zie verderop).

Met een ietwat aangepaste step-up uit de vorige blogpost maak ik een DC spanning van ongeveer 150 V. Met een tweede PWM kanaal van de microcontroller wordt een PWM signaal gemaakt, waarbij de pulsbreedte uit een sinus-tabel wordt gehaald. De sourcecode staat op github: Sourcecode van telefoonrinkelaar. Het 5Vtt PWM signaal uit de microcontroller wordt door Q2,Q3,Q4 niveau-vertaald tot een ongeveer 150 Vtt PWM signaal, R5 en C3 vormen een laagdoorlaatfilter. Op de basis van Q5 wordt zo een ongeveer sinusvormig signaal aangeboden. Q5 dient als emittervolger / bufferversterker. R6 dient als bleederweerstand voor de condensator in de T65 en wordt dus rechtstreeks met de telefoon verbonden.

De belspanning is ongeveer 110 Vtt onbelast. Tijdens het rinkelen van de telefoon is het ongeveer 50 Vtt met 60V DC offset. Op de oscilloscope ziet dat er als volgt uit:

Het lijkt in de verte wel op een sinus, maar bij belasting gebeurt er wat raars.

Hoe kan het beter

Via emittervolger Q5 kan alleen stroom worden geleverd aan de bel in te telefoon, en geen stroom worden opgenomen. Als een extra transistor (Q6) wordt toegevoegd kan er ook stroom opgenomen worden en blijft de golfvorm tijdens het rinkelen een stuk mooier:

De onbelaste spanning blijft gelijk.

Q6 gaat geleiden als de spanning op de emitter (de belspanning die aan de telefoon wordt aangeboden) hoger is dan de spanning op de basis. In dat geval dient R7 als extra belasting van de uitgang (belspanning), die dus stroom kan opnemen. Zo kan de uitgangsspanning weer omlaag, ook als daar een inductieve of capacitieve last op is aangesloten.

Om de sinusvorm sinusvormiger te maken, zou je de PWM frequentie kunnen verhogen en/of een beter filter kunnen toepassen. (Let wel op dat het in dat topic over andere frequenties gaat).

Hoe kan het slechter

Als je nog een bocht verder afsnijd, kan het ook met de sourcecode uit deze andere git gist. Het schema wordt dan simpeler:

De ‘sinus’ voor de belspanning wordt dan gemaakt door het setpoint van de schakelende regelaar te veranderen, waar ik het in die vorige blogpost over had, maar zelfs op een relatief trage 20 Hz wil dat niet mooi werken. Omdat de voeding niet kan sinken (alleen stroom kan leveren en niet kan opnemen) rinkelt de telefoon ook niet. Als een extra last wordt toegevoegd rinkelt de telefoon wel, ik gebruikte daarvoor een neonlampje. Maar de golfvorm wordt extreem lelijk. Zie onderstaande oscillogrammen.

En waarschijnlijk wil die telefoon op een blokgolf ook wel rinkelen, maar het ging me hier juist om een demonstratie van het PWM-en van een sinus.

Sinustabel

De sinustabel komt in beide gevallen uit dit stukje python, al zijn er ook online tooltjes te vinden om sinus tabellen te maken (zoekterm: Sine LUT).

Overige Opmerking(en)

Je zou hiermee ook op een heel ingewikkelde manier beide elektroden van een neonlampje kunnen laten oplichten (schema), maar dat kan ook op een eenvoudiger manier. Meer daarover in een volgende post.

Bij de zweefmagneet gebruik ik een hallsensor om de afstand tot de magneet te meten. Deze sensor meet magnetische veldsterkte en is daarom eveneens gevoelig voor het veld van de elektromagneet, en niet alleen de permanente magneet waarvan de afstand gemeten moet worden. Op zich geeft dat geen probleem in de praktijk, maar het is een leuke aanleiding om eens te kijken of de afstand ook op een niet-magnetische manier gemeten kan worden. Dat is ook handig als het object waar de afstand naar gemeten wordt niet magnetisch is, bijvoorbeeld.

Omdat dit een hele kleine afstand is (een paar centimeter), zijn veel kant-en-klare sensoren niet geschikt, omdat ze bijvoorbeeld meters afstand meten met een resolutie van enkele cm, of tientallen centimeters met enkele mm. De afstandssensor die ik voor de zwevende magneet nodig heb, moet een centimeter of 3 tot 5 kunnen meten, waarbij het eigenlijk niet eens belangrijk is wat die afstand precies is, als kleine veranderingen (sub-mm) maar goed opgemerkt worden.

Met een LED en een lichtsensor valt reflectief te meten wat de afstand tot een reflecterend object is: Hoe meer licht terugkaatst, hoe dichter bij het object is. Uiteraard lijken ‘ beter reflecterende’ objecten dan dichter bij dan ‘minder goed reflecterende’, maar bij steeds hetzelfde uniform gekleurde object geeft dat niet. (De uitdaging om dit toe te passen bij een zwevende magneet zit er in dat ook de hoek invloed heeft op de hoeveelheid licht die naar de sensor weerkaatst: de magneet beweegt niet alleen op en neer maar kantelt ook.)

Ik gebruik een BPW40 fototransistor als lichtsensor, maar bijvoorbeeld een LDR of een fotodiode kan ook. Ik gebruik een infrarode led, maar gewoon zichtbaar rood werkt ook. Voor zichtbaar geel is de BPW40 duidelijk minder gevoelig. Ik gebruik een Atmega328p als microcontroller, maar alles met een ADC is bruikbaar.

Zo is heel makkelijk en met goedkope onderdelen een afstandssensor te maken, voor kleine afstanden.

De afstandssensor heeft geen last van omgevingslicht, omdat de fototransistor AC gekoppeld aangesloten is. Constant omgevingslicht geeft een DC offset en de koppelcondensator blokkeert die.

De LED moet uiteraard wel met AC worden aangestuurd, zodat het (gereflecteerde) licht ervan een AC signaal veroorzaakt dat wèl door de koppelcondensator heen komt. Dit kan daarna worden gelijkgericht en gemeten, of zelfs rechtstreeks de ADC van een microcontroller in. Als dezelfde microcontroller de LED aanstuurt, is het gemakkelijk om ‘synchrone detectie’ toe te passen: Er wordt een ADC sample genomen precies op het moment dat de LED aan staat.

Al bij al zijn het 5 componentjes en een paar regels code. Makkelijk uit te proberen met deze arduino-sketch.

En het werkt mooi: