فهرست مطالب:
- مرحله 1: اجزای مورد نیاز
- مرحله 2: راه اندازی سخت افزار
- مرحله 3: کد آردوینو
- مرحله 4: کد برنامه کامپیوتر (C#.NET)
تصویری: کنترل از راه دور Youtube Arduino برای خواب (Leobot Electronics): 4 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:54
ریموت یوتیوب آردوینو
اگر از 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)
برنامه از طریق پورت 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؛
}
}
توصیه شده:
ESP8266 - سوکت کنترل از راه دور و از راه دور (امنیت سالمندان): 6 مرحله
ESP8266 - سوکت کنترل از راه دور و از راه دور (امنیت سالمندان): اطلاعات: این مونتاژ در صورت فراموشی وسایل وصل شده (عمدتا توسط افراد مسن مبتلا به آلزایمر) به منظور جلوگیری از گرم شدن بیش از حد ، آتش سوزی و حوادث است. پس از فعال شدن دکمه ، سوکت 110/220 VAC را به مدت 5 دقیقه دریافت می کند (دیگری
کنترل از راه دور جهانی از راه دور با Node-MCU: 12 مرحله
کنترل از راه دور جهانی با Node-MCU: سلام به همه و به این پروژه خوش آمدید! من یک شخص تنبل هستم و کابوس یک تنبل این است که وقتی متوجه می شوید که راه دور خیلی دور است ، تلویزیون تماشا کنید! متوجه شدم که اگر ریموتم را در دست داشته باشم هرگز خیلی دور نخواهد بود
IRduino: کنترل از راه دور Arduino - تقلید از راه دور از دست رفته: 6 مرحله
IRduino: کنترل از راه دور Arduino - تقلید از راه دور گمشده: اگر تا به حال کنترل از راه دور تلویزیون یا دستگاه پخش DVD خود را گم کرده اید ، می دانید که مجبور هستید به دکمه های خود دستگاه بروید ، از آن استفاده کنید و از آن استفاده کنید. گاهی اوقات ، این دکمه ها عملکرد مشابهی با ریموت ندارند. دریافت
ESP8266 RGB LED STRIP WIFI کنترل - NODEMCU به عنوان یک کنترل از راه دور IR برای نوار LED کنترل شده بر روی Wifi - کنترل تلفن هوشمند RGB LED STRIP: 4 مرحله
ESP8266 RGB LED STRIP WIFI کنترل | NODEMCU به عنوان یک کنترل از راه دور IR برای نوار LED کنترل شده بر روی Wifi | RGB LED STRIP Smartphone Control: سلام بچه ها در این آموزش می آموزیم که چگونه از nodemcu یا esp8266 به عنوان ریموت IR برای کنترل نوار LED RGB استفاده کنید و Nodemcu توسط تلفن هوشمند از طریق وای فای کنترل می شود. بنابراین اساساً می توانید RGB LED STRIP را با تلفن هوشمند خود کنترل کنید
کنترل از راه دور سایه/کنترل از راه دور: 5 مرحله
Shadow/Remote Control Activated Leds: آیا تا به حال خواسته اید یک نور فعال شده در شب یا سایه ایجاد کنید؟ خوب .. در اینجا یک دستورالعمل وجود دارد ، اما یک مورد اضافی وجود دارد: می توانید آن را با کنترل RF از راه دور فعال کنید. این بسیار قدرتمند است ، من می توانم اتاق سوراخ خود را روشن کنم