สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
บทนำอย่างที่คุณอาจทราบ อิหร่านมีสภาพอากาศแห้ง และขาดแคลนน้ำในประเทศของฉัน บางครั้งโดยเฉพาะในฤดูร้อนจะเห็นได้ว่ารัฐบาลมีการตัดน้ำ อพาร์ตเมนต์ส่วนใหญ่มีถังเก็บน้ำ มีถังเก็บน้ำ 1500 ลิตรในอพาร์ตเมนต์ของเราซึ่งให้น้ำ นอกจากนี้ยังมียูนิตพักอาศัย 12 ยูนิตในอพาร์ตเมนต์ของเรา ส่งผลให้คาดว่าถังน้ำมันจะว่างเปล่าในเร็วๆ นี้ มีเครื่องสูบน้ำติดถังส่งน้ำเข้าอาคาร เมื่อใดก็ตามที่ถังว่างเปล่า ปั๊มจะทำงานโดยไม่มีน้ำ สถานการณ์นี้ทำให้อุณหภูมิของมอเตอร์เพิ่มขึ้น และในระหว่างนั้นก็อาจทำให้ปั๊มเสียได้ ไม่นานมานี้ ปั๊มนี้เกิดขัดข้องเป็นครั้งที่สองสำหรับเรา และหลังจากเปิดมอเตอร์ เราพบว่าสายไฟขดลวดไหม้ หลังจากที่เราเปลี่ยนปั๊ม เพื่อป้องกันปัญหานี้อีกครั้ง ฉันตัดสินใจสร้างตัวควบคุมระดับน้ำ ฉันวางแผนที่จะสร้างวงจรเพื่อตัดการจ่ายไฟของปั๊มเมื่อใดก็ตามที่น้ำต่ำกว่าขีดจำกัดต่ำในถัง ปั๊มจะไม่ทำงานจนกว่าน้ำจะขึ้นถึงขีดจำกัดสูง หลังจากผ่านขีด จำกัด สูงแล้ววงจรจะเชื่อมต่อแหล่งจ่ายไฟอีกครั้ง ในตอนแรกฉันค้นหาทางอินเทอร์เน็ตเพื่อดูว่าฉันสามารถหาวงจรที่เหมาะสมได้หรือไม่ อย่างไรก็ตาม ฉันไม่พบสิ่งที่เหมาะสม มีตัวบ่งชี้น้ำที่ใช้ Arduino แต่ไม่สามารถแก้ปัญหาของฉันได้ ด้วยเหตุนี้ ฉันจึงตัดสินใจออกแบบตัวควบคุมระดับน้ำของฉัน แพ็คเกจแบบครบวงจรพร้อมส่วนต่อประสานผู้ใช้แบบกราฟิกที่ตรงไปตรงมาเพื่อตั้งค่าพารามิเตอร์ นอกจากนี้ ฉันพยายามพิจารณามาตรฐาน EMC เพื่อให้แน่ใจว่าอุปกรณ์ใช้งานได้ในสถานการณ์ต่างๆ
ขั้นตอนที่ 1: หลักการ
คุณอาจรู้หลักการมาก่อน เมื่อสัญญาณพัลส์อัลตราโซนิกถูกส่งไปยังวัตถุ วัตถุจะสะท้อนกลับและเสียงสะท้อนกลับไปยังผู้ส่ง หากคุณคำนวณเวลาที่เดินทางโดยพัลส์อัลตราโซนิก คุณสามารถค้นหาระยะทางของวัตถุได้ ในกรณีของเรารายการคือน้ำ
โปรดทราบว่าเมื่อคุณพบระยะห่างจากน้ำ คุณกำลังคำนวณปริมาตรของพื้นที่ว่างในถัง เพื่อให้ได้ปริมาตรน้ำ คุณต้องลบปริมาตรที่คำนวณได้จากปริมาตรถังทั้งหมด
ขั้นตอนที่ 2: เซนเซอร์ พาวเวอร์ซัพพลาย และคอนโทรลเลอร์
ฮาร์ดแวร์
สำหรับเซ็นเซอร์ ฉันใช้เซ็นเซอร์อัลตราโซนิกกันน้ำ JSN-SR04T ขั้นตอนการทำงานเหมือนกับ HC-SR04 (echo และ trig pin)
ข้อมูลจำเพาะ:
- ระยะห่าง: 25 ซม. ถึง 450 ซม.
- แรงดันใช้งาน: DC 3.0-5.5V
- ปัจจุบันทำงาน: <8mA
- ความแม่นยำ: ±1cm
- ความถี่: 40khz
- อุณหภูมิในการทำงาน: -20 ~ 70 ℃
โปรดทราบว่าคอนโทรลเลอร์นี้มีข้อจำกัดบางประการ ตัวอย่างเช่น:1- JSN-SR04T ไม่สามารถวัดระยะทางที่ต่ำกว่า 25 ซม. ดังนั้นคุณต้องติดตั้งเซ็นเซอร์เหนือผิวน้ำอย่างน้อย 25 ซม. นอกจากนี้ การวัดระยะทางสูงสุดคือ 4.5M. ดังนั้นเซ็นเซอร์นี้จึงไม่เหมาะกับรถถังขนาดใหญ่ 2- ความแม่นยำคือ 1 ซม. สำหรับเซ็นเซอร์นี้ ด้วยเหตุนี้ ขึ้นอยู่กับขนาดเส้นผ่าศูนย์กลางของถัง ความละเอียดของปริมาตรที่อุปกรณ์จะแสดงสามารถเปลี่ยนแปลงได้ 3- ความเร็วของเสียงอาจแตกต่างกันไปตามอุณหภูมิ ด้วยเหตุนี้ ความแม่นยำจึงอาจได้รับผลกระทบจากภูมิภาคต่างๆ อย่างไรก็ตาม ข้อจำกัดเหล่านี้ไม่สำคัญสำหรับฉัน และความแม่นยำก็เหมาะสม
ผู้ควบคุม
ฉันใช้ STM32F030K6T6 ARM Cortex M0 จาก STMicroelectronics คุณสามารถดูข้อมูลจำเพาะของไมโครคอนโทรลเลอร์นี้ได้ที่นี่
พาวเวอร์ซัพพลาย
ส่วนแรกคือการแปลง 220V/50Hz (ไฟฟ้าอิหร่าน) เป็น 12VDC เพื่อจุดประสงค์นี้ ฉันใช้ HLK-PM12 โมดูลจ่ายไฟแบบสเต็ปดาวน์ ตัวแปลง AC/DC นี้สามารถแปลง 90 ~ 264 VAC เป็น 12VDC ด้วยกระแสไฟขาออก 0.25A
อย่างที่คุณอาจทราบแล้ว โหลดอุปนัยบนรีเลย์อาจทำให้เกิดปัญหาหลายประการกับวงจรและแหล่งจ่ายไฟ และปัญหาในแหล่งจ่ายไฟอาจทำให้เกิดความไม่คงที่ โดยเฉพาะอย่างยิ่งในไมโครคอนโทรลเลอร์ วิธีแก้ไขคือแยกแหล่งจ่ายไฟออก นอกจากนี้ คุณต้องใช้วงจร snubber บนหน้าสัมผัสรีเลย์ มีหลายวิธีในการแยกแหล่งจ่ายไฟ ตัวอย่างเช่น คุณสามารถใช้หม้อแปลงไฟฟ้าที่มีสองเอาต์พุต นอกจากนี้ยังมีตัวแปลง DC/DC แบบแยกออกมาในขนาดเล็กที่สามารถแยกเอาต์พุตออกจากอินพุตได้ ฉันใช้ MINMAX MA03-12S09 เพื่อจุดประสงค์นี้ เป็นตัวแปลง DC/DC 3W พร้อมตัวแยก
ขั้นตอนที่ 3: IC หัวหน้างาน
ตามหมายเหตุของแอป TI: ตัวควบคุมแรงดันไฟฟ้า (หรือที่เรียกว่าวงจรรวมรีเซ็ต [IC]) เป็นจอภาพแรงดันไฟฟ้าชนิดหนึ่งที่ตรวจสอบแหล่งจ่ายไฟของระบบ ตัวควบคุมแรงดันไฟฟ้ามักใช้กับโปรเซสเซอร์ ตัวควบคุมแรงดันไฟฟ้า และซีเควนเซอร์ โดยทั่วไปซึ่งจำเป็นต้องมีการตรวจจับแรงดันหรือกระแสไฟฟ้า หัวหน้างานตรวจสอบรางแรงดันไฟฟ้าเพื่อให้แน่ใจว่าเปิดเครื่อง ตรวจจับความผิดปกติ และสื่อสารกับโปรเซสเซอร์แบบฝังเพื่อให้แน่ใจว่าระบบมีสุขภาพสมบูรณ์ คุณสามารถค้นหาบันทึกย่อของแอปนี้ได้ที่นี่ แม้ว่าไมโครคอนโทรลเลอร์ STM32 จะมีตัวควบคุมในตัว เช่น การเปิดเครื่องมอนิเตอร์อุปทาน แต่ฉันใช้ชิปผู้ควบคุมภายนอกเพื่อให้แน่ใจว่าทุกอย่างจะทำงานได้ดี ในกรณีของฉัน ฉันใช้ TL7705 จาก TI คุณสามารถดูคำอธิบายได้จากเว็บไซต์ Texas Instruments สำหรับ IC ด้านล่างนี้: TL77xxA ตระกูลของตัวควบคุมแรงดันไฟฟ้าของวงจรรวมได้รับการออกแบบมาโดยเฉพาะสำหรับใช้เป็นตัวควบคุมการรีเซ็ตในระบบไมโครคอมพิวเตอร์และไมโครโปรเซสเซอร์ ผู้ควบคุมแรงดันไฟจ่ายจะตรวจสอบแหล่งจ่ายสำหรับสภาวะแรงดันไฟต่ำที่อินพุต SENSE ในระหว่างการเปิดเครื่อง เอาต์พุต RESET จะทำงาน (ต่ำ) เมื่อ VCC บรรลุค่าที่เข้าใกล้ 3.6 V ณ จุดนี้ (สมมติว่า SENSE สูงกว่า VIT+) ฟังก์ชันตัวจับเวลาการหน่วงเวลาจะเปิดใช้งานการหน่วงเวลา หลังจากนั้นจะส่งสัญญาณออก RESET และ RESET(ไม่) ไม่ทำงาน (สูงและต่ำตามลำดับ) เมื่อเกิดสภาวะแรงดันไฟต่ำระหว่างการทำงานปกติ RESET และ RESET(NOT) จะเริ่มทำงาน
ขั้นตอนที่ 4: แผงวงจรพิมพ์ (PCB)
ฉันออกแบบ PCB เป็นสองชิ้น อันแรกคือ LCD PCB ซึ่งเชื่อมต่อกับเมนบอร์ดด้วยสายแพ/สายแบน ส่วนที่สองคือ PCB คอนโทรลเลอร์ บน PCB นี้ ฉันวางพาวเวอร์ซัพพลาย ไมโครคอนโทรลเลอร์ เซ็นเซอร์อัลตราโซนิก และส่วนประกอบที่เกี่ยวข้อง และยังมีส่วนจ่ายไฟที่เป็นรีเลย์ วาริสเตอร์ และวงจรสนูบเบอร์ อย่างที่คุณอาจทราบแล้ว รีเลย์เชิงกล เช่น รีเลย์ที่ฉันใช้ในวงจรอาจขาดได้หากทำงานตลอดเวลา เพื่อแก้ปัญหานี้ ฉันใช้รีเลย์แบบสัมผัสใกล้ชิด (NC) ตามปกติ ดังนั้นในสถานการณ์ปกติ รีเลย์จะไม่ทำงาน และโดยปกติการสัมผัสใกล้ชิดสามารถนำพลังงานไปยังปั๊มได้ เมื่อใดก็ตามที่น้ำต่ำกว่าขีดจำกัดต่ำ รีเลย์จะเปิดขึ้น และจะตัดไฟ ต้องบอกว่านี่คือเหตุผลที่ฉันใช้วงจร snubber บนหน้าสัมผัส NC และ COM เกี่ยวกับความจริงที่ว่าปั๊มมีกำลังสูง ฉันใช้รีเลย์ 220 ตัวที่สองสำหรับปั๊มนั้น และขับด้วยรีเลย์บน PCB
คุณสามารถดาวน์โหลดไฟล์ PCB เช่นไฟล์ Altium PCB และไฟล์ Gerber ได้จาก GitHub ของฉันที่นี่
ขั้นตอนที่ 5: รหัส
ฉันใช้ STM32Cube IDE ซึ่งเป็นโซลูชันแบบครบวงจรสำหรับการพัฒนาโค้ดจาก STMicroelectronics มันขึ้นอยู่กับ Eclipse IDE พร้อมคอมไพเลอร์ GCC ARM นอกจากนี้ยังมี STM32CubeMX อยู่ด้วย คุณสามารถหาข้อมูลเพิ่มเติมได้ที่นี่ ตอนแรก ฉันเขียนโค้ดที่รวมข้อมูลจำเพาะของรถถังของเรา (ความสูงและเส้นผ่านศูนย์กลาง) อย่างไรก็ตาม ฉันตัดสินใจเปลี่ยนเป็น GUI เพื่อตั้งค่าพารามิเตอร์ตามข้อกำหนดที่แตกต่างกัน
ขั้นตอนที่ 6: การติดตั้งบน Tank
ในที่สุดฉันก็ทำกล่องง่าย ๆ เพื่อป้องกัน PCB จากน้ำ นอกจากนี้ ฉันยังทำรูที่ด้านบนของถังเพื่อใส่เซ็นเซอร์ลงไป