Tartalomjegyzék:

Arduino Youtube távirányító alváshoz (Leobot Electronics): 4 lépés
Arduino Youtube távirányító alváshoz (Leobot Electronics): 4 lépés

Videó: Arduino Youtube távirányító alváshoz (Leobot Electronics): 4 lépés

Videó: Arduino Youtube távirányító alváshoz (Leobot Electronics): 4 lépés
Videó: Test 2: 2-wheeled Arduino bot in motion 2024, November
Anonim
Arduino Youtube távirányító alváshoz (Leobot Electronics)
Arduino Youtube távirányító alváshoz (Leobot Electronics)

Arduino Youtube távirányító

Ha a Youtube segítségével biztosít filmet vagy zenét, amelyet alvás közben nézhet, akkor biztosan felébresztette volna a terheléses hirdetés vagy a különböző hangerőszint, amikor új film indul. Mondanom sem kell, hogy ez elég irritáló tud lenni.

Tehát a megoldásom, amit itt bizonyítok Önnek, hogy saját maga építsen, egy Arduino-alapú távirányító, amely távolról kölcsönhatásba lép a Youtube-tal. A távirányító szükséges a számítógép fő hangerejének megváltoztatásához, a Youtube hirdetéseinek és a Youtube videóinak kihagyásához.

Ezenkívül tartalmaz egy hangszint -érzékelőt, amely meghatározza a hangszóró tényleges hangosságát, és ezzel automatikusan csökkenthető a hangszint, ha hangos megszakításokat észlel, például hirdetést.

Végül hozzáadtam egy diagramot a PC alkalmazásban, hogy megjelenítse az észlelt hangszinteket.

A megoldás jobban finomítható, de számomra teljesíti a feladatot.

1. lépés: Szükséges összetevők

Mindezeket az alkatrészeket a Leobot Electronics szállítja (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 CSATORNA TÁVOLI (315MHZ) + VEVŐ MODUL (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MIKROFONHANG ÉS HANGFELVÉTEL ÉRZÉKELŐ MODUL (KY-037)

leobot.net/viewproduct.aspx?id=217

Szoftver

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

2. lépés: Hardver beállítása

1) Csatlakoztassa a 4 csatornás vevőmodult az Arduino-hoz.

4 csatornás vevő pin-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Digitális 2

D1-> Digitális 3

D2-> Digitális 4

D3-> Digitális 5

2) Csatlakoztassa a KY-037 mikrofonmodult az Arduino-hoz

Mikrofon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3V

A0-> analóg 3

3. lépés: Arduino kód

Áttekintés

Az Arduino által követendő logika a következő:

A) Ellenőrizze, hogy a vevő jelzi -e a csapokat.

B) Attól függően, hogy melyik IO porton érkezik a jel, milyen parancsot küld a PC -nek.

C) Miután elvégezte az összes távirányító műveletet, érzékelje a mikrofon hangerejét, és küldje el a számítógépre.

D) A számítógépre küldött összes parancs formátuma először karakter, majd érték (ha értékre van szükség).

E) Az Arduino öt parancsot küldött a számítógépre

a. „U” - Hangerő növelése

b. „D” - Hangerő csökkentése

c. „S” - Kihagyás hozzáadása

d. „V” - Videó kihagyása

e. „A” - Hangszintet észlelt, majd ezt követte az érték

Az Arduino kód:

Töltse le az Arduino kódot innen:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

void setup () {

Sorozat.kezdet (9600);

pinMode (A3, INPUT);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

void loop () {

ha (digitalRead (in1))

{

Soros.println ("u");

késleltetés (100);

}

ha (digitalRead (in2))

{

Serial.println ("d");

késleltetés (100);

}

ha (digitalRead (in3))

{

Serial.println ("s");

késleltetés (100);

}

ha (digitalRead (in4))

{

Soros.println ("v");

késleltetés (100);

}

int readVal = analógRead (A3);

Serial.println (Karakterlánc ("a")+ Karakterlánc (readVal));

késleltetés (50);

}

4. lépés: PC -alkalmazáskód (C#. NET)

PC -alkalmazáskód (C#. NET)
PC -alkalmazáskód (C#. NET)

Az alkalmazás a COM (USB) porton keresztül hallgat és reagál a kapott parancs függvényében. A legegyszerűbb módja annak, hogy a hangot fel -le kapcsolja a számítógépen, ha az Interrop szolgáltatások segítségével közvetlenül beszél a Windows operációs rendszerrel. Az Interrop szolgáltatásokat is használjuk, hogy az egeret a képernyő egy adott pozíciójába vigyük, és kattintsunk. A különböző képernyők és nézetméretek lehetővé tételéhez lehetővé tesszük a felhasználó számára, hogy megadja a kihagyás hozzáadása és a kihagyás videó gombok helyzetét.

Egy szabványos.net diagramot használunk a kapott hangparancsok megjelenítésére.

Windows kód:

A teljes projekt letölthető innen:

leobot.net/audioadjust.zip

a rendszer használata;

a System. Collections. Generic használatával;

a System. ComponentModel használatával;

a System. Data használatával;

a System. Drawing használatával;

a System. Linq használatával;

a System. Text használatával;

a System. Windows. Forms használatával;

a System. Runtime. InteropServices használatával;

a System. IO. Ports használatával;

a System. Threading használatával;

névtér AudioAdjust

{

nyilvános részosztály Form1: Form

{

[DllImport ("User32. Dll")]

public static extern hosszú SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

public static extern bool ClientToScreen (IntPtr hWnd, ref POINT pont);

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

// Egérműveletek

private const int MOUSEEVENTF_LEFTDOWN = 0x02;

private const int MOUSEEVENTF_LEFTUP = 0x04;

private const int MOUSEEVENTF_RIGHTDOWN = 0x08;

private const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport ("user32.dll")]

statikus extern void keybd_event (bájt bVk, bájtos bScan, uint dwFlags, int dwExtraInfo);

Véletlen aRand = új Véletlen ();

public int LastLevel = 0;

public int MaxLevel = 255;

statikus SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = hamis;

nyilvános űrlap1 ()

{

InitializeComponent ();

}

private void Form1_Load (objektumküldő, EventArgs e)

{

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

comboBoxPort. Items. AddRange (nevek);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (objektumküldő, EventArgs e)

{

_serialPort = új SerialPort ();

_serialPort. DataReceived += új SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // A tábla beállítása COM

_serialPort. BaudRate = 9600;

if (_serialPort. IsOpen) _serialPort. Close ();

más

{

_serialPort. Open ();

}

// keybd_event ((byte) Kulcsok. KötetDown, 0, 0, 0); // hangerő csökkentése

}

void _serialPort_DataReceived (objektumküldő, SerialDataReceivedEventArgs e)

{

próbáld ki

{

string fullval = _serialPort. ReadLine ();

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

kapcsoló (com)

{

"a" eset:

{

{

// audio szint

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

int valInt = int. Parse (val);

AddData (valInt);

}

szünet;

}

"u" eset:

{

// hang fel

keybd_event ((byte) Kulcsok. Kötet, 0, 0, 0); // hangerő csökkentése

szünet;

}

"d" eset:

{

// hang le

keybd_event ((byte) Kulcsok. KötetDown, 0, 0, 0); // hangerő csökkentése

szünet;

}

"s" eset:

{

//Hirdetés átugrása

MoveCursorSkipAd ();

Téma. Alvás (10);

DoMouseClick ();

szünet;

}

"v" eset:

{

//Hirdetés átugrása

MoveCursorSkipVideo ();

Téma. Alvás (10);

DoMouseClick ();

szünet;

}

}

}

fogás

{

}

// új NotImplementedException () dobása ();

}

private void MoveCursorSkipAd ()

{

Kurzor. Pozíció = új pont (1140, 725);

Kurzor. Pozíció = új pont (adX, adY);

}

private void MoveCursorSkipVideo ()

{

Kurzor. Pozíció = új pont (1140, 725);

Kurzor. Pozíció = új pont (vidX, vidY);

}

public void DoMouseClick ()

{

// Az importált függvény meghívása a kurzor aktuális pozíciójával

uint X = (uint) Kurzor. Pozíció. X;

uint Y = (uint) Kurzor. Pozíció. Y;

egér_esemény (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);

egér_esemény (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);

}

void AddData (int szint)

{

if (enableAudioChange)

{

if (szint> = MaxLevel)

{

keybd_event ((byte) Kulcsok. KötetDown, 0, 0, 0); // hangerő csökkentése

keybd_event ((byte) Kulcsok. KötetDown, 0, 0, 0); // hangerő csökkentése

keybd_event ((byte) Kulcsok. KötetDown, 0, 0, 0); // hangerő csökkentése

}

más

{

if (szint <MaxLevel - 0)

{

keybd_event ((byte) Kulcsok. Kötet, 0, 0, 0); // hangerő csökkentése

}

}

}

SetChart (szint);

currentPoint ++;

}

delegált void SetTextCallback (int val);

private void SetChart (int val)

{

// Az InvokeRequired kötelező összehasonlítja a

// a szál hívása a létrehozó szál szál -azonosítójára.

// Ha ezek a szálak eltérőek, akkor igaz értéket ad vissza.

ha (this.chart1. InvokeRequired)

{

SetTextCallback d = új SetTextCallback (SetChart);

this. Invoke (d, új objektum {val});

}

más

{

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

if (currentPoint> = 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (objektumküldő, EventArgs e)

{

próbáld ki

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

fogás

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (objektumküldő, EventArgs e)

{

MoveCursorSkipAd ();

Téma. Alvás (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (objektumküldő, EventArgs e)

{

próbáld ki

{

adX = int. Parse (textBoxXpos. Text);

}

fogás

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (objektumküldő, EventArgs e)

{

próbáld ki

{

adY = int. Parse (textBoxYpos. Text);

}

fogás

{

textBoxYpos. Text = adY + "";

}

}

private void buttonSkipVideo_Click (objektumküldő, EventArgs e)

{

MoveCursorSkipVideo ();

Téma. Alvás (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (objektumküldő, EventArgs e)

{

próbáld ki

{

vidX = int. Parse (textBoxXposVid. Text);

}

fogás

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (objektumküldő, EventArgs e)

{

próbáld ki

{

vidY = int. Parse (textBoxYposVid. Text);

}

fogás

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (objektumküldő, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

nyilvános szerkezet PONT

{

public int x;

public int y;

}

}

Ajánlott: