这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 玩转“DFRobot盖革计数器模块”准备工作认识模块知识分享

共5条 1/1 1 跳转至

玩转“DFRobot盖革计数器模块”准备工作认识模块知识分享

助工
2024-04-22 11:41:45   被打赏 30 分(兑奖)     打赏

DFRobot盖革计数器模块准备工作:

整体模块实物图:

1713756085787.jpg1713756161553.jpg

 

Gravity: 盖革计数器模块能测什么?

电离辐射。盖格计数器只能检测电离辐射,如核辐射、X光、宇宙射线等。无法检测电磁辐射,如微波炉辐射、手机辐射、WiFi辐射、电磁炉辐射。生活中我们不主动接触,不代表就遇不到能量较高的电离辐射,Gravity: 盖革计数器模块能测试天然大理石建材,色彩奇异的矿石宝石,成分不明的负离子粉等,都有可能含有数量不等的放射性元素。使用盖格计数器,就能让这些放射源无处遁形。

DFRobot新品-Gravity:盖革计数器模块
Gravity: 盖革计数器模块的工作原理:

Gravity: 盖革计数器模块的盖革管的两极分别连接在外壳和中间的金属丝上,没有直接相连。管子内填充有稀薄的特制气体。在两极上施加一个高电压,默认情况下由于气体不导电,没有信号输出,当有高能粒子(也就是所谓辐射)射入盖革管,它携带的能量会使盖革管内气体电离(导电),两极短暂接通,输出一个信号,蜂鸣器叫一声,叫得越频繁CPM越高,说明进入盖革管的高能粒子数量越多,辐射就越强。DFRobotArduino库可以通过一个系数,将CPM换算为辐射单位μSv/h

Gravity: 盖革计数器模块的安全范围,多少算正常?
Gravity: 盖革计数器模块的最大量程是1200 μSv/h (理论值)。最小值就等于当地的背景辐射强度(注意:最小值不稳定,因为生活中干扰太多,太阳直射都会导致读数波动);它的供电电压:3.3V ~ 5V,信号输出:数字输出,检测到脉冲时下拉;驱动电压:≈400V

生活中辐射的安全范围,多少算正常?
辐射的单位分为辐射强度单位和剂量单位,μSv/h是辐射强度,在100μSv/h的环境里呆了1小时,那就是吃了100μSv剂量的辐射;
辐射强度大不代表不安全,比如去医院拍X光、CT都会有很强的辐射强度,但是只拍一下就结束了,不会影响身体健康;
评价辐射安全的指标是年吸收剂量,一般人是一年2.4mSv2400μSv),放射性行业工作人员的推荐上限是一年20mSv
辐射强度足够大也可以秒杀,核电站规定1mSv/h以上为高辐射区域,需要有围栏和警告标志避免误入。
Gravity: 盖革计数器模块使用注意事项

本产品不是专业测量仪器,仅适用于原理研究与教学演示。不可用于直接影响人身安全的辐射剂量测量。

盖革管易碎,使用时请轻拿轻放
盖格计数器只能检测电离辐射,如核辐射、X光、宇宙射线等。无法检测电磁辐射,如微波炉辐射、手机辐射、WiFi辐射、电磁炉辐射。
M4011 型盖革管可以检测到 α 射线、β 射线、γ 射线。其中对硬 β 射线和 γ 射线可以定量测量。
暴露在强光下可能导致盖革计数器读数偏高,请避免阳光直射盖革管
盖革管使用高达 400V 的电压驱动,通电后禁止触摸盖革管正极附近高压电路

结节照片:


 

技术参数

盖革计数器

  • 供电电压:3.3V ~ 5V

  • 信号输出:数字输出,检测到脉冲时下拉

  • 驱动电压:≈400V

  • 最大量程:1200 μSv/h (理论值)

  • 外形尺寸:107mm × 42mm

M4011 盖革管

  • 工作电压:380V ~ 450V

  • 本底计数:≈25CPM

  • CPM比率:153.8 CPM/(μSv/h)

  • 外形尺寸:Φ10mm × 88mm


功能说明

  1. 引脚

    • - 电源负极

    • + 电源正极

    • D 信号输出

  2. 开关

    • 信号蜂鸣器开关

使用教程

准备

硬件

  • Arduino UNO x1

  • Gravity: 盖革计数器模块

  • Gravity 3Pin 连接线

Gravity: 盖革计数器 Arduino

https://github.com/cdjq/DFRobot_Geiger

 

官方示例程序

/*!
  @file geiger.ino
  @brief 检测CPM辐射强度,开始几次的读数可能有较大偏差,3次后数据趋于稳定
  @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
  @licence     The MIT License (MIT)
  @author [fengli](li.feng@dfrobot.com)
  @version  V1.0
  @date  2021-9-17
  @get from https://www.dfrobot.com
  @https://github.com/DFRobot/DFRobot_Geiger
*/

#include <DFRobot_Geiger.h>
#if defined ESP32
#define detect_pin D3
#else
#define detect_pin 3
#endif
/*!
   @brief Constructor
   @param pin 外部中断引脚
*/
DFRobot_Geiger  geiger(detect_pin);

void setup()
{
  Serial.begin(115200);
  //开始计数,启用外部中断
  geiger.start();
}

void loop() {
  //开始计数,启用外部中断
  //geiger.start();
  delay(3000);
  //暂停计数,关闭外部中断触发,CPM和辐射强度值保持在暂停前状态
  //geiger.pause();
  //获取当前CPM,若已暂停,则CPM为暂停前最后数值
  //通过3秒内的下降沿脉冲预测CPM,误差为±3CPM
  Serial.println(geiger.getCPM());
  //获取当前nSv/h,若已暂停,则nSv/h为暂停前最后数值
  Serial.println(geiger.getnSvh());
  //获取当前μSv/h,若已暂停,则μSv/h为暂停前最后数值
  Serial.println(geiger.getuSvh());
}

ESP8266示例:

// 引入Arduino核心库  
#include <Arduino.h>  
  
// 引入U8g2库,用于驱动OLED屏幕  
#include <U8g2lib.h>  
  
// 检查是否定义了U8X8_HAVE_HW_SPI,如果定义了,则引入SPI库,用于硬件SPI通信  
#ifdef U8X8_HAVE_HW_SPI  
#include <SPI.h>  
#endif  
  
// 检查是否定义了U8X8_HAVE_HW_I2C,如果定义了,则引入Wire库,用于硬件I2C通信  
#ifdef U8X8_HAVE_HW_I2C  
#include <Wire.h>  
#endif  
  
// 初始化U8g2对象,用于控制OLED屏幕  
// 参数为:屏幕类型,复位引脚(这里不使用,设为U8X8_PIN_NONE),时钟引脚SCL,数据引脚SDA  
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA);  
  
// 引入ESP-NOW库,用于ESP8266之间的无线通信  
#include <WifiEspNow.h>  
  
// 引入ESP8266 WiFi库,用于管理WiFi连接  
#include <ESP8266WiFi.h>  
  
// 注释说明:先烧录程序,通过串口打印本机MAC地址,然后记录下来  
// 对于两个设备,A设备使用B设备的MAC地址,B设备使用A设备的MAC地址  
  
// 接收设备的MAC地址,需要根据每个设备进行修改  
static uint8_t PEER[] {0xCA, 0x2B, 0x96, 0x2F, 0x68, 0x95}; // b设备的MAC地址  
  
// 注释掉的MAC地址是a设备的MAC地址,如果需要,可以取消注释并修改  
//atic uint8_t PEER[] {0xA6, 0xCF, 0x12, 0xEF, 0x75, 0x82}; // a设备的MAC地址  
  
// 加密通信使用的16进制密钥,可以自定义更改  
static uint8_t key[] = {  
  0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,  
  0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF  
};  
  
// 定义按钮和LED引脚  
int btn_open = 5; // 打开按钮引脚  
int btn_close = 14; // 关闭按钮引脚  
int led = 2; // LED引脚  
  
void setup()  
{  
  // 初始化串口通信,波特率为115200  
  Serial.begin(115200);  
  Serial.println();  
  
  // 初始化OLED屏幕  
  u8g2.begin();  
  
  // 启用UTF-8字符打印  
  u8g2.enableUTF8Print();  
  
  // 初始化IO引脚  
  IO_init();  
  
  // 设置AP模式并打印本机MAC地址  
  SetAP();  
  
  // 初始化ESP-NOW  
  Init_ESP_NOW();  
}  
  
void loop()  
{  
  // 检查按钮事件  
  btn_Event();  
}  
  
// 初始化IO引脚  
void IO_init()  
{  
  // 设置按钮引脚为输入模式,启用内部上拉电阻  
  pinMode(btn_open, INPUT_PULLUP);  
  pinMode(btn_close, INPUT_PULLUP);  
  
  // 设置LED引脚为输出模式  
  pinMode(led, OUTPUT);  
  
  // 初始化LED为关闭状态  
  digitalWrite(led, HIGH); // 假设LED在HIGH状态下关闭,这取决于LED和电路的实际连接  
}  
  
// 按钮事件检测  
void btn_Event()  
{  
  // 检查打开按钮是否被按下  
  if (digitalRead(btn_open) == LOW)  
  {  
    // 发送"打开"数据  
    Send_data("打开");  
  
    // 等待200毫秒



// 定义一个长度为6的uint8_t数组,用于存储MAC地址  
uint8_t mac[6];  
  
// 获取当前AP模式的MAC地址,并存储在mac数组中  
WiFi.softAPmacAddress(mac);  
  
// 打印一个空行  
Serial.println();  
  
// 打印提示信息,告诉用户可以将以下MAC地址粘贴到其他设备的程序中  
Serial.println("您可以将以下内容粘贴到其他设备的程序中:");  
  
// 使用printf格式化输出MAC地址,以十六进制形式显示  
Serial.printf("static uint8_t PEER[]{0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X};\n", mac[0],  
               mac[1], mac[2], mac[3], mac[4], mac[5]);  
  
// 打印一个空行  
Serial.println();  
  
// 初始化ESP-NOW通信  
void Init_ESP_NOW()  
{  
  // 尝试开始ESP-NOW,如果成功返回true,否则返回false  
  bool ok = WifiEspNow.begin();  
  
  // 如果初始化失败,打印错误信息并重启ESP8266  
  if (!ok) {  
    Serial.println("WifiEspNow.begin() 失败");  
    ESP.restart();  
  }  
  
  // 设置当接收到ESP-NOW数据时调用的回调函数  
  WifiEspNow.onReceive(printReceivedMessage, nullptr);  
  
  // 尝试添加通信对端设备,需要指定对端MAC地址、通信通道和密钥  
  ok = WifiEspNow.addPeer(PEER, 3, key);  
  
  // 如果添加对端失败,打印错误信息并重启ESP8266  
  if (!ok) {  
    Serial.println("WifiEspNow.addPeer() 失败");  
    ESP.restart();  
  }  
}  
  
// ESP-NOW发送数据函数  
void Send_data(String str)  
{  
  // 定义一个字符数组,用于存储待发送的数据  
  char data[60];  
  
  // 获取字符串长度  
  int len = str.length();  
  
  // 将字符串内容复制到字符数组中,注意限制长度不超过60  
  for (int i = 0; i < len; i++)  
  {  
    if (i > 59) // 注意这里应该是i > 59而不是i > 60,否则最后一个字符不会被复制  
    {  
      break;  
    }  
    data[i] = str[i];  
  }  
  
  // 发送数据,使用ESP-NOW通信  
  bool f = WifiEspNow.send(PEER, reinterpret_cast<const uint8_t*>(data), len);  
  
  // 打印发送的数据内容  
  Serial.println("发送数据:" + str);  
  
  // 根据发送结果打印成功或失败信息  
  if (f)  
  {  
    Serial.println("发送成功");  
  }  
  else  
  {  
    Serial.println("发送失败");  
  }  
}  
  
// ESP-NOW数据接收回调函数  
void printReceivedMessage(const uint8_t mac[WIFIESPNOW_ALEN], const uint8_t* buf, size_t count,  
                          void* arg)  
{  
  // 将接收到的数据转换为字符串  
  String data = "";  
  for (int i = 0; i < static_cast<int>(count); ++i) {  
    data += char(buf[i]);  
  }  
  
  // 调用数据处理函数  
  Handler(data);  
}  
  
// 数据接收处理函数  
void Handler(String read_data)  
{  
  // 如果接收到的数据不为空  
  if (read_data != "")  
  {  
    // 打印接收到的数据  
    Serial.println("收到数据:" + read_data);  
  
    // 根据接收到的数据内容执行相应操作  
    if (read_data == "打开")  
    {  
      // 关闭LED(假设LED在0为关闭状态)  
      digitalWrite(led, 0);  
  
      // 清除OLED屏幕内容  
      u8g2.clearBuffer();  
  
      // 设置字体  
      u8g2.setFont(u8g2_font_wqy13_t_gb2312);  
  
      // 设置光标位置  
      u8g2.setCursor(25, 10);

尺寸图:

image.png


高工
2024-04-22 14:52:39     打赏
2楼

好全面啊  


高工
2024-04-22 17:03:54     打赏
3楼

谢谢分享


院士
2024-04-23 10:49:40     打赏
4楼

帖子里面的ESP8266看了半天,终于发现其和文章貌似没有啥关系


工程师
2024-04-29 09:41:54     打赏
5楼

学习了。


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]