در قسمت قبل از آموزش آردوینو به ارسال سیگنالهای ریموت کنترل با آردوینو رفتیم. در قسمت 58 آموزش آردوینو، به سراغ کنترل دوربین دیجیتال با آردوینو میرویم و بررسی میکنیم چگونه میتوان فوکوس و شاتر یک دوربین را مستقیماً توسط برنامه کنترل کرد. در این قسمت قصد داریم ببینیم چگونه میتوان یک دوربین دیجیتال را با Arduino کنترل کرد و بدون فشردن مستقیم دکمه شاتر، از طریق برنامه عکس گرفت.
این روش میتواند برای پروژههایی مانند عکاسی Time-Lapse، تصویربرداری خودکار در فاصلههای زمانی مشخص یا گرفتن عکس در واکنش به یک رویداد تشخیصدادهشده توسط آردوینو استفاده شود.
فرض کنید میخواهید Arduino یک دوربین دیجیتال را کنترل کند و دوربین تحت کنترل برنامه عکس بگیرد. برای مثال، میتوانید عکاسی Time-Lapse انجام دهید یا زمانی که یک سنسور متصل به آردوینو رویداد خاصی را تشخیص میدهد، بهصورت خودکار عکس بگیرید.
برای انجام این کار چند روش وجود دارد. اگر دوربین شما دارای ریموت کنترل مادون قرمز باشد، میتوانید ابتدا کدهای مربوط به ریموت را دریافت کنید و سپس Arduino همان سیگنالهای مادون قرمز را برای دوربین ارسال کند.
اما اگر دوربین ریموت مادون قرمز ندارد و در عوض دارای ورودی مخصوص ریموت سیمی است، میتوان از روشی که در ادامه توضیح میدهیم استفاده کرد.
کانکتور شاتر دوربین معمولاً از نوع TRS یا Tip, Ring, Sleeve است. این کانکتورها معمولاً در اندازههای ۲٫۵ یا ۳٫۵ میلیمتر ساخته میشوند؛ بااینحال، طول و شکل کانکتور در همه دوربینها الزاماً استاندارد نیست.
مطمئنترین روش برای تهیه کانکتور مناسب این است که یک ریموت سیمی ارزانقیمت مخصوص مدل دوربین خود تهیه کنید و کابل آن را برای پروژه تغییر دهید. همچنین میتوانید از کابلهای تبدیل مخصوص شاتر دوربین استفاده کنید.
برای کنترل دوربین، Arduino نباید مستقیماً به مدار شاتر متصل شود. در این مدار از اپتوکوپلر (Optocoupler) استفاده میکنیم تا مدار Arduino از مدار داخلی دوربین از نظر الکتریکی ایزوله شود.
Arduino از طریق دو اپتوکوپلر به کابل ریموت دوربین متصل میشود. یکی از اپتوکوپلرها وظیفه فعالکردن فوکوس و دیگری وظیفه فعالکردن شاتر را بر عهده دارد.

در مدار بالا پایههای دیجیتال Arduino از طریق مقاومتهای ۲۲۰ اهم به LED داخلی اپتوکوپلرها متصل شدهاند. سمت ترانزیستوری اپتوکوپلرها نیز به خطوط فوکوس و شاتر کانکتور دوربین وصل میشود.
کد زیر ۲۰ عکس میگیرد و بین هر دو عکس ۱۰ ثانیه فاصله قرار میدهد. پایه ۴ برای کنترل فوکوس و پایه ۳ برای کنترل شاتر استفاده شده است.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
/* * camera sketch * takes 20 pictures with a digital camera * using pin 4 to trigger focus * pin 3 to trigger the shutter */ int focus = 4; int shutter = 3; long exposure = 250; long interval = 10000; void setup() { pinMode(focus, OUTPUT); pinMode(shutter, OUTPUT); for (int i=0; i<20; i++) { takePicture(exposure); delay(interval); } } void loop() { // once it's taken 20 pictures it is done, // so loop is empty // but loop still needs to be here or the // sketch won't compile } void takePicture(long exposureTime) { int wakeup = 10; digitalWrite(focus, HIGH); delay(wakeup); digitalWrite(shutter, HIGH); delay(exposureTime); digitalWrite(shutter, LOW); digitalWrite(focus, LOW); } |
در ابتدای برنامه دو پایه برای کنترل دوربین مشخص شدهاند. پایه ۴ با متغیر focus وظیفه فعالکردن فوکوس دوربین را دارد و پایه ۳ با متغیر shutter برای فعالکردن شاتر استفاده میشود.
|
1 2 |
int focus = 4; int shutter = 3; |
متغیر exposure مدتزمان فعالبودن شاتر را تعیین میکند. مقدار ۲۵۰ به معنای ۲۵۰ میلیثانیه است:
|
1 |
long exposure = 250; |
متغیر interval نیز فاصله زمانی بین دو عکس را مشخص میکند. مقدار 10000 برابر با ۱۰ ثانیه است:
|
1 |
long interval = 10000; |
در تابع setup() هر دو پایه بهعنوان خروجی تعریف میشوند. سپس یک حلقه for تابع takePicture() را ۲۰ مرتبه اجرا میکند.
|
1 2 3 4 5 |
for (int i=0; i<20; i++) { takePicture(exposure); delay(interval); } |
پس از هر بار گرفتن عکس، برنامه بهاندازه مقدار interval منتظر میماند و سپس عکس بعدی گرفته میشود.
عملیات اصلی کنترل دوربین داخل تابع takePicture() انجام میشود. ابتدا خط فوکوس فعال میشود:
|
1 |
digitalWrite(focus, HIGH); |
سپس برنامه برای مدت کوتاهی منتظر میماند تا دوربین فرصت بیدارشدن و انجام فوکوس را داشته باشد:
|
1 |
delay(wakeup); |
بعد از آن خط شاتر فعال میشود:
|
1 |
digitalWrite(shutter, HIGH); |
شاتر بهاندازه مقدار تعیینشده در exposureTime فعال باقی میماند و سپس آزاد میشود. در پایان نیز خط فوکوس آزاد میشود:
|
1 2 |
digitalWrite(shutter, LOW); digitalWrite(focus, LOW); |
اتصال مستقیم پایههای Arduino به ورودی ریموت دوربین توصیه نمیشود. ولتاژها و شرایط الکتریکی مدار داخلی دوربین ممکن است با Arduino سازگار نباشند و اتصال مستقیم میتواند باعث آسیبدیدن Arduino یا دوربین شود.
اپتوکوپلر بین دو مدار ایزولاسیون الکتریکی ایجاد میکند. در نتیجه Arduino تنها LED داخلی اپتوکوپلر را کنترل میکند و ترانزیستور سمت دیگر اپتوکوپلر مانند کلید مربوط به فوکوس یا شاتر دوربین عمل میکند.
همچنین برای انتخاب صحیح کانکتور و نحوه اتصال پایههای Focus، Shutter و Common باید دفترچه راهنمای مدل دوربین خود را بررسی کنید؛ زیرا آرایش کانکتور در همه دوربینها یکسان نیست.
ممکن است لازم باشد ترتیب فعال و غیرفعالشدن پایههای focus و shutter را متناسب با مدل دوربین خود تغییر دهید.
برای مثال، در بعضی دوربینهای Canon برای انجام نوردهی Bulb ابتدا باید فوکوس فعال شود. سپس بدون آزادکردن فوکوس، شاتر باز شود. پس از پایان نوردهی ابتدا شاتر و بعد از آن فوکوس آزاد میشود. کد این آموزش نیز از همین ترتیب استفاده میکند.
اما اگر میخواهید دوربین خودش میزان نوردهی را محاسبه کند، ممکن است لازم باشد ابتدا فرمان فوکوس ارسال شود، فوکوس آزاد شود و سپس فرمان شاتر فعال شود.
پس از اینکه بتوانید شاتر را بهصورت نرمافزاری کنترل کنید، میتوانید گرفتن عکس را به انواع ورودیها و رویدادها وابسته کنید. برای مثال، میتوان از این روش برای عکاسی Time-Lapse، ثبت تصویر پس از تشخیص حرکت، عکاسی هنگام فعالشدن یک سنسور یا ساخت سیستمهای تصویربرداری خودکار استفاده کرد.
برای برخی دوربینهای Canon میتوان از ابزار Canon Hack Development Kit برای دسترسی به قابلیتهای بیشتری از دوربین استفاده کرد.
کنترل برخی دوربینهای GoPro نیز از طریق Arduino مجهز به WiFi امکانپذیر است.
برای کنترل بعضی دوربینهای ویدئویی نیز میتوان از پروتکل LANC استفاده کرد. همچنین برای تجهیزات حرفهای Blackmagic Design راهکارهایی مبتنی بر Arduino و پروتکل باز این شرکت وجود دارد.
در این آموزش دیدیم که چگونه میتوان با استفاده از Arduino، دو اپتوکوپلر و ورودی ریموت سیمی دوربین، فوکوس و شاتر یک دوربین دیجیتال را کنترل کرد. استفاده از اپتوکوپلر باعث میشود Arduino و مدار داخلی دوربین از یکدیگر ایزوله باشند و خطر آسیب ناشی از اتصال مستقیم دو مدار کاهش پیدا کند.
با تغییر زمان نوردهی، فاصله بین عکسها یا اضافهکردن سنسورها میتوان همین مدار ساده را به سیستمهای Time-Lapse، تشخیص حرکت و تصویربرداری خودکار تبدیل کرد.
مرجع :
آموزش کنترل ریموت، دوربین و دستگاههای AC با...
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.