Innehållsförteckning:
- Steg 1: Komponenter som behövs
- Steg 2: Maskinvaruinstallation
- Steg 3: Arduino -kod
- Steg 4: PC -appkod (C#.NET)
Video: Arduino Youtube fjärrkontroll för att sova (Leobot Electronics): 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Arduino Youtube Remote
Om du använder Youtube för att ge dig en film eller musik att titta på medan du sover skulle du säkert ha väckts av antingen en laddningsannons eller olika volymnivåer när en ny film startar. Naturligtvis kan detta vara ganska irriterande.
Så min lösning jag bevisar för dig här att bygga själv är en Arduino-baserad fjärrkontroll för att interagera med Youtube på avstånd. Fjärrkontrollen krävs för att ändra datorns huvudljudvolym, hoppa över annonser på Youtube och hoppa över videor på Youtube.
Dessutom ingår en ljudnivåsensor för att avgöra hur högtalaren faktiskt är, som i sin tur kan användas för att automatiskt sänka ljudnivån vid detektering av höga avbrott som en annons.
Slutligen lade jag till ett diagram i PC -appen för att visa de upptäckta ljudnivåerna.
Lösningen kan förbättras bättre men för mig klarar den uppgiften.
Steg 1: Komponenter som behövs
Alla dessa komponenter levereras av Leobot Electronics (https://leobot.net)
1) Arduino UNO R3
leobot.net/viewproduct.aspx?id=530
2) 4 KANAL FJÄRRKONTROLL (315MHz) + MOTTAGARMODUL (315MHZ)
leobot.net/viewproduct.aspx?id=521
3) MIKROFONRÖST & LJUDDETEKTIONSSENSOR MODUL (KY-037)
leobot.net/viewproduct.aspx?id=217
programvara
1) Visual Studio
visualstudio.microsoft.com/
2) Arduino IDE
www.arduino.cc/en/main/software
Steg 2: Maskinvaruinstallation
1) Anslut 4-kanals mottagarmodulen till Arduino.
4-kanals mottagarstift-> Arduino Uno-stift
GND-> GND
5V-> 5V
D0-> Digital 2
D1-> Digital 3
D2-> Digital 4
D3-> Digital 5
2) Anslut mikrofon KY-037-modulen till Arduino
Mikrofon KY-037 Pin-> Arduino Uno Pin
GND-> GND
+-> 3,3V
A0-> Analog 3
Steg 3: Arduino -kod
Översikt
Logiken som Arduino måste följa är följande:
A) Kontrollera om mottagaren signalerar några stift.
B) Beroende på vilken IO -port signalen tas emot vid är vilket kommando som kommer att skickas till datorn.
C) När du har gjort alla fjärrkontrollsåtgärder upptäcker du ljudnivån med mikrofonen och skickar den till datorn.
D) Alla kommandon som skickas till datorn har ett format att först ha ett tecken och sedan ett värde (om ett värde behövs).
E) Det finns fem kommandon som skickas från Arduino till datorn
a. “U” - Volym upp
b. “D” - Volym ned
c. “S” - Hoppa över Lägg till
d. “V” - Hoppa över video
e. “A” - Ljudnivå detekterad följt av värdet
Arduino -koden:
Ladda ner Arduino -koden här:
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");
fördröjning (100);
}
if (digitalRead (in2))
{
Serial.println ("d");
fördröjning (100);
}
if (digitalRead (in3))
{
Serial.println ("s");
fördröjning (100);
}
if (digitalRead (in4))
{
Serial.println ("v");
fördröjning (100);
}
int readVal = analogRead (A3);
Serial.println (String ("a")+ String (readVal));
fördröjning (50);
}
Steg 4: PC -appkod (C#. NET)
Appen lyssnar över COM (USB) -porten och reagerar beroende på vilket kommando som tas emot. Det enklaste sättet att skruva upp och ner ljudet på datorn är att använda Interrop -tjänster för att direkt prata med Windows OS. Vi använder också Interrop -tjänsterna för att flytta musen till en specifik position på skärmen och klicka. För att möjliggöra olika skärmar och visningsstorlekar tillåter vi användaren att ange positionen för knapparna för att lägga till och hoppa över videoklipp.
Vi använder ett vanligt.net -diagram för att visa alla ljudkommandon som vi tar emot.
Windows -kod:
Ladda ner hela projektet här:
leobot.net/audioadjust.zip
använder System;
använder System. Collections. Generic;
använder System. ComponentModel;
använder System. Data;
använder System. Drawing;
använder System. Linq;
använder System. Text;
använder System. Windows. Forms;
använder System. Runtime. InteropServices;
använder System. IO. Ports;
använder System. Threading;
namnutrymme AudioAdjust
{
offentlig delklass Form1: Form
{
[DllImport ("User32. Dll")]
offentlig statisk extern lång SetCursorPos (int x, int y);
[DllImport ("User32. Dll")]
offentlig statisk 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);
// Musåtgärder
privat const int MOUSEEVENTF_LEFTDOWN = 0x02;
privat const int MOUSEEVENTF_LEFTUP = 0x04;
privat const int MOUSEEVENTF_RIGHTDOWN = 0x08;
privat const int MOUSEEVENTF_RIGHTUP = 0x10;
[DllImport ("user32.dll")]
statisk extern void keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
Random aRand = new Random ();
public int LastLevel = 0;
public int MaxLevel = 255;
statisk SerialPort _serialPort;
int adX = 1281;
int adY = 706;
int vidX = 250;
int vidY = 780;
bool enableAudioChange = false;
offentlig form1 ()
{
InitializeComponent ();
}
privat tomrum Form1_Load (objektsändare, EventArgs e)
{
string names = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (namn);
comboBoxPort. SelectedIndex = 0;
}
int currentPoint = 0;
private void button1_Click (objektavsändare, EventArgs e)
{
_serialPort = ny SerialPort ();
_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Ställ in din styrelse -COM
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close ();
annan
{
_serialPort. Open ();
}
// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // minska volymen
}
void _serialPort_DataReceived (objektavsändare, SerialDataReceivedEventArgs e)
{
Prova
{
string fullval = _serialPort. ReadLine ();
string com = fullval [0]. ToString ();
switch (com)
{
fall "a":
{
{
// ljudnivå
string val = fullval. Replace ("a", "");
int valInt = int. Parse (val);
AddData (valInt);
}
ha sönder;
}
fallet "u":
{
// ljud upp
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // minska volymen
ha sönder;
}
fall "d":
{
// ljud ned
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // minska volymen
ha sönder;
}
fall "s":
{
// skipAd
MoveCursorSkipAd ();
Tråd. Sömn (10);
DoMouseClick ();
ha sönder;
}
fall "v":
{
// skipAd
MoveCursorSkipVideo ();
Tråd. Sömn (10);
DoMouseClick ();
ha sönder;
}
}
}
fånga
{
}
// kasta nya NotImplementedException ();
}
private void MoveCursorSkipAd ()
{
Cursor. Position = new Point (1140, 725);
Cursor. Position = new Point (adX, adY);
}
privat tomrum MoveCursorSkipVideo ()
{
Cursor. Position = new Point (1140, 725);
Cursor. Position = new Point (vidX, vidY);
}
public void DoMouseClick ()
{
// Ring den importerade funktionen med markörens nuvarande position
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 (enableAudioChange)
{
if (nivå> = MaxLevel)
{
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // minska volymen
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // minska volymen
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // minska volymen
}
annan
{
if (nivå <Maxnivå - 0)
{
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // minska volymen
}
}
}
SetChart (nivå);
currentPoint ++;
}
delegera void SetTextCallback (int val);
private void SetChart (int val)
{
// InvokeRequired required jämför tråd -ID för
// anropar tråd till tråd -ID för den skapande tråden.
// Om dessa trådar är olika, returneras det sant.
if (this.chart1. InvokeRequired)
{
SetTextCallback d = ny SetTextCallback (SetChart);
this. Invoke (d, nytt objekt {val});
}
annan
{
chart1. Series [0]. Points. AddXY (0, val);
om (currentPoint> = 10)
{
chart1. Series [0]. Points. RemoveAt (0);
}
}
}
private void textBoxLevel_TextChanged (objektavsändare, EventArgs e)
{
Prova
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
fånga
{
textBoxLevel. Text = MaxLevel + "";
}
}
private void buttonTestSkip_Click (objektavsändare, EventArgs e)
{
MoveCursorSkipAd ();
Tråd. Sömn (10);
DoMouseClick ();
}
private void textBoxXpos_TextChanged (objektavsändare, EventArgs e)
{
Prova
{
adX = int. Parse (textBoxXpos. Text);
}
fånga
{
textBoxXpos. Text = adX + "";
}
}
private void textBoxYpos_TextChanged (objektavsändare, EventArgs e)
{
Prova
{
adY = int. Parse (textBoxYpos. Text);
}
fånga
{
textBoxYpos. Text = adY + "";
}
}
private void buttonSkipVideo_Click (objektavsändare, EventArgs e)
{
MoveCursorSkipVideo ();
Tråd. Sömn (10);
DoMouseClick ();
}
private void textBoxXposVid_TextChanged (objektavsändare, EventArgs e)
{
Prova
{
vidX = int. Parse (textBoxXposVid. Text);
}
fånga
{
textBoxXposVid. Text = vidX + "";
}
}
private void textBoxYposVid_TextChanged (objektavsändare, EventArgs e)
{
Prova
{
vidY = int. Parse (textBoxYposVid. Text);
}
fånga
{
textBoxYposVid. Text = vidY + "";
}
}
private void checkBoxEnable_CheckedChanged (objektavsändare, EventArgs e)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
offentlig struktur PUNKT
{
public int x;
offentlig int y;
}
}
Rekommenderad:
555 Timer för att avge signal för att avbryta Atmega328: 7 steg
555 Timer to Emit Signal to Interrupt Atmega328: Huvudmålet med denna krets är att spara energi. Så jag tänker inte prata om arduino eftersom styrelsen själv har onödig kraftöverlag för en slutprodukt. Det är bra för utveckling. Men, inte särskilt bra för slutprojekt som körs på batt
Återanvänd en LED -RF -fjärrkontroll för att styra "vad som helst" !: 5 steg
Återanvända en LED -RF -fjärrkontroll för att styra "vad som helst" !: I det här projektet kommer jag att visa dig hur du kan återanvända en LED -RF -fjärrkontroll för att styra i stort sett vad du vill med den. Det betyder att vi kommer att titta närmare på överföringsprocessen för RF -fjärrkontrollen, läsa in de skickade data med en Arduino µC
Väggfäste för iPad som kontrollpanel för hemautomation, med servostyrd magnet för att aktivera skärmen: 4 steg (med bilder)
Väggfäste för iPad Som kontrollpanel för hemautomation, med servostyrd magnet för att aktivera skärmen: På senare tid har jag ägnat ganska mycket tid åt att automatisera saker i och runt mitt hus. Jag använder Domoticz som min hemautomationsapplikation, se www.domoticz.com för mer information. I min sökning efter en instrumentpanelapplikation som visar all Domoticz -information tillsammans
Styr dina elektriska apparater med din fjärrkontroll för fjärrkontroll (IR -fjärrkontroll) med temperatur- och luftfuktighetsdisplay: 9 steg
Styr dig elektriska apparater med din TV -fjärrkontroll (ir -fjärrkontroll) med temperatur- och luftfuktighetsdisplay: hej jag är Abhay och det är min första blogg om Instructables och idag ska jag visa dig hur du styr dina elektriska apparater med din fjärrkontroll genom att bygga detta enkelt projekt. tack till atl lab för stöd och tillhandahållande av materialet
Övertyga dig själv om att bara använda en 12V-till-AC-omriktare för LED-ljussträngar istället för att koppla om dem för 12V: 3 steg
Övertyga dig själv om att bara använda en 12V-till-AC-linjeomvandlare för LED-ljussträngar istället för att koppla om dem för 12V: Min plan var enkel. Jag ville klippa upp en väggdriven LED-ljussträng i bitar och sedan dra om den för att gå av 12 volt. Alternativet var att använda en kraftomvandlare, men vi vet alla att de är fruktansvärt ineffektiva, eller hur? Höger? Eller är de det?