Location Aware Sensing System (LASS) Use POCKET Geiger Arduino Example code changed to mbed code http://www.radiation-watch.org/2011/05/professional.html
Revision 0:558eaaae3f2b, committed 2016-09-02
- Comitter:
- royedfa5229
- Date:
- Fri Sep 02 02:56:26 2016 +0000
- Commit message:
- Location Aware Sensing System (LASS); Use POCKET Geiger http://www.radiation-watch.org/2011/05/professional.html
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 558eaaae3f2b main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Sep 02 02:56:26 2016 +0000 @@ -0,0 +1,149 @@ +#include "mbed.h" + +Serial pc(USBTX, USBRX); // tx, rx +DigitalIn signPin(p21); //Radiation Pulse (Yellow) +DigitalIn noisePin(p22); //Vibration Noise Pulse (White) +Timer t; + +const double alpha = 53.032; // cpm = uSv x alpha + +int index = 0; //Number of loops +char msg[256] = ""; //Message buffer for serial output + +int signCount = 0; //Counter for Radiation Pulse +int noiseCount = 0; //Counter for Noise Pulse + +int sON = 0; //Lock flag for Radiation Pulse +int nON = 0; //Lock flag for Noise Puls + +double cpm = 0; //Count rate [cpm] of current +double cpmHistory[200]; //History of count rates +int cpmIndex = 0; //Position of current count rate on cpmHistory[] +int cpmIndexPrev = 0; //Flag to prevent duplicative counting + +//Timing Settings for Loop Interval +int prevTime = 0; +int currTime = 0; + +int totalSec = 0; //Elapsed time of measurement [sec] +int totalHour = 0; //Elapsed time of measurement [hour] + +//Time settings for CPM calcuaration +int cpmTimeMSec = 0; +int cpmTimeSec = 0; +int cpmTimeMin = 0; + +//String buffers of float values for serial output +char cpmBuff[20]; +char uSvBuff[20]; +char uSvdBuff[20]; + +int main() { + //9600bps + pc.baud(9600); + + //PIN setting for Radiation Pulse + signPin.mode(PullUp); + //PIN setting for Noise Pulse + noisePin.mode(PullUp); + + //CSV-formatting for serial output (substitute , for _) + pc.printf("hour[h]_sec[s]_count_cpm_uSv/h_uSv/hError"); + + //Initialize cpmHistory[] + for (int i = 0; i < 200; i++) { + cpmHistory[i] = 0; + } + t.start(); + + while (1) { + // Raw data of Radiation Pulse: Not-detected -> High, Detected -> Low + int sign = signPin; + // Raw data of Noise Pulse: Not-detected -> Low, Detected -> High + int noise = noisePin; + //Radiation Pulse normally keeps low for about 100[usec] + if (sign == 0 && sON == 0) { //Deactivate Radiation Pulse counting for a while + sON = 1; + signCount++; + } else if (sign == 1 && sON == 1) { + sON = 0; + } + //Output readings to serial port, after 10000 loops + if (index == 10000) //About 160-170 msec in Arduino Nano(ATmega328) + { + //Get current time + currTime = t.read_ms(); + //No noise detected in 10000 loops + if (noiseCount == 0) { + //Shift an array for counting log for each 6 sec. + if (totalSec % 6 == 0 && cpmIndexPrev != totalSec) { + cpmIndexPrev = totalSec; + cpmIndex++; + + if (cpmIndex >= 200) { + cpmIndex = 0; + } + + if (cpmHistory[cpmIndex] > 0) { + cpm -= cpmHistory[cpmIndex]; + } + cpmHistory[cpmIndex] = 0; + } + + //Store count log + cpmHistory[cpmIndex] += signCount; + //Add number of counts + cpm += signCount; + + //Get ready time for 10000 loops + cpmTimeMSec += abs(currTime - prevTime); + //Transform from msec. to sec. (to prevent overflow) + if (cpmTimeMSec >= 1000) { + cpmTimeMSec -= 1000; + //Add measurement time to calcurate cpm readings (max=20min.) + if (cpmTimeSec >= 20 * 60) { + cpmTimeSec = 20 * 60; + } else { + cpmTimeSec++; + } + + //Total measurement time + totalSec++; + //Transform from sec. to hour. (to prevent overflow) + if (totalSec >= 3600) { + totalSec -= 3600; + totalHour++; + } + } + + //Elapsed time of measurement (max=20min.) + double min = cpmTimeSec / 60.0; + if (min != 0) { + //Calculate cpm, uSv/h and error of uSv/h + sprintf(cpmBuff, "%f", cpm / min); + sprintf(uSvBuff, "%f", cpm / min / alpha); + sprintf(uSvdBuff, "%f", sqrt(cpm) / min / alpha); + } else { + //Devision by zero + sprintf(cpmBuff, "%f", 0.0); + sprintf(uSvBuff, "%f", 0.0); + sprintf(uSvdBuff, "%f", 0.0); + } + + //Create message for serial port + sprintf(msg, "%d,%d.%03d,%d,%s,%s,%s",totalHour,totalSec,cpmTimeMSec,signCount,cpmBuff,uSvBuff,uSvdBuff); + + //Send message to serial port + pc.puts(msg); + pc.printf("\r\n"); + } + + //Initialization for next 10000 loops + prevTime = currTime; + signCount = 0; + noiseCount = 0; + index = 0; + } + index++; + } +}
diff -r 000000000000 -r 558eaaae3f2b mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Sep 02 02:56:26 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/b0220dba8be7 \ No newline at end of file