สารบัญ:
- ขั้นตอนที่ 1: แต่.. อย่างไร?
- ขั้นตอนที่ 2: เรียนรู้วิธีทริกเกอร์กล้อง
- ขั้นตอนที่ 3: วิธีทริกเกอร์
- ขั้นตอนที่ 4: การเขียนโค้ดสำหรับการทริกเกอร์
- ขั้นตอนที่ 5: ช่วงชั้นเรียน{};
- ขั้นตอนที่ 6: การจัดการช่วงเวลาผ่าน Arduino
- ขั้นตอนที่ 7: การแสดงช่วงเวลา
- ขั้นตอนที่ 8: นำทุกอย่างมารวมกัน
- ขั้นตอนที่ 9: การเพิ่มสิ่งสุดท้าย
- ขั้นตอนที่ 10: บรรจุระเบียบ
- ขั้นตอนที่ 11: Sens0rs
- ขั้นตอนที่ 12: PoweeEeEer
- ขั้นตอนที่ 13: สิ่งที่แนบมา.. Kinda
- ขั้นตอนที่ 14: Fin
วีดีโอ: Pimp My Cam: 14 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:09
นี่คือที่มาของโครงการนี้
ไม่นานมานี้ ฉันคิดเกี่ยวกับการถ่ายทำไทม์แลปส์ "ยังไง?" ฉันถามตัวเอง? คำตอบแรกคือ "ก็.. คุณแค่ถ่ายอะไรบางอย่างและเร่งความเร็ว แค่นั้นเอง" แต่มันง่ายขนาดนั้นจริงหรือ? อันดับแรก ฉันต้องการใช้กล้อง DSLR สำหรับสิ่งนั้น และ Nikon D3100 ของฉันมีเวลาจำกัด 10 นาทีในการถ่ายทำวิดีโอ ประการที่สอง แม้ว่าฉันจะมีกล้องที่ไม่จำกัดเวลาในการถ่ายวิดีโอ แต่ถ้าฉันต้องการสร้างไทม์แลปส์ที่ยาวมาก ๆ เช่น 12 ชั่วโมง ฉันสร้างวิดีโอ 1080p ยาว 12 ชั่วโมง ฉันสงสัยว่าแบตเตอรี่จะใช้งานได้นานขนาดนั้นและใช้งานไม่ได้จริงหรือ ได้เลย กำลังข้าม "ไอเดียการถ่ายทำวิดีโอ" ดีแล้วที่มีรูปภาพ ถ่ายภาพด้วยกล้องในช่วงเวลาหนึ่งและลงเอยด้วยภาพหลายร้อยภาพ ซึ่งผมประมวลผลผ่านซอฟต์แวร์เพื่อทำวิดีโอ.. ?
ดูเหมือนจะเป็นความคิดที่ดี ดังนั้นฉันจึงตัดสินใจลองดู ดังนั้นฉันจึงลงเอยด้วยการต้องการสร้างอุปกรณ์ที่ฉันสามารถป้อนช่วงเวลาได้ และตามช่วงเวลานั้น กล้องของฉันจะทำงานตลอดเวลา และในขณะที่เรากำลังดำเนินการอยู่ ทำไมไม่เพิ่มอย่างอื่น เช่น ทริกเกอร์การเคลื่อนไหว และอื่นๆ อีกล่ะ
ขั้นตอนที่ 1: แต่.. อย่างไร?
อย่างไร? คือคำถามต่อไปของเราที่ไม่มีคำตอบ เนื่องจากเวลา การกระตุ้น เซ็นเซอร์ และสิ่งต่างๆ เหล่านี้ จึงไม่น่าแปลกใจเลยที่สิ่งแรกๆ ที่นึกถึงคือ Arduino แน่นอน เอาล่ะ แต่เรายังต้องเรียนรู้วิธีเปิดชัตเตอร์ในกล้องของเรา หืม..เซอร์โวร้อนติดกล้องบอดี้? ไม่อย่างแน่นอน เราต้องการให้สิ่งนี้เงียบและประหยัดพลังงาน ประหยัดพลังงาน - ทำไม? เพราะฉันต้องการทำให้พกพาสะดวกและใส่แบตเตอรี่เข้าไป ฉันจึงไม่เคยอยู่ใกล้ปลั๊กไฟทุกครั้ง แล้วเราจะเรียกมันได้อย่างไร.. มันค่อนข้างง่ายจริงๆ
Nikon รู้อยู่แล้วว่าคุณต้องการรีโมตและอุปกรณ์เสริมอื่นๆ และพวกเขาบอกว่า "โอเค เราจะให้ทั้งหมดนั้น แต่เราจะสร้างพอร์ตพิเศษขึ้นมาเพื่อที่เราจะได้ทำเงินได้มากขึ้นกับอุปกรณ์เสริมเหล่านั้น" น่าเสียดายที่คุณนิคอน. พอร์ตนั้น (ในกรณีของฉัน) เรียกว่า MC-DC2 และวิธีที่ถูกที่สุดในการรับมือกับมันคือการซื้อรีโมทชัตเตอร์บน eBay ในราคา 2-3 $ และใช้สายเคเบิล
*กล้องอื่นๆ บางรุ่น เช่น Canon มีช่องเสียบหูฟังขนาด 3.5 มม. แบบเรียบง่ายซึ่งออกแบบมาเพื่อการใช้งานแบบเดียวกัน คุณจึงสามารถใช้สายเคเบิลจากลำโพง/หูฟังรุ่นเก่าได้
ขั้นตอนที่ 2: เรียนรู้วิธีทริกเกอร์กล้อง
อย่างไรก็ตาม นี่คือข้อตกลง พอร์ตจะมีการเชื่อมต่อ 3 จุดที่เราสนใจ (กราวด์ โฟกัส และชัตเตอร์) และคุณจะมีส่วนต่อสายเคเบิลของรีโมตชัตเตอร์ที่เพิ่งซื้อมาใหม่ซึ่งคุณเพิ่งทำลายไป การเชื่อมต่อทั้งสามนี้มีความสำคัญต่อเรา เพราะหากเราทำให้กราวด์และโฟกัสสั้น กล้องจะโฟกัสเหมือนกับที่คุณกดปุ่มโฟกัส จากนั้นในขณะที่การเชื่อมต่อนั้นยังคงอยู่ คุณสามารถทำให้กราวด์และชัตเตอร์สั้น จากนั้นกล้องจะถ่ายภาพ เหมือนกับว่าคุณกดปุ่มชัตเตอร์บนกล้อง
คุณสามารถทดสอบสิ่งนี้ได้โดยการย่อสายไฟจริงที่ปลายสายเคเบิลเพื่อระบุว่าเป็นสายใด เมื่อคุณทำเสร็จแล้ว เพื่อให้ระบุได้ง่ายขึ้น เราจะระบายสีดังนี้:
กราวด์ = สีดำ; โฟกัส = ขาว; ชัตเตอร์ = สีแดง
เอาล่ะ ตอนนี้เราต้องสอน Arduino ให้ทำสิ่งนี้ให้เรา
ขั้นตอนที่ 3: วิธีทริกเกอร์
สิ่งที่ง่ายที่สุดที่เราสามารถบอกให้ 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: การเขียนโค้ดสำหรับการทริกเกอร์
อย่างที่เราพูดไปก่อนหน้านี้ เราจะใช้หมุดดิจิทัลของ 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: ช่วงชั้นเรียน{};
ตอนนี้เราได้ทริกเกอร์กล้องจนสุดทางแล้ว เราต้องทำให้สิ่งนี้เป็นเครื่องวัดระยะห่างโดยเพิ่มฟังก์ชันการทำงานของการปรับช่วงเวลาระหว่างสองภาพ เพื่อให้คุณได้เห็นภาพของสิ่งที่เรากำลังทำอยู่ นี่คือโค้ดพื้นฐานบางส่วนเพื่อสาธิตการทำงานที่เราต้องการ:
วงเป็นโมฆะ (){
ล่าช้า(ช่วงเวลา); สิ่งกระตุ้น(); }
ฉันต้องการเปลี่ยนช่วงเวลานี้จาก สมมุติว่า 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
ตอนนี้เราต้องการเปลี่ยนค่าของช่วงเวลา ไม่ว่าจะเพิ่มหรือลด นั่นคือสองสิ่ง ดังนั้นเราจะใช้สัญญาณดิจิทัลสองสัญญาณ ซึ่งจะถูกควบคุมโดยปุ่มสองปุ่ม เราจะอ่านค่าบนพินดิจิทัลที่เรากำหนดให้กับปุ่มซ้ำๆ และแยกวิเคราะห์ค่าเหล่านั้นไปยังฟังก์ชัน checkButtons(int, int); ซึ่งจะเพิ่มช่วงเวลาหากกดปุ่ม "ขึ้น" และลดช่วงเวลาหากปุ่ม "ลง" นอกจากนี้ หากกดปุ่มทั้งสองปุ่ม ค่าของตัวแปรโฟกัสจะเปลี่ยน ซึ่งควบคุมว่าจะโฟกัสหรือไม่เมื่อทริกเกอร์
ส่วนหนึ่งของโค้ด ((millis() - prevBtnPress) >= debounceTime) ใช้สำหรับ debounding วิธีที่ฉันเขียนมันหมายความว่าฉันลงทะเบียนการกดปุ่มครั้งแรกด้วยตัวแปรบูลีน btnPressed และจำเวลาที่เกิดขึ้น กว่าที่ฉันรอเป็นระยะเวลาหนึ่ง (debounceTime) และหากยังกดปุ่มอยู่ฉันก็ตอบสนอง นอกจากนี้ยังทำให้ "หยุดชั่วคราว" ระหว่างการกดปุ่มอื่น ๆ ทุกครั้งเพื่อหลีกเลี่ยงการกดหลายครั้งโดยที่ไม่มีการกดปุ่ม
และสุดท้ายด้วย:
ถ้า ((มิลลิวินาที () - prevTrigger) / 1000 >= interval.getVal()) {
prevTrigger = มิลลิวินาที (); สิ่งกระตุ้น(); }
ก่อนอื่นเราตรวจสอบว่าระยะเวลาระหว่างการทริกเกอร์ครั้งสุดท้าย (prevTrigger) และเวลาปัจจุบัน (มิลลิวินาที ()) (ทุกอย่างถูกหารด้วย 1,000 เนื่องจากเป็นมิลลิวินาทีและช่วงเวลาเป็นวินาที) เท่ากับหรือมากกว่าช่วงเวลา เราต้องการ และถ้าเป็น เราจำเวลาปัจจุบันเป็นครั้งสุดท้ายที่เราทริกเกอร์กล้องแล้วเปิดใช้งาน
เมื่อเสร็จสมบูรณ์แล้ว เราทำเครื่องวัดช่วงเวลาโดยพื้นฐานแล้ว แต่เรายังห่างไกลจากจุดสิ้นสุด เรายังไม่เห็นค่าของเครื่องวัดช่วง มันจะแสดงเฉพาะบน Serial Monitor และเราจะไม่อยู่ใกล้คอมพิวเตอร์เสมอไป ดังนั้นตอนนี้เราจะใช้บางสิ่งที่จะแสดงช่วงเวลาที่เราเปลี่ยนแปลง
ขั้นตอนที่ 7: การแสดงช่วงเวลา
นี่คือที่ที่เราแนะนำการแสดงผล ฉันใช้โมดูล 4 หลักที่ขับเคลื่อนโดย TM1637 เพราะฉันต้องใช้โมดูลนี้เพื่อแสดงเวลาเท่านั้น วิธีที่ง่ายที่สุดในการใช้โมดูลเหล่านี้ที่สร้างขึ้นสำหรับ Arduino คือการใช้ไลบรารีที่สร้างไว้แล้วสำหรับพวกเขา ในไซต์ Arduino มีหน้าที่อธิบายชิป TM1673 และลิงก์ไปยังไลบรารีที่แนะนำ ฉันดาวน์โหลดไลบรารีนี้และมีสองวิธีที่คุณสามารถแนะนำไลบรารีเหล่านี้กับ Arduino IDE:
- จากซอฟต์แวร์ Arduino ไปที่ Sketch>Include Library>Add. ZIP library และค้นหาไฟล์.zip ที่คุณเพิ่งดาวน์โหลด
- คุณสามารถทำสิ่งที่ 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
ลองพิจารณาวิธีการใช้เซ็นเซอร์
ดังนั้นเซ็นเซอร์จะมีแรงดันไฟฟ้า 5V และจะต้องสามารถให้สัญญาณดิจิตอล HIGH บนขาสัญญาณเมื่อเราต้องการทริกเกอร์กล้อง สิ่งแรกที่เข้ามาในหัวของฉันคือเซ็นเซอร์ตรวจจับความเคลื่อนไหว PIR จะเฉพาะเจาะจง มีโมดูลขายสำหรับ Arduino ที่มีเซ็นเซอร์นี้และทำในสิ่งที่เราต้องการ พวกเขาใช้พลังงาน 5V และมีพินเอาต์พุตที่พวกเขาใส่ 5V เมื่อพวกเขาถูกทริกเกอร์ เราเพียงแค่ต้องเชื่อมต่อพินเข้ากับแจ็คเสียง 3.5 มม. และเราสามารถเสียบเข้ากับบอร์ดได้โดยตรง สิ่งหนึ่งที่ควรทราบก็คือเซ็นเซอร์นี้ต้องใช้เวลาในการทำให้ร้อนและเริ่มทำงานอย่างถูกต้อง ดังนั้นอย่าคาดหวังว่ามันจะทำงานอย่างถูกต้องทันทีที่คุณเสียบปลั๊ก ให้เวลากับมันแล้วตั้งค่าและอะไรก็ตามที่ยังมีชีวิตอยู่ ช่วงจะทำให้กล้องทำงาน
เนื่องจากเรากำลังคิดไปในทิศทางของการสร้างบอร์ดเซ็นเซอร์ Arduino ขึ้นมาแล้วจึงนึกถึงเสียง บอร์ดเหล่านี้มักจะทำในลักษณะที่มีพินหนึ่งพินที่ส่งออกค่าอนาล็อกของเสียงที่หยิบขึ้นมาและอีกอันหนึ่งเป็นดิจิตอลที่ให้เอาต์พุตสูงแบบลอจิคัลหากเสียงที่หยิบขึ้นมาข้ามระดับหนึ่ง เราสามารถตั้งค่าระดับนี้เพื่อให้เซ็นเซอร์ไม่สนใจเสียงของเรา แต่ส่งเสียงปรบมือ ด้วยวิธีนี้ ทุกครั้งที่คุณปรบมือ คุณจะเปิดกล้อง
ขั้นตอนที่ 12: PoweeEeEer
ฉันคิดว่าวิธีที่ง่ายที่สุดในการจ่ายไฟให้กับสิ่งนี้คือการใช้พาวเวอร์แบงค์ ไม่ใช่ภายนอก เราจะคงฟังก์ชันในการชาร์จโทรศัพท์ของเราหรืออะไรก็ตาม และควบคุมกระแสที่ไหลไปยังบอร์ดผ่านสวิตช์ เราจะค้นหาพินของขั้วต่อ USB เอาต์พุตบนแผงวงจรในพาวเวอร์แบงค์ซึ่งเป็น GND และ Vcc (5V) และสายบัดกรีโดยตรงบนแผงวงจรหลักของเรา
ขั้นตอนที่ 13: สิ่งที่แนบมา.. Kinda
ฉันต่อสู้กับสิ่งนี้จริงๆ เมื่อฉันซื้อกล่องที่ฉันต้องการใส่ PCB ที่มีอยู่ ฉันก็รู้ว่าไม่มีทางที่ดีที่จะใส่ทุกอย่างตามที่ฉันต้องการ จากนั้นฉันก็ตัดสินใจออกแบบ PCB ใหม่ คราวนี้ด้วยออปโตคัปเปลอร์ ฉันต้องการวาง PCB ไว้ข้างใต้ซึ่งฉันจะเจาะรูสำหรับส่วนประกอบบางอย่างที่ต้องมองเห็น/สัมผัส เพื่อให้ใช้งานได้ ฉันจะต้องประสานจอแสดงผลและ Arduino เข้ากับบอร์ดโดยตรง โดยไม่ต้องใช้ซ็อกเก็ตหรือส่วนหัว และนั่นคือปัญหาแรก การแก้ปัญหาทุกอย่างเป็นเรื่องที่น่ากลัวอย่างยิ่ง เนื่องจากฉันยังไม่พร้อมที่จะบัดกรีมันในทันที จนกว่าฉันจะทดสอบว่าทุกอย่างใช้งานได้ และฉันไม่สามารถทดสอบอะไรได้เลย เพราะฉันไม่สามารถบัดกรีมันได้ เป็นต้น.. อย่า อย่าทำเช่นนี้ ปัญหา numero dos ทำให้รูบนเคส ฉันเดาว่าฉันทำการวัดผิดเพราะไม่มีรูบนเคสที่ตรงกับส่วนประกอบบน PCB และฉันต้องขยายขนาดเหล่านั้นและปุ่มบน PCB สูงเกินไป และพวกเขาจะกดเสมอเมื่อฉันวางบอร์ดเข้าที่ และเนื่องจากฉันต้องการแจ็คเสียงที่ด้านข้าง ฉันต้องขยายรูเหล่านั้นด้วยเพื่อให้พอดีกับแจ็คก่อน จากนั้นจึงลดบอร์ดสำหรับจอแสดงผลและปุ่มต่างๆ ที่จะผ่านเข้ามา.. ผลลัพธ์นั้นแย่มาก
ฉันทำให้หลุมที่น่ากลัวน้อยลงด้วยการซ้อนทับด้านบนด้วยกระดาษแข็งบาง ๆ ซึ่งฉันตัดรูที่เหมาะสมกว่าสำหรับส่วนประกอบและ.. มันยังคงแย่มาก แต่ดูง่ายกว่าที่ฉันคิด
คำตัดสิน ฉันแนะนำให้คุณทำเช่นนี้โดยการซื้อส่วนประกอบที่ยึดกับกล่องหุ้ม ไม่ใช่บน PCB โดยตรง วิธีนี้ทำให้คุณมีอิสระในการจัดวางส่วนประกอบต่างๆ ได้มากขึ้น และมีพื้นที่ทำผิดพลาดน้อยลง
ขั้นตอนที่ 14: Fin
ฉันทำเสร็จแล้ว แต่นี่คือสิ่งที่ฉันจะทำแตกต่างออกไป:
ใช้แจ็คเสียง 3.5 มม. ที่มีคุณภาพดีกว่า สิ่งที่ฉันใช้มักจะทำให้ขั้วสั้นในขณะที่เสียบหรือดึงแจ็คซึ่งส่งผลให้แหล่งจ่ายไฟขาดจึงรีเซ็ต Arduino หรือเพียงแค่สร้างทริกเกอร์ปลอม ฉันได้พูดไปแล้วในขั้นตอนที่แล้ว แต่ฉันจะพูดอีกครั้ง.. อย่าบัดกรีบอร์ด Arduino โดยไม่มีส่วนหัว/ซ็อกเก็ต มันแค่ทำให้การแก้ไขปัญหาใดๆ หรืออัปโหลดโค้ดใหม่ และอื่นๆ ยากขึ้นมาก ฉันยังคิดว่าการมีสัญญาณไฟ LED ที่บอกว่าสิ่งนี้เปิดอยู่จะมีประโยชน์เพราะฉันมักจะไม่สามารถบอกได้โดยไม่ต้องกดปุ่มเนื่องจากหน้าจอดับลง และสิ่งสุดท้าย ฟังก์ชันหยุดชั่วคราว ฉันคิดว่ามันมีประโยชน์ เช่น เมื่อเสียบเซ็นเซอร์ PIR เนื่องจากต้องใช้เวลาในการทำให้ร้อนขึ้น หรือเมื่อเคลื่อนที่ไปรอบๆ คุณไม่ต้องการให้ทริกเกอร์ ดังนั้นคุณสามารถหยุดทุกอย่างได้ แต่คุณสามารถหมุนได้ ปิดกล้องเลย..อะไรก็ได้
อีกสิ่งที่เรียบร้อยคือติด Velcro ไว้บนขาตั้งกล้อง เนื่องจากน่าจะใช้กับที่นั่นมากที่สุด
อย่าลังเลที่จะถามอะไรเกี่ยวกับโครงการนี้ในความคิดเห็นและฉันชอบที่จะรู้ว่าคุณสร้างมันขึ้นมาหรือไม่และมันกลายเป็นอย่างไรสำหรับคุณ
แนะนำ:
ESP32 Cam Laser Cut Acrylic Enclosure: 3 ขั้นตอน (พร้อมรูปภาพ)
ESP32 Cam Laser Cut Acrylic Enclosure: ฉันเพิ่งตกหลุมรักบอร์ด ESP32-cam ช่างเป็นเครื่องมหัศจรรย์จริงๆ! กล้อง, WiFi, บลูทูธ, ที่ใส่การ์ด SD, ไฟ LED สว่าง (สำหรับแฟลช) และโปรแกรม Arduino ได้ ราคาแตกต่างกันไประหว่าง $ 5 ถึง $ 10 ตรวจสอบ https://randomnerdtutorials.com
วิธีใช้ GPIO Pins ของ Raspberry Pi และ Avrdude เป็น Bit-bang-program DIMP 2 หรือ DA PIMP 2: 9 ขั้นตอน
วิธีใช้ GPIO Pins ของ Raspberry Pi และ Avrdude to Bit-bang-program DIMP 2 หรือ DA PIMP 2: นี่เป็นคำแนะนำทีละขั้นตอนเกี่ยวกับวิธีใช้ Raspberry Pi และคำสั่งโอเพ่นซอร์สฟรี avrdude เป็น bit-bang - โปรแกรม DIMP 2 หรือ DA PIMP 2 ฉันคิดว่าคุณคุ้นเคยกับ Raspberry Pi และบรรทัดคำสั่ง LINUX คุณไม่จำเป็นต้อง
Pimp My Wreck: 9 ขั้นตอน
Pimp My Wreck: บทนำสวัสดีทุกคน! เราเป็นนักศึกษาวิทยาการคอมพิวเตอร์สองคนจาก IDC และในฐานะที่เป็นนักเรียน เราเลือกพาหนะระดับปานกลาง (อย่างน้อยก็จนกว่าเราจะได้งาน) เมื่อถึงตอนนั้น เรามีความปรารถนาที่จะอัพเกรดซากเรือของเราให้อย่างน้อยก็รู้สึกเย็นสบายกับสิ่งที่เรามี โชคดี
ESP32-CAM Case System และ 3D Printer Cam: 10 ขั้นตอน (พร้อมรูปภาพ)
ESP32-CAM Case System และ 3D Printer Cam: ฉันกำลังจะเปลี่ยนกล้องในเครื่องพิมพ์ 3-D ของฉันด้วยบางสิ่งที่เล็ก เรียบง่าย และใช้งานได้….และราคาถูก การค้นหาโดย Google เพียงไม่กี่ครั้งทำให้ฉันไปที่โมดูล ESP32-Cam คุณสามารถหาพวกมันได้ในราคาต่ำกว่า $10 น้อยกว่าและพวกมันทำงานได้ดีมาก
เริ่มต้นใช้งาน ESP32 CAM - สตรีมวิดีโอโดยใช้ ESP CAM ผ่าน Wifi - โครงการกล้องรักษาความปลอดภัย ESP32: 8 ขั้นตอน
เริ่มต้นใช้งาน ESP32 CAM | สตรีมวิดีโอโดยใช้ ESP CAM ผ่าน Wifi | โครงการกล้องรักษาความปลอดภัย ESP32: วันนี้เราจะเรียนรู้วิธีใช้บอร์ด ESP32 CAM ใหม่นี้ และวิธีที่เราสามารถเข้ารหัสและใช้เป็นกล้องรักษาความปลอดภัยและรับการสตรีมวิดีโอผ่าน wifi