Tuo
otsikko pitää kyllä paikkansa, vaikka ohjelmallinen idea tässä
sovelluksessa onkin keskeytyksen toiminta. Nämä kaksi asiaa
palvelevat hyvin toisiaan tässä sovelluksessa. Lähtökohtana oli
12 V:in jännite nostaa ensin muuntajalla suuremmaksi – korkeampi
vaihtojännite – ja sen jälkeen tasasuunnata ja ”pumpata”
diodi / kondensaattoriketjulla suurjännitteeksi. Näin saatu tulos
ei kuitenkaan riittänyt tuolle vanhalle geigerputkelle. Sen dataa en
enää netistä löytänyt.
Uudemmilla
geigerputkilla jännite näyttää olevan 400 .. 500 voltin luokkaa,
joten sillä aluksi yritin, mutta putki ei toiminut.
Taistelu
jatkui. Onneksi oli kuitenkin tuo vanha analoginen 1980 luvulla
rakentamani geigermittari, josta saatoin hakea tuskaani apua. En
muista tarkkaan, milloin sen tein, mutta joka tapauksessa ennen
26.04.1986, sillä silloin se oli minulla jo käytössä, ja myös
sille oli käyttöä. Muistan, kun joskus kesäkuun lopulla -86 olin
käymässä vanhempieni luona keskisuomessa heidän omakotitalollaan.
Tuli kuurosade ja menin vehkeeni kanssa rännin viereen mittaamaan.
Nuo videolla kuuluvat suurimmatkin rätinät ovat vain pientä
huminaa siihen verrattuna, miten laitteeni kiljui alas syöksyvän
veden vieressä. Menin nopeasti sisälle suojaan. Siellä säteilytaso
laski aivan oleellisesti. Olin myös iloinen siitä, että ihmiset
eivät tajunneet, millainen Tsernobyli-annos heidän niskaansa
silloin sälytettiin. Sienet, marjat ja jäkäläthän sen joutuivat
ottamaan vastaan. Varmaan on parempi, ettei aina tiedä kaikkea.
Monet
komponenttivalinnat tapahtuivat ”miljoonalaatikkopohjalta”, eli
mitä sattui olemaan. Muuntajan (2) ensiöön käämin 0,5 mm
emalieristettyä kuparilankaa – kaksi lankaa samanaikaisesti, jotta
symmetria säilyy – lokero täyteen. Ensimmäisen johdon loppupää
kytketään toisen käämin alkupäähän. Tällöin virran ja
magneettikentän suunta muuttuu jokaisella puolijaksolla ja toisiosta
tulee vaihtojännitettä. Toisiokäämiksi 0,3 mm emalieristeistä
kuparilankaa lokero täyteen. Näin saatu jännite oli noin 650 V:in
luokkaa 12 V syötöllä. (12 V olisi hyvä, jos haluaisi esimerkiksi
tehdä sääaseman, missä säteilymittaus on mukana. Kun noita
”rakettimiehiä” tuntuu olevan siellä sun täällä, niin
voisihan se olla hyvä ajoissa tietää, milloin on syytä lähteä
hakemaan joditabletteja apteekista.)
Tuollaisen
”pumppuketjun” (3) sisäinen vastus on niin suuri, että mittari
kuormittaa lähdettä, joten noiden jännitteiden arvot eivät ole
tarkkoja. Joka tapauksessa tuo jännite ei riittänyt tälle
geigerputkelle (1). Erilaisten hakemisten ja mittausten (myös
vertailu siihen vanhaan analogiseen mittariin) tuloksena oli, että
jännitteen pitäisi olla 800 voltin suuruusluokkaa.
Oli
kolme mahdollisuutta ratkaista ongelma: 1) Purkaa ensiöstä
kierroksia (molemmista yhtä paljon, jotta symmetria säilyy), 2)
käämiä toisiokäämi ohuemmalla johdolla, jolloin kierroksia
tulisi enemmän ja jännite muuntajan toisiossa nousisi sekä 3)
tehdä diodi / kondensaattoriketjua lisää. En kuitenkaan valinnut
mitään näistä, koska en ollut rakentamassa pysyvää laitteistoa,
joten nostin vain syöttöjännitettä sopivaksi, aina noin 23
volttiin saakka, jolloin putkeen osuvat partikkelit – ionisoivan
säteilyn alfa-, beta, ja gammahiukkaset saivat putkessa aikaan
purkauksen.
Kun
pääsin näin pitkälle, saatoin alkaa kehitellä itse ohjelmaa.
Purkaus geigerilmaisimessa on hyvin nopea. Mikrosekuntien luokkaa,
mutta tämäkin on hankala mitata, koska mittapäät vaikuttavat
tulokseen.
Putken
sisäinen vastus on myös suuri. Sen vuoksi ilmaisinputki on osa
hyvin suurten vastusten (kaksi 4,7 megaohmin vastusta) kanssa
sarjassa. Purkauksen aiheuttamaa läpilyöntiä ja siitä johtuvaa
virtaa hidastetaan (ladataan hetkellisesti) 100 pF kondensaattorilla.
Tämä pulssi on joka tapauksessa aivan liian nopea normaalin
pääohjelmakierroksen luotettavaan tunnistamiseen. Siksi keskeytys.
Arduinolevyillä,
jotka perustuvat ATmega 328 piiriin (esim. UNO), keskeytystuloja
(interrupt) ovat digipinnit 2 ja 3. Tässä käytän tuloa 2
konfiguroituna laskevasta reunasta (FALLING). Tämä tulo (DI2) on
asetuksissa määritelty siten, että siinä on sisäinen
ylösvetovastus (pinMode(Con_KeskTulo, INPUT_PULLUP);
Geigerputkelta tuleva pulssi (noin 1 – 2 voltin luokkaa) ohjataan
komparaattorin (LM-339AN yhden piirin) miinus (-) tuloon.
Komparaattorin + tuloon
tuodaan trimmeripotentiometrilta vertailujännite (noin 0,9 V).
Pulssin ylittäessä tämän, romahtaa jännite (tulo DI2) nollaan ja
ohjelman suoritus hyppää välittömästi aliohjelmaan
Fun_Keskeytys();
missä ainoastaan asetetaan geigeranturin tilatieto (volatile
boolean Bol_Tila todeksi
(true)).
Keskeytyksen käyttämä muuttuja pitää määritellä volatile,
minkä johdosta kääntäjä tietää, että tämä muistipaikka on
muuttujarekisterin ulkopuolella, jolloin se ei voi muuttua
dynaamisesti ohjelman suorituksen aikana. Varsinainen
keskeytystoiminta määritellään asetuksissa:
attachInterrupt(digitalPinToInterrupt(Con_KeskTulo),Fun_Keskeytys,FALLING);
Parametrit tarkoittavat seuraavaa: 1)
määritellään keskeytystulo. Tässä tapauksessa pinni DI2. 2)
määritellään aliohjelma, mihin keskeytys osoittaa suorituksen. 3)
mikä herättää keskeytyksen. Tässä tapauksessa laskeva reuna.
Muita mahdollisuuksia ovat: nouseva
reuna, muutos, nollatulo (0), ja joissakin malleissa myös tulon tila
+5 V (HIGH).
Kun
pääohjelma havaitsee tämän tilan, asetetaan indikaattorilähtö
(DO8) ylös (HIGH), mikä puolestaan ohjaa kaiutinta (4) ja mittaria.
Yhden millisekunnin kuluttua tämä lähtö (DO8) palautetaan
nollaan. Pulssi kuuluu kaiuttimesta pienenä rasahduksena ja
mittarissa (5) pienenä viisarin liikkeenä. Kun säteily kasvaa,
rätinä nopeutuu ja mittarin kondensaattori latautuu joka pulssilla
ylemmäs ja viisari osoittaa enemmän. Parhaan kuvan tapahtumasta saa
katsomalla videon (antinarduvideo48.youtube.com).
Kuvissa
näkyy myös vanha rannekellon (6) romu. Tässä kellossa on
fluoresenssinäyttö. Toisin sanoen viisarit ja numerot hohtavat
pimeässä. Kello taitaa olla siltä ajalta (-50 luvulta), kun
kenkäkaupoissakin oli röntgenlaitteet kenkien sopivuuden
tutkimiseksi. Tuo vaihe ei onneksi kestänyt pitkään, kun
tajuttiin, miten vaarallista henkilökunnan oli altistua jatkuvalle
röntgensäteilylle.
Tällä
hetkellä normaalia taustasäteilyä on sangen vähän. Ilmaisin
purkautuu muutaman sekunnin välein. Tämän sovelluksen tutkimiseen
ja havainnollistamiseen tuo vanha kello on siis oivallinen apuväline.
Videolta myös näkee, miten säteily voimistuu etäisyyden
pienetessä. Kellon lojuessa pöydällä se ei juurikaan lisää
säteilyannosta lähellä olevalle ihmiselle.
OHJELMA
48
/*******************************
*
Ohjelma Keskeytys_48
*
12.10.2017
*
Sovelluksella toteutetaan säteilymittaus geiger-putkella
*
1. Toteutetaan suurjännite, noin 800VDC
*
2. Ohjelmasuoritus haarautuu keskeytyksen kautta
*
3. Ohjataan analogiamittaria
*
4. Säteilypulssi ilmaistaan kaiuttimen kautta
*/
//
Määrittelyt
const
int Con_KeskTulo = 2;
const
int Con_Pinni1 = 3;
const
int Con_Pinni2 = 4;
const
int Con_Pulssi = 8;
volatile
boolean Bol_Tila = false;
//
Aliohjelmat
void
Fun_Keskeytys(){
Bol_Tila
= true;
}//
Keskeytysfunktio loppu
void
Fun_Jannite(){
int
i = 0;
for
(i = 0; i < 10; i++){
bitSet(PORTD,Con_Pinni1);
delayMicroseconds(3);
bitClear(PORTD,Con_Pinni1);
delayMicroseconds(2);
bitSet(PORTD,Con_Pinni2);
delayMicroseconds(3);
bitClear(PORTD,Con_Pinni2);
delayMicroseconds(2);
}
}//
Jännitteen nostajan loppu
void
setup() {
pinMode(Con_Pinni1, OUTPUT);
pinMode(Con_Pinni2, OUTPUT);
pinMode(Con_Pulssi, OUTPUT);
pinMode(Con_KeskTulo, INPUT_PULLUP);
// sisäinen ylösveto
attachInterrupt(digitalPinToInterrupt(Con_KeskTulo),Fun_Keskeytys,FALLING);
Serial.begin(9600);
Fun_Jannite();
}
//
Pääohjelma
void
loop() {
if
(Bol_Tila == true){
digitalWrite(Con_Pulssi, HIGH);
}
// paluu keskeytyksestä
delay(1);
digitalWrite(Con_Pulssi, LOW);
Bol_Tila
= false;
Fun_Jannite();
// pumpataan jännitettä
delay(1);
}//
Pääohjelman loppu