lauantai 14. lokakuuta 2017

KORKEAMPI JÄNNITE II

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