สารบัญ:
- ขั้นตอนที่ 1: การเดินสายไฟ
- ขั้นตอนที่ 2: การเขียนโปรแกรม
- ขั้นตอนที่ 3: ป้องกัน IR LED
- ขั้นตอนที่ 4: สื่อสาร
วีดีโอ: UChip - Serial Over IR!: 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
การสื่อสารแบบไร้สายได้กลายเป็นคุณลักษณะสำคัญในโครงการของเราในปัจจุบันและการพูดคุยเกี่ยวกับระบบไร้สาย สิ่งแรกที่ฉันนึกถึงคือ Wi-Fi หรือ BT แต่การจัดการโปรโตคอลการสื่อสาร Wi-Fi หรือ BT ไม่ใช่เรื่องง่ายและใช้มาก ของทรัพยากร MCU เหลือพื้นที่ขนาดเล็กสำหรับการเข้ารหัสแอปพลิเคชันของฉัน ดังนั้น ฉันมักจะเลือกใช้โมดูล Wi-Fi/BT ภายนอกที่เชื่อมต่อแบบอนุกรมกับไมโครคอนโทรลเลอร์เพื่อแยกบทบาทและรับอิสระที่สูงขึ้น
อย่างไรก็ตาม บางครั้ง Wi-Fi และ BT นั้น "เกินความจำเป็น" สำหรับบางแอปพลิเคชันที่ต้องการบิตเรตต่ำและระยะการสื่อสารสั้น นอกจากนี้ การใช้ Wi-Fi หรือ BT แสดงถึงความจำเป็นในการเชื่อมต่อสมาร์ทโฟนหรืออุปกรณ์ของคุณด้วยการตรวจสอบสิทธิ์ที่เหมาะสม
ลองนึกภาพว่าคุณเพียงแค่ต้องเปิด/ปิดไฟภายนอก หรือเปลี่ยนความเข้มของหลอดไฟ หรือเปิดประตูไฟฟ้า ควรใช้ Wi-Fi หรือ BT หรือไม่
การสื่อสารแบบไร้สายผ่านความยาวคลื่น IR (อินฟราเรด) อาจสะดวกทั้งนี้ขึ้นอยู่กับสภาพแวดล้อมและแอปพลิเคชัน Serial over IR ใช้กับส่วนประกอบภายนอกบางส่วน (ส่วนประกอบแยก 3 ชิ้น!) และ uChip (บอร์ดที่เข้ากันได้กับ Arduino ขนาดเล็กมาก) สามารถเป็นโซลูชันที่คุณต้องการได้!
Bill of Materials (สำหรับอุปกรณ์ Tx-Rx หนึ่งเครื่อง):
1 x uChip
1 x IR LED: มีค่าสูงสุดของการปล่อยที่ 950nm
1 x TSOP-38238 (เทียบเท่า)
1 x 1KOhm ตัวต้านทาน
ฮาร์ดแวร์
1 x เขียงหั่นขนม/บอร์ดโปรโต
1 x หลอดพลาสติกสีดำ: เส้นผ่านศูนย์กลางภายในขนาดเดียวกับ IR LED จำเป็นต้องใช้หลอดเพื่อป้องกันการพูดคุยกับตัวรับสัญญาณ TSOP
1 x อลูมิเนียมฟอยล์ (3 ซม. x 3 ซม.)
1 x เทป
เคล็ดลับ: คุณสามารถสร้างอุปกรณ์ only-TX หรือ only-RX ได้ ในกรณีที่คุณต้องการการสื่อสารแบบทิศทางเดียว โดยการนำฮาร์ดแวร์ RX/TX ที่ไม่จำเป็นออกจากวงจร หรือเปิด/ปิดโค้ดที่เกี่ยวข้องในแบบร่าง
ขั้นตอนที่ 1: การเดินสายไฟ
ต่อส่วนประกอบเข้าด้วยกันตามแผนผัง
หมายเหตุเล็กน้อยเกี่ยวกับแผนผังอย่างง่าย เนื่องจาก TSOP-38238 อนุญาตให้จ่ายไฟได้ตั้งแต่ 2.5V ถึง 5V และดูดซับได้มากที่สุด 0.45mA (คุณจะพบแผ่นข้อมูล ที่นี่) ฉันจะเปิดเครื่องรับโดยใช้พินสองพิน ซึ่งจะจ่ายกราวด์และแหล่งจ่ายไฟตามลำดับ ซึ่งช่วยให้เปิด/ปิดเครื่องรับได้ตามต้องการและตั้งค่าการเดินสายฮาร์ดแวร์อย่างง่าย นอกจากนี้ ในกรณีที่คุณต้องการการสื่อสารแบบทางเดียว คุณสามารถเลือกได้ว่าจะสร้างอุปกรณ์เท่านั้น (Tx/Rx) โดยเพียงแค่ปิด/เปิดใช้งาน TSOP-38238
วงจรทำงานอย่างไร?
มันค่อนข้างง่าย พินเอาต์พุต TSOP จะถูกดึงให้ต่ำเมื่อเซ็นเซอร์ตรวจจับรถไฟ 6 พัลส์ขึ้นไปที่ 38KHz ในทางกลับกัน จะถูกดึงให้สูงเมื่อไม่มีสัญญาณดังกล่าว ดังนั้น เพื่อที่จะส่งข้อมูลอนุกรมผ่าน IR สิ่งที่วงจรทำคือการจ่ายไฟให้กับขั้วบวก LED ด้วย PWM 38KHz ที่มอดูเลตด้วยสัญญาณอนุกรม TX ซึ่งจะดึงแคโทด LED ให้ต่ำ
ดังนั้น ในระดับสูงของอนุกรม TX0 ไฟ LED จะไม่เอนเอียงหรือเอนเอียงในการย้อนกลับ (ไม่มีพัลส์) และพินเอาต์พุต TSOP ถูกดึงขึ้นสูง ส่งสัญญาณในระดับต่ำบนซีเรียล LED จะได้รับพลังงานและสร้างพัลส์ IR ตามสัญญาณ PWM ที่ใช้ ดังนั้นเอาต์พุต TSOP จะถูกดึงต่ำ
เนื่องจากการส่งเป็นแบบตรง (0->0 และ 1->1) จึงไม่จำเป็นต้องมีอินเวอร์เตอร์หรือตรรกะอื่นๆ ที่ฝั่งตัวรับ
ฉันควบคุมกำลังเอาท์พุตออปติคัล LED โดยเลือกรอบการทำงานของ PWM ให้สอดคล้องกับแอปพลิเคชัน ยิ่งรอบการทำงานสูง พลังงานเอาท์พุตออปติคัลก็จะยิ่งสูงขึ้น ดังนั้น คุณจะส่งข้อความของคุณไปได้ไกลขึ้น
โปรดทราบว่าเรายังจำเป็นต้องสร้างพัลส์! ดังนั้น คุณไม่ควรทำงานเกิน 90% รอบการทำงาน มิฉะนั้น TSOP จะไม่ตรวจพบสัญญาณเป็นพัลส์
คุณต้องการพลังงานมากขึ้นหรือไม่?
เพื่อเพิ่มกระแสเราสามารถลดค่าตัวต้านทาน 1kOhm ได้หรือไม่?
บางทีอย่าเรียกร้องมากเกินไป! กระแสสูงสุดที่คุณได้รับจากพินของ MCU ถูกจำกัดไว้ที่ 7mA เมื่อขับเคลื่อนพินพอร์ตให้แรงกว่าปกติ (PINCFG. DRVSTR = 1 และ VDD > 3V) ตามที่ระบุไว้ในแผ่นข้อมูล SAMD21
อย่างไรก็ตาม การกำหนดค่ามาตรฐาน (ซึ่งเป็นการกำหนดค่าเริ่มต้นโดยไลบรารี Arduino IDE เป็นค่าเริ่มต้น) จะจำกัดกระแสไว้ที่ 2mA ดังนั้นการใช้ 1kOhm ให้ขีด จำกัด ปัจจุบันด้วยการตั้งค่าเริ่มต้นแล้ว!
การเพิ่มกระแสไม่ได้เป็นเพียงเรื่องของส่วนประกอบทางไฟฟ้าเท่านั้น สั้น ๆ:
- เปลี่ยนตัวต้านทาน (ซึ่งค่าต่ำสุดถูกจำกัดไว้ที่ประมาณ 470Ohm -> VDD/470~7mA);
- ตั้งค่า PORT->PINCFG->DRVSTR ที่สอดคล้องกันเป็น 1;
ฉันจะให้รหัสรวมถึงคุณลักษณะนี้ในการอัปเดตในอนาคต
แต่อย่าลืมว่าการจมและระบายกระแสจากหมุด MCU ให้ใกล้ถึงขีดจำกัดนั้นไม่ใช่วิธีที่ดี อันที่จริงมันลดอายุการใช้งานและความน่าเชื่อถือของ MCU ดังนั้น ผมขอแนะนำให้รักษาความแรงของไดรฟ์ตามปกติสำหรับการใช้งานในระยะยาว
ขั้นตอนที่ 2: การเขียนโปรแกรม
โหลดภาพสเก็ตช์ “IRSerial.ino” ลงใน uChip (หรือบอร์ดที่เข้ากันได้กับ Arduino ที่คุณใช้อยู่)
ในกรณีที่คุณต้องการเปลี่ยนพินที่สร้าง PWM ตรวจสอบให้แน่ใจว่าคุณใช้พินที่เชื่อมต่อกับตัวจับเวลา TCC เนื่องจากโค้ดเวอร์ชันนี้ใช้งานได้กับตัวจับเวลา TCC เท่านั้น (ตรวจสอบ "variant.c" ของบอร์ดของคุณเพื่อดูข้อมูลนี้). ฉันจะเพิ่มรหัสเพื่อใช้ตัวจับเวลา TC ด้วยในการอัปเดตในอนาคต
รหัสค่อนข้างง่าย หลังจากตั้งค่า PIN_5 ให้ต่ำ (ให้ TSOP GND) และ PIN_6 สูง (เปิดเครื่อง TSOP) MCU จะเริ่ม PWM บน PIN_1 ตั้งค่าช่วงเวลาจับเวลาและจับภาพเปรียบเทียบตามการปรับความถี่ที่จำเป็น (ในกรณีของฉันคือ 38KHz) และหน้าที่ รอบ (12.5% เป็นค่าเริ่มต้น) สิ่งนี้ทำได้โดยใช้ประโยชน์จากฟังก์ชัน analogWrite() มาตรฐานบนพิน PWM และเปลี่ยนเฉพาะการลงทะเบียน PER_REG (การลงทะเบียนช่วงเวลา) และการลงทะเบียน CC (การเปรียบเทียบการจับภาพ) (โค้ดที่เขียนเป็นเพียงการตัดและวางจากไลบรารี wiring_analog) คุณสามารถตั้งค่าความถี่ที่จำเป็นตามการเปลี่ยนแปลงของเซ็นเซอร์ TSOP PER_REG (ซึ่งเป็นขีดจำกัดบนในการรีเซ็ตตัวนับเวลา) ในขณะที่ตั้งค่า CC ตามสัดส่วนของค่าช่วงเวลาเป็นเปอร์เซ็นต์ของรอบการทำงานที่ต้องการ
ถัดไป รหัสจะตั้งค่าพอร์ตอนุกรมโดยใช้อัตราบอดที่ถูกต้องคือ 2400bps ทำไมอัตราการรับส่งข้อมูลต่ำเช่นนี้! คำตอบอยู่ในแผ่นข้อมูล TSOP ที่คุณสามารถหาได้ ที่นี่ เนื่องจาก TSOP มีตัวกรองสัญญาณรบกวนสูงเพื่อป้องกันการสลับที่ไม่ต้องการ จึงจำเป็นต้องส่งพัลส์หลาย ๆ ครั้งเพื่อดึงพินเอาต์พุต TSOP ลง (จำนวนพัลส์ขึ้นอยู่กับเวอร์ชัน TSOP โดยที่ 6 คือค่าทั่วไป) ในทำนองเดียวกัน เอาต์พุต TSOP จะถูกดึงให้สูงหลังจากระยะเวลาขั้นต่ำเท่ากับ 10 พัลส์ขึ้นไป ดังนั้น ในการตั้งค่าเอาต์พุต TSOP เป็นสัญญาณมอดูเลต TX0 จำเป็นต้องกำหนดอัตราบอดโดยพิจารณาจากสมการต่อไปนี้:
บอดแบบอนุกรม < PWM_frequency/10
การใช้ 38KHz ส่งผลให้อัตรารับส่งข้อมูลต่ำกว่า 3800bps ซึ่งหมายความว่าอัตรารับส่งข้อมูล "มาตรฐาน" ที่สูงกว่าคือ 2400pbs ตามที่คาดการณ์ไว้ก่อนหน้านี้
คุณต้องการเพิ่มอัตราบอดหรือไม่? มีสองตัวเลือก
ตัวเลือกที่ง่ายที่สุดคือการเปลี่ยน TSOP เป็นเวอร์ชันความถี่ที่สูงกว่า (เช่น TSOP38256) ซึ่งจะช่วยให้คุณเพิ่มอัตราการส่งข้อมูลเป็นสองเท่า (4800bps)
ไม่พอ?! จากนั้นคุณต้องสร้างลิงค์ออปติคัลของคุณเองโดยใช้ IR LED+โฟโตไดโอดและวงจรขยายสัญญาณอย่างง่าย อย่างไรก็ตาม โซลูชันนี้ต้องใช้ความเชี่ยวชาญด้านการเข้ารหัสและอิเล็กทรอนิกส์จำนวนมาก เพื่อป้องกันเสียงรบกวนไม่ให้ส่งผลต่อข้อมูลที่ส่ง ดังนั้นการใช้งานจึงไม่ง่ายเลย! อย่างไรก็ตาม หากคุณรู้สึกมั่นใจมากพอ คุณก็พร้อมที่จะลองทำระบบ TSOP ของคุณเอง!:)
สุดท้าย ฉันตั้งค่าพอร์ต SerialUSB (2400bps) ที่ฉันใช้ส่งและรับข้อมูลบนจอภาพอนุกรม
ฟังก์ชัน loop() ประกอบด้วยโค้ดที่จำเป็นสำหรับการส่งผ่านข้อมูลผ่าน serials สองชุด และคัดลอกโดยตรงจากตัวอย่างแบบร่าง SerialPassthrough โดยเปลี่ยนชื่อซีเรียลเท่านั้น
ขั้นตอนที่ 3: ป้องกัน IR LED
หากคุณเปิดเครื่องวงจรด้านบนหลังจากโหลดโค้ด "IRSerial.ino" ให้ตรวจสอบ Serial Monitor บน Arduino IDE แล้วลองส่งสตริง คุณอาจจะเห็นว่า uChip ได้รับสิ่งที่กำลังส่งอย่างแน่นอน! มีการ cross-talk ในวงจรเนื่องจากการสื่อสารด้วยแสงระหว่าง IR LED และ TSOP ของอุปกรณ์เดียวกัน!
มาถึงส่วนที่ยากของโปรเจ็กต์นี้แล้ว การป้องกันการพูดคุยข้ามมิติมาถึงแล้ว! การวนซ้ำจะต้องถูกตัดออกเพื่อสร้างการสื่อสารแบบอนุกรมแบบสองทิศทางผ่าน IR
เราจะทำลายลูปได้อย่างไร?
ตัวเลือกแรก คุณลดรอบการทำงาน PWM ซึ่งจะทำให้เอาต์พุตพลังงานแสงของ LED ลดลง อย่างไรก็ตาม วิธีการนี้ยังช่วยลดระยะทางที่คุณได้รับช่องสัญญาณ IR แบบอนุกรมที่เชื่อถือได้ ตัวเลือกที่สองคือการป้องกัน IR LED ดังนั้นจึงสร้าง "ลำแสง" IR แบบมีทิศทาง มันเป็นเรื่องของการลองผิดลองถูก ในที่สุดฉันก็ใช้ท่อลมสีดำห่อด้วยฟอยล์และเทปอะลูมิเนียม การวาง IR LED ส่งสัญญาณภายในหลอดป้องกันการสื่อสารระหว่าง TX และ RX ของอุปกรณ์เดียวกัน
ดูภาพเพื่อดูวิธีแก้ปัญหาของฉัน แต่อย่าลังเลที่จะลองใช้วิธีอื่นและ/หรือแนะนำวิธีของคุณ! ไม่มีวิธีแก้ปัญหาที่แน่นอนสำหรับปัญหานี้ (เว้นแต่คุณต้องการช่องสัญญาณแบบทิศทางเดียวอย่างง่าย) และคุณอาจต้องปรับเค้าโครงวงจร รอบการทำงาน PWM และแผงป้องกัน IR ตามความต้องการของคุณ
เมื่อคุณหยุดการพูดคุยข้ามสาย คุณสามารถตรวจสอบได้ว่าอุปกรณ์ของคุณยังคงทำงานอยู่โดยสร้างลูปบนอุปกรณ์ Tx-Rx โดยใช้ประโยชน์จากการสะท้อนของความยาวคลื่น IR บนพื้นผิวสะท้อนแสงอินฟราเรด
ขั้นตอนที่ 4: สื่อสาร
นั้นคือทั้งหมด
อุปกรณ์ซีเรียลโอเวอร์ IR ของคุณพร้อมที่จะสื่อสาร ใช้เพื่อส่งข้อมูลผ่าน IR เปิด/ปิดสิ่งที่คุณต้องการ หรือตรวจสอบสถานะของเซ็นเซอร์ที่คุณแอบซ่อน!
ระยะทางที่การสื่อสารมีความน่าเชื่อถือไม่มากเท่ากับอุปกรณ์ WiFi หรือ BT อย่างไรก็ตาม มันเป็นทิศทาง (ขึ้นอยู่กับรูรับแสง LED และระบบป้องกัน IR ที่นำมาใช้) ซึ่งมีประโยชน์มากในบางแอปพลิเคชัน!
เร็วๆ นี้ ฉันจะอัปโหลดวิดีโอที่คุณสามารถดูตัวอย่างแอปพลิเคชันที่ฉันสร้างได้ สนุก!
แนะนำ:
ข้อความเป็นคำพูด คลิกที่ UChip ที่ขับเคลื่อนด้วย ARMbasic และ SBC ที่ขับเคลื่อนด้วย ARMbasic อื่นๆ: 3 ขั้นตอน
ข้อความเป็นคำพูด คลิกที่ UChip ที่ขับเคลื่อนด้วย ARMbasic และ SBC ที่ขับเคลื่อนด้วย ARMbasic อื่นๆ: บทนำ: สวัสดี ฉันชื่อท็อด ฉันเป็นมืออาชีพด้านการบินและอวกาศและการป้องกันตัวที่มีหัวใจเกินบรรยาย แรงบันดาลใจ: มาจากยุคของ dial-up BBS, ไมโครคอนโทรลเลอร์ 8 บิต, คอมพิวเตอร์ส่วนบุคคล Kaypro/Commodore/Tandy/TI-994A เมื่อ R
UChip - ร่างง่ายๆ สำหรับมอเตอร์ควบคุมระยะไกลและ/หรือเซอร์โวผ่าน 2.4GHz Radio Tx-Rx!: 3 ขั้นตอน
UChip - Simple Sketch to Remote Control Motors And/or Servos Via 2.4GHz Radio Tx-Rx!: ฉันชอบโลก RC จริงๆ การใช้ของเล่น RC ทำให้คุณรู้สึกว่าคุณสามารถควบคุมบางสิ่งที่ไม่ธรรมดาได้ แม้จะเป็นเพียงเรือลำเล็ก รถยนต์ หรือโดรนก็ตาม! อย่างไรก็ตาม การปรับแต่งของเล่นของคุณและทำให้พวกเขาทำทุกอย่างที่คุณต้องการไม่ใช่เรื่องง่าย
UChip – เรือ RC ออกจากขวดพลาสติกและเครื่องเล่นซีดีรอม!: 4 ขั้นตอน
UChip – RC Boat จากขวดพลาสติกและเครื่องเล่น CD-ROM!: หลังจากที่ฉันใช้ฮาร์ดแวร์และซอฟต์แวร์เพื่อเชื่อมต่อวิทยุโดรนของฉันกับมอเตอร์/เซอร์โว ขั้นตอนต่อไปคือการใช้ประโยชน์จากงานหนักที่ทำเสร็จแล้วและสร้าง RC ของฉันเอง ของเล่น ซึ่งก็คือ… เรือ! เนื่องจากฉันไม่ใช่วิศวกรเครื่องกล ฉันจึงเลือกใช้
UChip Lightsaber - "ขอพลังจงอยู่กับคุณ": 6 ขั้นตอน
UChip Lightsaber - "May the Force Be With You": คุณเคยใฝ่ฝันที่จะเป็นเจไดหรือซิธแห่งจักรวาล Star Wars แกว่งกระบี่แสงอันทรงพลังเพื่อสนับสนุนด้านของคุณเองหรือไม่? ไม่ว่าคำตอบจะเป็นเช่นไร นี่คือวิธีการสร้าง DIY Lightsaber ด้วย µChipFirst ให้ฉันระบุว่าฉันตั้งใจจะ
UChip - เซ็นเซอร์โซนาร์ BEEP พร้อมการส่งข้อมูล Bluetooth: 4 ขั้นตอน
UChip - เซ็นเซอร์โซนาร์ BEEP พร้อมการส่งข้อมูลบลูทูธ: เมื่อเร็ว ๆ นี้ ฉันพัฒนาเสียงบี๊บเหมือนโซนาร์ในรถยนต์และอะแดปเตอร์ Serial Bluetooth เป็น USB โดยใช้ uChip แต่ละโปรเจ็กต์ค่อนข้างน่าสนใจในตัวเอง แต่…มันจะเป็นไปได้ไหมที่จะรวมพวกมันเข้าด้วยกันและสร้างเซ็นเซอร์ “BT ส่งสัญญาณระยะไกล BEEP เหมือนรถยนต์”?!?T