Turinys:
- 1 žingsnis: reikalingi komponentai
- 2 žingsnis: Aparatūros sąranka
- 3 žingsnis: „Arduino“kodas
- 4 veiksmas: kompiuterio programos kodas (C#.NET)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:46
„Arduino Youtube“nuotolinio valdymo pultas
Jei miegodami naudojate „YouTube“norėdami žiūrėti filmą ar muziką, jūs tikrai būtumėte pažadinti įkeltos reklamos ar skirtingo garsumo lygio, kai prasidės naujas filmas. Nereikia nė sakyti, kad tai gali būti gana erzinanti.
Taigi, mano sprendimas, kurį jums čia įrodau, kad sukurtumėte sau, yra „Arduino“nuotolinio valdymo pultas, skirtas nuotoliniu būdu sąveikauti su „YouTube“. Nuotolinio valdymo pultas reikalingas norint pakeisti pagrindinį kompiuterio garso stiprumą, praleisti skelbimus „Youtube“ir praleisti vaizdo įrašus „Youtube“.
Taip pat yra garso lygio jutiklis, skirtas nustatyti, koks garsiakalbis iš tikrųjų yra garsus, o tai savo ruožtu gali būti naudojamas automatiškai sumažinti garso lygį, kai aptinkami garsūs trikdžiai, pvz., Reklama.
Galiausiai kompiuterio programoje pridėjau diagramą, kad būtų rodomi aptikti garso lygiai.
Sprendimą galima geriau patobulinti, bet man jis atlieka užduotį.
1 žingsnis: reikalingi komponentai
Visus šiuos komponentus tiekia „Leobot Electronics“(https://leobot.net)
1) „Arduino UNO R3“
leobot.net/viewproduct.aspx?id=530
2) 4 KANALŲ NUOTOLIS (315MHZ) + GAVIMO MODULIS (315MHZ)
leobot.net/viewproduct.aspx?id=521
3) MIKROFONINIO BALSO IR GARSO ATSITIKIMO JUTIKLIO MODULIS (KY-037)
leobot.net/viewproduct.aspx?id=217
Programinė įranga
1) „Visual Studio“
visualstudio.microsoft.com/
2) „Arduino IDE“
www.arduino.cc/en/main/software
2 žingsnis: Aparatūros sąranka
1) Prijunkite 4 kanalų imtuvo modulį prie „Arduino“.
4 kanalų imtuvo kaištis-> „Arduino Uno“kaištis
GND-> GND
5V-> 5V
D0-> Skaitmeninis 2
D1-> Skaitmeninis 3
D2-> Skaitmeninis 4
D3-> Skaitmeninis 5
2) Prijunkite mikrofono KY-037 modulį prie „Arduino“
Mikrofonas KY-037 Pin-> Arduino Uno Pin
GND-> GND
+-> 3.3V
A0-> Analogas 3
3 žingsnis: „Arduino“kodas
Apžvalga
Logika, kurios reikia laikytis „Arduino“, yra tokia:
A) Patikrinkite, ar imtuvas signalizuoja apie kaiščius.
B) Priklausomai nuo to, kuriame IO prievade signalas priimamas, kokia komanda bus siunčiama į kompiuterį.
C) Atlikę visus nuotolinio valdymo veiksmus, nustatykite garso lygį naudodami mikrofoną ir nusiųskite jį į kompiuterį.
D) Visų komandų, siunčiamų į kompiuterį, formatas pirmiausia turi būti simbolis, o tada reikšmė (jei reikia vertės).
E) Yra penkios komandos, siunčiamos iš „Arduino“į kompiuterį
a. „U“- padidinkite garsumą
b. „D“- sumažinkite garsumą
c. „S“- praleisti Pridėti
d. „V“- praleisti vaizdo įrašą
e. „A“- aptiktas garso lygis, po kurio eina vertė
„Arduino“kodas:
Atsisiųskite „Arduino“kodą čia:
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 () {
jei (digitalRead (in1))
{
Serial.println ("u");
vėlavimas (100);
}
jei (digitalRead (in2))
{
Serial.println ("d");
vėlavimas (100);
}
jei (digitalRead (in3))
{
Serial.println ("s");
vėlavimas (100);
}
jei (digitalRead (in4))
{
Serial.println ("v");
vėlavimas (100);
}
int readVal = analogRead (A3);
Serial.println (Eilutė ("a")+ eilutė (skaitytiVal));
vėlavimas (50);
}
4 veiksmas: kompiuterio programos kodas (C#. NET)
Programa klausysis per COM (USB) prievadą ir reaguos priklausomai nuo to, kokia komanda yra gauta. Paprasčiausias būdas įjungti ir sumažinti garsą kompiuteryje yra naudoti „Interrop“paslaugas tiesiogiai kalbant su „Windows“OS. Mes taip pat naudojame „Interrop“paslaugas, norėdami perkelti pelę į tam tikrą ekrano vietą ir spustelėti. Kad būtų galima naudoti skirtingus ekranus ir rodinių dydžius, leidžiame vartotojui nurodyti praleidimo ir praleidimo vaizdo mygtukų padėtį.
Mes naudojame standartinę.net diagramą, kad galėtume rodyti visas gautas garso komandas.
„Windows“kodas:
Atsisiųskite visą projektą čia:
leobot.net/audioadjust.zip
naudojant sistemą;
naudojant System. Collections. Generic;
naudojant System. ComponentModel;
naudojant System. Data;
naudojant „System. Drawing“;
naudojant System. Linq;
naudojant System. Text;
naudojant System. Windows. Forms;
naudojant System. Runtime. InteropServices;
naudojant System. IO. Ports;
naudojant „System. Threading“;
vardų sritis „AudioAdjust“
{
viešoji dalinė klasė Form1: Forma
{
[„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);
// Pelės veiksmai
privati konst int MOUSEEVENTF_LEFTDOWN = 0x02;
privati konst int MOUSEEVENTF_LEFTUP = 0x04;
privati konst int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
[„DllImport“(„user32.dll“)]
statinis išorinis void keybd_event (baitas bVk, baitas bScan, uint dwFlags, int dwExtraInfo);
Atsitiktinis aRand = naujas Atsitiktinis ();
public int Paskutinis lygis = 0;
public int MaxLevel = 255;
statinis SerialPort _serialPort;
int adX = 1281;
int adY = 706;
int vidX = 250;
int vidY = 780;
bool enableAudioChange = klaidinga;
vieša forma1 ()
{
InitializeComponent ();
}
private void Form1_Load (objekto siuntėjas, „EventArgs e“)
{
string names = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (pavadinimai);
comboBoxPort. SelectedIndex = 0;
}
int currentPoint = 0;
private void button1_Click (objekto siuntėjas, „EventArgs e“)
{
_serialPort = naujas SerialPort ();
_serialPort. DataReceived += naujas SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Nustatykite lentą COM
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close ();
Kitas
{
_serialPort. Open ();
}
// keybd_event ((baitas) Keys. VolumeDown, 0, 0, 0); // sumažinti garsumą
}
void _serialPort_DataReceived (objekto siuntėjas, SerialDataReceivedEventArgs e)
{
bandyti
{
eilutė fullval = _serialPort. ReadLine ();
eilutė com = fullval [0]. ToString ();
jungiklis (com)
{
atvejis "a":
{
{
// garso lygis
eilutė val = fullval. Replace ("a", "");
int valInt = int. Parse (val);
AddData (valInt);
}
pertrauka;
}
atvejis „u“:
{
// garsas aukštyn
keybd_event ((baitas) Keys. VolumeUp, 0, 0, 0); // sumažinti garsumą
pertrauka;
}
„d“atvejis:
{
// garsas nutildytas
keybd_event ((baitas) Keys. VolumeDown, 0, 0, 0); // sumažinti garsumą
pertrauka;
}
atvejis "s":
{
//praleisti skelbimą
MoveCursorSkipAd ();
Siūlas. Miegas (10);
DoMouseClick ();
pertrauka;
}
atvejis „v“:
{
//praleisti skelbimą
„MoveCursorSkipVideo“();
Siūlas. Miegas (10);
DoMouseClick ();
pertrauka;
}
}
}
pagauti
{
}
// mesti naują NotImplementedException ();
}
private void MoveCursorSkipAd ()
{
Žymeklis. Pozicija = naujas taškas (1140, 725);
Cursor. Position = naujas taškas (adX, adY);
}
private void MoveCursorSkipVideo ()
{
Žymeklis. Pozicija = naujas taškas (1140, 725);
Cursor. Position = naujas taškas (vidX, vidY);
}
public void DoMouseClick ()
{
// Iškviesti importuotą funkciją su dabartine žymeklio padėtimi
uint X = (uint) Cursor. Position. X;
uint Y = (uint) Cursor. Position. Y;
pelės įvykis (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
pelės įvykis (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
void AddData (int lygis)
{
if (enableAudioChange)
{
jei (lygis> = maksimalus lygis)
{
keybd_event ((baitas) Keys. VolumeDown, 0, 0, 0); // sumažinti garsumą
keybd_event ((baitas) Keys. VolumeDown, 0, 0, 0); // sumažinti garsumą
keybd_event ((baitas) Keys. VolumeDown, 0, 0, 0); // sumažinti garsumą
}
Kitas
{
jei (lygis <MaxLevel - 0)
{
keybd_event ((baitas) Keys. VolumeUp, 0, 0, 0); // sumažinti garsumą
}
}
}
„SetChart“(lygis);
currentPoint ++;
}
delegate void SetTextCallback (int val);
private void SetChart (int val)
{
// „InvokeRequired“reikia palyginti gijos ID
// skambinti gija į kuriančios gijos ID temą.
// Jei šios temos skiriasi, tai grąžina true.
jei (this.chart1. InvokeRequired)
{
SetTextCallback d = naujas SetTextCallback (SetChart);
this. Invoke (d, naujas objektas {val});
}
Kitas
{
diagrama1. Serija [0]. Points. AddXY (0, val);
jei (dabartinis taškas> = 10)
{
diagrama1. Serija [0]. Points. RemoveAt (0);
}
}
}
private void textBoxLevel_TextChanged (objekto siuntėjas, „EventArgs e“)
{
bandyti
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
pagauti
{
textBoxLevel. Text = MaxLevel + "";
}
}
private void buttonTestSkip_Click (objekto siuntėjas, „EventArgs e“)
{
MoveCursorSkipAd ();
Siūlas. Miegas (10);
DoMouseClick ();
}
private void textBoxXpos_TextChanged (objekto siuntėjas, „EventArgs e“)
{
bandyti
{
adX = int. Parse (textBoxXpos. Text);
}
pagauti
{
textBoxXpos. Text = adX + "";
}
}
private void textBoxYpos_TextChanged (objekto siuntėjas, „EventArgs e“)
{
bandyti
{
adY = int. Parse (textBoxYpos. Text);
}
pagauti
{
textBoxYpos. Text = adY + "";
}
}
private void buttonSkipVideo_Click (objekto siuntėjas, „EventArgs e“)
{
„MoveCursorSkipVideo“();
Siūlas. Miegas (10);
DoMouseClick ();
}
private void textBoxXposVid_TextChanged (objekto siuntėjas, „EventArgs e“)
{
bandyti
{
vidX = int. Parse (textBoxXposVid. Text);
}
pagauti
{
textBoxXposVid. Text = vidX + "";
}
}
private void textBoxYposVid_TextChanged (objekto siuntėjas, „EventArgs e“)
{
bandyti
{
vidY = int. Parse (textBoxYposVid. Text);
}
pagauti
{
textBoxYposVid. Text = vidY + "";
}
}
private void checkBoxEnable_CheckedChanged (objekto siuntėjas, „EventArgs e“)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
viešoji struktūra PUNKTAS
{
public int x;
viešas int y;
}
}
Rekomenduojamas:
Televizoriaus nuotolinio valdymo pultas tampa RF nuotolinio valdymo pultu -- NRF24L01+ pamoka: 5 žingsniai (su paveikslėliais)
Televizoriaus nuotolinio valdymo pultas tampa RF nuotolinio valdymo pultu || NRF24L01+ Pamoka: Šiame projekte parodysiu, kaip aš naudoju populiarųjį nRF24L01+ RF IC, norėdamas belaidžiu būdu sureguliuoti LED juostos ryškumą per tris nenaudingus televizoriaus nuotolinio valdymo pulto mygtukus. Pradėkime
„IRduino“: „Arduino“nuotolinio valdymo pultas - imituokite pamestą nuotolinio valdymo pultą: 6 žingsniai
„IRduino“: „Arduino“nuotolinio valdymo pultas - imituokite pamestą nuotolinio valdymo pultą: jei kada nors pametėte televizoriaus ar DVD grotuvo nuotolinio valdymo pultą, žinote, kaip apmaudu, kai tenka vaikščioti, ieškoti ir naudoti paties įrenginio mygtukus. Kartais šie mygtukai net nesuteikia tokių funkcijų kaip nuotolinio valdymo pultas. Gauti
Įprastas nuotolinio valdymo rinkinys transformuotas į keturių kanalų RC žaislinį nuotolinio valdymo pultą: 4 žingsniai
Įprastas nuotolinio valdymo rinkinys transformuotas į keturių kanalų RC žaislinį nuotolinio valdymo pultą: 62 将 通用 遥控 转换 转换 为 为 玩具 模型 中 使用 的 四方法 非常 简单。 只需 准备 一些 瓦楞纸 板 , 然后 按照 视频 教程 完成 这个 电子 项目 并 并 为 视频 教程 完成 这个 电子 项目 并 并 为
Konvertuokite savo IR nuotolinio valdymo pultą į RF nuotolinio valdymo pultą: 9 žingsniai (su paveikslėliais)
Konvertuokite savo IR nuotolinio valdymo pultą į RF nuotolinio valdymo pultą: Šiandienos instrukcijoje aš jums parodysiu, kaip galite naudoti bendrą RF modulį be mikrovaldiklio, kuris galiausiai paskatins mus sukurti projektą, kuriame bet kurio įrenginio IR nuotolinio valdymo pultą galima paversti RF Nuotolinis. Pagrindinis privalumas konvertuojant
„Alexa“balso valdymo televizoriaus nuotolinio valdymo pultas ESP8266: 9 žingsniai
„Alexa“balso valdymo televizoriaus nuotolinio valdymo pultas ESP8266: Ar kas nors jūsų namuose atleidžia nuotolinio valdymo pultą, ar einate į tuščią kambarį, kad pamatytumėte, kaip televizorius skleidžiasi. Baterijos pradeda gesti ir nekontroliuojamos iš kambario galo. Dabar galite valdyti savo televizorių, DVR, bet ką su IR valdikliu, kurį galite