Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-23 14:39
Control remoto de Arduino Youtube
Si usa Youtube para proporcionarle una película o música para ver mientras duerme, seguramente se habrá despertado con un anuncio cargado o con diferentes niveles de volumen cuando comience una nueva película. No hace falta decir que esto puede resultar bastante irritante.
Entonces, mi solución que te demuestro aquí para construir por ti mismo es un control remoto basado en Arduino para interactuar con Youtube a distancia. Se requiere el control remoto para cambiar el volumen de sonido principal de mi PC, omitir anuncios en Youtube y omitir videos en Youtube.
Además, se incluye un sensor de nivel de audio para determinar qué tan alto es realmente el altavoz, que a su vez se puede usar para bajar automáticamente el nivel de sonido al detectar interrupciones fuertes como un anuncio.
Por último, agregué un gráfico en la aplicación de PC para mostrar los niveles de audio detectados.
La solución se puede refinar mejor, pero para mí cumple la tarea.
Paso 1: componentes necesarios
Todos estos componentes son suministrados por Leobot Electronics (https://leobot.net)
1) Arduino UNO R3
leobot.net/viewproduct.aspx?id=530
2) REMOTO DE 4 CANALES (315MHZ) + MÓDULO RECEPTOR (315MHZ)
leobot.net/viewproduct.aspx?id=521
3) MÓDULO DE SENSOR DE DETECCIÓN DE SONIDO Y VOZ DE MICRÓFONO (KY-037)
leobot.net/viewproduct.aspx?id=217
Software
1) Estudio Visual
visualstudio.microsoft.com/
2) IDE de Arduino
www.arduino.cc/en/main/software
Paso 2: configuración del hardware
1) Conecte el módulo receptor de 4 canales al Arduino.
Pin del receptor de 4 canales-> Pin de Arduino Uno
GND-> GND
5V-> 5V
D0-> Digital 2
D1-> Digital 3
D2-> Digital 4
D3-> Digital 5
2) Conecte el módulo de micrófono KY-037 al Arduino
Micrófono KY-037 Pin-> Pin Arduino Uno
GND-> GND
+ -> 3,3 V
A0-> Analógico 3
Paso 3: Código Arduino
Visión general
La lógica que debe seguir Arduino es la siguiente:
A) Verifique si el receptor está señalando algún pin.
B) Dependiendo del puerto IO en el que se reciba la señal, el comando se enviará a la PC.
C) Una vez realizadas todas las acciones de control remoto, detecte el nivel de audio con el micrófono y envíelo a la PC.
D) Todos los comandos enviados a la PC tienen un formato de primero tener un carácter y luego un valor (si se necesita un valor).
E) Hay cinco comandos enviados desde Arduino a la PC
una. "U" - Subir volumen
B. "D" - Bajar volumen
C. "S" - Omitir añadir
D. "V": omitir video
mi. "A": nivel de audio detectado seguido del valor
El código Arduino:
Descargue el código Arduino aquí:
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
configuración vacía () {
Serial.begin (9600);
pinMode (A3, ENTRADA);
pinMode (in1, ENTRADA);
pinMode (in2, ENTRADA);
pinMode (in3, ENTRADA);
pinMode (in4, ENTRADA);
}
bucle vacío () {
si (digitalRead (in1))
{
Serial.println ("u");
retraso (100);
}
si (digitalRead (in2))
{
Serial.println ("d");
retraso (100);
}
si (digitalRead (in3))
{
Serial.println ("s");
retraso (100);
}
si (digitalRead (in4))
{
Serial.println ("v");
retraso (100);
}
int readVal = analogRead (A3);
Serial.println (String ("a") + String (readVal));
retraso (50);
}
Paso 4: Código de la aplicación para PC (C #. NET)
La aplicación escuchará a través del puerto COM (USB) y reaccionará según el comando que se reciba. La forma más sencilla de subir y bajar el sonido en la PC es utilizar los servicios de Interrop para hablar directamente con el sistema operativo Windows. También usamos los servicios de Interrop para mover el mouse a una posición específica en la pantalla y hacer clic. Para permitir diferentes pantallas y tamaños de vista, permitimos que el usuario especifique la posición de los botones para omitir agregar y omitir video.
Usamos un gráfico.net estándar para mostrar los comandos de audio que recibimos.
Código de Windows:
Descarga el proyecto completo aquí:
leobot.net/audioadjust.zip
usando el sistema;
utilizando System. Collections. Generic;
using System. ComponentModel;
utilizando System. Data;
usando System. Drawing;
utilizando System. Linq;
usando System. Text;
usando System. Windows. Forms;
utilizando System. Runtime. InteropServices;
usando System. IO. Ports;
usando System. Threading;
espacio de nombres AudioAdjust
{
clase parcial pública Form1: Form
{
[DllImport ("User32. Dll")]
public static extern long SetCursorPos (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);
// Acciones del mouse
privado const int MOUSEEVENTF_LEFTDOWN = 0x02;
privado const int MOUSEEVENTF_LEFTUP = 0x04;
privado const int MOUSEEVENTF_RIGHTDOWN = 0x08;
const privado 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;
static SerialPort _serialPort;
int adX = 1281;
int adY = 706;
int vidX = 250;
int vidY = 780;
bool enableAudioChange = false;
Public Form1 ()
{
InitializeComponent ();
}
Private void Form1_Load (remitente de objeto, EventArgs e)
{
cadena nombres = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (nombres);
comboBoxPort. SelectedIndex = 0;
}
int currentPoint = 0;
button1_Click vacío privado (remitente del objeto, EventArgs e)
{
_serialPort = new SerialPort ();
_serialPort. DataReceived + = new SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Configure su tablero COM
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close ();
demás
{
_serialPort. Open ();
}
// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // disminuir volumen
}
void _serialPort_DataReceived (remitente del objeto, SerialDataReceivedEventArgs e)
{
tratar
{
string fullval = _serialPort. ReadLine ();
string com = fullval [0]. ToString ();
cambiar (com)
{
caso "a":
{
{
// nivel de audio
string val = fullval. Replace ("a", "");
int valInte = int. Parse (val);
AddData (valInt);
}
rotura;
}
caso "u":
{
// audio arriba
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // disminuir volumen
rotura;
}
caso "d":
{
// audio abajo
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // disminuir volumen
rotura;
}
casos :
{
//omitir aviso publicitario
MoveCursorSkipAd ();
Thread. Sleep (10);
DoMouseClick ();
rotura;
}
caso "v":
{
//omitir aviso publicitario
MoveCursorSkipVideo ();
Thread. Sleep (10);
DoMouseClick ();
rotura;
}
}
}
captura
{
}
// lanzar una nueva NotImplementedException ();
}
Private void MoveCursorSkipAd ()
{
Cursor. Position = nuevo punto (1140, 725);
Cursor. Position = nuevo punto (adX, adY);
}
Private void MoveCursorSkipVideo ()
{
Cursor. Position = nuevo punto (1140, 725);
Cursor. Position = nuevo punto (vidX, vidY);
}
public void DoMouseClick ()
{
// Llamar a la función importada con la posición actual del cursor
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 (nivel int)
{
si (enableAudioChange)
{
si (nivel> = MaxLevel)
{
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // disminuir volumen
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // disminuir volumen
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // disminuir volumen
}
demás
{
si (nivel <MaxLevel - 0)
{
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // disminuir volumen
}
}
}
SetChart (nivel);
currentPoint ++;
}
delegar void SetTextCallback (int val);
Private void SetChart (int val)
{
// InvokeRequired required compara el ID del hilo del
// subproceso de llamada al ID de subproceso del subproceso de creación.
// Si estos hilos son diferentes, devuelve verdadero.
si (this.chart1. InvokeRequired)
{
SetTextCallback d = nuevo SetTextCallback (SetChart);
this. Invoke (d, nuevo objeto {val});
}
demás
{
chart1. Series [0]. Points. AddXY (0, val);
si (currentPoint> = 10)
{
chart1. Series [0]. Points. RemoveAt (0);
}
}
}
private void textBoxLevel_TextChanged (remitente de objeto, EventArgs e)
{
tratar
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
captura
{
textBoxLevel. Text = MaxLevel + "";
}
}
botón vacío privadoTestSkip_Click (remitente del objeto, EventArgs e)
{
MoveCursorSkipAd ();
Thread. Sleep (10);
DoMouseClick ();
}
private void textBoxXpos_TextChanged (remitente del objeto, EventArgs e)
{
tratar
{
adX = int. Parse (textBoxXpos. Text);
}
captura
{
textBoxXpos. Text = adX + "";
}
}
private void textBoxYpos_TextChanged (remitente del objeto, EventArgs e)
{
tratar
{
adY = int. Parse (textBoxYpos. Text);
}
captura
{
textBoxYpos. Text = adY + "";
}
}
botón de vacío privado SkipVideo_Click (remitente de objeto, EventArgs e)
{
MoveCursorSkipVideo ();
Thread. Sleep (10);
DoMouseClick ();
}
private void textBoxXposVid_TextChanged (remitente del objeto, EventArgs e)
{
tratar
{
vidX = int. Parse (textBoxXposVid. Text);
}
captura
{
textBoxXposVid. Text = vidX + "";
}
}
private void textBoxYposVid_TextChanged (remitente de objeto, EventArgs e)
{
tratar
{
vidY = int. Parse (textBoxYposVid. Text);
}
captura
{
textBoxYposVid. Text = vidY + "";
}
}
checkBoxEnable_CheckedChanged vacío privado (remitente del objeto, EventArgs e)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
PUNTO de estructura pública
{
public int x;
public int y;
}
}
Recomendado:
El control remoto de TV se convierte en un control remoto de RF -- NRF24L01 + Tutorial: 5 pasos (con imágenes)
El control remoto de TV se convierte en un control remoto de RF || Tutorial de NRF24L01 +: En este proyecto te mostraré cómo utilicé el popular nRF24L01 + RF IC para ajustar el brillo de una tira de LED de forma inalámbrica a través de tres botones inútiles de un control remoto de TV. ¡Empecemos
IRduino: Control remoto Arduino - Imite un control remoto perdido: 6 pasos
IRduino: Control remoto Arduino - Imita un control remoto perdido: si alguna vez has perdido el control remoto de tu televisor o reproductor de DVD, sabes lo frustrante que es tener que caminar, buscar y usar los botones del dispositivo. A veces, estos botones ni siquiera ofrecen la misma funcionalidad que el control remoto. Rece
Kit de control remoto ordinario transformado en control remoto de juguete RC de cuatro canales: 4 pasos
Kit de control remoto ordinario transformado en control remoto de juguete RC de cuatro canales: 如何 将 通用 遥控 器 套件 转换 为 玩具 模型 中 使用 的 四 通道 遥控 器。 遥控 器 套件 非常 便宜。 它 采用 2262 和 2272 芯片 和 433 个 模块 构建。改造 方法 非常 简单。 只需 准备 一些 瓦楞纸 板 , 然后 按照 视频 教程 完成 这个 电子 项目 并 为 您 服务。 玩具 车船 提供 远程 无线 控制。
Convierta su control remoto IR en control remoto RF: 9 pasos (con imágenes)
Convierta su control remoto IR en control remoto RF: en el Instructable de hoy, le mostraré cómo puede usar un módulo RF genérico sin un microcontrolador, lo que eventualmente nos llevará a construir un proyecto en el que puede convertir un control remoto IR de cualquier dispositivo en un RF. Remoto. La principal ventaja de convertir un
Controle sus electrodomésticos con su control remoto de TV (control remoto por infrarrojos) con pantalla de temperatura y humedad: 9 pasos
Controle sus electrodomésticos con su control remoto de TV (control remoto por infrarrojos) con pantalla de temperatura y humedad: hola, soy Abhay y es mi primer blog sobre Instructables y hoy le mostraré cómo controlar sus electrodomésticos con el control remoto de su televisor construyendo esto. proyecto simple. gracias al laboratorio atl por el apoyo y el suministro de material