Met een eenvoudige Chinese Geiger-Muller telbuis en een kleine microcontroller heb je in een half uurtje een permanente weergave van de huidige omgevingsstraling in µSv/uur gemaakt en krijg je een waarschuwing als het stralingsniveau in je omgeving boven een bepaald niveau uitstijgt. Voor iedereen met een Home Assistant installatie een must-have en nog gemakkelijk te maken ook.
Ik ben dit project begonnen met een kant-en-klare Geigerteller-printplaat met daarop een J305 GM-telbuis. Het is een buis die je in meer Chinese stralingsmeters tegenkomt; het is niet een supergevoelige telbuis maar hij is goedkoop en – door volumeproductie en bijbehorende kwaliteitscontroles – betrouwbaar gebleken. Ik heb al eens vaker over stralingsmeting geschreven en in die artikelen aangegeven dat de telbuis werkt doordat het gas in de buis door bombardement van ionen ontlaadt en dan een elektrisch stroompje doorlaat. De telbuis wordt voorzien van een hoge spanning om dit mogelijk te maken en ieder type telbuis heeft een fabrieksspecificatie van de verhouding van ontladingen (‘counts per minute’) en de eenheid van straling, Sv/h (‘Sievert per uur’). In het geval van de J305 is dat verhoudingsgetal 123,14709 (zie overweging aan het einde van dit artikel). De buis zelf heeft een onderdrempel van 0,2 ontladingen per seconde, je hebt dus in elk geval 12 ontladingen per minuut op basis van de ‘achtergrondstraling’ die je overal op aarde tegenkomt. De levensduur van de buis is gespecificeerd als ‘> 1 x 10^9 pulse’, hetgeen bij 100 pulsen per minuut een levensduur van tenminste 2 jaar zou betekenen.
Je begint het project door een D1mini microcontroller met een kabeltje te voorzien van de basisfirmware en te verbinden met je wifi toegangspunt. Het kabeltje kan dan weer verwijderd worden: alle volgende updates van de firmware gaan ‘over the air’. Met drie korte stukjes montagedraad verbind je de D1mini met de aansluitingen 5V
, GND
en VIN
van de Geigerteller. De VIN
aansluiting van de Geigerteller is een digitale uitgang (die dus VOUT
had moeten heten) die hoog wordt bij iedere telpuls. Ik heb deze pulsuitgang met aansluiting D6
van de D1mini verbonden. Met een stukje verpakkingsschuim en een eindje dubbelzijdig tape heb ik de D1mini op een handige plek op de Chinese stralingsmeter-printplaat vastgezet zodat het net lijkt alsof beide printplaten bij elkaar horen. Nuver.
Aan de softwarekant heb ik de informatie vanaf de D1mini in drie delen opgesplitst: de telinformatie in CPM (’telpulsen per minuut’), een stralingsniveau omgerekend naar µSv/h en een indicatie van of zich een onveilige situatie voordoet: drie handige entiteiten die hun weg zo naar Home Assistant zullen vinden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | substitutions: friendly_name: Geiger Counter esphome: name: esphome-web-9fc591 esp8266: board: esp01_1m # Board pinout # GPIO12 D6 PULSE # Enable logging logger: level: debug # Enable Home Assistant API api: ota: wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: ${friendly_name} password: !secret wifi_ap_password captive_portal: sensor: - platform: pulse_counter pin: 12 name: ${friendly_name} id: "geiger_counter" state_class: measurement unit_of_measurement: 'CPM' on_raw_value: - sensor.template.publish: id: radiation_level state: !lambda 'return x / 123.14709;' - platform: template name: "Radiation Level" id: "radiation_level" unit_of_measurement: 'µSv/h' icon: mdi:radioactive accuracy_decimals: 5 binary_sensor: - platform: template device_class: safety name: "Radiation Warning" lambda: |- if (id(radiation_level).state > 0.32) { // Value of 2.8 mSv/year is the radiation dose in The Netherlands the average person receives // which translates to 0.32 µSv/hour. Everything above is suspicious and thus warrants a warning // See https://www.rivm.nl/straling-en-radioactiviteit/blootstelling-en-gezondheidsrisico/blootstelling-aan-ioniserende-straling-samengevat return true; } else { // Value equal or below the normal level return false; } |
In Home Assistant heb ik vervolgens de entiteiten zichtbaar gemaakt op een dashboard.
De YAML code voor dit dashboard is als volgt:
1 2 3 4 5 6 7 8 9 10 11 | type: vertical-stack cards: - type: glance entities: - entity: sensor.radiation_level - entity: binary_sensor.radiation_warning - entity: sensor.geiger_counter - type: history-graph entities: - entity: sensor.radiation_level hours_to_show: 48 |
Als je een analoge wijzerplaat wilt tonen, is het handig om gebruik te maken van de normen die RIVM erop na houdt: 2,8 mSv/jaar wordt als normaal gezien. Dat is omgerekend 0,32 µSv/uur. Als je dat als 20%-waarde instelt, en dus 1,6 µSv/uur als schaalmaximum, zou je 0,8 als 50%-waarde kunnen gebruiken. Op die manier krijg je een meter met een groene zone, oranje zone en rode zone:
1 2 3 4 5 6 7 8 9 | - type: gauge entity: sensor.radiation_level needle: true name: Straling max: 1.6 severity: green: 0 yellow: 0.32 red: 0.8 |
Ik gebruik een verzameling proefmaterialen om de opstelling te testen: uraniumerts in een loodgevoerd potje en een paar scherven van een aardewerken potje met uraniumhoudende verf.
Met de aardewerk scherven krijg je een prachtige demonstratie van de werking van de opstelling: de weergegeven straling stijgt tot ongekende hoogte en je krijgt een waarschuwing dat er veel straling is. Prima resultaat van een half uurtje knutselen (en wat langer spelen met de opstelling).
Een project is niet af als er niet een beschermende – en bij voorkeur aantrekkelijke – verpakking omheen zit. Speciaal voor dit doel heb ik een doosje met eigen ontworpen deksel ge-3D-print waar de geigerteller-print-met-D1mini prima in verpakt zitten. Ik heb er zwarte Eco-ABS voor gebruikt, met het idee dat ik er nog een keer met een spuitbus gele verf wat mooie accenten op wil aanbrengen. Zie mijn Thingiverse pagina voor het ontwerp van deze behuizing.
Update: de Y305 Geiger-Muller telbuis heeft een eindige levensduur, die wordt bepaald door het aantal gasontladingen dat de buis heeft doorstaan en nog kan doorstaan. De levensduur van de buis is gespecificeerd als ‘Life: > 1 x 10^9 pulse’, hetgeen bij 100 pulsen per minuut een levensduur van tenminste 2 jaar zou betekenen. Om daar een beetje gevoel voor te krijgen is het handig om het totaal aantal ontladingen total counts
bij te houden. Ik laat Home Assistant het totale ‘gebruik’ bijhouden met een utility_meter
. Hieronder de aanpassingen aan de ESPhome firmware en het Home Assistant configuratiebestand.
Toevoeging aan de ESPhome sensor:
sensor:
- platform: pulse_counter
pin: ..
...
total:
name: 'Total Counts'
Home Assistant configuratiebestand:
1 2 3 4 | # Usage counters, are persistent (i.e. keep the value after a reset) utility_meter: geiger_tube_j305_usage: source: sensor.total_counts |
Een Geiger-Muller telbuis reageert op ioniserende straling en het aantal impulsen per minuut heeft een relatie met de stralingsdosis. Echter, wat is die relatie? De fabrikant van de buis zou het kunnen weten en er over publiceren, maar in het geval van de J305 is dat wat ‘mistig’. We komen echter zelf een heel eind als we de stelling van RIVM dat we in Nederland zo’n 2.8 mSv per jaar ontvangen. Met dat gegeven kunnen we de normale hoeveelheid straling per minuut omrekenen en in verhouding brengen met het aantal telpulsen.
Thank you for the detailed manual!
Looking to set this up for some time now.
Add it to the HA project list.
Greetings from Hong Kong