Sisällysluettelo:

Arduino Youtube -kaukosäädin nukkumiseen (Leobot Electronics): 4 vaihetta
Arduino Youtube -kaukosäädin nukkumiseen (Leobot Electronics): 4 vaihetta

Video: Arduino Youtube -kaukosäädin nukkumiseen (Leobot Electronics): 4 vaihetta

Video: Arduino Youtube -kaukosäädin nukkumiseen (Leobot Electronics): 4 vaihetta
Video: Ultrasonic Distance Visualization (Arduino with Unity) 2024, Marraskuu
Anonim
Arduino Youtube -kaukosäädin nukkumiseen (Leobot Electronics)
Arduino Youtube -kaukosäädin nukkumiseen (Leobot Electronics)

Arduino Youtube -kaukosäädin

Jos käytät Youtubea elokuvan tai musiikin katsomiseen nukkuessasi, olisit varmasti herännyt joko latausmainoksella tai eri äänenvoimakkuudella uuden elokuvan alkaessa. On sanomattakin selvää, että tämä voi olla melko ärsyttävää.

Joten ratkaisuni, jonka osoitan sinulle täällä rakentamaan itsellesi, on Arduino-pohjainen kaukosäädin, joka on vuorovaikutuksessa Youtuben kanssa etänä. Kaukosäädintä tarvitaan tietokoneen päääänenvoimakkuuden muuttamiseen, mainosten ohittamiseen Youtubessa ja videoiden ohittamiseen Youtubessa.

Mukana on myös äänitason anturi, joka määrittää kaiuttimen äänenvoimakkuuden, jota voidaan puolestaan käyttää automaattisesti äänenvoimakkuuden alentamiseen, kun havaitaan kovia keskeytyksiä, kuten mainos.

Lopuksi lisäsin kaavion PC -sovellukseen havaittujen äänitasojen näyttämiseksi.

Ratkaisu voidaan parantaa, mutta minulle se täyttää tehtävän.

Vaihe 1: Tarvittavat komponentit

Kaikki nämä komponentit toimittaa Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANAVAN KAUKOSÄÄDIN (315MHZ) + VASTAANOTINMODUULI (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MIKROFONIN ÄÄNEN JA ÄÄNEN TUNNISTUSANTURIMODULI (KY-037)

leobot.net/viewproduct.aspx?id=217

Ohjelmisto

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Vaihe 2: Laitteiston asennus

1) Liitä 4-kanavainen vastaanotinmoduuli Arduinoon.

4-kanavainen vastaanottimen nasta-> Arduino Uno -tappi

GND-> GND

5V-> 5V

D0-> Digitaalinen 2

D1-> Digitaalinen 3

D2-> Digitaalinen 4

D3-> Digitaalinen 5

2) Liitä KY-037-mikrofonimoduuli Arduinoon

Mikrofoni KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3V

A0-> Analog 3

Vaihe 3: Arduino -koodi

Yleiskatsaus

Arduinon on noudatettava seuraavaa logiikkaa:

A) Tarkista, ilmoittaako vastaanotin nastoista.

B) Riippuen siitä, millä IO -portilla signaali vastaanotetaan, mikä komento lähetetään tietokoneelle.

C) Kun olet tehnyt kaikki kaukosäätimen toiminnot, tunnista äänitaso mikrofonilla ja lähetä se tietokoneelle.

D) Kaikissa PC: lle lähetetyissä komennoissa on muoto, jossa on ensin merkki ja sitten arvo (jos arvoa tarvitaan).

E) Arduinolta on tietokoneeseen lähetetty viisi komentoa

a. "U" - äänenvoimakkuuden lisäys

b. "D" - äänenvoimakkuuden vähennys

c. "S" - Ohita lisäys

d. "V" - Ohita video

e. “A” - Äänitaso havaittu ja sen jälkeen arvo

Arduino -koodi:

Lataa Arduino -koodi täältä:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

void setup () {

Sarja.alku (9600);

pinMode (A3, INPUT);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

void loop () {

jos (digitalRead (in1))

{

Serial.println ("u");

viive (100);

}

jos (digitalRead (in2))

{

Serial.println ("d");

viive (100);

}

jos (digitalRead (in3))

{

Serial.println ("s");

viive (100);

}

jos (digitalRead (in4))

{

Serial.println ("v");

viive (100);

}

int readVal = analoginenLue (A3);

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

viive (50);

}

Vaihe 4: PC -sovelluskoodi (C#. NET)

PC -sovelluskoodi (C#. NET)
PC -sovelluskoodi (C#. NET)

Sovellus kuuntelee COM (USB) -portin kautta ja reagoi sen mukaan, mikä komento on vastaanotettu. Yksinkertaisin tapa kääntää ääntä ylös ja alas tietokoneessa on käyttää Interrop -palveluita puhuakseen suoraan Windows -käyttöjärjestelmään. Käytämme myös Interrop -palveluita hiiren siirtämiseen tiettyyn kohtaan näytöllä ja napsauttamalla sitä. Jotta näytöt ja näkymän koot olisivat erilaiset, sallimme käyttäjän määrittää ohitus- ja ohitusvideopainikkeiden sijainnin.

Käytämme normaalia.net -kaaviota näyttääksemme kaikki saamamme äänikomennot.

Windows -koodi:

Lataa koko projekti täältä:

leobot.net/audioadjust.zip

järjestelmän käyttö;

käyttämällä System. Collections. Generic;

käyttämällä System. ComponentModel;

käyttämällä System. Dataa;

käyttäen System. Drawing;

käyttämällä System. Linq;

käyttämällä System. Text;

käyttämällä System. Windows. Forms;

käyttämällä System. Runtime. InteropServices;

käyttämällä System. IO. Portsia;

käyttämällä System. Threading;

nimiavaruus AudioAdjust

{

julkinen osaluokka Lomake 1: Lomake

{

[DllImport ("User32. Dll")]

julkinen staattinen ulkoinen pitkä SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

julkinen staattinen ulkoinen bool ClientToScreen (IntPtr hWnd, ref POINT point);

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

julkinen staattinen ulkoinen void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Hiiren toiminnot

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

staattinen ulkoinen void keybd_event (tavu bVk, tavu bScan, uint dwFlags, int dwExtraInfo);

Satunnainen aRand = uusi Satunnainen ();

public int LastLevel = 0;

public int MaxLevel = 255;

staattinen SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = epätosi;

julkinen lomake1 ()

{

InitializeComponent ();

}

private void Form1_Load (objektin lähettäjä, EventArgs e)

{

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

comboBoxPort. Items. AddRange (nimet);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (objektin lähettäjä, EventArgs e)

{

_serialPort = uusi SerialPort ();

_serialPort. DataReceived += uusi SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Aseta kortti COM

_serialPort. BaudRate = 9600;

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

muu

{

_serialPort. Open ();

}

// keybd_event ((tavu) Keys. VolumeDown, 0, 0, 0); // vähennä äänenvoimakkuutta

}

void _serialPort_DataReceived (objektin lähettäjä, SerialDataReceivedEventArgs e)

{

yrittää

{

merkkijono fullval = _serialPort. ReadLine ();

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

kytkin (com)

{

tapaus "a":

{

{

// äänitaso

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

int valInt = int. Parse (val);

AddData (valInt);

}

tauko;

}

tapaus "u":

{

// ääni ylös

keybd_event ((tavu) Keys. VolumeUp, 0, 0, 0); // vähennä äänenvoimakkuutta

tauko;

}

tapaus "d":

{

// ääni pois

keybd_event ((tavu) Keys. VolumeDown, 0, 0, 0); // vähennä äänenvoimakkuutta

tauko;

}

tapaus "s":

{

//ohita mainos

MoveCursorSkipAd ();

Kierre. Nukkuu (10);

DoMouseClick ();

tauko;

}

tapaus "v":

{

//ohita mainos

MoveCursorSkipVideo ();

Kierre. Nukkuu (10);

DoMouseClick ();

tauko;

}

}

}

saada kiinni

{

}

// heittää uusi NotImplementedException ();

}

private void MoveCursorSkipAd ()

{

Kohdistimen sijainti = uusi piste (1140, 725);

Cursor. Position = uusi piste (adX, adY);

}

private void MoveCursorSkipVideo ()

{

Kohdistimen sijainti = uusi piste (1140, 725);

Cursor. Position = uusi piste (vidX, vidY);

}

public void DoMouseClick ()

{

// Soita tuodulle funktiolle kohdistimen nykyisen sijainnin kanssa

uint X = (uint) Kohdistimen sijainti X;

uint Y = (uint) Cursor. Position. Y;

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

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

}

void AddData (int -taso)

{

if (enableAudioChange)

{

jos (taso> = MaxLevel)

{

keybd_event ((tavu) Keys. VolumeDown, 0, 0, 0); // vähennä äänenvoimakkuutta

keybd_event ((tavu) Keys. VolumeDown, 0, 0, 0); // vähennä äänenvoimakkuutta

keybd_event ((tavu) Keys. VolumeDown, 0, 0, 0); // vähennä äänenvoimakkuutta

}

muu

{

jos (taso <MaxLevel - 0)

{

keybd_event ((tavu) Keys. VolumeUp, 0, 0, 0); // vähennä äänenvoimakkuutta

}

}

}

SetChart (taso);

currentPoint ++;

}

delegate void SetTextCallback (int val);

yksityinen mitätön SetChart (int val)

{

// InvokeRequired vaaditaan vertaa ketjun tunnusta

// kutsuu säikeen luovan säikeen säietunnukselle.

// Jos nämä säikeet ovat erilaisia, se palauttaa arvon true.

jos (this.chart1. InvokeRequired)

{

SetTextCallback d = uusi SetTextCallback (SetChart);

this. Invoke (d, uusi objekti {val});

}

muu

{

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

jos (currentPoint> = 10)

{

kaavio1. Sarja [0]. Pisteet. RemoveAt (0);

}

}

}

private void textBoxLevel_TextChanged (objektin lähettäjä, EventArgs e)

{

yrittää

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

saada kiinni

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (objektin lähettäjä, EventArgs e)

{

MoveCursorSkipAd ();

Kierre. Nukkuu (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (objektin lähettäjä, EventArgs e)

{

yrittää

{

adX = int. Parse (textBoxXpos. Text);

}

saada kiinni

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (objektin lähettäjä, EventArgs e)

{

yrittää

{

adY = int. Parse (textBoxYpos. Text);

}

saada kiinni

{

textBoxYpos. Text = adY + "";

}

}

private void buttonSkipVideo_Click (objektin lähettäjä, EventArgs e)

{

MoveCursorSkipVideo ();

Kierre. Nukkuu (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (objektin lähettäjä, EventArgs e)

{

yrittää

{

vidX = int. Parse (textBoxXposVid. Text);

}

saada kiinni

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (objektin lähettäjä, EventArgs e)

{

yrittää

{

vidY = int. Parse (textBoxYposVid. Text);

}

saada kiinni

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (objektin lähettäjä, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

julkinen rakenne POINT

{

public int x;

julkinen int;

}

}

Suositeltava: