Índice:
- Etapa 1: componentes necessários
- Etapa 2: configuração do hardware
- Etapa 3: Código Arduino
- Etapa 4: código de aplicativo para PC (C #.NET)
Vídeo: Controle remoto do Arduino Youtube para dormir (Leobot Electronics): 4 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Arduino Youtube Remote
Se você usa o Youtube para fornecer um filme ou música para assistir enquanto dorme, certamente você acordou por um anúncio carregado ou por níveis de volume diferentes quando um novo filme começa. Não é preciso dizer que isso pode ser bastante irritante.
Então, minha solução que eu provo para você construir por si mesmo é um controle remoto baseado em Arduino para interagir com o Youtube à distância. O controle remoto é necessário para alterar o volume do som principal do meu PC, pular anúncios no Youtube e pular vídeos no Youtube.
Além disso, está incluído um sensor de nível de áudio para determinar o quão alto o alto-falante realmente é, que por sua vez pode ser usado para diminuir automaticamente o nível de som ao detectar interrupções altas, como um anúncio.
Por último, adicionei um gráfico no aplicativo para PC para exibir os níveis de áudio detectados.
A solução pode ser melhor refinada, mas para mim ela cumpre a tarefa.
Etapa 1: componentes necessários
Todos esses componentes são fornecidos pela Leobot Electronics (https://leobot.net)
1) Arduino UNO R3
leobot.net/viewproduct.aspx?id=530
2) 4 CANAIS REMOTO (315MHZ) + MÓDULO RECEPTOR (315MHZ)
leobot.net/viewproduct.aspx?id=521
3) MÓDULO SENSOR DE DETECÇÃO DE VOZ DE MICROFONE E SOM (KY-037)
leobot.net/viewproduct.aspx?id=217
Programas
1) Visual Studio
visualstudio.microsoft.com/
2) IDE Arduino
www.arduino.cc/en/main/software
Etapa 2: configuração do hardware
1) Conecte o módulo receptor de 4 canais ao Arduino.
Pin do receptor de 4 canais-> Pin do Arduino Uno
GND-> GND
5V-> 5V
D0-> Digital 2
D1-> Digital 3
D2-> Digital 4
D3-> Digital 5
2) Conecte o módulo Microfone KY-037 ao Arduino
Pin do microfone KY-037-> Pin do Arduino Uno
GND-> GND
+ -> 3,3 V
A0-> Analógico 3
Etapa 3: Código Arduino
Visão geral
A lógica que o Arduino precisa seguir é a seguinte:
A) Verifique se o receptor está sinalizando algum pino.
B) Dependendo de qual porta IO o sinal é recebido é o comando que será enviado ao PC.
C) Depois de concluir todas as ações do controle remoto, detecte o nível de áudio com o microfone e envie para o PC.
D) Todos os comandos enviados para o PC têm o formato de primeiro ter um caractere depois um valor (se um valor for necessário).
E) Existem cinco comandos enviados do Arduino para o PC
uma. “U” - Aumentar o volume
b. “D” - Diminuir o volume
c. “S” - Pular Adicionar
d. “V” - Pular vídeo
e. “A” - Nível de áudio detectado seguido pelo valor
O Código Arduino:
Baixe o código do Arduino aqui:
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");
atraso (100);
}
if (digitalRead (in2))
{
Serial.println ("d");
atraso (100);
}
if (digitalRead (in3))
{
Serial.println ("s");
atraso (100);
}
if (digitalRead (in4))
{
Serial.println ("v");
atraso (100);
}
int readVal = analogRead (A3);
Serial.println (String ("a") + String (readVal));
atraso (50);
}
Etapa 4: código de aplicativo para PC (C #. NET)
O aplicativo ouvirá pela porta COM (USB) e reagirá de acordo com o comando recebido. A maneira mais simples de aumentar ou diminuir o som no PC é usar os serviços da Interrop para falar diretamente com o sistema operacional Windows. Também usamos os serviços da Interrop para mover o mouse para uma posição específica na tela e clicar. Para permitir diferentes telas e tamanhos de visualização, permitimos que o usuário especifique a posição dos botões de adicionar e ignorar vídeo.
Usamos um gráfico.net padrão para exibir todos os comandos de áudio que recebemos.
Código do Windows:
Baixe o projeto completo aqui:
leobot.net/audioadjust.zip
using System;
using System. Collections. Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
usando System. Linq;
using System. Text;
using System. Windows. Forms;
using System. Runtime. InteropServices;
using System. IO. Ports;
using System. Threading;
namespace AudioAdjust
{
classe pública parcial Form1: Formulário
{
[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);
// Ações do mouse
const int privado MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
const int privado MOUSEEVENTF_RIGHTDOWN = 0x08;
const int privado MOUSEEVENTF_RIGHTUP = 0x10;
[DllImport ("user32.dll")]
estático extern void keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
Aleatório aRand = novo Aleatório ();
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 (objeto remetente, EventArgs e)
{
string names = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (nomes);
comboBoxPort. SelectedIndex = 0;
}
int currentPoint = 0;
private void button1_Click (objeto remetente, EventArgs e)
{
_serialPort = novo SerialPort ();
_serialPort. DataReceived + = novo SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Defina o COM da sua placa
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close ();
outro
{
_serialPort. Open ();
}
// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // diminuir o volume
}
void _serialPort_DataReceived (remetente do objeto, SerialDataReceivedEventArgs e)
{
Experimente
{
string fullval = _serialPort. ReadLine ();
string com = fullval [0]. ToString ();
switch (com)
{
case "a":
{
{
// nível de áudio
string val = fullval. Replace ("a", "");
int valInt = int. Parse (val);
AddData (valInt);
}
pausa;
}
case "u":
{
// áudio
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // diminuir o volume
pausa;
}
caso "d":
{
// áudio para baixo
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // diminuir o volume
pausa;
}
case "s":
{
//pular Anúncio
MoveCursorSkipAd ();
Thread. Sleep (10);
DoMouseClick ();
pausa;
}
caso "v":
{
//pular Anúncio
MoveCursorSkipVideo ();
Thread. Sleep (10);
DoMouseClick ();
pausa;
}
}
}
pegar
{
}
// lança novo NotImplementedException ();
}
private void MoveCursorSkipAd ()
{
Cursor. Position = novo ponto (1140, 725);
Cursor. Position = novo ponto (adX, adY);
}
private void MoveCursorSkipVideo ()
{
Cursor. Position = novo ponto (1140, 725);
Cursor. Position = novo ponto (vidX, vidY);
}
public void DoMouseClick ()
{
// Chame a função importada com a posição atual do 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 (nível interno)
{
if (enableAudioChange)
{
if (level> = MaxLevel)
{
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // diminuir o volume
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // diminuir o volume
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // diminuir o volume
}
outro
{
if (nível <MaxLevel - 0)
{
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // diminuir o volume
}
}
}
SetChart (nível);
currentPoint ++;
}
delegado void SetTextCallback (int val);
private void SetChart (int val)
{
// InvokeRequired obrigatório compara o ID do segmento do
// chamando o encadeamento para o ID do encadeamento do encadeamento em criação.
// Se esses threads forem diferentes, ele retorna verdadeiro.
if (this.chart1. InvokeRequired)
{
SetTextCallback d = new SetTextCallback (SetChart);
this. Invoke (d, novo objeto {val});
}
outro
{
chart1. Series [0]. Points. AddXY (0, val);
if (currentPoint> = 10)
{
chart1. Series [0]. Points. RemoveAt (0);
}
}
}
private void textBoxLevel_TextChanged (objeto remetente, EventArgs e)
{
Experimente
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
pegar
{
textBoxLevel. Text = MaxLevel + "";
}
}
private void buttonTestSkip_Click (objeto remetente, EventArgs e)
{
MoveCursorSkipAd ();
Thread. Sleep (10);
DoMouseClick ();
}
private void textBoxXpos_TextChanged (objeto remetente, EventArgs e)
{
Experimente
{
adX = int. Parse (textBoxXpos. Text);
}
pegar
{
textBoxXpos. Text = adX + "";
}
}
private void textBoxYpos_TextChanged (objeto remetente, EventArgs e)
{
Experimente
{
adY = int. Parse (textBoxYpos. Text);
}
pegar
{
textBoxYpos. Text = adY + "";
}
}
private void buttonSkipVideo_Click (objeto remetente, EventArgs e)
{
MoveCursorSkipVideo ();
Thread. Sleep (10);
DoMouseClick ();
}
private void textBoxXposVid_TextChanged (objeto remetente, EventArgs e)
{
Experimente
{
vidX = int. Parse (textBoxXposVid. Text);
}
pegar
{
textBoxXposVid. Text = vidX + "";
}
}
private void textBoxYposVid_TextChanged (objeto remetente, EventArgs e)
{
Experimente
{
vidY = int. Parse (textBoxYposVid. Text);
}
pegar
{
textBoxYposVid. Text = vidY + "";
}
}
private void checkBoxEnable_CheckedChanged (objeto remetente, EventArgs e)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
estrutura pública POINT
{
public int x;
public int y;
}
}
Recomendado:
O controle remoto da TV se torna um controle remoto de RF -- NRF24L01 + Tutorial: 5 etapas (com imagens)
O controle remoto da TV se torna um controle remoto RF || NRF24L01 + Tutorial: Neste projeto vou mostrar como usei o popular IC nRF24L01 + RF para ajustar o brilho de uma faixa de LED sem fio por meio de três botões inúteis de um controle remoto de TV. Vamos começar
ESP8266 RGB LED STRIP WIFI Control - NODEMCU como um controle remoto IR para faixa de LED controlada por wi-fi - Controle de smartphone RGB LED STRIP: 4 etapas
ESP8266 RGB LED STRIP WIFI Control | NODEMCU como um controle remoto infravermelho para faixa de LED controlada por wi-fi | RGB LED STRIP Smartphone Control: Olá pessoal, neste tutorial vamos aprender como usar o nodemcu ou esp8266 como um controle remoto IR para controlar uma faixa RGB LED e o Nodemcu será controlado pelo smartphone através de wi-fi. Então, basicamente você pode controlar o RGB LED STRIP com seu smartphone
Kit de controle remoto comum transformado em controle remoto de brinquedo RC de quatro canais: 4 etapas
Kit de controle remoto comum transformado em controle remoto de brinquedo RC de quatro canais:改造 方法 非常 简单。 只需 准备 一些 瓦楞纸 板, 然后 按照 视频 教程 完成 这个 电子 项目 并 为 您 服务。 玩具 车船 提供 远程 无线 控制。
Um guia para colocar seu Arduino para dormir: 5 etapas
Um guia para colocar seu Arduino para dormir: Às vezes, estamos em uma situação que exige que coloquemos um Arduino em um lugar onde conectá-lo à rede elétrica não seja uma opção. Isso acontece frequentemente quando tentamos registrar informações em um site remoto ou apenas precisamos ter seu Arduino ativo em um
Controle seus aparelhos elétricos com seu controle remoto de TV (ir remoto) com display de temperatura e umidade: 9 etapas
Controle seus aparelhos elétricos com o controle remoto da TV (ir remoto) com visor de temperatura e umidade: oi, sou Abhay e é meu primeiro blog no Instructables e hoje vou mostrar como controlar seus aparelhos elétricos com o controle remoto da TV construindo este projeto simples. obrigado ao atl lab pelo apoio e fornecimento do material