สารบัญ:

Pimp My Cam: 14 ขั้นตอน (พร้อมรูปภาพ)
Pimp My Cam: 14 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Pimp My Cam: 14 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Pimp My Cam: 14 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Pimp My Setup S3E14 2024, พฤศจิกายน
Anonim
Pimp My Cam
Pimp My Cam

นี่คือที่มาของโครงการนี้

ไม่นานมานี้ ฉันคิดเกี่ยวกับการถ่ายทำไทม์แลปส์ "ยังไง?" ฉันถามตัวเอง? คำตอบแรกคือ "ก็.. คุณแค่ถ่ายอะไรบางอย่างและเร่งความเร็ว แค่นั้นเอง" แต่มันง่ายขนาดนั้นจริงหรือ? อันดับแรก ฉันต้องการใช้กล้อง DSLR สำหรับสิ่งนั้น และ Nikon D3100 ของฉันมีเวลาจำกัด 10 นาทีในการถ่ายทำวิดีโอ ประการที่สอง แม้ว่าฉันจะมีกล้องที่ไม่จำกัดเวลาในการถ่ายวิดีโอ แต่ถ้าฉันต้องการสร้างไทม์แลปส์ที่ยาวมาก ๆ เช่น 12 ชั่วโมง ฉันสร้างวิดีโอ 1080p ยาว 12 ชั่วโมง ฉันสงสัยว่าแบตเตอรี่จะใช้งานได้นานขนาดนั้นและใช้งานไม่ได้จริงหรือ ได้เลย กำลังข้าม "ไอเดียการถ่ายทำวิดีโอ" ดีแล้วที่มีรูปภาพ ถ่ายภาพด้วยกล้องในช่วงเวลาหนึ่งและลงเอยด้วยภาพหลายร้อยภาพ ซึ่งผมประมวลผลผ่านซอฟต์แวร์เพื่อทำวิดีโอ.. ?

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

ขั้นตอนที่ 1: แต่.. อย่างไร?

แต่..ยังไง?
แต่..ยังไง?

อย่างไร? คือคำถามต่อไปของเราที่ไม่มีคำตอบ เนื่องจากเวลา การกระตุ้น เซ็นเซอร์ และสิ่งต่างๆ เหล่านี้ จึงไม่น่าแปลกใจเลยที่สิ่งแรกๆ ที่นึกถึงคือ Arduino แน่นอน เอาล่ะ แต่เรายังต้องเรียนรู้วิธีเปิดชัตเตอร์ในกล้องของเรา หืม..เซอร์โวร้อนติดกล้องบอดี้? ไม่อย่างแน่นอน เราต้องการให้สิ่งนี้เงียบและประหยัดพลังงาน ประหยัดพลังงาน - ทำไม? เพราะฉันต้องการทำให้พกพาสะดวกและใส่แบตเตอรี่เข้าไป ฉันจึงไม่เคยอยู่ใกล้ปลั๊กไฟทุกครั้ง แล้วเราจะเรียกมันได้อย่างไร.. มันค่อนข้างง่ายจริงๆ

Nikon รู้อยู่แล้วว่าคุณต้องการรีโมตและอุปกรณ์เสริมอื่นๆ และพวกเขาบอกว่า "โอเค เราจะให้ทั้งหมดนั้น แต่เราจะสร้างพอร์ตพิเศษขึ้นมาเพื่อที่เราจะได้ทำเงินได้มากขึ้นกับอุปกรณ์เสริมเหล่านั้น" น่าเสียดายที่คุณนิคอน. พอร์ตนั้น (ในกรณีของฉัน) เรียกว่า MC-DC2 และวิธีที่ถูกที่สุดในการรับมือกับมันคือการซื้อรีโมทชัตเตอร์บน eBay ในราคา 2-3 $ และใช้สายเคเบิล

*กล้องอื่นๆ บางรุ่น เช่น Canon มีช่องเสียบหูฟังขนาด 3.5 มม. แบบเรียบง่ายซึ่งออกแบบมาเพื่อการใช้งานแบบเดียวกัน คุณจึงสามารถใช้สายเคเบิลจากลำโพง/หูฟังรุ่นเก่าได้

ขั้นตอนที่ 2: เรียนรู้วิธีทริกเกอร์กล้อง

Image
Image
วิธีทริกเกอร์
วิธีทริกเกอร์

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

คุณสามารถทดสอบสิ่งนี้ได้โดยการย่อสายไฟจริงที่ปลายสายเคเบิลเพื่อระบุว่าเป็นสายใด เมื่อคุณทำเสร็จแล้ว เพื่อให้ระบุได้ง่ายขึ้น เราจะระบายสีดังนี้:

กราวด์ = สีดำ; โฟกัส = ขาว; ชัตเตอร์ = สีแดง

เอาล่ะ ตอนนี้เราต้องสอน Arduino ให้ทำสิ่งนี้ให้เรา

ขั้นตอนที่ 3: วิธีทริกเกอร์

Image
Image

สิ่งที่ง่ายที่สุดที่เราสามารถบอกให้ Arduino ส่งไปยังโลกภายนอกคือสัญญาณเอาท์พุตดิจิตอล สัญญาณนี้สามารถเป็น HIGH(ตรรกะ '1') หรือ LOW (ตรรกะ '0') ดังนั้นชื่อ "ดิจิทัล" หรือเมื่อแปลงเป็นความหมายหลัก: 5V สำหรับตรรกะ HIGH และ 0V สำหรับตรรกะ LOW

เราจะทำอย่างไรกับสัญญาณดิจิทัลนี้? เราไม่สามารถเพียงแค่เชื่อมต่อกับกล้องและคาดหวังให้กล้องรู้ว่าเราต้องการอะไร ดังที่เราได้เห็นแล้ว เราจำเป็นต้องตัดการเชื่อมต่อของกล้องให้สั้นลงเพื่อให้มันตอบสนอง เราจึงจำเป็นต้องใช้สัญญาณดิจิตอลของ Arduino เพื่อขับเคลื่อนส่วนประกอบบางอย่างที่สามารถลัดวงจรได้ ขึ้นอยู่กับสัญญาณไฟฟ้าที่เราส่ง. *วิธีที่ฉันอธิบาย คุณอาจกำลังคิดว่า "โอ้ รีเลย์!" แต่ไม่มี รีเลย์ทำงานได้ แต่เรากำลังเผชิญกับกระแสน้ำขนาดเล็กที่เราสามารถใช้มนต์ดำของเซมิคอนดักเตอร์ได้อย่างง่ายดาย

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

เราจะใช้ออปโตคัปเปลอร์ด้วยวิธีนี้: เราบอกให้ Arduino ของเราส่งดิจิตอล HIGH ไปที่หนึ่งหากเป็นพินดิจิตอล สัญญาณนั้นในทางปฏิบัติคือ 5V ซึ่งจะขับ LED ภายในออปโตคัปเปลอร์และโฟโตทรานซิสเตอร์ด้านในจะ "สั้น" มันคือขั้วเอาท์พุตเมื่อตรวจพบแสงนั้น และในทางกลับกัน มันจะ "ถอด" ออกจากเทอร์มินัล เนื่องจากไม่มีแสงจาก LED เมื่อเราส่ง LOW แบบดิจิทัลผ่าน Arduino

ในทางปฏิบัติหมายความว่า: หนึ่งในหมุดดิจิทัลของ Arduino ติดอยู่กับพิน ANODE ของออปโตคัปเปลอร์, GND ของ Arduino ติดอยู่กับ CATHODE, GND ของกล้องติดอยู่กับ EMITTER และ FOCUS (หรือ SHUTTER) กับ COLLECTOR ดูแผ่นข้อมูลของออปโตคัปเปลอร์ที่คุณใช้เพื่อค้นหาพินเหล่านี้ในตัวคุณ ฉันใช้ 4N35 เพื่อให้คุณสามารถทำตามแผนผังของฉันได้โดยสุ่มสี่สุ่มห้าหากคุณไม่สนใจว่าเกิดอะไรขึ้นภายในออปโตคัปเปลอร์ จำเป็นต้องพูด เราต้องการสองสิ่งนี้ เนื่องจากเราจำเป็นต้องควบคุมทั้ง FOCUS และ SHUTTER ของกล้อง

เนื่องจากเราเห็นว่ามันทำงานอย่างไร ด้วยโฟโต้ทรานซิสเตอร์บนเอาต์พุต ทำไมเราไม่ลองใช้ทรานซิสเตอร์ NPN ธรรมดาดูล่ะ คราวนี้ เราจะนำสัญญาณดิจิตอลโดยตรง (ข้ามตัวต้านทาน) ไปยังฐานของทรานซิสเตอร์ และเชื่อมต่อ GND ของกล้องและ Arduino กับตัวปล่อยและโฟกัส/ชัตเตอร์ของกล้องไปยังตัวสะสมของทรานซิสเตอร์

อีกครั้ง เราต้องการสองสิ่งนี้เนื่องจากเราควบคุมสัญญาณสองตัว ฉันใช้ BC547B และโดยทั่วไปคุณสามารถใช้ NPN สำหรับสิ่งนี้ได้เนื่องจากกระแสที่เรากำลังควบคุมอยู่นั้นเป็นมิลลิแอมป์เดียว

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

ขั้นตอนที่ 4: การเขียนโค้ดสำหรับการทริกเกอร์

Image
Image
การเขียนโค้ดสำหรับทริกเกอร์
การเขียนโค้ดสำหรับทริกเกอร์

อย่างที่เราพูดไปก่อนหน้านี้ เราจะใช้หมุดดิจิทัลของ Arduino เพื่อส่งสัญญาณ Arduino สามารถใช้ทั้งสองสิ่งนี้เพื่ออ่านข้อมูลจากมันหรือเขียนลงไป ดังนั้นสิ่งแรกที่เราต้องทำระบุในฟังก์ชัน setup() ที่เราจะใช้หมุดดิจิทัลของ Arduino สองตัวสำหรับเอาต์พุตดังนี้:

โหมดพิน (FOCUS_PIN, OUTPUT);

โหมดพิน (SHUTTER_PIN, OUTPUT);

โดยที่ FOCUS_PIN และ SHUTTER_PIN สามารถกำหนดได้ด้วย "#define NAME value" หรือเป็น int ก่อนฟังก์ชัน setup() เนื่องจากคุณอาจเปลี่ยนพิน ดังนั้นการเปลี่ยนค่าในจุดเดียวง่ายกว่าการเปลี่ยนรหัสทั้งหมดในภายหลัง

สิ่งต่อไปที่เราจะทำคือเขียนฟังก์ชัน trigger() ซึ่งจะทำอย่างนั้นเมื่อทำงาน ฉันจะใส่รูปภาพพร้อมรหัส สิ่งที่คุณต้องรู้คือก่อนอื่น เราถือ FOCUS_PIN ไว้ที่ HIGH เป็นระยะเวลาหนึ่งเพราะเราต้องรอให้กล้องโฟกัสไปที่วัตถุที่เรากำลังเล็งไปที่นั้น จากนั้นครู่หนึ่ง (ในขณะที่ FOCUS_PIN ยังสูงอยู่) วาง SHUTTER_PIN ไว้ที่ HIGH เพื่อถ่ายภาพ

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

ขั้นตอนที่ 5: ช่วงชั้นเรียน{};

Image
Image
การจัดการช่วงเวลาผ่าน Arduino
การจัดการช่วงเวลาผ่าน Arduino

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

วงเป็นโมฆะ (){

ล่าช้า(ช่วงเวลา); สิ่งกระตุ้น(); }

ฉันต้องการเปลี่ยนช่วงเวลานี้จาก สมมุติว่า 5 วินาที ไปจนถึง 20-30 นาที และนี่คือปัญหา ถ้าฉันต้องการเปลี่ยนจาก 5s เป็น 16s หรืออะไรก็ตามระหว่างนั้น ฉันจะใช้การเพิ่มขึ้น 1s โดยที่คำขอของฉันแต่ละรายการเพื่อเพิ่มช่วงเวลา ช่วงเวลาจะเพิ่มขึ้นเป็น 1 วินาที เยี่ยมมาก แต่ถ้าฉันต้องการเปลี่ยนจาก 5 วินาทีเป็น 5 นาทีล่ะ ฉันต้องใช้คำขอ 295 รายการในการเพิ่มทีละ 1 วินาที ดังนั้นฉันต้องเพิ่มค่าการเพิ่มขึ้นเป็นค่าที่ใหญ่กว่าอย่างชัดเจน และฉันต้องกำหนดว่าค่าช่วงที่แน่นอน (เกณฑ์) ใดเพื่อเปลี่ยนการเพิ่มขึ้น ฉันใช้สิ่งนี้:

5s-60s: เพิ่มขึ้น 1 วินาที; 60s-300s: เพิ่มขึ้น 10 วินาที; 300s-3600s: เพิ่มขึ้น 60s;

แต่ฉันเขียนคลาสนี้ให้ปรับได้เพื่อให้คุณสามารถกำหนดเกณฑ์และส่วนเพิ่มของคุณเองได้ (ทุกอย่างมีการแสดงความคิดเห็นในไฟล์.h เพื่อให้คุณรู้ว่าต้องเปลี่ยนค่าใด)

ตัวอย่างที่ฉันให้การจัดการช่วงเวลานั้นทำเสร็จแล้วบนพีซี ตอนนี้เราต้องย้ายไปยัง Arduino Interval ทั้งคลาสนี้ถูกใส่ไว้ในไฟล์ส่วนหัวเดียวซึ่งใช้สำหรับเก็บการประกาศและคำจำกัดความ (ไม่ใช่จริงๆ แต่สามารถทำได้ในตัวอย่างนี้โดยไม่ทำอันตรายใดๆ) ของคลาส/ฟังก์ชันของเรา ในการแนะนำไฟล์ส่วนหัวนี้ให้กับโค้ด Arduino เราใช้ " #include "Interval.h" " (ไฟล์ต้องอยู่ในไดเร็กทอรีเดียวกัน) ซึ่งทำให้แน่ใจได้ว่าเราสามารถใช้ฟังก์ชันที่กำหนดไว้ในไฟล์ส่วนหัวในโค้ดหลักของเราได้

ขั้นตอนที่ 6: การจัดการช่วงเวลาผ่าน Arduino

Image
Image
การจัดการช่วงเวลาผ่าน Arduino
การจัดการช่วงเวลาผ่าน Arduino
การจัดการช่วงเวลาผ่าน Arduino
การจัดการช่วงเวลาผ่าน Arduino

ตอนนี้เราต้องการเปลี่ยนค่าของช่วงเวลา ไม่ว่าจะเพิ่มหรือลด นั่นคือสองสิ่ง ดังนั้นเราจะใช้สัญญาณดิจิทัลสองสัญญาณ ซึ่งจะถูกควบคุมโดยปุ่มสองปุ่ม เราจะอ่านค่าบนพินดิจิทัลที่เรากำหนดให้กับปุ่มซ้ำๆ และแยกวิเคราะห์ค่าเหล่านั้นไปยังฟังก์ชัน checkButtons(int, int); ซึ่งจะเพิ่มช่วงเวลาหากกดปุ่ม "ขึ้น" และลดช่วงเวลาหากปุ่ม "ลง" นอกจากนี้ หากกดปุ่มทั้งสองปุ่ม ค่าของตัวแปรโฟกัสจะเปลี่ยน ซึ่งควบคุมว่าจะโฟกัสหรือไม่เมื่อทริกเกอร์

ส่วนหนึ่งของโค้ด ((millis() - prevBtnPress) >= debounceTime) ใช้สำหรับ debounding วิธีที่ฉันเขียนมันหมายความว่าฉันลงทะเบียนการกดปุ่มครั้งแรกด้วยตัวแปรบูลีน btnPressed และจำเวลาที่เกิดขึ้น กว่าที่ฉันรอเป็นระยะเวลาหนึ่ง (debounceTime) และหากยังกดปุ่มอยู่ฉันก็ตอบสนอง นอกจากนี้ยังทำให้ "หยุดชั่วคราว" ระหว่างการกดปุ่มอื่น ๆ ทุกครั้งเพื่อหลีกเลี่ยงการกดหลายครั้งโดยที่ไม่มีการกดปุ่ม

และสุดท้ายด้วย:

ถ้า ((มิลลิวินาที () - prevTrigger) / 1000 >= interval.getVal()) {

prevTrigger = มิลลิวินาที (); สิ่งกระตุ้น(); }

ก่อนอื่นเราตรวจสอบว่าระยะเวลาระหว่างการทริกเกอร์ครั้งสุดท้าย (prevTrigger) และเวลาปัจจุบัน (มิลลิวินาที ()) (ทุกอย่างถูกหารด้วย 1,000 เนื่องจากเป็นมิลลิวินาทีและช่วงเวลาเป็นวินาที) เท่ากับหรือมากกว่าช่วงเวลา เราต้องการ และถ้าเป็น เราจำเวลาปัจจุบันเป็นครั้งสุดท้ายที่เราทริกเกอร์กล้องแล้วเปิดใช้งาน

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

ขั้นตอนที่ 7: การแสดงช่วงเวลา

Image
Image
การแสดงช่วงเวลา
การแสดงช่วงเวลา
การแสดงช่วงเวลา
การแสดงช่วงเวลา
การแสดงช่วงเวลา
การแสดงช่วงเวลา

นี่คือที่ที่เราแนะนำการแสดงผล ฉันใช้โมดูล 4 หลักที่ขับเคลื่อนโดย TM1637 เพราะฉันต้องใช้โมดูลนี้เพื่อแสดงเวลาเท่านั้น วิธีที่ง่ายที่สุดในการใช้โมดูลเหล่านี้ที่สร้างขึ้นสำหรับ Arduino คือการใช้ไลบรารีที่สร้างไว้แล้วสำหรับพวกเขา ในไซต์ Arduino มีหน้าที่อธิบายชิป TM1673 และลิงก์ไปยังไลบรารีที่แนะนำ ฉันดาวน์โหลดไลบรารีนี้และมีสองวิธีที่คุณสามารถแนะนำไลบรารีเหล่านี้กับ Arduino IDE:

  1. จากซอฟต์แวร์ Arduino ไปที่ Sketch>Include Library>Add. ZIP library และค้นหาไฟล์.zip ที่คุณเพิ่งดาวน์โหลด
  2. คุณสามารถทำสิ่งที่ Arduino ทำด้วยตนเองและเพียงคลายซิปไลบรารีในโฟลเดอร์ที่ Arduino เก็บไลบรารีบน Windows: C:\Users\Username\Documents\Arduino\libraries

เมื่อคุณรวมไลบรารี่แล้ว คุณควรอ่านไฟล์ "ReadMe" ซึ่งคุณจะพบข้อมูลสรุปเกี่ยวกับการทำงานของฟังก์ชันต่างๆ บางครั้งสิ่งนี้ยังไม่เพียงพอ ดังนั้นคุณจะต้องเจาะลึกลงไปอีกเล็กน้อยและสำรวจไฟล์ส่วนหัวซึ่งคุณสามารถดูวิธีการใช้งานฟังก์ชันและสิ่งที่พวกเขาต้องการเป็นอาร์กิวเมนต์อินพุต และแน่นอนว่าวิธีที่ดีที่สุดในการทำความเข้าใจว่าห้องสมุดมีความสามารถอะไร โดยปกติแล้วจะมีตัวอย่างที่คุณสามารถเรียกใช้จากซอฟต์แวร์ Arduino ผ่าน File>Examples>LibraryName>ExampleName ไลบรารีนี้นำเสนอตัวอย่างหนึ่งที่ฉันแนะนำให้คุณเรียกใช้บนจอแสดงผลเพื่อดูว่าจอแสดงผลของคุณทำงานอย่างถูกต้องหรือไม่ และฉันขอแนะนำให้คุณปรับแต่งโค้ดที่คุณเห็นในตัวอย่างและดูว่าแต่ละฟังก์ชันทำงานอย่างไรและจอแสดงผลตอบสนองอย่างไร มัน. ฉันทำไปแล้วและนี่คือสิ่งที่ฉันคิดออก:

ใช้จำนวนเต็ม 8 บิตที่ไม่ได้ลงนาม 4 ตัวสำหรับแต่ละหลัก (0bB7, B6, B5, B4, B3, B2, B1, B0) และแต่ละบิตเหล่านั้น B6-B0 จะใช้สำหรับแต่ละส่วนของตัวเลขที่แน่นอน และหากบิตนั้นเป็น 1 ส่วนนั้นที่ควบคุมโดยบิตนั้นจะสว่างขึ้น จำนวนเต็มเหล่านี้ถูกเก็บไว้ในอาร์เรย์ที่เรียกว่า data การตั้งค่าบิตเหล่านี้บนจอแสดงผลทำได้โดย display.setSegments(data); หรือคุณสามารถเข้าถึงตัวเลขใด ๆ โดยเฉพาะและตั้งค่าด้วยตนเอง (data[0] = 0b01111001) หรือคุณสามารถใช้ฟังก์ชัน encodeDigit(int); และแปลงตัวเลขที่คุณส่งไปตาม bits(data[0] = display.encodeDigit(3)); บิต B7 ใช้เฉพาะกับตัวเลขที่สองหรือ data[1] เพื่อเปิดใช้งานเครื่องหมายทวิภาค

เนื่องจากฉันเขียนฟังก์ชันในคลาสแม่มด INTERVAL ซึ่งฉันสามารถรับตัวเลขบางหลักของช่วงเวลาในรูปแบบของ M1M0:S1S0 โดยที่ M หมายถึงนาทีและ S เป็นวินาที จึงเป็นเรื่องปกติที่ฉันใช้ encodeDigitFunction(int); สำหรับการแสดงช่วงเวลาดังนี้:

displayInterval(){

data[0] = display.encodeDigit(interval.getM1()); ข้อมูล[1] = 0x80 | display.encodeDigit(interval.getM0()); ข้อมูล[2] = display.encodeDigit(interval.getS1()); ข้อมูล[3] = display.encodeDigit(interval.getS0()); display.setSegments (ข้อมูล); }

ตอนนี้ เมื่อใดก็ตามที่ฉันต้องการแสดงช่วงเวลาบนจอแสดงผล ฉันสามารถเรียกใช้ฟังก์ชัน displayInterval() ได้

*หมายเหตุ " 0x80 | … " บน data[1] ใช้เพื่อให้แน่ใจว่าบิต B7 ของข้อมูล[1] เป็น 1 เสมอ ดังนั้นโคลอนจะสว่างขึ้น

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

ขั้นตอนที่ 8: นำทุกอย่างมารวมกัน

วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน

เรารู้วิธีทริกเกอร์กล้อง วิธีจัดการช่วงเวลา และวิธีแสดงช่วงเวลาเดียวกันนั้นบนจอแสดงผล ตอนนี้เราแค่ต้องรวมสิ่งเหล่านี้เข้าด้วยกัน แน่นอน เราจะเริ่มจากฟังก์ชัน loop() เราจะตรวจสอบการกดปุ่มอย่างต่อเนื่องและตอบสนองตามนั้นด้วย checkButtons(int, int) และเปลี่ยนช่วงเวลาตามนั้นและแสดงช่วงเวลาที่เปลี่ยนแปลง นอกจากนี้ในลูป () เราจะตรวจสอบอย่างต่อเนื่องว่าเวลาผ่านไปเพียงพอจากการกดปุ่มหรือกดปุ่มครั้งสุดท้ายและเรียกใช้ฟังก์ชันทริกเกอร์ () หากจำเป็นหรือไม่ เพื่อลดการใช้พลังงาน เราจะปิดจอแสดงผลหลังจากผ่านไประยะหนึ่ง

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

นอกจากนี้ เราจะย้ายไปยัง Arduino ที่เล็กกว่านั้น Pro Mini

ขั้นตอนที่ 9: การเพิ่มสิ่งสุดท้าย

เพิ่มสิ่งสุดท้าย
เพิ่มสิ่งสุดท้าย
เพิ่มสิ่งสุดท้าย
เพิ่มสิ่งสุดท้าย
เพิ่มสิ่งสุดท้าย
เพิ่มสิ่งสุดท้าย

จนถึงตอนนี้.. เราเพิ่งสร้าง Intervalometer ขึ้นมาเท่านั้น มีประโยชน์ แต่เราสามารถทำได้ดีกว่า

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

ประการแรก เราจะตรวจจับได้อย่างไรว่าเราติดเซ็นเซอร์ไว้

เซ็นเซอร์ที่เราจะใช้หรือสร้างทั้งหมดจะต้องมีสายไฟสามเส้นเชื่อมต่อกับ Arduino (Vcc, GND, Signal) นั่นหมายความว่าเราสามารถใช้แจ็คเสียง 3.5 มม. เป็นแจ็คอินพุตสำหรับเซ็นเซอร์ได้ และนั่นจะแก้ปัญหาของเราได้อย่างไร? มีแจ็คขนาด 3.5 มม. "ที่มีสวิตช์" อยู่หลายประเภท ซึ่งมีหมุดที่ต่อสั้นถึงหมุดของขั้วต่อ หากไม่มีขั้วต่อตัวผู้อยู่ในนั้น และจะถอดออกเมื่อมีขั้วต่ออยู่ นั่นหมายความว่าเรามีข้อมูลตามการมีอยู่ของเซ็นเซอร์ ฉันจะใช้ตัวต้านทานแบบดึงลงตามที่แสดง (พินดิจิตอลจะอ่านค่า HIGH โดยไม่มีเซ็นเซอร์ และ LOW เมื่อต่อเซ็นเซอร์) ในภาพหรือคุณสามารถแนบกับพินดิจิทัลกับพินของตัวเชื่อมต่อซึ่งปกติ เชื่อมต่อกับกราวด์และกำหนดพินดิจิทัลนั้นเป็น INPUT_PULLUP มันจะทำงานด้วยวิธีใดวิธีหนึ่ง ดังนั้นตอนนี้ เราต้องปรับแต่งโค้ดของเรา เพื่อให้ทำงานได้ทั้งหมดที่เราเขียนมาจนถึงตอนนี้ก็ต่อเมื่อไม่มีเซ็นเซอร์หรือเมื่อตรวจสอบพินดิจิทัลที่สูง ฉันยังปรับแต่งมันเพื่อให้แสดง "SENS" บนหน้าจอแทนช่วงเวลาซึ่งไม่มีประโยชน์ในโหมดนี้ แต่การโฟกัสยังคงเกี่ยวข้องกับเรา เราจะคงฟังก์ชันการสลับการโฟกัสด้วยการกดปุ่มทั้งสองและ แสดงสถานะโฟกัสผ่านไฟ LED สีแดง

เซ็นเซอร์ทำหน้าที่อะไรจริง ๆ ?

สิ่งที่ต้องทำคือใส่ 5V บนขาสัญญาณเมื่อเราต้องการทริกเกอร์กล้อง นั่นหมายความว่าเราต้องการพินดิจิตอลอื่นของ Arduino เพื่อตรวจสอบสถานะของพินนี้และเมื่อลงทะเบียน HIGH สิ่งที่ต้องทำคือเรียกใช้ฟังก์ชัน trigger() และกล้องจะถ่ายภาพ ตัวอย่างที่ง่ายที่สุด และอันที่เราจะใช้ในการทดสอบว่าใช้งานได้หรือไม่ คือปุ่มง่ายๆ ที่มีตัวต้านทานแบบดึงลง ติดปุ่มระหว่าง Vcc ของเซ็นเซอร์และขาสัญญาณ และเพิ่มตัวต้านทานระหว่างขาสัญญาณและ GND ด้วยวิธีนี้ ขาสัญญาณจะอยู่ที่ GND เมื่อไม่ได้กดปุ่มเนื่องจากไม่มีกระแสไหลผ่านตัวต้านทาน และเมื่อ กดปุ่มเราวางขาสัญญาณโดยตรงบน HIGH และ Arduino อ่านและเรียกกล้อง

ด้วยเหตุนี้เราจึงสรุปการเขียนโค้ด

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

ขั้นตอนที่ 10: บรรจุระเบียบ

มีระเบียบ
มีระเบียบ
มีระเบียบ
มีระเบียบ
มีระเบียบ
มีระเบียบ
มีระเบียบ
มีระเบียบ

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

ฉันใช้ Eagle ในการออกแบบ PCB และพบการออกแบบสำหรับชิ้นส่วนทั้งหมดที่ฉันใช้ มีสิ่งเล็กๆ อย่างหนึ่งในการออกแบบของฉันที่ฉันหวังว่าจะไม่ทำ และนั่นคือแผ่นลวดสำหรับ Vcc ของจอแสดงผล ฉันเห็นมันสายเกินไปและไม่อยากทำลายสิ่งที่ฉันออกแบบไว้ก่อนหน้านี้และใช้วิธีขี้เกียจในการเพิ่มแผ่นลวดและต่อมาต้องเพิ่มลวดลงในการเชื่อมต่อเหล่านี้แทนที่จะเป็นร่องรอยทองแดง ดังนั้นหากคุณใช้การออกแบบของฉัน.

บอร์ด Arduino และจอแสดงผลเชื่อมต่อกับ PCB ผ่านส่วนหัวของหมุดตัวเมียแทนที่จะบัดกรีโดยตรงบน PCB ด้วยเหตุผลที่ชัดเจน วิธีนี้จะมีพื้นที่มากมายสำหรับส่วนประกอบอื่นๆ ใต้จอแสดงผลสำหรับส่วนประกอบอื่นๆ เช่น ตัวต้านทาน ทรานซิสเตอร์ และแม้แต่แจ็คเสียง

ฉันได้ใส่ปุ่มกดขนาดเล็กซึ่งตามการออกแบบแล้วควรบัดกรีโดยตรง แต่คุณสามารถใช้รูสำหรับส่วนหัวของหมุดตัวเมียและเชื่อมต่อปุ่มด้วยลวดได้หากต้องการให้ติดตั้งบนตัวเครื่องไม่ใช่บน PCB

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

ขั้นตอนที่ 11: Sens0rs

Image
Image
Sens0rs
Sens0rs

ลองพิจารณาวิธีการใช้เซ็นเซอร์

ดังนั้นเซ็นเซอร์จะมีแรงดันไฟฟ้า 5V และจะต้องสามารถให้สัญญาณดิจิตอล HIGH บนขาสัญญาณเมื่อเราต้องการทริกเกอร์กล้อง สิ่งแรกที่เข้ามาในหัวของฉันคือเซ็นเซอร์ตรวจจับความเคลื่อนไหว PIR จะเฉพาะเจาะจง มีโมดูลขายสำหรับ Arduino ที่มีเซ็นเซอร์นี้และทำในสิ่งที่เราต้องการ พวกเขาใช้พลังงาน 5V และมีพินเอาต์พุตที่พวกเขาใส่ 5V เมื่อพวกเขาถูกทริกเกอร์ เราเพียงแค่ต้องเชื่อมต่อพินเข้ากับแจ็คเสียง 3.5 มม. และเราสามารถเสียบเข้ากับบอร์ดได้โดยตรง สิ่งหนึ่งที่ควรทราบก็คือเซ็นเซอร์นี้ต้องใช้เวลาในการทำให้ร้อนและเริ่มทำงานอย่างถูกต้อง ดังนั้นอย่าคาดหวังว่ามันจะทำงานอย่างถูกต้องทันทีที่คุณเสียบปลั๊ก ให้เวลากับมันแล้วตั้งค่าและอะไรก็ตามที่ยังมีชีวิตอยู่ ช่วงจะทำให้กล้องทำงาน

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

ขั้นตอนที่ 12: PoweeEeEer

PoweeEeEer
PoweeEeEer
PoweeEeEer
PoweeEeEer

ฉันคิดว่าวิธีที่ง่ายที่สุดในการจ่ายไฟให้กับสิ่งนี้คือการใช้พาวเวอร์แบงค์ ไม่ใช่ภายนอก เราจะคงฟังก์ชันในการชาร์จโทรศัพท์ของเราหรืออะไรก็ตาม และควบคุมกระแสที่ไหลไปยังบอร์ดผ่านสวิตช์ เราจะค้นหาพินของขั้วต่อ USB เอาต์พุตบนแผงวงจรในพาวเวอร์แบงค์ซึ่งเป็น GND และ Vcc (5V) และสายบัดกรีโดยตรงบนแผงวงจรหลักของเรา

ขั้นตอนที่ 13: สิ่งที่แนบมา.. Kinda

สิ่งที่แนบมา
สิ่งที่แนบมา
สิ่งที่แนบมา
สิ่งที่แนบมา
สิ่งที่แนบมา
สิ่งที่แนบมา

ฉันต่อสู้กับสิ่งนี้จริงๆ เมื่อฉันซื้อกล่องที่ฉันต้องการใส่ PCB ที่มีอยู่ ฉันก็รู้ว่าไม่มีทางที่ดีที่จะใส่ทุกอย่างตามที่ฉันต้องการ จากนั้นฉันก็ตัดสินใจออกแบบ PCB ใหม่ คราวนี้ด้วยออปโตคัปเปลอร์ ฉันต้องการวาง PCB ไว้ข้างใต้ซึ่งฉันจะเจาะรูสำหรับส่วนประกอบบางอย่างที่ต้องมองเห็น/สัมผัส เพื่อให้ใช้งานได้ ฉันจะต้องประสานจอแสดงผลและ Arduino เข้ากับบอร์ดโดยตรง โดยไม่ต้องใช้ซ็อกเก็ตหรือส่วนหัว และนั่นคือปัญหาแรก การแก้ปัญหาทุกอย่างเป็นเรื่องที่น่ากลัวอย่างยิ่ง เนื่องจากฉันยังไม่พร้อมที่จะบัดกรีมันในทันที จนกว่าฉันจะทดสอบว่าทุกอย่างใช้งานได้ และฉันไม่สามารถทดสอบอะไรได้เลย เพราะฉันไม่สามารถบัดกรีมันได้ เป็นต้น.. อย่า อย่าทำเช่นนี้ ปัญหา numero dos ทำให้รูบนเคส ฉันเดาว่าฉันทำการวัดผิดเพราะไม่มีรูบนเคสที่ตรงกับส่วนประกอบบน PCB และฉันต้องขยายขนาดเหล่านั้นและปุ่มบน PCB สูงเกินไป และพวกเขาจะกดเสมอเมื่อฉันวางบอร์ดเข้าที่ และเนื่องจากฉันต้องการแจ็คเสียงที่ด้านข้าง ฉันต้องขยายรูเหล่านั้นด้วยเพื่อให้พอดีกับแจ็คก่อน จากนั้นจึงลดบอร์ดสำหรับจอแสดงผลและปุ่มต่างๆ ที่จะผ่านเข้ามา.. ผลลัพธ์นั้นแย่มาก

ฉันทำให้หลุมที่น่ากลัวน้อยลงด้วยการซ้อนทับด้านบนด้วยกระดาษแข็งบาง ๆ ซึ่งฉันตัดรูที่เหมาะสมกว่าสำหรับส่วนประกอบและ.. มันยังคงแย่มาก แต่ดูง่ายกว่าที่ฉันคิด

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

ขั้นตอนที่ 14: Fin

Image
Image
ครีบ
ครีบ

ฉันทำเสร็จแล้ว แต่นี่คือสิ่งที่ฉันจะทำแตกต่างออกไป:

ใช้แจ็คเสียง 3.5 มม. ที่มีคุณภาพดีกว่า สิ่งที่ฉันใช้มักจะทำให้ขั้วสั้นในขณะที่เสียบหรือดึงแจ็คซึ่งส่งผลให้แหล่งจ่ายไฟขาดจึงรีเซ็ต Arduino หรือเพียงแค่สร้างทริกเกอร์ปลอม ฉันได้พูดไปแล้วในขั้นตอนที่แล้ว แต่ฉันจะพูดอีกครั้ง.. อย่าบัดกรีบอร์ด Arduino โดยไม่มีส่วนหัว/ซ็อกเก็ต มันแค่ทำให้การแก้ไขปัญหาใดๆ หรืออัปโหลดโค้ดใหม่ และอื่นๆ ยากขึ้นมาก ฉันยังคิดว่าการมีสัญญาณไฟ LED ที่บอกว่าสิ่งนี้เปิดอยู่จะมีประโยชน์เพราะฉันมักจะไม่สามารถบอกได้โดยไม่ต้องกดปุ่มเนื่องจากหน้าจอดับลง และสิ่งสุดท้าย ฟังก์ชันหยุดชั่วคราว ฉันคิดว่ามันมีประโยชน์ เช่น เมื่อเสียบเซ็นเซอร์ PIR เนื่องจากต้องใช้เวลาในการทำให้ร้อนขึ้น หรือเมื่อเคลื่อนที่ไปรอบๆ คุณไม่ต้องการให้ทริกเกอร์ ดังนั้นคุณสามารถหยุดทุกอย่างได้ แต่คุณสามารถหมุนได้ ปิดกล้องเลย..อะไรก็ได้

อีกสิ่งที่เรียบร้อยคือติด Velcro ไว้บนขาตั้งกล้อง เนื่องจากน่าจะใช้กับที่นั่นมากที่สุด

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

แนะนำ: