论坛» 活动中心» 板卡试用

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

助工
2024-04-22 11:41 1楼

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  #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  // 引入U8g2库,用于驱动OLED屏幕 #include  // 检查是否定义了U8X8_HAVE_HW_SPI,如果定义了,则引入SPI库,用于硬件SPI通信 #ifdef U8X8_HAVE_HW_SPI #include  #endif // 检查是否定义了U8X8_HAVE_HW_I2C,如果定义了,则引入Wire库,用于硬件I2C通信 #ifdef U8X8_HAVE_HW_I2C #include  #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  // 引入ESP8266 WiFi库,用于管理WiFi连接 #include  // 注释说明:先烧录程序,通过串口打印本机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(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(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 2楼

好全面啊

高工
2024-04-22 17:03 3楼

谢谢分享

院士
2024-04-23 10:49 4楼

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

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

学习了。

共5条 1/1 1 跳转至

回复

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