Turinys:

„Arduino Youtube“nuotolinio valdymo pultas miegui („Leobot Electronics“): 4 žingsniai
„Arduino Youtube“nuotolinio valdymo pultas miegui („Leobot Electronics“): 4 žingsniai
Anonim
„Arduino Youtube“nuotolinio valdymo pultas miegui („Leobot Electronics“)
„Arduino Youtube“nuotolinio valdymo pultas miegui („Leobot Electronics“)

„Arduino Youtube“nuotolinio valdymo pultas

Jei miegodami naudojate „YouTube“norėdami žiūrėti filmą ar muziką, jūs tikrai būtumėte pažadinti įkeltos reklamos ar skirtingo garsumo lygio, kai prasidės naujas filmas. Nereikia nė sakyti, kad tai gali būti gana erzinanti.

Taigi, mano sprendimas, kurį jums čia įrodau, kad sukurtumėte sau, yra „Arduino“nuotolinio valdymo pultas, skirtas nuotoliniu būdu sąveikauti su „YouTube“. Nuotolinio valdymo pultas reikalingas norint pakeisti pagrindinį kompiuterio garso stiprumą, praleisti skelbimus „Youtube“ir praleisti vaizdo įrašus „Youtube“.

Taip pat yra garso lygio jutiklis, skirtas nustatyti, koks garsiakalbis iš tikrųjų yra garsus, o tai savo ruožtu gali būti naudojamas automatiškai sumažinti garso lygį, kai aptinkami garsūs trikdžiai, pvz., Reklama.

Galiausiai kompiuterio programoje pridėjau diagramą, kad būtų rodomi aptikti garso lygiai.

Sprendimą galima geriau patobulinti, bet man jis atlieka užduotį.

1 žingsnis: reikalingi komponentai

Visus šiuos komponentus tiekia „Leobot Electronics“(https://leobot.net)

1) „Arduino UNO R3“

leobot.net/viewproduct.aspx?id=530

2) 4 KANALŲ NUOTOLIS (315MHZ) + GAVIMO MODULIS (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MIKROFONINIO BALSO IR GARSO ATSITIKIMO JUTIKLIO MODULIS (KY-037)

leobot.net/viewproduct.aspx?id=217

Programinė įranga

1) „Visual Studio“

visualstudio.microsoft.com/

2) „Arduino IDE“

www.arduino.cc/en/main/software

2 žingsnis: Aparatūros sąranka

1) Prijunkite 4 kanalų imtuvo modulį prie „Arduino“.

4 kanalų imtuvo kaištis-> „Arduino Uno“kaištis

GND-> GND

5V-> 5V

D0-> Skaitmeninis 2

D1-> Skaitmeninis 3

D2-> Skaitmeninis 4

D3-> Skaitmeninis 5

2) Prijunkite mikrofono KY-037 modulį prie „Arduino“

Mikrofonas KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3V

A0-> Analogas 3

3 žingsnis: „Arduino“kodas

Apžvalga

Logika, kurios reikia laikytis „Arduino“, yra tokia:

A) Patikrinkite, ar imtuvas signalizuoja apie kaiščius.

B) Priklausomai nuo to, kuriame IO prievade signalas priimamas, kokia komanda bus siunčiama į kompiuterį.

C) Atlikę visus nuotolinio valdymo veiksmus, nustatykite garso lygį naudodami mikrofoną ir nusiųskite jį į kompiuterį.

D) Visų komandų, siunčiamų į kompiuterį, formatas pirmiausia turi būti simbolis, o tada reikšmė (jei reikia vertės).

E) Yra penkios komandos, siunčiamos iš „Arduino“į kompiuterį

a. „U“- padidinkite garsumą

b. „D“- sumažinkite garsumą

c. „S“- praleisti Pridėti

d. „V“- praleisti vaizdo įrašą

e. „A“- aptiktas garso lygis, po kurio eina vertė

„Arduino“kodas:

Atsisiųskite „Arduino“kodą čia:

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 () {

jei (digitalRead (in1))

{

Serial.println ("u");

vėlavimas (100);

}

jei (digitalRead (in2))

{

Serial.println ("d");

vėlavimas (100);

}

jei (digitalRead (in3))

{

Serial.println ("s");

vėlavimas (100);

}

jei (digitalRead (in4))

{

Serial.println ("v");

vėlavimas (100);

}

int readVal = analogRead (A3);

Serial.println (Eilutė ("a")+ eilutė (skaitytiVal));

vėlavimas (50);

}

4 veiksmas: kompiuterio programos kodas (C#. NET)

Kompiuterio programos kodas (C#. NET)
Kompiuterio programos kodas (C#. NET)

Programa klausysis per COM (USB) prievadą ir reaguos priklausomai nuo to, kokia komanda yra gauta. Paprasčiausias būdas įjungti ir sumažinti garsą kompiuteryje yra naudoti „Interrop“paslaugas tiesiogiai kalbant su „Windows“OS. Mes taip pat naudojame „Interrop“paslaugas, norėdami perkelti pelę į tam tikrą ekrano vietą ir spustelėti. Kad būtų galima naudoti skirtingus ekranus ir rodinių dydžius, leidžiame vartotojui nurodyti praleidimo ir praleidimo vaizdo mygtukų padėtį.

Mes naudojame standartinę.net diagramą, kad galėtume rodyti visas gautas garso komandas.

„Windows“kodas:

Atsisiųskite visą projektą čia:

leobot.net/audioadjust.zip

naudojant sistemą;

naudojant System. Collections. Generic;

naudojant System. ComponentModel;

naudojant System. Data;

naudojant „System. Drawing“;

naudojant System. Linq;

naudojant System. Text;

naudojant System. Windows. Forms;

naudojant System. Runtime. InteropServices;

naudojant System. IO. Ports;

naudojant „System. Threading“;

vardų sritis „AudioAdjust“

{

viešoji dalinė klasė Form1: Forma

{

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

// Pelės veiksmai

privati konst int MOUSEEVENTF_LEFTDOWN = 0x02;

privati konst int MOUSEEVENTF_LEFTUP = 0x04;

privati konst int MOUSEEVENTF_RIGHTDOWN = 0x08;

private const int MOUSEEVENTF_RIGHTUP = 0x10;

[„DllImport“(„user32.dll“)]

statinis išorinis void keybd_event (baitas bVk, baitas bScan, uint dwFlags, int dwExtraInfo);

Atsitiktinis aRand = naujas Atsitiktinis ();

public int Paskutinis lygis = 0;

public int MaxLevel = 255;

statinis SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = klaidinga;

vieša forma1 ()

{

InitializeComponent ();

}

private void Form1_Load (objekto siuntėjas, „EventArgs e“)

{

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

comboBoxPort. Items. AddRange (pavadinimai);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (objekto siuntėjas, „EventArgs e“)

{

_serialPort = naujas SerialPort ();

_serialPort. DataReceived += naujas SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Nustatykite lentą COM

_serialPort. BaudRate = 9600;

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

Kitas

{

_serialPort. Open ();

}

// keybd_event ((baitas) Keys. VolumeDown, 0, 0, 0); // sumažinti garsumą

}

void _serialPort_DataReceived (objekto siuntėjas, SerialDataReceivedEventArgs e)

{

bandyti

{

eilutė fullval = _serialPort. ReadLine ();

eilutė com = fullval [0]. ToString ();

jungiklis (com)

{

atvejis "a":

{

{

// garso lygis

eilutė val = fullval. Replace ("a", "");

int valInt = int. Parse (val);

AddData (valInt);

}

pertrauka;

}

atvejis „u“:

{

// garsas aukštyn

keybd_event ((baitas) Keys. VolumeUp, 0, 0, 0); // sumažinti garsumą

pertrauka;

}

„d“atvejis:

{

// garsas nutildytas

keybd_event ((baitas) Keys. VolumeDown, 0, 0, 0); // sumažinti garsumą

pertrauka;

}

atvejis "s":

{

//praleisti skelbimą

MoveCursorSkipAd ();

Siūlas. Miegas (10);

DoMouseClick ();

pertrauka;

}

atvejis „v“:

{

//praleisti skelbimą

„MoveCursorSkipVideo“();

Siūlas. Miegas (10);

DoMouseClick ();

pertrauka;

}

}

}

pagauti

{

}

// mesti naują NotImplementedException ();

}

private void MoveCursorSkipAd ()

{

Žymeklis. Pozicija = naujas taškas (1140, 725);

Cursor. Position = naujas taškas (adX, adY);

}

private void MoveCursorSkipVideo ()

{

Žymeklis. Pozicija = naujas taškas (1140, 725);

Cursor. Position = naujas taškas (vidX, vidY);

}

public void DoMouseClick ()

{

// Iškviesti importuotą funkciją su dabartine žymeklio padėtimi

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

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

pelės įvykis (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);

pelės įvykis (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);

}

void AddData (int lygis)

{

if (enableAudioChange)

{

jei (lygis> = maksimalus lygis)

{

keybd_event ((baitas) Keys. VolumeDown, 0, 0, 0); // sumažinti garsumą

keybd_event ((baitas) Keys. VolumeDown, 0, 0, 0); // sumažinti garsumą

keybd_event ((baitas) Keys. VolumeDown, 0, 0, 0); // sumažinti garsumą

}

Kitas

{

jei (lygis <MaxLevel - 0)

{

keybd_event ((baitas) Keys. VolumeUp, 0, 0, 0); // sumažinti garsumą

}

}

}

„SetChart“(lygis);

currentPoint ++;

}

delegate void SetTextCallback (int val);

private void SetChart (int val)

{

// „InvokeRequired“reikia palyginti gijos ID

// skambinti gija į kuriančios gijos ID temą.

// Jei šios temos skiriasi, tai grąžina true.

jei (this.chart1. InvokeRequired)

{

SetTextCallback d = naujas SetTextCallback (SetChart);

this. Invoke (d, naujas objektas {val});

}

Kitas

{

diagrama1. Serija [0]. Points. AddXY (0, val);

jei (dabartinis taškas> = 10)

{

diagrama1. Serija [0]. Points. RemoveAt (0);

}

}

}

private void textBoxLevel_TextChanged (objekto siuntėjas, „EventArgs e“)

{

bandyti

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

pagauti

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (objekto siuntėjas, „EventArgs e“)

{

MoveCursorSkipAd ();

Siūlas. Miegas (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (objekto siuntėjas, „EventArgs e“)

{

bandyti

{

adX = int. Parse (textBoxXpos. Text);

}

pagauti

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (objekto siuntėjas, „EventArgs e“)

{

bandyti

{

adY = int. Parse (textBoxYpos. Text);

}

pagauti

{

textBoxYpos. Text = adY + "";

}

}

private void buttonSkipVideo_Click (objekto siuntėjas, „EventArgs e“)

{

„MoveCursorSkipVideo“();

Siūlas. Miegas (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (objekto siuntėjas, „EventArgs e“)

{

bandyti

{

vidX = int. Parse (textBoxXposVid. Text);

}

pagauti

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (objekto siuntėjas, „EventArgs e“)

{

bandyti

{

vidY = int. Parse (textBoxYposVid. Text);

}

pagauti

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (objekto siuntėjas, „EventArgs e“)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

viešoji struktūra PUNKTAS

{

public int x;

viešas int y;

}

}

Rekomenduojamas: