====== Software ======
Check it out on github: https://github.com/apollo-ng/PiGI
===== Overview =====
==== pyGI Server ====
The pyGi server component is implemented in python and uses the RPi.GPIO python library to take care of handling the interrupts, generated by the impulses coming from the PiGI.
A LevelDB instance stores the collected data and websockets are used for the distribution of live and historical data to connected clients (webGI).
Naturally, it also provides an HTTP module to deliver the actual webGI client, so that any user can access the geiger counter without having to install native software first.
==== webGI Client ====
A kinda bleeding edge mobile-first HTML5/CSS3 Websocket based web client, than can be used in latest open source browsers like chromium & firefox.
==== Preliminary Dev Screenshots ====
[{{:lab:webgi-mainpanel.jpg?185|Main Instrument View}}]
[{{:lab:webgi-historypanel.jpg?183|History View}}]
[{{:lab:webgi-tracevisualizer.jpg?185|Ion Trace Visualizer}}]
~~CL~~
In the future, with more time and the help of other enthusiastic developers, there will also be a ready-to-download image, with kernel, OS and counting, logging & data sharing infrastructure, which just needs to be copied to the SD card so that it works out-of-the-box.
===== Installation =====
==== Dependencies ====
We've tried to keep external dependencies to a minimum to make it easily
deployable on any flavor of open-source operating system. If you deploy it
successfully on any other OS, please update this:
=== Currently tested versions ===
* greenlet-0.4.2
* bottle-0.12.4
* gevent-1.0
* gevent-websocket-0.9.3
=== Ubuntu/Raspbian ===
$ sudo apt-get install python-pip python-dev libevent-dev
$ sudo pip install ez-setup
$ sudo pip install leveldb greenlet bottle gevent gevent-websocket
=== Gentoo ===
$ emerge -av dev-libs/libevent dev-python/pip
$ pip install ez-setup
$ pip install leveldb greenlet bottle gevent gevent-websocket
=== Raspberry PI deployment ===
If you want to deploy the code on a PI for production in order to count
values from a real GM tube connected to the PiGI-Module, you have to make
sure to satisfy the RPi.GPIO dependency:
$ pip install RPi.GPIO
This only applies to non-Raspbian installations, since Raspbian ships
RPi.GPIO with the default installation.
==== Cloning the repository ====
$ git clone https://github.com/apollo-ng/PiGI.git
===== Configuration =====
PyGI checks 3 configuration files, if existent in conf/, updating the
values defined in the file before or using new ones, in the following order:
* default.cfg (automatically comes shipped per default with examples)
* local.cfg (create this file to override local server settings - gitignored)
* dynamic.cfg (this file will be created automatically,
if the webGI client wants to change server settings - also gitignored)
When you are deploying on the Pi to count real values and/or want to
change the Web Server/Socket port to 80 rather than 8080 __you have to
run the software as root__. Otherwise the interrupt handling on the Pi
won't work and port 80 will not be accessible due to security (<1024).
===== Usage =====
==== Server Startup ====
$ cd PiGI/software/
$ python pyGIserver.py
==== Client Access ====
Open a browser and go to http://127.0.0.1:8080
===== License =====
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
===== Notes =====
==== GeigerJSON Template ====
{
"type" : "geigerjson",
"timestamp": 1393878981,
"geostamp": {
"lat": 48
"lon": 11,
"alt": 560
}
"node_uuid":"9b70c59c-a313-11e3-a61f-001f161087c0",
"parameters": {
"tube_id" : "LND712",
"dead_time" : 0.000190,
"tube_factor" : 0.00233,
"opmode" : "[stationary|mobile]"
"window": "[abc|bc|c]"
},
"data" : {
"source": "[sim|test|env]",
"cps" : 10,
"cps_dtc" : 11,
"cpm" : 600,
"cpm_dtc" : 610,
"totalcount" : 12345,
"totalcount_dtc" : 12456,
"edr" : 0.89,
"edr_avg_15m" : 0.90
},
"annotation" : "my radioactive moment"
}
==== INES Scale for reference ====
{{:lab:pigi:ines_scale.png?200|}}
==== Pulse size or collected charge ====
The GM tube output is a short charge pulse with an amplitude that is independent of the energy of the detected radiation. It just tells you that the incoming radiation had enough energy to be detected, but not how much. That leads to the question of how to calculate some other values out of the measured count rate.
==== Convert CPM to uSv/h ====
As discussed above, the GM tube doesn't know the energy of the detected radiation and also the count rate (R) depends on the tube specifications. Which means if you want to calculate a radiation dose per time (D) you can't calculate the correct value because you don't have all the information. All you can do is calculate a value as if you had radiation from Co-60, Cs-137, Sr-90 or some other radioactive isotope.
D = R * conversion factor
So to get from cpm to µSv/h (only units here, not really a correct equation):
µSv/h = cpm * tube and energy specific conversion factor
==== Common-List of Tube-Conversion-Factors ====
[[lab:pigi:common-geiger-tube-parameter]]
==== Effect of Dead-Time on Counts ====
In terms of GM tubes the Dead-Time is the time after an event in which the tube will not register another count. Positive ions close to the anode reduce the intense electric field so that approaching electrons do not gain enough energy to start new avalanches. The GM tube is then inoperative (dead) for the time required for the ions to migrate outward far enough for the field gradient to recover above the avalanche threshold. The time required for recovery to a value high enough for a new pulse to be generated and counted is called the "Dead-Time" and is of the order of 100 μs (microseconds).
[([[http://www.csupomona.edu/~pbsiegel/phy432/labman/geiger.pdf|Introduction to Geiger Counters]])]
[([[http://www2.astro.psu.edu/~niel/astro485/derivations/geiger1.pdf|THE GEIGER COUNTER and COUNTING STATISTICS]])]
To correct for this statistical error one has to calculate the actual (corrected) rate R with the measured (observed) rate and the tube specific Dead-Time.
=== Formula ===
R_{corrected} = R_{observed} / {1 - (R_{observed} * t_{dead})}
=== Example ===
Count rate R is 87,55 CPS (counts per second) with an SBM-20 tube.\\
\\
R_{observed} = 87.55 1/s \\
The Dead-Time for this tube is listed as 190 uS.\\
t_{dead} = 190 µs = 0.000190s
R_{corrected} = {87.55 1/s} / {1 - ((87.55 1/s) * 0.000190s)} = 87.55 / 0.98337 1/s = 89.03 1/s
\\
This means that the tube statistically missed 1,48 counts per second. The actual (corrected) rate is 89,03 CPS.
~~REFNOTES~~
Measurements with the LND712 showed a longer dead time than the datasheet advertised (about 120-150us). Moving up higher in the plateau also seemed to increase the dead time. For perfect operating conditions, the tube voltage should be set to a value within the advertised operating range and then fine tuned to decrease the dead time to the lowest possible value, without affecting the tubes.
~~DISCUSSION~~
{{tag>pigi raspberry pi geigercounter power hack software}}
{{keywords>Apollo-NG apollo next generation hackerspace hacker space research development makerspace fablab diy community open-resource open resource mobile hackbus raspberry pi raspberrypi geiger counter geigercounter radioactive cpm radioactivity fallout nuclear reactor}}