Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-23 15:02
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)
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:
Klon hvilken som helst fjernkontroll med Arduino Nano: 5 trinn
Klon hvilken som helst fjernkontroll med Arduino Nano: Klon hvilken som helst fjernkontroll med Arduino Nano
Arduino nettleserbasert fjernkontroll (linux): 9 trinn (med bilder)
Arduino nettleserbasert fjernkontroll (linux): Vi har barn. Jeg elsker dem i stykker, men de gjemmer fjernkontrollen for satellitt og TV når de setter på barnekanalene. Etter at dette skjedde daglig i flere år, og etter at min kjære kone lot meg få en
Arduino -bil med L293D og fjernkontroll: 5 trinn
Arduino -bil med L293D og fjernkontroll: Jeg har tilfeldigvis L293D -brikke og IR -fjernkontroll og mottaker. Jeg vil bygge en Arduino -bil uten å kjøpe mye, så jeg tok bare med Arduino firehjulsbilchassis. Siden Tinkercad har L293D og IR -mottaker og Arduino, så jeg laget skisse
IRduino: Arduino fjernkontroll - etterlign en tapt fjernkontroll: 6 trinn
IRduino: Arduino fjernkontroll - Imitate a Lost Remote: Hvis du noen gang har mistet fjernkontrollen for TV -en eller DVD -spilleren, vet du hvor frustrerende det er å måtte gå til, finne og bruke knappene på selve enheten. Noen ganger tilbyr disse knappene ikke engang den samme funksjonaliteten som fjernkontrollen. Motta
Fjernkontroll for PC Youtube og Netflix: 9 trinn (med bilder)
Fjernkontroll for PC Youtube og Netflix: Jeg har min stasjonære PC -måler unna sengen min, så naturligvis liker jeg å se youtube og filmer fra sengen min. Hver gang jeg legger meg, synes jeg at jeg må justere volumet, pause videoen av noen grunner eller bare hoppe over videoen helt