Kazalo:
- Korak: Potrebne komponente
- 2. korak: Namestitev strojne opreme
- 3. korak: Arduino koda
- 4. korak: Koda aplikacije za računalnik (C#.NET)
Video: Arduino Youtube daljinski upravljalnik za spanje (Leobot Electronics): 4 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
Arduino Youtube daljinski upravljalnik
Če uporabljate Youtube za ogled filma ali glasbe med spanjem, bi vas ob zagonu novega filma zagotovo zbudil oglas za nalaganje ali drugačna glasnost. Ni treba posebej poudarjati, da je to lahko precej nadležno.
Torej, moja rešitev, ki vam jo dokazujem tukaj, da si ustvarite zase, je daljinski upravljalnik na osnovi Arduina za interakcijo z Youtube na daljavo. Daljinski upravljalnik je potreben za spreminjanje glasnosti glavnega zvoka v računalniku, preskakovanje oglasov na Youtube in preskakovanje videoposnetkov na Youtube.
Vključen je tudi senzor nivoja zvoka za ugotavljanje, kako glasen je zvočnik, kar lahko nato uporabite za samodejno znižanje ravni zvoka ob zaznavi glasnih prekinitev, kot je oglas.
Nazadnje sem v aplikacijo za računalnik dodal grafikon za prikaz zaznanih ravni zvoka.
Rešitev je lahko bolje prečiščena, vendar zame opravi nalogo.
Korak: Potrebne komponente
Vse te komponente dobavlja Leobot Electronics (https://leobot.net)
1) Arduino UNO R3
leobot.net/viewproduct.aspx?id=530
2) 4 DALJINSKI DALJINSKI KANAL (315MHZ) + PRIJEMNI MODUL (315MHZ)
leobot.net/viewproduct.aspx?id=521
3) MODUL SENZORJA MIKROFONSKEGA GLASA IN ZVOČNEGA DETEKCIJE (KY-037)
leobot.net/viewproduct.aspx?id=217
Programska oprema
1) Visual Studio
visualstudio.microsoft.com/
2) Arduino IDE
www.arduino.cc/en/main/software
2. korak: Namestitev strojne opreme
1) Priključite 4-kanalni sprejemniški modul na Arduino.
4-kanalni sprejemnik Pin-> Arduino Uno Pin
GND-> GND
5V-> 5V
D0-> Digital 2
D1-> Digital 3
D2-> Digital 4
D3-> Digital 5
2) Priključite modul mikrofona KY-037 na Arduino
Mikrofon KY-037 Pin-> Arduino Uno Pin
GND-> GND
+-> 3,3 V.
A0-> Analogni 3
3. korak: Arduino koda
Pregled
Logika, ki ji mora slediti Arduino, je naslednja:
A) Preverite, ali sprejemnik signalizira kakršne koli zatiče.
B) Odvisno od tega, katera vhodna / izhodna vrata se signal sprejme, je kateri ukaz bo poslan v računalnik.
C) Ko končate vsa dejanja z daljinskim upravljalnikom, z mikrofonom zaznajte raven zvoka in jo pošljite v računalnik.
D) Vsi ukazi, poslani v osebni računalnik, imajo obliko najprej znak, nato vrednost (če je vrednost potrebna).
E) Iz Arduina je v računalnik poslanih pet ukazov
a. "U" - Povečanje glasnosti
b. “D” - zmanjšanje glasnosti
c. “S” - Preskoči dodajanje
d. »V« - Preskoči video
e. "A" - Zaznana raven zvoka, ki ji sledi vrednost
Koda Arduino:
Prenesite Arduino Code tukaj:
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");
zamuda (100);
}
if (digitalRead (in2))
{
Serial.println ("d");
zamuda (100);
}
če (digitalRead (in3))
{
Serial.println ("s");
zamuda (100);
}
if (digitalRead (in4))
{
Serial.println ("v");
zamuda (100);
}
int readVal = analogRead (A3);
Serial.println (String ("a")+ String (readVal));
zamuda (50);
}
4. korak: Koda aplikacije za računalnik (C#. NET)
Aplikacija bo poslušala prek vrat COM (USB) in reagirala glede na prejeti ukaz. Najpreprostejši način za povečanje in zmanjšanje zvoka v računalniku je uporaba storitev Interrop za neposreden govor z operacijskim sistemom Windows. Storitve Interrop uporabljamo tudi za premik miške na določeno mesto na zaslonu in klik. Da bi omogočili različne zaslone in velikosti ogledov, uporabniku omogočamo, da določi položaj gumbov za preskok dodajanja in preskakovanja videa.
Za prikaz vseh prejetih zvočnih ukazov uporabljamo standardni.net grafikon.
Koda sistema Windows:
Celoten projekt prenesite tukaj:
leobot.net/audioadjust.zip
uporaba sistema;
z uporabo System. Collections. Generic;
z uporabo System. ComponentModel;
z uporabo System. Data;
uporaba System. Drawing;
z uporabo System. Linq;
z uporabo System. Text;
z uporabo System. Windows. Forms;
z uporabo System. Runtime. InteropServices;
z uporabo System. IO. Ports;
z uporabo System. Threading;
imenski prostor AudioAdjust
{
javni delni razred Obrazec 1: Obrazec
{
[DllImport ("User32. Dll")]
javni statični zunanji dolgi SetCursorPos (int x, int y);
[DllImport ("User32. Dll")]
javni statični zunanji bool ClientToScreen (IntPtr hWnd, ref POINT point);
[DllImport ("user32.dll", CharSet = CharSet. Auto, CallingConvention = CallingConvention. StdCall)]
javna statična zunanja void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
// Dejanja miške
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
zasebni const int MOUSEEVENTF_RIGHTUP = 0x10;
[DllImport ("user32.dll")]
statični zunanji void keybd_event (bajt bVk, bajt bScan, uint dwFlags, int dwExtraInfo);
Naključni aRand = nov Random ();
public int LastLevel = 0;
javni int MaxLevel = 255;
statični SerialPort _serialPort;
int adX = 1281;
int adY = 706;
int vidX = 250;
int vidY = 780;
bool enableAudioChange = false;
javni obrazec1 ()
{
InitializeComponent ();
}
zasebna praznina Form1_Load (pošiljatelj objekta, EventArgs e)
{
niz imena = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (imena);
comboBoxPort. SelectedIndex = 0;
}
int currentPoint = 0;
private void button1_Click (pošiljatelj objekta, EventArgs e)
{
_serialPort = nov SerialPort ();
_serialPort. DataReceived += nov SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Nastavite COM na plošči
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close ();
drugače
{
_serialPort. Open ();
}
// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zmanjšanje glasnosti
}
void _serialPort_DataReceived (pošiljatelj objekta, SerialDataReceivedEventArgs e)
{
poskusite
{
niz fullval = _serialPort. ReadLine ();
niz com = fullval [0]. ToString ();
stikalo (com)
{
primer "a":
{
{
// raven zvoka
string val = fullval. Replace ("a", "");
int valInt = int. Parse (val);
AddData (valInt);
}
zlom;
}
primer "u":
{
// zvok navzgor
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // zmanjšanje glasnosti
zlom;
}
primer "d":
{
// zvok dol
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zmanjšanje glasnosti
zlom;
}
velika črka "s":
{
//preskočite oglas
MoveCursorSkipAd ();
Thread. Sleep (10);
DoMouseClick ();
zlom;
}
primer "v":
{
//preskočite oglas
MoveCursorSkipVideo ();
Thread. Sleep (10);
DoMouseClick ();
zlom;
}
}
}
ulov
{
}
// vrže novo NotImplementedException ();
}
zasebna praznina MoveCursorSkipAd ()
{
Cursor. Position = nova točka (1140, 725);
Cursor. Position = nova točka (adX, adY);
}
zasebna praznina MoveCursorSkipVideo ()
{
Cursor. Position = nova točka (1140, 725);
Cursor. Position = nova točka (vidX, vidY);
}
javna praznina DoMouseClick ()
{
// Pokličemo uvoženo funkcijo s trenutnim položajem kazalca
uint X = (uint) kazalec.pozicija. X;
uint Y = (uint) kurzor.pozicija. Y;
mouse_event (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
mouse_event (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
void AddData (int raven)
{
if (enableAudioChange)
{
if (raven> = MaxLevel)
{
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zmanjšanje glasnosti
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zmanjšanje glasnosti
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // zmanjšanje glasnosti
}
drugače
{
if (raven <MaxLevel - 0)
{
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // zmanjšanje glasnosti
}
}
}
SetChart (raven);
currentPoint ++;
}
delegate void SetTextCallback (int val);
zasebna praznina SetChart (int val)
{
// InvokeRequired required primerja ID niti
// klicanje niti na ID niti ustvarjajoče niti.
// Če so te niti različne, se vrne true.
if (this.chart1. InvokeRequired)
{
SetTextCallback d = nov SetTextCallback (SetChart);
this. Invoke (d, nov objekt {val});
}
drugače
{
chart1. Series [0]. Points. AddXY (0, val);
če (trenutna točka> = 10)
{
chart1. Series [0]. Points. RemoveAt (0);
}
}
}
zasebna praznina textBoxLevel_TextChanged (pošiljatelj objekta, EventArgs e)
{
poskusite
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
ulov
{
textBoxLevel. Text = MaxLevel + "";
}
}
zasebni gumb za prazninoTestSkip_Click (pošiljatelj objekta, EventArgs e)
{
MoveCursorSkipAd ();
Thread. Sleep (10);
DoMouseClick ();
}
zasebna praznina textBoxXpos_TextChanged (pošiljatelj objekta, EventArgs e)
{
poskusite
{
adX = int. Parse (textBoxXpos. Text);
}
ulov
{
textBoxXpos. Text = adX + "";
}
}
zasebna praznina textBoxYpos_TextChanged (pošiljatelj objekta, EventArgs e)
{
poskusite
{
adY = int. Parse (textBoxYpos. Text);
}
ulov
{
textBoxYpos. Text = adY + "";
}
}
zasebni gumb voidSkipVideo_Click (pošiljatelj objekta, EventArgs e)
{
MoveCursorSkipVideo ();
Thread. Sleep (10);
DoMouseClick ();
}
zasebna praznina textBoxXposVid_TextChanged (pošiljatelj objekta, EventArgs e)
{
poskusite
{
vidX = int. Parse (textBoxXposVid. Text);
}
ulov
{
textBoxXposVid. Text = vidX + "";
}
}
zasebna praznina textBoxYposVid_TextChanged (pošiljatelj objekta, EventArgs e)
{
poskusite
{
vidY = int. Parse (textBoxYposVid. Text);
}
ulov
{
textBoxYposVid. Text = vidY + "";
}
}
zasebna praznina checkBoxEnable_CheckedChanged (pošiljatelj objekta, EventArgs e)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
javna struktura TOČKA
{
javni int x;
javni int y;
}
}
Priporočena:
Arduino IR senzor in daljinski upravljalnik z LCD: 4 koraki
Arduino IR senzor in daljinski upravljalnik z LCD: Smo skupina študentov UQD10801 (Robocon1) z Univerze Tun Hussein Onn Malaysia (UTHM) V tej vadnici se boste naučili prikazati gumbe na daljinskem upravljalniku IR na zaslonu s tekočimi kristali (LCD ) z uporabo Arduino Uno R3. Ta vadnica bo
Otroška ura za spanje za spanje: 6 korakov (s slikami)
Otroška ura za spanje za spanje: potreboval sem uro, ki je pomagala mojim 4 -letnim dvojčkom, da se malo dlje naučijo spati (dovolj mi je, da se moram ob sobotah zbuditi ob 5.30), vendar ne morejo čas branja še. Po ogledu nekaj predmetov v zelo priljubljenih nakupovalnih
Zanesljiv, varen, prilagodljiv daljinski upravljalnik SMS (Arduino/pfodApp) - kodiranje ni potrebno: 4 koraki
Zanesljiv, varen, prilagodljiv daljinski upravljalnik SMS (Arduino/pfodApp) - kodiranje ni potrebno: posodobitev 6. julija 2018: različica tega projekta 3G/2G s kartico SIM5320 je na voljo tukaj Posodobitev: 19. maj 2015: uporabite knjižnico pfodParser različice 2.5 ali višje. Odpravlja prijavljeno težavo, ker ne dopušča dovolj časa, da se ščit poveže z
Robotski daljinski upravljalnik Rock Crawler Arduino: 4 koraki
Robotski daljinski upravljalnik Rock Crawler Arduino: To izgleda in je zelo barebones. Priporočam vsem, ki bi se radi lotili tega projekta, naj razmislijo o tem, kako pokriti elektroniko za zaščito pred vodo in umazanijo
Daljinski upravljalnik za osebni računalnik Youtube in Netflix: 9 korakov (s slikami)
Daljinski upravljalnik za osebni računalnik Youtube in Netflix: Namizni računalnik imam oddaljen od postelje, zato naravno gledam youtube in filme iz udobja svoje postelje. Vsakič, ko se uležem, se mi zdi, da moram prilagoditi glasnost, iz nekaterih razlogov začasno ustaviti video ali preprosto v celoti preskočiti video.