Innehållsförteckning:

Arduino Youtube fjärrkontroll för att sova (Leobot Electronics): 4 steg
Arduino Youtube fjärrkontroll för att sova (Leobot Electronics): 4 steg

Video: Arduino Youtube fjärrkontroll för att sova (Leobot Electronics): 4 steg

Video: Arduino Youtube fjärrkontroll för att sova (Leobot Electronics): 4 steg
Video: 30 Ultimate Windows 10 Tips and Tricks for 2020 2024, November
Anonim
Arduino Youtube fjärrkontroll för att sova (Leobot Electronics)
Arduino Youtube fjärrkontroll för att sova (Leobot Electronics)

Arduino Youtube Remote

Om du använder Youtube för att ge dig en film eller musik att titta på medan du sover skulle du säkert ha väckts av antingen en laddningsannons eller olika volymnivåer när en ny film startar. Naturligtvis kan detta vara ganska irriterande.

Så min lösning jag bevisar för dig här att bygga själv är en Arduino-baserad fjärrkontroll för att interagera med Youtube på avstånd. Fjärrkontrollen krävs för att ändra datorns huvudljudvolym, hoppa över annonser på Youtube och hoppa över videor på Youtube.

Dessutom ingår en ljudnivåsensor för att avgöra hur högtalaren faktiskt är, som i sin tur kan användas för att automatiskt sänka ljudnivån vid detektering av höga avbrott som en annons.

Slutligen lade jag till ett diagram i PC -appen för att visa de upptäckta ljudnivåerna.

Lösningen kan förbättras bättre men för mig klarar den uppgiften.

Steg 1: Komponenter som behövs

Alla dessa komponenter levereras av Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANAL FJÄRRKONTROLL (315MHz) + MOTTAGARMODUL (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MIKROFONRÖST & LJUDDETEKTIONSSENSOR MODUL (KY-037)

leobot.net/viewproduct.aspx?id=217

programvara

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Steg 2: Maskinvaruinstallation

1) Anslut 4-kanals mottagarmodulen till Arduino.

4-kanals mottagarstift-> Arduino Uno-stift

GND-> GND

5V-> 5V

D0-> Digital 2

D1-> Digital 3

D2-> Digital 4

D3-> Digital 5

2) Anslut mikrofon KY-037-modulen till Arduino

Mikrofon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3,3V

A0-> Analog 3

Steg 3: Arduino -kod

Översikt

Logiken som Arduino måste följa är följande:

A) Kontrollera om mottagaren signalerar några stift.

B) Beroende på vilken IO -port signalen tas emot vid är vilket kommando som kommer att skickas till datorn.

C) När du har gjort alla fjärrkontrollsåtgärder upptäcker du ljudnivån med mikrofonen och skickar den till datorn.

D) Alla kommandon som skickas till datorn har ett format att först ha ett tecken och sedan ett värde (om ett värde behövs).

E) Det finns fem kommandon som skickas från Arduino till datorn

a. “U” - Volym upp

b. “D” - Volym ned

c. “S” - Hoppa över Lägg till

d. “V” - Hoppa över video

e. “A” - Ljudnivå detekterad följt av värdet

Arduino -koden:

Ladda ner Arduino -koden här:

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

if (digitalRead (in1))

{

Serial.println ("u");

fördröjning (100);

}

if (digitalRead (in2))

{

Serial.println ("d");

fördröjning (100);

}

if (digitalRead (in3))

{

Serial.println ("s");

fördröjning (100);

}

if (digitalRead (in4))

{

Serial.println ("v");

fördröjning (100);

}

int readVal = analogRead (A3);

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

fördröjning (50);

}

Steg 4: PC -appkod (C#. NET)

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

Appen lyssnar över COM (USB) -porten och reagerar beroende på vilket kommando som tas emot. Det enklaste sättet att skruva upp och ner ljudet på datorn är att använda Interrop -tjänster för att direkt prata med Windows OS. Vi använder också Interrop -tjänsterna för att flytta musen till en specifik position på skärmen och klicka. För att möjliggöra olika skärmar och visningsstorlekar tillåter vi användaren att ange positionen för knapparna för att lägga till och hoppa över videoklipp.

Vi använder ett vanligt.net -diagram för att visa alla ljudkommandon som vi tar emot.

Windows -kod:

Ladda ner hela projektet här:

leobot.net/audioadjust.zip

använder System;

använder System. Collections. Generic;

använder System. ComponentModel;

använder System. Data;

använder System. Drawing;

använder System. Linq;

använder System. Text;

använder System. Windows. Forms;

använder System. Runtime. InteropServices;

använder System. IO. Ports;

använder System. Threading;

namnutrymme AudioAdjust

{

offentlig delklass Form1: Form

{

[DllImport ("User32. Dll")]

offentlig statisk extern lång SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

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

// Musåtgärder

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 extern void keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

Random aRand = new 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 ();

}

privat tomrum Form1_Load (objektsändare, EventArgs e)

{

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

comboBoxPort. Items. AddRange (namn);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (objektavsändare, EventArgs e)

{

_serialPort = ny SerialPort ();

_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Ställ in din styrelse -COM

_serialPort. BaudRate = 9600;

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

annan

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // minska volymen

}

void _serialPort_DataReceived (objektavsändare, SerialDataReceivedEventArgs e)

{

Prova

{

string fullval = _serialPort. ReadLine ();

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

switch (com)

{

fall "a":

{

{

// ljudnivå

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

int valInt = int. Parse (val);

AddData (valInt);

}

ha sönder;

}

fallet "u":

{

// ljud upp

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // minska volymen

ha sönder;

}

fall "d":

{

// ljud ned

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // minska volymen

ha sönder;

}

fall "s":

{

// skipAd

MoveCursorSkipAd ();

Tråd. Sömn (10);

DoMouseClick ();

ha sönder;

}

fall "v":

{

// skipAd

MoveCursorSkipVideo ();

Tråd. Sömn (10);

DoMouseClick ();

ha sönder;

}

}

}

fånga

{

}

// kasta nya NotImplementedException ();

}

private void MoveCursorSkipAd ()

{

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

Cursor. Position = new Point (adX, adY);

}

privat tomrum MoveCursorSkipVideo ()

{

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

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

}

public void DoMouseClick ()

{

// Ring den importerade funktionen med markörens nuvarande 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);

}

void AddData (int level)

{

if (enableAudioChange)

{

if (nivå> = MaxLevel)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // minska volymen

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // minska volymen

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // minska volymen

}

annan

{

if (nivå <Maxnivå - 0)

{

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // minska volymen

}

}

}

SetChart (nivå);

currentPoint ++;

}

delegera void SetTextCallback (int val);

private void SetChart (int val)

{

// InvokeRequired required jämför tråd -ID för

// anropar tråd till tråd -ID för den skapande tråden.

// Om dessa trådar är olika, returneras det sant.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = ny SetTextCallback (SetChart);

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

}

annan

{

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

om (currentPoint> = 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (objektavsändare, EventArgs e)

{

Prova

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

fånga

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (objektavsändare, EventArgs e)

{

MoveCursorSkipAd ();

Tråd. Sömn (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (objektavsändare, EventArgs e)

{

Prova

{

adX = int. Parse (textBoxXpos. Text);

}

fånga

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (objektavsändare, EventArgs e)

{

Prova

{

adY = int. Parse (textBoxYpos. Text);

}

fånga

{

textBoxYpos. Text = adY + "";

}

}

private void buttonSkipVideo_Click (objektavsändare, EventArgs e)

{

MoveCursorSkipVideo ();

Tråd. Sömn (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (objektavsändare, EventArgs e)

{

Prova

{

vidX = int. Parse (textBoxXposVid. Text);

}

fånga

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (objektavsändare, EventArgs e)

{

Prova

{

vidY = int. Parse (textBoxYposVid. Text);

}

fånga

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (objektavsändare, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

offentlig struktur PUNKT

{

public int x;

offentlig int y;

}

}

Rekommenderad: