Inhaltsverzeichnis:

Arduino Youtube-Fernbedienung zum Schlafen (Leobot Electronics) - Gunook
Arduino Youtube-Fernbedienung zum Schlafen (Leobot Electronics) - Gunook

Video: Arduino Youtube-Fernbedienung zum Schlafen (Leobot Electronics) - Gunook

Video: Arduino Youtube-Fernbedienung zum Schlafen (Leobot Electronics) - Gunook
Video: Arduino Tutorial - 1. Einführung (#1) 2024, November
Anonim
Arduino Youtube-Fernbedienung zum Schlafen (Leobot Electronics)
Arduino Youtube-Fernbedienung zum Schlafen (Leobot Electronics)

Arduino Youtube-Fernbedienung

Wenn Sie Youtube nutzen, um Ihnen einen Film oder Musik zum Anschauen im Schlaf zur Verfügung zu stellen, wären Sie beim Start eines neuen Films sicherlich entweder von einer Ladeanzeige oder unterschiedlichen Lautstärken geweckt worden. Unnötig zu erwähnen, dass dies ziemlich irritierend sein kann.

Also, meine Lösung, die ich Ihnen hier beweise, um für sich selbst zu bauen, ist eine Arduino-basierte Fernbedienung, um mit Youtube aus der Ferne zu interagieren. Die Fernbedienung wird benötigt, um die Hauptlautstärke meines PCs zu ändern, Werbung auf Youtube zu überspringen und Videos auf Youtube zu überspringen.

Außerdem ist ein Audiopegelsensor enthalten, der die tatsächliche Lautstärke des Lautsprechers ermittelt, der wiederum verwendet werden kann, um den Schallpegel automatisch zu senken, wenn laute Unterbrechungen wie eine Werbung erkannt werden.

Zuletzt habe ich der PC-App ein Diagramm hinzugefügt, um die erkannten Audiopegel anzuzeigen.

Die Lösung kann besser verfeinert werden, aber für mich erfüllt sie die Aufgabe.

Schritt 1: Benötigte Komponenten

Alle diese Komponenten werden von Leobot Electronics (https://leobot.net) geliefert.

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4-KANAL-FERNBEDIENUNG (315MHZ) + EMPFÄNGERMODUL (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MIKROFON SPRACH- UND TONERKENNUNGSSENSORMODUL (KY-037)

leobot.net/viewproduct.aspx?id=217

Software

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino-IDE

www.arduino.cc/en/main/software

Schritt 2: Hardware-Setup

1) Verbinden Sie das 4-Kanal-Empfängermodul mit dem Arduino.

4-Kanal Empfänger Pin->Arduino Uno Pin

GND->GND

5V->5V

D0->Digital 2

D1->Digital 3

D2->Digital 4

D3->Digital 5

2) Verbinden Sie das Mikrofon KY-037-Modul mit dem Arduino

Mikrofon KY-037 Pin->Arduino Uno Pin

GND->GND

+->3,3V

A0->Analog 3

Schritt 3: Arduino-Code

Überblick

Die Logik, der das Arduino folgen muss, ist wie folgt:

A) Prüfen Sie, ob der Empfänger irgendwelche Pins signalisiert.

B) Welcher Befehl an den PC gesendet wird, hängt davon ab, an welchem IO-Port das Signal empfangen wird.

C) Wenn Sie alle Fernbedienungsaktionen abgeschlossen haben, erkennen Sie den Audiopegel mit dem Mikrofon und senden Sie ihn an den PC.

D) Alle Befehle, die an den PC gesendet werden, haben ein Format, das zuerst ein Zeichen und dann einen Wert enthält (falls ein Wert benötigt wird).

E) Es werden fünf Befehle vom Arduino an den PC gesendet

A. „u“– Lauter

B. „d“– Lautstärke verringern

C. „s“- Hinzufügen überspringen

D. „v“– Video überspringen

e. „a“– Audiopegel erkannt, gefolgt vom Wert

Der Arduino-Code:

Laden Sie hier Arduino-Code herunter:

int in1=2;

int in2=3;

int in3=4;

int in4=5;

Leere Einrichtung () {

Serial.begin (9600);

PinMode (A3, EINGANG);

pinMode (in1, EINGANG);

pinMode (in2, EINGANG);

pinMode (in3, EINGANG);

pinMode (in4, EINGANG);

}

Leere Schleife () {

if(digitalRead(in1))

{

Serial.println("u");

Verzögerung (100);

}

if(digitalRead(in2))

{

Serial.println("d");

Verzögerung (100);

}

if(digitalRead(in3))

{

Serial.println("s");

Verzögerung (100);

}

if(digitalRead(in4))

{

Serial.println("v");

Verzögerung (100);

}

int readVal= analogRead(A3);

Serial.println (String ("a") + String (readVal));

Verzögerung (50);

}

Schritt 4: PC-App-Code (C#. NET)

PC-App-Code (C#. NET)
PC-App-Code (C#. NET)

Die App lauscht über den COM-Port (USB) und reagiert je nach empfangenem Befehl. Die einfachste Möglichkeit, den Ton am PC auf- und abzuschalten, besteht darin, Interrop-Dienste zu verwenden, um direkt mit dem Windows-Betriebssystem zu sprechen. Wir nutzen die Interrop-Dienste auch, um die Maus an eine bestimmte Position auf dem Bildschirm zu bewegen und zu klicken. Um unterschiedliche Bildschirm- und Ansichtsgrößen zu ermöglichen, erlauben wir dem Benutzer, die Position der Schaltflächen zum Überspringen, Hinzufügen und Überspringen von Videos anzugeben.

Wir verwenden ein Standard-.net-Diagramm, um alle Audiobefehle anzuzeigen, die wir erhalten.

Windows-Code:

Laden Sie das vollständige Projekt hier herunter:

leobot.net/audioadjust.zip

Verwenden des Systems;

mit System. Collections. Generic;

Verwenden von System. ComponentModel;

Verwenden von System. Data;

Verwenden von System. Drawing;

Verwenden von System. Linq;

Verwenden von System. Text;

Verwenden von System. Windows. Forms;

Verwenden von System. Runtime. InteropServices;

Verwenden von System. IO. Ports;

Verwenden von System. Threading;

Namensraum AudioAdjust

{

öffentliche Teilklasse 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);

//Mausaktionen

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")]

statisch extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

Random aRand = new Random();

public int LastLevel = 0;

public int MaxLevel = 255;

statischer SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int-vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

öffentliches Formular1()

{

Initialisieren der Komponente();

}

private void Form1_Load(Objektsender, EventArgs e)

{

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

comboBoxPort. Items. AddRange(Namen);

comboBoxPort. SelectedIndex = 0;

}

int aktueller Punkt = 0;

private void button1_Click(Objektsender, EventArgs e)

{

_serialPort = neuer SerialPort();

_serialPort. DataReceived += neuer SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString(); // Setze dein Board COM

_serialPort. BaudRate = 9600;

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

anders

{

_serialPort. Open();

}

// keybd_event ((byte)Keys. VolumeDown, 0, 0, 0); // Lautstärke verringern

}

void _serialPort_DataReceived(Objektsender, SerialDataReceivedEventArgs e)

{

Versuchen

{

Zeichenfolge fullval = _serialPort. ReadLine();

string com = fullval[0]. ToString();

wechseln (com)

{

Fall "a":

{

{

// Audiopegel

string val = fullval. Replace("a", "");

int valInt = int. Parse(val);

AddData(valInt);

}

brechen;

}

Fall "u":

{

//Audio auf

keybd_event((byte)Keys. VolumeUp, 0, 0, 0); // Lautstärke verringern

brechen;

}

Fall "d":

{

//Audio aus

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // Lautstärke verringern

brechen;

}

Fälle :

{

//Überspringen

MoveCursorSkipAd();

Thread. Sleep(10);

DoMouseClick();

brechen;

}

Fall "v":

{

//Überspringen

MoveCursorSkipVideo();

Thread. Sleep(10);

DoMouseClick();

brechen;

}

}

}

fangen

{

}

//neue NotImplementedException() werfen;

}

privat void MoveCursorSkipAd()

{

Cursor. Position = neuer Punkt(1140, 725);

Cursor. Position = neuer Punkt(adX, adY);

}

private void MoveCursorSkipVideo()

{

Cursor. Position = neuer Punkt(1140, 725);

Cursor. Position = neuer Punkt (vidX, vidY);

}

public void DoMouseClick()

{

// Rufe die importierte Funktion mit der aktuellen Position des Cursors auf

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

{

if (AudioChange aktivieren)

{

if (Level >= MaxLevel)

{

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // Lautstärke verringern

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // Lautstärke verringern

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // Lautstärke verringern

}

anders

{

if (Stufe < MaxLevel - 0)

{

keybd_event((byte)Keys. VolumeUp, 0, 0, 0); // Lautstärke verringern

}

}

}

SetChart(Ebene);

aktuellerPunkt++;

}

Delegate void SetTextCallback(int val);

private void SetChart(int val)

{

// InvokeRequired erforderlich vergleicht die Thread-ID des

// Aufruf des Threads zur Thread-ID des erstellenden Threads.

// Wenn diese Threads unterschiedlich sind, wird true zurückgegeben.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = new SetTextCallback(SetChart);

this. Invoke(d, neues Objekt {val});

}

anders

{

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

if (aktueller Punkt >= 10)

{

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

}

}

}

private void textBoxLevel_TextChanged(Objektsender, EventArgs e)

{

Versuchen

{

MaxLevel = int. Parse(textBoxLevel. Text);

}

fangen

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click(Objektsender, EventArgs e)

{

MoveCursorSkipAd();

Thread. Sleep(10);

DoMouseClick();

}

privat void textBoxXpos_TextChanged(Objektsender, EventArgs e)

{

Versuchen

{

adX = int. Parse(textBoxXpos. Text);

}

fangen

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged(Objektsender, EventArgs e)

{

Versuchen

{

adY = int. Parse(textBoxYpos. Text);

}

fangen

{

textBoxYpos. Text = adY + "";

}

}

private void buttonSkipVideo_Click(Objektsender, EventArgs e)

{

MoveCursorSkipVideo();

Thread. Sleep(10);

DoMouseClick();

}

private void textBoxXposVid_TextChanged(Objektsender, EventArgs e)

{

Versuchen

{

vidX = int. Parse(textBoxXposVid. Text);

}

fangen

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged(Objektsender, EventArgs e)

{

Versuchen

{

vidY = int. Parse(textBoxYposVid. Text);

}

fangen

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged(Objektsender, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout(LayoutKind. Sequential)]

öffentliche Struktur POINT

{

öffentliches int x;

öffentliche int y;

}

}

Empfohlen: