Table des matières:

Télécommande Arduino Youtube pour dormir (Leobot Electronics): 4 étapes
Télécommande Arduino Youtube pour dormir (Leobot Electronics): 4 étapes

Vidéo: Télécommande Arduino Youtube pour dormir (Leobot Electronics): 4 étapes

Vidéo: Télécommande Arduino Youtube pour dormir (Leobot Electronics): 4 étapes
Vidéo: U=RI | Arduino Ep.15 - Comment utiliser une télécommande? 2024, Novembre
Anonim
Télécommande Arduino Youtube pour dormir (Leobot Electronics)
Télécommande Arduino Youtube pour dormir (Leobot Electronics)

Télécommande Arduino Youtube

Si vous utilisez Youtube pour vous fournir un film ou de la musique à regarder pendant que vous dormez, vous auriez sûrement été réveillé par une annonce de chargement ou par différents niveaux de volume lorsqu'un nouveau film commence. Inutile de dire que cela peut être assez irritant.

Donc, ma solution que je vous prouve ici à construire par vous-même est une télécommande basée sur Arduino pour interagir avec Youtube à distance. La télécommande est nécessaire pour modifier le volume sonore principal de mon PC, ignorer les publicités sur Youtube et ignorer les vidéos sur Youtube.

Un capteur de niveau audio est également inclus pour déterminer le niveau sonore réel du haut-parleur, qui à son tour peut être utilisé pour réduire automatiquement le niveau sonore lors de la détection d'interruptions bruyantes telles qu'une publicité.

Enfin, j'ai ajouté un graphique sur l'application PC pour afficher les niveaux audio détectés.

La solution peut être mieux affinée mais pour moi, elle accomplit la tâche.

Étape 1: Composants nécessaires

Tous ces composants sont fournis par Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) TÉLÉCOMMANDE 4 CANAUX (315MHZ) + MODULE RÉCEPTEUR (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MODULE DE CAPTEUR DE DÉTECTION DE VOIX ET DE SON MICROPHONE (KY-037)

leobot.net/viewproduct.aspx?id=217

Logiciel

1) Visual Studio

visualstudio.microsoft.com/

2) IDE Arduino

www.arduino.cc/en/main/software

Étape 2: configuration du matériel

1) Connectez le module récepteur 4 canaux à l'Arduino.

Broche du récepteur 4 canaux -> Broche Arduino Uno

GND->GND

5V->5V

D0->Numérique 2

D1->Numérique 3

D2->Numérique 4

D3->Numérique 5

2) Connectez le module Microphone KY-037 à l'Arduino

Micro KY-037 Pin->Arduino Uno Pin

GND->GND

+->3.3V

A0->Analogique 3

Étape 3: Code Arduino

Aperçu

La logique que l'Arduino doit suivre est la suivante:

A) Vérifiez si le récepteur signale des broches.

B) Selon le port IO sur lequel le signal est reçu, la commande sera envoyée au PC.

C) Une fois toutes les actions de la télécommande terminées, détectez le niveau audio avec le microphone et envoyez-le au PC.

D) Toutes les commandes envoyées au PC ont le format d'avoir d'abord un caractère puis une valeur (si une valeur est nécessaire).

E) Il y a cinq commandes envoyées de l'Arduino au PC

une. "u" - Augmenter le volume

b. "d" - Baisser le volume

c. "s" - Ignorer l'ajout

ré. "v" - Ignorer la vidéo

e. "a" - Niveau audio détecté suivi de la valeur

Le code Arduino:

Téléchargez le code Arduino ici:

int in1=2;

int in2=3;

int in3=4;

int in4=5;

void setup() {

Serial.begin(9600);

pinMode (A3, ENTREE);

pinMode(in1, INPUT);

pinMode(in2, INPUT);

pinMode(in3, INPUT);

pinMode(in4, INPUT);

}

boucle vide() {

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);

}

Étape 4: Code d'application PC (C#. NET)

Code d'application PC (C#. NET)
Code d'application PC (C#. NET)

L'application écoutera via le port COM (USB) et réagira en fonction de la commande reçue. Le moyen le plus simple d'augmenter et de réduire le son sur le PC consiste à utiliser les services Interrop pour parler directement au système d'exploitation Windows. Nous utilisons également les services Interrop pour déplacer la souris à une position spécifique sur l'écran et cliquer. Afin de permettre différents écrans et tailles de vue, nous permettons à l'utilisateur de spécifier la position des boutons de saut d'ajout et de saut de vidéo.

Nous utilisons un graphique.net standard pour afficher toutes les commandes audio que nous recevons.

Code Windows:

Téléchargez le projet complet ici:

leobot.net/audioadjust.zip

en utilisant le système;

en utilisant System. Collections. Generic;

en utilisant System. ComponentModel;

en utilisant System. Data;

en utilisant System. Drawing;

en utilisant System. Linq;

en utilisant System. Text;

en utilisant System. Windows. Forms;

en utilisant System. Runtime. InteropServices;

en utilisant System. IO. Ports;

en utilisant System. Threading;

espace de noms AudioAdjust

{

classe partielle publique 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 externe void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

//Actions de la souris

privé const int MOUSEEVENTF_LEFTDOWN = 0x02;

privé const int MOUSEEVENTF_LEFTUP = 0x04;

privé const int MOUSEEVENTF_RIGHTDOWN = 0x08;

privé const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport("user32.dll")]

static externe void keybd_event (octet bVk, octet bScan, uint dwFlags, int dwExtraInfo);

Random aRand = new Random();

public int LastLevel = 0;

public int MaxLevel = 255;

SerialPort statique _serialPort;

int adX = 1281;

entier adY = 706;

entier vidX = 250;

entier vidY = 780;

bool enableAudioChange = false;

publique Form1()

{

InitializeComponent();

}

Private void Form1_Load (expéditeur d'objet, EventArgs e)

{

string names = System. IO. Ports. SerialPort. GetPortNames();

comboBoxPort. Items. AddRange(noms);

comboBoxPort. SelectedIndex = 0;

}

int CurrentPoint = 0;

private void button1_Click (expéditeur d'objet, EventArgs e)

{

_serialPort = nouveau SerialPort();

_serialPort. DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString();//Définissez votre carte COM

_serialPort. BaudRate = 9600;

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

autre

{

_serialPort. Open();

}

// keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // baisse le volume

}

void _serialPort_DataReceived (expéditeur d'objet, SerialDataReceivedEventArgs e)

{

essayer

{

chaîne fullval = _serialPort. ReadLine();

chaîne com = fullval[0]. ToString();

commutateur (com)

{

cas "a":

{

{

//niveau audio

chaîne val = fullval. Replace("a", "");

int valInt = int. Parse(val);

AddData(valInt);

}

Pause;

}

cas "u":

{

//audio up

keybd_event((byte)Keys. VolumeUp, 0, 0, 0); // baisse le volume

Pause;

}

cas "d":

{

//audio vers le bas

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // baisse le volume

Pause;

}

cas "s":

{

//passer la pub

MoveCursorSkipAd();

Thread. Sleep(10);

DoMouseClick();

Pause;

}

cas "v":

{

//passer la pub

MoveCursorSkipVideo();

Thread. Sleep(10);

DoMouseClick();

Pause;

}

}

}

attraper

{

}

//lance une nouvelle exception NotImplemented();

}

vide privé MoveCursorSkipAd()

{

Curseur. Position = nouveau Point(1140, 725);

Cursor. Position = new Point(adX, adY);

}

vide privé MoveCursorSkipVideo()

{

Curseur. Position = nouveau Point(1140, 725);

Curseur. Position = nouveau Point(vidX, vidY);

}

public void DoMouseClick()

{

//Appelle la fonction importée avec la position actuelle du curseur

uint X = (uint)Curseur. Position. X;

uint Y = (uint)Curseur. Position. Y;

mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);

mouse_event(MOUSEEVENTF_LEFTUP, X, Y, 0, 0);

}

void AddData(int level)

{

if (activerAudioChange)

{

si (niveau >= MaxLevel)

{

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // baisse le volume

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // baisse le volume

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // baisse le volume

}

autre

{

si (niveau < MaxLevel - 0)

{

keybd_event((byte)Keys. VolumeUp, 0, 0, 0); // baisse le volume

}

}

}

SetChart(niveau);

CurrentPoint++;

}

déléguer void SetTextCallback(int val);

Private void SetChart(int val)

{

// InvokeRequired required compare l'ID de thread du

// thread d'appel à l'ID de thread du thread créateur.

// Si ces threads sont différents, il renvoie true.

si (this.chart1. InvokeRequired)

{

SetTextCallback d = new SetTextCallback(SetChart);

this. Invoke(d, nouvel objet { val });

}

autre

{

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

si (PointCourant >= 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (expéditeur d'objet, EventArgs e)

{

essayer

{

MaxLevel = int. Parse(textBoxLevel. Text);

}

attraper

{

textBoxLevel. Text = MaxLevel + "";

}

}

bouton d'annulation privéTestSkip_Click (expéditeur d'objet, EventArgs e)

{

MoveCursorSkipAd();

Thread. Sleep(10);

DoMouseClick();

}

textBoxXpos_TextChanged privé vide (expéditeur d'objet, EventArgs e)

{

essayer

{

adX = int. Parse(textBoxXpos. Text);

}

attraper

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (expéditeur d'objet, EventArgs e)

{

essayer

{

adY = int. Parse(textBoxYpos. Text);

}

attraper

{

textBoxYpos. Text = adY + "";

}

}

bouton d'annulation privéSkipVideo_Click (expéditeur d'objet, EventArgs e)

{

MoveCursorSkipVideo();

Thread. Sleep(10);

DoMouseClick();

}

textBoxXposVid_TextChanged privé vide (expéditeur d'objet, EventArgs e)

{

essayer

{

vidX = int. Parse(textBoxXposVid. Text);

}

attraper

{

textBoxXposVid. Text = vidX + "";

}

}

textBoxYposVid_TextChanged privé vide (expéditeur d'objet, EventArgs e)

{

essayer

{

vidY = int. Parse(textBoxYposVid. Text);

}

attraper

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (expéditeur d'objet, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout(LayoutKind. Sequential)]

structure publique POINT

{

public int x;

public int y;

}

}

Conseillé: