ในโครงการนี้เราจะอินเตอร์เฟซRelay กับไมโครคอนโทรลเลอร์ PIC PIC16F877A รีเลย์เป็นอุปกรณ์เชิงกลเพื่อควบคุมไฟฟ้าแรงสูงเครื่องใช้ไฟฟ้ากระแสสูง " เปิด " หรือ " ปิด " จากระดับแรงดันไฟฟ้าที่ต่ำ รีเลย์ให้แยกระหว่างสองระดับแรงดันไฟฟ้าและมันก็เป็นเรื่องปกติที่ใช้ในการควบคุมอุปกรณ์ไฟฟ้ากระแสสลับจากรีเลย์เชิงกลไปจนถึงโซลิดสเตตมีรีเลย์ประเภทต่างๆที่มีอยู่ในอุปกรณ์อิเล็กทรอนิกส์ ในโครงการนี้เราจะใช้รีเลย์เชิงกล
ในโครงการนี้เราจะทำสิ่งต่อไปนี้ -
- เราจะเชื่อมต่อสวิตช์สำหรับการป้อนข้อมูลจากผู้ใช้
- ควบคุมหลอดไฟ 220V ACพร้อมรีเลย์ 5V
- เพื่อควบคุมการถ่ายทอดเราจะใช้ BC547 ทรานซิสเตอร์ NPN และทรานซิสเตอร์จะถูกควบคุมจากPIC16F877Aไฟ led จะแจ้งให้รีเลย์เปิดหรือปิดเงื่อนไข
หากคุณยังใหม่กับไมโครคอนโทรลเลอร์ PIC ให้เริ่มต้นด้วยการเริ่มต้นใช้งานไมโครคอนโทรลเลอร์ PIC
ส่วนประกอบที่ต้องการ:
- PIC16F877A
- คริสตัล 20Mhz
- เซรามิก 33pF 2 ชิ้น
- ตัวต้านทาน 4.7k 3 ชิ้น
- ตัวต้านทาน 1k
- 1 LED
- BC547 ทรานซิสเตอร์
- 1N4007 ไดโอด
- รีเลย์ลูกบาศก์ 5V
- หลอดไฟ AC
- เขียงหั่นขนม
- สายไฟสำหรับเชื่อมต่อชิ้นส่วน
- อะแดปเตอร์ 5V หรือแหล่งจ่ายไฟ 5V ที่มีความสามารถในปัจจุบันอย่างน้อย 200mA
รีเลย์และการทำงาน:
รีเลย์ทำงานเหมือนกับสวิตช์ทั่วไป รีเลย์เชิงกลใช้แม่เหล็กชั่วคราวที่ทำจากขดลวดแม่เหล็กไฟฟ้า เมื่อเราจ่ายกระแสไฟฟ้าเพียงพอในขดลวดนี้มันจะกลายเป็นพลังงานและดึงแขน เนื่องจากวงจรที่เชื่อมต่อกับรีเลย์สามารถปิดหรือเปิดได้ อินพุตและเอาต์พุตไม่มีการเชื่อมต่อไฟฟ้าใด ๆ ดังนั้นจึงแยกอินพุตและเอาต์พุต เรียนรู้เพิ่มเติมเกี่ยวกับรีเลย์และโครงสร้างที่นี่
รีเลย์สามารถพบได้ในช่วงแรงดันไฟฟ้าที่แตกต่างกันเช่น5V, 6V, 12V, 18Vเป็นต้นในโครงการนี้เราจะใช้รีเลย์ 5Vเนื่องจากแรงดันไฟฟ้าในการทำงานของเราคือ5 โวลต์ที่นี่ นี้5V ลูกบาศก์ถ่ายทอดความสามารถในการสลับ7Aโหลดที่240VACหรือ10Aโหลดที่110VACอย่างไรก็ตามแทนการโหลดที่มากเราจะใช้หลอดไฟ 220VACและเปลี่ยนโดยใช้รีเลย์
นี่คือรีเลย์ 5V ที่เราใช้ในโครงการนี้ การให้คะแนนในปัจจุบันมีการระบุไว้อย่างชัดเจนสำหรับสองระดับแรงดันไฟฟ้า10A ที่ 120VACและ7A ที่ 240VAC เราต้องเชื่อมต่อโหลดข้ามรีเลย์น้อยกว่าพิกัดที่กำหนด
การถ่ายทอดนี้มี5 ขาถ้าเราเห็นพินเอาต์เราจะเห็น -
L1และL2เป็นขาขดลวดแม่เหล็กไฟฟ้าภายใน เราจำเป็นต้องควบคุมพินทั้งสองนี้เพื่อเปิดรีเลย์ ' ON ' หรือ ' OFF ' ถัดไปสามหมุดเป็นเสา NOและNCเสาเชื่อมต่อกับแผ่นโลหะภายในซึ่งจะเปลี่ยนการเชื่อมต่อเมื่อรีเลย์เปิดขึ้น ในสภาพปกติPOLEเป็น shorted กับNCNCยืนสำหรับการเชื่อมต่อได้ตามปกติเมื่อหันมาถ่ายทอดบนเสาเปลี่ยนตำแหน่งและกลายเป็นที่เชื่อมต่อกับNONOย่อมาจากปกติเปิด
ในวงจรของเราเราได้ทำการเชื่อมต่อรีเลย์กับทรานซิสเตอร์และไดโอด รีเลย์พร้อมทรานซิสเตอร์และไดโอดมีจำหน่ายในตลาดเป็นโมดูลรีเลย์ดังนั้นเมื่อคุณใช้โมดูลรีเลย์คุณไม่จำเป็นต้องเชื่อมต่อวงจรไดรเวอร์ (ทรานซิสเตอร์และไดโอด)
รีเลย์ถูกใช้ในโครงการระบบอัตโนมัติภายในบ้านทั้งหมดเพื่อควบคุมเครื่องใช้ไฟฟ้าภายในบ้าน
แผนภูมิวงจรรวม:
วงจรที่สมบูรณ์สำหรับการเชื่อมต่อรีเลย์กับไมโครคอนโทรลเลอร์ PICมีดังต่อไปนี้:
ในข้างต้นวงจรpic16F877Aถูกนำมาใช้ซึ่งในพอร์ต B LEDและทรานซิสเตอร์มีการเชื่อมต่อซึ่งถูกควบคุมเพิ่มเติมได้โดยใช้สวิทช์ TACที่RBOR1ให้อคติปัจจุบันทรานซิสเตอร์R2เป็นตัวต้านทานแบบดึงลงที่ใช้กับสวิตช์สัมผัส มันจะให้ลอจิก 0เมื่อไม่ได้กดสวิตช์1N4007เป็นไดโอดยึดที่ใช้สำหรับขดลวดแม่เหล็กไฟฟ้ารีเลย์ของ เมื่อรีเลย์จะปิดมีโอกาสที่จะเกิดแรงดันไฟฟ้าสูงและไดโอดจะระงับมัน จำเป็นต้องใช้ทรานซิสเตอร์ในการขับเคลื่อนรีเลย์เนื่องจากต้องใช้กระแสมากกว่า50mAซึ่งไมโครคอนโทรลเลอร์ไม่สามารถให้ได้ นอกจากนี้เรายังสามารถใช้ULN2003แทนทรานซิสเตอร์ได้ซึ่งเป็นทางเลือกที่ดีกว่าหากต้องการรีเลย์มากกว่าสองหรือสามตัวสำหรับการใช้งานตรวจสอบวงจรโมดูลรีเลย์ LEDทั่วพอร์ต RB2จะแจ้งให้ทราบ“ ถ่ายทอดอยู่บน ”
วงจรสุดท้ายจะมีลักษณะดังนี้ -
คุณสามารถเรียนรู้การควบคุมรีเลย์ด้วย Arduino ได้ที่นี่และหากคุณสนใจรีเลย์จริงๆให้ตรวจสอบวงจรรีเลย์ทั้งหมดที่นี่
คำอธิบายรหัส:
ที่จุดเริ่มต้นของmain.cไฟล์เราเพิ่มสายการกำหนดค่าสำหรับpic16F877Aและกำหนดชื่อพิทั่วPORTB
เช่นเคยเราต้องตั้งค่าบิตการกำหนดค่าในไมโครคอนโทรลเลอร์ pic กำหนดมาโครบางตัวรวมถึงไลบรารีและความถี่คริสตัล คุณสามารถตรวจสอบรหัสสำหรับทุกคนในรหัสที่สมบูรณ์ได้รับในตอนท้าย เราได้ทำให้RB0เป็นอินพุทในพินนี้สวิตช์เชื่อมต่ออยู่
# รวม
หลังจากนั้นเราเรียกฟังก์ชัน system_init () ที่เรากำหนดทิศทางพินเริ่มต้นและกำหนดค่าสถานะเริ่มต้นของพินด้วย
ในฟังก์ชัน system_init () เราจะเห็น
โมฆะ system_init (โมฆะ) { TRISBbits.TRISB0 = 1; // การตั้งค่า Sw เป็นอินพุต TRISBbits.TRISB1 = 0; // การตั้งค่า LED เป็นเอาต์พุต TRISBbits.TRISB2 = 0; // กำหนดพินรีเลย์เป็น LED เอาต์พุต= 0; รีเลย์ = 0; }
ใน หลักของ การทำงานของเราอย่างต่อเนื่องตรวจสอบการกดสวิตช์ถ้าเราตรวจสอบการกดสวิตช์โดยการตรวจจับสูงตรรกะทั่วRB0; เรารอสักครู่และดูว่าสวิตช์ยังคงกดอยู่หรือไม่หากสวิตช์ยังคงกดอยู่เราจะกลับสถานะของขา RELAY และ LED
โมฆะ main (โมฆะ) { system_init (); // ระบบเตรียมพร้อม ในขณะที่ (1) { if (SW == 1) {// สวิตช์ถูกกด __delay_ms (50); // debounce delay ถ้า (SW == 1) {// สวิทช์ยังคงกด LED =! LED; // กลับสถานะพิน รีเลย์ =! รีเลย์; } } } คืน; }
รหัสที่สมบูรณ์และวิดีโอสาธิตสำหรับการเชื่อมต่อรีเลย์นี้ได้รับด้านล่าง