- ส่วนประกอบที่จำเป็น
- ซอฟต์แวร์ที่ใช้
- โมดูลตัวส่งและตัวรับสัญญาณ RF 433MHz
- แผนภูมิวงจรรวม
- การสร้างโครงการสำหรับ Atmega 8 โดยใช้ CodeVision
- รหัสและคำอธิบาย
- อัพโหลดโค้ดไปที่ Atmega8
การทำให้โปรเจ็กต์ของเราไร้สายทำให้มันดูเท่และยังขยายขอบเขตที่สามารถควบคุมได้อีกด้วย เริ่มตั้งแต่การใช้ IR LED ปกติสำหรับการควบคุมแบบไร้สายระยะทางสั้นจนถึง ESP8266 สำหรับการควบคุม HTTP ทั่วโลกมีหลายวิธีในการควบคุมบางสิ่งแบบไร้สาย ในโครงการนี้เราได้เรียนรู้วิธีการ สร้างโครงการไร้สายโดยใช้โมดูล RF 433 MHz และ AVR ไมโครคอนโทรลเลอร์
ในโครงการนี้เราทำสิ่งต่อไปนี้: -
- เราใช้ Atmega8 สำหรับ RF Transmitter และ Atmega8 สำหรับส่วน RF Receiver
- เราเชื่อมต่อ LED และปุ่มกดกับไมโครคอนโทรลเลอร์ Atmega8
- ทางด้านเครื่องส่งเราเชื่อมต่อปุ่มกดกับ Atmega และส่งข้อมูล ทางด้านเครื่องรับเราจะรับข้อมูลแบบไร้สายและแสดงเอาต์พุตเป็น LED
- เราใช้ตัวเข้ารหัสและตัวถอดรหัส IC เพื่อส่งข้อมูล 4 บิต
- ความถี่ในการรับคือ 433Mhz โดยใช้โมดูล RF TX-RX ราคาถูกที่มีอยู่ในตลาด
ส่วนประกอบที่จำเป็น
- Atmega8 AVR ไมโครคอนโทรลเลอร์ (2)
- โปรแกรมเมอร์ USBASP
- สาย FRC 10 พิน
- แผ่นขนมปัง (2)
- ไฟ LED (2)
- ปุ่มกด (1)
- HT12D และ HT12E คู่
- RX-TX RF โมดูล
- ตัวต้านทาน (10k, 47k, 1M)
- สายจัมเปอร์
- แหล่งจ่ายไฟ 5V
ซอฟต์แวร์ที่ใช้
เราใช้ ซอฟต์แวร์CodeVisionAVRในการเขียนโค้ดและ ซอฟต์แวร์SinaProgสำหรับอัปโหลดโค้ดของเราไปยัง Atmega8 โดยใช้โปรแกรมเมอร์ USBASP
คุณสามารถดาวน์โหลดโปรแกรมเหล่านี้ได้จากลิงค์ที่ให้มา:
CodeVisionAVR :
SinaProg:
ก่อนที่จะเข้าสู่แผนผังและโค้ดเรามาทำความเข้าใจกับการทำงานของโมดูล RF ด้วยไอซีตัวเข้ารหัส - ตัวถอดรหัส
โมดูลตัวส่งและตัวรับสัญญาณ 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:
- หุ่นยนต์ควบคุม RF
- วงจร IR เป็น RF Converter
- ไฟ LED ควบคุมระยะไกล RF โดยใช้ Raspberry Pi
- เครื่องใช้ในบ้านที่ควบคุมด้วย RF
แผนภูมิวงจรรวม
แผนภาพวงจรสำหรับด้านเครื่องส่งสัญญาณ RF
- Pin D7 ของ atmega8 -> Pin13 HT12E
- Pin D6 ของ atmega8 -> Pin12 HT12E
- Pin D5 ของ atmega8 -> Pin11 HT12E
- Pin D4 ของ atmega8 -> Pin10 HT12E
- ปุ่มกดไปที่ Pin B0 ของ Atmega
- ตัวต้านทาน 1M-ohm ระหว่างพิน 15 และ 16 ของ HT12E
- Pin17 ของ HT12E กับพินข้อมูลของโมดูลเครื่องส่งสัญญาณ RF
- Pin 18 ของ HT12E ถึง 5V
- GND พิน 1-9 และพิน 14 ของ HT12E และพิน 8 ของ Atmega
แผนภาพวงจรสำหรับด้านรับ RF
- Pin D7 ของ atmega8 -> Pin13 HT12D
- Pin D6 ของ atmega8 -> Pin12 HT12D
- Pin D5 ของ atmega8 -> Pin11 HT12D
- Pin D4 ของ atmega8 -> Pin10 HT12d
- LED เป็น Pin B0 ของ Atmega
- Pin14 ของ HT12D กับพินข้อมูลของโมดูลตัวรับ RF
- ตัวต้านทาน 47Kohm ระหว่างพิน 15 และ 16 ของ HT12D
- GND พิน 1-9 ของ HT12D และพิน 8 ของ Atmega
- LED ไปยังขา 17 ของ HT12D
- 5V ถึงพิน 7 ของ Atmega และขา 18 ของ HT12D
การสร้างโครงการสำหรับ Atmega 8 โดยใช้ CodeVision
หลังจากติดตั้งโปรแกรมเหล่านี้แล้วให้ทำตามขั้นตอนด้านล่างเพื่อสร้างโครงการและเขียนโค้ด:
ขั้นตอนที่ 1. เปิด CodeVision คลิกที่ File -> New -> โครงการ กล่องโต้ตอบการยืนยันจะปรากฏขึ้น คลิกใช่
ขั้นตอนที่ 2 CodeWizard จะเปิดขึ้น คลิกที่ตัวเลือกแรกเช่น AT90 และคลิกตกลง
ขั้นตอนที่ 3เลือกชิปไมโครคอนโทรลเลอร์ของคุณที่นี่เราจะใช้ Atmega8 ดังที่แสดง
ขั้นตอนที่ 4: -คลิกที่พอร์ต ในส่วนเครื่องส่งสัญญาณปุ่มกดคืออินพุตของเราและสายข้อมูล 4 สายจะถูกส่งออก ดังนั้นเราต้องเริ่มต้น 4 พินของ Atmega เป็นเอาต์พุต คลิกที่ Port D สร้าง Bit 7, 6, 5 และ 4 โดยคลิกที่มัน
ขั้นตอนที่ 5: -คลิกที่ Program -> สร้าง, บันทึกและออก ตอนนี้งานของเราเสร็จไปแล้วกว่าครึ่ง
ขั้นตอนที่ 6: -สร้างโฟลเดอร์ใหม่บนเดสก์ท็อปเพื่อให้ไฟล์ของเรายังคงอยู่ในโฟลเดอร์มิฉะนั้นจะกระจัดกระจายไปบนหน้าต่างเดสก์ท็อปทั้งหมด ตั้งชื่อโฟลเดอร์ของคุณตามที่คุณต้องการและฉันขอแนะนำให้ใช้ชื่อเดียวกันในการบันทึกไฟล์โปรแกรม
เราจะมีกล่องโต้ตอบสามกล่องต่อกันเพื่อบันทึกไฟล์ ทำเช่นเดียวกันกับอีกสองกล่องโต้ตอบซึ่งจะปรากฏขึ้นหลังจากที่คุณบันทึกรายการแรก
ตอนนี้พื้นที่ทำงานของคุณมีลักษณะเช่นนี้
งานส่วนใหญ่ของเราเสร็จสมบูรณ์ด้วยความช่วยเหลือของวิซาร์ด ตอนนี้เราต้องเขียนโค้ดเพียงไม่กี่บรรทัดสำหรับส่วนเครื่องส่งและตัวรับนั่นแหล่ะ…
ทำตามขั้นตอนเดียวกันเพื่อสร้างไฟล์สำหรับการรับสัญญาณส่วนหนึ่งในส่วนของตัวรับสัญญาณ Led เท่านั้นที่เป็นเอาต์พุตของเราดังนั้นให้พอร์ต B0 บิตออก
รหัสและคำอธิบาย
เราจะเขียนสำหรับการสลับไฟ LED แบบไร้สายโดยใช้คลื่นความถี่วิทยุ รหัสที่สมบูรณ์สำหรับทั้ง Atmega ที่ฝั่งเครื่องส่งและตัวรับจะได้รับในตอนท้ายของบทความนี้
รหัส Atmega8 สำหรับ RF Transmitter:
ก่อนอื่นให้รวมไฟล์ส่วนหัว delay.h เพื่อใช้ดีเลย์ในโค้ดของเรา
# รวม
ตอนนี้มาถึงบรรทัดสุดท้ายของโค้ดที่คุณจะพบกับ while loop รหัสหลักของเราจะอยู่ในลูปนี้
ใน ขณะ วนซ้ำเราจะส่ง 0x10 ไบต์ไปยัง PORTD เมื่อกดปุ่มและจะส่ง 0x20 เมื่อไม่ได้กดปุ่ม คุณสามารถใช้ค่าใดก็ได้ในการส่ง
ในขณะที่ (1) { if (PINB.0 == 1) { PORTD = 0x10; } ถ้า (PINB.0 == 0) { PORTD = 0x20; } } }
รหัสAtmega สำหรับ RF Receiver
ขั้นแรกให้ประกาศตัวแปรเหนือฟังก์ชัน หลักเป็นโมฆะ สำหรับการจัดเก็บอักขระขาเข้าจากโมดูล RF
# รวม
ทีนี้มาที่ while loop ในลูปนี้ให้จัดเก็บไบต์ขาเข้าเป็น ไบต์ ตัวแปร char และตรวจสอบว่าไบต์ขาเข้าตรงกับที่เราเขียนในส่วนเครื่องส่งหรือไม่ หากไบต์เท่ากันให้สร้างPortB.0ให้สูงและไม่ใช้PORTB.0 ในการสลับ LED
ในขณะที่ (1) { byte = PIND; ถ้า (PIND.7 == 0 && PIND.6 == 0 && PIND.5 == 0 && PIND.4 == 1) { PORTB.0 = ~ PORTB.0; delay_ms (1,000); }}}
สร้างโครงการ
รหัสของเราเสร็จสมบูรณ์ ตอนนี้เราต้องสร้างโครงการของเรา คลิกที่ไอคอนสร้างโครงการตามที่แสดง
หลังจากสร้างโปรเจ็กต์ไฟล์ HEX จะถูกสร้างขึ้นใน โฟลเดอร์ Debug-> Exe ซึ่งสามารถพบได้ในโฟลเดอร์ที่คุณทำไว้ก่อนหน้านี้เพื่อบันทึกโปรเจ็กต์ของคุณ เราจะใช้ไฟล์ HEX นี้เพื่ออัปโหลดใน Atmega8 ใช้ซอฟต์แวร์
อัพโหลดโค้ดไปที่ Atmega8
เชื่อมต่อวงจรของคุณตามแผนภาพที่กำหนดกับโปรแกรม Atmega8 ต่อสายเคเบิล FRC ด้านหนึ่งเข้ากับโปรแกรมเมอร์ USBASP และอีกด้านหนึ่งจะเชื่อมต่อกับหมุด SPI ของไมโครคอนโทรลเลอร์ตามที่อธิบายไว้ด้านล่าง:
- Pin1 ของขั้วต่อ FRC หญิง -> พิน 17, MOSI ของ Atmega8
- Pin 2 เชื่อมต่อกับ Vcc ของ atmega8 เช่น Pin 7
- Pin 5 เชื่อมต่อกับรีเซ็ตของ atmega8 เช่น Pin 1
- Pin 7 เชื่อมต่อกับ SCK ของ atmega8 เช่น Pin 19
- Pin 9 เชื่อมต่อกับ MISO ของ atmega8 เช่น Pin 18
- Pin 8 เชื่อมต่อกับ GND ของ atmega8 เช่น Pin 8
เชื่อมต่อส่วนประกอบที่เหลือบนเขียงหั่นขนมตามแผนภาพวงจรและเปิดSinaprog
เราจะอัปโหลดไฟล์ Hex ที่สร้างขึ้นด้านบนโดยใช้ Sinaprog ดังนั้นเปิดและเลือก Atmega8 จากเมนูแบบเลื่อนลงอุปกรณ์ เลือกไฟล์ HEX จากโฟลเดอร์ Debug-> Exe ดังที่แสดง
ตอนนี้คลิกที่โปรแกรม
คุณทำเสร็จแล้วและไมโครคอนโทรลเลอร์ของคุณถูกตั้งโปรแกรมไว้ ใช้ขั้นตอนเดียวกันเพื่อตั้งโปรแกรม Atmega อื่นที่ด้านเครื่องรับ
รหัสที่สมบูรณ์และวิดีโอสาธิตได้รับด้านล่าง