Kazalo:

Arduino Youtube daljinski upravljalnik za spanje (Leobot Electronics): 4 koraki
Arduino Youtube daljinski upravljalnik za spanje (Leobot Electronics): 4 koraki

Video: Arduino Youtube daljinski upravljalnik za spanje (Leobot Electronics): 4 koraki

Video: Arduino Youtube daljinski upravljalnik za spanje (Leobot Electronics): 4 koraki
Video: 📸 SLIDER para camara. El mas facil de hacer 2022 📸 2024, November
Anonim
Arduino Youtube daljinski upravljalnik za spanje (Leobot Electronics)
Arduino Youtube daljinski upravljalnik za spanje (Leobot Electronics)

Arduino Youtube daljinski upravljalnik

Če uporabljate Youtube za ogled filma ali glasbe med spanjem, bi vas ob zagonu novega filma zagotovo zbudil oglas za nalaganje ali drugačna glasnost. Ni treba posebej poudarjati, da je to lahko precej nadležno.

Torej, moja rešitev, ki vam jo dokazujem tukaj, da si ustvarite zase, je daljinski upravljalnik na osnovi Arduina za interakcijo z Youtube na daljavo. Daljinski upravljalnik je potreben za spreminjanje glasnosti glavnega zvoka v računalniku, preskakovanje oglasov na Youtube in preskakovanje videoposnetkov na Youtube.

Vključen je tudi senzor nivoja zvoka za ugotavljanje, kako glasen je zvočnik, kar lahko nato uporabite za samodejno znižanje ravni zvoka ob zaznavi glasnih prekinitev, kot je oglas.

Nazadnje sem v aplikacijo za računalnik dodal grafikon za prikaz zaznanih ravni zvoka.

Rešitev je lahko bolje prečiščena, vendar zame opravi nalogo.

Korak: Potrebne komponente

Vse te komponente dobavlja Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 DALJINSKI DALJINSKI KANAL (315MHZ) + PRIJEMNI MODUL (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MODUL SENZORJA MIKROFONSKEGA GLASA IN ZVOČNEGA DETEKCIJE (KY-037)

leobot.net/viewproduct.aspx?id=217

Programska oprema

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

2. korak: Namestitev strojne opreme

1) Priključite 4-kanalni sprejemniški modul na Arduino.

4-kanalni sprejemnik Pin-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Digital 2

D1-> Digital 3

D2-> Digital 4

D3-> Digital 5

2) Priključite modul mikrofona KY-037 na Arduino

Mikrofon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3,3 V.

A0-> Analogni 3

3. korak: Arduino koda

Pregled

Logika, ki ji mora slediti Arduino, je naslednja:

A) Preverite, ali sprejemnik signalizira kakršne koli zatiče.

B) Odvisno od tega, katera vhodna / izhodna vrata se signal sprejme, je kateri ukaz bo poslan v računalnik.

C) Ko končate vsa dejanja z daljinskim upravljalnikom, z mikrofonom zaznajte raven zvoka in jo pošljite v računalnik.

D) Vsi ukazi, poslani v osebni računalnik, imajo obliko najprej znak, nato vrednost (če je vrednost potrebna).

E) Iz Arduina je v računalnik poslanih pet ukazov

a. "U" - Povečanje glasnosti

b. “D” - zmanjšanje glasnosti

c. “S” - Preskoči dodajanje

d. »V« - Preskoči video

e. "A" - Zaznana raven zvoka, ki ji sledi vrednost

Koda Arduino:

Prenesite Arduino Code tukaj:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

void setup () {

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

zamuda (100);

}

if (digitalRead (in2))

{

Serial.println ("d");

zamuda (100);

}

če (digitalRead (in3))

{

Serial.println ("s");

zamuda (100);

}

if (digitalRead (in4))

{

Serial.println ("v");

zamuda (100);

}

int readVal = analogRead (A3);

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

zamuda (50);

}

4. korak: Koda aplikacije za računalnik (C#. NET)

Koda aplikacije za računalnik (C#. NET)
Koda aplikacije za računalnik (C#. NET)

Aplikacija bo poslušala prek vrat COM (USB) in reagirala glede na prejeti ukaz. Najpreprostejši način za povečanje in zmanjšanje zvoka v računalniku je uporaba storitev Interrop za neposreden govor z operacijskim sistemom Windows. Storitve Interrop uporabljamo tudi za premik miške na določeno mesto na zaslonu in klik. Da bi omogočili različne zaslone in velikosti ogledov, uporabniku omogočamo, da določi položaj gumbov za preskok dodajanja in preskakovanja videa.

Za prikaz vseh prejetih zvočnih ukazov uporabljamo standardni.net grafikon.

Koda sistema Windows:

Celoten projekt prenesite tukaj:

leobot.net/audioadjust.zip

uporaba sistema;

z uporabo System. Collections. Generic;

z uporabo System. ComponentModel;

z uporabo System. Data;

uporaba System. Drawing;

z uporabo System. Linq;

z uporabo System. Text;

z uporabo System. Windows. Forms;

z uporabo System. Runtime. InteropServices;

z uporabo System. IO. Ports;

z uporabo System. Threading;

imenski prostor AudioAdjust

{

javni delni razred Obrazec 1: Obrazec

{

[DllImport ("User32. Dll")]

javni statični zunanji dolgi SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

javni statični zunanji bool ClientToScreen (IntPtr hWnd, ref POINT point);

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

javna statična zunanja void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Dejanja miške

private const int MOUSEEVENTF_LEFTDOWN = 0x02;

private const int MOUSEEVENTF_LEFTUP = 0x04;

private const int MOUSEEVENTF_RIGHTDOWN = 0x08;

zasebni const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport ("user32.dll")]

statični zunanji void keybd_event (bajt bVk, bajt bScan, uint dwFlags, int dwExtraInfo);

Naključni aRand = nov Random ();

public int LastLevel = 0;

javni int MaxLevel = 255;

statični SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

javni obrazec1 ()

{

InitializeComponent ();

}

zasebna praznina Form1_Load (pošiljatelj objekta, EventArgs e)

{

niz imena = System. IO. Ports. SerialPort. GetPortNames ();

comboBoxPort. Items. AddRange (imena);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (pošiljatelj objekta, EventArgs e)

{

_serialPort = nov SerialPort ();

_serialPort. DataReceived += nov SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Nastavite COM na plošči

_serialPort. BaudRate = 9600;

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

drugače

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zmanjšanje glasnosti

}

void _serialPort_DataReceived (pošiljatelj objekta, SerialDataReceivedEventArgs e)

{

poskusite

{

niz fullval = _serialPort. ReadLine ();

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

stikalo (com)

{

primer "a":

{

{

// raven zvoka

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

int valInt = int. Parse (val);

AddData (valInt);

}

zlom;

}

primer "u":

{

// zvok navzgor

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // zmanjšanje glasnosti

zlom;

}

primer "d":

{

// zvok dol

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zmanjšanje glasnosti

zlom;

}

velika črka "s":

{

//preskočite oglas

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

zlom;

}

primer "v":

{

//preskočite oglas

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

zlom;

}

}

}

ulov

{

}

// vrže novo NotImplementedException ();

}

zasebna praznina MoveCursorSkipAd ()

{

Cursor. Position = nova točka (1140, 725);

Cursor. Position = nova točka (adX, adY);

}

zasebna praznina MoveCursorSkipVideo ()

{

Cursor. Position = nova točka (1140, 725);

Cursor. Position = nova točka (vidX, vidY);

}

javna praznina DoMouseClick ()

{

// Pokličemo uvoženo funkcijo s trenutnim položajem kazalca

uint X = (uint) kazalec.pozicija. X;

uint Y = (uint) kurzor.pozicija. Y;

mouse_event (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);

mouse_event (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);

}

void AddData (int raven)

{

if (enableAudioChange)

{

if (raven> = MaxLevel)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zmanjšanje glasnosti

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zmanjšanje glasnosti

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zmanjšanje glasnosti

}

drugače

{

if (raven <MaxLevel - 0)

{

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // zmanjšanje glasnosti

}

}

}

SetChart (raven);

currentPoint ++;

}

delegate void SetTextCallback (int val);

zasebna praznina SetChart (int val)

{

// InvokeRequired required primerja ID niti

// klicanje niti na ID niti ustvarjajoče niti.

// Če so te niti različne, se vrne true.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = nov SetTextCallback (SetChart);

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

}

drugače

{

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

če (trenutna točka> = 10)

{

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

}

}

}

zasebna praznina textBoxLevel_TextChanged (pošiljatelj objekta, EventArgs e)

{

poskusite

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

ulov

{

textBoxLevel. Text = MaxLevel + "";

}

}

zasebni gumb za prazninoTestSkip_Click (pošiljatelj objekta, EventArgs e)

{

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

}

zasebna praznina textBoxXpos_TextChanged (pošiljatelj objekta, EventArgs e)

{

poskusite

{

adX = int. Parse (textBoxXpos. Text);

}

ulov

{

textBoxXpos. Text = adX + "";

}

}

zasebna praznina textBoxYpos_TextChanged (pošiljatelj objekta, EventArgs e)

{

poskusite

{

adY = int. Parse (textBoxYpos. Text);

}

ulov

{

textBoxYpos. Text = adY + "";

}

}

zasebni gumb voidSkipVideo_Click (pošiljatelj objekta, EventArgs e)

{

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

}

zasebna praznina textBoxXposVid_TextChanged (pošiljatelj objekta, EventArgs e)

{

poskusite

{

vidX = int. Parse (textBoxXposVid. Text);

}

ulov

{

textBoxXposVid. Text = vidX + "";

}

}

zasebna praznina textBoxYposVid_TextChanged (pošiljatelj objekta, EventArgs e)

{

poskusite

{

vidY = int. Parse (textBoxYposVid. Text);

}

ulov

{

textBoxYposVid. Text = vidY + "";

}

}

zasebna praznina checkBoxEnable_CheckedChanged (pošiljatelj objekta, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

javna struktura TOČKA

{

javni int x;

javni int y;

}

}

Priporočena: