Taula de continguts:
- Pas 1: components necessaris
- Pas 2: Configuració del maquinari
- Pas 3: Codi Arduino
- Pas 4: Codi d'aplicació de PC (C #.NET)
Vídeo: Control remot de Youtube Arduino per dormir (Leobot Electronics): 4 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
Remot Arduino Youtube
Si utilitzeu Youtube per proporcionar-vos una pel·lícula o una música per veure mentre dormiu, segur que us hauria despertat un anunci de càrrega o diferents nivells de volum quan comenci una nova pel·lícula. No cal dir que pot resultar força irritant.
Per tant, la meva solució que us demostro aquí per construir per vosaltres mateixos és un control remot basat en Arduino per interactuar amb Youtube a distància. El comandament a distància és necessari per canviar el volum de so principal del meu PC, ometre anuncis a Youtube i ometre vídeos a Youtube.
També s’inclou un sensor de nivell d’àudio per determinar la intensitat de l’altaveu, que al seu torn es pot utilitzar per baixar automàticament el nivell de so en detectar interrupcions fortes, com ara un anunci.
Per últim, he afegit un gràfic a l’aplicació de PC per mostrar els nivells d’àudio detectats.
La solució es pot refinar millor, però per a mi compleix la tasca.
Pas 1: components necessaris
Tots aquests components els subministra Leobot Electronics (https://leobot.net)
1) Arduino UNO R3
leobot.net/viewproduct.aspx?id=530
2) REMOT DE 4 CANALS (315 MHz) + M MODDUL DE RECEPTOR (315 MHz)
leobot.net/viewproduct.aspx?id=521
3) M MODDUL DE SENSOR DE VEU I DETECCIÓ DE SO DE MICRPHFONS (KY-037)
leobot.net/viewproduct.aspx?id=217
Programari
1) Visual Studio
visualstudio.microsoft.com/
2) IDE Arduino
www.arduino.cc/ca/main/software
Pas 2: Configuració del maquinari
1) Connecteu el mòdul receptor de 4 canals a l'Arduino.
Pin de receptor de 4 canals-> Pin d'Arduino Uno
GND-> GND
5V-> 5V
D0-> Digital 2
D1-> Digital 3
D2-> Digital 4
D3-> Digital 5
2) Connecteu el mòdul KY-037 del micròfon a l'Arduino
Micròfon KY-037 Pin-> Pin Arduino Uno
GND-> GND
+ -> 3,3V
A0-> Analògic 3
Pas 3: Codi Arduino
Visió general
La lògica que Arduino ha de seguir és la següent:
A) Comproveu si el receptor està assenyalant algun pin.
B) Segons el port IO on es rebi el senyal, és a quina ordre s’enviarà al PC.
C) Un cop fetes totes les accions de control remot, detecteu el nivell d'àudio amb el micròfon i envieu-lo al PC.
D) Totes les ordres que s’envien al PC tenen un format de primer tenir un caràcter i després un valor (si es necessita un valor).
E) Hi ha cinc ordres enviades des de l'Arduino al PC
a. "U": augment de volum
b. "D": baixar de volum
c. "S": Omet l'addició
d. "V": Omet el vídeo
e. "A": nivell d'àudio detectat seguit del valor
El codi Arduino:
Descarregueu el codi Arduino aquí:
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
configuració nul·la () {
Serial.begin (9600);
pinMode (A3, INPUT);
pinMode (in1, INPUT);
pinMode (in2, INPUT);
pinMode (in3, INPUT);
pinMode (in4, INPUT);
}
bucle buit () {
if (digitalRead (in1))
{
Serial.println ("u");
retard (100);
}
if (digitalRead (in2))
{
Serial.println ("d");
retard (100);
}
if (digitalRead (in3))
{
Serial.println ("s");
retard (100);
}
if (digitalRead (in4))
{
Serial.println ("v");
retard (100);
}
int readVal = analogRead (A3);
Serial.println (String ("a") + String (readVal));
retard (50);
}
Pas 4: Codi d'aplicació de PC (C #. NET)
L'aplicació escoltarà el port COM (USB) i reaccionarà en funció de l'ordre que es rebi. La forma més senzilla d’augmentar i baixar el so del PC és utilitzar els serveis d’Interrop per parlar directament amb el sistema operatiu Windows. També fem servir els serveis d’Interrop per moure el ratolí a una posició específica a la pantalla i fer clic. Per tal de permetre diferents pantalles i mides de visualització, permetem a l'usuari especificar la posició dels botons d'addició i ometre vídeo.
Utilitzem un gràfic.net estàndard per mostrar qualsevol ordre d’àudio que rebem.
Codi de Windows:
Descarregueu el projecte complet aquí:
leobot.net/audioadjust.zip
utilitzant el sistema;
utilitzant System. Collections. Generic;
utilitzant System. ComponentModel;
utilitzant System. Data;
utilitzant System. Drawing;
utilitzant System. Linq;
utilitzant System. Text;
utilitzant System. Windows. Forms;
utilitzant System. Runtime. InteropServices;
utilitzant System. IO. Ports;
utilitzant System. Threading;
espai de noms AudioAdjust
{
classe parcial pública Form1: Formulari
{
[DllImport ("User32. Dll")]
públic estàtic extern llarg SetCursorPos (int x, int y);
[DllImport ("User32. Dll")]
bool extern públic estàtic ClientToScreen (IntPtr hWnd, ref POINT point);
[DllImport ("user32.dll", CharSet = CharSet. Auto, CallingConvention = CallingConvention. StdCall)]
public static void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
// Accions del ratolí
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")]
estàtic 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 = fals;
formulari públic 1 ()
{
InitializeComponent ();
}
private void Form1_Load (remitent d'objectes, EventArgs e)
{
string names = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (noms);
comboBoxPort. SelectedIndex = 0;
}
int CurrentPoint = 0;
private void button1_Click (remitent d'objectes, EventArgs e)
{
_serialPort = nou SerialPort ();
_serialPort. DataReceived + = new SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Estableix el tauler COM
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close ();
en cas contrari
{
_serialPort. Open ();
}
// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // disminuir el volum
}
void _serialPort_DataReceived (remitent de l'objecte, SerialDataReceivedEventArgs e)
{
provar
{
cadena fullval = _serialPort. ReadLine ();
string com = fullval [0]. ToString ();
commutador (com)
{
cas "a":
{
{
// nivell d’àudio
cadena val = fullval. Replace ("a", "");
int valInt = int. Parse (val);
AddData (valInt);
}
trencar;
}
cas "u":
{
// àudio amunt
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // disminuir el volum
trencar;
}
cas "d":
{
// baixa l’àudio
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // disminuir el volum
trencar;
}
cas "s":
{
//saltar anunci
MoveCursorSkipAd ();
Fil. Dorm (10);
DoMouseClick ();
trencar;
}
cas "v":
{
//saltar anunci
MoveCursorSkipVideo ();
Fil. Dorm (10);
DoMouseClick ();
trencar;
}
}
}
atrapar
{
}
// llança una nova NotImplementedException ();
}
private void MoveCursorSkipAd ()
{
Cursor. Position = punt nou (1140, 725);
Cursor. Position = punt nou (adX, adY);
}
private void MoveCursorSkipVideo ()
{
Cursor. Position = punt nou (1140, 725);
Cursor. Position = punt nou (vidX, vidY);
}
public void DoMouseClick ()
{
// Truqueu a la funció importada amb la posició actual del cursor
uint X = (uint) Cursor. Position. X;
uint Y = (uint) Cursor. Posició. Y;
mouse_event (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
mouse_event (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
void AddData (nivell int)
{
if (enableAudioChange)
{
if (nivell> = Nivell màxim)
{
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // disminuir el volum
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // disminuir el volum
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // disminuir el volum
}
en cas contrari
{
if (nivell <MaxLevel - 0)
{
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // disminuir el volum
}
}
}
SetChart (nivell);
currentPoint ++;
}
delegate void SetTextCallback (int val);
private void SetChart (int val)
{
// InvokeRequired required compara l'identificador de fil del fitxer
// cridant el fil a l'identificador de fil del fil creador.
// Si aquests fils són diferents, es torna cert.
if (this.chart1. InvokeRequired)
{
SetTextCallback d = nou SetTextCallback (SetChart);
this. Invoke (d, nou objecte {val});
}
en cas contrari
{
chart1. Series [0]. Points. AddXY (0, val);
si (currentPoint> = 10)
{
chart1. Series [0]. Points. RemoveAt (0);
}
}
}
private void textBoxLevel_TextChanged (remitent d'objectes, EventArgs e)
{
provar
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
atrapar
{
textBoxLevel. Text = MaxLevel + "";
}
}
private void buttonTestSkip_Click (remitent d'objectes, EventArgs e)
{
MoveCursorSkipAd ();
Fil. Dorm (10);
DoMouseClick ();
}
private void textBoxXpos_TextChanged (remitent d'objectes, EventArgs e)
{
provar
{
adX = int. Parse (textBoxXpos. Text);
}
atrapar
{
textBoxXpos. Text = adX + "";
}
}
private void textBoxYpos_TextChanged (remitent d'objectes, EventArgs e)
{
provar
{
adY = int. Parse (textBoxYpos. Text);
}
atrapar
{
textBoxYpos. Text = adY + "";
}
}
private void buttonSkipVideo_Click (remitent d'objectes, EventArgs e)
{
MoveCursorSkipVideo ();
Fil. Dorm (10);
DoMouseClick ();
}
private void textBoxXposVid_TextChanged (remitent d'objectes, EventArgs e)
{
provar
{
vidX = int. Parse (textBoxXposVid. Text);
}
atrapar
{
textBoxXposVid. Text = vidX + "";
}
}
private void textBoxYposVid_TextChanged (remitent d'objectes, EventArgs e)
{
provar
{
vidY = int. Parse (textBoxYposVid. Text);
}
atrapar
{
textBoxYposVid. Text = vidY + "";
}
}
private void checkBoxEnable_CheckedChanged (remitent d'objectes, EventArgs e)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
public struct POINT
{
public int x;
públic i;
}
}
Recomanat:
IRduino: control remot Arduino: imiteu un control remot perdut: 6 passos
IRduino: control remot Arduino: imiteu un control remot perdut: si alguna vegada heu perdut el comandament a distància del vostre reproductor de TV o DVD, sabeu el frustrant que és haver d’anar, trobar i utilitzar els botons del propi dispositiu. De vegades, aquests botons ni tan sols ofereixen la mateixa funcionalitat que el comandament a distància. Rebre
Kit de control remot ordinari transformat en control remot de joguina RC de quatre canals: 4 passos
Kit de control remot ordinari transformat en control remot de joguina de quatre canals: control remot de joguina RC:改造 方法 非常 简单。 只需 准备 一些 瓦楞纸 板 , 然后 按照 视频 教程 这个 这个 电子 项目 并 为 您 服务 玩具 玩具 车船 提供 远程 无线 控制。
Controleu-vos els aparells elèctrics amb el vostre control remot de televisió (control remot ir) amb pantalla de temperatura i humitat: 9 passos
Controleu-vos els aparells elèctrics amb el vostre control remot de televisió (control remot ir) amb pantalla de temperatura i humitat: hola, sóc Abhay i és el meu primer bloc sobre Instructables i avui us mostraré com controlar els vostres electrodomèstics amb el vostre control remot de TV construint aquest projecte senzill. gràcies al laboratori atl per obtenir suport i proporcionar el material
Liberació del cable remot Olympus Evolt E510 (versió 2 amb enfocament automàtic al control remot): 6 passos (amb imatges)
Liberació del cable remot Olympus Evolt E510 (versió 2 amb enfocament automàtic al control remot): ahir vaig construir un comandament senzill amb un botó per al meu Olympus E510. La majoria de càmeres tenen un botó de disparador (el que premeu per fer una foto) que té dos modes. Si es prem el botó suaument, la càmera enfocarà automàticament i mesurarà la llum
Control remot remot: 11 passos (amb imatges)
Control remot a distància: tinc un nadó acabat de néixer i no creu que hagi de dormir el temps que la meva dona i jo també ho desitgem. Una cosa que el manté feliç al bressol és el mòbil que li penja. Així que quan es desperti si necessitem uns 25 minuts més o menys de sl