آموزش آردوینوپروژه های آردوینو

ساخت دکمه شاتر بی سیم دوربین DSLR با آردوینو

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

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

شماتیک ساخت شاتر از راه دور برای دوربین DSLR در زیر نشان داده شده است.

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

شماتیک ساده است و به دو بخش nRF24L01 با Arduino به عنوان گیرنده و nRF24L01 با Arduino به عنوان فرستنده تقسیم میشود. در قسمت گیرنده ، دکمه در حالت LOW است بنابراین از یک مقاومت پول آپ استفاده می شود. هنگامی که دکمه فشار داده می شود ، پایه D4 تبدیل به HIGH میشود. با این کار داده ها از طریق nRF24L01 منتقل می شوند. از طرف دیگر ، گیرنده داده ها را دریافت کرده و آنها را به جک 2.5 میلی متری منتقل می کند.

برای یادگیری آردوینو (برنامه نویسی، ساخت ربات، ارتباط با اندروید) روی دوره آموزش آردوینو کلیک کنید.
برای یادگیری کامل الکترونیک روی دوره آموزش الکترونیک کلیک کنید.

شاتر دوربین بی سیم با آردوینو

قطعات مورد نیاز

از آنجا که این پروژه دارای ارتباط بی سیم است، به ماژول گیرنده و فرستنده بی سیم نیاز داریم.

  • برد Arduino UNO
  • کابل USB با آداپتور 5 ولت یا پاوربانک – 2 عدد
  • برد آردوینو نانو
  • NRF24L01 – 2 عدد
  • جک 2.5 میلی متری
  • مبدل 5 ولت (اگر از باتری لیتیوم 7.4 ولت استفاده می کنید)
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

نحوه اتصال شاتر بی سیم آردوینو به دوربین

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

نحوه اتصال شاتر بی سیم آردوینو به دوربین

اتصال این پین را می توانید در تصویری که در زیر آورده شده مشاهده کنید.

اتصال جک هدفون به دوربین DSLR

نوک جک با استفاده از مقاومت پول آپ در سطح 3.3 ولت است. وقتی آردوینو نانو داده ای را از طریق nRF24L01 دریافت کند، نوک جک را به سطح 0 ولت (LOW) میرساند.

از طرف دیگر ، یک مقاومت پول آپ وجود دارد که در کنار Arduino UNO استفاده می شود. هر زمان که سوئیچ فشار داده شود ، پین ورودی محل اتصال سوئیچ LOW می شود. Arduino این داده ها را از طریق nRF24L01 به فرستنده منتقل می کند. در زیر شماتیک پین های NRF24L01 آورده شده است.

شماتیک پین های NRF24L01

می توان این ماژول را به عنوان گیرنده یا فرستنده پیکربندی کرد. این یک ماژول RF بسیار ارزان است که از دامنه 2.4 گیگاهرتز استفاده می کند.

کد آردوینو برای شاتر دوربین بیسیم

برای این پروژه دو کد مختلف استفاده شده است ، یکی برای فرستنده و دیگری برای گیرنده.

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

کد برای فرستنده:

کتابخانه ها ابتدا فراخوانی شده اند.

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include "printf.h"
#include <ArduinoJson.h>

آدرس تنظیم میشود که این باید برای فرستنده و گیرنده یکسان باشد.

const byte address[6] = {0xe1, 0xe1, 0xe1, 0xe1, 0xe1};

Boolean ایجاد می شود که در آن حالت تریگر از true به false یا برعکس تغییر می یابد.

volatile bool isTrigger = false;

مرحله بعدی شروع کار NRF24L01 قبل از اجرای برنامه واقعی است. در اینجا دامنه ، نوع داده و حالت تنظیم شده است. nRF24L01 به عنوان یک فرستنده تنظیم شده است ، و همچنین برای مسافت طولانی با حداکثر توان RF تنظیم شده است. همچنین آدرسی را که قبلاً تنظیم شده را باید قرار دهید.

void setup()
{
  Serial.begin(9600);
  printf_begin();
  Serial.println(F("\n\rRF24/examples/scanner/"));
  // پیکربندی ماژول رادیویی
  radio.begin();
  radio.setAutoAck(false);
  //تنظیم آدرس
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN); //set as: RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate(RF24_2MBPS); //set as: F24_250KBPS, F24_1MBPS, F24_2MBPS ==>250KBPS = طولانی
  radio.setChannel(115); //تنظیم کانال
  radio.setCRCLength(RF24_CRC_8);
  //  radio.printDetails();
  //پیکربندی به عنوان فرستنده
  radio.stopListening();

پس از تنظیم فرستنده nRF24L01 ، نوبت به تنظیم ورودی دکمه ای می رسد که توسط کاربر فشار داده می شود. پین به عنوان ورودی تنظیم شده است.

  pinMode(SHUTT_REMOTE_TRIGGER_PIN, INPUT);   // تنظیم پین دکمه به عنوان ورودی
  //  attachInterrupt(digitalPinToInterrupt(SHUTT_REMOTE_TRIGGER_PIN), shutter_remote_trigger, LOW);
  //  attachInterrupt(digitalPinToInterrupt(SHUTT_REMOTE_TRIGGER_PIN), shutter_remote_trigger, HIGH  );
}
void shutter_remote_trigger() {
  isTrigger = true;
}
// متغیر ها تغییر میکنند
int ledState = HIGH; // وضعیت فعلی پین
int buttonState;   // وضعیت دکمه
int lastButtonState = LOW;   // آخرین وضعیت دکمه
unsigned long lastDebounceTime = 0; // آخرین باری که وضعیت تغییر کرده
unsigned long debounceDelay = 50; // تنظیم دیبانس برای نویز دکمه

در void loop، حالت دکمه به طور مداوم کنترل می شود و هر زمان که فشار داده شود ، یک JSON برای گیرنده ارسال می شود.

void loop()
{
 // خواندن وضعیت دکمه
  int reading = digitalRead(SHUTT_REMOTE_TRIGGER_PIN);
   if (reading != lastButtonState) {
                lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
                // کد های مربوط به دیبانس دکمه
                if (reading != buttonState) {
                buttonState = reading;
                if (buttonState == LOW) {
                isTrigger = true;
                }
                }
  }
  lastButtonState = reading;
  if (true == isTrigger) {
                StaticJsonDocument<50> doc;
                doc[SHUTT_TRIGGER_JSON_KEY] = SHUTT_TRIGGER_ACTIVE;
                //ارسال پیام به گیرنده
                char send_dt[32] = {0};
                String output;
                //serializeJson(doc, Serial);
                serializeJson(doc, send_dt);
                Serial.println(send_dt);
                radio.write(&send_dt, sizeof(send_dt));
                isTrigger = false;
  }
  delay(10);
}

کد برای گیرنده:

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

کتابخانه ها ابتدا فراخوانی شده اند.

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include "printf.h"
#include <ArduinoJson.h>

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

const byte address[6] = {0xe1, 0xe1, 0xe1, 0xe1, 0xe1};

مرحله بعدی شروع کار nRF24L01 قبل از اجرای برنامه واقعی است. در اینجا ، محدوده ، نوع داده و حالت نیز همانند قسمت فرستنده تنظیم شده اند ، اما در اینجا به عنوان یک گیرنده به جای فرستنده تنظیم شده است.

همچنین آدرسی را که قبلاً تنظیم شده بود قرار می دهد.

void setup()
{
  Serial.begin(9600);
  printf_begin();
  //Serial.println(F("\n\rRF24/examples/scanner/"));
  // پیکربندی ماژول رادیویی
  radio.begin();
  radio.setAutoAck(false);
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN); //set as: RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate(RF24_2MBPS); //set as: F24_250KBPS, F24_1MBPS, F24_2MBPS ==>250KBPS = مسافت طولانی
  radio.setChannel(115); //تنظیم کانال
  radio.setCRCLength(RF24_CRC_8);
  // تنظیم به عنوان گیرنده
  radio.startListening();

پس از تنظیم گیرنده nRF24L01 ، وقت آن است که در صورت دریافت JSON که اطلاعات دکمه فشرده شده را دارد ، پین شاتر را روی LOW تنظیم کنید.

void loop()
{
  digitalWrite(SHUTT_TRIGGER_PIN, HIGH);
  //خواندن داده اگر در بافر موجود است
  if (radio.available())
  {
                StaticJsonDocument<50> doc;
                char recv_dt[32] = {0};
                radio.read(&recv_dt, sizeof(recv_dt));
                Serial.println(recv_dt);
                // حذف json
                DeserializationError error = deserializeJson(doc, recv_dt);
                if (error) {
                Serial.print(F("deserializeJson() failed: "));
                Serial.println(error.f_str());
                //بازگشت;
                } else {
                char s_trig_stat = doc[SHUTT_TRIGGER_JSON_KEY];
                if (SHUTT_TRIGGER_ACTIVE == s_trig_stat) {
                Serial.println("Set Shutter pin Low");
                digitalWrite(SHUTT_TRIGGER_PIN, LOW); // LOW کردن پین دیجیتال
                digitalWrite(LED_BUILTIN, HIGH);
                delay(250);  // 250 میلی ثانیه صبر
                }
                }
                digitalWrite(LED_BUILTIN, LOW);
  }
}

موارد موجود در فایل : سورس کامل

دانلود فایل های پروژه

برای مشاهده توضیحات روی دوره مورد نظر کلیک کنید.

برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام آیرنکس عضو شوید.

تصویر از محمد رحیمی

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید) سعی میکنم تمام نظرات را پاسخ دهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *