สารบัญ:

Arduino DIY Geiger Counter: 12 ขั้นตอน (พร้อมรูปภาพ)
Arduino DIY Geiger Counter: 12 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino DIY Geiger Counter: 12 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino DIY Geiger Counter: 12 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Geiger Counter Kit Nuclear Radiation Detector from Banggood - Electronic Project 2024, พฤศจิกายน
Anonim
Arduino DIY Geiger Counter
Arduino DIY Geiger Counter
Arduino DIY Geiger Counter
Arduino DIY Geiger Counter

คุณได้สั่งซื้อเคาน์เตอร์ DIY Geiger และต้องการเชื่อมต่อกับ Arduino ของคุณ คุณเข้าแถวและพยายามทำซ้ำวิธีที่ผู้อื่นเชื่อมต่อตัวนับ Geiger กับ Arduino เพื่อค้นหาสิ่งผิดปกติ แม้ว่าตัวนับ Geiger ของคุณดูเหมือนจะไม่ทำงานตามที่อธิบายไว้ใน DIY ที่คุณกำลังติดตามเมื่อคุณเชื่อมต่อตัวนับ Geiger กับ Arduino ของคุณ

ในคำแนะนำนี้ ฉันจะอธิบายวิธีแก้ไขปัญหาข้อบกพร่องเหล่านี้บางส่วน

จดจำ; รวบรวมและเขียนโค้ด Arduino ทีละขั้น หากคุณไปยังโครงการที่เสร็จสิ้นแล้วและมีสายหรือโค้ดที่พลาดไป คุณอาจต้องใช้เวลานานในการค้นหาปัญหา

ขั้นตอนที่ 1: เครื่องมือและชิ้นส่วน

เครื่องมือและอะไหล่
เครื่องมือและอะไหล่

กล่องต้นแบบ ฉันใช้กล่องขนม Ferrero Rocher

เขียงหั่นขนมขนาดเล็ก

จอแอลซีดี 16x2

บอร์ด Arduino ether a UNO หรือ Nano

ตัวต้านทาน 220 Ω

ตัวต้านทานแบบปรับได้หม้อ 10 kΩ

DIY Geiger Counter Kit

สายจัมเปอร์

ขั้วต่อแบตเตอรี่หรือสายรัด

ออสซิลโลสโคป

คีมปากแหลม

ไขควงมาตรฐานขนาดเล็ก

ขั้นตอนที่ 2: ประกอบตัวนับ Geiger ของคุณ

ประกอบเคาน์เตอร์ Geiger ของคุณ
ประกอบเคาน์เตอร์ Geiger ของคุณ

ความเสียหายต่อท่อไกเกอร์ของคุณ; และเคาน์เตอร์ Geiger ของคุณจะไม่ทำงาน ดังนั้นให้ใช้ฝาครอบอะคริลิกป้องกันเพื่อป้องกันความเสียหายต่อท่อ Geiger ของคุณ

คำแนะนำนี้เป็นวิธีการที่ฉันซ่อมแซมเคาน์เตอร์ Geiger เดียวกันกับท่อ Geiger ที่หักและติดตั้งฝาครอบอะคริลิกเพื่อป้องกันการแตกหักในอนาคต

www.instructables.com/id/Repairing-a-DIY-G…

ขั้นตอนที่ 3: ทดสอบตัวนับ Geiger ด้วยไฟฟ้า

การทดสอบตัวนับ Geiger ทางไฟฟ้า
การทดสอบตัวนับ Geiger ทางไฟฟ้า
การทดสอบตัวนับ Geiger ทางไฟฟ้า
การทดสอบตัวนับ Geiger ทางไฟฟ้า
การทดสอบตัวนับ Geiger ทางไฟฟ้า
การทดสอบตัวนับ Geiger ทางไฟฟ้า

ใช้แรงดันไฟฟ้าที่เหมาะสมสำหรับแหล่งจ่ายไฟก่อน สาย USB จ่ายไฟ DC 5 โวลต์จากคอมพิวเตอร์ของคุณโดยตรง อย่างไรก็ตาม ที่ใส่แบตเตอรี่ AA 3 ก้อนสำหรับแบตเตอรี่อัลคาไลน์ 1.5 โวลต์ ทำให้มีแรงดันไฟฟ้ารวม 4.5 โวลต์ หากคุณใช้แบตเตอรี่ NI-Cd หรือ NI-MH แบบชาร์จซ้ำได้ 1.2 โวลต์ คุณจะต้องมีที่ใส่แบตเตอรี่ AA 4 ก้อนสำหรับแรงดันไฟฟ้ารวม 4.8 โวลต์ หากคุณใช้ไฟน้อยกว่า 4.5 โวลต์ ตัวนับ Geiger อาจไม่ทำงานอย่างที่ควรจะเป็น

มีวงจรน้อยมากบนเอาต์พุตของตัวนับ Geiger; ตราบใดที่ลำโพงส่งเสียงติ๊กๆ และไฟ LED กะพริบ คุณควรได้รับสัญญาณที่พิน VIN

เพื่อให้แน่ใจว่าสัญญาณเอาท์พุต เชื่อมต่อออสซิลโลสโคปกับเอาต์พุตโดยเชื่อมต่อด้านบวกของโพรบออสซิลโลสโคปกับ VIN และด้านลบของโพรบออสซิลโลสโคปกับพื้น

แทนที่จะรอการแผ่รังสีพื้นหลังเพื่อกระตุ้นตัวนับ Geiger ฉันใช้ americium-241 จากห้องไอออนของเครื่องตรวจจับควันเพื่อเพิ่มปฏิกิริยาของตัวนับ Geiger เอาต์พุตของตัวนับ Geiger เริ่มต้นที่ +3 โวลต์และลดลงเหลือ 0 โวลต์ทุกครั้งที่หลอด Geiger ทำปฏิกิริยากับอนุภาคอัลฟ่าและกลับสู่ +3 โวลต์ในครู่ต่อมา นี่คือสัญญาณที่คุณจะบันทึกด้วย Arduino

ขั้นตอนที่ 4: การเดินสายไฟ

การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ

มีสองวิธีในการเชื่อมต่อตัวนับ Geiger กับ Arduino และคอมพิวเตอร์ของคุณ

เชื่อมต่อ GND บน Arduino กับ GND บนตัวนับ Geiger

เชื่อมต่อ 5V บน Arduino กับ 5V บนตัวนับ Geiger

เชื่อมต่อ VIN บนตัวนับ Geiger กับ D2 บน Arduino

ด้วยพลังงานอิสระที่เชื่อมต่อกับเคาน์เตอร์ไกเกอร์

เชื่อมต่อ GND บน Arduino กับ GND บนตัวนับ Geiger

เชื่อมต่อ VIN บนตัวนับ Geiger กับ D2 บน Arduino

เชื่อมต่อ Arduino กับคอมพิวเตอร์ของคุณ

ขั้นตอนที่ 5: รหัส

รหัส
รหัส
รหัส
รหัส
รหัส
รหัส

เปิด Arduino IDE และโหลดโค้ด

// Sketch นี้นับจำนวนพัลส์ต่อนาที

// เชื่อมต่อ GND บน Arduino กับ GND บนตัวนับ Geiger

// เชื่อมต่อ 5V บน Arduino กับ 5V บนตัวนับ Geiger

// เชื่อมต่อ VIN บนตัวนับ Geiger กับ D2 บน Arduino

การนับยาวที่ไม่ได้ลงนาม //ตัวแปรสำหรับเหตุการณ์ GM Tube

นานก่อนหน้าที่ไม่ได้ลงนามนานMillis; //ตัวแปรสำหรับการวัดเวลา

โมฆะแรงกระตุ้น () { // dipanggil setiap ada sinyal FALLING di pin 2

นับ++;

}

#define LOG_PERIOD 60000 // อัตราการนับ

ถือเป็นโมฆะการตั้งค่า () { //setup

นับ = 0;

Serial.begin(9600);

โหมดพิน (2, อินพุต);

AttachInterrupt(digitalPinToInterrupt(2), แรงกระตุ้น, FALLING); //กำหนดอินเตอร์รัปต์ภายนอก

Serial.println("เริ่มเคาน์เตอร์");

}

วงเป็นโมฆะ () {// รอบหลัก

ไม่ได้ลงนามยาว currentMillis = millis();

ถ้า (currentMillis - PreviousMillis > LOG_PERIOD) {

มิลลิวินาทีก่อนหน้า = ปัจจุบันมิลลิวินาที;

Serial.println (นับ);

นับ = 0;

}

}

ในเครื่องมือ เลือก Arduino หรือบอร์ดอื่นที่คุณใช้

ใน Tools เลือก Port และ Com

อัปโหลดรหัส

เมื่ออัปโหลดโค้ดในเครื่องมือแล้ว ให้เลือก Serial Monitor และดูการทำงานของตัวนับ Geiger

มองหาจุดบกพร่อง. สิ่งเดียวที่เกี่ยวกับรหัสนี้คือมันค่อนข้างน่าเบื่อ คุณต้องรอ 1 นาทีสำหรับการนับทุกครั้ง

ขั้นตอนที่ 6: Serial.println Vs Serial.print

Serial.println Vs Serial.print
Serial.println Vs Serial.print
Serial.println Vs Serial.print
Serial.println Vs Serial.print

นี่เป็นหนึ่งในข้อบกพร่องแรก ๆ ที่ฉันพบในโค้ด ดังนั้นโปรดดูในรหัสของคุณ “Serial.println(cpm);” และ “Serial.print(cpm);”

Serial.println (cpm); จะพิมพ์แต่ละจำนวนในบรรทัดของตัวเอง

Serial.print(cpm); จะดูเหมือนการพิมพ์ตัวเลขขนาดใหญ่แต่ละครั้งนับในบรรทัดเดียวกันทำให้ไม่สามารถบอกได้ว่าจำนวนนั้นคืออะไร

ขั้นตอนที่ 7: J305 การวัดรังสีพื้นหลัง

J305 การวัดรังสีพื้นหลัง
J305 การวัดรังสีพื้นหลัง
J305 การวัดรังสีพื้นหลัง
J305 การวัดรังสีพื้นหลัง

อย่างแรกคือการวัดรังสีพื้นหลัง ซึ่งเป็นรังสีธรรมชาติที่มีอยู่แล้วตามธรรมชาติ ตัวเลขที่แสดงคือ CPM (นับต่อนาที) ซึ่งเป็นจำนวนรวมของอนุภาคกัมมันตภาพรังสีที่วัดได้ทุกนาที

จำนวนเฉลี่ยพื้นหลัง J305 คือ 15.6 CPM

ขั้นตอนที่ 8: J305 การวัดการแผ่รังสีเซ็นเซอร์ควัน

J305 การวัดการแผ่รังสีของเซนเซอร์ควันไฟ
J305 การวัดการแผ่รังสีของเซนเซอร์ควันไฟ
J305 การวัดการแผ่รังสีของเซนเซอร์ควันไฟ
J305 การวัดการแผ่รังสีของเซนเซอร์ควันไฟ

ไม่ใช่เรื่องแปลกที่ตัวนับ Geiger จะให้การนับเดียวกันซ้ำ ๆ กับคุณ ดังนั้นให้ตรวจสอบกับแหล่งกำเนิดรังสี ฉันใช้การวัดรังสีจากห้องไอออน Americium จากเครื่องตรวจจับควัน เซ็นเซอร์ตรวจจับควันใช้ Americium เป็นแหล่งของอนุภาคแอลฟาที่ทำให้อนุภาคควันในอากาศแตกตัวเป็นไอออน ฉันถอดฝาโลหะบนเซ็นเซอร์ออก เพื่อให้อนุภาคอัลฟาและบีตาสามารถเข้าไปในหลอดไกเกอร์พร้อมกับอนุภาคแกมมา

หากทุกอย่างถูกต้องการนับควรเปลี่ยน

Americium-241 จากเครื่องตรวจจับควันไฟ Ion Chamber จำนวนเฉลี่ย 519 CPM

ขั้นตอนที่ 9: SBM-20

SBM-20
SBM-20
SBM-20
SBM-20

ภาพสเก็ตช์ Arduino นี้ได้รับการดัดแปลงเวอร์ชันที่เขียนโดย Alex Boguslavsky

Sketch นี้นับจำนวนพัลส์ใน 15 วินาทีและแปลงเป็นจำนวนต่อนาทีทำให้ไม่น่าเบื่อ

รหัสที่ฉันเพิ่ม “Serial.println("เริ่มตัวนับ");”

รหัสที่ฉันเปลี่ยน; “Serial.print (cpm);” ไปที่ “Serial.println(cpm);”

“#define LOG_PERIOD 15000”; ตั้งเวลานับเป็น 15 วินาที ฉันเปลี่ยนเป็น #define LOG_PERIOD 5000 หรือ 5 วินาที ฉันไม่พบความแตกต่างที่เห็นได้ชัดเจนในค่าเฉลี่ยระหว่างการนับเป็นเวลา 1 นาที หรือ 15 วินาทีและ 5 วินาที

#รวม

#define LOG_PERIOD 15000 //ระยะเวลาการบันทึกเป็นมิลลิวินาที ค่าที่แนะนำ 15000-60000

#define MAX_PERIOD 60000 //ระยะเวลาการบันทึกสูงสุดโดยไม่ต้องแก้ไขร่างนี้

การนับยาวที่ไม่ได้ลงนาม //ตัวแปรสำหรับเหตุการณ์ GM Tube

cpm แบบยาวที่ไม่ได้ลงนาม; //ตัวแปรสำหรับ CPM

ตัวคูณ int ที่ไม่ได้ลงนาม; //ตัวแปรสำหรับการคำนวณ CPM ในแบบร่างนี้

นานก่อนหน้าที่ไม่ได้ลงนามนานMillis; //ตัวแปรสำหรับการวัดเวลา

ถือเป็นโมฆะ tube_impulse () {// subprocedure สำหรับจับเหตุการณ์จาก Geiger Kit

นับ++;

}

ถือเป็นโมฆะการตั้งค่า () { // ตั้งค่าขั้นตอนย่อย

นับ = 0;

cpm = 0;

ตัวคูณ = MAX_PERIOD / LOG_PERIOD; //กำลังคำนวณตัวคูณ ขึ้นอยู่กับช่วงเวลาบันทึกของคุณ

Serial.begin(9600);

แนบInterrupt(0, tube_impulse, FALLING); //กำหนดอินเตอร์รัปต์ภายนอก

Serial.println("เริ่มเคาน์เตอร์"); // รหัสที่ฉันเพิ่ม

}

วงเป็นโมฆะ () { // รอบหลัก

ไม่ได้ลงนามยาว currentMillis = millis();

if(currentMillis - PreviousMillis > LOG_PERIOD){

มิลลิวินาทีก่อนหน้า = ปัจจุบันมิลลิวินาที;

cpm = นับ * ตัวคูณ;

Serial.println (cpm); // รหัสที่ฉันเปลี่ยน

นับ = 0;

}

}

จำนวนเฉลี่ยพื้นหลัง SBM-20 คือ 23.4 CPM

ขั้นตอนที่ 10: การเดินสายไฟตัวนับ Geiger ด้วย LCD

เดินสายเคาน์เตอร์ Geiger ด้วย LCD
เดินสายเคาน์เตอร์ Geiger ด้วย LCD

การเชื่อมต่อจอแอลซีดี:

LCD K พินไปที่ GND

LCD ขาต่อตัวต้านทาน 220 Ω ถึง Vcc

ขา LCD D7 เป็นขาดิจิตอล 3

ขา LCD D6 เป็นขาดิจิตอล 5

ขา LCD D5 เป็นขาดิจิตอล 6

ขา LCD D4 เป็นขาดิจิตอล 7

LCD เปิดใช้งานพินกับพินดิจิตอล 8

LCD R/W ปักหมุดลงกราวด์

LCD RS พินเป็นพินดิจิตอล 9

LCD VO pin เพื่อปรับหม้อ 10 kΩ

พิน LCD Vcc เป็น Vcc

LCD Vdd พินไปที่ GND

ตัวต้านทานแบบปรับได้หม้อ 10 kΩ

Vcc, Vo, Vdd

เคาน์เตอร์ไกเกอร์

VIN เป็นพินดิจิตอล 2

5 V ถึง +5V

GND ลงกราวด์

ขั้นตอนที่ 11: ตัวนับ Geiger พร้อม LCD

เคาน์เตอร์ Geiger พร้อม LCD
เคาน์เตอร์ Geiger พร้อม LCD
เคาน์เตอร์ Geiger พร้อม LCD
เคาน์เตอร์ Geiger พร้อม LCD
เคาน์เตอร์ Geiger พร้อม LCD
เคาน์เตอร์ Geiger พร้อม LCD

// รวมรหัสห้องสมุด:

#รวม

#รวม

#define LOG_PERIOD 15000 //ระยะเวลาการบันทึกเป็นมิลลิวินาที ค่าที่แนะนำ 15000-60000

#define MAX_PERIOD 60000 //ระยะเวลาการบันทึกสูงสุดโดยไม่ต้องแก้ไขร่างนี้

#define PERIOD 60000.0 // (60 วินาที) ระยะเวลาการวัดหนึ่งนาที

CNT แบบยาวที่ไม่ได้ลงนามแบบผันผวน // ตัวแปรสำหรับการนับอินเตอร์รัปต์จาก dosimeter

การนับยาวที่ไม่ได้ลงนาม //ตัวแปรสำหรับเหตุการณ์ GM Tube

cpm แบบยาวที่ไม่ได้ลงนาม; //ตัวแปรสำหรับ CPM

ตัวคูณ int ที่ไม่ได้ลงนาม; //ตัวแปรสำหรับการคำนวณ CPM ในแบบร่างนี้

นานก่อนหน้าที่ไม่ได้ลงนามนานMillis; //ตัวแปรสำหรับการวัดเวลา

dispPeriod ยาวที่ไม่ได้ลงนาม; // ตัวแปรสำหรับการวัดเวลา

CPM แบบยาวที่ไม่ได้ลงนาม // ตัวแปรสำหรับวัด CPM

// เริ่มต้นไลบรารีด้วยหมายเลขของพินอินเตอร์เฟส

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

การตั้งค่าเป็นโมฆะ () { // 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 (" เคาน์เตอร์ Geiger ");

ล่าช้า (2000);

cleanDisplay();

แนบInterrupt(0, GetEvent, FALLING); // เหตุการณ์ที่พิน 2

}

วงเป็นโมฆะ () {

lcd.setCursor(0, 0); // พิมพ์ข้อความและ CNT บน LCD

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 = มิลลิวินาที ();

}

}

ถือเป็นโมฆะ GetEvent () { // รับเหตุการณ์จากอุปกรณ์

ซีเอ็นที++;

}

เป็นโมฆะ cleanDisplay () { // ล้างรูทีน LCD

lcd.clear();

lcd.setCursor(0, 0);

lcd.setCursor(0, 0);

}

ขั้นตอนที่ 12: ไฟล์

ดาวน์โหลดและติดตั้งไฟล์เหล่านี้ลงใน Arduino ของคุณ

วางไฟล์.ino แต่ละไฟล์ในโฟลเดอร์โดยใช้ชื่อเดียวกัน

แนะนำ: