Mündəricat:

Yuxu üçün Arduino Youtube Uzaqdan İdarəetmə (Leobot Electronics): 4 addım
Yuxu üçün Arduino Youtube Uzaqdan İdarəetmə (Leobot Electronics): 4 addım

Video: Yuxu üçün Arduino Youtube Uzaqdan İdarəetmə (Leobot Electronics): 4 addım

Video: Yuxu üçün Arduino Youtube Uzaqdan İdarəetmə (Leobot Electronics): 4 addım
Video: Ən çətin məntiq testi.😉 Kim tapsa 1-ci yer. Yalnız 1 nəfər.❗❗ 2024, Noyabr
Anonim
Yuxu üçün Arduino Youtube Uzaqdan İdarəetmə (Leobot Electronics)
Yuxu üçün Arduino Youtube Uzaqdan İdarəetmə (Leobot Electronics)

Arduino Youtube Uzaqdan

Youtube -dan bir film və ya yatarkən izləmək üçün musiqi təmin etmək üçün istifadə etsəniz, yeni bir film başlayanda ya yük reklamı, ya da fərqli səs səviyyəsi ilə oyanardınız. Deməyə ehtiyac yoxdur, bu olduqca qıcıqlandırıcı ola bilər.

Beləliklə, burada özünüzə sübut etmək üçün sübut etdiyim həll yolu, Youtube ilə bir məsafədə qarşılıqlı əlaqə qurmaq üçün Arduino əsaslı uzaqdan idarəetmədir. Uzaqdan kompüterimin əsas səs səviyyəsini dəyişdirmək, Youtube -da reklamları atmaq və Youtube -da videoları atmaq lazımdır.

Ayrıca, dinamikin nə qədər yüksək olduğunu təyin etmək üçün bir səs səviyyəsi sensoru da var ki, bu da reklam kimi yüksək fasilələri aşkar etdikdə avtomatik olaraq səs səviyyəsini aşağı salmaq üçün istifadə edilə bilər.

Nəhayət, PC tətbiqində aşkar edilmiş səs səviyyələrini göstərmək üçün bir cədvəl əlavə etdim.

Həll daha yaxşı işlənə bilər, amma mənim üçün bu vəzifəni yerinə yetirir.

Addım 1: Lazım olan komponentlər

Bütün bu komponentlər Leobot Electronics tərəfindən təmin edilir (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANAL UZAKTAN (315MHZ) + Alıcı Modulu (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MİKROFON SƏSİ & SES ALGILAMA SENSÖRÜ MODÜLÜ (KY-037)

leobot.net/viewproduct.aspx?id=217

Proqram təminatı

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Addım 2: Hardware Setup

1) 4 Kanallı qəbuledici modulu Arduinoya qoşun.

4 Kanallı Alıcı Pin-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Rəqəmsal 2

D1-> Rəqəmsal 3

D2-> Rəqəmsal 4

D3-> Rəqəmsal 5

2) Mikrofon KY-037 modulunu Arduino-ya qoşun

Mikrofon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3V

A0-> Analog 3

Addım 3: Arduino Kodu

Baxış

Arduinonun təqib etməli olduğu məntiq aşağıdakı kimidir:

A) Alıcının hər hansı bir işarə verdiyini yoxlayın.

B) Siqnalın hansı IO portundan alınacağından asılı olaraq PC -yə hansı komanda göndəriləcək.

C) Bütün uzaqdan idarəetmə hərəkətləri edildikdən sonra mikrofonla səs səviyyəsini aşkar edin və PC-yə göndərin.

D) PC -yə göndərilən bütün əmrlər əvvəlcə bir xarakterə, sonra bir dəyərə (əgər ehtiyac olarsa) malik olan bir formata malikdir.

E) Arduinodan PC -yə göndərilən beş əmr var

a. "U" - Səsi artırın

b. "D" - Səs Azaltma

c. "S" - Əlavə et

d. "V" - Videonu atla

e. "A" - Səs səviyyəsi aşkar edildikdən sonra dəyər

Arduino Kodu:

Arduino Kodunu buradan yükləyin:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

boş quraşdırma () {

Serial.begin (9600);

pinMode (A3, GİRİŞ);

pinMode (in1, GİRİŞ);

pinMode (in2, GİRİŞ);

pinMode (in3, GİRİŞ);

pinMode (in4, GİRİŞ);

}

boşluq döngəsi () {

əgər (digitalRead (in1))

{

Serial.println ("u");

gecikmə (100);

}

əgər (digitalRead (in2))

{

Serial.println ("d");

gecikmə (100);

}

əgər (digitalRead (in3))

{

Serial.println ("s");

gecikmə (100);

}

əgər (digitalRead (in4))

{

Serial.println ("v");

gecikmə (100);

}

int readVal = analogRead (A3);

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

gecikmə (50);

}

Addım 4: PC Tətbiq Kodu (C#. NET)

PC Tətbiq Kodu (C#. NET)
PC Tətbiq Kodu (C#. NET)

Tətbiq COM (USB) portunu dinləyəcək və hansı əmrin alındığına görə reaksiya verəcək. PC -də səsi yuxarı və aşağı çevirməyin ən sadə yolu, Windows OS ilə birbaşa danışmaq üçün Interrop xidmətlərindən istifadə etməkdir. Siçanı ekranda müəyyən bir vəziyyətə gətirmək və klikləmək üçün Interrop xidmətlərindən də istifadə edirik. Fərqli ekranlara və baxış ölçülərinə icazə vermək üçün istifadəçiyə atlama və atlama video düymələrinin yerini təyin etməyə icazə veririk.

Aldığımız hər hansı bir səs əmrini göstərmək üçün standart bir.net diaqramından istifadə edirik.

Windows Kodu:

Tam layihəni buradan yükləyin:

leobot.net/audioadjust.zip

Sistemdən istifadə;

System. Collections. Generic istifadə edərək;

System. ComponentModel istifadə edərək;

System. Data istifadə edərək;

System. Drawing istifadə edərək;

System. Linq istifadə edərək;

System. Text istifadə edərək;

System. Windows. Forms istifadə edərək;

System. Runtime. InteropServices istifadə;

System. IO. Ports istifadə etmək;

System. Threading istifadə edərək;

ad sahəsi AudioAdjust

{

ictimai qismən sinif Form1: Form

{

[DllImport ("User32. Dll")]

ümumi statik xarici uzun SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

ictimai statik xarici bool ClientToScreen (IntPtr hWnd, ref POINT nöqtəsi);

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

public static extern void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Siçan hərəkətləri

xüsusi const int MOUSEEVENTF_LEFTDOWN = 0x02;

xüsusi const int MOUSEEVENTF_LEFTUP = 0x04;

xüsusi const int MOUSEEVENTF_RIGHTDOWN = 0x08;

xüsusi const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport ("user32.dll")]

statik xarici boşluq keybd_event (bayt bVk, bayt bScan, uint dwFlags, int dwExtraInfo);

Random aRand = yeni Random ();

public int LastLevel = 0;

ictimai int MaxLevel = 255;

statik SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = yalan;

ictimai forma1 ()

{

InitializeComponent ();

}

şəxsi boşluq Form1_Load (obyekt göndərən, EventArgs e)

{

string adları = System. IO. Ports. SerialPort. GetPortNames ();

comboBoxPort. Items. AddRange (adlar);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

şəxsi boşluq düyməsi1_Click (obyekt göndərən, EventArgs e)

{

_serialPort = yeni SerialPort ();

_serialPort. DataReceived += yeni SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // COM lövhənizi qurun

_serialPort. BaudRate = 9600;

əgər (_serialPort. IsOpen) _serialPort. Close ();

başqa

{

_serialPort. Open ();

}

// keybd_event ((bayt) Keys. VolumeDown, 0, 0, 0); // həcmi azaldın

}

vser _serialPort_DataReceived (obyekt göndərən, SerialDataReceivedEventArgs e)

{

cəhd edin

{

string fullval = _serialPort. ReadLine ();

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

keçid (com)

{

hal "a":

{

{

// səs səviyyəsi

string val = fullval. Replace ("a", "");

int valInt = int. Parse (val);

AddData (valInt);

}

fasilə;

}

hal "u":

{

// səs artır

keybd_event ((bayt) Keys. VolumeUp, 0, 0, 0); // həcmi azaldın

fasilə;

}

hal "d":

{

// səs aşağı

keybd_event ((bayt) Keys. VolumeDown, 0, 0, 0); // həcmi azaldın

fasilə;

}

hal "s":

{

// skipAd

MoveCursorSkipAd ();

Mövzu Yuxu (10);

DoMouseClick ();

fasilə;

}

hal "v":

{

// skipAd

MoveCursorSkipVideo ();

Mövzu Yuxu (10);

DoMouseClick ();

fasilə;

}

}

}

tutmaq

{

}

// yeni NotImplementedException () atın;

}

özəl boşluq MoveCursorSkipAd ()

{

Cursor. Position = new Point (1140, 725);

Cursor. Position = yeni nöqtə (adX, adY);

}

şəxsi boşluq MoveCursorSkipVideo ()

{

Cursor. Position = new Point (1140, 725);

Cursor. Position = yeni nöqtə (vidX, vidY);

}

ictimai boşluq DoMouseClick ()

{

// İdxal olunan funksiyanı kursorun cari mövqeyi ilə çağırın

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);

}

etibarsız AddData (int səviyyəsi)

{

əgər (EnableAudioChange)

{

əgər (səviyyə> = MaxLevel)

{

keybd_event ((bayt) Keys. VolumeDown, 0, 0, 0); // həcmi azaldın

keybd_event ((bayt) Keys. VolumeDown, 0, 0, 0); // həcmi azaldın

keybd_event ((bayt) Keys. VolumeDown, 0, 0, 0); // həcmi azaldın

}

başqa

{

əgər (səviyyə <MaxLevel - 0)

{

keybd_event ((bayt) Keys. VolumeUp, 0, 0, 0); // həcmi azaldın

}

}

}

SetChart (səviyyə);

currentPoint ++;

}

etibarsız SetTextCallback (int val);

şəxsi boşluq SetChart (int val)

{

// InvokeRequired tələb olunan

// yaradılan iş parçacığının mövzu identifikatoruna mövzu çağırır.

// Bu mövzular fərqlidirsə, doğruya dönər.

əgər (this.chart1. InvokeRequired)

{

SetTextCallback d = yeni SetTextCallback (SetChart);

this. Invoke (d, yeni obyekt {val});

}

başqa

{

chart1. Series [0]. Points. AddXY (0, val);

əgər (currentPoint> = 10)

{

chart1. Series [0]. Points. RemoveAt (0);

}

}

}

şəxsi boş mətnBoxLevel_TextChanged (obyekt göndərən, EventArgs e)

{

cəhd edin

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

tutmaq

{

textBoxLevel. Text = MaxLevel + "";

}

}

şəxsi boşluq düyməsiTestSkip_Click (obyekt göndərən, EventArgs e)

{

MoveCursorSkipAd ();

Mövzu Yuxu (10);

DoMouseClick ();

}

şəxsi boş mətnBoxXpos_TextChanged (obyekt göndərən, EventArgs e)

{

cəhd edin

{

adX = int. Parse (textBoxXpos. Text);

}

tutmaq

{

textBoxXpos. Text = adX + "";

}

}

şəxsi boş mətnBoxYpos_TextChanged (obyekt göndərən, EventArgs e)

{

cəhd edin

{

adY = int. Parse (textBoxYpos. Text);

}

tutmaq

{

textBoxYpos. Text = adY + "";

}

}

şəxsi boşluq düyməsiSkipVideo_Click (obyekt göndərən, EventArgs e)

{

MoveCursorSkipVideo ();

Mövzu Yuxu (10);

DoMouseClick ();

}

şəxsi boş mətnBoxXposVid_TextChanged (obyekt göndərən, EventArgs e)

{

cəhd edin

{

vidX = int. Parse (textBoxXposVid. Text);

}

tutmaq

{

textBoxXposVid. Text = vidX + "";

}

}

şəxsi boş mətnBoxYposVid_TextChanged (obyekt göndərən, EventArgs e)

{

cəhd edin

{

vidY = int. Parse (textBoxYposVid. Text);

}

tutmaq

{

textBoxYposVid. Text = vidY + "";

}

}

şəxsi boşluq checkBoxEnable_CheckedChanged (obyekt göndərən, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

ictimai quruluş nöqtəsi

{

public int x;

ictimai int;

}

}

Tövsiyə: