Innholdsfortegnelse:

Arduino Youtube fjernkontroll for å sove (Leobot Electronics): 4 trinn
Arduino Youtube fjernkontroll for å sove (Leobot Electronics): 4 trinn

Video: Arduino Youtube fjernkontroll for å sove (Leobot Electronics): 4 trinn

Video: Arduino Youtube fjernkontroll for å sove (Leobot Electronics): 4 trinn
Video: ESP32 Turorial 1 - Introduction to SunFounder's ESP32 IoT Learnig kit Software and Arduino IDE 2024, Juli
Anonim
Arduino Youtube fjernkontroll for å sove (Leobot Electronics)
Arduino Youtube fjernkontroll for å sove (Leobot Electronics)

Arduino Youtube Remote

Hvis du bruker Youtube til å gi deg en film eller musikk å se mens du sover, ville du sikkert ha blitt vekket av enten en lasteannonse eller forskjellige volumnivåer når en ny film starter. Unødvendig å si at dette kan være ganske irriterende.

Så min løsning jeg beviser for deg her å bygge for deg selv er en Arduino-basert fjernkontroll for å samhandle med Youtube på avstand. Fjernkontrollen er nødvendig for å endre PC -ens hovedlydvolum, hoppe over annonser på Youtube og hoppe over videoer på Youtube.

Det følger også med en lydnivåsensor for å bestemme hvor høyt høyttaleren faktisk er, som igjen kan brukes til automatisk å senke lydnivået ved å oppdage høye avbrudd, for eksempel en annonse.

Til slutt la jeg til et diagram på PC -appen for å vise de oppdagede lydnivåene.

Løsningen kan forbedres bedre, men for meg utfører den oppgaven.

Trinn 1: Komponenter som trengs

Alle disse komponentene er levert av Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANAL FJERN (315MHZ) + MOTTAKER MODUL (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MIKROFONSTEMME OG LYDDETEKSJONSENSOR MODUL (KY-037)

leobot.net/viewproduct.aspx?id=217

Programvare

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Trinn 2: Maskinvareoppsett

1) Koble 4-kanals mottakermodulen til Arduino.

4-kanals mottakerpinne-> Arduino Uno-pinne

GND-> GND

5V-> 5V

D0-> Digital 2

D1-> Digital 3

D2-> Digital 4

D3-> Digital 5

2) Koble mikrofon KY-037-modulen til Arduino

Mikrofon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3,3V

A0-> Analog 3

Trinn 3: Arduino -kode

Oversikt

Logikken som Arduino må følge er som følger:

A) Sjekk om mottakeren signaliserer noen pinner.

B) Avhengig av hvilken IO -port signalet mottas på, er hvilken kommando som skal sendes til PC -en.

C) Når du er ferdig med alle fjernkontrollhandlinger, oppdager du lydnivået med mikrofonen og sender det til PCen.

D) Alle kommandoer som sendes til PC -en har et format for først å ha et tegn og deretter en verdi (hvis en verdi er nødvendig).

E) Det er fem kommandoer sendt fra Arduino til PCen

en. "U" - Volum opp

b. “D” - Volum ned

c. “S” - Hopp over Legg til

d. “V” - Hopp over video

e. "A" - Lydnivå oppdaget etterfulgt av verdien

Arduino -koden:

Last ned Arduino -koden her:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

ugyldig oppsett () {

Serial.begin (9600);

pinMode (A3, INNGANG);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

void loop () {

hvis (digitalRead (in1))

{

Serial.println ("u");

forsinkelse (100);

}

hvis (digitalRead (in2))

{

Serial.println ("d");

forsinkelse (100);

}

hvis (digitalRead (in3))

{

Serial.println ("s");

forsinkelse (100);

}

hvis (digitalRead (in4))

{

Serial.println ("v");

forsinkelse (100);

}

int readVal = analogRead (A3);

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

forsinkelse (50);

}

Trinn 4: PC -appkode (C#. NET)

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

Appen vil lytte over COM (USB) -porten og reagere avhengig av hvilken kommando som mottas. Den enkleste måten å skru lyden opp og ned på PC -en er å bruke Interrop -tjenester for å snakke direkte til Windows OS. Vi bruker også Interrop -tjenestene til å flytte musen til en bestemt posisjon på skjermen og klikke. For å tillate forskjellige skjermer og visningsstørrelser, lar vi brukeren spesifisere plasseringen til knappene for hopp over og hopp over video.

Vi bruker et standard.net -diagram for å vise alle lydkommandoer vi mottar.

Windows -kode:

Last ned hele prosjektet her:

leobot.net/audioadjust.zip

bruker System;

bruker System. Collections. Generic;

bruker System. ComponentModel;

bruker System. Data;

bruker System. Drawing;

bruker System. Linq;

bruker System. Text;

bruker System. Windows. Forms;

bruker System. Runtime. InteropServices;

bruker System. IO. Ports;

bruker System. Threading;

navneplass AudioAdjust

{

offentlig delklasse Form1: Skjema

{

[DllImport ("User32. Dll")]

offentlig statisk ekstern lang SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

offentlig statisk ekstern 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);

// Mushandlinger

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

statisk eksternt tomrom keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

Tilfeldig aRand = ny Tilfeldig ();

public int LastLevel = 0;

offentlig int MaxLevel = 255;

statisk SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

offentlig skjema1 ()

{

InitializeComponent ();

}

private void Form1_Load (objektavsender, EventArgs e)

{

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

comboBoxPort. Items. AddRange (navn);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (objektavsender, EventArgs e)

{

_serialPort = ny SerialPort ();

_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Still inn brettets COM

_serialPort. BaudRate = 9600;

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

ellers

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // redusere volumet

}

void _serialPort_DataReceived (objektavsender, SerialDataReceivedEventArgs e)

{

prøve

{

string fullval = _serialPort. ReadLine ();

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

bytte (com)

{

tilfelle "a":

{

{

// lydnivå

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

int valInt = int. Parse (val);

AddData (valInt);

}

gå i stykker;

}

tilfelle "u":

{

// lyd opp

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // redusere volumet

gå i stykker;

}

tilfelle "d":

{

// lyd ned

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // redusere volumet

gå i stykker;

}

saker :

{

// skipAd

MoveCursorSkipAd ();

Tråd. Sovende (10);

DoMouseClick ();

gå i stykker;

}

sak "v":

{

// skipAd

MoveCursorSkipVideo ();

Tråd. Sovende (10);

DoMouseClick ();

gå i stykker;

}

}

}

å fange

{

}

// kast ny NotImplementedException ();

}

private void MoveCursorSkipAd ()

{

Markør. Posisjon = nytt punkt (1140, 725);

Markør. Posisjon = nytt punkt (adX, adY);

}

private void MoveCursorSkipVideo ()

{

Markør. Posisjon = nytt punkt (1140, 725);

Markør. Posisjon = nytt punkt (vidX, vidY);

}

offentlig tomrom DoMouseClick ()

{

// Ring den importerte funksjonen med markørens nåværende posisjon

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

}

void AddData (int level)

{

hvis (enableAudioChange)

{

hvis (nivå> = Maks. nivå)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // redusere volumet

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // redusere volumet

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // redusere volumet

}

ellers

{

hvis (nivå <Maks. nivå - 0)

{

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // redusere volumet

}

}

}

SetChart (nivå);

currentPoint ++;

}

delegere void SetTextCallback (int val);

private void SetChart (int val)

{

// InvokeRequired required sammenligner tråd -ID -en til

// kaller tråden til tråd -ID -en til den opprettende tråden.

// Hvis disse trådene er forskjellige, returneres det sant.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = ny SetTextCallback (SetChart);

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

}

ellers

{

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

hvis (currentPoint> = 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (objektavsender, EventArgs e)

{

prøve

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

å fange

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (objektavsender, EventArgs e)

{

MoveCursorSkipAd ();

Tråd. Sovende (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (avsender av objekt, EventArgs e)

{

prøve

{

adX = int. Parse (textBoxXpos. Text);

}

å fange

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (objektavsender, EventArgs e)

{

prøve

{

adY = int. Parse (textBoxYpos. Text);

}

å fange

{

textBoxYpos. Text = adY + "";

}

}

private void buttonSkipVideo_Click (objektavsender, EventArgs e)

{

MoveCursorSkipVideo ();

Tråd. Sovende (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (objektavsender, EventArgs e)

{

prøve

{

vidX = int. Parse (textBoxXposVid. Text);

}

å fange

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (avsender av objekt, EventArgs e)

{

prøve

{

vidY = int. Parse (textBoxYposVid. Text);

}

å fange

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (avsender av objekt, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

offentlig struktur POINT

{

offentlig int x;

offentlig int y;

}

}

Anbefalt: