สารบัญ:

เครื่องตรวจจับการเหนี่ยวนำพัลส์แบบใช้ Arduino - LC-Trap: 3 ขั้นตอน
เครื่องตรวจจับการเหนี่ยวนำพัลส์แบบใช้ Arduino - LC-Trap: 3 ขั้นตอน

วีดีโอ: เครื่องตรวจจับการเหนี่ยวนำพัลส์แบบใช้ Arduino - LC-Trap: 3 ขั้นตอน

วีดีโอ: เครื่องตรวจจับการเหนี่ยวนำพัลส์แบบใช้ Arduino - LC-Trap: 3 ขั้นตอน
วีดีโอ: การชาร์จแบบไร้สาย - หลักสูตรการซ่อมมือถือ 2024, กรกฎาคม
Anonim
เครื่องตรวจจับการเหนี่ยวนำพัลส์แบบใช้ Arduino - LC-Trap
เครื่องตรวจจับการเหนี่ยวนำพัลส์แบบใช้ Arduino - LC-Trap

ในขณะที่มองหาแนวคิดเพิ่มเติมสำหรับเครื่องตรวจจับโลหะ Ardino Pulse Induction แบบธรรมดาที่มีแรงดันไฟฟ้าเพียงแหล่งเดียว ฉันพบหน้าแรกของ Teemo:

www.digiwood.ee/8-electronic-projects/2-metal-detector-circuit

เขาได้สร้างเครื่องตรวจจับการเหนี่ยวนำพัลส์อย่างง่ายโดยใช้หลักการ LC-Trap วงจรที่คล้ายกันถูกโพสต์ที่นี่ใน Instructable โดย TechKiwiGadgets ยกเว้นว่าวงจร Teemo ใช้ตัวเปรียบเทียบภายในของไมโครคอนโทรลเลอร์ PIC ดังนั้นจึงต้องการส่วนประกอบภายนอกน้อยลง

ดังนั้นฉันจึงถูกท้าทายให้ใช้ Arduino แทน PIC-Controller สำหรับแผนผังนี้และดูว่าฉันจะไปได้ไกลแค่ไหน

ขั้นตอนที่ 1: แผนผัง

แผนผัง
แผนผัง
แผนผัง
แผนผัง
แผนผัง
แผนผัง

แผนผัง Arduino นั้นซับซ้อนกว่าเล็กน้อยเนื่องจาก Arduino ไม่อนุญาตให้กำหนดเส้นทางสัญญาณอะนาล็อกภายในไปยังอินพุตของตัวเปรียบเทียบ สิ่งนี้จะเพิ่มสององค์ประกอบสำหรับตัวแยกแรงดันไฟฟ้าอย่างง่าย สิ่งนี้นำไปสู่การออกแบบที่มีส่วนประกอบภายนอก 12 ชิ้น (ออกจากลำโพงและจอ LCD ขนาด 16x2) เมื่อเทียบกับการออกแบบ Flip Coil 9 ชิ้น

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

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

ในกรณีนี้ ฉันจะได้รับอินเทอร์รัปต์หลายครั้งเนื่องจากแรงดันไฟฟ้าแกว่งไปมารอบๆ แรงดันอ้างอิงที่ตั้งไว้ที่ตัวเปรียบเทียบ ในตอนท้ายของการแกว่ง แรงดันไฟฟ้าที่ขดลวดจะอยู่ที่ประมาณ 5V แต่ไม่แน่นอน ฉันเลือกตัวแบ่งแรงดันไฟฟ้าที่มี 200 โอห์มและ 10k โอห์ม เพื่อให้ได้แรงดันไฟฟ้าประมาณ 4.9 โวลต์

เพื่อลดความซับซ้อนของแผนผัง ฉันใช้ D4 และ D5 เพื่อจัดเตรียม GND (สำหรับตัวต้านทาน 10k) และ 5V (สำหรับตัวต้านทาน 220 โอห์ม) หมุดถูกตั้งค่าไว้ที่จุดเริ่มต้นของเครื่องตรวจจับ

ในเวอร์ชันนี้ ฉันได้เพิ่มการเชื่อมต่อลำโพงโดยใช้วิธีการควบคุมเสียงแบบหลายโทนดังที่อธิบายไว้ใน How to Program an Arduino Based Metal Detector ซึ่งช่วยให้สามารถแยกแยะคุณสมบัติของเป้าหมายได้เช่นเดียวกับการรับรู้ถึงความแรงของสัญญาณ ลำโพงสามารถเชื่อมต่อกับส่วนหัว 5 พินเพิ่มเติมได้ ส่วนที่เหลืออีก 3 พินของส่วนหัวจะใช้สำหรับปุ่มกด (เพื่อใช้งาน)

ขั้นตอนที่ 2: การเขียนโปรแกรม

การเขียนโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรม

เมื่อออกแบบวงจรและสร้างต้นแบบแล้ว ก็ถึงเวลาค้นหาแนวทางที่เหมาะสมสำหรับการตรวจจับโลหะ

1. การนับพัลส์

การนับพัลส์ของการแกว่งจนกว่าจะสลายไปอย่างสมบูรณ์เป็นแนวคิดหนึ่ง

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

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

ทริกเกอร์ของการขัดจังหวะแต่ละครั้งเรียกรหัสนี้:

ISR (ANALOG_COMP_vect){

Toggle1=Toggle0 // บันทึกค่าสุดท้าย Toggle0=TCNT1; // รับค่าใหม่ }

รหัสนี้ใช้เวลาพอสมควร (ถ้าจำไม่ผิด ประมาณ 78 รอบคำสั่ง witch ประมาณ 5 microseconds @ 16MHz) ดังนั้นระยะที่ตรวจจับได้ต่ำสุดระหว่างพัลส์สองพัลส์คือเวลาที่โค้ดนี้ใช้พอดี หากเวลาระหว่างทริกเกอร์สองตัวสั้นลง (ดูรูป) ก็จะไปตรวจไม่พบ เนื่องจากโค้ดจะทำงานอย่างสมบูรณ์ก่อนที่จะตรวจพบอินเทอร์รัปต์ที่สอง

สิ่งนี้นำไปสู่การสูญเสียความไว ในเวลาเดียวกัน ฉันสังเกตเห็นว่าการสั่นของการสั่นนั้นอ่อนไหวมากต่ออิทธิพลภายนอกใดๆ ก็ตาม ซึ่งทำให้วิธีการนี้โดยรวมยากขึ้นเล็กน้อย

2. การวัดความถี่

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

วิธีที่ง่ายที่สุดในการวัดความถี่คือการวัดปริมาณพัลส์หลังจากที่ขดลวดเริ่มสั่น ช่วงเวลาระหว่างจุดเริ่มต้นและพัลส์สุดท้ายหารด้วยจำนวนพัลส์ที่วัดได้ทั้งหมดคือความถี่ น่าเสียดายที่การแกว่งล่าสุดไม่สมมาตร เนื่องจากการปรากฏตัวของโลหะยังส่งผลต่อการสลายตัวของการแกว่ง ดังนั้นการแกว่งครั้งสุดท้ายจึงไม่สมมาตร การอ่านจึงตีความได้ยาก ในภาพนี้เป็นการแสดงด้วยการข้าม 1 ถึง 1 'และ 2 ถึง 2'

วิธีที่ดีกว่าคือการใช้พัลส์ก่อนหน้าในการวัดความถี่ ขณะทำการทดสอบ ที่น่าสนใจคือฉันพบว่าพัลส์บางพัลส์มีความอ่อนไหวมากกว่าแบบอื่นๆ ที่ไหนสักแห่งที่ 2/3 ของการแกว่งเป็นจุดที่ดีในการรับข้อมูล

กำลังประมวลผลข้อมูล

รหัสเริ่มต้นขึ้นอยู่กับการวนซ้ำ () ที่เรียกใช้ฟังก์ชันพัลส์ () เพื่อกำหนดเวลาของคอยล์ แม้ว่าผลลัพธ์จะไม่ได้แย่ แต่ฉันก็อยากจะปรับปรุงเวลา ในการทำเช่นนั้น ฉันได้สร้างโค้ดที่ใช้ตัวจับเวลาโดยสมบูรณ์ ซึ่งนำไปสู่วิธีการตั้งโปรแกรมเครื่องตรวจจับโลหะจาก Arduino ที่ควบคุมไม่ได้ คำแนะนำนี้จะอธิบายเกี่ยวกับเวลา, ข้อมูลออก LCD ที่บีบอัดข้อมูล ฯลฯ โดยละเอียด

1. จอแอลซีดี

วิธีแรกคือการวัด 10 พัลส์ จากนั้นจึงแสดงค่าบนจอ LCD เมื่อฉันพบว่าการถ่ายโอนข้อมูล I2C ช้าเกินไป ฉันจึงเปลี่ยนเป็นโค้ดเพื่ออัปเดตอักขระเพียงตัวเดียวต่อพัลส์

2. วิธีมูลค่าขั้นต่ำ

เพื่อปรับปรุงความเสถียรของการอ่านเพิ่มเติม ฉันได้เขียนรูทีนเอาต์พุตแบบอนุกรมเพื่อให้เข้าใจถึงข้อมูลที่วัดได้ดีขึ้น เห็นได้ชัดว่าแม้ว่าการอ่านส่วนใหญ่จะค่อนข้างคงที่ แต่บางส่วนก็ไม่เป็นเช่นนั้น! การอ่านค่าพัลส์การสั่นที่ "เหมือนกัน" บางส่วนนั้นห่างกันมากจนทำลายทุกวิธีในการวิเคราะห์การเปลี่ยนแปลงความถี่

เพื่อชดเชยสิ่งนี้ ฉันได้สร้าง "พรมแดน" ซึ่งมีมูลค่าที่น่าเชื่อถือ เช่น. เมื่อค่าอยู่ห่างจากค่าที่คาดไว้มากกว่า 35 รอบของตัวจับเวลา 1 ค่าเหล่านี้จะถูกละเว้น (อธิบายโดยละเอียดในคำแนะนำ "วิธีตั้งโปรแกรมเครื่องตรวจจับโลหะจาก Arduino")

วิธีการนี้พิสูจน์แล้วว่ามีเสถียรภาพมาก

3. แรงดันไฟฟ้า

การออกแบบดั้งเดิมของ Teemo ใช้พลังงานต่ำกว่า 5 โวลต์ เนื่องจากข้อสันนิษฐานของฉันคือ "โวลต์มากขึ้น = กำลังมากขึ้น = ความไวมากขึ้น" ฉันจึงขับเคลื่อนเครื่องในตอนต้นด้วย 12V ส่งผลให้ MOSFET ร้อนขึ้น ความร้อนขึ้นนี้ส่งผลให้เกิดการเบี่ยงเบนทั่วไปของค่าที่วัดได้ นำไปสู่การปรับสมดุลของเครื่องตรวจจับบ่อยครั้ง โดยการลดแรงดันไฟฟ้าลงเป็น 5V การสร้างความร้อนของ MOSFET จะลดลงจนอยู่ในระดับที่แทบไม่สังเกตเห็นการเบี่ยงเบนของค่าที่อ่านได้ สิ่งนี้ทำให้วงจรง่ายยิ่งขึ้น เนื่องจากไม่จำเป็นต้องใช้ตัวควบคุมแรงดันไฟฟ้าออนบอร์ดของ Arduino อีกต่อไป

สำหรับ MOSFET ฉันเลือก IRL540 ในตอนแรก MOSFET นี้เข้ากันได้กับระดับลอจิก แต่มีพิกัดแรงดันไฟฟ้าสูงสุดที่ 100V ฉันหวังว่าจะได้ประสิทธิภาพที่ดีขึ้นโดยเปลี่ยนเป็น IRL640 ที่มีเรตติ้ง 200V น่าเสียดายที่ผลลัพธ์ก็เหมือนกัน ดังนั้นทั้ง IRL540 หรือ IRL640 จะทำงาน

ขั้นตอนที่ 3: ผลลัพธ์สุดท้าย

ผลลัพธ์สุดท้าย
ผลลัพธ์สุดท้าย
ผลลัพธ์สุดท้าย
ผลลัพธ์สุดท้าย
ผลลัพธ์สุดท้าย
ผลลัพธ์สุดท้าย

ข้อดีของเครื่องตรวจจับคือแยกแยะระหว่างวัสดุที่มีค่าและเหล็ก ข้อเสียคือ ความอ่อนไหวกับแผนผังง่าย ๆ นี้ไม่ได้ดีขนาดนั้น ในการเปรียบเทียบประสิทธิภาพ ฉันใช้ข้อมูลอ้างอิงเดียวกันกับตัวตรวจจับ Flip-Coil อาจดีสำหรับการระบุบางอย่าง แต่น่าผิดหวังสำหรับการค้นหาจริง

การออกแบบดั้งเดิมด้วยคอนโทรลเลอร์ PIC อาจมีความไวมากกว่าเมื่อทำงานบน 32MHz แทนที่จะเป็น 16MHz ของเทอร์นั้นเพื่อให้มีความละเอียดสูงขึ้นสำหรับการตรวจจับการเปลี่ยนแปลงความถี่

ผลลัพธ์ทำได้โดยใช้ขดลวด 48 รอบ @ 100 มม.

เช่นเคยเปิดรับคำติชม

แนะนำ: