สารบัญ:

สำรวจพื้นที่สี: 6 ขั้นตอน
สำรวจพื้นที่สี: 6 ขั้นตอน

วีดีโอ: สำรวจพื้นที่สี: 6 ขั้นตอน

วีดีโอ: สำรวจพื้นที่สี: 6 ขั้นตอน
วีดีโอ: ที่ดินประเภทไหน? ที่เดินสำรวจออกโฉนดที่ดินได้ ในปี 2566 ใน 69 จังหวัด เจ้าของที่ดิน เช็คด่วน!! 2024, กรกฎาคม
Anonim
สำรวจอวกาศสี
สำรวจอวกาศสี

ตาของเรารับรู้แสงผ่านตัวรับที่ไวต่อสีแดง สีเขียว และสีน้ำเงินในสเปกตรัมภาพ ผู้คนใช้ข้อเท็จจริงนี้เพื่อให้ภาพสีผ่านภาพยนตร์ โทรทัศน์ คอมพิวเตอร์และอุปกรณ์อื่น ๆ ในช่วงหนึ่งร้อยปีที่ผ่านมา

ในจอแสดงผลของคอมพิวเตอร์หรือโทรศัพท์ รูปภาพจะแสดงหลายสีโดยเปลี่ยนความเข้มของไฟ LED สีแดง สีเขียว และสีน้ำเงินเล็กๆ ที่เรียงติดกันบนหน้าจอ สามารถแสดงสีต่างๆ ได้หลายล้านสีโดยการเปลี่ยนความเข้มของแสงจากไฟ LED สีแดง สีเขียว หรือสีน้ำเงิน

โปรเจ็กต์นี้จะช่วยคุณสำรวจพื้นที่สีแดง สีเขียว และสีน้ำเงิน (RGB) โดยใช้ Arduino, RGB LED และคณิตศาสตร์เล็กน้อย

คุณสามารถนึกถึงความเข้มของสีทั้งสาม สีแดง สีเขียว และสีน้ำเงิน เป็นพิกัดในลูกบาศก์ โดยที่แต่ละสีอยู่ในแกนเดียว และทั้งสามแกนตั้งฉากกัน ยิ่งคุณอยู่ใกล้จุดศูนย์หรือจุดกำเนิดของแกนมากเท่าใด สีนั้นก็จะยิ่งแสดงน้อยลง เมื่อค่าของทั้งสามสีอยู่ที่จุดศูนย์หรือจุดกำเนิด สีจะเป็นสีดำ และ LED RGB ดับสนิท เมื่อค่าของทั้งสามสีสูงที่สุดเท่าที่จะทำได้ (ในกรณีของเราคือ 255 สำหรับแต่ละสีในสามสี) ไฟ LED RGB จะเปิดขึ้นโดยสมบูรณ์ และดวงตาจะรับรู้ว่าการผสมสีนี้เป็นสีขาว

ขั้นตอนที่ 1: RGB Color Space

RGB Color Space
RGB Color Space

ขอบคุณ Kenneth Moreland ที่อนุญาตให้ใช้ภาพลักษณ์ที่ดีของเขา

เราต้องการสำรวจมุมต่างๆ ของลูกบาศก์พื้นที่สี 3 มิติโดยใช้ RGB LED ที่เชื่อมต่อกับ Arduino แต่ยังต้องการทำเช่นนี้ในลักษณะที่น่าสนใจ เราสามารถทำได้โดยการซ้อนสามลูป (อันละอันสำหรับสีแดง สีเขียว และสำหรับสีน้ำเงิน) และวิ่งผ่านทุกการผสมสีที่เป็นไปได้ แต่นั่นคงจะน่าเบื่อมาก คุณเคยเห็นรูปแบบ 2D Lissajous บนออสซิลโลสโคปหรือ การแสดงแสงเลเซอร์? ลวดลาย Lissajous อาจดูเหมือนเส้นทแยงมุม วงกลม รูปที่ 8 หรือลวดลายคล้ายผีเสื้อแหลมที่หมุนช้าๆ ทั้งนี้ขึ้นอยู่กับการตั้งค่า รูปแบบ Lissajous ถูกสร้างขึ้นโดยการติดตามสัญญาณไซน์ของออสซิลเลเตอร์สองตัว (หรือมากกว่า) ที่วางแผนไว้บนแกน x-y (หรือสำหรับกรณีของเรา x-y-z หรือ R-G-B)

ขั้นตอนที่ 2: The Good Ship Lissajous

เรือดี Lissajous
เรือดี Lissajous

รูปแบบ Lissajous ที่น่าสนใจที่สุดจะปรากฏขึ้นเมื่อความถี่ของสัญญาณไซน์นั้นแตกต่างกันเล็กน้อย ในภาพออสซิลโลสโคปที่นี่ ความถี่ต่างกันในอัตราส่วน 5 ต่อ 2 (ซึ่งทั้งคู่เป็นจำนวนเฉพาะ) รูปแบบนี้ครอบคลุมสี่เหลี่ยมจัตุรัสได้ดีและเข้ามุมได้อย่างสวยงาม จำนวนเฉพาะที่สูงกว่าจะทำงานได้ดียิ่งขึ้นในการครอบคลุมสี่เหลี่ยมจัตุรัสและเจาะลึกเข้าไปในมุม

ขั้นตอนที่ 3: รอ - เราจะขับ LED ด้วยคลื่นไซน์ได้อย่างไร?

คุณจับฉัน! เราต้องการสำรวจพื้นที่สี 3 มิติที่มีตั้งแต่ปิด (0) ถึงเต็ม (255) สำหรับแต่ละสีทั้งสาม แต่คลื่นไซน์จะแตกต่างกันไปตั้งแต่ -1 ถึง +1 เราจะทำคณิตศาสตร์เล็กน้อยและเขียนโปรแกรมที่นี่เพื่อให้ได้สิ่งที่เราต้องการ

  • คูณแต่ละค่าด้วย 127 เพื่อรับค่าที่อยู่ในช่วงตั้งแต่ -127 ถึง +127
  • เพิ่ม 127 และปัดเศษแต่ละค่าเพื่อรับค่าที่อยู่ในช่วงตั้งแต่ 0 ถึง 255 (ใกล้พอถึง 255 สำหรับเรา)

ค่าที่มีช่วงตั้งแต่ 0 ถึง 255 สามารถแสดงด้วยตัวเลขแบบไบต์เดี่ยว (ชนิดข้อมูล "ถ่าน" ในภาษาการเขียนโปรแกรม Arduino แบบ C) ดังนั้นเราจะบันทึกหน่วยความจำโดยใช้การแสดงแบบไบต์เดียว

แต่มุมล่ะ? หากคุณกำลังใช้องศา มุมในช่วงไซนูซอยด์ตั้งแต่ 0 ถึง 360 หากคุณกำลังใช้เรเดียน มุมจะอยู่ในช่วง 0 ถึง 2 คูณ π ("pi") เรากำลังจะทำอะไรบางอย่างที่สงวนหน่วยความจำใน Arduino ของเราอีกครั้ง และคิดถึงวงกลมที่แบ่งออกเป็น 256 ส่วน และมี "มุมไบนารี" ที่อยู่ในช่วงตั้งแต่ 0 ถึง 255 ดังนั้น "มุม" สำหรับแต่ละสีจึงเป็นได้ แสดงด้วยตัวเลขแบบไบต์เดี่ยวหรืออักขระที่นี่ด้วย

Arduino นั้นค่อนข้างน่าทึ่งในแบบที่มันเป็น และถึงแม้ว่ามันจะสามารถคำนวณค่าไซน์ได้ แต่เราต้องการบางสิ่งที่เร็วกว่านี้ เราจะคำนวณค่าล่วงหน้า และใส่ลงในอาร์เรย์แบบยาว 256 รายการของค่าไบต์เดี่ยวหรือค่าถ่านในโปรแกรมของเรา (ดูการประกาศ SineTable[…] ในโปรแกรม Arduino)

ขั้นตอนที่ 4: มาสร้าง 3D LIssajous Pattern

มาสร้าง 3D LIssajous Pattern
มาสร้าง 3D LIssajous Pattern

ในการวนรอบตารางด้วยความถี่ที่ต่างกันสำหรับแต่ละสีในสามสี เราจะเก็บหนึ่งดัชนีต่อสี และเพิ่มค่าชดเชยที่สำคัญให้กับแต่ละดัชนีเมื่อเราก้าวผ่านสี เราจะเลือก 2, 5 และ 11 เป็นค่าชดเชยที่สำคัญสำหรับค่าดัชนีสีแดง สีเขียว และสีน้ำเงิน ความสามารถทางคณิตศาสตร์ภายในของ Arduino จะช่วยเราโดยการตัดรอบโดยอัตโนมัติเมื่อเราเพิ่มค่าออฟเซ็ตให้กับแต่ละดัชนี

ขั้นตอนที่ 5: นำสิ่งนี้มารวมกันบน Arduino

นำสิ่งนี้มารวมกันบน Arduino
นำสิ่งนี้มารวมกันบน Arduino

Arduinos ส่วนใหญ่มีช่องสัญญาณ PWM (หรือการปรับความกว้างพัลส์) จำนวนหนึ่ง เราต้องการสามที่นี่ Arduino UNO นั้นยอดเยี่ยมสำหรับสิ่งนี้ แม้แต่ไมโครคอนโทรลเลอร์ Atmel 8 บิต (ATTiny85) เพียงเล็กน้อยก็ยังทำงานได้อย่างยอดเยี่ยม

แต่ละช่องสัญญาณ PWM จะขับเคลื่อนสี LED RGB หนึ่งสีโดยใช้ฟังก์ชัน "AnalogWrite" ของ Arduino โดยที่ความเข้มของสีในแต่ละจุดรอบรอบไซน์จะแสดงด้วยความกว้างพัลส์หรือรอบการทำงานตั้งแต่ 0 (ปิดทั้งหมด)) ถึง 255 (เปิดทั้งหมด) ตาของเรารับรู้ความกว้างของพัลส์ที่แตกต่างกันเหล่านี้ ทำซ้ำได้เร็วพอ เช่น ความเข้มหรือความสว่างที่ต่างกันของ LED การรวมช่องสัญญาณ PWM ทั้งสามช่องที่ขับเคลื่อนแต่ละสีในสามสีใน RGB LED ทำให้เรามีความสามารถในการแสดงสี 256*256*256 หรือมากกว่าสิบหกล้านสี!

คุณจะต้องตั้งค่า Arduino IDE (Interactive Development Environment) และเชื่อมต่อกับบอร์ด Arduino โดยใช้สาย USB เรียกใช้จัมเปอร์จากเอาต์พุต PWM 3, 5 และ 6 (พินโปรเซสเซอร์ 5, 11 และ 12) ถึงตัวต้านทาน 1 KΩ (หนึ่งพันโอห์ม) สามตัวบนบอร์ดโปรโตหรือโปรโตชิลด์ และจากตัวต้านทานไปยัง LED R, G และพิน B

  • หาก RGB LED เป็นแคโทดทั่วไป (ขั้วลบ) ให้เรียกใช้ลวดจากแคโทดกลับไปที่พิน GND บน Arduino
  • หากไฟ LED RGB เป็นขั้วบวกทั่วไป (ขั้วบวก) ให้เรียกใช้สายจากขั้วบวกกลับไปที่ขา +5V บน Arduino

ร่าง Arduino จะทำงานอย่างใดอย่างหนึ่ง ฉันบังเอิญใช้ LED แคโทดทั่วไป SparkFun Electronics / COM-11120 RGB (ภาพด้านบนจากเว็บไซต์ SparkFun) พินที่ยาวที่สุดคือแคโทดทั่วไป

ดาวน์โหลดสเก็ตช์ RGB-Instructable.ino เปิดด้วย Arduino IDE และทดสอบคอมไพล์ อย่าลืมระบุบอร์ดหรือชิป Arduino เป้าหมายที่ถูกต้อง จากนั้นโหลดโปรแกรมลงใน Arduino ควรเริ่มต้นขึ้นทันที

คุณจะเห็นไฟ LED RGB หมุนเวียนไปตามสีต่างๆ มากมายเท่าที่คุณระบุได้ และอีกหลายล้านสีที่คุณไม่สามารถทำได้!

ขั้นตอนที่ 6: อะไรต่อไป?

เราเพิ่งเริ่มสำรวจ RGB Color Space ด้วย Arduino ของเรา สิ่งอื่น ๆ ที่ฉันได้ทำกับแนวคิดนี้ ได้แก่:

เขียนโดยตรงไปยัง on-chip registers แทนการใช้ AnalogWrite เพื่อเร่งความเร็วของสิ่งต่างๆ

  • การปรับเปลี่ยนวงจรเพื่อให้เซ็นเซอร์ความใกล้ชิด IR เร่งความเร็วหรือชะลอวงจรขึ้นอยู่กับว่าคุณเข้าใกล้แค่ไหน
  • การเขียนโปรแกรมไมโครคอนโทรลเลอร์ Atmel ATTiny85 8 พินด้วย Arduino bootloader และภาพร่างนี้

แนะนำ: