Sadržaj:

Arduino Youtube daljinski upravljač za spavanje (Leobot Electronics): 4 koraka
Arduino Youtube daljinski upravljač za spavanje (Leobot Electronics): 4 koraka

Video: Arduino Youtube daljinski upravljač za spavanje (Leobot Electronics): 4 koraka

Video: Arduino Youtube daljinski upravljač za spavanje (Leobot Electronics): 4 koraka
Video: 35 видео со страшными призраками: мегасборник 2023 года [V1] 2024, Srpanj
Anonim
Arduino Youtube daljinski upravljač za spavanje (Leobot Electronics)
Arduino Youtube daljinski upravljač za spavanje (Leobot Electronics)

Arduino Youtube daljinski upravljač

Ako koristite Youtube za pružanje filma ili glazbe za gledanje dok spavate, zasigurno bi vas probudio oglas za učitavanje ili različite razine glasnoće kada počne novi film. Nije potrebno reći da ovo može biti prilično iritantno.

Dakle, moje rješenje koje vam ovdje dokazujem da sami izgradite je daljinski upravljač zasnovan na Arduinu za interakciju s Youtubeom na daljinu. Daljinski upravljač je potreban za promjenu glavne glasnoće zvuka računala, preskakanje oglasa na Youtubeu i preskakanje videozapisa na Youtubeu.

Također, uključen je i senzor razine zvuka koji određuje koliko je zvučnik zapravo glasan, a koji se zauzvrat može koristiti za automatsko snižavanje razine zvuka nakon otkrivanja glasnih prekida, poput oglasa.

Na kraju, dodao sam grafikon u aplikaciju za računalo za prikaz otkrivenih razina zvuka.

Rješenje se može bolje doraditi, ali za mene ispunjava zadatak.

Korak 1: Potrebne komponente

Sve ove komponente isporučuje Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 DALJINSKI DALJINSKI KANAL (315 MHz) + MODUL PRIMAČA (315 MHz)

leobot.net/viewproduct.aspx?id=521

3) MODUL SENZORA MIKROFONSKOG GLASA I DETEKCIJE ZVUKA (KY-037)

leobot.net/viewproduct.aspx?id=217

Softver

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Korak 2: Postavljanje hardvera

1) Spojite 4-kanalni prijemnički modul na Arduino.

4-kanalni pin prijemnika-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Digitalno 2

D1-> Digital 3

D2-> Digitalni 4

D3-> Digitalni 5

2) Spojite mikrofon KY-037 modul na Arduino

Mikrofon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3,3 V

A0-> Analogni 3

Korak 3: Arduino kod

Pregled

Logika koju Arduino treba slijediti je sljedeća:

A) Provjerite signalizira li prijemnik bilo koju iglu.

B) Ovisno o tome na koji IO port se prima signal, naredba će se poslati na računalo.

C) Kada završite sa svim radnjama na daljinskom upravljaču, otkrijte razinu zvuka mikrofonom i pošaljite je na računalo.

D) Sve naredbe poslane na računalo imaju format koji prvo ima znak, a zatim vrijednost (ako je potrebna vrijednost).

E) Postoji pet naredbi poslanih s Arduina na računalo

a. “U” - Pojačavanje zvuka

b. “D” - Smanjivanje glasnoće

c. “S” - Preskoči dodavanje

d. "V" - Preskočite videozapis

e. "A" - Otkrivena razina zvuka, a zatim vrijednost

Arduino kod:

Arduino kod preuzmite ovdje:

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 () {{100} {101}

if (digitalRead (in1))

{

Serial.println ("u");

kašnjenje (100);

}

if (digitalRead (in2))

{

Serial.println ("d");

kašnjenje (100);

}

if (digitalRead (in3))

{

Serial.println ("s");

kašnjenje (100);

}

if (digitalRead (in4))

{

Serial.println ("v");

kašnjenje (100);

}

int readVal = analogRead (A3);

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

kašnjenje (50);

}

Korak 4: Kôd aplikacije za računalo (C#. NET)

Kôd aplikacije za računalo (C#. NET)
Kôd aplikacije za računalo (C#. NET)

Aplikacija će slušati preko COM (USB) priključka i reagirati ovisno o primljenoj naredbi. Najjednostavniji način pojačavanja i smanjivanja zvuka na računalu je korištenje Interrop usluga za izravni razgovor s Windows OS -om. Interrop usluge koristimo i za pomicanje miša na određeno mjesto na ekranu i klik. Kako bismo omogućili različite veličine zaslona i prikaza, dopuštamo korisniku da navede položaj gumba za preskakanje dodavanja i preskakanja videozapisa.

Koristimo standardni.net grafikon za prikaz svih audio naredbi koje primamo.

Windows kôd:

Cijeli projekt preuzmite ovdje:

leobot.net/audioadjust.zip

pomoću sustava;

pomoću System. Collections. Generic;

pomoću System. ComponentModel;

pomoću System. Data;

pomoću System. Drawing;

pomoću System. Linq;

pomoću System. Text;

pomoću System. Windows. Forms;

pomoću System. Runtime. InteropServices;

pomoću System. IO. Ports;

pomoću System. Threading;

imenski prostor AudioAdjust

{

javna parcijalna klasa Obrazac 1: Obrazac

{

[DllImport ("User32. Dll")]

javni statički vanjski dugi SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

javni statički vanjski bool ClientToScreen (IntPtr hWnd, ref POINT točka);

[DllImport ("user32.dll", CharSet = CharSet. Auto, CallingConvention = CallingConvention. StdCall)]

javna statička vanjska void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Radnje mišem

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

statički vanjski ključ voidbd_event (bajt bVk, bajt bScan, uint dwFlags, int dwExtraInfo);

Random aRand = new Random ();

public int LastLevel = 0;

javni int MaxLevel = 255;

statički SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

javni obrazac1 ()

{

InitializeComponent ();

}

private void Form1_Load (pošiljatelj objekta, EventArgs e)

{

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

comboBoxPort. Items. AddRange (imena);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (pošiljatelj objekta, EventArgs e)

{

_serialPort = novi SerialPort ();

_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Postavi svoju ploču COM

_serialPort. BaudRate = 9600;

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

drugo

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // smanjenje glasnoće

}

void _serialPort_DataReceived (pošiljatelj objekta, SerialDataReceivedEventArgs e)

{

probati

{

string fullval = _serialPort. ReadLine ();

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

prekidač (com)

{

slučaj "a":

{

{

// razina zvuka

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

int valInt = int. Parse (val);

AddData (valInt);

}

pauza;

}

slučaj "u":

{

// zvuk gore

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // smanjenje glasnoće

pauza;

}

slučaj "d":

{

// zvuk dolje

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // smanjenje glasnoće

pauza;

}

velika slova "s":

{

//preskočite oglas

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

pauza;

}

slučaj "v":

{

//preskočite oglas

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

pauza;

}

}

}

ulov

{

}

// bacanje nove NotImplementedException ();

}

privatna praznina MoveCursorSkipAd ()

{

Pokazivač. Položaj = nova točka (1140, 725);

Cursor. Position = nova točka (adX, adY);

}

private void MoveCursorSkipVideo ()

{

Pokazivač. Položaj = nova točka (1140, 725);

Kursor. Position = nova točka (vidX, vidY);

}

javna praznina DoMouseClick ()

{

// Pozivamo uvezenu funkciju s trenutnim položajem kursora

uint X = (uint) Pokazivač. Položaj. X;

uint Y = (uint) Pokazivač. Položaj. Y;

miš_događaj (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);

miš_događaj (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);

}

void AddData (int razina)

{

if (enableAudioChange)

{

if (razina> = MaxLevel)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // smanjenje glasnoće

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // smanjenje glasnoće

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // smanjenje glasnoće

}

drugo

{

if (razina <MaxLevel - 0)

{

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // smanjenje glasnoće

}

}

}

SetChart (razina);

currentPoint ++;

}

delegate void SetTextCallback (int val);

private void SetChart (int val)

{

// InvokeRequired required uspoređuje ID niti za

// pozivanje niti na ID niti kreirajuće niti.

// Ako su ove niti različite, vraća se true.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = novi SetTextCallback (SetChart);

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

}

drugo

{

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

ako (trenutna točka> = 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (pošiljatelj objekta, EventArgs e)

{

probati

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

ulov

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (pošiljatelj objekta, EventArgs e)

{

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (pošiljatelj objekta, EventArgs e)

{

probati

{

adX = int. Parse (textBoxXpos. Text);

}

ulov

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (pošiljatelj objekta, EventArgs e)

{

probati

{

adY = int. Parse (textBoxYpos. Text);

}

ulov

{

textBoxYpos. Text = adY + "";

}

}

private void buttonSkipVideo_Click (pošiljatelj objekta, EventArgs e)

{

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (pošiljatelj objekta, EventArgs e)

{

probati

{

vidX = int. Parse (textBoxXposVid. Text);

}

ulov

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (pošiljatelj objekta, EventArgs e)

{

probati

{

vidY = int. Parse (textBoxYposVid. Text);

}

ulov

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (pošiljatelj objekta, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

javna struktura TOČKA

{

javni int x;

javni int y;

}

}

Preporučeni: