Sisällysluettelo:
- Vaihe 1: Tarvittavat komponentit
- Vaihe 2: Laitteiston asennus
- Vaihe 3: Arduino -koodi
- Vaihe 4: PC -sovelluskoodi (C#.NET)
Video: Arduino Youtube -kaukosäädin nukkumiseen (Leobot Electronics): 4 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Arduino Youtube -kaukosäädin
Jos käytät Youtubea elokuvan tai musiikin katsomiseen nukkuessasi, olisit varmasti herännyt joko latausmainoksella tai eri äänenvoimakkuudella uuden elokuvan alkaessa. On sanomattakin selvää, että tämä voi olla melko ärsyttävää.
Joten ratkaisuni, jonka osoitan sinulle täällä rakentamaan itsellesi, on Arduino-pohjainen kaukosäädin, joka on vuorovaikutuksessa Youtuben kanssa etänä. Kaukosäädintä tarvitaan tietokoneen päääänenvoimakkuuden muuttamiseen, mainosten ohittamiseen Youtubessa ja videoiden ohittamiseen Youtubessa.
Mukana on myös äänitason anturi, joka määrittää kaiuttimen äänenvoimakkuuden, jota voidaan puolestaan käyttää automaattisesti äänenvoimakkuuden alentamiseen, kun havaitaan kovia keskeytyksiä, kuten mainos.
Lopuksi lisäsin kaavion PC -sovellukseen havaittujen äänitasojen näyttämiseksi.
Ratkaisu voidaan parantaa, mutta minulle se täyttää tehtävän.
Vaihe 1: Tarvittavat komponentit
Kaikki nämä komponentit toimittaa Leobot Electronics (https://leobot.net)
1) Arduino UNO R3
leobot.net/viewproduct.aspx?id=530
2) 4 KANAVAN KAUKOSÄÄDIN (315MHZ) + VASTAANOTINMODUULI (315MHZ)
leobot.net/viewproduct.aspx?id=521
3) MIKROFONIN ÄÄNEN JA ÄÄNEN TUNNISTUSANTURIMODULI (KY-037)
leobot.net/viewproduct.aspx?id=217
Ohjelmisto
1) Visual Studio
visualstudio.microsoft.com/
2) Arduino IDE
www.arduino.cc/en/main/software
Vaihe 2: Laitteiston asennus
1) Liitä 4-kanavainen vastaanotinmoduuli Arduinoon.
4-kanavainen vastaanottimen nasta-> Arduino Uno -tappi
GND-> GND
5V-> 5V
D0-> Digitaalinen 2
D1-> Digitaalinen 3
D2-> Digitaalinen 4
D3-> Digitaalinen 5
2) Liitä KY-037-mikrofonimoduuli Arduinoon
Mikrofoni KY-037 Pin-> Arduino Uno Pin
GND-> GND
+-> 3.3V
A0-> Analog 3
Vaihe 3: Arduino -koodi
Yleiskatsaus
Arduinon on noudatettava seuraavaa logiikkaa:
A) Tarkista, ilmoittaako vastaanotin nastoista.
B) Riippuen siitä, millä IO -portilla signaali vastaanotetaan, mikä komento lähetetään tietokoneelle.
C) Kun olet tehnyt kaikki kaukosäätimen toiminnot, tunnista äänitaso mikrofonilla ja lähetä se tietokoneelle.
D) Kaikissa PC: lle lähetetyissä komennoissa on muoto, jossa on ensin merkki ja sitten arvo (jos arvoa tarvitaan).
E) Arduinolta on tietokoneeseen lähetetty viisi komentoa
a. "U" - äänenvoimakkuuden lisäys
b. "D" - äänenvoimakkuuden vähennys
c. "S" - Ohita lisäys
d. "V" - Ohita video
e. “A” - Äänitaso havaittu ja sen jälkeen arvo
Arduino -koodi:
Lataa Arduino -koodi täältä:
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
void setup () {
Sarja.alku (9600);
pinMode (A3, INPUT);
pinMode (in1, INPUT);
pinMode (in2, INPUT);
pinMode (in3, INPUT);
pinMode (in4, INPUT);
}
void loop () {
jos (digitalRead (in1))
{
Serial.println ("u");
viive (100);
}
jos (digitalRead (in2))
{
Serial.println ("d");
viive (100);
}
jos (digitalRead (in3))
{
Serial.println ("s");
viive (100);
}
jos (digitalRead (in4))
{
Serial.println ("v");
viive (100);
}
int readVal = analoginenLue (A3);
Serial.println (Jono ("a")+ Jono (readVal));
viive (50);
}
Vaihe 4: PC -sovelluskoodi (C#. NET)
Sovellus kuuntelee COM (USB) -portin kautta ja reagoi sen mukaan, mikä komento on vastaanotettu. Yksinkertaisin tapa kääntää ääntä ylös ja alas tietokoneessa on käyttää Interrop -palveluita puhuakseen suoraan Windows -käyttöjärjestelmään. Käytämme myös Interrop -palveluita hiiren siirtämiseen tiettyyn kohtaan näytöllä ja napsauttamalla sitä. Jotta näytöt ja näkymän koot olisivat erilaiset, sallimme käyttäjän määrittää ohitus- ja ohitusvideopainikkeiden sijainnin.
Käytämme normaalia.net -kaaviota näyttääksemme kaikki saamamme äänikomennot.
Windows -koodi:
Lataa koko projekti täältä:
leobot.net/audioadjust.zip
järjestelmän käyttö;
käyttämällä System. Collections. Generic;
käyttämällä System. ComponentModel;
käyttämällä System. Dataa;
käyttäen System. Drawing;
käyttämällä System. Linq;
käyttämällä System. Text;
käyttämällä System. Windows. Forms;
käyttämällä System. Runtime. InteropServices;
käyttämällä System. IO. Portsia;
käyttämällä System. Threading;
nimiavaruus AudioAdjust
{
julkinen osaluokka Lomake 1: Lomake
{
[DllImport ("User32. Dll")]
julkinen staattinen ulkoinen pitkä SetCursorPos (int x, int y);
[DllImport ("User32. Dll")]
julkinen staattinen ulkoinen bool ClientToScreen (IntPtr hWnd, ref POINT point);
[DllImport ("user32.dll", CharSet = CharSet. Auto, CallingConvention = CallingConvention. StdCall)]
julkinen staattinen ulkoinen void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
// Hiiren toiminnot
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")]
staattinen ulkoinen void keybd_event (tavu bVk, tavu bScan, uint dwFlags, int dwExtraInfo);
Satunnainen aRand = uusi Satunnainen ();
public int LastLevel = 0;
public int MaxLevel = 255;
staattinen SerialPort _serialPort;
int adX = 1281;
int adY = 706;
int vidX = 250;
int vidY = 780;
bool enableAudioChange = epätosi;
julkinen lomake1 ()
{
InitializeComponent ();
}
private void Form1_Load (objektin lähettäjä, EventArgs e)
{
string names = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (nimet);
comboBoxPort. SelectedIndex = 0;
}
int currentPoint = 0;
private void button1_Click (objektin lähettäjä, EventArgs e)
{
_serialPort = uusi SerialPort ();
_serialPort. DataReceived += uusi SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Aseta kortti COM
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close ();
muu
{
_serialPort. Open ();
}
// keybd_event ((tavu) Keys. VolumeDown, 0, 0, 0); // vähennä äänenvoimakkuutta
}
void _serialPort_DataReceived (objektin lähettäjä, SerialDataReceivedEventArgs e)
{
yrittää
{
merkkijono fullval = _serialPort. ReadLine ();
merkkijono com = fullval [0]. ToString ();
kytkin (com)
{
tapaus "a":
{
{
// äänitaso
merkkijono val = fullval. Replace ("a", "");
int valInt = int. Parse (val);
AddData (valInt);
}
tauko;
}
tapaus "u":
{
// ääni ylös
keybd_event ((tavu) Keys. VolumeUp, 0, 0, 0); // vähennä äänenvoimakkuutta
tauko;
}
tapaus "d":
{
// ääni pois
keybd_event ((tavu) Keys. VolumeDown, 0, 0, 0); // vähennä äänenvoimakkuutta
tauko;
}
tapaus "s":
{
//ohita mainos
MoveCursorSkipAd ();
Kierre. Nukkuu (10);
DoMouseClick ();
tauko;
}
tapaus "v":
{
//ohita mainos
MoveCursorSkipVideo ();
Kierre. Nukkuu (10);
DoMouseClick ();
tauko;
}
}
}
saada kiinni
{
}
// heittää uusi NotImplementedException ();
}
private void MoveCursorSkipAd ()
{
Kohdistimen sijainti = uusi piste (1140, 725);
Cursor. Position = uusi piste (adX, adY);
}
private void MoveCursorSkipVideo ()
{
Kohdistimen sijainti = uusi piste (1140, 725);
Cursor. Position = uusi piste (vidX, vidY);
}
public void DoMouseClick ()
{
// Soita tuodulle funktiolle kohdistimen nykyisen sijainnin kanssa
uint X = (uint) Kohdistimen sijainti X;
uint Y = (uint) Cursor. Position. Y;
hiiren_tapahtuma (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
hiiren_tapahtuma (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
void AddData (int -taso)
{
if (enableAudioChange)
{
jos (taso> = MaxLevel)
{
keybd_event ((tavu) Keys. VolumeDown, 0, 0, 0); // vähennä äänenvoimakkuutta
keybd_event ((tavu) Keys. VolumeDown, 0, 0, 0); // vähennä äänenvoimakkuutta
keybd_event ((tavu) Keys. VolumeDown, 0, 0, 0); // vähennä äänenvoimakkuutta
}
muu
{
jos (taso <MaxLevel - 0)
{
keybd_event ((tavu) Keys. VolumeUp, 0, 0, 0); // vähennä äänenvoimakkuutta
}
}
}
SetChart (taso);
currentPoint ++;
}
delegate void SetTextCallback (int val);
yksityinen mitätön SetChart (int val)
{
// InvokeRequired vaaditaan vertaa ketjun tunnusta
// kutsuu säikeen luovan säikeen säietunnukselle.
// Jos nämä säikeet ovat erilaisia, se palauttaa arvon true.
jos (this.chart1. InvokeRequired)
{
SetTextCallback d = uusi SetTextCallback (SetChart);
this. Invoke (d, uusi objekti {val});
}
muu
{
chart1. Series [0]. Points. AddXY (0, val);
jos (currentPoint> = 10)
{
kaavio1. Sarja [0]. Pisteet. RemoveAt (0);
}
}
}
private void textBoxLevel_TextChanged (objektin lähettäjä, EventArgs e)
{
yrittää
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
saada kiinni
{
textBoxLevel. Text = MaxLevel + "";
}
}
private void buttonTestSkip_Click (objektin lähettäjä, EventArgs e)
{
MoveCursorSkipAd ();
Kierre. Nukkuu (10);
DoMouseClick ();
}
private void textBoxXpos_TextChanged (objektin lähettäjä, EventArgs e)
{
yrittää
{
adX = int. Parse (textBoxXpos. Text);
}
saada kiinni
{
textBoxXpos. Text = adX + "";
}
}
private void textBoxYpos_TextChanged (objektin lähettäjä, EventArgs e)
{
yrittää
{
adY = int. Parse (textBoxYpos. Text);
}
saada kiinni
{
textBoxYpos. Text = adY + "";
}
}
private void buttonSkipVideo_Click (objektin lähettäjä, EventArgs e)
{
MoveCursorSkipVideo ();
Kierre. Nukkuu (10);
DoMouseClick ();
}
private void textBoxXposVid_TextChanged (objektin lähettäjä, EventArgs e)
{
yrittää
{
vidX = int. Parse (textBoxXposVid. Text);
}
saada kiinni
{
textBoxXposVid. Text = vidX + "";
}
}
private void textBoxYposVid_TextChanged (objektin lähettäjä, EventArgs e)
{
yrittää
{
vidY = int. Parse (textBoxYposVid. Text);
}
saada kiinni
{
textBoxYposVid. Text = vidY + "";
}
}
private void checkBoxEnable_CheckedChanged (objektin lähettäjä, EventArgs e)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
julkinen rakenne POINT
{
public int x;
julkinen int;
}
}
Suositeltava:
Digitaalikello, mutta ilman mikro -ohjainta [Hardcore Electronics]: 13 vaihetta (kuvilla)
Digitaalikello, mutta ilman mikrokontrolleria [Hardcore Electronics]: Piirien rakentaminen mikrokontrollerilla on melko helppoa, mutta unohdamme täysin ne työt, jotka mikrokontrolleri joutui suorittamaan yksinkertaisen tehtävän suorittamiseksi (jopa LED -valon vilkkumiseksi). Joten kuinka vaikeaa olisi tehdä digitaalinen kello täydelliseksi
IR -lämpömittari nukkumiseen: 5 vaihetta
IR -lämpömittari nukkumiseen: Joten tämä Lazy Old Geek (L.O.G.) osti äskettäin AliExpress.comilta IR -lämpömoduulin MLX90614. Katso kuvat Tämä on samantyyppinen anturi, jota käytetään otsan ja korvan lämpömittarissa, jotka näkyvät kolmannessa kuvassa. Niitä kutsutaan kontaktittomiksi, koska
Mini Travel Electronics Kit: 3 vaihetta
Mini Travel Electronics Kit: Tervetuloa ensimmäiseen ohjeeseeni! En ole varma, miten tämä menee, joten jos sinulla on palautetta tai ehdotuksia, jätä se alla oleviin kommentteihin.Olen aina halunnut pystyä rakentamaan peruspiirejä sateisina lomapäivinä tai vain olemaan helppo portaali
Breadboard Electronics: 3 vaihetta
Breadboard Electronics: Breadboard -elektroniikka perustuu prototyyppipiireihin, jotka osoittavat, että jokin toimii sitoutumatta komponentteihimme juotetulle levylle. Leipälevyn avulla voimme pelata, oppia, purkaa ja pelata lisää
Ultimate Electronics Helper -- Vaihteleva penkki -virtalähde avustavilla käsillä: 12 vaihetta (kuvilla)
Ultimate Electronics Helper || Muuttuva penkki -virtalähde avustavilla käsillä: Elektroniikan parissa työskentelyssä tarvitaan aina kahta työkalua. Tänään luomme nämä kaksi olennaista asiaa. Otamme myös askeleen pidemmälle ja sulautamme nämä kaksi yhteen lopulliseksi elektroniikan apulaiseksi