Obsah:

Arduino Youtube diaľkové ovládanie na spanie (Leobot Electronics): 4 kroky
Arduino Youtube diaľkové ovládanie na spanie (Leobot Electronics): 4 kroky

Video: Arduino Youtube diaľkové ovládanie na spanie (Leobot Electronics): 4 kroky

Video: Arduino Youtube diaľkové ovládanie na spanie (Leobot Electronics): 4 kroky
Video: 📸 SLIDER para camara. El mas facil de hacer 2022 📸 2024, November
Anonim
Arduino Youtube diaľkové ovládanie na spanie (Leobot Electronics)
Arduino Youtube diaľkové ovládanie na spanie (Leobot Electronics)

Diaľkové ovládanie Arduino Youtube

Ak pomocou služby YouTube poskytnete film alebo hudbu na sledovanie počas spánku, určite by vás pri spustení nového filmu prebudila reklama na načítanie alebo rôzne úrovne hlasitosti. Netreba dodávať, že to môže byť dosť nepríjemné.

Moje riešenie, ktoré vám tu dokážem postaviť, je diaľkové ovládanie na báze Arduina, ktoré umožňuje interakciu s Youtube na diaľku. Diaľkový ovládač je potrebný na zmenu hlavnej hlasitosti môjho počítača, preskakovanie reklám na Youtube a preskakovanie videí na Youtube.

Súčasťou je aj snímač úrovne zvuku, ktorý určuje, aký hlasný reproduktor v skutočnosti je, ktorý je zase možné použiť na automatické zníženie úrovne zvuku pri detekcii hlasných prerušení, ako je reklama.

Nakoniec som do aplikácie pre PC pridal graf na zobrazenie zistených úrovní zvuku.

Riešenie môže byť lepšie upresnené, ale pre mňa úlohu plní.

Krok 1: Potrebné súčasti

Všetky tieto súčiastky dodáva spoločnosť Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANÁLOVÝ DIAĽKOVÝ (315 MHz) + MODUL PRIJÍMAČA (315 MHz)

leobot.net/viewproduct.aspx?id=521

3) MODUL SENZORU DETEKCIE HLASU A ZVUKU MIKROFÓNU (KY-037)

leobot.net/viewproduct.aspx?id=217

Softvér

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Krok 2: Nastavenie hardvéru

1) Pripojte 4-kanálový modul prijímača k Arduinu.

Pin 4-kanálového prijímača-> Pin Arduino Uno

GND-> GND

5V-> 5V

D0-> Digitálne 2

D1-> Digitálne 3

D2-> Digitálny 4

D3-> Digitálne 5

2) Pripojte modul mikrofónu KY-037 k Arduinu

Mikrofón KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3,3V

A0-> Analógový 3

Krok 3: Arduino kód

Prehľad

Logika, ktorou sa Arduino musí riadiť, je nasledovná:

A) Skontrolujte, či prijímač signalizuje nejaké piny.

B) V závislosti od toho, na ktorom IO porte je signál prijatý, je príkaz odoslaný do počítača.

C) Po dokončení všetkých akcií diaľkového ovládania zistite pomocou mikrofónu úroveň zvuku a odošlite ju do počítača.

D) Všetky príkazy odoslané do PC majú formát prvého znaku a potom hodnoty (ak je hodnota potrebná).

E) Z Arduina je do PC odoslaných päť príkazov

a. „U“- zvýšenie hlasitosti

b. „D“- zníženie hlasitosti

c. „S“- Preskočiť pridanie

d. „V“- preskočiť video

e. „A“- Zistená úroveň zvuku, za ktorou nasleduje hodnota

Arduino kód:

Stiahnite si kód Arduino tu:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

neplatné nastavenie () {

Serial.begin (9600);

pinMode (A3, VSTUP);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

prázdna slučka () {

if (digitalRead (in1))

{

Serial.println ("u");

oneskorenie (100);

}

if (digitalRead (in2))

{

Serial.println ("d");

oneskorenie (100);

}

if (digitalRead (in3))

{

Serial.println ("s");

oneskorenie (100);

}

if (digitalRead (in4))

{

Serial.println ("v");

oneskorenie (100);

}

int readVal = analogRead (A3);

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

oneskorenie (50);

}

Krok 4: Kód aplikácie pre počítač (C#. NET)

Kód aplikácie pre počítač (C#. NET)
Kód aplikácie pre počítač (C#. NET)

Aplikácia bude počúvať cez port COM (USB) a bude reagovať podľa toho, aký príkaz dostane. Najjednoduchší spôsob, ako zapnúť a vypnúť zvuk v počítači, je použiť služby Interrop na priamy rozhovor s operačným systémom Windows. Služby Interrop používame aj na presun myši na konkrétne miesto na obrazovke a kliknutie. Aby sme umožnili rôzne veľkosti obrazoviek a zobrazení, umožňujeme používateľovi určiť polohu tlačidiel na pridanie a preskočenie videa.

Na zobrazenie všetkých prijatých zvukových príkazov používame štandardný graf.net.

Windows kód:

Stiahnite si celý projekt tu:

leobot.net/audioadjust.zip

pomocou systému;

pomocou System. Collections. Generic;

pomocou System. ComponentModel;

pomocou System. Data;

pomocou System. Drawing;

pomocou System. Linq;

pomocou System. Text;

pomocou System. Windows. Forms;

pomocou System. Runtime. InteropServices;

pomocou System. IO. Ports;

pomocou System. Threading;

priestor názvov AudioAdjust

{

verejná čiastková trieda 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);

// akcie 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;

verejný formulár1 ()

{

InitializeComponent ();

}

private void Form1_Load (odosielateľ objektu, EventArgs e)

{

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

comboBoxPort. Items. AddRange (názvy);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (odosielateľ objektu, EventArgs e)

{

_serialPort = nový SerialPort ();

_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Nastavenie dosky COM

_serialPort. BaudRate = 9600;

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

inak

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zníženie hlasitosti

}

void _serialPort_DataReceived (odosielateľ objektu, SerialDataReceivedEventArgs e)

{

skúsiť

{

reťazec fullval = _serialPort. ReadLine ();

reťazec com = fullval [0]. ToString ();

prepínač (com)

{

prípad "a":

{

{

// úroveň zvuku

reťazec val = fullval. Replace ("a", "");

int valInt = int. Parse (val);

AddData (valInt);

}

prestávka;

}

prípad „u“:

{

// zvuk hore

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // zníženie hlasitosti

prestávka;

}

prípad „d“:

{

// zvuk dole

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zníženie hlasitosti

prestávka;

}

prípad "s":

{

//preskočiť reklamu

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

prestávka;

}

prípad "v":

{

//preskočiť reklamu

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

prestávka;

}

}

}

chytiť

{

}

// hod nový NotImplementedException ();

}

súkromné neplatné MoveCursorSkipAd ()

{

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

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

}

súkromné neplatné MoveCursorSkipVideo ()

{

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

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

}

verejná prázdnota DoMouseClick ()

{

// Zavolajte importovanú funkciu s aktuálnou pozíciou kurzora

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šiť AddData (vnútorná úroveň)

{

if (enableAudioChange)

{

if (level> = MaxLevel)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zníženie hlasitosti

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zníženie hlasitosti

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zníženie hlasitosti

}

inak

{

if (úroveň <MaxLevel - 0)

{

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // zníženie hlasitosti

}

}

}

SetChart (úroveň);

currentPoint ++;

}

delegát neplatný SetTextCallback (int val);

súkromný prázdny SetChart (int val)

{

// Povinný argument InvokeRequired porovnáva ID vlákna súboru

// volanie vlákna do ID vlákna vytvárajúceho sa vlákna.

// Ak sú tieto vlákna odlišné, vráti hodnotu true.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = nový SetTextCallback (SetChart);

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

}

inak

{

chart1. Séria [0]. Points. AddXY (0, val);

ak (aktuálny bod> = 10)

{

chart1. Séria [0]. Points. RemoveAt (0);

}

}

}

private neplatný textBoxLevel_TextChanged (odosielateľ objektu, EventArgs e)

{

skúsiť

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

chytiť

{

textBoxLevel. Text = MaxLevel + "";

}

}

tlačidlo súkromnej neplatnostiTestSkip_Click (odosielateľ objektu, EventArgs e)

{

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

}

private neplatný textBoxXpos_TextChanged (odosielateľ objektu, EventArgs e)

{

skúsiť

{

adX = int. Parse (textBoxXpos. Text);

}

chytiť

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (odosielateľ objektu, EventArgs e)

{

skúsiť

{

adY = int. Parse (textBoxYpos. Text);

}

chytiť

{

textBoxYpos. Text = adY + "";

}

}

tlačidlo private voidSkipVideo_Click (odosielateľ objektu, EventArgs e)

{

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

}

private neplatné textBoxXposVid_TextChanged (odosielateľ objektu, EventArgs e)

{

skúsiť

{

vidX = int. Parse (textBoxXposVid. Text);

}

chytiť

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (odosielateľ objektu, EventArgs e)

{

skúsiť

{

vidY = int. Parse (textBoxYposVid. Text);

}

chytiť

{

textBoxYposVid. Text = vidY + "";

}

}

private neplatné checkBoxEnable_CheckedChanged (odosielateľ objektu, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

verejná štruktúra BOD

{

public int x;

verejné int y;

}

}

Odporúča: