Tartalomjegyzék:
- 1. lépés: Szükséges összetevők
- 2. lépés: Hardver beállítása
- 3. lépés: Arduino kód
- 4. lépés: PC -alkalmazáskód (C#.NET)
Videó: Arduino Youtube távirányító alváshoz (Leobot Electronics): 4 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Arduino Youtube távirányító
Ha a Youtube segítségével biztosít filmet vagy zenét, amelyet alvás közben nézhet, akkor biztosan felébresztette volna a terheléses hirdetés vagy a különböző hangerőszint, amikor új film indul. Mondanom sem kell, hogy ez elég irritáló tud lenni.
Tehát a megoldásom, amit itt bizonyítok Önnek, hogy saját maga építsen, egy Arduino-alapú távirányító, amely távolról kölcsönhatásba lép a Youtube-tal. A távirányító szükséges a számítógép fő hangerejének megváltoztatásához, a Youtube hirdetéseinek és a Youtube videóinak kihagyásához.
Ezenkívül tartalmaz egy hangszint -érzékelőt, amely meghatározza a hangszóró tényleges hangosságát, és ezzel automatikusan csökkenthető a hangszint, ha hangos megszakításokat észlel, például hirdetést.
Végül hozzáadtam egy diagramot a PC alkalmazásban, hogy megjelenítse az észlelt hangszinteket.
A megoldás jobban finomítható, de számomra teljesíti a feladatot.
1. lépés: Szükséges összetevők
Mindezeket az alkatrészeket a Leobot Electronics szállítja (https://leobot.net)
1) Arduino UNO R3
leobot.net/viewproduct.aspx?id=530
2) 4 CSATORNA TÁVOLI (315MHZ) + VEVŐ MODUL (315MHZ)
leobot.net/viewproduct.aspx?id=521
3) MIKROFONHANG ÉS HANGFELVÉTEL ÉRZÉKELŐ MODUL (KY-037)
leobot.net/viewproduct.aspx?id=217
Szoftver
1) Visual Studio
visualstudio.microsoft.com/
2) Arduino IDE
www.arduino.cc/en/main/software
2. lépés: Hardver beállítása
1) Csatlakoztassa a 4 csatornás vevőmodult az Arduino-hoz.
4 csatornás vevő pin-> Arduino Uno Pin
GND-> GND
5V-> 5V
D0-> Digitális 2
D1-> Digitális 3
D2-> Digitális 4
D3-> Digitális 5
2) Csatlakoztassa a KY-037 mikrofonmodult az Arduino-hoz
Mikrofon KY-037 Pin-> Arduino Uno Pin
GND-> GND
+-> 3.3V
A0-> analóg 3
3. lépés: Arduino kód
Áttekintés
Az Arduino által követendő logika a következő:
A) Ellenőrizze, hogy a vevő jelzi -e a csapokat.
B) Attól függően, hogy melyik IO porton érkezik a jel, milyen parancsot küld a PC -nek.
C) Miután elvégezte az összes távirányító műveletet, érzékelje a mikrofon hangerejét, és küldje el a számítógépre.
D) A számítógépre küldött összes parancs formátuma először karakter, majd érték (ha értékre van szükség).
E) Az Arduino öt parancsot küldött a számítógépre
a. „U” - Hangerő növelése
b. „D” - Hangerő csökkentése
c. „S” - Kihagyás hozzáadása
d. „V” - Videó kihagyása
e. „A” - Hangszintet észlelt, majd ezt követte az érték
Az Arduino kód:
Töltse le az Arduino kódot innen:
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
void setup () {
Sorozat.kezdet (9600);
pinMode (A3, INPUT);
pinMode (in1, INPUT);
pinMode (in2, INPUT);
pinMode (in3, INPUT);
pinMode (in4, INPUT);
}
void loop () {
ha (digitalRead (in1))
{
Soros.println ("u");
késleltetés (100);
}
ha (digitalRead (in2))
{
Serial.println ("d");
késleltetés (100);
}
ha (digitalRead (in3))
{
Serial.println ("s");
késleltetés (100);
}
ha (digitalRead (in4))
{
Soros.println ("v");
késleltetés (100);
}
int readVal = analógRead (A3);
Serial.println (Karakterlánc ("a")+ Karakterlánc (readVal));
késleltetés (50);
}
4. lépés: PC -alkalmazáskód (C#. NET)
Az alkalmazás a COM (USB) porton keresztül hallgat és reagál a kapott parancs függvényében. A legegyszerűbb módja annak, hogy a hangot fel -le kapcsolja a számítógépen, ha az Interrop szolgáltatások segítségével közvetlenül beszél a Windows operációs rendszerrel. Az Interrop szolgáltatásokat is használjuk, hogy az egeret a képernyő egy adott pozíciójába vigyük, és kattintsunk. A különböző képernyők és nézetméretek lehetővé tételéhez lehetővé tesszük a felhasználó számára, hogy megadja a kihagyás hozzáadása és a kihagyás videó gombok helyzetét.
Egy szabványos.net diagramot használunk a kapott hangparancsok megjelenítésére.
Windows kód:
A teljes projekt letölthető innen:
leobot.net/audioadjust.zip
a rendszer használata;
a System. Collections. Generic használatával;
a System. ComponentModel használatával;
a System. Data használatával;
a System. Drawing használatával;
a System. Linq használatával;
a System. Text használatával;
a System. Windows. Forms használatával;
a System. Runtime. InteropServices használatával;
a System. IO. Ports használatával;
a System. Threading használatával;
névtér AudioAdjust
{
nyilvános részosztály Form1: Form
{
[DllImport ("User32. Dll")]
public static extern hosszú SetCursorPos (int x, int y);
[DllImport ("User32. Dll")]
public static extern bool ClientToScreen (IntPtr hWnd, ref POINT pont);
[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);
// Egérműveletek
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")]
statikus extern void keybd_event (bájt bVk, bájtos bScan, uint dwFlags, int dwExtraInfo);
Véletlen aRand = új Véletlen ();
public int LastLevel = 0;
public int MaxLevel = 255;
statikus SerialPort _serialPort;
int adX = 1281;
int adY = 706;
int vidX = 250;
int vidY = 780;
bool enableAudioChange = hamis;
nyilvános űrlap1 ()
{
InitializeComponent ();
}
private void Form1_Load (objektumküldő, EventArgs e)
{
string names = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (nevek);
comboBoxPort. SelectedIndex = 0;
}
int currentPoint = 0;
private void button1_Click (objektumküldő, EventArgs e)
{
_serialPort = új SerialPort ();
_serialPort. DataReceived += új SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // A tábla beállítása COM
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close ();
más
{
_serialPort. Open ();
}
// keybd_event ((byte) Kulcsok. KötetDown, 0, 0, 0); // hangerő csökkentése
}
void _serialPort_DataReceived (objektumküldő, SerialDataReceivedEventArgs e)
{
próbáld ki
{
string fullval = _serialPort. ReadLine ();
string com = fullval [0]. ToString ();
kapcsoló (com)
{
"a" eset:
{
{
// audio szint
string val = fullval. Replace ("a", "");
int valInt = int. Parse (val);
AddData (valInt);
}
szünet;
}
"u" eset:
{
// hang fel
keybd_event ((byte) Kulcsok. Kötet, 0, 0, 0); // hangerő csökkentése
szünet;
}
"d" eset:
{
// hang le
keybd_event ((byte) Kulcsok. KötetDown, 0, 0, 0); // hangerő csökkentése
szünet;
}
"s" eset:
{
//Hirdetés átugrása
MoveCursorSkipAd ();
Téma. Alvás (10);
DoMouseClick ();
szünet;
}
"v" eset:
{
//Hirdetés átugrása
MoveCursorSkipVideo ();
Téma. Alvás (10);
DoMouseClick ();
szünet;
}
}
}
fogás
{
}
// új NotImplementedException () dobása ();
}
private void MoveCursorSkipAd ()
{
Kurzor. Pozíció = új pont (1140, 725);
Kurzor. Pozíció = új pont (adX, adY);
}
private void MoveCursorSkipVideo ()
{
Kurzor. Pozíció = új pont (1140, 725);
Kurzor. Pozíció = új pont (vidX, vidY);
}
public void DoMouseClick ()
{
// Az importált függvény meghívása a kurzor aktuális pozíciójával
uint X = (uint) Kurzor. Pozíció. X;
uint Y = (uint) Kurzor. Pozíció. Y;
egér_esemény (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
egér_esemény (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
void AddData (int szint)
{
if (enableAudioChange)
{
if (szint> = MaxLevel)
{
keybd_event ((byte) Kulcsok. KötetDown, 0, 0, 0); // hangerő csökkentése
keybd_event ((byte) Kulcsok. KötetDown, 0, 0, 0); // hangerő csökkentése
keybd_event ((byte) Kulcsok. KötetDown, 0, 0, 0); // hangerő csökkentése
}
más
{
if (szint <MaxLevel - 0)
{
keybd_event ((byte) Kulcsok. Kötet, 0, 0, 0); // hangerő csökkentése
}
}
}
SetChart (szint);
currentPoint ++;
}
delegált void SetTextCallback (int val);
private void SetChart (int val)
{
// Az InvokeRequired kötelező összehasonlítja a
// a szál hívása a létrehozó szál szál -azonosítójára.
// Ha ezek a szálak eltérőek, akkor igaz értéket ad vissza.
ha (this.chart1. InvokeRequired)
{
SetTextCallback d = új SetTextCallback (SetChart);
this. Invoke (d, új objektum {val});
}
más
{
chart1. Series [0]. Points. AddXY (0, val);
if (currentPoint> = 10)
{
chart1. Series [0]. Points. RemoveAt (0);
}
}
}
private void textBoxLevel_TextChanged (objektumküldő, EventArgs e)
{
próbáld ki
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
fogás
{
textBoxLevel. Text = MaxLevel + "";
}
}
private void buttonTestSkip_Click (objektumküldő, EventArgs e)
{
MoveCursorSkipAd ();
Téma. Alvás (10);
DoMouseClick ();
}
private void textBoxXpos_TextChanged (objektumküldő, EventArgs e)
{
próbáld ki
{
adX = int. Parse (textBoxXpos. Text);
}
fogás
{
textBoxXpos. Text = adX + "";
}
}
private void textBoxYpos_TextChanged (objektumküldő, EventArgs e)
{
próbáld ki
{
adY = int. Parse (textBoxYpos. Text);
}
fogás
{
textBoxYpos. Text = adY + "";
}
}
private void buttonSkipVideo_Click (objektumküldő, EventArgs e)
{
MoveCursorSkipVideo ();
Téma. Alvás (10);
DoMouseClick ();
}
private void textBoxXposVid_TextChanged (objektumküldő, EventArgs e)
{
próbáld ki
{
vidX = int. Parse (textBoxXposVid. Text);
}
fogás
{
textBoxXposVid. Text = vidX + "";
}
}
private void textBoxYposVid_TextChanged (objektumküldő, EventArgs e)
{
próbáld ki
{
vidY = int. Parse (textBoxYposVid. Text);
}
fogás
{
textBoxYposVid. Text = vidY + "";
}
}
private void checkBoxEnable_CheckedChanged (objektumküldő, EventArgs e)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
nyilvános szerkezet PONT
{
public int x;
public int y;
}
}
Ajánlott:
Bármilyen távirányító klónozása Arduino Nano segítségével: 5 lépés
Bármilyen távirányító klónozása Arduino Nano segítségével: Bármilyen távirányító klónozása Arduino Nano segítségével
Arduino böngésző alapú távirányító (linux): 9 lépés (képekkel)
Arduino böngészőalapú távirányító (linux): Gyerekeink vannak. Nagyon szeretem őket, de mindig elrejtik a műhold és a TV távirányítóját, amikor bekapcsolják a gyermekcsatornákat. Miután ez több éven keresztül naponta történt, és miután drága feleségem megengedte, hogy
Infravörös hőmérő alváshoz: 5 lépés
IR hőmérő alváshoz: Tehát ez a Lazy Old Geek (L.O.G.) nemrég vásárolt egy IR hőmodult, az MLX90614 -et az AliExpress.com -tól. Ugyanaz a típusú érzékelő, amelyet a harmadik képen látható homlok- és fülhőmérőkben használnak. Kapcsolatlannak hívják őket, mert
IR távirányító a számítógéphez Arduino segítségével: 6 lépés
IR távirányító a számítógéphez Arduino segítségével: Ezzel a vevővel távolról vezérelheti számítógépét az IR modulnak és az Arduino -nak köszönhetően. Lazzy mód aktiválva ^^
Vezeték nélküli távirányító 2,4 GHz -es NRF24L01 modul használatával Arduino - Nrf24l01 4 csatorna / 6 csatornás adó vevő négykópás - Rc Helikopter - Rc sík az Arduino használatával: 5 lépés (képekkel)
Vezeték nélküli távirányító 2,4 GHz -es NRF24L01 modul használatával Arduino | Nrf24l01 4 csatorna / 6 csatornás adó vevő négykópás | Rc Helikopter | Rc sík Arduino használatával: Rc autó működtetése | Quadcopter | Drone | RC sík | RC csónak, mindig szükségünk van vevőre és adóra, tegyük fel, hogy az RC QUADCOPTER esetében szükségünk van egy 6 csatornás adóra és vevőre, és az ilyen típusú TX és RX túl költséges, ezért készítünk egyet