- โมดูลตัวส่งและตัวรับ RF 433MHz:
- ต้องการตัวเข้ารหัสและตัวถอดรหัส:
- ส่วนประกอบที่ต้องการ:
- แผนภูมิวงจรรวม:
- คำอธิบายรหัส:
สวัสดีครับทุกคนวันนี้ในโครงการนี้เราจะติดต่อรับสัญญาณ RF และส่งสัญญาณโมดูลไมโครคอนโทรลเลอร์ PIC และการสื่อสารระหว่างสองไมโครคอนโทรลเลอร์รูปแบบไร้สายที่แตกต่างกัน
ในโครงการนี้เราจะทำสิ่งต่อไปนี้: -
- เราจะใช้PIC16F877Aสำหรับเครื่องส่งและPIC18F4520สำหรับส่วนเครื่องรับ
- เราจะเชื่อมต่อ Keypad และ LCD กับไมโครคอนโทรลเลอร์ PIC
- ทางฝั่งเครื่องส่งเราจะเชื่อมต่อปุ่มกดกับ PIC และส่งข้อมูล ด้านเครื่องรับเราจะรับข้อมูลแบบไร้สายและแสดงว่าปุ่มใดถูกกดบนจอ LCD
- เราจะใช้ตัวเข้ารหัสและตัวถอดรหัส IC เพื่อส่งข้อมูล 4 บิต
- ความถี่ในการรับจะเป็น 433Mhz โดยใช้โมดูล RF TX-RX ราคาถูกที่มีอยู่ในตลาด
ก่อนที่จะเข้าสู่แผนผังและโค้ดเรามาทำความเข้าใจกับการทำงานของโมดูล RF ที่มี IC ตัวเข้ารหัส - ตัวถอดรหัส อ่านบทความสองบทความด้านล่างเพื่อเรียนรู้วิธีการเชื่อมต่อ LCD และปุ่มกดด้วยไมโครคอนโทรลเลอร์ PIC:
- การเชื่อมต่อ LCD กับไมโครคอนโทรลเลอร์ PIC โดยใช้ MPLABX และ XC8
- 4x4 Matrix Keypad การเชื่อมต่อกับไมโครคอนโทรลเลอร์ PIC
โมดูลตัวส่งและตัวรับ RF 433MHz:
นี่คือโมดูลตัวส่งและตัวรับที่เราใช้ในโครงการ เป็นโมดูลที่ถูกที่สุดสำหรับ433 MHzโมดูลเหล่านี้รับข้อมูลอนุกรมในช่องเดียว
ถ้าเราเห็นรายละเอียดของโมดูลที่ส่งเป็นคะแนนสำหรับ3.5-12V การดำเนินงานที่เป็นแรงดันไฟฟ้าอินพุตและระยะการส่งเป็น 20-200 เมตร มันไม่ส่งในน (Audio Modulation) โปรโตคอลที่ 433 MHzความถี่ เราสามารถถ่ายโอนข้อมูลที่ความเร็วของ4KB / S ที่มีอำนาจ
ในภาพบนเราจะเห็นขาออกของโมดูลเครื่องส่งสัญญาณ จากซ้ายไปขวาหมุดเป็นVCC ข้อมูลและ GND นอกจากนี้เรายังสามารถเพิ่มเสาอากาศและบัดกรีบนจุดที่แสดงในภาพด้านบน
สำหรับข้อกำหนดของตัวรับสัญญาณตัวรับมีระดับ5V dc และ 4MA กระแสไฟฟ้าดับเป็นอินพุต ความถี่ที่รับคือ433.92 MHzพร้อมความไว-105DB
ในภาพด้านบนเราจะเห็นขาออกของโมดูลตัวรับสัญญาณ สี่ขาจากซ้ายไปขวา, VCC, ข้อมูลข้อมูลและ GND หมุดสองตัวตรงกลางเหล่านี้เชื่อมต่อภายใน เราจะใช้อันใดอันหนึ่งหรือทั้งสองอย่างก็ได้ แต่เป็นแนวทางปฏิบัติที่ดีที่จะใช้ทั้งสองอย่างเพื่อลดการเชื่อมต่อสัญญาณรบกวน
นอกจากนี้ยังมีสิ่งหนึ่งที่ไม่ได้กล่าวถึงในแผ่นข้อมูลที่เหนี่ยวนำตัวแปรหรือหม้อที่ตรงกลางของโมดูลที่ใช้สำหรับการสอบเทียบความถี่หากเราไม่สามารถรับข้อมูลที่ส่งได้มีความเป็นไปได้ที่ความถี่ในการส่งและรับจะไม่ตรงกัน นี่คือวงจร RF และเราจำเป็นต้องปรับแต่งเครื่องส่งที่จุดความถี่ส่งที่สมบูรณ์แบบ นอกจากนี้เช่นเดียวกับเครื่องส่งสัญญาณโมดูลนี้ยังมีพอร์ตเสาอากาศ เราสามารถบัดกรีลวดในรูปแบบขดเพื่อรับสัญญาณได้นานขึ้น
ช่วงการส่งข้อมูลขึ้นอยู่กับแรงดันไฟฟ้าที่จ่ายให้กับเครื่องส่งและความยาวของเสาอากาศทั้งสองด้าน สำหรับโครงการเฉพาะนี้เราไม่ได้ใช้เสาอากาศภายนอกและใช้ 5V ที่ด้านเครื่องส่งสัญญาณ เราตรวจสอบด้วยระยะ 5 เมตรและทำงานได้อย่างสมบูรณ์
โมดูล RF มีประโยชน์มากสำหรับการสื่อสารไร้สายระยะไกล วงจรตัวส่งและตัวรับสัญญาณ RF พื้นฐานแสดงอยู่ที่นี่ เราได้ทำโครงการมากมายโดยใช้โมดูล RF:
- เครื่องใช้ในบ้านที่ควบคุมด้วย RF
- รถของเล่นที่ควบคุมด้วยบลูทู ธ โดยใช้ Arduino
- ไฟ LED ควบคุมระยะไกล RF โดยใช้ Raspberry Pi
ต้องการตัวเข้ารหัสและตัวถอดรหัส:
RF Sensor นี้มีข้อบกพร่องเล็กน้อย: -
- การสื่อสารทางเดียว
- เพียงช่องเดียว
- สัญญาณรบกวนมาก
เนื่องจากอุปสรรคนี้เราได้ใช้การเข้ารหัสและถอดรหัสของวงจรรวม, HT12DและHT12EDย่อมาจากdecoderซึ่งจะใช้ในฝั่ง Receiver และEย่อมาจากEncoderซึ่งจะใช้ในฝั่ง Transmitter ของวงจรรวมนี้ให้4 ช่องเนื่องจากการเข้ารหัสและถอดรหัสระดับเสียงต่ำมาก
ในภาพด้านบนด้านซ้ายคือHT12Dตัวถอดรหัสและตัวถอดรหัสด้านขวาคือHT12Eตัวเข้ารหัสหนึ่งตัว IC ทั้งสองเหมือนกันA0 ถึง A7ใช้สำหรับการเข้ารหัสพิเศษ เราสามารถใช้หมุดไมโครคอนโทรลเลอร์เพื่อควบคุมพินเหล่านั้นและตั้งค่าคอนฟิกได้ ต้องจับคู่การกำหนดค่าเดียวกันกับอีกด้านหนึ่ง หากการกำหนดค่าทั้งสองถูกต้องและตรงกันเราสามารถรับข้อมูลได้ 8 พินนี้สามารถเชื่อมต่อกับGndหรือVCCหรือเปิดทิ้งไว้ ไม่ว่าเราจะกำหนดค่าอะไรในตัวเข้ารหัสเราจำเป็นต้องจับคู่การเชื่อมต่อกับตัวถอดรหัส ในโปรเจ็กต์นี้เราจะเปิดพิน 8 พินเหล่านั้นทิ้งไว้สำหรับทั้งตัวเข้ารหัสและตัวถอดรหัส 9 และ 18 พินคือ VSS และ VDD ตามลำดับ เราสามารถใช้หมุดVTเข้าHT12Dเพื่อวัตถุประสงค์ในการแจ้งเตือน สำหรับโครงการนี้เราไม่ได้ใช้มัน TEขาสำหรับการส่งเปิดหรือปิดขา
ส่วนที่สำคัญคือขาOSCที่เราต้องเชื่อมต่อตัวต้านทานเพื่อให้การสั่นของตัวเข้ารหัสและตัวถอดรหัส ตัวถอดรหัสต้องการความสั่นที่สูงกว่าตัวถอดรหัส โดยปกติค่าความต้านทาน Encoder จะ1Megและมูลค่าถอดรหัสเป็น33kเราจะใช้ตัวต้านทานเหล่านั้นสำหรับโครงการของเรา
DOUT pin คือพินข้อมูล RF Transmitter บนHT12EและขาDINในHT12Dใช้เพื่อเชื่อมต่อพินข้อมูลโมดูล RF
ในHT12E, AD8เพื่อAD11คือการใส่ช่องสี่ซึ่งได้รับการแปลงและส่งแบบอนุกรมผ่านโมดูล RF และสิ่งที่ย้อนกลับที่แน่นอนที่เกิดขึ้นในHT12Dข้อมูลแบบอนุกรมที่ได้รับและถอดรหัสและเราได้รับ4 บิตขนานการส่งออกทั่ว 4 ขา D8 เพื่อ D11
ส่วนประกอบที่ต้องการ:
- 2 - กระดานขนมปัง
- 1 - จอแอลซีดี 16x2
- 1 - ปุ่มกด
- HT12D และ HT12E คู่
- RX-TX RF โมดูล
- ที่ตั้งไว้ล่วงหน้า 1-10K
- ตัวต้านทาน 2 - 4.7k
- ตัวต้านทาน 1- 1M
- ตัวต้านทาน 1- 33k
- ตัวเก็บประจุเซรามิก 2- 33pF
- คริสตัล 1 - 20Mhz
- Bergsticks
- สายไฟเส้นเดียวไม่กี่เส้น
- PIC16F877A MCU
- PIC18F4520 MCU
- ตัวขับสกรูสำหรับควบคุมหม้อความถี่จำเป็นต้องหุ้มฉนวนจากร่างกายมนุษย์
แผนภูมิวงจรรวม:
แผนภาพวงจรสำหรับด้านเครื่องส่งสัญญาณ (PIC16F877A):
เราใช้PIC16F877Aเพื่อวัตถุประสงค์ในการส่งสัญญาณ ปุ Hexเชื่อมต่อทั่วทั้งPORTBและ4 ช่องเชื่อมต่อผ่านช่วง 4 บิตPORTDเรียนรู้เพิ่มเติมเกี่ยวกับการเชื่อมต่อปุ่ม 4x4 Matrix ที่นี่
ปักหมุดดังนี้ -
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
แผนภาพวงจรสำหรับด้านตัวรับ (PIC18F4520):
ในภาพด้านบนวงจรตัวรับจะแสดงขึ้น จอแอลซีดีมีการเชื่อมต่อทั่วPORTBเราใช้ออสซิลเลเตอร์ภายในของPIC18F4520สำหรับโครงการนี้ 4 ช่องมีการเชื่อมต่อแบบเดียวกับที่เราทำมาก่อนในวงจรเครื่องส่งสัญญาณ เรียนรู้เพิ่มเติมเกี่ยวกับการเชื่อมต่อ LCD 16x2 กับไมโครคอนโทรลเลอร์ PIC ที่นี่
นี่คือด้านเครื่องส่งสัญญาณ -
และด้านรับในเขียงหั่นขนมแยกต่างหาก -
คำอธิบายรหัส:
รหัสมีสองส่วนส่วนหนึ่งใช้สำหรับเครื่องส่งและส่วนหนึ่งใช้สำหรับเครื่องรับ คุณสามารถดาวน์โหลดโค้ดทั้งหมดได้จากที่นี่
รหัส PIC16F877A สำหรับ RF Transmitter:
เช่นเคยเราต้องตั้งค่าบิตการกำหนดค่าในไมโครคอนโทรลเลอร์ pic กำหนดมาโครบางตัวรวมถึงไลบรารีและความถี่คริสตัล AD8-AD11พอร์ตของ Encoder IC ถูกกำหนดให้เป็นRF_TXที่PORTDคุณสามารถตรวจสอบรหัสสำหรับรหัสทั้งหมดที่ระบุไว้ในตอนท้าย
เราใช้สองฟังก์ชัน void system_init (void) และ void encode_rf_sender (char data)
system_init จะใช้สำหรับการเริ่มต้นขาและ initializations แป้นพิมพ์ การเริ่มต้นแป้นพิมพ์ถูกเรียกจากไลบรารีปุ่มกด
พอร์ตปุ่มกดถูกกำหนดไว้ในปุ่มกดเช่นกันh. เราสร้างPORTDเป็นเอาต์พุตโดยใช้TRISD = 0x00และทำให้พอร์ตRF_TXเป็น0x00เป็นสถานะเริ่มต้น
โมฆะ system_init (โมฆะ) { TRISD = 0x00; RF_TX = 0x00; keyboard_initialization (); }
ใน encode_rf_sender เราได้เปลี่ยนสถานะ 4 พินขึ้นอยู่กับปุ่มที่กด เราได้สร้าง ค่าฐานสิบหกหรือ สถานะPORTD ที่แตกต่างกัน 16 ค่าขึ้นอยู่กับ ( 4x4) 16ปุ่มที่แตกต่างกันที่กดเป็นโมฆะ encode_rf_sender (ข้อมูลถ่าน) { if (data == '1') RF_TX = 0x10; ถ้า (ข้อมูล == '2') RF_TX = 0x20; ถ้า (data == '3') …………... …. ….
ในฟังก์ชั่น หลัก อันดับแรกเราจะได้รับข้อมูลที่กดปุ่มคีย์บอร์ดโดยใช้ ฟังก์ชัน switch_press_scan () และจัดเก็บข้อมูลในตัวแปรคีย์ หลังจากนั้นเราได้เข้ารหัสข้อมูลโดยใช้ ฟังก์ชัน encode_rf_sender () และเปลี่ยนสถานะPORTD
รหัสPIC18F4520 สำหรับตัวรับ RF:
เช่นเคยเราตั้งค่าบิตการกำหนดค่าเป็นครั้งแรกในPIC18f4520 แตกต่างจาก PIC16F877A เล็กน้อยคุณสามารถตรวจสอบรหัสในไฟล์ zip ที่แนบมาได้
เรารวมไฟล์ส่วนหัวของ LCD กำหนดD8-D11เชื่อมต่อพอร์ตของตัวถอดรหัส IC ทั่วPORTDใช้#define RF_RX PORTDสายเชื่อมต่อเป็นเช่นเดียวกับที่ใช้ในส่วนเข้ารหัส การประกาศพอร์ต LCD ยังทำได้ในไฟล์lcd.c
# รวม
ตามที่ระบุไว้ก่อนที่เราจะใช้ oscillator ภายในสำหรับ18F4520เราได้ใช้ ระบบ _ init ฟังก์ชั่นที่เรากำหนดค่าOSCONทะเบียนของ 18F4520 เพื่อตั้งoscillator ภายในสำหรับ8 MHz นอกจากนี้เรายังตั้งค่าบิตTRISสำหรับทั้งพิน LCD และพินตัวถอดรหัส เนื่องจากHT - 12Dให้เอาต์พุตที่พอร์ตD8-D11เราจำเป็นต้องกำหนดค่าPORTDเป็นอินพุตเพื่อรับเอาต์พุต
เป็นโมฆะ system_init (โมฆะ) { OSCCON = 0b01111110; // 8Mhz, intosc // OSCTUNE = 0b01001111; // เปิดใช้งาน PLL, ตัวปรับขนาดสูงสุด 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // 4 บิตสุดท้ายเป็นบิตอินพุต }
เรากำหนดค่าOSCONลงทะเบียนที่8 MHzทำยังพอร์ต Bเป็นเอาท์พุทและพอร์ต Dเป็นอินพุท
ฟังก์ชันด้านล่างนี้สร้างขึ้นโดยใช้ลอจิกย้อนกลับที่แน่นอนที่ใช้ในส่วนเครื่องส่งสัญญาณก่อนหน้านี้ ที่นี่เราได้ค่าฐานสิบหกเดียวกันจากพอร์ต Dและโดยค่าฐานสิบหกนั้นเราระบุว่าสวิตช์ใดถูกกดในส่วนเครื่องส่ง เราสามารถระบุการกดแต่ละปุ่มและส่งอักขระที่เกี่ยวข้องไปยังจอ LCD
โมฆะ rf_analysis (ถ่าน recived_byte ที่ไม่ได้ลงชื่อ) { if (recived_byte == 0x10) lcd_data ('1'); ถ้า (recived_byte == 0x20) lcd_data ('2'); ถ้า (recived_byte == 0x30) ……. ….. ……………..
lcd_dataเรียกว่าจากlcd.cไฟล์
ในฟังก์ชั่น หลัก เราเริ่มต้นระบบและ LCD ก่อน เราเอาตัวแปรไบต์, และจัดเก็บค่า hex ที่ได้รับจากพอร์ต D จากนั้นด้วยฟังก์ชัน rf_analysis เราสามารถพิมพ์อักขระบน LCD ได้
เป็นโมฆะ main (โมฆะ) { char byte ที่ไม่ได้ลงชื่อ = 0; system_init (); lcd_init (); ในขณะที่ (1) { lcd_com (0x80); lcd_puts ("CircuitDigest"); lcd_com (0xC0); ไบต์ = RF_RX; rf_analysis (ไบต์); lcd_com (0xC0); } คืน; }
ก่อนที่จะรันเราได้ปรับแต่งวงจร ก่อนอื่นเราได้กดปุ่ม ' D ' ในปุ่มกด ดังนั้น0xF0จึงถูกส่งอย่างต่อเนื่องโดยเครื่องส่ง RF จากนั้นเราปรับวงจรตัวรับสัญญาณจนกระทั่ง LCD แสดงอักขระ ' D ' บางครั้งโมดูลได้รับการปรับแต่งอย่างเหมาะสมจากผู้ผลิตบางครั้งก็ไม่ได้หากทุกอย่างเชื่อมต่ออย่างถูกต้องและไม่ได้รับค่าที่กดปุ่มใน LCD แสดงว่ามีความเป็นไปได้ที่ตัวรับ RF ไม่ได้รับการปรับแต่ง เราใช้ไขควงหุ้มฉนวนเพื่อลดความเป็นไปได้ในการปรับแต่งที่ไม่ถูกต้องเนื่องจากการเหนี่ยวนำของร่างกายของเรา
นี่คือวิธีที่คุณสามารถเชื่อมต่อโมดูล RF กับไมโครคอนโทรลเลอร์ PICและสื่อสารระหว่างไมโครคอนโทรลเลอร์ PIC สองตัวแบบไร้สายโดยใช้ RF Sensor
คุณสามารถดาวน์โหลดรหัสทั้งหมดสำหรับเครื่องส่งและตัวรับได้จากที่นี่และตรวจสอบวิดีโอสาธิตด้านล่าง