Arduino盖革计数器DIY图解

电子说

1.2w人已加入

描述

Step 1:工具和零件

原型盒我使用的是Ferrero Rocher糖果盒。

小型面包板

16x2 LCD

Arduino板以太网一个UNO或Nano

220Ω电阻器

电位器10kΩ可调电阻器。

DIY盖革计数器套件

跳线

电池连接器或线束

示波器

精细钳子

小型标准螺丝刀

第2步:组装Geiger计数器

Geiger Tube有任何损坏;并且你的盖革计数器不起作用,所以使用保护性丙烯酸盖子以防止损坏你的盖革管。

这个Instructable是关于如何用Geiger管破坏修复同一个盖革计数器并安装保护装置丙烯酸覆盖,以防止将来破损。

https://www.instructables.com/id/Repairing-a-DIY-G 。..

步骤3:电气测试盖革计数器

Arduino

Arduino

首先使用正确的电源电压; USB线直接从您的计算机提供5伏直流电,但3节AA电池座用于1.5伏碱性电池,总电压为4.5伏。如果您使用1.2伏可充电NI-Cd或NI-MH电池,则需要一个4 AA电池座,总电压为4.8伏。如果使用的电压低于4.5伏,盖革计数器可能无法正常工作。

盖革计数器输出电路很少;所以只要扬声器发出滴答声,并且LED闪烁,就应该在VIN引脚上发出信号。

确保输出信号;通过将示波器探头的正极连接到VIN,将示波器探头的负极连接到地,将示波器连接到输出。

而不是仅仅等待背景辐射来触发盖革计数器I使用来自烟雾探测器离子室的americ -241来增加盖革计数器的反应。 Geiger计数器的输出开始于+3伏特,每次盖革管对α粒子反应时降至0伏特,片刻后返回+3伏特。这是你将用Arduino录制的信号。

第4步:布线

有两种方法可以将Geiger计数器连接到Arduino和您的计算机。

将Arduino上的GND连接到Geiger计数器上的GND。

将Arduino上的5V连接到Geiger计数器上的5V。

将Geiger计数器上的VIN连接到Arduino上的D2。

连接独立电源Geiger计数器。

将Arduino上的GND连接到Geiger计数器的GND。

将Geiger计数器上的VIN连接到Arduino上的D2。

将Arduino连接到您的计算机。

步骤5:代码

Arduino

Arduino

Arduino

Arduino

Arduino

Arduino

打开Arduino IDE并加载代码。

//此草图计算每分钟的脉冲数。

//将Arduino上的GND连接到Geiger计数器的GND。

//将Arduino上的5V连接到Geiger计数器上的5V。

//将盖革计数器上的VIN连接到Arduino上的D2。

无符号长计数;//GM管事件的变量

unsigned long previousMillis;//用于测量时间的变量

void impulse(){//dipanggil setiap ada sinyal FALLING di pin 2

计数++;

}

#define LOG_PERIOD 60000//计数率

void setup(){//setup

counts = 0;

Serial.begin(9600);

pinMode(2,INPUT);

attachInterrupt(digitalPinToInterrupt(2),impulse,FALLING);//定义外部中断

Serial.println(“启动计数器”);

}

void loop(){//主循环

unsigned long currentMillis = millis();

if(currentMillis - previousMillis》 LOG_PERIOD){

previousMillis = currentMillis;

Serial.println(count );

计数= 0;

}

}

在工具中选择您正在使用的Arduino或其他电路板。

在工具中选择端口和通信

上传代码。

在工具中上传代码后,选择串行监视器并观察盖革计数器的工作情况。

寻找故障。关于这段代码的唯一事情就是有点乏味,每次计数必须等待1分钟。

步骤6:Serial.println与Serial.print

Arduino

Arduino

这是我在代码中发现的第一个故障之一;所以在你的代码中注意它,“Serial.println(cpm);”和“Serial.print(cpm);”。

Serial.println(cpm);将在每条线上打印每个计数。

Serial.print(cpm);看起来像一个大数字打印在同一行上的每个计数使得无法分辨计数是什么。

步骤7:J305背景辐射测量

Arduino

首先是背景辐射的测量,即自然存在的自然辐射。列出的数字是CPM(每分钟计数),它是每分钟测量的放射性粒子总数。

J305背景平均计数为15.6 CPM。

步骤8:J305烟雾传感器辐射的测量

Arduino

Geiger计数器反复给你相同的计数并不罕见,所以检查一下辐射源。我使用来自Americium的辐射测量,来自烟雾探测器的离子室。烟雾传感器利用Americ作为α粒子的来源,使空气中的烟雾粒子电离。我取下传感器上的金属盖,这样α和β粒子就可以与伽玛粒一起进入盖革管。

如果一切正常,计数应该会改变。

来自烟雾探测器离子室的Americ -241平均计数为519 CPM。

步骤9:SBM-20

Arduino

此Arduino草图是由Alex Boguslavsky编写的修改版本。

此草图在15秒内计算脉冲数,并将其转换为每分钟计数,使其不那么繁琐。

代码我添加了“Serial.println(”Start counter“);”。

代码我改变了; “Serial.print(cpm);”to“Serial.println(cpm);”。

“#define LOG_PERIOD 15000”;将计数时间设置为15秒,我将其更改为“#define LOG_PERIOD 5000”或5秒。我发现计数1分钟,或15秒和5秒之间的平均值没有明显差异。

#include

#define LOG_PERIOD 15000//记录周期(以毫秒为单位),推荐值15000-60000。

#define MAX_PERIOD 60000//不修改此草图的最长记录周期

无符号长计数;//GM管事件的变量

unsigned long cpm;//CPM的变量

unsigned int multiplier;//用于计算此草图中的CPM的变量

unsigned long previousMillis;//用于时间测量的变量

void tube_impulse(){//用于从Geiger Kit捕获事件的子程序

计数++;

}

void setup(){//setup subprocedure

counts = 0;

cpm = 0;

multiplier = MAX_PERIOD/LOG_PERIOD;//计算乘数,取决于你的日志周期

Serial.begin(9600);

attachInterrupt(0,tube_impulse,FALLING);//定义外部中断

Serial.println(“Start counter”);//我添加的代码

}

void loop(){//主循环

unsigned long currentMillis = millis();

if(currentMillis - previousMillis》 LOG_PERIOD){

previousMillis = currentMillis;

cpm = counts * multiplier;

Serial.println(cpm);//代码我改变了

计数= 0;

}

}

SBM-20背景平均计数为23.4 CPM。

步骤10:使用LCD连接盖革计数器

LCD连接:

LCD K引脚至GND

LCD A引脚至220Ω电阻至Vcc

LCD D7引脚至数字引脚3

LCD D6引脚至数字引脚5

LCD D5引脚至数字引脚6

LCD D4引脚至数字引脚7

LCD使能引脚至数字引脚8

LCD R/W引脚接地

LCD RS引脚至数字引脚9

LCD VO引脚调整10kΩ电位

LCD Vcc引脚至Vcc

LCD Vdd引脚连接到GND

电位器10kΩ可调电阻器。

Vcc,Vo,Vdd

盖革计数器

VIN转数字引脚2

5 V至+ 5V

GND接地

步骤11:带LCD的Geiger计数器

//包含库代码:

#include

#include

#define LOG_PERIOD 15000//记录周期(以毫秒为单位),建议值15000-60000。

#define MAX_PERIOD 60000//不修改此草图的最长记录周期

#define PERIOD 60000.0//(60秒)一分钟测量周期

易失性无符号长CNT ;//用于计算剂量计中断的变量

无符号长计数;//GM管事件的变量

unsigned long cpm;//CPM的变量

unsigned int multiplier;//用于计算此草图中的CPM的变量

unsigned long previousMillis;//用于时间测量的变量

unsigned long dispPeriod;//用于测量时间的变量

无符号长CPM;//用于测量CPM的变量

//使用接口引脚的编号初始化库

LiquidCrystal lcd(9,8,7,6,5,3);

void setup(){//setup

lcd.begin(16,2);

CNT = 0;

CPM = 0 ;

dispPeriod = 0;

lcd.setCursor(0,0);

lcd.print(“RH Electronics”);

lcd.setCursor(0,1);

lcd.print(“盖革计数器”);

延迟(2000);

cleanDisplay()

attachInterrupt(0,GetEvent,下降);//引脚2上的事件

}

void loop(){

lcd.setCursor(0,0);//在LCD上打印文本和CNT

lcd.print(“CPM:”);

lcd.setCursor(0,1);

lcd .print(“CNT:”);

lcd.setCursor(5,1);

lcd.print(CNT);

if(millis( )》 = dispPeriod + PERIOD){//如果一分钟结束

cleanDisplay();//清除LCD

//对累积的CNT事件做一些事情。..。..

lcd.setCursor(5,0);

CPM = CNT;

lcd.print(CPM);//显示CPM

CNT = 0;

dispPeriod = millis();

}

}

void GetEvent(){//从设备获取事件

CNT ++;

}

void cleanDisplay(){//清除LCD例程

lcd.clear();

lcd.setCursor(0,0);

lcd.setCursor(0,0);

}

步骤12:文件

将这些文件下载并安装到Arduino。

将每个.ino文件放在一个文件夹中同名。
        责任编辑:wv 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_20600360 2022-02-16
0 回复 举报
aa00112290 收起回复
jf_20600360 2022-02-16
0 回复 举报
在吗 收起回复
全部评论

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分