سوییچ

سوییچ خود را حساس به صدا کنید

در این مقاله ما یک سوییچ حساس به صدا میسازیم تا با دست زدن روشن و خاموش شود.

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

 

سوییچ

فن متصل به مدار

وسایل مورد نیاز برای ساخت سوییچ حساس به صدا

  • یک لانچ پد اورجینال
  • یک میکروفن الکتریکی
  • دو ترانزیستور ۲N3904 NPN BJT
  • یک رله سیم پیچ SPDT 12V
  • یک مقاومت ۱۰۰R 1/4W
  • یک مقاومت ۳۳۰R 1/4W
  • دو مقاومت ۱K 1/4W
  • دو مقاومت ۱۰K 1/4W
  • یک مقاومت ۱۰۰K 1/4W
  • دو خازن ۱۰۰nF
  • یک دیود ۱N4007
  • ال ای دی سبز ۵ میلی متری
  • ال ای دی زرد ۵ میلی متری
  • یک سوییچ SPST Tact
  • سیم های جامپر
  • تخته ی نان

مدار سوییچ حساس به صدا

 

سوییچ

مدار

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

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

void setup()

{Serial.begin(9600);

} void loop()

{  int sensorValue = analogRead(A0);

// print out the value you read:

Serial.println(sensorValue);}

در مانیتور سریال Energia IDE، ما میتوانیم اطلاعات را بخوانیم و گرافی در اکسل بکشیم. در شکل زیر شما سیگنال های صوتی هنگام دست زدن را میبینید:

 

سوییچ

 

سیگنال های صوتی

 

می بینید که افست DC سیگنال صوتی در حدود ۲۶۰ واحد است. قله های ایجاد شده به هنگام دست زدن می توانند تا ۵۰۰ واحد جابجا شوند. هدف اصلی کد لانچ پد بررسی این قله ها و فعال کردن رله ی موجود در مدار سوییچ، در هنگام شنیدن صدای دست زدن است.

 

سوییچ

فعال کردن رله

 

البته که حس کردن صدای دست زدن برای شروع به کار این سوییچ کافی نیست. فاصله ی میان دو بار دست زدن هم بسیار مهم است. برای این سوییچ زمانبدی تعریف شده و اگر فاصله ی میان دست زدن ۵۰۰ میلی ثانیه نباشد، سوییچ واکنشی نشان نخواهد داد.

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

هنگامی که نرم افزار دست زدن را تشخیص داد، یک خروجی P1.1 را که یک چراغ سبز و رله را از طریق درایور رله هدایت می کند، به جریان می اندازد. ال ای دی سبز حالت خروجی را نشان میدهد. برای ساخت این سوییچ، یک مدار درایور رله بر پایه ی ترانزیستور Q2 مورد نیاز است، زیرا درجه ی فعلی پین خروجی لانچ پد به mA 6 محدود شده و قادر به هدایت سیم پیچ رله نیست. یک دیود ۱N4007 بین پایانه های سیم پیچ قرار می گیرد تا از EMF عقبی جلوگیری کند.

 

سوییچ

مدار سوییچ

نرم افزار

نرم افزار مورد نیاز برای این پروژه در Energia IDE تولید شده و در کد زیر آورده شده است. طرح این برنامه شامل نکاتی است تا درک کد را برای شما آسانتر کند.

unsigned long int timestamp;

int sensitivity=350;

void setup()

{

  // Set the pin modes

  pinMode(P1_1, OUTPUT);

  pinMode(P1_2, OUTPUT);

  pinMode(P1_3, INPUT_PULLUP);

  digitalWrite(P1_1, LOW);

  analogWrite(P1_2, 150);

}

void loop()

{

  // Detect the first clap sound

  if (analogRead(A0) > sensitivity) {

    delay(100);

    timestamp = millis();

    do {

      // Detect the second clap sound

      if (analogRead(A0) > sensitivity) {

        digitalWrite(P1_1, !digitalRead(P1_1));

        delay(100);

        break; // Second clap is detected, break the while loop

      }

    }

    //Discard the first clap if the second clap is not received in 500ms

    while(millis() < (timestamp + 500));

  }

  // If the sensitivity buton is pressed, change the sensitivity level

  if (!digitalRead(P1_3)) {

    if (sensitivity == 400) {

      sensitivity = 350;

      analogWrite(P1_2, 150);

    }

    else if (sensitivity == 350) {

      sensitivity = 300;

      analogWrite(P1_2, 250);

    }

    else if (sensitivity == 300) {

      sensitivity = 400;

      analogWrite(P1_2, 50);

    }

    delay(500);

  }

}

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

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