Բովանդակություն:
- Քայլ 1: Անհրաժեշտ բաղադրիչներ
- Քայլ 2: Սարքավորման կարգավորում
- Քայլ 3: Arduino կոդ
- Քայլ 4: Համակարգչի հավելվածի ծածկագիր (C#. NET)
Video: Arduino Youtube հեռակառավարման ռեժիմ քնելու համար (Leobot Electronics) ՝ 4 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:47
Arduino Youtube հեռակառավարիչ
Եթե դուք օգտագործում եք Youtube- ը ՝ ֆիլմ կամ երաժշտություն տրամադրելու համար ՝ քնած ժամանակ, ապա, անշուշտ, ձեզ կարթնացնեին բեռնված գովազդը կամ ձայնի տարբեր մակարդակները, երբ նոր ֆիլմ սկսվի: Ավելորդ է ասել, որ սա կարող է բավականին նյարդայնացնել:
Այսպիսով, իմ լուծումը, որը ես ձեզ ապացուցում եմ այստեղ, ինքներդ ձեզ համար կառուցելու համար Arduino- ի վրա հիմնված հեռակառավարման վահանակ է ՝ հեռավորության վրա Youtube- ի հետ փոխազդելու համար: Հեռակառավարիչը պետք է փոխի իմ համակարգչի հիմնական ձայնի ձայնը, բաց թողնի գովազդները Youtube- ում և բաց թողնի տեսանյութերը Youtube- ում:
Բացի այդ, ներառված է աուդիո մակարդակի տվիչ `որոշելու, թե իրականում որքան բարձր է բարձրախոսը, որն իր հերթին կարող է օգտագործվել ձայնի մակարդակը ինքնաբերաբար իջեցնելու համար` բարձրագոչ ընդհատումները հայտնաբերելու դեպքում, ինչպիսին է գովազդը:
Վերջապես, ես համակարգչային հավելվածում ավելացրի գծապատկեր `ցուցադրված ձայնի մակարդակները ցուցադրելու համար:
Լուծումը կարող է ավելի լավ ճշգրտվել, բայց ինձ համար այն կատարում է առաջադրանքը:
Քայլ 1: Անհրաժեշտ բաղադրիչներ
Այս բոլոր բաղադրիչները մատակարարվում են Leobot Electronics- ի կողմից (https://leobot.net)
1) Arduino UNO R3
leobot.net/viewproduct.aspx?id=530
2) 4 ԱԼԻՔԻ ՀԵՌՈ (315 ՄՀց) + ՌԵՍԻՎԵՐԻ ՄՈԴՈLEԼ (315 ՄՀց)
leobot.net/viewproduct.aspx?id=521
3) Միկրոֆոնի ձայնի և ձայնի հայտնաբերման սենսորային մոդուլ (KY-037)
leobot.net/viewproduct.aspx?id=217
Ծրագրային ապահովում
1) Visual Studio
visualstudio.microsoft.com/
2) Arduino IDE
www.arduino.cc/hy/main/software
Քայլ 2: Սարքավորման կարգավորում
1) Միացրեք 4-ալիք ստացողի մոդուլը Arduino- ին:
4-ալիք ստացողի Pin-> Arduino Uno Pin
GND-> GND
5V-> 5V
D0-> Թվային 2
D1-> Թվային 3
D2-> Թվային 4
D3-> Թվային 5
2) Խոսափողը KY-037 մոդուլը միացրեք Arduino- ին
Խոսափող KY-037 Pin-> Arduino Uno Pin
GND-> GND
+-> 3.3 Վ
A0-> Անալոգային 3
Քայլ 3: Arduino կոդ
Ակնարկ
Տրամաբանությունը, որին պետք է հետևի Arduino- ն, հետևյալն է.
Ա) Ստուգեք, արդյոք ստացողը ազդանշան է տալիս որևէ կապում:
Բ) Կախված այն բանից, թե որ IO նավահանգստում է ազդանշանը ստացվում, ինչ հրաման է ուղարկվելու ԱՀ:
Գ) Հեռակառավարման բոլոր գործողությունները կատարելուց հետո հայտնաբերեք խոսափողի ձայնային մակարդակը և ուղարկեք այն ԱՀ:
Դ) ԱՀ ուղարկված բոլոր հրամանները ունեն ձև ՝ նախ ունենալով բնույթ, այնուհետև արժեք (եթե դրա արժեքը անհրաժեշտ է):
Ե) Arduino- ից համակարգիչ ուղարկված հինգ հրաման կա
ա «U» - ձայնի բարձրացում
բ. «Դ» - ձայնի նվազում
գ. «Ս» - Բաց թողնել ավելացումը
դ. «V» - Բաց թողնել տեսանյութը
ե. «Ա» - հայտնաբերված աուդիո մակարդակը, որին հաջորդում է արժեքը
Arduino կոդը:
Ներբեռնեք Arduino կոդը այստեղ ՝
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);
}
դատարկ շրջան () {
եթե (digitalRead (in1))
{
Serial.println ("u");
ուշացում (100);
}
եթե (digitalRead (in2))
{
Serial.println («դ»);
ուշացում (100);
}
եթե (digitalRead (in3))
{
Serial.println («ներ»);
ուշացում (100);
}
եթե (digitalRead (in4))
{
Serial.println ("v");
ուշացում (100);
}
int readVal = analogRead (A3);
Serial.println (Լարային («ա»)+ Լարային (readVal));
ուշացում (50);
}
Քայլ 4: Համակարգչի հավելվածի ծածկագիր (C#. NET)
Հավելվածը կլսի COM (USB) պորտով և կարձագանքի `կախված այն բանից, թե ինչ հրաման է ստացվել: ԱՀ -ում ձայնը բարձրացնելու և իջեցնելու ամենապարզ միջոցը Interrop ծառայություններից օգտվելն է `Windows OS- ի հետ անմիջականորեն խոսելու համար: Մենք նաև օգտագործում ենք Interrop ծառայությունները ՝ մկնիկը էկրանին որոշակի դիրքի տեղափոխելու և սեղմելու համար: Որպեսզի թույլատրվի տարբեր էկրանների և դիտումների չափսեր, մենք թույլ ենք տալիս օգտվողին նշել վիդեո կոճակների բաց թողնել և բաց թողնելը:
Մենք օգտագործում ենք ստանդարտ.net աղյուսակ `ստացված ցանկացած աուդիո հրամաններ ցուցադրելու համար:
Windows կոդ:
Ներբեռնեք ամբողջական նախագիծը այստեղ ՝
leobot.net/audioadjust.zip
օգտագործելով համակարգ;
օգտագործելով System. Collections. Generic;
օգտագործելով System. ComponentModel;
օգտագործելով System. Data;
օգտագործելով System. Drawing;
օգտագործելով System. Linq;
օգտագործելով System. Text;
օգտագործելով System. Windows. Forms;
օգտագործելով System. Runtime. InteropServices;
օգտագործելով System. IO. Ports;
օգտագործելով System. Threading;
անունների տարածքը AudioAdjust
{
հանրային մասնակի դասարան Ձև 1: Ձև
{
[DllImport ("User32. Dll")]
հանրային ստատիկ արտաքին երկար SetCursorPos (int x, int y);
[DllImport ("User32. Dll")]
հանրային ստատիկ արտաքին bool ClientToScreen (IntPtr hWnd, ref POINT point);
[DllImport ("user32.dll", CharSet = CharSet. Auto, CallingConvention = CallingConvention. StdCall)]
հանրային ստատիկ արտաքին դատարկություն mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
// Մկնիկի գործողություններ
մասնավոր կոնստրուկտոր MOUSEEVENTF_LEFTDOWN = 0x02;
մասնավոր կոնստրուկտոր MOUSEEVENTF_LEFTUP = 0x04;
մասնավոր կոնստրուկտոր MOUSEEVENTF_RIGHTDOWN = 0x08;
մասնավոր կոնստրուկտոր MOUSEEVENTF_RIGHTUP = 0x10;
[DllImport ("user32.dll")]
ստատիկ արտաքին անվավեր keybd_event (բայթ bVk, բայթ bScan, uint dwFlags, int dwExtraInfo);
Պատահական aRand = նոր Պատահական ();
public int LastLevel = 0;
հանրային int MaxLevel = 255;
ստատիկ SerialPort _serialPort;
int adX = 1281;
int adY = 706;
int vidX = 250;
int vidY = 780;
bool enableAudioChange = կեղծ;
հանրային ձև 1 ()
{
InitializeComponent ();
}
մասնավոր անվավեր Form1_Load (օբյեկտ ուղարկող, EventArgs ե)
{
տող անուններ = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (անուններ);
comboBoxPort. SelectedIndex = 0;
}
int currentPoint = 0;
private void button1_Click (օբյեկտ ուղարկող, EventArgs ե)
{
_serialPort = նոր SerialPort ();
_serialPort. DataReceived += նոր SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Սահմանեք ձեր տախտակի COM
_serialPort. BaudRate = 9600;
եթե (_serialPort. IsOpen) _serialPort. Close ();
ուրիշ
{
_serialPort. Open ();
}
// keybd_event ((բայթ) Keys. VolumeDown, 0, 0, 0); // նվազեցնել ծավալը
}
void _serialPort_DataReceived (օբյեկտ ուղարկող, SerialDataReceivedEventArgs ե)
{
փորձիր
{
string fullval = _serialPort. ReadLine ();
string com = fullval [0]. ToString ();
անջատիչ (com)
{
դեպք «ա»:
{
{
// աուդիո մակարդակ
տող val = fullval. Փոխարինել ("a", "");
int valInt = int. Վերլուծել (val);
AddData (valInt);
}
ընդմիջում;
}
դեպք «u»:
{
// աուդիո բարձրացում
keybd_event ((բայթ) Keys. VolumeUp, 0, 0, 0); // նվազեցնել ծավալը
ընդմիջում;
}
դեպք «դ»:
{
// ձայնի անջատում
keybd_event ((բայթ) Keys. VolumeDown, 0, 0, 0); // նվազեցնել ծավալը
ընդմիջում;
}
case "s":
{
//բաց թողնել Գովազդ
MoveCursorSkipAd ();
Թեման. Քուն (10);
DoMouseClick ();
ընդմիջում;
}
դեպք «v»:
{
//բաց թողնել Գովազդ
MoveCursorSkipVideo ();
Թեման. Քուն (10);
DoMouseClick ();
ընդմիջում;
}
}
}
բռնել
{
}
// նետել նոր NotImplementedException ();
}
մասնավոր դատարկություն MoveCursorSkipAd ()
{
Կուրսորը: Դիրքը = նոր կետ (1140, 725);
Cursor. Position = նոր կետ (adX, adY);
}
մասնավոր դատարկություն MoveCursorSkipVideo ()
{
Կուրսորը: Դիրքը = նոր կետ (1140, 725);
Cursor. Position = նոր կետ (vidX, vidY);
}
հրապարակային դատարկ DoMouseClick ()
{
// Callանգահարեք ներմուծված գործառույթը կուրսորի ընթացիկ դիրքով
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);
}
անվավեր AddData (int մակարդակ)
{
եթե (enableAudioChange)
{
եթե (մակարդակ> = MaxLevel)
{
keybd_event ((բայթ) Keys. VolumeDown, 0, 0, 0); // նվազեցնել ծավալը
keybd_event ((բայթ) Keys. VolumeDown, 0, 0, 0); // նվազեցնել ծավալը
keybd_event ((բայթ) Keys. VolumeDown, 0, 0, 0); // նվազեցնել ծավալը
}
ուրիշ
{
եթե (մակարդակ <MaxLevel - 0)
{
keybd_event ((բայթ) Keys. VolumeUp, 0, 0, 0); // նվազեցնել ծավալը
}
}
}
SetChart (մակարդակ);
currentPoint ++;
}
պատվիրակել անվավեր SetTextCallback (int val);
մասնավոր դատարկ SetChart (int val)
{
// InvokeRequired պահանջվում է համեմատել թելի ID- ն
// թեմա կանչելը ստեղծող շարանի թելի ID- ին:
// Եթե այս թելերը տարբեր են, այն վերադառնում է ճշմարիտ:
եթե (սա. գրաֆիկ 1. InvokeRequired)
{
SetTextCallback d = նոր SetTextCallback (SetChart);
this. Ivoke (d, new object {val});
}
ուրիշ
{
գրաֆիկ 1. Սերիաներ [0]. Կետեր. AddXY (0, val);
եթե (ընթացիկ կետ> = 10)
{
գծապատկեր 1. Սերիաներ [0]. Կետեր. Հեռացնել (0);
}
}
}
մասնավոր դատարկ textBoxLevel_TextChanged (օբյեկտ ուղարկող, EventArgs ե)
{
փորձիր
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
բռնել
{
textBoxLevel. Text = MaxLevel + "";
}
}
մասնավոր դատարկության կոճակ TestSkip_Click (օբյեկտ ուղարկող, EventArgs ե)
{
MoveCursorSkipAd ();
Թեման: Քուն (10);
DoMouseClick ();
}
մասնավոր անվավեր textBoxXpos_TextChanged (օբյեկտ ուղարկող, EventArgs ե)
{
փորձիր
{
adX = int. Parse (textBoxXpos. Text);
}
բռնել
{
textBoxXpos. Text = adX + "";
}
}
մասնավոր անվավեր textBoxYpos_TextChanged (օբյեկտ ուղարկող, EventArgs ե)
{
փորձիր
{
adY = int. Parse (textBoxYpos. Text);
}
բռնել
{
textBoxYpos. Text = adY + "";
}
}
մասնավոր դատարկության կոճակ SkipVideo_Click (օբյեկտ ուղարկող, EventArgs ե)
{
MoveCursorSkipVideo ();
Թեման: Քուն (10);
DoMouseClick ();
}
մասնավոր անվավեր textBoxXposVid_TextChanged (օբյեկտ ուղարկող, EventArgs ե)
{
փորձիր
{
vidX = int. Parse (textBoxXposVid. Text);
}
բռնել
{
textBoxXposVid. Text = vidX + "";
}
}
մասնավոր դատարկ textBoxYposVid_TextChanged (օբյեկտ ուղարկող, EventArgs ե)
{
փորձիր
{
vidY = int. Parse (textBoxYposVid. Text);
}
բռնել
{
textBoxYposVid. Text = vidY + "";
}
}
մասնավոր դատարկ ստուգումBoxEnable_CheckedChanged (օբյեկտ ուղարկող, EventArgs ե)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
հանրային կառուցվածքի ԿԵՏ
{
հանրային int x;
հանրային int y;
}
}
Խորհուրդ ենք տալիս:
Ձեր համակարգչի համար IR հեռակառավարման վահանակ Arduino- ով. 6 քայլ
Arduino- ով ձեր համակարգչի համար IR հեռակառավարում. Այս ընդունիչով ձեր IR համակարգչի և Arduino- ի շնորհիվ հեռակա կարգով կառավարեք ձեր համակարգիչը: Lazույլ ռեժիմը միացված է ^^
Երկու ռեժիմ ESP8266 (AP և հաճախորդի ռեժիմ) ՝ 3 քայլ
Երկուսն էլ ռեժիմ ESP8266 (AP և հաճախորդի ռեժիմ). Նախորդ հոդվածում ես պատրաստել եմ ձեռնարկ, թե ինչպես կարգավորել ռեժիմը ESP8266- ում, որը որպես մուտքի կետ կամ wifi կայան է և որպես wifi հաճախորդ: այս հոդվածում ես ձեզ ցույց կտամ, թե ինչպես ESP8266 ռեժիմը երկու ռեժիմ դարձնելու համար: Այսինքն, այս ռեժիմում ESP8266- ը կարող է
Սովորական հեռակառավարման հավաքածուն վերածվեց չորս ալիքի RC Toy հեռակառավարման վահանակի `4 քայլ
Սովորական հեռակառավարման հավաքածուն վերածվեց չորս ալիքի RC Toy հեռակառավարման վահանակի. 如何 将 通用 遥控 器 62改造 方法 非常 简单. 只需 准备 一些 瓦楞纸 板, 然后 按照 视频 教程 完成 这个 电子 项目 并 为 您 服务: 玩具 车船 提供 远程 无线 控制:
Հեռակառավարման ռեժիմ ՝ 4 քայլ
Հեռակառավարման ռեժիմ. Դե, այս ուսանելի ծրագրում ես կփոփոխեմ իմ DVD հեռակառավարիչը: Ինձ նյարդայնացրեց փոքր մարտկոցը, որը դուք պետք է օգտագործեք: AAA- ն փոքր մարտկոց է, որը ես հեշտությամբ չունեմ: Բայց ես ունեմ մահացած կամ մահացող AA չղջիկի մեծ հավաքածու
Smart Master/Slave Power Strip ձեր համակարգչի համար [ռեժիմ] (ինքնասպասարկում, բայց զրոյական սպասման ռեժիմ). 6 քայլ (նկարներով)
Smart Master/Slave Power Strip ձեր համակարգչի համար [ռեժիմ] (ինքնասպասարկում, բայց զրոյական սպասում). Անջատումը պետք է անջատված լինի: Եվ օգտագործելիությունը պետք է լավ լինի: Կարճ ասած. Մենք այնտեղ ճիշտ արտադրանք չգտանք, ուստի ավարտեցինք մոդելի մոդելը: Մենք գնեցինք որոշ " էներգախնայող " էլեկտրական ժապավեններ Zweibrueder- ից: Սարքերը շատ ամուր են և ոչ շատ