สารบัญ:
- ขั้นตอนที่ 1: โมดูลเซนเซอร์
- ขั้นตอนที่ 2: ฮาร์ดแวร์
- ขั้นตอนที่ 3: ซอฟต์แวร์
- ขั้นตอนที่ 4: การบันทึกข้อมูล
- ขั้นตอนที่ 5: ซอฟต์แวร์ตัวรับตัวอย่าง
วีดีโอ: Arduino RF Sensor Decoder: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
บ้านหลังก่อนของฉันมาพร้อมกับระบบรักษาความปลอดภัยที่ติดตั้งไว้ล่วงหน้าซึ่งมีเซ็นเซอร์ประตู เซ็นเซอร์ตรวจจับความเคลื่อนไหว และแผงควบคุม ทุกอย่างเชื่อมต่อกับกล่องอิเล็กทรอนิกส์ขนาดใหญ่ในตู้เสื้อผ้าอย่างแน่นหนา และมีคำแนะนำในการเดินสายโทรศัพท์พื้นฐานเพื่อโทรออกโดยอัตโนมัติในกรณีที่มีสัญญาณเตือน เมื่อฉันพยายามเล่นกับมัน ฉันพบว่าเซ็นเซอร์ประตูตัวหนึ่งได้รับการติดตั้งไม่สมบูรณ์ และอีกตัวหนึ่งทำงานไม่ต่อเนื่องเนื่องจากการจัดตำแหน่งที่ไม่เหมาะสม มากสำหรับการติดตั้งแบบมืออาชีพโน้มน้าวใจในนามบัตรของ บริษัท รักษาความปลอดภัย วิธีแก้ปัญหาของฉันในตอนนั้นคือซื้อกล้องรักษาความปลอดภัยทางอินเทอร์เน็ตสองสามตัวและสัญญาณเตือนภัยไร้สายราคาถูก
กรอไปข้างหน้าอย่างรวดเร็วในวันนี้และสัญญาณเตือนภัยแบบไร้สายนั้นอยู่ในกล่องในห้องใต้ดินของฉัน หลังจากที่ฉันได้เครื่องรับ RF ราคาถูกมา ฉันตัดสินใจดูว่าฉันสามารถถอดรหัสข้อความที่ส่งโดยเซ็นเซอร์เตือนภัยและรีโมตต่างๆ ที่ฉันมีได้หรือไม่ ฉันคิดว่าเนื่องจากพวกเขาทั้งหมดทำงานกับกล่องสัญญาณเตือนภัยราคาถูก พวกเขาทั้งหมดจึงต้องใช้รูปแบบข้อความเดียวกันโดยใช้ ID อื่น ไม่นานฉันก็พบว่ามีความคล้ายคลึงกันเฉพาะในโครงสร้างทั่วไปของข้อความเท่านั้น ดังนั้นโครงการจึงเปลี่ยนจากเล็กน้อยเป็นน่าสนใจมากอย่างรวดเร็ว
ขั้นตอนที่ 1: โมดูลเซนเซอร์
ดังที่คุณเห็นในภาพด้านบน เครื่องส่งสัญญาณประกอบด้วยเซ็นเซอร์เปิดประตู เครื่องตรวจจับการเคลื่อนไหว รีโมทติดอาวุธ และแป้นพิมพ์ไร้สายที่ใช้สำหรับตั้งโปรแกรมกล่องสัญญาณเตือนภัย ปรากฏว่าไม่มีอุปกรณ์สองเครื่องนี้ใช้ความยาวการซิงค์หรือระยะเวลาบิตเท่ากัน ความธรรมดาสามัญเพียงอย่างเดียวนอกเหนือจากความยาวของข้อความคือรูปแบบพื้นฐานของบิต แต่ละบิตใช้ระยะเวลาคงที่โดยมีความแตกต่างระหว่างศูนย์และหนึ่งเป็นรอบการทำงานของส่วนสูง/ต่ำ
รูปคลื่นสวยที่แสดงด้านบนไม่ใช่สิ่งที่ฉันได้รับครั้งแรก เนื่องจากย่านความถี่ 433 เมกะเฮิรตซ์มีการจราจรหนาแน่นมาก ฉันจึงต้องเปิดใช้งานเซ็นเซอร์ก่อนที่จะตั้งค่าขอบเขตให้ทริกเกอร์ตัวเดียว โชคดีที่เซ็นเซอร์ได้คัดลอกข้อความข้อมูลออกมาหลายชุดเมื่อเปิดใช้งาน และรีโมทและแป้นกดจะส่งข้อความต่อไปตราบเท่าที่มีการกดปุ่ม ด้วยการใช้ขอบเขต ฉันสามารถกำหนดความยาวการซิงค์และระยะเวลาบิตข้อมูลสำหรับแต่ละรายการ ดังที่กล่าวไว้ก่อนหน้านี้ เวลาซิงค์จะแตกต่างกัน และเวลาบิตจะแตกต่างกัน แต่รูปแบบข้อความทั้งหมดมีการซิงค์ระดับต่ำ ตามด้วยบิตข้อมูล 24 บิตและบิตหยุดเดียว นั่นก็เพียงพอแล้วสำหรับฉันที่จะสร้างตัวถอดรหัสทั่วไปในซอฟต์แวร์โดยไม่ต้องฮาร์ดโค้ดในรายละเอียดที่แตกต่างกันทั้งหมดสำหรับแต่ละอุปกรณ์
ขั้นตอนที่ 2: ฮาร์ดแวร์
เดิมทีฉันสร้างตัวถอดรหัสเซ็นเซอร์โดยใช้ไมโครคอนโทรลเลอร์ PIC และภาษาแอสเซมบลี เมื่อเร็ว ๆ นี้ฉันได้เล่นกับ Arduino หลากหลายรูปแบบ ดังนั้นฉันคิดว่าฉันจะดูว่าฉันสามารถทำซ้ำได้หรือไม่ แผนผังอย่างง่ายแสดงไว้ด้านบน และยังมีรูปภาพต้นแบบของฉันด้วย ทั้งหมดที่ฉันทำคือใช้สายจัมเปอร์ทั่วไปสามเส้นเพื่อเปลี่ยนจาก Arduino Nano ไปยังบอร์ดรับสัญญาณ RF พลังงานและสายข้อมูลเพียงเส้นเดียวเป็นสิ่งที่จำเป็น
หากคุณอ่านคำแนะนำของฉันใน "การแสดงเวลาและสภาพอากาศแบบ 3-in-1" คุณจะเห็นว่าฉันใช้เครื่องรับ RXB6, 433-MHz ทั่วไป คุณอาจได้ตัวรับราคาถูกจริงๆ มาทำงานในช่วงสั้นๆ ที่จำเป็นสำหรับโครงการนี้ แต่ฉันยังคงแนะนำให้ใช้ตัวรับ super-heterodyne
ขั้นตอนที่ 3: ซอฟต์แวร์
ซอฟต์แวร์แปลงบิตที่ได้รับเป็นอักขระ ASCII ที่แสดงผลได้ มันส่งออกค่าของความยาวซิงค์ และความยาวของบิต 1 และ 0 เนื่องจากฉันรู้ความยาวการซิงค์และรูปแบบบิตอยู่แล้ว ฉันจึงสามารถเขียนซอฟต์แวร์สำหรับพวกเขาโดยเฉพาะได้ แต่ฉันตัดสินใจดูว่าฉันสามารถเขียนมันเพื่อจัดเรียงความยาวการซิงค์และหาบิตข้อมูลโดยอัตโนมัติได้หรือไม่ ซึ่งจะทำให้ง่ายต่อการแก้ไขในกรณีที่ฉันต้องการลองตรวจหารูปแบบอื่นในบางครั้ง สิ่งสำคัญคือต้องทราบว่าซอฟต์แวร์ไม่ทราบว่าบิตแรกของข้อความเป็น 1 หรือ 0 โดยถือว่ามันเป็น 1 แต่ถ้าพบว่าควรเป็นศูนย์ มันจะกลับ บิตในข้อความที่เสร็จสมบูรณ์ก่อนส่งออกพอร์ตอนุกรม
เวลาของพัลส์การซิงค์และบิตข้อมูลถูกกำหนดโดยใช้อินพุตอินเตอร์รัปต์ภายนอก INT0 เพื่อทริกเกอร์ตัวจัดการการขัดจังหวะ INT0 สามารถทริกเกอร์ได้เมื่อขึ้น ลง หรือทั้งสองข้าง หรือในระดับต่ำคงที่ ซอฟต์แวร์ถูกขัดจังหวะที่ขอบทั้งสองข้างและวัดระยะเวลาที่ชีพจรยังคงต่ำ นั่นทำให้สิ่งต่าง ๆ ง่ายขึ้นเพราะการเริ่ม/ซิงค์ข้อความเป็นพัลส์ระดับต่ำและสามารถกำหนดบิตตามเวลาระดับต่ำได้
ตัวจัดการการขัดจังหวะในขั้นแรกจะกำหนดว่าจำนวนที่จับได้นั้นยาวพอที่จะเป็นพัลส์เริ่มต้น/ซิงค์หรือไม่ อุปกรณ์ต่างๆ ที่ฉันใช้พัลส์การซิงค์ 4, 9, 10 และ 14 มิลลิวินาที คำสั่งกำหนดสำหรับค่าการซิงค์ต่ำสุด/สูงสุดที่อนุญาตจะอยู่ด้านหน้าในซอฟต์แวร์ และปัจจุบันตั้งค่าไว้ที่ 3 และ 16 มิลลิวินาที เวลาบิตยังแตกต่างกันไประหว่างเซ็นเซอร์ดังนั้นอัลกอริทึมสำหรับการถอดรหัสบิตจำเป็นต้องคำนึงถึงสิ่งนั้นด้วย เวลาบิตของบิตแรกจะถูกบันทึกเช่นเดียวกับเวลาของบิตถัดไปซึ่งมีความแตกต่างอย่างมีนัยสำคัญจากบิตแรก การเปรียบเทียบโดยตรงของบิตไทม์ที่ตามมานั้นเป็นไปไม่ได้ ดังนั้นจึงใช้ "fudge factor" กำหนด ("รูปแบบ") การถอดรหัสบิตเริ่มต้นโดยสมมติว่าบิตข้อมูลแรกถูกบันทึกเป็นลอจิก 1 เสมอ ค่านั้นจะถูกบันทึกและใช้เพื่อทดสอบบิตถัดไป หากจำนวนบิตข้อมูลที่ตามมาอยู่ภายในหน้าต่างความแปรปรวนของค่าที่บันทึกไว้ ก็จะถูกบันทึกเป็นลอจิก 1 ด้วย หากอยู่นอกหน้าต่างความแปรปรวนของค่าที่บันทึกไว้ จะถูกบันทึกเป็นลอจิก 0 หากลอจิก 0 เวลาบิตสั้นกว่าเวลาบิตแรก จากนั้นตั้งค่าสถานะเพื่อบอกซอฟต์แวร์ว่าจำเป็นต้องกลับด้านไบต์ก่อนที่จะแสดง กรณีเดียวที่อัลกอริธึมนี้ล้มเหลวคือเมื่อบิตในข้อความเป็น 0 ทั้งหมด เราสามารถยอมรับข้อจำกัดนั้นได้เพราะข้อความประเภทนั้นไม่มีความหมาย
เซ็นเซอร์ที่ฉันสนใจทั้งหมดมีความยาวข้อความ 24 บิตข้อมูล แต่ซอฟต์แวร์ไม่ได้จำกัดความยาวนั้น มีบัฟเฟอร์สูงสุดเจ็ดไบต์ (สามารถเพิ่มได้อีก) และกำหนดความยาวข้อความต่ำสุดและสูงสุดเป็นไบต์ ซอฟต์แวร์ได้รับการตั้งค่าให้รวบรวมบิต แปลงเป็นไบต์ จัดเก็บชั่วคราว แล้วส่งออกในรูปแบบ ASCII ผ่านพอร์ตอนุกรม เหตุการณ์ที่ทริกเกอร์เอาต์พุตของข้อความคือการรับพัลส์เริ่มต้น/ซิงค์ใหม่
ขั้นตอนที่ 4: การบันทึกข้อมูล
ซอฟต์แวร์ได้รับการตั้งค่าให้ส่งออกข้อมูลที่แปลงเป็นอักขระ ASCII ผ่านเอาต์พุตอนุกรม (TX) ของ Arduino เมื่อฉันสร้างเวอร์ชัน PIC ฉันต้องเชื่อมต่อกับโปรแกรมเทอร์มินัลบนพีซีเพื่อแสดงข้อมูล ข้อดีอย่างหนึ่งของ Arduino IDE คือมีฟังก์ชัน Serial Monitor ในตัว ฉันตั้งค่าอัตราพอร์ตอนุกรมเป็น 115.2k แล้วตั้งค่าหน้าต่าง Serial Monitor เป็นอัตราเดียวกัน ภาพหน้าจอที่นี่แสดงหน้าจอทั่วไปพร้อมเอาต์พุตจากเซ็นเซอร์ต่างๆ ที่ฉันมี อย่างที่คุณเห็น บางครั้งข้อมูลอาจไม่สมบูรณ์แบบ แต่คุณสามารถระบุได้อย่างง่ายดายว่ามูลค่าที่แท้จริงของเซ็นเซอร์แต่ละตัวควรเป็นเท่าใด
ขั้นตอนที่ 5: ซอฟต์แวร์ตัวรับตัวอย่าง
ฉันได้รวมรายการซอฟต์แวร์ตัวอย่างที่แสดงวิธีที่คุณสามารถใช้ข้อมูลที่รวบรวมเพื่อรับชุดรหัสเฉพาะสำหรับแอปพลิเคชันของคุณ ตัวอย่างนี้ถูกตั้งค่าให้เลียนแบบหนึ่งในเต้าเสียบระยะไกล Etekcity ของฉัน คำสั่งหนึ่งเปิดไฟ LED ในตัวนาโน (D13) และคำสั่งอื่นจะปิดไฟ LED หากคุณไม่มี LED ในตัว Arduino ให้เพิ่มตัวต้านทานและ LED ตามที่แสดงในแผนภาพ ในการใช้งานจริง ฟังก์ชันนี้จะเปิด/ปิดไฟสำหรับเต้ารับไฟฟ้า (โดยใช้รีเลย์หรือไตรแอค) เวลาซิงค์ เวลาบิต และไบต์ข้อมูลที่คาดไว้ทั้งหมดถูกกำหนดไว้ล่วงหน้าเพื่อความสะดวกในการแก้ไข คุณสามารถใช้สายข้อมูลที่เหลือเพื่อเปิด/ปิดสิ่งต่าง ๆ ฯลฯ สำหรับแอปพลิเคชันเฉพาะของคุณ เพียงเพิ่มรหัสคำสั่งที่เกี่ยวข้องที่กำหนดและแทนที่ตรรกะการเปิด/ปิด LED ใน "ลูป" เพื่อให้เหมาะกับความต้องการของคุณ
แนะนำ:
Arduino Solar Powered Temperature and Humidity Sensor As 433mhz Oregon Sensor: 6 ขั้นตอน
Arduino Solar Powered Temperature and Humidity Sensor As 433mhz Oregon Sensor: นี่คือการสร้างเซ็นเซอร์อุณหภูมิและความชื้นที่ใช้พลังงานแสงอาทิตย์ เซ็นเซอร์จำลองเซ็นเซอร์ Oregon 433mhz และมองเห็นได้ในเกตเวย์ Telldus Net สิ่งที่คุณต้องการ: 1x "10-LED พลังงานแสงอาทิตย์ Motion Sensor" จากอีเบย์ ตรวจสอบให้แน่ใจว่ามันบอกว่าแป้ง 3.7v
IR REMOTE DECODER โดยใช้ ARDUINO.: 4 ขั้นตอน (พร้อมรูปภาพ)
IR REMOTE DECODER โดยใช้ ARDUINO: นี่เป็นอีกหนึ่งบทแนะนำที่ใช้งานง่ายสำหรับการสร้างตัวถอดรหัส IR Remote ที่ง่ายมากโดยใช้เครื่องรับ Arduino และ IR บทช่วยสอนนี้จะครอบคลุมทุกอย่างตั้งแต่การตั้งค่าซอฟต์แวร์ไปจนถึงการใช้ตัวรับสัญญาณ IR และการถอดรหัสสัญญาณ เหล่านี้
Arduino เชื่อมต่อกับ Ultrasonic Sensor และ Contactless Temperature Sensor: 8 ขั้นตอน
การเชื่อมต่อกับ Arduino กับ Ultrasonic Sensor และ Contactless Temperature Sensor: ปัจจุบัน ผู้ผลิต นักพัฒนาต่างเลือกใช้ Arduino สำหรับการพัฒนาอย่างรวดเร็วของการสร้างต้นแบบของโครงการ Arduino เป็นแพลตฟอร์มอิเล็กทรอนิกส์แบบโอเพ่นซอร์สที่ใช้ฮาร์ดแวร์และซอฟต์แวร์ที่ใช้งานง่าย Arduino มีชุมชนผู้ใช้ที่ดีมาก ในโครงการนี้
Mho Better Resistor Value Decoder Plushie: 4 ขั้นตอน (พร้อมรูปภาพ)
Mho Better Resistor Value Decoder Plushie: ความต้านทานนั้นไร้ประโยชน์ อย่างน้อยในการพยายามหาค่าของตัวต้านทานของคุณ หากคุณไม่ได้จดจำรหัสสีไว้ ฉันมีตุ๊กตาส่วนประกอบอิเล็กทรอนิกส์ Adafruit Circuit Playground ตัวหนึ่งวางอยู่รอบ ๆ รอให้แฮ็ก
Arduino Magnetic Stripe Decoder: 4 ขั้นตอน (พร้อมรูปภาพ)
ตัวถอดรหัสแถบแม่เหล็ก Arduino: คำแนะนำนี้แสดงวิธีใช้รหัสที่มีให้ใช้งานฟรี Arduino และเครื่องอ่านแถบแม่เหล็กมาตรฐานเพื่อสแกนและแสดงข้อมูลที่จัดเก็บไว้ในบัตรแถบแม่เหล็ก เช่น บัตรเครดิต รหัสนักเรียน ฯลฯ ฉันได้รับแรงบันดาลใจ โพสต์นี้หลังจาก