فهرست مطالب:

کنترل از راه دور Youtube Arduino برای خواب (Leobot Electronics): 4 مرحله
کنترل از راه دور Youtube Arduino برای خواب (Leobot Electronics): 4 مرحله

تصویری: کنترل از راه دور Youtube Arduino برای خواب (Leobot Electronics): 4 مرحله

تصویری: کنترل از راه دور Youtube Arduino برای خواب (Leobot Electronics): 4 مرحله
تصویری: Radio-Controlled (RC) Arduino Robot 2024, نوامبر
Anonim
کنترل از راه دور Youtube Arduino برای خواب (Leobot Electronics)
کنترل از راه دور Youtube Arduino برای خواب (Leobot Electronics)

ریموت یوتیوب آردوینو

اگر از Youtube برای تهیه فیلم یا موسیقی برای تماشای خود در هنگام خواب استفاده می کنید ، مطمئناً هنگام شروع فیلم جدید با تبلیغات زیاد یا میزان صدای مختلف از خواب بیدار خواهید شد. نیازی به گفتن نیست ، این می تواند کاملاً آزاردهنده باشد.

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

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

در نهایت ، من یک نمودار به برنامه کامپیوتر اضافه کردم تا سطوح صوتی تشخیص داده شده را نمایش دهد.

راه حل را می توان بهتر تصحیح کرد اما برای من این کار را انجام می دهد.

مرحله 1: اجزای مورد نیاز

همه این اجزا توسط Leobot Electronics (https://leobot.net) ارائه می شود

1) آردوینو UNO R3

leobot.net/viewproduct.aspx؟id=530

2) 4 CHANNEL REMOTE (315MHZ) + MODULE گیرنده (315MHZ)

leobot.net/viewproduct.aspx؟id=521

3) MICROPHONE VOICE & SOUND DETECTION SENSOR MODULE (KY-037)

leobot.net/viewproduct.aspx؟id=217

نرم افزار

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/fa/main/software

مرحله 2: راه اندازی سخت افزار

1) ماژول گیرنده 4 کاناله را به آردوینو وصل کنید.

پین گیرنده 4 کاناله-> پین Arduino Uno

GND-> GND

5 ولت-> 5 ولت

D0-> دیجیتال 2

D1-> دیجیتال 3

D2-> دیجیتال 4

D3-> دیجیتال 5

2) ماژول میکروفون KY-037 را به آردوینو وصل کنید

میکروفون KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3 ولت

A0-> آنالوگ 3

مرحله 3: کد آردوینو

بررسی اجمالی

منطقی که آردوینو باید از آن پیروی کند به شرح زیر است:

الف) بررسی کنید گیرنده به پین ها سیگنال می دهد یا خیر.

ب) بسته به اینکه کدام پورت IO سیگنال دریافت می شود ، چه فرمانی به رایانه ارسال می شود.

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

د) همه دستوراتی که به رایانه ارسال می شوند دارای فرمت هستند که ابتدا دارای کاراکتر و سپس مقدار (در صورت نیاز به مقداری) است.

ه) پنج دستور از آردوینو به رایانه ارسال می شود

آ. "u" - افزایش صدا

ب "d" - کاهش صدا

ج "s" - از افزودن پرش کنید

د "v" - پرش از ویدئو

ه "a" - سطح صوتی تشخیص داده می شود و سپس مقدار آن مشخص می شود

کد آردوینو:

کد آردوینو را از اینجا بارگیری کنید:

int in1 = 2؛

int in2 = 3 ؛

int in3 = 4 ؛

int in4 = 5 ؛

void setup () {

Serial.begin (9600)؛

pinMode (A3 ، INPUT) ؛

pinMode (in1 ، INPUT) ؛

pinMode (in2 ، INPUT) ؛

pinMode (in3 ، INPUT) ؛

pinMode (in4 ، INPUT) ؛

}

حلقه خالی () {

if (digitalRead (in1))

{

Serial.println ("u") ؛

تأخیر (100) ؛

}

if (digitalRead (in2))

{

Serial.println ("d") ؛

تأخیر (100) ؛

}

if (digitalRead (in3))

{

Serial.println ("s")؛

تأخیر (100) ؛

}

if (digitalRead (in4))

{

Serial.println ("v") ؛

تأخیر (100) ؛

}

int readVal = analogRead (A3) ؛

Serial.println (String ("a")+ String (readVal)) ؛

تأخیر (50) ؛

}

مرحله 4: کد برنامه کامپیوتر (C#. NET)

کد برنامه کامپیوتر (C#. NET)
کد برنامه کامپیوتر (C#. NET)

برنامه از طریق پورت COM (USB) گوش می دهد و بسته به دستور دریافتی واکنش نشان می دهد. ساده ترین راه برای بالا و پایین کردن صدا در رایانه شخصی استفاده از خدمات Interrop برای صحبت مستقیم با سیستم عامل ویندوز است. ما همچنین از سرویس های Interrop برای حرکت موس در موقعیت خاصی روی صفحه و کلیک کردن استفاده می کنیم. به منظور اجازه دادن به صفحات مختلف و اندازه نمایش ، به کاربر اجازه می دهیم موقعیت دکمه های افزودن و رد شدن ویدئو را رد کند.

ما برای نمایش هرگونه دستور صوتی که دریافت می کنیم از نمودار استاندارد.net استفاده می کنیم.

کد ویندوز:

پروژه کامل را از اینجا بارگیری کنید:

leobot.net/audioadjust.zip

با استفاده از سیستم ؛

با استفاده از System. Collections. Generic؛

با استفاده از System. ComponentModel ؛

با استفاده از System. Data ؛

با استفاده از System. Drawing ؛

با استفاده از System. Linq ؛

با استفاده از System. Text ؛

با استفاده از System. Windows. Forms ؛

استفاده از System. Runtime. InteropServices ؛

با استفاده از System. IO. Ports ؛

با استفاده از System. Threading ؛

فضای نام AudioAdjust

{

کلاس نسبی عمومی Form1: Form

{

[DllImport ("User32. Dll")]

خارجی عمومی ثابت SetCursorPos (int x ، int y) ؛

[DllImport ("User32. Dll")]

bool extern عمومی عمومی ClientToScreen (IntPtr hWnd ، ref POINT point) ؛

[DllImport ("user32.dll" ، CharSet = CharSet. Auto ، CallingConvention = CallingConvention. StdCall)]

عمومی عمومی خارج از حالت خالی mouse_event (uint dwFlags ، uint dx ، uint dy ، uint cButtons ، uint dwExtraInfo) ؛

// اقدامات ماوس

const private int MOUSEEVENTF_LEFTDOWN = 0x02؛

const private int MOUSEEVENTF_LEFTUP = 0x04 ؛

const private int MOUSEEVENTF_RIGHTDOWN = 0x08؛

const private int MOUSEEVENTF_RIGHTUP = 0x10 ؛

[DllImport ("user32.dll")]

خلاء استاتیک خارجی keybd_event (بایت bVk ، بایت bScan ، uint dwFlags ، int dwExtraInfo) ؛

تصادفی aRand = جدید تصادفی ()؛

public int LastLevel = 0؛

public int MaxLevel = 255؛

SerialPort استاتیک _serialPort؛

int adX = 1281؛

int adY = 706؛

int vidX = 250؛

int vidY = 780؛

bool enableAudioChange = false؛

فرم عمومی 1 ()

{

InitializeComponent ()؛

}

خلأ خصوصی Form1_Load (فرستنده شیء ، EventArgs e)

{

string names = System. IO. Ports. SerialPort. GetPortNames ()؛

comboBoxPort. Items. AddRange (نام) ؛

comboBoxPort. SelectedIndex = 0؛

}

int currentPoint = 0؛

دکمه void private1_Click (فرستنده شیء ، EventArgs e)

{

_serialPort = جدید SerialPort ()؛

_serialPort. DataReceived += جدید SerialDataReceivedEventHandler (_serialPort_DataReceived) ؛

_serialPort. PortName = comboBoxPort. SelectedItem. ToString () ؛ // COM برد خود را تنظیم کنید

_serialPort. BaudRate = 9600 ؛

if (_serialPort. IsOpen) _serialPort. Close ()؛

دیگری

{

_serialPort. Open ()؛

}

// keybd_event ((بایت) Keys. VolumeDown ، 0 ، 0 ، 0) ؛ // کاهش حجم

}

void _serialPort_DataReceived (فرستنده شیء ، SerialDataReceivedEventArgs e)

{

تلاش كردن

{

string fullval = _serialPort. ReadLine ()؛

string com = fullval [0]. ToString ()؛

سوئیچ (com)

{

مورد "a":

{

{

// سطح صدا

string val = fullval. Replace ("a"، "")؛

int valInt = int. تجزیه (val) ؛

AddData (valInt) ؛

}

زنگ تفريح؛

}

مورد "u":

{

// صوت بالا

keybd_event ((بایت) Keys. VolumeUp ، 0 ، 0 ، 0) ؛ // کاهش حجم

زنگ تفريح؛

}

مورد "د":

{

// صدا قطع شد

keybd_event ((بایت) Keys. VolumeDown ، 0 ، 0 ، 0) ؛ // کاهش حجم

زنگ تفريح؛

}

مورد "s":

{

// skipAd

MoveCursorSkipAd ()؛

موضوع خواب (10) ؛

DoMouseClick () ؛

زنگ تفريح؛

}

مورد "v":

{

// skipAd

MoveCursorSkipVideo ()؛

موضوع خواب (10) ؛

DoMouseClick () ؛

زنگ تفريح؛

}

}

}

گرفتن

{

}

// پرتاب NotImplementedException جدید ()؛

}

خلأ خصوصی MoveCursorSkipAd ()

{

مکان نما. موقعیت = نقطه جدید (1140 ، 725) ؛

Cursor. Position = نقطه جدید (adX ، adY) ؛

}

خلاء خصوصی MoveCursorSkipVideo ()

{

مکان نما. موقعیت = نقطه جدید (1140 ، 725) ؛

Cursor. Position = نقطه جدید (vidX ، vidY) ؛

}

public void DoMouseClick ()

{

// تابع وارد شده را با موقعیت کنونی مکان نما فراخوانی کنید

uint X = (uint) Cursor. Position. X؛

uint Y = (uint) Cursor. Position. Y؛

mouse_event (MOUSEEVENTF_LEFTDOWN ، X ، Y ، 0 ، 0) ؛

mouse_event (MOUSEEVENTF_LEFTUP ، X ، Y ، 0 ، 0) ؛

}

void AddData (سطح int)

{

if (enableAudioChange)

{

if (سطح> = MaxLevel)

{

keybd_event ((بایت) Keys. VolumeDown ، 0 ، 0 ، 0) ؛ // کاهش حجم

keybd_event ((بایت) Keys. VolumeDown ، 0 ، 0 ، 0) ؛ // کاهش حجم

keybd_event ((بایت) Keys. VolumeDown ، 0 ، 0 ، 0) ؛ // کاهش حجم

}

دیگری

{

if (سطح <MaxLevel - 0)

{

keybd_event ((بایت) Keys. VolumeUp ، 0 ، 0 ، 0) ؛ // کاهش حجم

}

}

}

SetChart (سطح) ؛

currentPoint ++ ؛

}

delegate void SetTextCallback (int val) ؛

خلأ خصوصی SetChart (int val)

{

// InvokeRequired مورد نیاز است شناسه نخ را مقایسه می کند

// فراخوانی موضوع به شناسه نخ موضوع ایجاد کننده.

// اگر این نخ ها متفاوت باشند ، true برمی گردد.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = SetTextCallback جدید (SetChart) ؛

this. Invoke (d، new object {val})؛

}

دیگری

{

نمودار 1. سری ها [0]. Points. AddXY (0 ، val) ؛

if (currentPoint> = 10)

{

نمودار 1. سری [0]. Points. RemoveAt (0) ؛

}

}

}

خلأ خصوصی textBoxLevel_TextChanged (فرستنده شیء ، EventArgs e)

{

تلاش كردن

{

MaxLevel = int. Parse (textBoxLevel. Text) ؛

}

گرفتن

{

textBoxLevel. Text = MaxLevel + ""؛

}

}

private void buttonTestSkip_Click (فرستنده شیء ، EventArgs e)

{

MoveCursorSkipAd ()؛

موضوع خواب (10) ؛

DoMouseClick () ؛

}

خلأ خصوصی textBoxXpos_TextChanged (فرستنده شیء ، EventArgs e)

{

تلاش كردن

{

adX = int. Parse (textBoxXpos. Text) ؛

}

گرفتن

{

textBoxXpos. Text = adX + ""؛

}

}

خلأ خصوصی textBoxYpos_TextChanged (فرستنده شیء ، EventArgs e)

{

تلاش كردن

{

adY = int. Parse (textBoxYpos. Text) ؛

}

گرفتن

{

textBoxYpos. Text = adY + ""؛

}

}

دکمه خلأ خصوصی SkipVideo_Click (فرستنده شیء ، EventArgs e)

{

MoveCursorSkipVideo ()؛

موضوع خواب (10) ؛

DoMouseClick () ؛

}

خلأ خصوصی textBoxXposVid_TextChanged (فرستنده شیء ، EventArgs e)

{

تلاش كردن

{

vidX = int. Parse (textBoxXposVid. Text) ؛

}

گرفتن

{

textBoxXposVid. Text = vidX + ""؛

}

}

خلأ خصوصی textBoxYposVid_TextChanged (فرستنده شیء ، EventArgs e)

{

تلاش كردن

{

vidY = int. Parse (textBoxYposVid. Text) ؛

}

گرفتن

{

textBoxYposVid. Text = vidY + ""؛

}

}

خصوصی void checkBoxEnable_CheckedChanged (فرستنده شیء ، EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked؛

}

}

[StructLayout (LayoutKind. Sequential)]

ساختار عمومی POINT

{

public int x؛

عمومی int y؛

}

}

توصیه شده: