روز پیش می خواستم با تریگرهای خارجی دوربین Canon EOS 550D خود را آزمایش کنم. من به طور تصادفی به یک پروژه منبع باز خوب به نام Arduino Camera Control از Oleg Mazurov، خالق کتابخانه USB Host Shield برای آردوینو، برخوردم.
پروژه کنترل دوربین آردوینو به کتابخانه USB Host Shield و USB Host Shield از Sparkfun بستگی دارد. این دوربین از Canon EOS و Powershot و همچنین دوربین های Nikon DSLR و P&S پشتیبانی می کند. هدف اصلی من ارسال دستورات به دوربین برای گرفتن تصاویر بود. کتابخانه خیلی بیشتر از این کار می کند، اما اگر اطلاعات دقیق تری در مورد کتابخانه می خواهید، باید مقاله اصلی را در Circuits@Home بخوانید .
در این پست می خواهم به شما نشان دهم که چگونه از یک ماژول مادون قرمز غیرفعال برای فعال کردن دوربین برای گرفتن عکس استفاده کنید. ابتدا لیستی از چیزهایی که برای این پروژه نیاز دارید.
هیئت مدیره ePIR- آردوینو اونو
- Sparkfun USB Host Shield
- تخته نان
- سیم ها
- دوربین Canon EOS
حالا بیایید تمام قطعات را مانند شکل شماتیک فریتزینگ به هم وصل کنیم.
قبل از اینکه بتوانید طرح این پروژه را آپلود کنید، باید چند کتابخانه را در Arduino IDE خود نصب کنید.
اکنون بسته به USB Host Shield که استفاده می کنید، دو نوع کتابخانه وجود دارد که می توانید نصب کنید. اگر از Sparkfun USB Host Shield استفاده می کنید، باید دو کتابخانه زیر را در پوشه کتابخانه های آردوینو ( ..\arduino-0022\libraries\) نصب کنید.
اگر از USB Host Shield 2.0 از Circuits@Home استفاده میکنید ، لطفاً نسخههای پورت شده کتابخانههای موجود در اینجا را نصب کنید.
اکنون پس از نصب کتابخانه ها می توانید اسکچ آردوینو زیر را در یک پنجره اسکچ جدید کپی کرده و آن را روی برد آپلود کنید.
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
#include <ptp.h>
#include <canoneos.h>
#include <MemoryFree.h>
#define DEV_ADDR 1
// Canon EOS 400D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
//PIR definitions and declarations
#define SLEEP_MODE_PIN 4
#define MOTION_DETECT_PIN 2
int val;
class CamStateHandlers : public PTPStateHandlers
{
bool stateConnected;
public:
CamStateHandlers() : stateConnected(false) {};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
} CamStates;
CanonEOS Eos(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected)
{
stateConnected = false;
Notify(PSTR("Camera disconnected\r\n"));
}
}
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (!stateConnected)
stateConnected = true;
uint16_t rc = Eos.Capture();
if (rc != PTP_RC_OK)
Message(PSTR("Error: "), rc);
delay(1000);
}
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
Eos.Setup();
delay( 200 );
//PIR related
digitalWrite(SLEEP_MODE_PIN, HIGH);
}
void loop()
{
val = digitalRead(MOTION_DETECT_PIN);
//the ePIR sensor is active low so if motion is detected the output is low
if(val == LOW) {
Eos.Task();}}
این طرح در اصل فقط یک نسخه توسعه یافته از مثال EOSCapture از کتابخانه Arduino Camera Control است. کاری که انجام می دهد این است که سنسور PIR را برای تغییرات نظرسنجی می کند. سنسور PIR مورد استفاده در اینجا کم فعال است، بنابراین اگر سنسور PIR فعال شود، سیگنال روی پین تشخیص حرکت کم می شود، به این معنی که ولتاژ روی پایه به سمت 0 ولت کاهش می یابد. در این صورت، تابع Eos.Task() فراخوانی می شود که سیگنال کنترلی را به دوربین می فرستد و به آن دستور می دهد عکس بگیرد. تمام چیزی که وجود دارد همین است.
اکنون طرح را روی برد آردوینو آپلود کنید و دوربین Canon EOS خود را به USB Host Shield متصل کنید. دوربین را روشن کنید و سعی کنید با تکان دادن دست خود در مقابل حسگر، عکسی را فعال کنید. اگر دوربین به درستی توسط USB Host Shield شناسایی نشد، سعی کنید حالت M را در دوربین انتخاب کنید یا دکمه عکسبرداری را روی دوربین فشار دهید. هیئت مدیره باید قبل از ارسال تراکنش های فرمان، یک جلسه با دوربین برقرار کند. اگر برد شما هنوز به رایانه شما متصل است، مانیتور سریال را در Arduino IDE باز کنید تا ببینید آیا جلسه باز شده است یا خیر.
برای جزئیات بیشتر: Arduino Passive IR trigger برای Canon EOS
در ادامه، متن انگلیسی این مطلب را میتوانید مشاهده نمایید:
The other day I wanted to experiment with external triggers for my Canon EOS 550D camera. I stumpled upon a nice open source project called Arduino Camera Control from Oleg Mazurov, the creator of the USB Host Shield library for Arduino.
The Arduino Camera Control project depends on the USB Host Shield library and the USB Host Shield from Sparkfun. It supports Canon EOS and Powershot, as well as Nikon DSLRs and P&S cameras. My main objective was sending commands to the camera for capturing images. The library does much more than that but if you want more detailed information about the library, you should read the original article on Circuits@Home.