1. 项目概述当经典物理仪器遇上流行文化情怀作为一名电子爱好者和物理背景的玩家我一直对能“看见”不可见世界的仪器着迷。盖革计数器就是这样一个经典的存在它用清脆的“咔嗒”声将无形的电离辐射转化为我们可感知的信号。市面上能买到的成品要么过于工业风要么价格不菲于是自己动手做一个的念头就冒了出来。最初的计划很简单用Arduino搭一个能计数、能显示的盖革计数器。直到一位朋友看到半成品电路板时随口说了一句“这玩意儿看起来真像《捉鬼敢死队》里的那个PKEPsycho-Kinetic Energy探测仪” 这句话瞬间点燃了我的创作火花——为什么不呢将一款严肃的科学仪器套上80年代经典科幻电影的复古外壳让它在探测到辐射时不仅能响、能显示还能像电影道具一样展开“翅膀”并闪烁灯光这无疑会让整个项目从单纯的“功能实现”升级为充满趣味的“作品创作”。这个基于Arduino的PKE造型盖革计数器项目核心目标就是打造一个功能完整、造型独特、可玩性高的个人辐射监测设备。它不仅能定量测量环境γ射线和硬β射线的强度还能通过声、光、机械动作提供多感官反馈。项目适合有一定电子焊接和Arduino编程基础的爱好者或者任何对辐射探测、开源硬件和创意制作感兴趣的朋友。即使你是新手只要跟着步骤一步步来并理解每个环节背后的“为什么”也能成功复现。整个制作过程你会接触到高压电路处理、微控制器中断编程、伺服电机控制、3D打印后处理等多个技能点是一次非常综合的练手机会。2. 核心硬件选型与电路设计思路2.1 探测核心盖革-米勒管的选择与原理盖革计数器的“心脏”是盖革-米勒管Geiger-Müller Tube我们常简称为盖革管。我选择了在DIY圈内非常流行的SBM-20型。这是一款来自前苏联时代的金属陶瓷管性价比极高常用于检测γ射线和硬β射线。它的工作原理是这样的管内充有低压的惰性气体如氩、氖和少量猝灭气体如乙醇、卤素。在管壁阴极和中心细丝阳极之间我们需要施加一个相对较高的直流电压对于SBM-20这个电压通常在400V左右。在无辐射时管内气体不导电。当有一个高能辐射粒子如γ光子穿过管壁并与气体分子发生相互作用可能产生一个自由电子。这个电子在强电场中被加速获得足够动能后又会撞击其他气体分子产生更多的电子如此链式反应瞬间在阳极产生一个可被检测到的电流脉冲就像一场微观的“雪崩”。这个脉冲经过后续电路处理就变成了我们听到的那一声“咔嗒”。注意盖革管是脆弱的玻璃或金属陶瓷制品尤其是阳极丝极其纤细。绝对不要尝试弯曲管脚或让管体承受机械应力。我选择使用6.3mm的保险丝夹来固定和连接SBM-20而不是直接焊接这能有效避免因热应力或操作不当损坏这个最贵的核心元件。2.2 高压生成升压模块的配置与安全考量SBM-20需要400V的工作电压而我们的系统主电源是3.7V的锂电池所以一个升压模块必不可少。我选用了一种常见的**“5-12V转300-1200V可调”** 的微型高压发生器模块。这类模块基于振荡和倍压整流原理效率不错且体积小巧。安全是第一要务。在连接高压模块输出到盖革管之前必须使用数字万用表最好有高压探头精确调整其输出电压至400V。调整模块上的微型电位器同时监测输出端电压。调整时确保模块空载或仅接有测试用的高阻值电阻调整完毕并断电后再连接盖革管。高压模块的输出端即使断电后也可能有电荷残留操作前先用一个电阻对地短接放电是个好习惯。整个高压部分模块输出端、连接线、盖革管电极在通电后都应避免徒手触碰并用热缩管或绝缘胶带做好绝缘。2.3 主控与供电Arduino Nano与电源管理主控制器我选择了Arduino Nano因为它体积小巧、引脚齐全非常适合嵌入到这种紧凑的项目中。它的任务很重需要处理来自盖革管的脉冲信号、驱动OLED显示屏、控制14颗LED和1个伺服电机、监测电池电压还要让蜂鸣器发出“咔嗒”声。供电方案采用单节18650锂离子电池搭配一个带充放电保护功能的TP4056充电管理模块。这里有个关键细节一定要选择那种有独立“B B-”接电池和“OUT OUT-”接负载引脚的保护板。这种设计能将充电/保护电路与负载回路在一定程度上隔离更稳定。我最初用的是一体化模块曾遇到即使关闭了主开关Arduino仍通过某条路径被微量供电的问题后来更换为分体式模块解决了。电池本身我强烈建议选择LG、松下、三星等知名品牌的动力型18650避免使用任何名称中带“Fire”字样的电池安全无小事。2.4 信号调理与输出部分设计盖革管输出的脉冲幅度很高约几百毫伏到几伏但电流极小且脉宽很窄。我们需要一个简单的信号调理电路将其转换为Arduino能可靠识别的数字脉冲。我采用了经典的单晶体管放大与整形电路脉冲耦合盖革管阳极通过一个10MΩ的限流电阻接到高压正极。这个电阻至关重要它限制了盖革管放电后的恢复电流防止连续放电。电容耦合从盖革管阳极通过一个470pF的电容取出交流脉冲信号隔断直流高压。晶体管放大脉冲信号送入2N3904 NPN晶体管的基极。晶体管工作在开关状态当有脉冲到来时瞬间导通其集电极电压从高电平通过一个10kΩ上拉电阻接到5V被拉低产生一个清晰的下降沿。输出集电极直接连接到Arduino Nano的一个外部中断引脚如D2。这样每一个辐射粒子都能触发一次单片机中断实现最精准的计数不受主循环其他任务的影响。对于LED我做了个有点“冒险”但为了简化布线的决定没有为每颗LED串联限流电阻。我将14颗黄色3mm LED分为左右两组每组7颗并联然后直接由Arduino的I/O口通过晶体管驱动因为电流超过单个引脚输出能力控制通断。黄色LED的正向电压通常在2.0V-2.2V而我们的系统电压是5V。理论上超过的电压会以电流形式体现可能缩短LED寿命。但在实测中短时间、间歇性的闪烁工作模式下LED并未出现明显发热或光衰。如果你追求绝对的稳妥为每颗LED串联一个100-150Ω的电阻是最规范的做法。伺服电机选用常见的SG90微型舵机用于驱动PKE仪表的可展开翅膀。它的控制信号是标准的PWM由Arduino另一个引脚提供。3. 机械结构与外壳的创意实现3.1 3D建模与打印从电影道具到可打印模型PKE仪表的外形辨识度极高一个握柄主体上方是带有可展开“翅膀”的探测头。我参考了电影剧照和原版玩具的图片使用Fusion 360从头开始建模。建模的关键在于实现翅膀的联动机构。我借鉴了开源社区里一些机械设计的思路采用了一个简单的四连杆机构。核心是一个由伺服电机驱动的中心摇臂通过两根连杆分别连接左右两片翅膀。当伺服电机旋转时摇臂拉动连杆从而同地将两片翅膀向上或向下推起实现开合动作。模型分为多个部件打印以方便装配和后期处理主体/握柄分为上下两半内部预留了电池仓、Arduino、高压模块等主要部件的卡位。翅膀左右各一片设计有卡槽用于嵌入LED灯条。连杆与摇臂用于连接伺服电机和翅膀的传动部件。 所有.stl文件都可以在开源平台找到。打印材料建议使用PLA它在强度、细节表现和后处理友好度上取得了较好的平衡。3.2 打印后处理从层纹到光滑漆面刚打印出来的零件表面会有明显的层纹直接喷涂效果会很粗糙。为了获得类似工业注塑件的光滑质感我进行了以下处理环氧树脂填平使用流动性较好的水晶滴胶或专用模型环氧树脂薄薄地涂刷在所有外表面。树脂会流入层纹的凹槽中。操作要在通风良好的地方进行。固化与打磨等待环氧树脂完全固化通常24小时。之后使用从400目到1500目逐步递增的水砂纸沾水打磨。这是最耗时但也是最关键的一步打磨的目标是消除所有可见的层纹和树脂涂抹的不均匀处直到手触摸感觉光滑。上补土打磨后喷涂一层水补土模型用底漆。这层灰色底漆能像“照妖镜”一样暴露出表面任何微小的不平整或划痕。针对这些地方再进行局部精细打磨。最终上色补土层打磨平滑后就可以进行最终喷涂了。我采用了经典的“黑银”配色。先整体喷涂哑光黑色作为底色。待干透后对顶部面板、边缘等部位进行遮盖再喷涂金属银漆以突出细节和层次感。最后可以喷一层光油或消光油来保护漆面。3.3 电子部件的内部布局与固定如何在有限的空间内合理布局所有电子元件并确保翅膀活动不受阻碍是个挑战。我的布局策略如下底层握柄底部放置18650电池和TP4056充电保护板。开关也安装在此处。中层握柄上部这是核心区域。Arduino Nano平躺在中心高压模块和信号调理电路的小面包板紧贴其旁。所有接线尽量向下焊接或弯折降低高度。顶层探测头内部伺服电机固定在中心位置其输出轴通过自制钢丝联轴器我用了一段回形针连接内部的摇臂。OLED显示屏安装在前面板开孔处。翅膀每条翅膀内侧用热熔胶固定一条7颗LED组成的灯条。LED的导线需要预留足够的长度并沿着翅膀转轴处小心走线用胶带或热熔胶点固定防止在开合过程中被拉扯或缠绕。所有内部线缆都必须用扎带或大量热熔胶进行规整和固定防止它们松脱后卡住伺服机构。我在组装尾声就遇到过因为一根导线翘起导致翅膀无法完全闭合的情况不得不重新开盖整理。4. 软件逻辑与代码深度解析4.1 脉冲计数核心中断服务程序准确计数是盖革计数器的根本。我们使用Arduino的外部中断功能来响应盖革管脉冲。// 定义中断引脚 const int geigerPin 2; // 连接晶体管集电极无脉冲时为高电平脉冲来时下拉为低电平 void setup() { pinMode(geigerPin, INPUT_PULLUP); // 启用内部上拉确保常态高电平 attachInterrupt(digitalPinToInterrupt(geigerPin), countPulse, FALLING); // 下降沿触发 } volatile unsigned long pulseCount 0; // 必须声明为volatile因为会在中断中修改 void countPulse() { pulseCount; // 中断服务函数只做最简单的计数增加 }这里的关键是使用FALLING下降沿触发模式因为我们的晶体管电路在检测到脉冲时会从高电平变为低电平。中断服务函数countPulse()要尽可能短小只做增量操作避免复杂计算影响后续脉冲的捕获。4.2 数据平滑处理计数率与剂量率计算盖革管探测到的粒子是随机到达的瞬时计数波动很大。为了得到稳定的读数需要进行平滑处理。定时采样在主循环中每1秒integrationTime 1000ms读取一次pulseCount然后将其清零。这个值就是1秒内的计数CPS。滑动平均将最近5次的1秒计数值存入一个数组计算其平均值。这能有效平滑短时间内的统计涨落。const int numReadings 5; long readings[numReadings]; int readIndex 0; long total 0; long average 0; // 每秒执行一次 total total - readings[readIndex]; // 减去最旧的值 readings[readIndex] countsInLastSecond; // 存入新值 total total readings[readIndex]; readIndex (readIndex 1) % numReadings; average total / numReadings; // 得到过去5秒的平均CPS单位转换计数率CPM average * 60次/分钟。剂量率这是估算值。需要知道所用盖革管的灵敏度因子。对于SBM-20一个常见的换算系数是0.0065 µSv/h per CPM这个值因管子和校准条件而异仅供参考。所以DoseRate_uSv_h CPM * 0.0065。4.3 多输出协同控制声、光、动的反馈逻辑反馈系统让设备变得生动。所有反馈都基于平滑后的CPM值。声音反馈最简单直接。每次中断触发计数时在countPulse函数中同时让一个无源蜂鸣器短促鸣响一次模拟经典的“咔嗒”声。void countPulse() { pulseCount; digitalWrite(buzzerPin, HIGH); delayMicroseconds(500); // 一个极短的脉冲 digitalWrite(buzzerPin, LOW); }视觉反馈LEDLED的闪烁频率与辐射强度成正比。我设置了几档阈值CPM 100: LED常亮低亮度背景光。100 CPM 500: 以1Hz频率闪烁。CPM 500: 以5Hz频率快速闪烁。 这通过millis()函数进行非阻塞定时控制来实现。机械反馈翅膀伺服电机的开合角度与CPM值线性映射。首先需要校准在代码中定义伺服完全闭合servoMin和完全张开servoMax对应的脉宽值通常为500-2500微秒。然后将当前CPM映射到这个角度范围内。例如设置一个最大响应CPM_max比如2000 CPM那么int servoAngle map(CPM, 0, CPM_max, servoMinAngle, servoMaxAngle); servoAngle constrain(servoAngle, servoMinAngle, servoMaxAngle); // 限制在范围内 myServo.write(servoAngle);这样辐射越强翅膀张得越开。4.4 OLED显示与电池监控使用Adafruit_SSD1306库驱动128x64的OLED屏每秒刷新一次显示以下信息第一行实时CPM值。第二行估算的µSv/h剂量率。第三行电池电压。 电池电压通过Arduino的模拟输入引脚A3监测连接电池正极到一个由两个等值电阻例如10kΩ组成的分压电路的中点。读取的模拟值需换算为实际电压并设置一个阈值如3.3V来提示低电量。5. 组装、校准与测试全流程5.1 分步组装流程与工艺要点组装顺序至关重要推荐按以下步骤进行电路预搭建与测试在面包板或洞洞板上照电路图连接除盖革管和高压模块输出端以外的所有低压部分Arduino、OLED、蜂鸣器、LED驱动电路、伺服测试。上传一个简单的测试程序确保各部分显示、声音、LED、伺服能独立工作。高压模块单独调压在未连接任何负载的情况下给高压模块供电5V用万用表测量其输出端用小螺丝刀缓慢调节电位器将电压精确设定至400V。完成后断电。连接盖革管与信号电路使用保险丝夹小心地夹住SBM-20的管脚。将高压输出正极通过10MΩ电阻接盖革管阳极信号提取点接470pF电容也接在阳极。盖革管阴极接高压地。再次检查所有高压连接点是否绝缘良好。整体电路功能测试将高压模块输出接入电路。上电用一块已知的微弱放射源如旧烟雾探测器里的镅-241或一小块铀矿石靠近盖革管应能听到蜂鸣器鸣叫频率明显加快同时CPM读数上升。此时切勿用手触碰高压部分。机械结构预组装将伺服电机、LED灯条安装到3D打印的翅膀和主体内部。不接电子部分手动测试翅膀开合是否顺滑有无线材干涉。总装与布线将测试好的整个电路板、电池等小心地装入主体外壳。按照之前的布局规划用热熔胶或螺丝固定主要模块。连接伺服、LED、显示屏的排线并仔细梳理、固定确保翅膀运动路径上无任何阻碍。合盖与最终调试合上外壳拧紧螺丝。上电进行最终功能测试。观察翅膀开合是否到位有无异响检查所有LED是否正常点亮和闪烁用放射源验证整个系统的响应是否灵敏一致。5.2 伺服机构校准技巧伺服电机的校准决定了翅膀开合的精确度和美观度。将伺服电机临时接上Arduino上传一个简单的舵机扫掠程序。将伺服臂不带连杆安装到电机上。运行程序让舵机在0-180度间运动。找到使翅膀完全闭合时对应的舵机角度值假设为30度和完全张开时的角度值假设为150度。这两个值就是代码中的servoMin和servoMax。关键技巧实际机械安装可能存在偏差最终确定的这两个极限值最好比理论极限位置小5-10度。这为机械结构留出了余量防止舵机堵转持续输出最大力矩但无法转动导致发热甚至损坏。5.3 辐射测试与功能验证没有放射源如何测试可以尝试以下方法环境本底测试设备开机后显示的CPM值会在一个较低水平波动例如20-60 CPM这就是环境本底辐射主要来自宇宙射线和建筑材料中的天然放射性核素。寻找日常放射源老式含钍的煤气灯纱罩已很少见。某些老旧的含铀玻璃器皿或陶瓷釉会发出淡绿色荧光。烟雾探测器拆开需谨慎通常含有微量的镅-241α源需非常靠近才能检测到且α粒子穿透力很弱。功能验证即使没有强放射源你也可以通过模拟脉冲来测试系统的完整响应。用一根导线一端瞬间触碰一下给盖革管信号电路提供5V的节点模拟一个脉冲应该能触发一次计数、一声蜂鸣、以及LED和伺服的可能动作如果CPM平均值因此升高。这能验证从信号输入到所有输出反馈的整条链路是否畅通。重要安全提示如果你使用铀矿石等天然矿物样本请将其存放在带盖的铅玻璃容器中并避免长时间近距离接触。处理任何放射源后务必洗手。本项目制作的计数器主要用于教学演示和个人兴趣其读数仅为估算值不能作为专业的辐射安全评估依据。6. 常见问题排查与优化建议6.1 硬件故障排查速查表现象可能原因排查步骤完全无反应屏不亮1. 电池没电或装反。2. 电源开关损坏或未打开。3. TP4056保护板触发保护或故障。4. 主电源线虚焊或断开。1. 测量电池电压应3.5V。2. 用万用表通断档检查开关。3. 检查保护板B、B-是否有电压OUT、OUT-是否有5V输出。4. 检查从保护板到Arduino Vin的线路。有电但无计数CPM为01. 高压模块未工作或电压不对。2. 盖革管损坏或接触不良。3. 信号调理电路晶体管部分故障。4. Arduino中断引脚配置错误或接线错误。1.断电后测量高压模块输出是否为400V注意安全。2. 检查保险丝夹是否夹紧盖革管是否完好。3. 用示波器或逻辑分析仪检查晶体管集电极接中断引脚处有无脉冲信号。或用导线快速触碰5V模拟脉冲看是否计数。4. 检查代码中中断引脚定义与实际接线是否一致。计数不稳定或异常高1. 高压过高导致盖革管连续放电或噪声增大。2. 电磁干扰如靠近手机、开关电源。3. 信号线过长未屏蔽引入噪声。4. 软件去抖动处理不当。1. 重新校准高压至准确的400V。2. 远离干扰源测试。3. 尽量缩短盖革管到信号电路的高压线并使其远离其他数字线路。4. 在中断服务程序中可加入极短的延时如delayMicroseconds(100)来屏蔽脉冲后的余波。翅膀不动或动作卡顿1. 伺服电机供电不足电流不够。2. 机械结构有干涉或过紧。3. 伺服控制线接触不良。4. 代码中舵机角度值超出物理极限。1. 确保伺服电机由外部5V电源如LM2596模块单独供电而非Arduino板载5V。2. 脱离电子部分手动转动翅膀检查是否顺滑打磨调整转轴孔。3. 检查伺服信号线黄/橙、电源线红、地线棕连接。4. 重新校准servoMin和servoMax并留有余量。LED不亮或亮度不均1. LED极性接反。2. 并联的LED中某个损坏短路影响其他。3. 驱动晶体管如果用了损坏或基极电阻错误。4. Arduino引脚输出电流不足如果直连多颗。1. 检查LED长脚阳极是否接正极。2. 逐个测试LED。3. 检查晶体管电路测量集电极电压。4. 务必通过晶体管或专用驱动芯片如ULN2003来驱动LED组。6.2 软件与精度优化建议抗干扰优化在中断引脚和地之间加一个约10kΩ-100kΩ的上拉电阻如果未启用内部上拉并在信号线对地并联一个几十皮法的小电容可以有效抑制高频噪声干扰。计数精度提升对于高计数率场景中断服务函数执行时间可能成为瓶颈。确保countPulse()函数尽可能短。如果计数率非常高1000 CPS可以考虑使用硬件计数器如Arduino的Timer/Counter或换用更快的单片机。剂量换算准确性0.0065 µSv/h per CPM是一个近似值。若想获得更准确的剂量读数需要对设备进行校准。方法是使用一个已知活度的标准放射源如Cs-137在固定距离下测量其CPM然后与已知的剂量率进行比较计算出属于你这套设备的精确转换系数。功耗优化这是一个便携设备功耗很重要。可以考虑以下措施在代码中让OLED显示屏间歇性刷新如每2秒刷新一次或增加一个开关控制显示开关。将无辐射时的LED亮度调至很低。使用Arduino的低功耗库在无中断时让MCU进入休眠模式。6.3 造型与功能的扩展思路这个项目本身已经完成度很高但你还可以在此基础上进行个性化扩展数据记录加一个SD卡模块让设备能够以时间戳记录CPM和剂量率数据用于长期环境监测。无线传输加入蓝牙如HC-05或Wi-Fi如ESP-01S模块将实时数据发送到手机APP或云端服务器实现远程监控。声光效果升级用RGB LED代替单色LED让颜色随辐射强度变化如绿-黄-红。或者用MP3模块替换简单蜂鸣器播放自定义的报警音效。外壳材质如果不满足于3D打印可以尝试用亚克力激光切割结合金属件来制作外壳获得更坚固和更具质感的机身。制作过程中最深的体会是“测试驱动装配”。不要等所有东西都焊死装进盒子才发现问题。分模块测试、分阶段组装每完成一步就验证其功能能节省大量后期排查和返工的时间。另一个心得是关于机械与电子的接口像伺服电机位置校准、LED灯条走线这类问题在图纸上不容易发现必须在实物装配中反复调试和优化。最后这个项目最大的乐趣在于它将一个抽象的物理概念辐射变成了一个看得见、听得着、甚至能动起来的实体对象这种将知识转化为实物的成就感是单纯购买一个成品无法比拟的。