Мазмұны:

Arduino Youtube ұйықтауға арналған қашықтан басқару құралы (Leobot Electronics): 4 қадам
Arduino Youtube ұйықтауға арналған қашықтан басқару құралы (Leobot Electronics): 4 қадам

Бейне: Arduino Youtube ұйықтауға арналған қашықтан басқару құралы (Leobot Electronics): 4 қадам

Бейне: Arduino Youtube ұйықтауға арналған қашықтан басқару құралы (Leobot Electronics): 4 қадам
Бейне: NOOBS PLAY CLASH ROYALE FROM START LIVE 2024, Қараша
Anonim
Arduino Youtube ұйықтауға арналған қашықтан басқару құралы (Leobot Electronics)
Arduino Youtube ұйықтауға арналған қашықтан басқару құралы (Leobot Electronics)

Arduino Youtube қашықтан басқару құралы

Егер сіз Youtube -ті фильм немесе музыка ұсыну үшін ұйықтап жатқанда көретін болсаңыз, сіз жаңа фильм басталған кезде жүктеме туралы хабарландырумен немесе дыбыс деңгейінің әр түрлі деңгейімен оянған болар едіңіз. Айта кету керек, бұл өте тітіркендіргіш болуы мүмкін.

Сонымен, мен сізге өзіме дәлелдеуге ұсынған шешімім-бұл қашықтықтан Youtube-пен өзара әрекеттесу үшін Arduino негізіндегі пульт. Қашықтан басқару пульті компьютердің негізгі дыбыс деңгейін өзгертуге, Youtube -те жарнамаларды өткізуге және Youtube -те бейнелерді өткізіп жіберуге қажет.

Сондай -ақ, динамиктің қаншалықты қатты екенін анықтайтын аудио деңгей сенсоры бар, ол өз кезегінде жарнама сияқты қатты үзілістерді анықтаған кезде дыбыс деңгейін автоматты түрде төмендетуге болады.

Ақырында, мен компьютердің қосымшасына анықталған дыбыс деңгейін көрсету үшін диаграмма қостым.

Шешімді жақсартуға болады, бірақ мен үшін бұл тапсырманы орындайды.

1 -қадам: Қажетті компоненттер

Бұл компоненттердің барлығын Leobot Electronics жеткізеді (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 ҚАНЫҚТАН ҚАШЫҚТАН (315 МГц) + Қабылдағыш модулі (315 МГц)

leobot.net/viewproduct.aspx?id=521

3) МИКРОФОНДЫҚ ДАУЫС ЖӘНЕ ДЫБЫСТЫ ДЕТЕКЦИЯЛАУ СЕНСОРЫ МОДУЛІ (KY-037)

leobot.net/viewproduct.aspx?id=217

Бағдарламалық қамтамасыз ету

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/kz/main/software

2 -қадам: Жабдықты орнату

1) 4 каналды қабылдағыш модулін Arduino-ға қосыңыз.

4 арналы қабылдағыш түйреуі-> Arduino Uno Pin

GND-> GND

5В-> 5В

D0-> Сандық 2

D1-> Сандық 3

D2-> Сандық 4

D3-> Сандық 5

2) KY-037 микрофон модулін Arduino-ға қосыңыз

Микрофон KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3В

A0-> Аналог 3

3 -қадам: Arduino коды

Шолу

Arduino ұстануы керек логика келесідей:

A) Ресивердің түйреуішке сигнал беретінін тексеріңіз.

B) ДК -ге қандай команда жіберілетіні сигнал IO портына байланысты қабылданады.

C) Қашықтан басқару құралының барлық әрекеттерін орындағаннан кейін микрофонмен дыбыс деңгейін анықтап, оны ДК-ге жіберіңіз.

D) ДК -ге жіберілетін барлық командалар алдымен символдан тұратын форматқа ие болады (егер мән қажет болса).

E) Ардуинодан ДК -ге жіберілетін бес команда бар

а. «U» - дыбыс деңгейін жоғарылату

б. «D» - дыбыс деңгейін төмендету

c) «S» - Қосуды өткізіп жіберіңіз

d. «V» - бейнені өткізіп жіберу

д. «A» - дыбыс деңгейі анықталды, содан кейін мән

Arduino коды:

Arduino кодын мына жерден жүктеп алыңыз:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

жарамсыз орнату () {

Serial.begin (9600);

pinMode (A3, INPUT);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

void loop () {

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 (Жол («a»)+ Жол (readVal));

кешіктіру (50);

}

4 -қадам: ДК қосымшасы коды (C#. NET)

ДК қолданба коды (C#. NET)
ДК қолданба коды (C#. NET)

Қолданба COM (USB) портын тыңдайды және қандай команда алынғанына байланысты әрекет етеді. Компьютерде дыбысты жоғары және төмен бұрудың қарапайым әдісі - Windows операциялық жүйесімен тікелей сөйлесу үшін Interrop қызметтерін пайдалану. Біз сондай -ақ тінтуірді экрандағы белгілі бір орынға жылжыту үшін Interrop қызметтерін қолданамыз. Әр түрлі экрандар мен қарау өлшемдеріне рұқсат беру үшін біз пайдаланушыға бейнебақылауды өткізіп жіберу және өткізіп жіберу түймелерінің орнын көрсетуге рұқсат береміз.

Біз алатын кез келген дыбыстық командаларды көрсету үшін стандартты.net диаграммасын қолданамыз.

Windows коды:

Жобаның толық нұсқасын мына жерден жүктеңіз:

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: Пішін

{

[DllImport («User32. Dll»)]

public static extern long SetCursorPos (int x, int y);

[DllImport («User32. Dll»)]

public static extern bool ClientToScreen (IntPtr hWnd, ref POINT нүктесі);

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

// Тышқан әрекеттері

жеке const int MOUSEEVENTF_LEFTDOWN = 0x02;

жеке const int MOUSEEVENTF_LEFTUP = 0x04;

жеке const int MOUSEEVENTF_RIGHTDOWN = 0x08;

жеке const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport («user32.dll»)]

static extern void keybd_event (байт bVk, байт bScan, uint dwFlags, int dwExtraInfo);

Кездейсоқ aRand = жаңа Random ();

public int LastLevel = 0;

public int MaxLevel = 255;

статикалық SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = жалған;

қоғамдық форма1 ()

{

InitializeComponent ();

}

жеке жарамсыздық Form1_Load (объект жіберуші, EventArgs e)

{

string атаулары = System. IO. Ports. SerialPort. GetPortNames ();

comboBoxPort. Items. AddRange (атаулар);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_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); // дыбыс деңгейін төмендету

}

vser _serialPort_DataReceived (объект жіберуші, SerialDataReceivedEventArgs e)

{

тырысу

{

жол fullval = _serialPort. ReadLine ();

жол com = fullval [0]. ToString ();

қосқыш (com)

{

«а» жағдайы:

{

{

// дыбыс деңгейі

val val = fullval. Replace («a», «»);

int valInt = int. Parse (val);

AddData (valInt);

}

үзіліс;

}

«у» жағдайы:

{

// дыбыс жоғарылайды

keybd_event ((байт) Keys. VolumeUp, 0, 0, 0); // дыбыс деңгейін төмендету

үзіліс;

}

«d» жағдайы:

{

// дыбыс төмен

keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // дыбыс деңгейін төмендету

үзіліс;

}

«с» жағдайы:

{

//жарнаманы өткізу

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

үзіліс;

}

«v» жағдайы:

{

//жарнаманы өткізу

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

үзіліс;

}

}

}

ұстау

{

}

// жаңа NotImplementedException () тастаңыз;

}

жеке бос орын MoveCursorSkipAd ()

{

Курсор. Позиция = жаңа нүкте (1140, 725);

Cursor. Position = new Point (adX, adY);

}

жеке бос орын MoveCursorSkipVideo ()

{

Курсор. Позиция = жаңа нүкте (1140, 725);

Cursor. Position = new Point (vidX, vidY);

}

жалпыға ортақ 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);

}

жарамсыз AddData (int деңгейі)

{

if (enableAudioChange)

{

егер (деңгей> = MaxLevel)

{

keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // дыбыс деңгейін төмендету

keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // дыбыс деңгейін төмендету

keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // дыбыс деңгейін төмендету

}

басқа

{

егер (<MaxLevel деңгейі - 0)

{

keybd_event ((байт) Keys. VolumeUp, 0, 0, 0); // дыбыс деңгейін төмендету

}

}

}

SetChart (деңгей);

currentPoint ++;

}

делегаттың жарамсыз SetTextCallback (int val);

жеке жарамсыз SetChart (int val)

{

// InvokeRequired талап етілетін ағынның идентификаторын салыстырады

// жасайтын ағынның ағын идентификаторына ағынды шақыру.

// Егер бұл ағындар әр түрлі болса, ол ақиқатты қайтарады.

егер (this.chart1. InvokeRequired)

{

SetTextCallback d = жаңа SetTextCallback (SetChart);

this. Invoke (d, жаңа нысан {val});

}

басқа

{

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

егер (currentPoint> = 10)

{

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

}

}

}

жеке бос мәтінBoxLevel_TextChanged (объект жіберуші, EventArgs e)

{

тырысу

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

ұстау

{

textBoxLevel. Text = MaxLevel + «»;

}

}

private void buttonTestSkip_Click (объект жіберуші, EventArgs e)

{

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

}

жеке жарамсыз textBoxXpos_TextChanged (объект жіберуші, EventArgs e)

{

тырысу

{

adX = int. Parse (textBoxXpos. Text);

}

ұстау

{

textBoxXpos. Text = adX + «»;

}

}

жеке бос мәтінBoxYpos_TextChanged (объект жіберуші, EventArgs e)

{

тырысу

{

adY = int. Parse (textBoxYpos. Text);

}

ұстау

{

textBoxYpos. Text = adY + «»;

}

}

жеке бос орын түймесіSkipVideo_Click (объект жіберуші, EventArgs e)

{

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

}

жеке бос мәтінBoxXposVid_TextChanged (объект жіберуші, EventArgs e)

{

тырысу

{

vidX = int. Parse (textBoxXposVid. Text);

}

ұстау

{

textBoxXposVid. Text = vidX + «»;

}

}

жеке бос мәтінBoxYposVid_TextChanged (объект жіберуші, EventArgs e)

{

тырысу

{

vidY = int. Parse (textBoxYposVid. Text);

}

ұстау

{

textBoxYposVid. Text = vidY + «»;

}

}

private void checkBoxEnable_CheckedChanged (объект жіберуші, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

POINT қоғамдық құрылымы

{

public int x;

қоғамдық кірістер;

}

}

Ұсынылған: