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, Juli
Anonim
Arduino Youtube daljinski upravljač za spavanje (Leobot Electronics)
Arduino Youtube daljinski upravljač za spavanje (Leobot Electronics)

Arduino Youtube daljinski

Ako koristite Youtube za pružanje filma ili muzike za gledanje dok spavate, sigurno bi vas probudio oglas za učitavanje ili različiti nivoi jačine zvuka kada počne novi film. Nepotrebno je 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 jačine zvuka računara, preskakanje oglasa na Youtube -u i preskakanje video zapisa na Youtube -u.

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

Na kraju, dodao sam grafikon u aplikaciju za računare za prikaz otkrivenih nivoa 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 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 modul mikrofona KY-037 na Arduino

Mikrofon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3V

A0-> Analogni 3

Korak 3: Arduino kod

Pregled

Logika koju Arduino treba slijediti je sljedeća:

A) Provjerite signalizira li prijemnik bilo kakve pinove.

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

C) Kada završite sa svim radnjama na daljinskom upravljaču, otkrijte nivo zvuka pomoću mikrofona i pošaljite ga na računar.

D) Sve naredbe koje se šalju na računar imaju format koji prvo ima karakter, a zatim vrijednost (ako je vrijednost potrebna).

E) Postoji pet naredbi poslanih s Arduina na PC

a. “U” - Pojačavanje zvuka

b. “D” - Smanjivanje jačine zvuka

c. “S” - Preskoči dodavanje

d. “V” - Preskočite video zapis

e. “A” - Detektovan nivo zvuka iza kojeg slijedi 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 PC (C#. NET)

Kôd aplikacije za PC (C#. NET)
Kôd aplikacije za PC (C#. NET)

Aplikacija će slušati preko COM (USB) porta i reagirati ovisno o primljenoj naredbi. Najjednostavniji način pojačavanja i smanjivanja zvuka na računaru je korištenje Interrop usluga za direktan 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 ekrane i veličine prikaza, dopuštamo korisniku da navede položaj tipki za preskakanje dodavanja i preskakanja videa.

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

Windows kôd:

Preuzmite cijeli projekt ovdje:

leobot.net/audioadjust.zip

pomoću System;

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

[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 extern void keybd_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 ();

}

privatna praznina Form1_Load (pošiljalac 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šiljalac objekta, EventArgs e)

{

_serialPort = novi SerialPort ();

_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Postavite vašu ploču COM

_serialPort. BaudRate = 9600;

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

else

{

_serialPort. Open ();

}

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

}

void _serialPort_DataReceived (pošiljatelj objekta, SerialDataReceivedEventArgs e)

{

probaj

{

string fullval = _serialPort. ReadLine ();

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

prekidač (com)

{

slučaj "a":

{

{

// audio nivo

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

int valInt = int. Parse (val);

AddData (valInt);

}

break;

}

slučaj "u":

{

// pojačan zvuk

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

break;

}

slučaj "d":

{

// zvuk je isključen

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

break;

}

velika slova "s":

{

// skipAd

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

break;

}

slučaj "v":

{

// skipAd

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

break;

}

}

}

uloviti

{

}

// baca novi NotImplementedException ();

}

privatna praznina MoveCursorSkipAd ()

{

Cursor. Position = nova tačka (1140, 725);

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

}

private void MoveCursorSkipVideo ()

{

Cursor. Position = nova tačka (1140, 725);

Cursor. Position = nova tačka (vidX, vidY);

}

javna praznina DoMouseClick ()

{

// Pozivamo uvezenu funkciju s trenutnim položajem kursora

uint X = (uint) kursor.pozicija. X;

uint Y = (uint) kursor.pozicija. Y;

mouse_event (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);

mouse_event (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);

}

void AddData (int nivo)

{

if (enableAudioChange)

{

if (nivo> = 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

}

else

{

if (nivo <MaxLevel - 0)

{

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

}

}

}

SetChart (nivo);

currentPoint ++;

}

delegate void SetTextCallback (int val);

privatna praznina 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 true.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = novi SetTextCallback (SetChart);

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

}

else

{

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

if (trenutna tačka> = 10)

{

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

}

}

}

privatna praznina textBoxLevel_TextChanged (pošiljalac objekta, EventArgs e)

{

probaj

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

uloviti

{

textBoxLevel. Text = MaxLevel + "";

}

}

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

{

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

}

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

{

probaj

{

adX = int. Parse (textBoxXpos. Text);

}

uloviti

{

textBoxXpos. Text = adX + "";

}

}

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

{

probaj

{

adY = int. Parse (textBoxYpos. Text);

}

uloviti

{

textBoxYpos. Text = adY + "";

}

}

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

{

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

}

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

{

probaj

{

vidX = int. Parse (textBoxXposVid. Text);

}

uloviti

{

textBoxXposVid. Text = vidX + "";

}

}

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

{

probaj

{

vidY = int. Parse (textBoxYposVid. Text);

}

uloviti

{

textBoxYposVid. Text = vidY + "";

}

}

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

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

javna struktura POINT

{

javni int x;

javni int y;

}

}

Preporučuje se: