فهرست مطالب:

Pimp My Cam: 14 مرحله (همراه با تصاویر)
Pimp My Cam: 14 مرحله (همراه با تصاویر)

تصویری: Pimp My Cam: 14 مرحله (همراه با تصاویر)

تصویری: Pimp My Cam: 14 مرحله (همراه با تصاویر)
تصویری: 10 самых АТМОСФЕРНЫХ мест Дагестана. БОЛЬШОЙ ВЫПУСК #Дагестан #ПутешествиеПоДагестану 2024, نوامبر
Anonim
Pimp My Cam
Pimp My Cam

در اینجا این پروژه از کجا آمده است.

چندی پیش به فکر فیلمبرداری از برخی تایم لپس ها افتادم. "چگونه؟" از خودم پرسیدم؟ اولین پاسخ این بود "خوب.. شما فقط از چیزی فیلم بگیرید و سرعت دهید و بس". اما آیا واقعاً به این سادگی است؟ اول ، من می خواهم از DSLR خود برای این کار استفاده کنم و Nikon D3100 من برای فیلمبرداری ویدئو 10 دقیقه محدودیت دارد. ثانیاً ، حتی اگر دوربینی بدون محدودیت زمانی در فیلمبرداری داشته باشم ، اگر بخواهم یک تایم لپس واقعاً طولانی را ایجاد کنم ، مانند 12 ساعت؟ ویدئویی با کیفیت 1080p و 12 ساعت می سازم. من شک دارم که باتری اینقدر دوام بیاورد و این خیلی کاربردی نیست ، اینطور است؟ بسیار خوب ، از "ایده فیلمبرداری فیلمبرداری" عبور کنید. خوب ، پس تصاویر وجود دارد. گرفتن عکس روی دوربین در فاصله زمانی معین و خاتمه دادن به صدها تصویر که من از طریق نرم افزار برای ساختن یک ویدیو پردازش می کنم..؟

به نظر ایده خوبی بود ، بنابراین تصمیم گرفتم به آن توجه کنم. بنابراین در نهایت می خواهم دستگاهی بسازم که بتوانم یک بازه زمانی را در آن وارد کنم و بر اساس آن دوره ، دوربین من را دائماً فعال می کند. و در حالی که ما در حال انجام آن هستیم ، چرا موارد دیگری مانند حرکت ماشه و غیره را اضافه نکنیم؟

مرحله 1: اما.. چگونه؟

اما.. چطور؟
اما.. چطور؟

چگونه؟ سوال بعدی ما است که پاسخی برای آن وجود ندارد. به دلیل زمان بندی ، راه اندازی ، سنسورها و مواردی از این دست ، تعجبی نخواهد داشت که اولین موردی که البته به ذهن آمد ، البته یک آردوینو بود. بسیار خوب ، اما هنوز هم ، ما باید نحوه فعال کردن شاتر روی دوربین خود را بیاموزیم. هم.. سروو داغ چسبیده به دوربین بدن؟ مطلقا نه ، ما می خواهیم این ساکت باشد و از نظر قدرت کارآمد باشد. کارآمد - چرا؟ از آنجا که می خواهم آن را قابل حمل کرده و باتری را در آن بچسبانم ، هر بار نزدیک یک پریز برق نخواهم بود. بنابراین چگونه می توانیم آن را فعال کنیم. این در واقع بسیار ساده است.

نیکون قبلاً می دانست که شما می خواهید یک ریموت و لوازم جانبی دیگر بخواهید و آنها گفتند "خوب ، ما همه اینها را به آنها می دهیم ، اما ما یک درگاه ویژه ایجاد می کنیم تا بتوانیم از این لوازم جانبی پول بیشتری کسب کنیم" ، شرم بر شما نیکون به آن پورت (در مورد من) MC-DC2 نامیده می شود و ارزان ترین راه برای دست یابی به آن این است که یک شاتر از راه دور در eBay به قیمت 2-3 دلار خریداری کرده و فقط از کابل استفاده کنید.

*برخی دیگر از دوربین ها ، مانند Canon ، دارای جک 3.5 میلی متری هدفون هستند که برای استفاده مشابه ساخته شده است ، بنابراین می توانید از کابل بلندگوها/هدفون های قدیمی استفاده کنید.

مرحله 2: آموزش نحوه فعال کردن دوربین

Image
Image
راه های تحریک
راه های تحریک

به هر حال ، در اینجا معامله می شود ، بندر دارای 3 اتصال است که مورد علاقه ما خواهد بود (Ground ، Focus و Shutter) و شما آن را در انتهای کابل شاتر از راه دور خریداری شده که تازه خراب کرده اید ، خواهید داشت. این سه اتصال برای ما مهم است زیرا اگر Ground و Focus را کوتاه کنیم ، دوربین همانطور که دکمه فوکوس را فشار می دهید فوکوس می کند و سپس ، تا زمانی که این اتصال باقی می ماند ، می توانید Ground و Shutter را کوتاه کنید و دوربین عکاسی می کند درست مثل اینکه دکمه شاتر را روی دوربین فشار داده اید.

شما می توانید این مسئله را با کوتاه کردن سیم های زنده در انتهای کابل برای تشخیص اینکه کدام سیم کدام است ، آزمایش کنید. پس از انجام این کار ، به منظور شناسایی آسانتر ، ما آنها را به این صورت رنگ می کنیم:

زمین = BLACK ؛ تمرکز = سفید ؛ شاتر = RED.

خوب ، اکنون ما باید به آردوینو آموزش دهیم که این کار را برای ما انجام دهد.

مرحله 3: راه های فعال سازی

Image
Image

ساده ترین چیزی که می توانیم به آردوینو بگوییم به دنیای خارج ارسال کند ، سیگنال خروجی دیجیتالی آن است. این سیگنال می تواند HIGH (منطقی '1') یا LOW (منطقی '0') باشد ، از این رو نام آن "دیجیتال" است ، یا وقتی به معنای اصلی آن تبدیل می شود: 5 ولت برای ارتفاع منطقی و 0 ولت برای پایین منطقی.

با این سیگنال های دیجیتالی چه کنیم؟ ما نمی توانیم آنها را به سادگی به دوربین وصل کنیم و انتظار داشته باشیم که دوربین بداند ما چه می خواهیم. همانطور که دیدیم ، ما باید اتصالات روی دوربین را کوتاه کنیم تا بتواند عکس العمل نشان دهد ، بنابراین ما باید از سیگنال های دیجیتالی آردوینو برای حرکت برخی از قطعات استفاده کنیم که بسته به این سیگنال الکتریکی که به آن ارسال می کنیم ، می تواند پایانه های خود را کوتاه کند. به *همانطور که من آن را توصیف کردم ، ممکن است به این فکر کنید "آه ، رله ها!" اما نه نه رله کار را انجام می دهد اما ما با جریانهای کوچکی سروکار داریم که می توانیم به راحتی از جادوی سیاه نیمه هادی ها استفاده کنیم.

اولین م componentلفه ای که من سعی می کنم یک optocoupler است. من بیشترین کاربرد آنها را در این زمینه دیده ام و احتمالاً بهترین راه حل است. Optocoupler یک قطعه الکتریکی است که با آن مدار خروجی را کنترل می کنید در حالی که مدار ورودی کاملاً از آن جدا شده است. این امر با انتقال اطلاعات از طریق نور حاصل می شود ، مدار ورودی یک LED را روشن می کند و فوتوترانزیستور روی خروجی مطابق آن تغییر می کند.

بنابراین ما از optocoupler به این روش استفاده می کنیم: ما به Arduino خود می گوییم اگر پین های دیجیتالی است یک عدد HIGH دیجیتال روی آن ارسال کند ، این سیگنال عملاً 5 ولت است که LED را در داخل اپتوکوپلر هدایت می کند و فوتوترانزیستور داخل آن "کوتاه" می شود. هنگامی که آن نور را تشخیص می دهد ، پایانه های خروجی دارد و بالعکس ، پایانه های آن را "جدا" می کند ، زیرا هنگام ارسال یک LOW دیجیتالی از طریق آردوینو ، چراغی از LED وجود ندارد.

از نظر عملی ، این بدان معناست: یکی از پین های دیجیتالی آردوینو به پین ANODE اپتوکوپلر ، GND آردوینو به CATHODE ، GND دوربین به EMITTER و FOCUS (یا شاتر) به جمع کننده متصل است. برای یافتن این پین ها روی صفحه خود ، به برگه داده optocoupler که استفاده می کنید مراجعه کنید. من از 4N35 استفاده می کنم ، بنابراین اگر واقعاً به اتفاقاتی که در داخل اپتوکوپلر می افتد اهمیتی نمی دهید ، می توانید طرحواره من را کورکورانه دنبال کنید. نیازی به گفتن نیست ، ما به دو مورد از این موارد نیاز داریم ، زیرا باید فوکوس و شاتر هر دو دوربین را کنترل کنیم.

از آنجا که ما دیدیم چگونه کار می کند ، با یک فوتوترانزیستور در خروجی ، چرا ما آن را فقط با یک ترانزیستور NPN ساده امتحان نمی کنیم. این بار ، ما سیگنال دیجیتال را مستقیماً (از طریق یک مقاومت) به پایه ترانزیستور می آوریم و GND دوربین و Arduino را به امیتر و فوکوس/شاتر دوربین را به جمع کننده ترانزیستور وصل می کنیم.

دوباره ، ما به دو مورد از این موارد نیاز داریم زیرا دو سیگنال را کنترل می کنیم. من از BC547B استفاده می کنم و شما اساساً می توانید از هر NPN برای این کار استفاده کنید زیرا جریان فعلی که ما کنترل می کنیم یک میلی آمپر است.

هر دوی این اجزا کار خواهند کرد ، اما انتخاب optocoupler احتمالاً ایده بهتری است زیرا ایمن تر است. ترانزیستورها را تنها در صورتی انتخاب کنید که بدانید در حال انجام چه کاری هستید.

مرحله 4: نوشتن کد برای فعال سازی

Image
Image
نوشتن کد تحریک
نوشتن کد تحریک

همانطور که قبلاً گفتیم ، ما از پین های دیجیتالی آردوینو برای سیگنالینگ استفاده می کنیم. آردوینو می تواند از این دو برای خواندن داده ها از آن یا نوشتن بر روی آن استفاده کند ، بنابراین اولین چیزی که باید انجام دهیم در تابع setup () مشخص می شود که ما از دو پین دیجیتال آردوینو برای خروجی استفاده می کنیم:

pinMode (FOCUS_PIN ، OUTPUT) ؛

pinMode (SHUTTER_PIN ، OUTPUT) ؛

جایی که FOCUS_PIN و SHUTTER_PIN را می توان با "#تعریف مقدار نام" یا به عنوان int قبل از تابع setup () تعریف کرد زیرا ممکن است پین را تغییر دهید بنابراین تغییر مقدار فقط در یک نقطه و نه کل کد پس از آن آسان تر است.

کار بعدی ما نوشتن یک تابع triger () است که در زمان اجرا دقیقاً همان کار را انجام می دهد. فقط یک عکس با کد اضافه می کنم. تنها چیزی که باید بدانید این است که ابتدا FOCUS_PIN را برای مدت زمان مشخصی روی HIGH نگه می داریم زیرا باید منتظر بمانیم تا دوربین روی موضوعی که به آن اشاره می کنیم تمرکز کند و سپس فقط برای یک لحظه (در حالی که FOCUS_PIN هنوز بالا است)) فقط برای گرفتن عکس SHUTTER_PIN را روی HIGH قرار دهید.

من همچنین توانایی حذف فوکوس را نیز شامل می شوم زیرا در صورت عکاسی از تایم لپس چیزی که فاصله آن را با دوربین تغییر نمی دهد ، نیازی به آن نخواهد بود.

مرحله 5: فاصله کلاس {}؛

Image
Image
دستکاری فاصله از طریق آردوینو
دستکاری فاصله از طریق آردوینو

اکنون که ما دوربین را از راه خارج کرده ایم ، باید با افزودن قابلیت دستکاری بازه زمانی بین دو عکس ، آن را به یک فاصله سنج تبدیل کنیم. برای اینکه بتوانید تصویری از آنچه ما انجام می دهیم دریافت کنید ، در اینجا چند کد اولیه برای نشان دادن عملکرد مورد نظر ما آمده است:

حلقه خالی () {

تاخیر (فاصله) ؛ ماشه()؛ }

من می خواهم بتوانم این فاصله را از 5 ثانیه به کل تا 20-30 دقیقه تغییر دهم. و در اینجا مشکل وجود دارد ، اگر بخواهم آن را از 5s به 16s یا هر چیزی بین آن تغییر دهم ، از افزایش 1s استفاده می کنم ، جایی که برای هر درخواست من برای افزایش فاصله ، فاصله برای 1s افزایش می یابد. بسیار عالی است ، اما اگر بخواهم از 5 ثانیه به 5 دقیقه بروم ، چه؟ 295 درخواست برای من به منظور افزایش 1s وجود دارد ، بنابراین من بدیهی است که باید مقدار افزایش را به چیزی بزرگتر برسانم ، و من باید مقدار دقیق فاصله (آستانه) را برای تغییر افزایش تعریف کنم. این را پیاده کردم:

5s-60s: 1s افزایش ؛ دهه 60 تا 300: افزایش 10 ثانیه ؛ 300s-3600s: افزایش 60s ؛

اما من این کلاس را برای تنظیم شدن نوشتم تا بتوانید آستانه ها و افزایش های خود را تعریف کنید (همه چیز در فایل.h توضیح داده شده است تا بتوانید بدانید که کدام مقادیر را در کجا تغییر دهید).

مثالی که من در مورد دستکاری بازه داده ام بدیهی است که در رایانه شخصی انجام می شود ، اکنون باید آن را به Arduino منتقل کنیم. کل این کلاس ، Interval ، درون یک فایل سربرگ قرار می گیرد که برای ذخیره اعلانات و تعاریف (نه در واقع ، اما می توان در این مثال بدون آسیب رساندن) کلاس/توابع ما انجام داد. برای معرفی این فایل هدر به کد arduino ما از "#include" Interval.h "" (فایلها باید در یک دایرکتوری باشند) استفاده می کنیم ، که اطمینان حاصل می کند که می توانیم از توابع تعریف شده در فایل هدر در کد اصلی خود استفاده کنیم.

مرحله 6: دستکاری فاصله از طریق آردوینو

Image
Image
دستکاری فاصله از طریق آردوینو
دستکاری فاصله از طریق آردوینو
دستکاری فاصله از طریق آردوینو
دستکاری فاصله از طریق آردوینو

اکنون ما می خواهیم بتوانیم مقدار فاصله را تغییر دهیم ، یا آن را افزایش یا کاهش دهیم. بنابراین این دو چیز است بنابراین ما از دو سیگنال دیجیتالی استفاده خواهیم کرد که توسط دو دکمه کنترل می شوند. ما مکرراً مقادیر پین های دیجیتالی که به دکمه ها اختصاص داده ایم را می خوانیم و این مقادیر را در تابع checkButtons (int، int) تجزیه می کنیم. که اگر دکمه "بالا" را فشار دهید فاصله را افزایش می دهد و اگر دکمه "پایین" باشد فاصله را کاهش می دهد. همچنین ، اگر هر دو دکمه را فشار دهید ، مقدار فوکوس متغیر را تغییر می دهد که در هنگام فعال شدن تمرکز می کند یا نه.

بخشی از کد ((millis () - prevBtnPress)> = debounceTime) برای خروج از صدا استفاده می شود. نحوه نوشتن آن به این معنی است که من اولین دکمه را با متغیر boolean btnPressed ثبت می کنم و زمان وقوع آن را به خاطر می آورم. تا زمانی که منتظر بمانم (debounceTime) و اگر دکمه هنوز فشار داده شود ، واکنش نشان می دهم. همچنین بین هر فشار دیگر دکمه "مکث" می کند ، بنابراین از فشارهای متعدد در جایی که هیچ دکمه ای وجود ندارد جلوگیری می کند.

و در نهایت ، با:

if ((millis () - prevTrigger) / 1000> = interval.getVal ()) {

prevTrigger = millis ()؛ ماشه()؛ }

ما ابتدا بررسی می کنیم که آیا زمان بین آخرین راه اندازی (prevTrigger) و زمان فعلی (millis ()) (همه چیز بر 1000 تقسیم می شود زیرا در میلی ثانیه است و فاصله در ثانیه است) برابر یا بیشتر از فاصله است ما می خواهیم ، و اگر باشد زمان فعلی را به عنوان آخرین باری که دوربین را فعال کردیم و سپس آن را فعال می کنیم به خاطر می آوریم.

با انجام این کار ، ما اساساً یک فاصله سنج ایجاد کردیم ، اما هنوز تمام نشده است. ما هنوز مقدار فاصله سنج را نمی بینیم. این فقط در مانیتور سریال نمایش داده می شود و ما همیشه نزدیک کامپیوتر نیستیم بنابراین اکنون چیزی را اجرا می کنیم که فاصله را با تغییر آن به ما نشان می دهد.

مرحله 7: نمایش فاصله زمانی

Image
Image
نمایش فاصله زمانی
نمایش فاصله زمانی
نمایش فاصله زمانی
نمایش فاصله زمانی
نمایش فاصله زمانی
نمایش فاصله زمانی

اینجاست که ما صفحه نمایش را معرفی می کنیم. من از ماژول 4 رقمی که توسط TM1637 هدایت می شود استفاده کردم زیرا باید فقط برای نمایش زمان و هیچ چیز دیگر از آن استفاده کنم. ساده ترین راه برای استفاده از این ماژول های ساخته شده برای Arduino استفاده از کتابخانه های ساخته شده برای آنها است. در سایت آردوینو صفحه ای وجود دارد که تراشه TM1673 را شرح می دهد و پیوندی به کتابخانه پیشنهادی وجود دارد. من این کتابخانه را بارگیری کردم و به دو روش می توانید این کتابخانه ها را به Arduino IDE معرفی کنید:

  1. از نرم افزار آردوینو به Sketch> Include Library> کتابخانه. ZIP اضافه کنید و فایل.zip را که بارگیری کرده اید پیدا کنید
  2. شما می توانید کارهایی که Arduino انجام می دهد را به صورت دستی انجام دهید و فقط کتابخانه را در پوشه ای که Arduino کتابخانه ها را در آن ذخیره می کند ، از حالت فشرده خارج کنید:

پس از وارد کردن کتابخانه ، باید فایل "ReadMe" را بخوانید که در آن خلاصه ای از عملکردهای مختلف را خواهید یافت. گاهی اوقات این کافی نیست ، بنابراین شما می خواهید کمی عمیق تر شده و فایل های سرصفحه را کاوش کنید که در آنها می توانید نحوه پیاده سازی توابع و نیاز آنها به عنوان آرگومان های ورودی را مشاهده کنید. و البته بهترین راه برای درک اینکه یک کتابخانه قادر به انجام آن است معمولاً نمونه ای را ارائه می دهد که می توانید از طریق نرم افزار Arduino از طریق File> Examples> LibraryName> NameName آن را اجرا کنید. این کتابخانه یک مثال ارائه می دهد که توصیه می کنم فقط روی صفحه نمایش خود اجرا کنید تا ببینید آیا صفحه نمایش شما به درستی کار می کند یا نه ، اما من شما را تشویق می کنم که کدی را که در مثال می بینید تغییر دهید و خودتان ببینید که هر تابع چه کار می کند و صفحه نمایش چگونه واکنش نشان می دهد. آی تی. من این کار را کردم و این چیزی است که من فهمیدم:

از 4 عدد صحیح بدون علامت از 8 بیت برای هر رقم (0bB7 ، B6 ، B5 ، B4 ، B3 ، B2 ، B1 ، B0) استفاده می کند. و هر یک از آن بیت B6-B0 برای هر بخش از یک رقم خاص استفاده می شود و اگر بیت 1 باشد ، بخش کنترل شده توسط آن روشن می شود. این اعداد صحیح در آرایه ای به نام data ذخیره می شوند. تنظیم این بیت ها بر روی صفحه نمایش توسط display.setSegments (داده) انجام می شود. یا می توانید به طور طبیعی به هر یک از ارقام دسترسی داشته باشید و آنها را به صورت دستی تنظیم کنید (داده [0] = 0b01111001) یا می توانید از تابع encodeDigit (int) استفاده کنید. و رقمی را که ارسال می کنید به بیت تبدیل کنید (داده [0] = display.encodeDigit (3)). بیت B7 فقط توسط رقم دوم یا داده [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 ())؛ data [3] = display.encodeDigit (interval.getS0 ())؛ display.setSegments (داده) ؛ }

در حال حاضر ، هر زمان که نیاز به نمایش فاصله روی صفحه دارم ، می توانم تابع () displayInterval را فراخوانی کنم.

*به "0x80 | …" در داده ها [1] توجه کنید. برای اطمینان از اینکه بیت B7 داده [1] همیشه 1 است ، بنابراین روده بزرگ روشن می شود ، استفاده می شود.

آخرین مورد در مورد صفحه نمایش ، مصرف برق. ممکن است از اهمیت زیادی برخوردار نباشد ، زیرا ما نمی خواهیم آن را برای مدت طولانی روشن نگه داریم ، اما اگر شما علاقه مند هستید که این باتری را بیشتر دوستانه کنید ، روشنایی صفحه را کاهش دهید زیرا 3 برابر بیشتر از حداکثر روشنایی جریان می گیرد. نسبت به پایین ترین

مرحله 8: همه چیز را با هم ترکیب کنید

همه اش را بگذار کنار هم
همه اش را بگذار کنار هم

ما می دانیم که چگونه دوربین را فعال کنیم ، چگونه فاصله را تغییر دهیم و چگونه این فاصله را روی صفحه نمایش دهیم. اکنون ما فقط باید همه این موارد را با هم ادغام کنیم. البته ما از تابع حلقه () شروع می کنیم. ما دائماً فشار دکمه ها را بررسی می کنیم و با checkButtons (int، int) واکنش نشان می دهیم و فاصله را مطابق آن تغییر می دهیم و فاصله تغییر یافته را نمایش می دهیم. همچنین در حلقه () دائماً بررسی می کنیم که آیا زمان کافی از آخرین راه اندازی یا دکمه را فشار داده و در صورت نیاز تابع () را فراخوانی کنید. به دلیل مصرف برق کمتر ، بعد از مدتی صفحه نمایش را خاموش می کنیم.

من یک چراغ دو رنگ (قرمز و سبز ، کاتد معمولی) اضافه کردم که در حالی که ماشه () سبز سبز می شود و اگر فوکوس روشن باشد همراه با صفحه نمایش قرمز روشن می شود و در صورت تمرکز خاموش می ماند. خاموش

همچنین ، ما به آردوینو کوچکتر ، Pro Mini مهاجرت می کنیم.

مرحله 9: اضافه کردن آخرین مورد

اضافه کردن آخرین مورد
اضافه کردن آخرین مورد
اضافه کردن آخرین مورد
اضافه کردن آخرین مورد
اضافه کردن آخرین مورد
اضافه کردن آخرین مورد

تا کنون.. ما فقط یک Intervalometer ایجاد کرده ایم. مفید است ، اما می توانیم بهتر عمل کنیم.

این چیزی است که من در ذهن داشتم: اینتروالومتر به طور پیش فرض کار می کند مگر زمانی که نوعی سوئیچ/سنسور خارجی را وصل کنیم که سپس فاصله سنج را متوقف کرده و به ورودی سوئیچ/سنسور پاسخ می دهد. بگذارید آن را سنسور بنامیم ، لزوماً سنسوری نیست که متصل باشد ، اما من آن را به این صورت معرفی می کنم.

اولاً ، چگونه تشخیص دهیم که سنسور را وصل کرده ایم؟

سنسورهایی که ما استفاده می کنیم/می سازیم همگی به سه سیم نیاز دارند که آنها را به آردوینو وصل کند (Vcc ، GND ، Signal). این بدان معناست که ما می توانیم از جک 3.5 میلی متری صدا به عنوان جک ورودی سنسور استفاده کنیم. و چگونه مشکل ما را حل می کند؟ خوب ، انواع جک 3.5 میلی متری "با سوئیچ" وجود دارد که دارای پین هایی است که در صورت عدم وجود اتصال دهنده نر در پین های اتصال کوتاه می شوند و در صورت وجود اتصال دهنده جدا می شوند. این بدان معناست که ما اطلاعات را بر اساس وجود سنسور در اختیار داریم. من از مقاومت کششی مطابق شکل استفاده می کنم (پین دیجیتال بدون سنسور HIGH و با سنسور متصل پایین LOW خوانده می شود) در تصویر یا شما همچنین می توانید به پین دیجیتال به پین کانکتور متصل کنید که معمولاً به زمین متصل شده و آن پین دیجیتالی را INPUT_PULLUP تعریف کنید ، در هر صورت کار می کند. بنابراین در حال حاضر ما باید کد خود را تغییر دهیم تا همه مواردی را که تا کنون نوشته ایم انجام دهد ، تنها در صورت عدم وجود سنسور ، یا هنگام بررسی پین دیجیتال که HIGH است. من همچنین آن را تغییر دادم تا به جای فاصله زمانی که در این حالت بی فایده است ، "SENS" را روی صفحه نمایش نشان دهد ، اما فوکوس همچنان برای ما مهم است ، ما عملکرد متغیر فوکوس را با فشار دادن هر دو دکمه و حالت فوکوس را از طریق led قرمز نشان می دهد.

سنسور در واقع چه می کند؟

تنها کاری که باید انجام دهد این است که وقتی می خواهیم دوربین را روشن کنیم 5 ولت را روی پین سیگنال قرار دهیم. این بدان معناست که ما به پین دیجیتالی دیگری از آردوینو احتیاج داریم که وضعیت این پین را بررسی کند و هنگامی که HIGH را ثبت می کند ، تنها کاری که باید انجام دهد این است که تابع trigger () را فراخوانی کند و دوربین یک عکس بگیرد. ساده ترین مثال ، و نمونه ای که برای آزمایش این کار از آن استفاده می کنیم ، یک دکمه ساده با مقاومت کششی است. دکمه بین Vcc سنسور و پین سیگنال را وصل کنید و یک مقاومت بین پین سیگنال و GND اضافه کنید ، به این ترتیب هنگامی که دکمه فشار داده نمی شود ، زیرا سیگنال در مقاومت فشار نمی یابد ، و هنگامی که پین سیگنال روی GND قرار می گیرد. دکمه فشرده می شود و ما پین سیگنال را مستقیماً روی HIGH قرار می دهیم و آردوینو آن را می خواند و دوربین را فعال می کند.

با این کار ما نوشتن کد را به پایان رساندیم.

*می خواهم به برخی از مشکلات مربوط به جک های صوتی مورد استفاده خود اشاره کنم. هنگام قرار دادن جک نر به کانکتور ، GND و یکی از دو پین دیگر گاهی کوتاه می شود. این بلافاصله و فقط هنگام قرار دادن کانکتور اتفاق می افتد ، اما هنوز به اندازه کافی طولانی است تا آردوینو یک کوتاه را ثبت کند تا آردوینو فقط راه اندازی مجدد شود. این اغلب اتفاق نمی افتد اما همچنان می تواند خطرناک باشد و احتمال تخریب آردوینو وجود دارد ، بنابراین از کانکتورهایی که من استفاده کردم اجتناب کنید.

مرحله 10: شامل آشفتگی

حاوی آشفتگی
حاوی آشفتگی
حاوی آشفتگی
حاوی آشفتگی
حاوی آشفتگی
حاوی آشفتگی
حاوی آشفتگی
حاوی آشفتگی

از تصاویر می توانید بفهمید که تخته نان در حال آشفتگی است و کار ما تمام شده است بنابراین ما باید همه چیز را به یک تخته/PCB منتقل کنیم. من برای PCB رفتم زیرا فکر می کنم این موارد را بیشتر بسازم تا بتوانم به راحتی آنها را تکثیر کنم.

من از Eagle برای طراحی PCB استفاده کردم و طرح هایی را برای تمام قطعاتی که استفاده کردم پیدا کردم. یک چیز کوچک در طراحی من وجود دارد که ای کاش آن را انجام نمی دادم و آن یک پد سیم برای Vcc صفحه نمایش است. من آن را خیلی دیر دیدم و نمی خواستم آنچه را که قبلاً طراحی کرده بودم خراب کنم و راه تنبلی را برای افزودن لنت های سیم و بعداً نیاز به سیم به این اتصالات به جای آثار مسی اضافه کردم ، بنابراین توجه داشته باشید که اگر از طراحی من استفاده می کنید به

برد Arduino و صفحه نمایش به دلایل ظاهری به جای اینکه مستقیماً روی PCB لحیم شوند ، از طریق هدرهای زن به PCB متصل می شوند. به این ترتیب فضای زیادی برای سایر اجزای زیر صفحه نمایش برای اجزای دیگر مانند مقاومت ، ترانزیستورها و حتی جک صدا وجود دارد.

من دکمه های میکرو را فشار داده ام که طبق طراحی ، باید مستقیماً لحیم شوند ، اما می توانید از سوراخ های هدر زنانه استفاده کنید و اگر می خواهید دکمه ها روی محفظه نصب شوند و نه روی PCB ، آنها را با سیم وصل کنید.

ما همچنین یک جک صوتی زن دیگر برای اتصال کابل متصل به دوربین قرار می دهیم. به این ترتیب برد چند کاره تر می شود زیرا به این ترتیب می توانیم با اتصالات دیگر به دوربین های دیگر متصل شویم.

مرحله 11: Sens0rs

Image
Image
Sens0rs
Sens0rs

بیایید راههای پیاده سازی سنسور را در نظر بگیریم.

بنابراین سنسور دارای ولتاژ تغذیه 5 ولت خواهد بود و هنگامی که می خواهیم دوربین را روشن کنیم ، باید بتواند یک عدد HIGH دیجیتالی روی پین سیگنال خود ارائه دهد. اولین چیزی که به ذهنم رسید سنسور حرکت است ، به طور خاص PIR. ماژول هایی برای آردوینو به فروش می رسند که این سنسور را روی خود دارند و همان کاری را انجام می دهند که ما می خواهیم. آنها از 5 ولت تغذیه می کنند و دارای یک پین خروجی هستند که هنگام فعال شدن 5 ولت را روی آن قرار می دهند ، ما فقط باید پین های آن را به یک جک 3.5 میلی متری صدا وصل کنیم و می توانیم مستقیماً به برد متصل شویم. نکته ای که باید به آن توجه کرد این است که این سنسور برای گرم شدن و شروع به کار صحیح به زمان نیاز دارد ، بنابراین انتظار نداشته باشید که به محض وصل کردن آن به درستی کار کند ، کمی به آن زمان بدهید و سپس آن را راه اندازی کنید و هر چیزی که زنده وارد آن می شود محدوده باعث فعال شدن دوربین می شود.

از آنجا که ما در جهت تابلوهای سنسور آردوینو که قبلاً ساخته شده اند فکر می کنیم ، صدا دیگری به ذهن می رسد. این تابلوها معمولاً به گونه ای ساخته می شوند که دارای یک پین هستند که مقدار آنالوگ صدای دریافت شده را خروجی می دهد و یکی دیگر ، دیجیتالی ، که در صورت عبور صوت از سطح معینی ، یک HIGH منطقی را خروجی می دهد. ما می توانیم این سطح را طوری تنظیم کنیم که سنسور صدای ما را نادیده بگیرد اما یک کف زدن را ثبت کند. به این ترتیب ، هر زمان که دست می زنید ، دوربین را روشن می کنید.

مرحله 12: PoweeEeEer

PoweeEeEer
PoweeEeEer
PoweeEeEer
PoweeEeEer

من فکر می کنم که ساده ترین راه برای تأمین انرژی با پاوربانک است و نه از خارج. ما عملکرد شارژ تلفن یا هر چیز دیگری را حفظ کرده و جریان فعلی را از طریق سوئیچ به برد کنترل می کنیم. ما پین های اتصال USB خروجی را روی برد مدار در پاور بانک که GND و Vcc (5V) هستند و سیم های Solder مستقیماً روی آنها قرار می گیرد و از آنجا به برد ما قرار می دهیم.

مرحله 13: محوطه.. نوعی

محوطه.. نوعی
محوطه.. نوعی
محوطه.. نوعی
محوطه.. نوعی
محوطه.. نوعی
محوطه.. نوعی

من واقعا با این مشکل مبارزه کردم. وقتی جعبه ای را که می خواستم PCB موجود را داخل آن بچینم ، فهمیدم که هیچ راه خوبی برای قرار دادن همه چیز آنطور که می خواهم وجود ندارد و سپس تصمیم گرفتم یک PCB جدید طراحی کنم ، این بار با چشمان چشمی. من می خواستم PCB را درست در زیر آن طرفی قرار دهم که برای اجزای خاصی که باید دیده شوند/لمس شوند ، سوراخ می کنم. برای این که کار کنم ، باید صفحه نمایش و آردوینو را مستقیماً روی برد ، بدون سوکت یا سرصفحه بچسبانم ، و اولین مشکل اینجاست. عیب یابی کاملاً وحشتناک بود زیرا من آماده نبودم آن را لحیم کنم تا زمانی که آزمایش کنم همه چیز در حال کار است و من واقعاً نمی توانم چیزی را آزمایش کنم زیرا نمی توانم آن را لحیم کنم و غیره.. این کار را نکن مشکل numero dos ، ایجاد سوراخ روی بدنه حدس می زنم که اندازه گیری ها را اشتباه انجام دادم زیرا هیچ یک از سوراخ های بدنه با قطعات روی PCB هماهنگ نبود و مجبور شدم آنها را بزرگ کنم و دکمه ها روی PCB خیلی بلند بودند و وقتی صفحه را در جای خود قرار می دادم همیشه فشار داده می شدند. از آنجا که می خواستم جک های صوتی را در کنار آن داشته باشم ، مجبور شدم آن حفره ها را نیز بزرگ کنم تا ابتدا جک ها را جا بدهم و سپس صفحه را برای نمایشگر و دکمه ها پایین بیاورم. نتیجه وحشتناک است.

من حفره های وحشتناک را با پوشاندن قسمت بالای آن با مقوای نازک که در آن سوراخ های منطقی تری برای اجزا برش داده بودم ، کمی وحشتناک تر کردم و … هنوز هم وحشتناک است ، اما به نظر من راحت تر است.

حکم ، پیشنهاد می کنم این کار را با خرید قطعاتی که روی محفظه نصب می شوند ، انجام دهید و نه مستقیماً بر روی PCB. به این ترتیب شما آزادی بیشتری در قرار دادن اجزاء و مکان های کمتر برای اشتباه کردن در آنها خواهید داشت.

مرحله 14: پایان

Image
Image
باله
باله

من کارم تمام شده است ، اما در اینجا مواردی وجود دارد که من متفاوت انجام می دادم:

از جک های صوتی 3.5 میلی متری با کیفیت بهتر استفاده کنید. مواردی که من استفاده می کنم تمایل دارند که در هنگام قرار دادن یا بیرون کشیدن جک ، پایانه ها را کوتاه کنند که منجر به کوتاه شدن منبع تغذیه در نتیجه بازگرداندن مجدد آردوینو یا ایجاد محرک های جعلی می شود. این را در مرحله قبل گفته ام اما باز هم می گویم.. برد آردوینو را بدون سربرگ/سوکت لحیم نکنید ، فقط عیب یابی یا بارگذاری کد جدید و غیره را بسیار سخت تر می کند. من همچنین فکر می کنم داشتن یک سیگنال led که روشن است دستگاه مفید خواهد بود زیرا اغلب نمی توانم بدون فشار دادن دکمه از زمانی که صفحه نمایش خاموش است ، بگویم. و آخرین مورد ، عملکرد مکث. من تصور می کنم که مفید است ، برای مثال هنگام اتصال سنسور PIR به این دلیل که برای گرم شدن به زمان نیاز دارد ، یا فقط هنگام حرکت آن در اطراف شما نمی خواهید آن را تحریک کند تا بتوانید همه چیز را موقتاً متوقف کنید ، اما همچنین می توانید به سادگی بچرخانید خاموش دوربین بنابراین.. هرچه باشد.

نکته دیگر این است که روی سه پایه آن را Velcro کنید زیرا به احتمال زیاد در آنجا استفاده می شود.

با خیال راحت هر چیزی در مورد این پروژه در نظرات بپرسید و من خوشحال می شوم بدانم که آیا آن را ساخته اید و چگونه برای شما رقم خورده است.

توصیه شده: