Indholdsfortegnelse:

Arduino Youtube fjernbetjening til at sove (Leobot Electronics): 4 trin
Arduino Youtube fjernbetjening til at sove (Leobot Electronics): 4 trin

Video: Arduino Youtube fjernbetjening til at sove (Leobot Electronics): 4 trin

Video: Arduino Youtube fjernbetjening til at sove (Leobot Electronics): 4 trin
Video: Arduino Course for Beginners - Open-Source Electronics Platform 2024, November
Anonim
Arduino Youtube fjernbetjening til at sove (Leobot Electronics)
Arduino Youtube fjernbetjening til at sove (Leobot Electronics)

Arduino Youtube fjernbetjening

Hvis du bruger Youtube til at give dig en film eller musik til at se, mens du sover, ville du helt sikkert være blevet vækket af enten en belastningsannonce eller forskellige lydstyrkeniveauer, når en ny film starter. Det er overflødigt at sige, at dette kan være ret irriterende.

Så min løsning, jeg beviser for dig her at bygge til dig selv, er en Arduino-baseret fjernbetjening til at interagere med Youtube på afstand. Fjernbetjeningen er påkrævet for at ændre min pc's hovedlydstyrke, springe over annoncer på Youtube og springe videoer over på Youtube.

Der medfølger også en lydnivåsensor til at bestemme, hvor højttaleren faktisk er, som igen kan bruges til automatisk at sænke lydniveauet ved at detektere høje afbrydelser, f.eks. En annonce.

Endelig tilføjede jeg et diagram på pc -appen for at vise de registrerede lydniveauer.

Løsningen kan forbedres bedre, men for mig udfører den opgaven.

Trin 1: Nødvendige komponenter

Alle disse komponenter leveres af Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANAL REMOTE (315MHz) + MODTAGER MODUL (315MHz)

leobot.net/viewproduct.aspx?id=521

3) MIKROFONSTEM & LYDDETEKTIONSENSOR MODUL (KY-037)

leobot.net/viewproduct.aspx?id=217

Software

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Trin 2: Hardwareopsætning

1) Tilslut 4-kanals modtager modulet til Arduino.

4-kanals modtager Pin-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Digital 2

D1-> Digital 3

D2-> Digital 4

D3-> Digital 5

2) Tilslut mikrofon KY-037-modulet til Arduino

Mikrofon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3,3V

A0-> Analog 3

Trin 3: Arduino -kode

Oversigt

Logikken, som Arduino skal følge, er som følger:

A) Kontroller, om modtageren signalerer nogen stifter.

B) Hvilken kommando, der sendes til pc'en, afhængigt af hvilken IO -port signalet modtages på, er.

C) Når det er gjort med alle fjernbetjeningshandlinger, skal du registrere lydniveauet med mikrofonen og sende det til pc'en.

D) Alle kommandoer, der sendes til pc'en, har et format om først at have et tegn og derefter en værdi (hvis en værdi er nødvendig).

E) Der er fem kommandoer sendt fra Arduino til pc'en

en. “U” - Lydstyrke op

b. “D” - Lydstyrke ned

c. “S” - Spring Tilføj

d. “V” - Spring video over

e. “A” - Lydniveau registreret efterfulgt af værdien

Arduino -koden:

Download Arduino -kode her:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

ugyldig opsætning () {

Serial.begin (9600);

pinMode (A3, INPUT);

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

}

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

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

Appen lytter over COM (USB) porten og reagerer afhængigt af hvilken kommando der modtages. Den enkleste måde at skrue op og ned for lyden på pc'en er at bruge Interrop -tjenester til direkte at tale til Windows OS. Vi bruger også Interrop -tjenesterne til at flytte musen til en bestemt position på skærmen og klikke. For at give mulighed for forskellige skærme og visningsstørrelser, tillader vi brugeren at angive placeringen af knapperne til tilføjelse og overspringning af videoer.

Vi bruger et standard.net -diagram til at vise alle lydkommandoer, vi modtager.

Windows -kode:

Hent hele projektet her:

leobot.net/audioadjust.zip

ved hjælp af System;

ved hjælp af System. Collections. Generic;

ved hjælp af System. ComponentModel;

ved hjælp af System. Data;

ved hjælp af System. Drawing;

ved hjælp af System. Linq;

ved hjælp af System. Text;

ved hjælp af System. Windows. Forms;

ved hjælp af System. Runtime. InteropServices;

ved hjælp af System. IO. Ports;

ved hjælp af System. Threading;

navneområde AudioAdjust

{

offentlig delklasse Form1: Form

{

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

// Mus handlinger

privat const int MOUSEEVENTF_LEFTDOWN = 0x02;

privat const int MOUSEEVENTF_LEFTUP = 0x04;

privat const int MOUSEEVENTF_RIGHTDOWN = 0x08;

privat const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport ("user32.dll")]

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

Tilfældig aRand = ny Random ();

public int LastLevel = 0;

public int MaxLevel = 255;

statisk SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

offentlig form1 ()

{

InitializeComponent ();

}

private void Form1_Load (objekt afsender, EventArgs e)

{

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

comboBoxPort. Items. AddRange (navne);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

privat tomrumsknap1_Klik (objektafsender, EventArgs e)

{

_serialPort = ny SerialPort ();

_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Indstil din board -COM

_serialPort. BaudRate = 9600;

hvis (_serialPort. IsOpen) _serialPort. Close ();

andet

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // reducer lydstyrken

}

void _serialPort_DataReceived (objekt afsender, SerialDataReceivedEventArgs e)

{

prøve

{

string fullval = _serialPort. ReadLine ();

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

switch (com)

{

tilfælde "a":

{

{

// lydniveau

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

int valInt = int. Parse (val);

AddData (valInt);

}

pause;

}

sag "u":

{

// lyd op

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // reducer lydstyrken

pause;

}

sag "d":

{

// lyd ned

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // reducer lydstyrken

pause;

}

sag "s":

{

//Spring annoncen over

MoveCursorSkipAd ();

Tråd. Sovende (10);

DoMouseClick ();

pause;

}

sag "v":

{

//Spring annoncen over

MoveCursorSkipVideo ();

Tråd. Sovende (10);

DoMouseClick ();

pause;

}

}

}

fangst

{

}

// smid ny NotImplementedException ();

}

private void MoveCursorSkipAd ()

{

Markør. Position = nyt punkt (1140, 725);

Cursor. Position = nyt punkt (adX, adY);

}

private void MoveCursorSkipVideo ()

{

Cursor. Position = new Point (1140, 725);

Cursor. Position = new Point (vidX, vidY);

}

offentligt tomrum DoMouseClick ()

{

// Ring til den importerede funktion med markørens aktuelle position

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

}

ugid AddData (int level)

{

hvis (enableAudioChange)

{

hvis (niveau> = MaxLevel)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // reducer lydstyrken

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // reducer lydstyrken

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // reducer lydstyrken

}

andet

{

hvis (niveau <MaxLevel - 0)

{

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // reducer lydstyrken

}

}

}

SetChart (niveau);

currentPoint ++;

}

delegere void SetTextCallback (int val);

private void SetChart (int val)

{

// InvokeRequired required sammenligner tråd -id'et for

// kalder tråd til tråd -id'et for den oprettende tråd.

// Hvis disse tråde er forskellige, returneres det sandt.

hvis (this.chart1. InvokeRequired)

{

SetTextCallback d = ny SetTextCallback (SetChart);

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

}

andet

{

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

hvis (currentPoint> = 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (objekt afsender, EventArgs e)

{

prøve

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

fangst

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (objekt afsender, EventArgs e)

{

MoveCursorSkipAd ();

Tråd. Sovende (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (objekt afsender, EventArgs e)

{

prøve

{

adX = int. Parse (textBoxXpos. Text);

}

fangst

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (objekt afsender, EventArgs e)

{

prøve

{

adY = int. Parse (textBoxYpos. Text);

}

fangst

{

textBoxYpos. Text = adY + "";

}

}

private void buttonSkipVideo_Click (objekt afsender, EventArgs e)

{

MoveCursorSkipVideo ();

Tråd. Sovende (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (objekt afsender, EventArgs e)

{

prøve

{

vidX = int. Parse (textBoxXposVid. Text);

}

fangst

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (objekt afsender, EventArgs e)

{

prøve

{

vidY = int. Parse (textBoxYposVid. Text);

}

fangst

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (objekt afsender, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

offentlig struktur POINT

{

offentlig int x;

offentlig int y;

}

}

Anbefalede: