Inhaltsverzeichnis:
- Schritt 1: Benötigte Komponenten
- Schritt 2: Hardware-Setup
- Schritt 3: Arduino-Code
- Schritt 4: PC-App-Code (C#.NET)
Video: Arduino Youtube-Fernbedienung zum Schlafen (Leobot Electronics) - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
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)
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:
Windows 10 auf einem Raspberry Pi zum Laufen bringen – wikiHow
So funktioniert Windows 10 auf einem Raspberry Pi
Interessante Programmieranleitung für Designer - Bringen Sie Ihr Bild zum Laufen (Teil 2): 8 Schritte
Interessante Programmieranleitung für Designer – Bringen Sie Ihr Bild zum Laufen (Teil 2): Mathematik scheint für die meisten von Ihnen nutzlos zu sein. Die in unserem täglichen Leben am häufigsten verwendete ist einfach Addieren, Subtrahieren, Multiplizieren und Dividieren. Es ist jedoch ganz anders, wenn Sie mit Programm erstellen können. Je mehr Sie wissen, desto mehr wundervolle Ergebnisse werden Sie erhalten
Einfach schlafen: 5 Schritte (mit Bildern)
Schlaf einfach: Hallo, mein Name ist Jakob. Ich bin allergisch gegen Hausstaubmilben und habe Asthma. Dies ist die Inspiration für dieses Projekt. Für mein erstes Jahr bei MCT bekamen wir den Auftrag, ein Projekt von Grund auf neu zu erstellen und all das Wissen, das wir in diesem Jahr gewonnen haben, zu nutzen. Ich habe mich entschieden
Die Kurzanleitung zum Erstellen eines Videos mit Ihrem IPhone und Hochladen auf Facebook oder YouTube: 9 Schritte
Die Kurzanleitung zum Erstellen eines Videos mit Ihrem IPhone und Hochladen auf Facebook oder YouTube: Verwenden Sie diesen einfachen 5-Schritte-Prozess (Instructables lässt es wie mehr Schritte aussehen, als es tatsächlich ist), um Ihr erstes YouTube- oder Facebook-Video zu erstellen und hochzuladen - mit nur dein iPhone
Eine einfache Anleitung zum Fotografieren: 4 Schritte
Eine einfache Anleitung zum Fotografieren: Heute werden wir über einige der wichtigsten Einstellungen einer DSLR-Kamera sprechen, die Sie kennen sollten. Wenn Sie dies wissen, können Sie unsere Fotos im manuellen Modus auf die nächste Stufe bringen