Mục lục:

Điều khiển từ xa Arduino Youtube để ngủ (Leobot Electronics): 4 bước
Điều khiển từ xa Arduino Youtube để ngủ (Leobot Electronics): 4 bước

Video: Điều khiển từ xa Arduino Youtube để ngủ (Leobot Electronics): 4 bước

Video: Điều khiển từ xa Arduino Youtube để ngủ (Leobot Electronics): 4 bước
Video: 🔴 Arduino #10 | Remote Hồng Ngoại Kết Hợp Mắt Thu Hồng Ngoại Bật Tắt Thiết Bị Từ Xa 2024, Tháng bảy
Anonim
Điều khiển từ xa Arduino Youtube để ngủ (Leobot Electronics)
Điều khiển từ xa Arduino Youtube để ngủ (Leobot Electronics)

Arduino Youtube Remote

Nếu bạn sử dụng Youtube để cung cấp cho bạn một bộ phim hoặc bản nhạc để xem khi đang ngủ, chắc chắn bạn sẽ bị đánh thức bởi một quảng cáo tải hoặc các mức âm lượng khác nhau khi một bộ phim mới bắt đầu. Không cần phải nói, điều này có thể khá khó chịu.

Vì vậy, giải pháp của tôi mà tôi chứng minh cho bạn ở đây để xây dựng cho chính bạn là một điều khiển từ xa dựa trên Arduino để tương tác với Youtube ở khoảng cách xa. Điều khiển từ xa được yêu cầu để thay đổi âm lượng âm thanh chính của PC của tôi, bỏ qua quảng cáo trên Youtube và bỏ qua video trên Youtube.

Ngoài ra, đi kèm là một cảm biến mức âm thanh để xác định mức độ thực sự của loa, từ đó có thể được sử dụng để tự động giảm mức âm thanh khi phát hiện ra những gián đoạn lớn chẳng hạn như quảng cáo.

Cuối cùng, tôi đã thêm một biểu đồ trên ứng dụng PC để hiển thị các mức âm thanh được phát hiện.

Giải pháp có thể được tinh chỉnh tốt hơn nhưng đối với tôi, nó đã hoàn thành nhiệm vụ.

Bước 1: Các thành phần cần thiết

Tất cả các thành phần này được cung cấp bởi Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 TỪ XA CỦA KÊNH (315MHZ) + MODULE BỘ NHẬN (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MÔ HÌNH CẢM BIẾN PHÁT HIỆN ÂM THANH & MICROPHONE VOICE (KY-037)

leobot.net/viewproduct.aspx?id=217

Phần mềm

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Bước 2: Thiết lập phần cứng

1) Kết nối mô-đun thu 4 kênh với Arduino.

Chân thu 4 kênh-> Pin Arduino Uno

GND-> GND

5V-> 5V

D0-> Kỹ thuật số 2

D1-> Kỹ thuật số 3

D2-> Kỹ thuật số 4

D3-> Kỹ thuật số 5

2) Kết nối mô-đun Micrô KY-037 với Arduino

Pin micrô KY-037-> Pin Arduino Uno

GND-> GND

+ -> 3,3V

A0-> Tương tự 3

Bước 3: Mã Arduino

Tổng quat

Logic mà Arduino cần tuân theo như sau:

A) Kiểm tra xem bộ thu có đang báo hiệu bất kỳ chân nào không.

B) Tùy thuộc vào cổng IO mà tín hiệu nhận được là lệnh nào sẽ được gửi đến PC.

C) Sau khi thực hiện xong tất cả các thao tác điều khiển từ xa, hãy phát hiện mức âm thanh bằng micrô và gửi đến PC.

D) Tất cả các lệnh gửi đến PC có định dạng đầu tiên là một ký tự sau đó là một giá trị (nếu cần một giá trị).

E) Có năm lệnh được gửi từ Arduino đến PC

Một. “U” - Tăng âm lượng

NS. “D” - Giảm âm lượng

NS. “S” - Bỏ qua Thêm

NS. “V” - Bỏ qua Video

e. “A” - Mức âm thanh được phát hiện theo sau là giá trị

Mã Arduino:

Tải xuống Mã Arduino tại đây:

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

chậm trễ (100);

}

if (digitalRead (in2))

{

Serial.println ("d");

chậm trễ (100);

}

if (digitalRead (in3))

{

Serial.println ("s");

chậm trễ (100);

}

if (digitalRead (in4))

{

Serial.println ("v");

chậm trễ (100);

}

int readVal = analogRead (A3);

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

chậm trễ (50);

}

Bước 4: Mã ứng dụng PC (C #. NET)

Mã ứng dụng PC (C #. NET)
Mã ứng dụng PC (C #. NET)

Ứng dụng sẽ lắng nghe qua cổng COM (USB) và phản ứng tùy thuộc vào lệnh nào được nhận. Cách đơn giản nhất để tăng và giảm âm thanh trên PC là sử dụng dịch vụ Interrop để nói chuyện trực tiếp với hệ điều hành Windows. Chúng tôi cũng sử dụng các dịch vụ Interrop để di chuyển chuột đến một vị trí cụ thể trên màn hình và nhấp chuột. Để cho phép các kích thước màn hình & chế độ xem khác nhau, chúng tôi cho phép người dùng chỉ định vị trí của các nút bỏ qua thêm và bỏ qua video.

Chúng tôi sử dụng biểu đồ.net tiêu chuẩn để hiển thị bất kỳ lệnh âm thanh nào mà chúng tôi nhận được.

Mã Windows:

Tải toàn bộ dự án tại đây:

leobot.net/audioadjust.zip

sử dụng Hệ thống;

sử dụng System. Collections. Generic;

sử dụng System. ComponentModel;

sử dụng System. Data;

sử dụng System. Drawing;

sử dụng System. Linq;

sử dụng System. Text;

sử dụng System. Windows. Forms;

sử dụng System. Runtime. InteropServices;

sử dụng System. IO. Ports;

sử dụng System. Threading;

không gian tên AudioAdjust

{

public part class Form1: Form

{

[DllImport ("User32. Dll")]

public static extern long SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

public static extern bool ClientToScreen (IntPtr hWnd, điểm ref POINT);

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

public static extern void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Các hành động của chuột

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

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

Random aRand = new Random ();

public int LastLevel = 0;

public int MaxLevel = 255;

tĩnh SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

public Form1 ()

{

InitializeComponent ();

}

private void Form1_Load (object sender, EventArgs e)

{

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

comboBoxPort. Items. AddRange (tên);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (object sender, EventArgs e)

{

_serialPort = new SerialPort ();

_serialPort. DataReceive + = new SerialDataReceiveEventHandler (_serialPort_DataReceive);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Đặt bảng COM của bạn

_serialPort. BaudRate = 9600;

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

khác

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // giảm âm lượng

}

void _serialPort_DataReceive (người gửi đối tượng, SerialDataReceiveEventArgs e)

{

cố gắng

{

string fullval = _serialPort. ReadLine ();

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

switch (com)

{

trường hợp "a":

{

{

// mức âm thanh

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

int valInt = int. Parse (val);

AddData (valInt);

}

nghỉ;

}

trường hợp "u":

{

// tăng âm thanh

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // giảm âm lượng

nghỉ;

}

trường hợp "d":

{

// giảm âm thanh

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // giảm âm lượng

nghỉ;

}

các trường hợp :

{

//bỏ qua quảng cáo

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

nghỉ;

}

trường hợp "v":

{

//bỏ qua quảng cáo

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

nghỉ;

}

}

}

chụp lấy

{

}

// ném NotImplementedException () mới;

}

private void MoveCursorSkipAd ()

{

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

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

}

private void MoveCursorSkipVideo ()

{

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

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

}

public void DoMouseClick ()

{

// Gọi hàm đã nhập với vị trí hiện tại của con trỏ

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 (cấp int)

{

if (enableAudioChange)

{

if (level> = MaxLevel)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // giảm âm lượng

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // giảm âm lượng

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // giảm âm lượng

}

khác

{

if (cấp độ <MaxLevel - 0)

{

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // giảm âm lượng

}

}

}

SetChart (cấp độ);

currentPoint ++;

}

ủy quyền void SetTextCallback (int val);

private void SetChart (int val)

{

// Yêu cầu InvokeRequired so sánh ID chuỗi của

// gọi luồng tới ID luồng của luồng đang tạo.

// Nếu các luồng này khác nhau, nó trả về true.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = new SetTextCallback (SetChart);

this. Invoke (d, đối tượng mới {val});

}

khác

{

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

if (currentPoint> = 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (người gửi đối tượng, EventArgs e)

{

cố gắng

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

chụp lấy

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (object sender, EventArgs e)

{

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (người gửi đối tượng, EventArgs e)

{

cố gắng

{

adX = int. Parse (textBoxXpos. Text);

}

chụp lấy

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (người gửi đối tượng, EventArgs e)

{

cố gắng

{

adY = int. Parse (textBoxYpos. Text);

}

chụp lấy

{

textBoxYpos. Text = adY + "";

}

}

private void buttonSkipVideo_Click (object sender, EventArgs e)

{

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (người gửi đối tượng, EventArgs e)

{

cố gắng

{

vidX = int. Parse (textBoxXposVid. Text);

}

chụp lấy

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (người gửi đối tượng, EventArgs e)

{

cố gắng

{

vidY = int. Parse (textBoxYposVid. Text);

}

chụp lấy

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (người gửi đối tượng, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

cấu trúc công khai POINT

{

công khai int x;

công khai int y;

}

}

Đề xuất: