สารบัญ:

UChip - Serial Over IR!: 4 ขั้นตอน
UChip - Serial Over IR!: 4 ขั้นตอน

วีดีโอ: UChip - Serial Over IR!: 4 ขั้นตอน

วีดีโอ: UChip - Serial Over IR!: 4 ขั้นตอน
วีดีโอ: Uship Whole Trip from Start To Finish! How to Make Money With a Pickup Truck 2024, พฤศจิกายน
Anonim
UChip - ซีเรียลโอเวอร์ IR!
UChip - ซีเรียลโอเวอร์ IR!
UChip - ซีเรียลโอเวอร์ IR!
UChip - ซีเรียลโอเวอร์ IR!

การสื่อสารแบบไร้สายได้กลายเป็นคุณลักษณะสำคัญในโครงการของเราในปัจจุบันและการพูดคุยเกี่ยวกับระบบไร้สาย สิ่งแรกที่ฉันนึกถึงคือ 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

ป้องกันไฟ LED IR
ป้องกันไฟ LED IR
ป้องกันไฟ LED IR
ป้องกันไฟ LED IR

หากคุณเปิดเครื่องวงจรด้านบนหลังจากโหลดโค้ด "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 ที่นำมาใช้) ซึ่งมีประโยชน์มากในบางแอปพลิเคชัน!

เร็วๆ นี้ ฉันจะอัปโหลดวิดีโอที่คุณสามารถดูตัวอย่างแอปพลิเคชันที่ฉันสร้างได้ สนุก!

แนะนำ: