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.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIYDLftJjm8GXBy97kEcvpQh67F-hK4wyqoAhrNAFwRq58y9ALLhV26GLW4UOJJPPpd9BlqnqCipg-IcF7s8rcOQ2BPupeSbiWWvf4Qy3R6utAPSREKmpZczSYAWkM6muaiGluT7ztYodF/s320/Kuva_1mp.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKtxNTS7QGC4il9t8lPMHY55owJDD3YB3YZGr-ATb415WlJ18Bp73YYw-7kOHx-P_uXG39D8cOgQ2eE9qO35zUZnq6WaMNiLTnxtrRHHtbxDi4c7erEo7Sc1ZZBa1SOsULBnzREbs3KUQ/s320/Kytkent%25C3%25A4_48v1.jpg)
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.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgi7nb9i_ph7ihx7Cp_3WM9G8kynjBZC-QU-7ZdRimtS7cynQiCu2mpXWmsLGpqRrLsIYCIkEgy09uxBR87FEymZOHU4wOIw0OY2eewibXvAMUIMtmYAw5JxMhESF19Rdwh4qYafm8phRo/s200/Kuva_2mp.jpg)
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
Ei kommentteja:
Lähetä kommentti