Оглавление:
- Шаг 1. Необходимые компоненты
- Шаг 2: Настройка оборудования
- Шаг 3: код Arduino
- Шаг 4. Код приложения для ПК (C #.NET)
Видео: Пульт дистанционного управления Arduino Youtube для сна (Leobot Electronics): 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Пульт 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-КАНАЛЬНЫЙ ДИСТАНЦИОННЫЙ (315 МГц) + МОДУЛЬ ПРИЕМНИКА (315 МГц)
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-канального приемника-> Вывод Arduino Uno
GND-> GND
5 В-> 5 В
D0-> Цифровой 2
D1-> Цифровой 3
D2-> Цифровой 4
D3-> Цифровой 5
2) Подключите микрофонный модуль KY-037 к Arduino.
Микрофон KY-037 Pin-> Arduino Uno Pin
GND-> GND
+ -> 3,3 В
A0-> Аналог 3
Шаг 3: код Arduino
Обзор
Логика, которой должна следовать Arduino, следующая:
A) Убедитесь, что приемник сигнализирует о контактах.
Б) В зависимости от того, на каком порте ввода-вывода был получен сигнал, команда будет отправлена на ПК.
C) Выполнив все действия дистанционного управления, определите уровень звука с помощью микрофона и отправьте его на ПК.
D) Все команды, отправляемые на ПК, имеют формат: сначала символ, а затем значение (если значение необходимо).
E) От Arduino на ПК отправлено пять команд.
а. «U» - увеличение громкости
б. «D» - уменьшение громкости
c. «S» - пропустить добавление
d. «V» - пропустить видео
е. «A» - обнаруженный уровень звука, за которым следует значение
Код Arduino:
Загрузите код Arduino здесь:
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
void setup () {
Serial.begin (9600);
pinMode (A3, ВХОД);
pinMode (in1, INPUT);
pinMode (in2, INPUT);
pinMode (in3, ВХОД);
pinMode (in4, ВХОД);
}
void loop () {
если (digitalRead (in1))
{
Serial.println ("u");
задержка (100);
}
если (digitalRead (in2))
{
Serial.println ("d");
задержка (100);
}
если (digitalRead (in3))
{
Serial.println ("с");
задержка (100);
}
если (digitalRead (in4))
{
Serial.println ("v");
задержка (100);
}
int readVal = analogRead (A3);
Serial.println (String ("a") + String (readVal));
задержка (50);
}
Шаг 4. Код приложения для ПК (C #. NET)
Приложение будет прослушивать порт COM (USB) и реагировать в зависимости от полученной команды. Самый простой способ включить или выключить звук на ПК - использовать службы Interrop для прямого обращения к ОС Windows. Мы также используем сервисы Interrop, чтобы переместить указатель мыши в определенное место на экране и щелкнуть. Чтобы разрешить использование различных экранов и размеров просмотра, мы позволяем пользователю указывать положение кнопок пропуска добавления и пропуска видео.
Мы используем стандартную диаграмму.net для отображения любых получаемых звуковых команд.
Код Windows:
Скачать полный проект можно здесь:
leobot.net/audioadjust.zip
используя Систему;
using System. Collections. Generic;
using System. ComponentModel;
using System. Data;
с помощью System. Drawing;
using System. Linq;
using System. Text;
using System. Windows. Forms;
using System. Runtime. InteropServices;
используя System. IO. Ports;
using System. Threading;
пространство имен AudioAdjust
{
общедоступный частичный класс Form1: Form
{
[DllImport ("User32. Dll")]
общедоступный статический extern long SetCursorPos (int x, int y);
[DllImport ("User32. Dll")]
общедоступный статический extern bool ClientToScreen (IntPtr hWnd, ref POINT point);
[DllImport ("user32.dll", CharSet = CharSet. Auto, CallingConvention = CallingConvention. StdCall)]
общедоступный статический extern void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
// Действия мыши
частная константа int MOUSEEVENTF_LEFTDOWN = 0x02;
частная константа int MOUSEEVENTF_LEFTUP = 0x04;
частная константа int MOUSEEVENTF_RIGHTDOWN = 0x08;
частный const int MOUSEEVENTF_RIGHTUP = 0x10;
[DllImport ("user32.dll")]
static extern void keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
Случайный aRand = новый Случайный ();
общедоступный int LastLevel = 0;
общедоступный int MaxLevel = 255;
статический SerialPort _serialPort;
int adX = 1281;
int adY = 706;
int vidX = 250;
int vidY = 780;
bool enableAudioChange = false;
общедоступная форма Form1 ()
{
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 + = новый SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Устанавливаем COM платы
_serialPort. BaudRate = 9600;
если (_serialPort. IsOpen) _serialPort. Close ();
еще
{
_serialPort. Open ();
}
// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // уменьшаем громкость
}
void _serialPort_DataReceived (отправитель объекта, SerialDataReceivedEventArgs e)
{
пытаться
{
строка fullval = _serialPort. ReadLine ();
строка com = fullval [0]. ToString ();
переключатель (com)
{
case "a":
{
{
// уровень звука
строка val = fullval. Replace ("а", "");
int valInt = int. Parse (значение);
AddData (valInt);
}
перерыв;
}
case "u":
{
// аудио вверх
keybd_event ((байт) Keys. VolumeUp, 0, 0, 0); // уменьшаем громкость
перерыв;
}
case "d":
{
// звук выключен
keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // уменьшаем громкость
перерыв;
}
случаи :
{
//пропустить рекламу
MoveCursorSkipAd ();
Thread. Sleep (10);
DoMouseClick ();
перерыв;
}
case "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);
}
public void 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)
{
если (enableAudioChange)
{
если (уровень> = MaxLevel)
{
keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // уменьшаем громкость
keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // уменьшаем громкость
keybd_event ((байт) Keys. VolumeDown, 0, 0, 0); // уменьшаем громкость
}
еще
{
если (уровень <MaxLevel - 0)
{
keybd_event ((байт) Keys. VolumeUp, 0, 0, 0); // уменьшаем громкость
}
}
}
SetChart (уровень);
currentPoint ++;
}
делегат void SetTextCallback (int val);
частный недействительный SetChart (int val)
{
// Требуемый InvokeRequired сравнивает идентификатор потока
// вызываем поток к идентификатору создаваемого потока.
// Если эти потоки разные, возвращается истина.
если (this.chart1. InvokeRequired)
{
SetTextCallback d = новый SetTextCallback (SetChart);
this. Invoke (d, новый объект {val});
}
еще
{
chart1. Series [0]. Points. AddXY (0, val);
если (currentPoint> = 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 + "";
}
}
private void buttonSkipVideo_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
{
public int x;
public int y;
}
}
Рекомендуемые:
IRduino: Пульт дистанционного управления Arduino - имитация утерянного пульта дистанционного управления: 6 шагов
IRduino: Пульт дистанционного управления Arduino - имитируйте потерянный пульт: если вы когда-либо теряли пульт дистанционного управления для своего телевизора или DVD-плеера, вы знаете, как неприятно ходить, находить и использовать кнопки на самом устройстве. Иногда эти кнопки даже не обладают той же функциональностью, что и пульт. Rece
Обычный комплект дистанционного управления, преобразованный в четырехканальный игрушечный пульт дистанционного управления с дистанционным управлением: 4 шага
Обычный комплект дистанционного управления, преобразованный в четырехканальный игрушечный пульт дистанционного управления с дистанционным управлением:改造 方法 非常 简单。 只需 准备 一些 视频 教程 完成 这个 电子 项目 并 您 服务。 玩具 控制。
Пульт дистанционного управления для ПК Youtube и Netflix: 9 шагов (с изображениями)
Пульт дистанционного управления для ПК Youtube и Netflix: мой настольный компьютерный счетчик находится вдали от кровати, поэтому, естественно, мне нравится смотреть YouTube и фильмы, не вставая с кровати. Однако каждый раз, когда я ложусь, мне нужно отрегулировать громкость, по каким-то причинам приостановить видео или просто полностью пропустить видео
Отпуск кабеля дистанционного управления Olympus Evolt E510 (версия 2 с автофокусом на пульте дистанционного управления): 6 шагов (с изображениями)
Отпуск кабеля дистанционного управления Olympus Evolt E510 (версия 2 с автофокусом на пульте дистанционного управления): Вчера я построил простой пульт с одной кнопкой для своего Olympus E510. У большинства камер есть кнопка спуска затвора (та, которую вы нажимаете, чтобы сделать снимок), которая имеет два режима. Если слегка нажать кнопку, камера автоматически сфокусируется и измерит свет
Пульт дистанционного управления для малышей для ПК, видеоплеер: 6 шагов
Пульт дистанционного управления для малышей для ПК. Видеоплеер: я создаю пульт дистанционного управления, который подключается к ПК через USB. Большой пульт дистанционного управления позволяет моему малышу выбирать и воспроизводить видео на старом компьютере. Это относительно простой проект. Основной компонент - это либо USB-клавиатура, либо беспроводная USB-клавиатура. Тогда