Talaan ng mga Nilalaman:

Remote Control ng Arduino Youtube para sa Pagtulog (Leobot Electronics): 4 na Hakbang
Remote Control ng Arduino Youtube para sa Pagtulog (Leobot Electronics): 4 na Hakbang

Video: Remote Control ng Arduino Youtube para sa Pagtulog (Leobot Electronics): 4 na Hakbang

Video: Remote Control ng Arduino Youtube para sa Pagtulog (Leobot Electronics): 4 na Hakbang
Video: 30 Ultimate Windows 10 Tips and Tricks for 2020 2024, Hulyo
Anonim
Remote Control ng Arduino Youtube para sa Pagtulog (Leobot Electronics)
Remote Control ng Arduino Youtube para sa Pagtulog (Leobot Electronics)

Ang Remote ng Arduino Youtube

Kung gumagamit ka ng Youtube upang magbigay sa iyo ng isang pelikula o musika upang mapanood habang natutulog ay tiyak na ginising ka ng alinman sa isang pag-advertise ng pagkarga o iba't ibang mga antas ng dami kapag nagsimula ang isang bagong pelikula. Hindi na kailangang sabihin, maaari itong maging medyo nakakainis.

Kaya, ang aking solusyon ay pinatunayan ko sa iyo dito upang makabuo para sa iyong sarili ay isang remote control na nakabatay sa Arduino upang makipag-ugnay sa Youtube sa malayo. Kinakailangan ang remote upang baguhin ang pangunahing dami ng tunog ng aking PC, laktawan ang mga ad sa Youtube at laktawan ang mga video sa Youtube.

Gayundin, kasama ang isang sensor ng antas ng audio upang matukoy kung gaano kalakas ang tagapagsalita, na kung saan ay maaaring magamit upang awtomatikong babaan ang antas ng tunog sa pagtuklas ng malalakas na pagkagambala tulad ng isang advert.

Panghuli, nagdagdag ako ng isang tsart sa PC app upang maipakita ang mga natukoy na antas ng audio.

Ang solusyon ay maaaring mas mahusay na pino ngunit para sa akin natutupad nito ang gawain.

Hakbang 1: Kailangan ng Mga Bahagi

Ang lahat ng mga sangkap na ito ay ibinibigay ng Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 CHANNEL Remote (315MHZ) + MODEPS NG TANGGAP (315MHZ)

leobot.net/viewproduct.aspx?id=521

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

leobot.net/viewproduct.aspx?id=217

Software

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Hakbang 2: Pag-setup ng Hardware

1) Ikonekta ang module ng tatanggap ng 4-Channel sa Arduino.

4-Channel Receiver Pin-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Digital 2

D1-> Digital 3

D2-> Digital 4

D3-> Digital 5

2) Ikonekta ang module ng Mikropono KY-037 sa Arduino

Mikropono KY-037 Pin-> Arduino Uno Pin

GND-> GND

+ -> 3.3V

A0-> Analog 3

Hakbang 3: Arduino Code

Pangkalahatang-ideya

Ang lohika na kailangang sundin ng Arduino ay ang sumusunod:

A) Suriin kung ang tatanggap ay sumisenyas ng anumang mga pin.

B) Depende sa aling port ng IO ang signal ay natanggap sa kung ano ang ipapadala sa utos sa PC.

C) Kapag tapos na sa lahat ng mga pagkilos na remote-control, tuklasin ang antas ng audio gamit ang mikropono at ipadala ito sa PC.

D) Ang lahat ng mga utos na ipadala sa PC ay may isang format ng unang pagkakaroon ng isang character pagkatapos ng isang halaga (kung kailangan ng isang halaga).

E) Mayroong limang mga utos na ipinadala mula sa Arduino sa PC

a. "U" - Volume Up

b. "D" - Volume Down

c. "S" - Laktawan Idagdag

d. “V” - Laktawan ang Video

e. "A" - Nakita ang Antas ng Audio na sinusundan ng halaga

Ang Arduino Code:

I-download ang Arduino Code dito:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

walang bisa ang pag-setup () {

Serial.begin (9600);

pinMode (A3, INPUT);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

void loop () {

kung (digitalRead (in1))

{

Serial.println ("u");

pagkaantala (100);

}

kung (digitalRead (in2))

{

Serial.println ("d");

pagkaantala (100);

}

kung (digitalRead (in3))

{

Serial.println ("s");

pagkaantala (100);

}

kung (digitalRead (in4))

{

Serial.println ("v");

pagkaantala (100);

}

int readVal = analogRead (A3);

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

antala (50);

}

Hakbang 4: Code ng PC App (C #. NET)

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

Makikinig ang app sa port ng COM (USB) at tutugon depende sa kung anong natanggap na utos. Ang pinakasimpleng paraan upang i-on at pababa ang tunog sa PC ay ang paggamit ng mga serbisyo ng Interrop upang direktang makipag-usap sa Windows OS. Ginagamit din namin ang mga serbisyo ng Interrop upang ilipat ang mouse sa isang tukoy na posisyon sa screen at mag-click. Upang payagan para sa iba't ibang mga screen at laki ng panonood, pinapayagan namin ang gumagamit na tukuyin ang posisyon ng laktawan na idagdag at laktawan ang mga pindutan ng video.

Gumagamit kami ng isang karaniwang tsart ng net upang maipakita ang anumang mga audio command na natanggap namin.

Windows Code:

Mag-download ng buong proyekto dito:

leobot.net/audioadjust.zip

gamit ang System;

gamit ang System. Collection. Generic;

gamit ang System. ComponentModel;

gamit ang System. Data;

gamit ang System. Pagguhit;

gamit ang System. Linq;

gamit ang System. Txt;

gamit ang System. Windows. Forms;

gamit ang System. Runtime. InteropServices;

gamit ang System. IO. Ports;

gamit ang System. Threading;

namespace AudioAdjust

{

pampublikong bahagyang klase Form1: Form

{

[DllImport ("User32. Dll")]

pampublikong static extern na mahaba ang SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

pampublikong static extern bool ClientToScreen (IntPtr hWnd, ref POINT point);

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

pampublikong static extern void mouse_event (uint dwFlags, uint dx, uint dy, uint c Buttons, uint dwExtraInfo);

// Mga pagkilos sa mouse

pribadong const int MOUSEEVENTF_LEFTDOWN = 0x02;

pribadong const int MOUSEEVENTF_LEFTUP = 0x04;

pribadong const int MOUSEEVENTF_RIGHTDOWN = 0x08;

pribadong const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport ("user32.dll")]

static extern void keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

Random aRand = bagong Random ();

public int LastLevel = 0;

public int MaxLevel = 255;

static na SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

pampublikong Form1 ()

{

InitializeComponent ();

}

pribadong walang bisa na Form1_Load (nagpadala ng object, EventArgs e)

{

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

comboBoxPort. Mga Item. AddRange (mga pangalan);

comboBoxPort. SelectedIndex = 0;

}

int kasalukuyangPoint = 0;

pribadong void button1_Click (nagpadala ng object, EventArgs e)

{

_serialPort = bagong SerialPort ();

_serialPort. DataReceived + = bagong SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Itakda ang iyong board COM

_serialPort. BaudRate = 9600;

kung (_serialPort. IsOpen) _serialPort. Close ();

iba pa

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // bawasan ang dami

}

walang bisa _serialPort_DataReceived (nagpadala ng object, SerialDataReceivedEventArgs e)

{

subukan mo

{

string fullval = _serialPort. ReadLine ();

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

lumipat (com)

{

kaso "a":

{

{

// antas ng audio

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

int valInt = int. Parse (val);

AddData (valInt);

}

pahinga;

}

kaso "u":

{

// audio up

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // bawasan ang dami

pahinga;

}

kaso "d":

{

// audio down

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // bawasan ang dami

pahinga;

}

kaso "s":

{

// skipAd

MoveCursorSkipAd ();

Thread. Tulog (10);

DoMouseClick ();

pahinga;

}

kaso "v":

{

// skipAd

MoveCursorSkipVideo ();

Thread. Tulog (10);

DoMouseClick ();

pahinga;

}

}

}

mahuli

{

}

// magtapon ng bagong NotImplementedException ();

}

pribadong walang bisa na MoveCursorSkipAd ()

{

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

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

}

pribadong walang bisa na MoveCursorSkipVideo ()

{

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

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

}

public void DoMouseClick ()

{

// Tumawag sa na-import na pag-andar gamit ang kasalukuyang posisyon ng cursor

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

}

walang bisa ang AddData (int level)

{

kung (paganahinAudioChange)

{

kung (antas> = MaxLevel)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // bawasan ang dami

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // bawasan ang dami

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // bawasan ang dami

}

iba pa

{

kung (antas <MaxLevel - 0)

{

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // bawasan ang dami

}

}

}

SetChart (antas);

kasalukuyangPoint ++;

}

italaga ang walang bisa na SetTextCallback (int val);

pribadong void SetChart (int val)

{

// InvokeRequired kinakailangang paghahambing ng thread ID ng

// calling thread sa thread ID ng paglikha ng thread.

// Kung ang mga thread na ito ay magkakaiba, ito ay nagbabalik totoo.

kung (this.chart1. InvokeRequired)

{

SetTextCallback d = bagong SetTextCallback (SetChart);

ito. Invoke (d, bagong bagay {val});

}

iba pa

{

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

kung (kasalukuyangPoint> = 10)

{

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

}

}

}

pribadong void textBoxLevel_TextChanged (nagpadala ng object, EventArgs e)

{

subukan mo

{

MaxLevel = int. Parse (textBoxLevel. Txt);

}

mahuli

{

textBoxLevel. Txt = MaxLevel + "";

}

}

pribadong void buttonTestSkip_Click (nagpadala ng object, EventArgs e)

{

MoveCursorSkipAd ();

Thread. Tulog (10);

DoMouseClick ();

}

pribadong void textBoxXpos_TextChanged (nagpadala ng object, EventArgs e)

{

subukan mo

{

adX = int. Parse (textBoxXpos. Txt);

}

mahuli

{

textBoxXpos. Txt = adX + "";

}

}

pribadong void textBoxYpos_TextChanged (nagpadala ng object, EventArgs e)

{

subukan mo

{

adY = int. Parse (textBoxYpos. Txt);

}

mahuli

{

textBoxYpos. Txt = adY + "";

}

}

pribadong void buttonSkipVideo_Click (nagpadala ng object, EventArgs e)

{

MoveCursorSkipVideo ();

Thread. Tulog (10);

DoMouseClick ();

}

pribadong void textBoxXposVid_TextChanged (nagpadala ng bagay, EventArgs e)

{

subukan mo

{

vidX = int. Parse (textBoxXposVid. Txt);

}

mahuli

{

textBoxXposVid. Text = vidX + "";

}

}

pribadong void textBoxYposVid_TextChanged (nagpadala ng object, EventArgs e)

{

subukan mo

{

vidY = int. Parse (textBoxYposVid. Txt);

}

mahuli

{

textBoxYposVid. Text = vidY + "";

}

}

pribadong void checkBoxEnable_CheckedChanged (nagpadala ng object, EventArgs e)

{

paganahinAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

pampublikong istruktura POINT

{

publiko int x;

publiko int y;

}

}

Inirerekumendang: