Obsah:

Arduino Youtube dálkové ovládání na spaní (Leobot Electronics): 4 kroky
Arduino Youtube dálkové ovládání na spaní (Leobot Electronics): 4 kroky

Video: Arduino Youtube dálkové ovládání na spaní (Leobot Electronics): 4 kroky

Video: Arduino Youtube dálkové ovládání na spaní (Leobot Electronics): 4 kroky
Video: ir sensor remote control circuit #shorts #youtubeshorts 2024, Červenec
Anonim
Arduino Youtube dálkové ovládání na spaní (Leobot Electronics)
Arduino Youtube dálkové ovládání na spaní (Leobot Electronics)

Arduino Youtube Remote

Pokud používáte Youtube, aby vám poskytl film nebo hudbu ke sledování, když spíte, určitě by vás probudila reklama na načítání nebo různé úrovně hlasitosti, když začne nový film. Není třeba říkat, že to může být docela nepříjemné.

Moje řešení, které vám zde ukážu, abyste si ho mohli postavit sami, je dálkové ovládání založené na Arduinu pro interakci s Youtube na dálku. Dálkový ovladač je povinen změnit hlavní hlasitost mého počítače, přeskakovat reklamy na Youtube a přeskakovat videa na Youtube.

Součástí je také snímač úrovně zvuku, který určuje, jak hlasitý reproduktor ve skutečnosti je, což lze zase použít k automatickému snížení úrovně zvuku při detekci hlasitých přerušení, jako je reklama.

Nakonec jsem do aplikace pro PC přidal graf pro zobrazení zjištěných úrovní zvuku.

Řešení lze lépe upřesnit, ale pro mě splňuje úkol.

Krok 1: Potřebné součásti

Všechny tyto komponenty dodává společnost Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANÁLOVÉ DÁLKOVÉ (315 MHz) + MODUL PŘIJÍMAČE (315 MHz)

leobot.net/viewproduct.aspx?id=521

3) MODUL SENZORU DETEKCE HLASU A ZVUKU MIKROFONU (KY-037)

leobot.net/viewproduct.aspx?id=217

Software

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Krok 2: Nastavení hardwaru

1) Připojte modul 4kanálového přijímače k Arduinu.

4kanálový přijímač Pin-> Pin Arduino Uno

GND-> GND

5V-> 5V

D0-> Digitální 2

D1-> Digitální 3

D2-> Digitální 4

D3-> Digitální 5

2) Připojte modul mikrofonu KY-037 k Arduinu

Mikrofon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3,3V

A0-> Analogový 3

Krok 3: Arduino kód

Přehled

Logika, kterou musí Arduino dodržovat, je následující:

A) Zkontrolujte, zda přijímač signalizuje nějaké piny.

B) V závislosti na tom, na kterém IO portu je signál přijímán, je jaký příkaz odeslán do PC.

C) Po dokončení všech akcí dálkového ovládání zjistěte pomocí mikrofonu úroveň zvuku a odešlete ji do počítače.

D) Všechny příkazy odeslané do PC mají formát nejprve se znakem, pak s hodnotou (pokud je hodnota potřebná).

E) Z Arduina je do PC odesláno pět příkazů

A. „U“- zvýšení hlasitosti

b. „D“- Snížení hlasitosti

C. „S“- Přeskočit přidání

d. „V“- Přeskočit video

E. „A“- Zjištěna úroveň zvuku následovaná hodnotou

Arduino kód:

Stáhněte si kód Arduino zde:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

neplatné nastavení () {

Serial.begin (9600);

pinMode (A3, VSTUP);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

prázdná smyčka () {

if (digitalRead (in1))

{

Serial.println ("u");

zpoždění (100);

}

if (digitalRead (in2))

{

Serial.println ("d");

zpoždění (100);

}

if (digitalRead (in3))

{

Serial.println ("s");

zpoždění (100);

}

if (digitalRead (in4))

{

Serial.println ("v");

zpoždění (100);

}

int readVal = analogRead (A3);

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

zpoždění (50);

}

Krok 4: Kód aplikace pro PC (C#. NET)

Kód aplikace pro PC (C#. NET)
Kód aplikace pro PC (C#. NET)

Aplikace bude poslouchat přes port COM (USB) a reagovat podle toho, jaký příkaz obdrží. Nejjednodušší způsob, jak v počítači přepnout zvuk nahoru a dolů, je pomocí služeb Interrop přímo hovořit s operačním systémem Windows. Služby Interrop používáme také k přesunutí myši na konkrétní místo na obrazovce a kliknutí. Abychom umožnili různé velikosti obrazovek a zobrazení, umožňujeme uživateli určit polohu tlačítek pro přeskočení přidání a přeskočení videa.

K zobrazení všech zvukových příkazů, které přijímáme, používáme standardní graf.net.

Windows kód:

Stáhněte si celý projekt zde:

leobot.net/audioadjust.zip

pomocí System;

pomocí System. Collections. Generic;

pomocí System. ComponentModel;

pomocí System. Data;

pomocí System. Drawing;

pomocí System. Linq;

pomocí System. Text;

pomocí System. Windows. Forms;

pomocí System. Runtime. InteropServices;

pomocí System. IO. Ports;

pomocí System. Threading;

obor názvů AudioAdjust

{

veřejná částečná třída Form1: Form

{

[DllImport ("User32. Dll")]

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

// Akce myši

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")]

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

Random aRand = new Random ();

public int LastLevel = 0;

public int MaxLevel = 255;

statický SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

veřejný formulář1 ()

{

InitializeComponent ();

}

private void Form1_Load (odesílatel objektů, EventArgs e)

{

řetězec names = System. IO. Ports. SerialPort. GetPortNames ();

comboBoxPort. Items. AddRange (názvy);

comboBoxPort. SelectedIndex = 0;

}

int aktuální Bod = 0;

private void button1_Click (odesílatel objektů, EventArgs e)

{

_serialPort = nový SerialPort ();

_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Nastavení desky COM

_serialPort. BaudRate = 9600;

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

jiný

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // snížení hlasitosti

}

void _serialPort_DataReceived (odesílatel objektu, SerialDataReceivedEventArgs e)

{

Snaž se

{

řetězec fullval = _serialPort. ReadLine ();

řetězec com = fullval [0]. ToString ();

přepínač (com)

{

případ "a":

{

{

// úroveň zvuku

řetězec val = fullval. Replace ("a", "");

int valInt = int. Parse (val);

AddData (valInt);

}

přestávka;

}

případ „u“:

{

// zvuk nahoru

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // snížení hlasitosti

přestávka;

}

případ "d":

{

// ztlumení zvuku

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // snížení hlasitosti

přestávka;

}

případ "s":

{

//přeskočit reklamu

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

přestávka;

}

případ "v":

{

//přeskočit reklamu

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

přestávka;

}

}

}

úlovek

{

}

// házet nový NotImplementedException ();

}

soukromý prázdný MoveCursorSkipAd ()

{

Cursor. Position = nový bod (1140, 725);

Cursor. Position = nový bod (adX, adY);

}

soukromé prázdné MoveCursorSkipVideo ()

{

Cursor. Position = nový bod (1140, 725);

Cursor. Position = nový bod (vidX, vidY);

}

veřejná prázdnota DoMouseClick ()

{

// Volání importované funkce s aktuální pozicí kurzoru

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

}

zrušit AddData (úroveň int)

{

if (enableAudioChange)

{

if (level> = MaxLevel)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // snížení hlasitosti

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // snížení hlasitosti

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // snížení hlasitosti

}

jiný

{

if (úroveň <MaxLevel - 0)

{

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // snížení hlasitosti

}

}

}

SetChart (úroveň);

currentPoint ++;

}

delegát neplatný SetTextCallback (int val);

private void SetChart (int val)

{

// InvokeRequired required porovnává ID vlákna

// volání vlákna na ID vlákna vytvářeného vlákna.

// Pokud se tato vlákna liší, vrací true.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = nový SetTextCallback (SetChart);

this. Invoke (d, nový objekt {val});

}

jiný

{

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

if (currentPoint> = 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (odesílatel objektů, EventArgs e)

{

Snaž se

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

úlovek

{

textBoxLevel. Text = MaxLevel + "";

}

}

tlačítko private voidTestSkip_Click (odesílatel objektů, EventArgs e)

{

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (odesílatel objektů, EventArgs e)

{

Snaž se

{

adX = int. Parse (textBoxXpos. Text);

}

úlovek

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (odesílatel objektů, EventArgs e)

{

Snaž se

{

adY = int. Parse (textBoxYpos. Text);

}

úlovek

{

textBoxYpos. Text = adY + "";

}

}

tlačítko private voidSkipVideo_Click (odesílatel objektů, EventArgs e)

{

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (odesílatel objektů, EventArgs e)

{

Snaž se

{

vidX = int. Parse (textBoxXposVid. Text);

}

úlovek

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (odesílatel objektu, EventArgs e)

{

Snaž se

{

vidY = int. Parse (textBoxYposVid. Text);

}

úlovek

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (odesílatel objektů, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

veřejná struktura BOD

{

public int x;

public int y;

}

}

Doporučuje: