Daftar Isi:

Arduino Youtube Remote Control untuk Tidur (Leobot Electronics): 4 Langkah
Arduino Youtube Remote Control untuk Tidur (Leobot Electronics): 4 Langkah

Video: Arduino Youtube Remote Control untuk Tidur (Leobot Electronics): 4 Langkah

Video: Arduino Youtube Remote Control untuk Tidur (Leobot Electronics): 4 Langkah
Video: Dunia Robot - special effect satisfying video mobil pemadam kebakaran 2024, November
Anonim
Arduino Youtube Remote Control untuk Tidur (Leobot Electronics)
Arduino Youtube Remote Control untuk Tidur (Leobot Electronics)

Arduino Youtube Remote

Jika Anda menggunakan Youtube untuk memberi Anda film atau musik untuk ditonton saat tidur, Anda pasti akan terbangun oleh iklan beban atau tingkat volume yang berbeda saat film baru dimulai. Tak perlu dikatakan, ini bisa sangat menjengkelkan.

Jadi, solusi saya yang saya buktikan kepada Anda di sini untuk membangun sendiri adalah remote control berbasis Arduino untuk berinteraksi dengan Youtube dari jarak jauh. Remote diperlukan untuk mengubah volume suara utama PC saya, melewatkan iklan di Youtube dan melewatkan video di Youtube.

Juga, disertakan adalah sensor level audio untuk menentukan seberapa keras speaker sebenarnya, yang pada gilirannya dapat digunakan untuk secara otomatis menurunkan level suara setelah mendeteksi gangguan keras seperti iklan.

Terakhir, saya menambahkan bagan pada aplikasi PC untuk menampilkan level audio yang terdeteksi.

Solusinya dapat disempurnakan dengan lebih baik tetapi bagi saya itu menyelesaikan tugas.

Langkah 1: Komponen yang Dibutuhkan

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

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

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

leobot.net/viewproduct.aspx?id=521

3) MODUL SENSOR DETEKSI SUARA & SUARA MIKROFON (KY-037)

leobot.net/viewproduct.aspx?id=217

Perangkat lunak

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Langkah 2: Pengaturan Perangkat Keras

1) Hubungkan modul penerima 4-Channel 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) Hubungkan modul Mikrofon KY-037 ke Arduino

Mikrofon KY-037 Pin->Arduino Uno Pin

GND->GND

+->3.3V

A0->Analog 3

Langkah 3: Kode Arduino

Gambaran

Logika yang perlu diikuti Arduino adalah sebagai berikut:

A) Periksa apakah penerima memberi sinyal pin.

B) Tergantung pada port IO mana sinyal diterima, perintah apa yang akan dikirim ke PC.

C) Setelah selesai dengan semua tindakan kendali jarak jauh, deteksi level audio dengan mikrofon dan kirimkan ke PC.

D) Semua perintah yang dikirim ke PC memiliki format yang pertama memiliki karakter kemudian nilai (jika diperlukan nilai).

E) Ada lima perintah yang dikirim dari Arduino ke PC

A. "u" - Volume Naik

B. "d" - Volume Turun

C. "s" - Lewati Tambah

D. "v" - Lewati Video

e. "a" - Tingkat Audio terdeteksi diikuti dengan nilainya

Kode Arduinonya:

Unduh Kode Arduino di sini:

int dalam1=2;

int dalam2=3;

int dalam3=4;

int dalam4=5;

batalkan pengaturan() {

Serial.begin(9600);

pinMode(A3, INPUT);

pinMode(in1, INPUT);

pinMode(in2, INPUT);

pinMode(in3, INPUT);

pinMode(in4, INPUT);

}

lingkaran kosong() {

jika(DigitalBaca(dalam1))

{

Serial.println("u");

penundaan(100);

}

jika(DigitalBaca(dalam2))

{

Serial.println("d");

penundaan(100);

}

jika(digitalBaca(dalam3))

{

Serial.println("s");

penundaan(100);

}

jika(DigitalBaca(dalam4))

{

Serial.println("v");

penundaan(100);

}

int readVal= analogRead(A3);

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

penundaan(50);

}

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

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

Aplikasi akan mendengarkan melalui port COM (USB) dan bereaksi tergantung pada perintah apa yang diterima. Cara paling sederhana untuk menaikkan dan menurunkan suara di PC adalah dengan menggunakan layanan Interrop untuk berbicara langsung dengan OS Windows. Kami juga menggunakan layanan Interrop untuk menggerakkan mouse ke posisi tertentu di layar dan klik. Untuk memungkinkan layar & ukuran tampilan yang berbeda, kami mengizinkan pengguna untuk menentukan posisi tombol lewati tambahkan dan lewati video.

Kami menggunakan bagan.net standar untuk menampilkan perintah audio apa pun yang kami terima.

Kode Windows:

Unduh proyek lengkap 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;

namespace AudioAdjust

{

kelas parsial publik Form1: Form

{

[DllImport("User32. Dll")]

SetCursorPos panjang eksternal statis publik (int x, int y);

[DllImport("User32. Dll")]

public static 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);

//Tindakan mouse

pribadi const int MOUSEEVENTF_LEFTDOWN = 0x02;

pribadi const int MOUSEEVENTF_LEFTUP = 0x04;

pribadi const int MOUSEEVENTF_RIGHTDOWN = 0x08;

pribadi const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport("user32.dll")]

static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

ARand acak = Acak baru();

public int Tingkat Terakhir = 0;

int publik MaxLevel = 255;

SerialPort _serialPort statis;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

Formulir1 publik()

{

Inisialisasi Komponen();

}

private void Form1_Load (pengirim objek, EventArgs e)

{

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

comboBoxPort. Items. AddRange(nama);

comboBoxPort. SelectedIndex = 0;

}

int titik saat ini = 0;

private void button1_Click(pengirim objek, EventArgs e)

{

_serialPort = SerialPort baru();

_serialPort. DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString();//Setel COM papan Anda

_serialPort. BaudRate = 9600;

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

lain

{

_serialPort. Open();

}

// keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // mengecilkan volume

}

void _serialPort_DataReceived(pengirim objek, SerialDataReceivedEventArgs e)

{

mencoba

{

string fullval = _serialPort. ReadLine();

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

beralih (com)

{

kasus "a":

{

{

//tingkat audio

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

int valInt = int. Parse(val);

TambahData(valInt);

}

merusak;

}

kasus "u":

{

//suara naik

keybd_event((byte)Keys. VolumeUp, 0, 0, 0); // mengecilkan volume

merusak;

}

kasus "d":

{

//suara turun

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // mengecilkan volume

merusak;

}

kasus "s":

{

//melewatkan iklan

MoveCursorSkipAd();

Benang. Tidur (10);

DoMouseKlik();

merusak;

}

kasus "v":

{

//melewatkan iklan

MoveCursorLewatiVideo();

Benang. Tidur (10);

DoMouseKlik();

merusak;

}

}

}

menangkap

{

}

//lempar NotImplementedException baru();

}

kekosongan pribadi MoveCursorSkipAd()

{

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

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

}

kekosongan pribadi MoveCursorSkipVideo()

{

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

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

}

kekosongan publik DoMouseClick()

{

//Panggil fungsi yang diimpor dengan posisi kursor saat ini

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

}

batalkan AddData (tingkat int)

{

jika (aktifkanAudioChange)

{

jika (tingkat >= Tingkat Maks)

{

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // mengecilkan volume

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // mengecilkan volume

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // mengecilkan volume

}

lain

{

jika (tingkat < Tingkat Maks - 0)

{

keybd_event((byte)Keys. VolumeUp, 0, 0, 0); // mengecilkan volume

}

}

}

SetChart(tingkat);

titik saat ini++;

}

delegasikan void SetTextCallback(int val);

private void SetChart(int val)

{

// InvokeRequired diperlukan membandingkan ID utas dari

// memanggil utas ke ID utas dari utas yang membuat.

// Jika utas ini berbeda, hasilnya benar.

jika (this.chart1. InvokeRequired)

{

SetTextCallback d = baru SetTextCallback(SetChart);

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

}

lain

{

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

jika (titik saat ini >= 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (pengirim objek, EventArgs e)

{

mencoba

{

MaxLevel = int. Parse(textBoxLevel. Text);

}

menangkap

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click(pengirim objek, EventArgs e)

{

MoveCursorSkipAd();

Benang. Tidur (10);

DoMouseKlik();

}

private void textBoxXpos_TextChanged (pengirim objek, EventArgs e)

{

mencoba

{

adX = int. Parse(textBoxXpos. Text);

}

menangkap

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (pengirim objek, EventArgs e)

{

mencoba

{

adY = int. Parse(textBoxYpos. Text);

}

menangkap

{

textBoxYpos. Text = adY + "";

}

}

tombol batal pribadiLewatiVideo_Click(pengirim objek, EventArgs e)

{

MoveCursorLewatiVideo();

Benang. Tidur (10);

DoMouseKlik();

}

private void textBoxXposVid_TextChanged (pengirim objek, EventArgs e)

{

mencoba

{

vidX = int. Parse(textBoxXposVid. Text);

}

menangkap

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (pengirim objek, EventArgs e)

{

mencoba

{

vidY = int. Parse(textBoxYposVid. Text);

}

menangkap

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (pengirim objek, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout(LayoutKind. Sequential)]

POINT struktur publik

{

int publik x;

int publik y;

}

}

Direkomendasikan: