Isi kandungan:

Alat kawalan jauh Youtube Arduino untuk Tidur (Leobot Electronics): 4 Langkah
Alat kawalan jauh Youtube Arduino untuk Tidur (Leobot Electronics): 4 Langkah

Video: Alat kawalan jauh Youtube Arduino untuk Tidur (Leobot Electronics): 4 Langkah

Video: Alat kawalan jauh Youtube Arduino untuk Tidur (Leobot Electronics): 4 Langkah
Video: Использование Melexis MLX90614 Инфракрасный термометр с Arduino 2024, Julai
Anonim
Alat kawalan jauh Youtube Arduino untuk Tidur (Leobot Electronics)
Alat kawalan jauh Youtube Arduino untuk Tidur (Leobot Electronics)

Jauh Youtube Arduino

Sekiranya anda menggunakan Youtube untuk menyediakan filem atau muzik untuk ditonton semasa tidur, anda pasti akan terbangun oleh iklan muat atau tahap kelantangan yang berbeza ketika filem baru dimulakan. Tidak perlu dikatakan, ini boleh menjengkelkan.

Jadi, penyelesaian saya yang saya buktikan kepada anda di sini untuk membina sendiri adalah alat kawalan jauh berasaskan Arduino untuk berinteraksi dengan Youtube dari jarak jauh. Alat kawalan jauh diperlukan untuk mengubah kelantangan suara utama PC saya, melangkau iklan di Youtube dan melangkau video di Youtube.

Juga, disertakan adalah sensor tingkat audio untuk menentukan seberapa keras pembesar suara itu, yang seterusnya dapat digunakan untuk menurunkan tingkat suara secara automatik setelah mengesan gangguan keras seperti iklan.

Terakhir, saya menambahkan carta pada aplikasi PC untuk memaparkan tahap audio yang dikesan.

Penyelesaiannya dapat diperhalusi dengan lebih baik tetapi bagi saya ia menyelesaikan tugas.

Langkah 1: Komponen yang Diperlukan

Semua komponen ini dibekalkan oleh Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 SALURAN REMOTE (315MHZ) + MODUL PENERIMA (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MODUL SENSOR VOICE MICROPHONE & SOUS DETECTION SENSOR (KY-037)

leobot.net/viewproduct.aspx?id=217

Perisian

1) Studio Visual

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Langkah 2: Persediaan Perkakasan

1) Sambungkan modul penerima 4-Saluran ke Arduino.

Pin Penerima 4-Saluran-> Pin Arduino Uno

GND-> GND

5V-> 5V

D0-> Digital 2

D1-> Digital 3

D2-> Digital 4

D3-> Digital 5

2) Sambungkan modul Mikrofon KY-037 ke Arduino

Mikrofon KY-037 Pin-> Pin Arduino Uno

GND-> GND

+ -> 3.3V

A0-> Analog 3

Langkah 3: Kod Arduino

Gambaran keseluruhan

Logik yang perlu diikuti oleh Arduino adalah seperti berikut:

A) Periksa sama ada penerima menandakan ada pin.

B) Bergantung pada port IO yang mana isyarat diterima adalah perintah apa yang akan dihantar ke PC.

C) Setelah selesai dengan semua tindakan kawalan jauh, mengesan tahap audio dengan mikrofon dan hantar ke PC.

D) Semua arahan yang dihantar ke PC mempunyai format pertama yang mempunyai watak kemudian nilai (jika diperlukan).

E) Terdapat lima arahan yang dihantar dari Arduino ke PC

a. "U" - Kelantangan

b. "D" - Kelantangan

c. "S" - Langkau Tambah

d. "V" - Langkau Video

e. "A" - Tahap Audio dikesan diikuti dengan nilai

Kod Arduino:

Muat turun Arduino Code di sini:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

batal persediaan () {

Serial.begin (9600);

pinMode (A3, INPUT);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

gelung kosong () {

jika (digitalRead (in1))

{

Serial.println ("u");

kelewatan (100);

}

jika (digitalRead (in2))

{

Serial.println ("d");

kelewatan (100);

}

jika (digitalRead (in3))

{

Serial.println ("s");

kelewatan (100);

}

jika (digitalRead (in4))

{

Serial.println ("v");

kelewatan (100);

}

int readVal = analogRead (A3);

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

kelewatan (50);

}

Langkah 4: Kod Aplikasi PC (C #. NET)

Kod Aplikasi PC (C #. NET)
Kod Aplikasi PC (C #. NET)

Aplikasi ini akan mendengar melalui port COM (USB) dan bertindak balas bergantung pada perintah apa yang diterima. Cara termudah untuk menghidupkan dan menurunkan suara pada PC adalah dengan menggunakan perkhidmatan Interrop untuk bercakap secara langsung dengan OS Windows. Kami juga menggunakan perkhidmatan Interrop untuk menggerakkan tetikus ke posisi tertentu di layar dan klik. Untuk membolehkan skrin & ukuran paparan berbeza, kami membenarkan pengguna untuk menentukan kedudukan butang langkau tambah dan langkau video.

Kami menggunakan carta.net standard untuk memaparkan sebarang arahan audio yang kami terima.

Kod Windows:

Muat turun projek penuh di sini:

leobot.net/audioadjust.zip

menggunakan Sistem;

menggunakan System. Collections. Generic;

menggunakan System. ComponentModel;

menggunakan System. Data;

menggunakan System. Drawing;

menggunakan System. Linq;

menggunakan System. Text;

menggunakan System. Windows. Forms;

menggunakan System. Runtime. InteropServices;

menggunakan System. IO. Ports;

menggunakan System. Threading;

ruang nama AudioAdjust

{

kelas separa awam Tingkatan1: Borang

{

[DllImport ("Pengguna32. Dll")]

SetCursorPos panjang statik awam (int x, int y);

[DllImport ("Pengguna32. Dll")]

bli eksternal statik awam ClientToScreen (IntPtr hWnd, ref POINT point);

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

public_stent void tetikus awam (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Tindakan tetikus

persendirian int MOUSEEVENTF_LEFTDOWN = 0x02;

persendirian int MOUSEEVENTF_LEFTUP = 0x04;

persendirian int MOUSEEVENTF_RIGHTDOWN = 0x08;

persendirian int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport ("user32.dll")]

kekunci luaran statik keybd_event (bte bVk, bte bScan, uint dwFlags, int dwExtraInfo);

Random aRand = Random baru ();

public int LastLevel = 0;

int awam MaxLevel = 255;

SerialPort _serialPort statik;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

borang awam 1 ()

{

InitializeComponent ();

}

kekosongan peribadi Form1_Load (penghantar objek, EventArgs e)

{

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

comboBoxPort. Iems. AddRange (nama);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

butang kekosongan peribadi1_Klik (penghantar objek, EventArgs e)

{

_serialPort = SerialPort baru ();

_serialPort. DataReceived + = SerialDataReceivedEventHandler baru (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Tetapkan papan COM anda

_serialPort. BaudRate = 9600;

jika (_serialPort. IsOpen) _serialPort. Close ();

yang lain

{

_serialPort. Open ();

}

// keybd_event ((byte) Kekunci. VolumeDown, 0, 0, 0); // mengurangkan kelantangan

}

batal _serialPort_DataReceived (penghantar objek, SerialDataReceivedEventArgs e)

{

cuba

{

string fullval = _serialPort. ReadLine ();

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

tukar (com)

{

kes "a":

{

{

// tahap audio

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

int valInt = int. Parse (val);

TambahData (valInt);

}

rehat;

}

kes "u":

{

// naikkan audio

keybd_event ((bait) Kekunci. VolumeUp, 0, 0, 0); // mengurangkan kelantangan

rehat;

}

kes "d":

{

// audio turun

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // mengurangkan kelantangan

rehat;

}

kes "s":

{

// skipAd

MoveCursorSkipAd ();

Benang. Tidur (10);

DoMouseClick ();

rehat;

}

kes "v":

{

// skipAd

MoveCursorSkipVideo ();

Benang. Tidur (10);

DoMouseClick ();

rehat;

}

}

}

tangkap

{

}

// lemparkan NotImplementedException baru ();

}

kekosongan peribadi MoveCursorSkipAd ()

{

Kursor. Posisi = Titik baru (1140, 725);

Kursor. Posisi = Titik baru (adX, adY);

}

kekosongan peribadi MoveCursorSkipVideo ()

{

Kursor. Posisi = Titik baru (1140, 725);

Kursor. Posisi = Titik baru (vidX, vidY);

}

kekosongan awam DoMouseClick ()

{

// Panggil fungsi yang diimport dengan kedudukan kursor semasa

uint X = (uint) Kursor. Posisi. X;

uint Y = (uint) Kursor. Posisi. Y;

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

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

}

batal AddData (tahap int)

{

jika (aktifkanAudioChange)

{

jika (tahap> = MaxLevel)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // mengurangkan kelantangan

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // mengurangkan kelantangan

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // mengurangkan kelantangan

}

yang lain

{

jika (tahap <MaxLevel - 0)

{

keybd_event ((bait) Kekunci. VolumeUp, 0, 0, 0); // mengurangkan kelantangan

}

}

}

SetChart (tahap);

currentPoint ++;

}

perwakilan tidak sah SetTextCallback (int val);

SetChart kekosongan peribadi (int val)

{

// InvokeRequired diperlukan membandingkan ID utas dari

// memanggil utas ke ID utas benang pencipta.

// Sekiranya benang ini berbeza, ia akan kembali benar.

jika (this.chart1. InvokeRequired)

{

SetTextCallback d = SetTextCallback baru (SetChart);

ini. Invoke (d, objek baru {val});

}

yang lain

{

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

jika (currentPoint> = 10)

{

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

}

}

}

teks kosong peribadiBoxLevel_TextChanged (penghantar objek, Peristiwa Acara e)

{

cuba

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

tangkap

{

textBoxLevel. Text = MaxLevel + "";

}

}

butang kekosongan peribadiTestSkip_Click (penghantar objek, EventArgs e)

{

MoveCursorSkipAd ();

Benang. Tidur (10);

DoMouseClick ();

}

teks kosong peribadiBoxXpos_TextChanged (penghantar objek, EventArgs e)

{

cuba

{

adX = int. Parse (textBoxXpos. Text);

}

tangkap

{

textBoxXpos. Text = adX + "";

}

}

teks kekosongan peribadiBoxYpos_TextChanged (penghantar objek, EventArgs e)

{

cuba

{

adY = int. Parse (textBoxYpos. Text);

}

tangkap

{

textBoxYpos. Text = adY + "";

}

}

butang kekosongan peribadi SkipVideo_Click (penghantar objek, EventArgs e)

{

MoveCursorSkipVideo ();

Benang. Tidur (10);

DoMouseClick ();

}

teks kosong peribadiBoxXposVid_TextChanged (penghantar objek, EventArgs e)

{

cuba

{

vidX = int. Parse (textBoxXposVid. Text);

}

tangkap

{

textBoxXposVid. Text = vidX + "";

}

}

teks kekosongan peribadiBoxYposVid_TextChanged (pengirim objek, EventArgs e)

{

cuba

{

vidY = int. Parse (textBoxYposVid. Text);

}

tangkap

{

textBoxYposVid. Text = vidY + "";

}

}

periksa kekosongan peribadiBoxEnable_CheckedChanged (penghantar objek, EventArgs e)

{

aktifkanAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

POINT struktur awam

{

int x awam;

int awam;

}

}

Disyorkan: