介绍:
辐射是我们周围不可见的现象,它无时无刻不在影响着我们的生活。为了让我们能更直观地感受到辐射的存在,并教育公众了解辐射的基本知识,我们设计了一个既实用又有趣的DIY桌面辐射探测器项目。跟随本教程,一步步制作属于自己的辐射探测器,将科学融入生活,感受辐射的神秘和奥妙!
准备材料:
步骤1 了解辐射和盖革计数器原理
在开始制作项目之前,了解一下辐射的基本知识以及盖革计数器的工作原理是非常必要的。盖革计数器是一种能够检测电离辐射的设备,它利用辐射粒子电离气体产生电流脉冲来检测辐射的存在。
生活中处处存在着各种辐射。众所周知,电磁波随着波长的减小,能量逐渐的增加。
一般来说电磁波对人体的危害是微乎其微的,当然大功率的电磁波仍然具有危害。
但电离辐射一般认为是对人体有所影响的。
在自然界,我们就能发现具有辐射的矿石,一些食物,例如香蕉也带有天然的辐射,一些老式的钟表盘面为了夜光功能也采用了带有辐射的材料制作而成。
我们治疗癌症采用的放疗设备,检测身体状态的 x 光设备,核电厂都有电离辐射的存在。
我们采用盖革米勒计数管来进行电离辐射的检测。
在计数器内部,有一个充满惰性气体的管子。当辐射粒子穿过这个管子时,它会电离气体,释放出自由电子。由于盖革-米勒管内部有一个高电压,这些电子会被吸引并向中心电极移动。在这个过程中,这些电子会与更多的气体分子碰撞,导致更多的电子被释放。这种连锁反应被称为电子雪崩,使得一个单一的辐射粒子可以产生大量的电子。当这些电子到达中心电极时,它们会产生一个可以被检测的电流脉冲。这时候盖革计数器就计数一次。
步骤2 组装硬件
首先,将盖革计数器模块连接到ESP32主控板上,然后连接锂电池。确保所有的连接都是牢固和正确的。
步骤3 编写和上传代码
编写代码来读取盖革计数器的数据,并将辐射水平显示在电子墨水显示屏上。将代码上传到ESP32主控板上。
// include library, include base class, make path known
#include <GxEPD.h>
#include "SPI.h"
// 由于屏幕有多个版本,如下载程序后出现花屏请将下面4个头文件都测试一遍!
#include <GxDEPG0213BN/GxDEPG0213BN.h>
//#include <GxGDE0213B1/GxGDE0213B1.h> // 2.13" b/w
//#include <GxGDEH0213B72/GxGDEH0213B72.h> // 2.13" b/w new panel
//#include <GxGDEH0213B73/GxGDEH0213B73.h> // 2.13" b/w newer panel
int bmpWidth = 232, bmpHeight = 52;
//width:150,height:39
// FreeFonts from Adafruit_GFX
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>
#define SPI_MOSI 23
#define SPI_MISO -1
#define SPI_CLK 18
#define ELINK_SS 5
#define ELINK_BUSY 4
#define ELINK_RESET 16
#define ELINK_DC 17
#define SDCARD_SS 13
#define SDCARD_CLK 14
#define SDCARD_MOSI 15
#define SDCARD_MISO 2
#define BUTTON_PIN 39
#define GEIGER_PIN 33
GxIO_Class io(SPI, /*CS=5*/ ELINK_SS, /*DC=*/ ELINK_DC, /*RST=*/ ELINK_RESET);
GxEPD_Class display(io, /*RST=*/ ELINK_RESET, /*BUSY=*/ ELINK_BUSY);
SPIClass sdSPI(VSPI);
const char *Website = "www.dfrobot.com";
bool sdOK = false;
int startX = 9, startY = 20;
int Count = 0;
int Total = 0;
bool Changed;
void callBack(void)
{
int level = digitalRead(GEIGER_PIN);
// Serial.printf("%d\n", level);
if(level == 0) {
Count++;
Changed = true;
}
}
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println("setup");
pinMode(GEIGER_PIN, INPUT); //GPIO_13,输出模式
attachInterrupt(GEIGER_PIN, callBack, CHANGE); //当电平发生变化时,触发中断
SPI.begin(SPI_CLK, SPI_MISO, SPI_MOSI, ELINK_SS);
display.init(); // enable diagnostic output on Serial
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setFont(&FreeMonoBold12pt7b);
display.update();
// goto sleep
// esp_sleep_enable_ext0_wakeup((gpio_num_t)GEIGER_PIN, LOW);
// esp_deep_sleep_start();
}
void loop()
{
if(Changed)
{
char buf[50];
Total += Count;
display.fillScreen(GxEPD_WHITE);
//display.fillRect(0, 95, 200, 10, GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
sprintf(buf, "R %.2f uSv/h", Count * 2 / 153.8);
display.setCursor(20, 70);
display.println(buf);
sprintf(buf, "C %d", Total);
display.setCursor(20, 90);
display.println(buf);
//display.updateWindow(0, 61, 250, 61, false);
display.update();
Changed = false;
Count = 0;
}
delay(30000);
}
步骤4 安装到外壳
将所有的硬件组件安装到外壳中,确保它们被牢固地固定在位。
步骤5 测试和使用 打开设备,并在不同的场合和位置测试它,探索辐射的神秘世界,感受辐射的存在!
注意:
本项目仅适用于教育和研究目的,不能作为专业的辐射测量设备来使用。如果您发现辐射水平突然上升,请仔细检查周围环境,避免与可能的辐射源接触。
结语: 希望你喜欢这个项目,并从中学到了有关辐射和盖革计数器的知识。如果你有任何问题或建议,欢迎在下面的评论区留言。一起探索辐射的神秘世界,做出自己的辐射探测器,让生活更加科学有趣!
附件
许培享2024.01.15
神奇小子
qzs19822023.10.14
代码看不懂,看上去帅
hacker_2023.10.10
6666