สารบัญ:

มาตรความเร่งไร้สายที่ควบคุม Rgb-LED: 4 ขั้นตอน
มาตรความเร่งไร้สายที่ควบคุม Rgb-LED: 4 ขั้นตอน

วีดีโอ: มาตรความเร่งไร้สายที่ควบคุม Rgb-LED: 4 ขั้นตอน

วีดีโอ: มาตรความเร่งไร้สายที่ควบคุม Rgb-LED: 4 ขั้นตอน
วีดีโอ: พัดลม 4Pin PWM กับ 3Pin มันต่างกันอย่างไร? 2024, กรกฎาคม
Anonim
มาตรความเร่งไร้สายควบคุม Rgb-LED's
มาตรความเร่งไร้สายควบคุม Rgb-LED's
มาตรความเร่งไร้สายควบคุม Rgb-LED's
มาตรความเร่งไร้สายควบคุม Rgb-LED's

MEMS (Micro-Electro-Mechanical Systems) มาตรความเร่งมีการใช้กันอย่างแพร่หลายในฐานะเซ็นเซอร์เอียงในโทรศัพท์มือถือและกล้อง มาตรความเร่งแบบธรรมดามีทั้งแบบชิป ic-chip และบอร์ด pcb ราคาประหยัด

ชิปไร้สายยังมีราคาจับต้องได้และมีจำหน่ายในวงจรที่ประกอบเข้าด้วยกัน โดยมีเสาอากาศเครือข่ายและตัวแยกแคปในตัว เชื่อมต่อทั้งบอร์ดไร้สายและมาตรความเร่งกับไมโครคอนโทรลเลอร์ผ่านอินเทอร์เฟซแบบอนุกรม และคุณมีคอนโทรลเลอร์ไร้สายพร้อมฟังก์ชัน nintendo-wii จากนั้นสร้างเครื่องรับด้วยชิปไร้สายชนิดเดียวกันและไฟ LED rgb-LED ที่ควบคุมด้วย pwm คุณมีสายฟ้าไร้สายที่ควบคุมเอียงได้ในห้องสี รักษาระดับบอร์ดส่งสัญญาณโดยหงายหน้าเขียงหั่นขนมขึ้น และไฟ LED เป็นสีน้ำเงินเย็น มีเพียงไฟ LED สีฟ้าเท่านั้นที่เปิดใช้งาน จากนั้นเอียงเครื่องส่งไปในทิศทางเดียว และคุณผสมสีแดงหรือสีเขียวขึ้นอยู่กับทิศทางที่คุณเอียง เอียงไปจนสุด 90 องศา และคุณเคลื่อนรางผสมสีแดงและสีน้ำเงินหรือสีเขียวและสีน้ำเงินทั้งหมด จนกระทั่งมีเพียงสีแดงหรือสีเขียวเท่านั้นที่ทำงานที่เอียง 90 องศา เอียงเล็กน้อยในทิศทางทั้ง x และ y แล้วคุณจะได้สีทั้งหมดผสมกัน ที่ 45 องศาในทุกทิศทาง แสงจะมีสีแดง สีเขียว และสีน้ำเงินผสมกันอย่างเท่าเทียมกัน กล่าวคือ แสงสีขาว ชิ้นส่วนที่ใช้หาได้จากร้านค้าอิเล็กทรอนิกส์งานอดิเรกทางอินเทอร์เน็ต ควรจะสามารถระบุได้จากภาพบางส่วน

ขั้นตอนที่ 1: ส่งสัญญาณด้วยมาตรความเร่ง

ตัวส่งสัญญาณพร้อมมาตรความเร่ง
ตัวส่งสัญญาณพร้อมมาตรความเร่ง
ตัวส่งสัญญาณพร้อมมาตรความเร่ง
ตัวส่งสัญญาณพร้อมมาตรความเร่ง
ตัวส่งสัญญาณพร้อมมาตรความเร่ง
ตัวส่งสัญญาณพร้อมมาตรความเร่ง
ตัวส่งสัญญาณพร้อมมาตรความเร่ง
ตัวส่งสัญญาณพร้อมมาตรความเร่ง

ตัวส่งสัญญาณใช้ไมโครคอนโทรลเลอร์ Atmel avr168 กระดานสีแดงที่สะดวกกับ 168 เป็นบอร์ด Arduino พร้อมตัวควบคุมแรงดันไฟฟ้าและวงจรรีเซ็ต มาตรความเร่งเชื่อมต่อกับ avr ด้วยบัส i2c แบบ bit-banged และบอร์ดไร้สายเชื่อมต่อกับฮาร์ดแวร์ SPI (Serial Peripheral Interface)

เขียงหั่นขนมไร้สายโดยสมบูรณ์ด้วยแบตเตอรี่แพ็ค 4, 8V ที่ติดอยู่ด้านล่าง บอร์ดไร้สายและ Arduino wee ยอมรับสูงสุด 9 V และมีตัวควบคุมแรงดันไฟฟ้าเชิงเส้นออนบอร์ด แต่มาตรความเร่งต้องการ 3, 3V จากรางควบคุมบนกระจ้อยร่อย

ขั้นตอนที่ 2: ตัวรับพร้อม RGB-LED

ตัวรับพร้อม RGB-LED
ตัวรับพร้อม RGB-LED
ตัวรับพร้อม RGB-LED
ตัวรับพร้อม RGB-LED
ตัวรับพร้อม RGB-LED
ตัวรับพร้อม RGB-LED

ตัวรับขึ้นอยู่กับบอร์ดสาธิต atmel avr169 ชื่อผีเสื้อ บอร์ดมีคุณสมบัติมากมายที่ไม่ได้ใช้ในโครงการนี้ ตัวส่งสัญญาณไร้สายเชื่อมต่อกับ PortB และไฟ LED ที่ควบคุมด้วย pwm เชื่อมต่อกับ PortD จ่ายไฟที่ส่วนหัว ISP 4.5V ก็เพียงพอแล้ว บอร์ดไร้สายสามารถทนต่อ 5V บนพิน i/o ได้ แต่ต้องใช้แหล่งจ่ายไฟ 3.3V ซึ่งจ่ายให้โดยตัวควบคุมออนบอร์ด

สายเคเบิลส่วนหัวที่ดัดแปลงสำหรับ rf tranceiver นั้นสะดวกมาก และเชื่อมต่อบอร์ดไร้สายกับตัวควบคุมพลังงานและฮาร์ดแวร์ spi บนผีเสื้อ shiftbright เป็นตัวควบคุมการมอดูเลตความกว้างพัลส์ที่นำโดย rgb ซึ่งยอมรับคำสั่ง 4 ไบต์ซึ่งถูกล็อคเข้าแล้วจึงสลักบนพินเอาต์พุต ง่ายต่อการเชื่อมต่อในซีรีส์ เพียงแค่เลื่อนคำคำสั่งออกไปหลายๆ คำ และคำสั่งแรกที่เลื่อนออกไปจะจบลงที่ LED ที่เชื่อมต่อล่าสุดในสายโซ่เดซี่

ขั้นตอนที่ 3: การเขียนโปรแกรม C

รหัสนี้เขียนด้วยภาษา C เนื่องจากฉันไม่สนใจที่จะเรียนรู้ภาษาการประมวลผลที่ "ง่ายกว่า" ซึ่ง Arduino ใช้ ฉันเขียนอินเทอร์เฟซ SPI และ tranceiver ด้วยตนเองสำหรับประสบการณ์การเรียนรู้ แต่ยืมรหัสแอสเซมเบลอร์ i2c จาก avrfreaks.net อินเทอร์เฟซ shiftbright ถูก bitbanged ในรหัส C ปัญหาหนึ่งที่ฉันพบคือความผันแปรเล็กน้อยของเอาต์พุตความเร่ง สิ่งนี้ทำให้ไฟ LED กะพริบมาก ฉันแก้ไขปัญหานี้ด้วยตัวกรองความถี่ต่ำของซอฟต์แวร์ ค่าเฉลี่ยถ่วงน้ำหนักเคลื่อนที่ของค่ามาตรความเร่ง rf-tranceiver รองรับฮาร์ดแวร์ crc และ ack ด้วยการส่งสัญญาณซ้ำอัตโนมัติ แต่สำหรับโครงการนี้ การอัปเดตไฟ LED อย่างราบรื่นในแบบเรียลไทม์มีความสำคัญมากกว่าสำหรับโครงการนี้ ทุกแพ็กเก็ตที่มีค่ามาตรความเร่งไม่จำเป็นต้องมาถึงผู้รับโดยสมบูรณ์ ตราบใดที่แพ็กเก็ตที่เสียหายถูกละทิ้ง ฉันไม่มีปัญหากับแพ็กเก็ต RF ที่สูญหายภายในระยะสายตา 20 เมตร แต่ไกลออกไป ลิงก์เริ่มไม่เสถียร และไฟ LED ไม่อัปเดตอย่างต่อเนื่อง ลูปหลักของตัวส่งสัญญาณในรหัสหลอก: ค่าเริ่มต้น ();while(จริง){ ค่า = abs(รับ x, y, z ค่าความเร่ง ()); RF_send(ค่า); delay(20ms);}ลูปหลักของตัวรับใน pseudo-code:initialize();while(true){ newValues = blocking_receiveRF()); rgbValues = rgbValues + 0.2*(newValues-rgbValues); เขียน rgbValues ไปที่ shiftbrigth;}

ขั้นตอนที่ 4: ผลลัพธ์

ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์

ฉันประหลาดใจที่การควบคุมนั้นราบรื่นและแม่นยำเพียงใด คุณสามารถควบคุมสีได้อย่างแม่นยำด้วยปลายนิ้ว pwm-LED-controller มีความละเอียด 10 บิตสำหรับแต่ละสี ซึ่งทำให้ได้สีที่เป็นไปได้หลายล้านสี น่าเสียดายที่มาตรวัดความเร่งมีความละเอียดเพียง 8 บิต ซึ่งทำให้จำนวนสีตามทฤษฎีลดลงเหลือหลักพัน แต่ก็ยังไม่สามารถรับรู้ถึงการเปลี่ยนสีใดๆ ได้ ฉันวางเครื่องรับไว้ในโคมไฟอิเกียและถ่ายรูปสีต่างๆ ด้านล่าง นอกจากนี้ยังมีวิดีโอ (คุณภาพแย่มาก)

แนะนำ: