Съдържание:

Arduino Youtube дистанционно управление за сън (Leobot Electronics): 4 стъпки
Arduino Youtube дистанционно управление за сън (Leobot Electronics): 4 стъпки

Видео: Arduino Youtube дистанционно управление за сън (Leobot Electronics): 4 стъпки

Видео: Arduino Youtube дистанционно управление за сън (Leobot Electronics): 4 стъпки
Видео: Turning Your Raspberry Pi Pico to Mitsubishi FX1N PLC 2024, Ноември
Anonim
Arduino Youtube дистанционно управление за сън (Leobot Electronics)
Arduino Youtube дистанционно управление за сън (Leobot Electronics)

Arduino YouTube дистанционно

Ако използвате Youtube, за да ви осигурим филм или музика, които да гледате, докато спите, със сигурност бихте се събудили или от реклама за зареждане, или от различни нива на силата на звука, когато започне нов филм. Излишно е да казвам, че това може да бъде доста дразнещо.

И така, моето решение, което ви доказвам тук, за да създадете за себе си, е дистанционно управление, базирано на Arduino, за взаимодействие с Youtube от разстояние. Дистанционното е необходимо за промяна на основния звук на моя компютър, пропускане на реклами в Youtube и пропускане на видеоклипове в Youtube.

Включен е и сензор за ниво на звука, за да се определи колко висок е високоговорителят, което от своя страна може да се използва за автоматично понижаване на нивото на звука при откриване на силни прекъсвания, като например реклама.

И накрая, добавих диаграма в приложението за компютър, за да покажа откритите аудио нива.

Решението може да бъде по -добре усъвършенствано, но за мен то изпълнява задачата.

Стъпка 1: Необходими компоненти

Всички тези компоненти се доставят от Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 КАНАЛНО ДИСТАНЦИОННО (315MHZ) + РЕЦИВЕРЕН МОДУЛ (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) МОДУЛ НА СЕНЗОР НА МИКРОФОНЕН ГЛАС И ЗВУК (KY-037)

leobot.net/viewproduct.aspx?id=217

Софтуер

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Стъпка 2: Настройка на хардуера

1) Свържете 4-каналния приемник към Arduino.

4-канален приемник Pin-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Цифров 2

D1-> Цифров 3

D2-> Цифров 4

D3-> Цифров 5

2) Свържете микрофонния модул KY-037 към Arduino

Микрофон KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3V

A0-> Аналогов 3

Стъпка 3: Arduino код

Общ преглед

Логиката, която Arduino трябва да следва, е следната:

A) Проверете дали приемникът сигнализира някакви пинове.

Б) В зависимост от това кой IO порт е получен сигналът, това е командата, която ще бъде изпратена на компютъра.

В) След като приключите с всички действия за дистанционно управление, открийте нивото на звука с микрофона и го изпратете на компютъра.

D) Всички команди, изпратени до компютъра, имат формат първо да имат символ, след това стойност (ако е необходима стойност).

Д) Има пет команди, изпратени от Arduino към компютъра

а. „U“- Увеличаване на звука

б. “D” - намаляване на звука

° С. “S” - Пропуснете добавянето

д. „V“- Пропускане на видео

д. “A” - Нивото на звука е открито, последвано от стойността

Кодът на Arduino:

Изтеглете Arduino Code тук:

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 () {

ако (digitalRead (in1))

{

Serial.println ("u");

забавяне (100);

}

ако (digitalRead (in2))

{

Serial.println ("d");

забавяне (100);

}

ако (digitalRead (in3))

{

Serial.println ("s");

забавяне (100);

}

ако (digitalRead (in4))

{

Serial.println ("v");

забавяне (100);

}

int readVal = analogRead (A3);

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

забавяне (50);

}

Стъпка 4: PC App Code (C#. NET)

PC App Code (C#. NET)
PC App Code (C#. NET)

Приложението ще слуша през COM (USB) порта и ще реагира в зависимост от получената команда. Най -простият начин да увеличите и намалите звука на компютъра е да използвате услугите Interrop, за да говорите директно с операционната система Windows. Ние също използваме услугите Interrop за преместване на мишката до определена позиция на екрана и щракване. За да позволим различни екрани и размери на изгледа, ние позволяваме на потребителя да определи позицията на бутоните за пропускане на добавяне и пропускане на видео.

Използваме стандартна.net диаграма за показване на всички аудио команди, които получаваме.

Windows код:

Изтеглете пълния проект тук:

leobot.net/audioadjust.zip

използване на System;

използване на System. Collections. Generic;

използване на System. ComponentModel;

използване на System. Data;

използване на System. Drawing;

използване на System. Linq;

използване на System. Text;

използване на System. Windows. Forms;

използване на System. Runtime. InteropServices;

използване на System. IO. Ports;

използване на System. Threading;

пространство за имена AudioAdjust

{

публичен частичен клас Form1: Form

{

[DllImport ("User32. Dll")]

публичен статичен външен дълъг SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

публичен статичен външен bool ClientToScreen (IntPtr hWnd, ref POINT точка);

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

публична статична външна void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Действия с мишката

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

статичен extern void keybd_event (байт bVk, байт bScan, uint dwFlags, int dwExtraInfo);

Random aRand = new Random ();

public int LastLevel = 0;

public int MaxLevel = 255;

статичен SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

публичен формуляр1 ()

{

InitializeComponent ();

}

private void Form1_Load (изпращач на обект, EventArgs e)

{

низ имена = System. IO. Ports. SerialPort. GetPortNames ();

comboBoxPort. Items. AddRange (имена);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (изпращач на обект, EventArgs e)

{

_serialPort = нов SerialPort ();

_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Задайте вашата дъска COM

_serialPort. BaudRate = 9600;

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

иначе

{

_serialPort. Open ();

}

// keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // намаляване на силата на звука

}

void _serialPort_DataReceived (изпращач на обект, SerialDataReceivedEventArgs e)

{

опитвам

{

низ fullval = _serialPort. ReadLine ();

низ com = fullval [0]. ToString ();

превключвател (com)

{

случай "а":

{

{

// аудио ниво

низ val = fullval. Replace ("a", "");

int valInt = int. Parse (val);

AddData (valInt);

}

прекъсване;

}

регистър "u":

{

// аудио нагоре

keybd_event ((байт) Keys. VolumeUp, 0, 0, 0); // намаляване на силата на звука

прекъсване;

}

регистър "d":

{

// звук надолу

keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // намаляване на силата на звука

прекъсване;

}

регистър "s":

{

//пропуснете обява

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

прекъсване;

}

регистър "v":

{

//пропуснете обява

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

прекъсване;

}

}

}

улов

{

}

// хвърлям нов NotImplementedException ();

}

private void MoveCursorSkipAd ()

{

Cursor. Position = нова точка (1140, 725);

Cursor. Position = нова точка (adX, adY);

}

private void MoveCursorSkipVideo ()

{

Cursor. Position = нова точка (1140, 725);

Cursor. Position = нова точка (vidX, vidY);

}

обществена празнота DoMouseClick ()

{

// Извиква импортираната функция с текущата позиция на курсора

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 (int ниво)

{

if (enableAudioChange)

{

if (ниво> = MaxLevel)

{

keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // намаляване на силата на звука

keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // намаляване на силата на звука

keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // намаляване на силата на звука

}

иначе

{

if (ниво <MaxLevel - 0)

{

keybd_event ((байт) Keys. VolumeUp, 0, 0, 0); // намаляване на силата на звука

}

}

}

SetChart (ниво);

currentPoint ++;

}

делегиране на невалидна SetTextCallback (int val);

private void SetChart (int val)

{

// InvokeRequired required сравнява ID на нишката на

// извикване на нишка към идентификатора на нишката на създаващата нишка.

// Ако тези нишки са различни, връща true.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = нов SetTextCallback (SetChart);

this. Invoke (d, нов обект {val});

}

иначе

{

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

ако (текуща точка> = 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (подател на обект, EventArgs e)

{

опитвам

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

улов

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (изпращач на обект, EventArgs e)

{

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (изпращач на обект, EventArgs e)

{

опитвам

{

adX = int. Parse (textBoxXpos. Text);

}

улов

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (изпращач на обект, EventArgs e)

{

опитвам

{

adY = int. Parse (textBoxYpos. Text);

}

улов

{

textBoxYpos. Text = adY + "";

}

}

частен бутон за пустота SkipVideo_Click (подател на обект, EventArgs e)

{

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (подател на обект, EventArgs e)

{

опитвам

{

vidX = int. Parse (textBoxXposVid. Text);

}

улов

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (изпращач на обект, EventArgs e)

{

опитвам

{

vidY = int. Parse (textBoxYposVid. Text);

}

улов

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (изпращач на обект, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

обществена структура POINT

{

публичен int x;

public int y;

}

}

Препоръчано: