- คำอธิบายการทำงาน:
- ส่วนประกอบ:
- การเขียนโปรแกรม:
- การออกแบบวงจรและ PCB โดยใช้ EasyEDA:
- การคำนวณและการสั่งซื้อตัวอย่าง PCB ทางออนไลน์:
ในโครงการนี้เราจะใช้ไมโครคอนโทรลเลอร์ PIC เพื่อควบคุมโหลด AC บางส่วนจากระยะไกลโดยใช้รีโมท IR โครงการที่คล้ายกัน IR รีโมทคอนโทรล Home Automation ได้ทำกับ Arduino แล้วเช่นกัน แต่ที่นี่เราออกแบบบน PCB โดยใช้ตัวออกแบบและจำลอง PCB ออนไลน์ของ EasyEDA และใช้บริการออกแบบ PCB เพื่อสั่งซื้อบอร์ด PCB ดังแสดงในส่วนถัดไปของ บทความ.
ในตอนท้ายของโปรเจ็กต์นี้คุณจะสามารถสลับ (เปิด / ปิด) โหลด AC ใด ๆ โดยใช้รีโมทธรรมดาจากเก้าอี้ / เตียงของคุณ เพื่อให้โครงการนี้น่าสนใจยิ่งขึ้นเราได้เปิดใช้คุณลักษณะเพื่อควบคุมความเร็วของพัดลมด้วยความช่วยเหลือของ Triac ทั้งหมดนี้สามารถทำได้ด้วยการคลิกบนรีโมท IR ของคุณ คุณสามารถใช้รีโมททีวี / ดีวีดี / MP3 ใดก็ได้สำหรับโปรเจ็กต์นี้ ไมโครคอนโทรลเลอร์รับสัญญาณ IR ที่แตกต่างกันจากรีโมทซึ่งจะควบคุมรีเลย์ตามลำดับผ่านวงจรขับรีเลย์ รีเลย์เหล่านี้ใช้ในการเชื่อมต่อและตัดการเชื่อมต่อโหลด AC (ไฟ / พัดลม)
คำอธิบายการทำงาน:
การทำงานของโครงการนี้ค่อนข้างง่ายที่จะเข้าใจ เมื่อกดปุ่มบนรีโมท IR จะส่งลำดับของรหัสในรูปแบบของพัลส์ที่เข้ารหัสโดยใช้ความถี่มอดูเลต 38Khz พัลส์เหล่านี้ได้รับโดย เซ็นเซอร์TSOP1738และอ่านโดยคอนโทรลเลอร์ จากนั้นคอนโทรลเลอร์จะถอดรหัสรถไฟที่ได้รับของพัลส์เป็นค่าฐานสิบหกและเปรียบเทียบกับค่าฐานสิบหกที่กำหนดไว้ล่วงหน้าในโปรแกรมของเรา
หากการแข่งขันใด ๆ เกิดขึ้นคอนโทรลเลอร์จะดำเนินการทำงานแบบสัมพัทธ์โดยการทริกเกอร์ Relay / Triac ตามลำดับและผลลัพธ์ที่เกี่ยวข้องจะถูกระบุด้วย LED บนบอร์ด ในโครงการนี้เราได้ใช้หลอดไฟ 4 หลอด (หลอดไฟขนาดเล็ก) ที่มีสีต่างกันเพื่อให้แสงสว่างและหลอดไฟอีกหลอดหนึ่ง (หลอดใหญ่กว่า) ถือเป็นพัดลมเพื่อการสาธิต
เราได้เลือกคีย์ 1 เพื่อสลับรีเลย์ 1, 2 เพื่อสลับรีเลย์ 2, 3 เพื่อสลับรีเลย์ 3, 4 เพื่อสลับรีเลย์ 4 และโวล + เพื่อเพิ่มความเร็วพัดลมและโวล - เพื่อลดความเร็วของพัดลม
หมายเหตุ: ที่นี่เราใช้หลอดไฟ 100 วัตต์แทนพัดลม
มีรีโมท IR หลายประเภทสำหรับอุปกรณ์ที่แตกต่างกัน แต่ส่วนใหญ่ใช้งานได้รอบความถี่ 38KHz ในโครงการนี้เราควบคุมเครื่องใช้ภายในบ้านโดยใช้รีโมททีวี IR และในการตรวจจับสัญญาณ IR เราใช้ตัวรับสัญญาณ IR TSOP1738 เซ็นเซอร์ TSOP1738 นี้สามารถตรวจจับสัญญาณความถี่ 38Khz การทำงานของรีโมท IR และ TSOP1738 มีรายละเอียดอยู่ในบทความนี้: ตัวส่งและตัวรับสัญญาณ IR
ไมโครคอนโทรลเลอร์ PIC ของเราทำงานที่ + 5V และรีเลย์ทำงานที่ + 12V ดังนั้นเราจึงใช้หม้อแปลงเพื่อลดระดับ 220V AC และแก้ไขโดยใช้วงจรเรียงกระแสแบบเต็มสะพาน จากนั้นแรงดันไฟฟ้ากระแสตรงที่แก้ไขแล้วนี้จะถูกควบคุมเป็น + 12V และ + 5V โดยใช้ไอซีควบคุม 7812 และ 7805 ตามลำดับ
ในการทริกเกอร์รีเลย์เราใช้ทรานซิสเตอร์เช่น BC547 ซึ่งสามารถทำหน้าที่เป็นสวิตช์อิเล็กทรอนิกส์เพื่อเปิด / ปิดรีเลย์ตามสัญญาณจากไมโครคอนโทรลเลอร์ PIC นอกจากนี้เพื่อควบคุมความเร็วของพัดลมที่เราใช้ TRIAC TRIAC เป็นสารกึ่งตัวนำไฟฟ้าที่สามารถควบคุมแรงดันไฟฟ้าขาออกได้ ความสามารถนี้ใช้เพื่อควบคุมความเร็วของพัดลม
นอกจากนี้เรายังใช้ Triac Driver เพื่อควบคุม Triac โดยใช้ไมโครคอนโทรลเลอร์ PIC ของเรา ไดรเวอร์นี้ใช้เพื่อให้พัลส์มุมยิงให้กับ Triac เพื่อให้สามารถควบคุมกำลังขับได้ ที่นี่เราได้ใช้การควบคุมความเร็ว 6 ระดับ เมื่อระดับ 0 พัดลมจะปิด เมื่อเลเวลเป็น 1 ความเร็วจะเป็น 1/5 ของความเร็วเต็ม เมื่อเลเวลเป็น 2 ความเร็วจะเป็น 2 ใน 5 ของความเร็วเต็มและตามลำดับสำหรับคนอื่น ๆ ระดับปัจจุบันของความเร็วสามารถตรวจสอบได้โดยใช้จอแสดงผล 7 ส่วนบนบอร์ด
แผนภาพบล็อกของโครงการแสดงไว้ด้านล่าง
ส่วนประกอบ:
ส่วนประกอบที่จำเป็นในการสร้างโครงการนี้มีดังต่อไปนี้:
- PIC18f2520 ไมโครคอนโทรลเลอร์ -1
- TSOP1738 -1
- IR TV / DVD รีโมท -1
- ทรานซิสเตอร์ BC547 -4
- รีเลย์ 12 โวลต์ -4
- หลอดไฟพร้อมที่ยึด -5
- การเชื่อมต่อสายไฟ -
- EasyEda PCB -1
- 16x2 LCD
- แหล่งจ่ายไฟ 12v
- ขั้วต่อขั้ว 2 ขา '-8
- ขั้วต่อขั้วต่อ 3 ขา -1
- หม้อแปลง 12-0-12 -1 -
- ตัวควบคุมแรงดันไฟฟ้า 7805 -1
- ตัวควบคุมแรงดันไฟฟ้า 7812 -1
- ตัวเก็บประจุ 1000uf -1
- ตัวเก็บประจุ 10uf -1
- ตัวเก็บประจุ 0.1uf -1
- ตัวเก็บประจุ 0.01 ยูเอฟ 400 โวลต์ -1
- 10k -5
- 1 พัน -5
- 100 โอห์ม -7
- ส่วนแคโทดทั่วไป -1
- 1n4007 ไดโอด -10
- BT136 ไตรแอก -1
- ส่วนหัวชาย / หญิง -
- ไฟ LED -6
- Opto-coupler moc3021 -1
- Opto-coupler mtc2e หรือ 4n35 -1
- คริสตัล 20Mhz -1
- 33pf ตัวเก็บประจุ -2
- 5.1v ซีเนอร์ไดโอด -1
- ตัวต้านทาน 47 โอห์ม 2 วัตต์ -1
ส่วนประกอบทั้งหมดนี้มักใช้กันทั่วไปและสามารถหาซื้อได้ง่าย อย่างไรก็ตามหากคุณกำลังมองหาสินค้าออนไลน์ที่ดีที่สุดเราขอแนะนำให้คุณ LCSC
LCSC เป็นร้านค้าออนไลน์ที่ยอดเยี่ยมในการซื้อส่วนประกอบอิเล็กทรอนิกส์ของคุณสำหรับโครงการทุกประเภท มีส่วนประกอบประมาณ 25,000 ชนิดและสิ่งที่ดีที่สุดคือพวกเขาขายสินค้าจำนวนน้อยสำหรับโครงการขนาดเล็กและยังมี Global Shipping
การถอดรหัส IR Remote:
ดังที่กล่าวไว้ก่อนหน้านี้คุณสามารถใช้รีโมทชนิดใดก็ได้สำหรับโครงการของคุณ แต่เราต้องรู้ว่าสัญญาณชนิดใดที่สร้างขึ้นจากรีโมทนั้น สำหรับแต่ละคีย์บนรีโมทจะมีค่า HEX เทียบเท่าสำหรับคีย์นั้น การใช้ค่า HEX นี้เราสามารถแยกความแตกต่างระหว่างแต่ละคีย์ในด้านไมโครคอนโทรลเลอร์ของเรา ดังนั้นก่อนที่เราจะตัดสินใจใช้รีโมทเราควรทราบค่า HEX สำหรับคีย์ที่ตั้งไว้ในรีโมทนั้น ๆ ในโครงการนี้เราได้ใช้รีโมต NEC ค่า HEX สำหรับคีย์บนรีโมท NEC แสดงไว้ด้านล่าง
ดังที่คุณสังเกตได้ว่าค่า HEX มีอักขระ 7 ตัวซึ่งมีเพียงสองตัวสุดท้ายเท่านั้นที่แตกต่างกันดังนั้นเราจึงสามารถพิจารณาเฉพาะสองหลักสุดท้ายเพื่อแยกความแตกต่างระหว่างแต่ละคีย์
แผนภูมิวงจรรวม:
แผนผังสำหรับโครงการแสดงไว้ด้านล่าง
แผนผังข้างต้นทำได้ง่ายโดยใช้โปรแกรมแก้ไขแผนผัง esayEDA เนื่องจากมีเค้าโครงของส่วนประกอบทั้งหมดที่ใช้ในโครงการนี้ นอกจากนี้ยังไม่ต้องติดตั้งและสามารถใช้งานออนไลน์ได้ทุกที่
ค่าพินเอาต์และส่วนประกอบถูกระบุไว้อย่างชัดเจนในแผนผังด้านบน คุณยังสามารถดาวน์โหลดไฟล์แผนผังได้จากที่นี่
การเขียนโปรแกรม:
โปรแกรมสำหรับโครงการนี้ทำโดยใช้ MPLABX รหัสนั้นค่อนข้างเรียบง่ายและเข้าใจง่าย โค้ดที่สมบูรณ์จะได้รับในตอนท้ายของบทช่วยสอนนี้ส่วนที่สำคัญบางส่วนของโปรแกรมจะอธิบายไว้ด้านล่าง
ในตอนต้นของรหัสเราควรรวมไลบรารีที่จำเป็นกำหนดพินและประกาศตัวแปร
# รวม
หลังจากนั้นเราได้สร้างฟังก์ชันหน่วงเวลาอย่างง่ายโดยใช้ลูป“ สำหรับ”
ความล่าช้าเป็นโมฆะ (เวลา int) {สำหรับ (int i = 0; i
หลังจากนั้นเราได้เริ่มการจับเวลาโดยใช้ฟังก์ชันต่อไปนี้
ตัวจับเวลาเป็นโมฆะ () // 10 -> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; // Timer Clock Source มาจาก Prescaler T0CS = 0; // Prescaler รับนาฬิกาจาก FCPU (5MHz) T08BIT = 0; // 16 BIT MODE TMR0IE = 1; // เปิดใช้งาน TIMER0 ขัดจังหวะ PEIE = 1; // เปิดใช้งาน Peripheral Interrupt GIE = 1; // เปิดใช้งาน INT ทั่วโลก TMR0ON = 1; // ตอนนี้เริ่มจับเวลา! }
ตอนนี้ในฟังก์ชั่นหลักเราได้บอกเส้นทางไปยังหมุดที่เลือกและเริ่มต้นตัวจับเวลาและอินเทอร์รัปต์ภายนอก int0 เพื่อตรวจจับการข้ามศูนย์
ADCON1 = 0b00001111; ทริสบี 1 = 0; TRISB2 = 1; ทริสบี 3 = 0; TRISB4 = 0; ทริสบี 5 = 0; TRISC = 0x00; ทริซ่า = 0x00; ปอร์ตา = 0xc0; ทริสบี 6 = 0; RB6 = 1; รีเลย์ 1 = 0; รีเลย์ 2 = 0; รีเลย์ 3 = 0; รีเลย์ 4 = 0; rly1LED = 0; rly3LED = 0; rly2LED = 0; rly4LED = 0; fanLED = 0; ฉัน = 0; ir = 0; ไตร = 0; จับเวลา (); INTEDG0 = 0; // ขัดจังหวะที่ขอบล้ม INT0IE = 1; // เปิดใช้งานอินเทอร์รัปต์ภายนอก INT0 (RB0) INT0IF = 0; // ล้าง INT0 External Interrupt Flag bit PEIE = 1; // เปิดใช้งาน Peripheral Interrupt GIE = 1; // เปิดใช้งาน INT ทั่วโลก
ตอนนี้เราไม่ได้ใช้โหมดขัดจังหวะหรือจับภาพและเปรียบเทียบเพื่อตรวจจับสัญญาณ IR ที่นี่เราเพิ่งใช้พินดิจิทัลเพื่ออ่านข้อมูลเหมือนกับที่เราอ่านปุ่มกด เมื่อใดก็ตามที่สัญญาณสูงหรือต่ำเราเพียงแค่ใส่วิธี debouncing และเรียกใช้ตัวจับเวลา เมื่อใดก็ตามที่พินเปลี่ยนสถานะเป็นอีกค่าเวลาจะถูกบันทึกไว้ในอาร์เรย์
IR ระยะไกลส่งลอจิก 0 เป็น 562.5us และตรรกะ 1 เป็น 2250us เมื่อใดก็ตามที่ตัวจับเวลาอ่านรอบ 562.5us เราจะถือว่ามันเป็น 0 และเมื่อตัวจับเวลาอ่านรอบ 2250us เราจะถือว่าเป็น 1 จากนั้นเราจะแปลงเป็นเลขฐานสิบหก
สัญญาณขาเข้าจากรีโมทมี 34 บิต เราเก็บไบต์ทั้งหมดไว้ในอาร์เรย์แล้วถอดรหัสไบต์สุดท้ายที่จะใช้
ในขณะที่ (ir == 1); INT0IE = 0; ในขณะที่ (ir == 0); TMR0 = 0; ในขณะที่ (ir == 1); ผม ++; dat = TMR0; ถ้า (dat> 5000 && dat <12000) {} else {i = 0; INT0IE = 1; } ถ้า (i> = 33) {GIE = 0; ล่าช้า (50); cmd = 0; สำหรับ (j = 26; j <34; j ++) {if (dat> 1000 && dat <2000) cmd << = 1; อื่นถ้า (dat> 3500 && dat <4500) {cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
โค้ดด้านบนรับและถอดรหัสสัญญาณ IR โดยใช้ตัวจับเวลาขัดจังหวะและเก็บค่า HEX ที่สอดคล้องกันในตัวแปร cmd ตอนนี้เราสามารถเปรียบเทียบค่า HEX นี้ (ตัวแปร cmd) กับค่า HEX ที่กำหนดไว้ล่วงหน้าและสลับรีเลย์ตามที่แสดงด้านล่าง
ถ้า (cmd == 0xAF) {relay1 = ~ relay1; rly1LED = ~ rly1LED; } else if (cmd == 0x27) {relay2 = ~ relay2; rly2LED = ~ rly2LED; } else if (cmd == 0x07) {relay3 = ~ relay3; rly3LED = ~ rly3LED; } else if (cmd == 0xCF) {relay4 = ~ relay4; rly4LED = ~ rly4LED; } else if (cmd == 0x5f) {ความเร็ว ++; ถ้า (ความเร็ว> 5) {ความเร็ว = 5; }} else if (cmd == 0x9f) {speed--; ถ้า (ความเร็ว <= 0) {ความเร็ว = 0; }}
ตอนนี้หากต้องการทราบว่าพัดลมของเรากำลังทำงานอยู่ที่ใดเราควรใช้จอแสดงผล 7 ส่วน บรรทัดต่อไปนี้ใช้เพื่อสั่งให้หมุดของจอแสดงผล 7 ส่วน
ถ้า (ความเร็ว == 5) // ปิด 5x2 = 10ms triger // ความเร็ว 0 {PORTA = 0xC0; // แสดง 0 RB6 = 1; fanLED = 0; } else if (speed == 4) // ทริกเกอร์ 8 ms // ความเร็ว 1 {PORTA = 0xfc; // แสดง 1 RB6 = 1; fanLED = 1; } else if (ความเร็ว == 3) // ทริกเกอร์ 6 ms // ความเร็ว 2 {PORTA = 0xE4; // แสดง 2 RB6 = 0; fanLED = 1; } else if (ความเร็ว == 2) // ทริกเกอร์ 4ms // ความเร็ว 3 {PORTA = 0xF0; // แสดง 3 RB6 = 0; fanLED = 1; } else if (ความเร็ว == 1) // ทริกเกอร์ 2ms // ความเร็ว 4 {PORTA = 0xD9; // แสดง 4 RB6 = 0; fanLED = 1; } else if (speed == 0) // 0ms trigger // speed 5 full power {PORTA = 0xD2; // แสดง 5 RB6 = 0; fanLED = 1; }
ฟังก์ชันด้านล่างนี้ใช้สำหรับการขัดจังหวะภายนอกและเวลาล้น ฟังก์ชั่นนี้มีหน้าที่ตรวจจับการข้ามศูนย์และการขับ Triac
เป็นโมฆะ interrupt isr () {if (INT0IF) {delay (speed); ไตร = 1; สำหรับ (int t = 0; t <100; t ++); ไตร = 0; INT0IF = 0; } if (TMR0IF) // ตรวจสอบว่าเป็น TMR0 Overflow ISR หรือไม่ {TMR0IF = 0; }}
PCBสุดท้ายสำหรับระบบอัตโนมัติภายในบ้านที่ควบคุมด้วยรีโมท IR นี้ มีลักษณะดังที่แสดงด้านล่าง:
การออกแบบวงจรและ PCB โดยใช้ EasyEDA:
ในการออกแบบระบบอัตโนมัติภายในบ้านของรีโมทคอนโทรลนี้ เราได้ใช้ EasyEDA ซึ่งเป็นเครื่องมือ EDA ออนไลน์ฟรีสำหรับการสร้างวงจรและ PCB อย่างราบรื่น ก่อนหน้านี้เราได้สั่งซื้อ PCB จาก EasyEDA เพียงไม่กี่ชิ้นและยังคงใช้บริการของพวกเขาเนื่องจากเราพบกระบวนการทั้งหมดตั้งแต่การวาดวงจรไปจนถึงการสั่งซื้อ PCBs สะดวกและมีประสิทธิภาพมากขึ้นเมื่อเปรียบเทียบกับผู้ผลิต PCB อื่น ๆ EasyEDA นำเสนอการวาดวงจรการจำลองการออกแบบ PCB ฟรีและยังมีบริการ PCB ที่กำหนดเองคุณภาพสูง แต่ราคาต่ำ ดูบทช่วยสอนที่สมบูรณ์เกี่ยวกับวิธีใช้ Easy EDA สำหรับการสร้างแผนผังโครงร่าง PCB จำลองวงจร ฯลฯ
EasyEDA พัฒนาขึ้นทุกวัน พวกเขาได้เพิ่มคุณสมบัติใหม่มากมายและปรับปรุงประสบการณ์การใช้งานโดยรวมซึ่งทำให้ EasyEDA ง่ายขึ้นและใช้งานได้สำหรับการออกแบบวงจร เร็ว ๆ นี้พวกเขากำลังจะเปิดตัวเวอร์ชันเดสก์ท็อปซึ่งสามารถดาวน์โหลดและติดตั้งบนคอมพิวเตอร์ของคุณเพื่อใช้งานแบบออฟไลน์
ใน EasyEDA คุณสามารถทำให้การออกแบบวงจรและ PCB ของคุณเป็นแบบสาธารณะเพื่อให้ผู้ใช้รายอื่นสามารถคัดลอกหรือแก้ไขได้และสามารถใช้ประโยชน์จากที่นั่นได้นอกจากนี้เรายังทำให้รูปแบบวงจรและ PCB ทั้งหมดของเราเป็นแบบสาธารณะสำหรับระบบอัตโนมัติภายในบ้านของรีโมทคอนโทรลนี้
ด้านล่างนี้เป็นภาพรวมของเลเยอร์บนสุดของเลย์เอาต์ PCB จาก EasyEDA คุณสามารถดูเลเยอร์ใดก็ได้ (บน, ล่าง, ท็อปซิล, พื้นและอื่น ๆ) ของ PCB โดยเลือกเลเยอร์จากหน้าต่าง 'เลเยอร์'
การคำนวณและการสั่งซื้อตัวอย่าง PCB ทางออนไลน์:
หลังจากออกแบบ PCB เสร็จแล้วคุณสามารถคลิกไอคอนของ Fabrication output ซึ่งจะนำคุณไปสู่หน้าคำสั่งซื้อ PCB ที่นี่คุณสามารถดู PCB ของคุณใน Gerber Viewer หรือดาวน์โหลดไฟล์ Gerber ของ PCB ของคุณและส่งไปยังผู้ผลิตรายใดก็ได้นอกจากนี้ยังง่ายกว่ามาก (และถูกกว่า) ในการสั่งซื้อโดยตรงใน EasyEDA ที่นี่คุณสามารถเลือกจำนวน PCB ที่คุณต้องการสั่งจำนวนชั้นทองแดงที่คุณต้องการความหนาของ PCB น้ำหนักทองแดงและแม้แต่สี PCB หลังจากที่คุณเลือกตัวเลือกทั้งหมดแล้วให้คลิก“ บันทึกลงในรถเข็น” และดำเนินการสั่งซื้อของคุณให้เสร็จสิ้นคุณจะได้รับ PCBs ภายในไม่กี่วัน
คุณสามารถสั่งซื้อ PCB นี้ได้โดยตรงหรือดาวน์โหลดไฟล์ Gerber โดยใช้ลิงค์นี้
หลังจากสั่งซื้อ PCB ไม่กี่วันเราก็ได้รับ PCB บอร์ดที่เราได้รับแสดงอยู่ด้านล่าง
เมื่อเราได้รับ PCB แล้วฉันก็ติดตั้งส่วนประกอบที่จำเป็นทั้งหมดบน PCB และในที่สุดเราก็มีระบบอัตโนมัติภายในบ้านที่ควบคุมด้วยรีโมท IRของเรา ให้ตรวจสอบวงจรนี้ในวิดีโอสาธิตที่ท้ายบทความ