Мазмуну:

Arduino Youtube уктоо үчүн алыстан башкаруу (Leobot Electronics): 4 кадам
Arduino Youtube уктоо үчүн алыстан башкаруу (Leobot Electronics): 4 кадам

Video: Arduino Youtube уктоо үчүн алыстан башкаруу (Leobot Electronics): 4 кадам

Video: Arduino Youtube уктоо үчүн алыстан башкаруу (Leobot Electronics): 4 кадам
Video: Тез уктоо үчүн 6 кеңеш Уйку качан качат 2024, Июль
Anonim
Arduino Youtube уктоо үчүн алыстан башкаруу (Leobot Electronics)
Arduino Youtube уктоо үчүн алыстан башкаруу (Leobot Electronics)

Arduino Youtube Remote

Эгер сиз Youtubeну кино же музыка менен камсыз кылуу үчүн колдонсоңуз, уктап жатканда сиз жүктөө жарнагы менен же жаңы кино башталганда башка үндүн көлөмү менен ойгонот элеңиз. Бул абдан кыжырды келтириши мүмкүн экенин айтуунун кажети жок.

Ошентип, мен сизге бул жерде өзүңүз үчүн далилдөөчү чечимим, бул Youtube менен алыстан иштөө үчүн Arduino негизделген алыстан башкаруу. Алыстан башкаруу пульту менин компьютеримдин негизги үнүнүн үнүн өзгөртүүгө, Youtubeдагы жарнактарды өткөрүп жиберүүгө жана Youtubeдагы видеолорду өткөрүп жиберүүгө милдеттүү.

Ошондой эле, динамиктин канчалык катуу экенин аныктоо үчүн аудио деңгээл сенсору камтылган, ал өз кезегинде жарнак сыяктуу катуу үзгүлтүктөрдү аныктоодо үн деңгээлин автоматтык түрдө төмөндөтүү үчүн колдонулушу мүмкүн.

Акырында, мен аныкталган аудио деңгээлин көрсөтүү үчүн PC колдонмосуна диаграмма коштум.

Чечим жакшыраак болушу мүмкүн, бирок мен үчүн ал тапшырманы аткарат.

1 -кадам: Компоненттер керек

Бул компоненттердин баары Leobot Electronics тарабынан камсыздалган (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 CHANNEL REMOTE (315MHZ) + RECEIVER MODULE (315MHZ)

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/en/main/software

2 -кадам: Аппараттык орнотуу

1) 4-каналдын кабыл алуучу модулун Arduino менен туташтырыңыз.

4-канал алуучунун пин-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Санарип 2

D1-> Санарип 3

D2-> Санарип 4

D3-> Санарип 5

2) KY-037 микрофонун Arduino модулуна туташтырыңыз

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

GND-> GND

+-> 3.3V

A0-> Аналог 3

3 -кадам: Arduino коду

Обзор

Arduino ээрчиши керек болгон логика төмөнкүчө:

A) Кабыл алуучу кандайдыр бир казыктарга сигнал берип жаткандыгын текшериңиз.

B) Сигнал кабыл алынган IO портуна жараша, ЖКга кандай буйрук жөнөтүлөт.

C) Бардык алыстан башкаруу аракеттери менен бүткөндөн кийин, микрофондун жардамы менен аудио деңгээлин аныктап, ЖКга жөнөтүңүз.

D) ЖКга жөнөтүлүүчү бардык буйруктарда алгач символдун, андан кийин маанинин форматы бар (эгер мааниси керек болсо).

E) Ардуинодон ЖКга жөнөтүлгөн беш буйрук бар

а. "U" - Көлөмдү жогорулатуу

б. "D" - Үнүн азайтуу

в. "S" - Кошууну өткөрүп жиберүү

г. "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 (String ("a")+ String (readVal));

кечиктирүү (50);

}

4 -кадам: PC App Code (C#. NET)

PC App Code (C#. NET)
PC App Code (C#. NET)

Колдонмо COM (USB) порту аркылуу угат жана кандай буйрук келгенине жараша жооп берет. ЖКнын үнүн өйдө -ылдый түшүрүүнүн эң жөнөкөй жолу - Windows OS менен түз сүйлөшүү үчүн 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: Form

{

[DllImport ("User32. Dll")]

ачык статикалык extern long SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

public static extern bool ClientToScreen (IntPtr hWnd, ref POINT 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);

Random 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 = false;

коомдук форма1 ()

{

InitializeComponent ();

}

жеке боштук Form1_Load (объект жөнөтүүчү, EventArgs e)

{

сап аттары = 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); // көлөмүн азайтуу

}

жараксыз _serialPort_DataReceived (объект жөнөтүүчү, SerialDataReceivedEventArgs e)

{

аракет кыл

{

сап fullval = _serialPort. ReadLine ();

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

которуштуруу (com)

{

учурда "а":

{

{

// аудио деңгээл

сап 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); // көлөмүн азайтуу

тыныгуу;

}

учурда "s":

{

// skipAd

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

тыныгуу;

}

учурда "v":

{

// skipAd

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

тыныгуу;

}

}

}

кармоо

{

}

// жаңы NotImplementedException ыргытуу ();

}

жеке боштук MoveCursorSkipAd ()

{

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

Курсор. Позиция = жаңы пункт (adX, adY);

}

жеке боштук MoveCursorSkipVideo ()

{

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

Курсор. Позиция = жаңы чекит (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 талап кылынат

// жаратуучу жиптин жип IDсине чалуу.

// Эгерде бул жиптер башка болсо, анда ал чындыкты кайтарат.

эгер (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);

}

}

}

жеке боштук textBoxLevel_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 + "";

}

}

жеке боштук textBoxYpos_TextChanged (объект жөнөтүүчү, EventArgs e)

{

аракет кыл

{

adY = int. Parse (textBoxYpos. Text);

}

кармоо

{

textBoxYpos. Text = adY + "";

}

}

жеке боштук баскычыSkipVideo_Click (объект жөнөтүүчү, EventArgs e)

{

MoveCursorSkipVideo ();

Thread. Sleep (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 + "";

}

}

private void checkBoxEnable_CheckedChanged (объект жөнөтүүчү, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

коомдук структура POINT

{

public int x;

public int y;

}

}

Сунушталууда: