विषयसूची:

स्लीपिंग के लिए Arduino Youtube रिमोट कंट्रोल (Leobot Electronics): 4 कदम
स्लीपिंग के लिए Arduino Youtube रिमोट कंट्रोल (Leobot Electronics): 4 कदम

वीडियो: स्लीपिंग के लिए Arduino Youtube रिमोट कंट्रोल (Leobot Electronics): 4 कदम

वीडियो: स्लीपिंग के लिए Arduino Youtube रिमोट कंट्रोल (Leobot Electronics): 4 कदम
वीडियो: 4 Channel RF Transmitter | How to make a Remote controller #jlcpcb 2024, जुलाई
Anonim
स्लीपिंग के लिए Arduino Youtube रिमोट कंट्रोल (Leobot Electronics)
स्लीपिंग के लिए Arduino Youtube रिमोट कंट्रोल (Leobot Electronics)

अरुडिनो यूट्यूब रिमोट

यदि आप सोते समय देखने के लिए आपको मूवी या संगीत प्रदान करने के लिए Youtube का उपयोग करते हैं, तो आप निश्चित रूप से एक लोड विज्ञापन या एक नई फिल्म शुरू होने पर अलग-अलग वॉल्यूम स्तरों से जाग गए होंगे। कहने की जरूरत नहीं है, यह काफी परेशान करने वाला हो सकता है।

इसलिए, मेरा समाधान मैं आपको यहां अपने लिए बनाने के लिए साबित करता हूं कि एक दूरी पर Youtube के साथ बातचीत करने के लिए एक Arduino- आधारित रिमोट कंट्रोल है। मेरे पीसी के मुख्य साउंड वॉल्यूम को बदलने, Youtube पर विज्ञापनों को छोड़ने और Youtube पर वीडियो को छोड़ने के लिए रिमोट की आवश्यकता होती है।

इसके अलावा, यह निर्धारित करने के लिए एक ऑडियो स्तर सेंसर शामिल है कि स्पीकर वास्तव में कितना जोर से है, जो बदले में विज्ञापन जैसे जोरदार बाधाओं का पता लगाने पर ध्वनि स्तर को स्वचालित रूप से कम करने के लिए उपयोग किया जा सकता है।

अंत में, मैंने पता लगाए गए ऑडियो स्तरों को प्रदर्शित करने के लिए पीसी ऐप पर एक चार्ट जोड़ा।

समाधान को बेहतर ढंग से परिष्कृत किया जा सकता है लेकिन मेरे लिए यह कार्य पूरा करता है।

चरण 1: आवश्यक घटक

इन सभी घटकों की आपूर्ति लियोबोट इलेक्ट्रॉनिक्स (https://leobot.net) द्वारा की जाती है।

१)अरुडिनो यूएनओ आर३

leobot.net/viewproduct.aspx?id=530

2) 4 चैनल रिमोट (315 मेगाहर्ट्ज) + रिसीवर मॉड्यूल (315 मेगाहर्ट्ज)

leobot.net/viewproduct.aspx?id=521

3)माइक्रोफोन वॉयस और साउंड डिटेक्शन सेंसर मॉड्यूल (KY-037)

leobot.net/viewproduct.aspx?id=217

सॉफ्टवेयर

१)विजुअल स्टूडियो

visualstudio.microsoft.com/

2) अरुडिनो आईडीई

www.arduino.cc/hi/main/software

चरण 2: हार्डवेयर सेटअप

1) 4-चैनल रिसीवर मॉड्यूल को Arduino से कनेक्ट करें।

4-चैनल रिसीवर पिन-> Arduino Uno Pin

जीएनडी->जीएनडी

5वी->5वी

डी0->डिजिटल 2

डी1->डिजिटल 3

D2->डिजिटल 4

डी3->डिजिटल 5

2) माइक्रोफ़ोन KY-037 मॉड्यूल को Arduino से कनेक्ट करें

माइक्रोफ़ोन KY-037 Pin->Arduino Uno Pin

जीएनडी->जीएनडी

+->3.3V

ए0->एनालॉग 3

चरण 3: Arduino कोड

अवलोकन

Arduino को जिस तर्क का पालन करने की आवश्यकता है वह इस प्रकार है:

ए) जांचें कि क्या रिसीवर किसी पिन का संकेत दे रहा है।

बी) जिस आईओ पोर्ट पर सिग्नल प्राप्त होता है, उसके आधार पर पीसी को कौन सा कमांड भेजा जाएगा।

सी) एक बार सभी रिमोट-कंट्रोल क्रियाओं के साथ, माइक्रोफ़ोन के साथ ऑडियो स्तर का पता लगाएं और इसे पीसी पर भेजें।

डी) पीसी को भेजे जाने वाले सभी कमांड में पहले एक कैरेक्टर और फिर एक वैल्यू (यदि एक वैल्यू की जरूरत होती है) का फॉर्मेट होता है।

E) Arduino से PC को पांच कमांड भेजी जाती हैं

ए। "यू" - वॉल्यूम ऊपर

बी। "डी" - वॉल्यूम डाउन

सी। "एस" - Add. छोड़ें

डी। "वी" - वीडियो छोड़ें

इ। "ए" - मान के बाद ऑडियो स्तर का पता लगाया गया

Arduino कोड:

यहां Arduino कोड डाउनलोड करें:https://leobot.net/audiousb.zip

int in1=2;

इंट इन२=३;

इंट 3 = 4;

इंट इन4=5;

व्यर्थ व्यवस्था() {

सीरियल.बेगिन (९६००);

पिनमोड (ए 3, इनपुट);

पिनमोड (in1, INPUT);

पिनमोड (in2, INPUT);

पिनमोड (in3, INPUT);

पिनमोड (इन 4, इनपुट);

}

शून्य लूप () {

अगर (डिजिटल रीड (इन 1))

{

सीरियल.प्रिंट्लन ("यू");

देरी (100);

}

अगर (डिजिटल रीड (इन 2))

{

सीरियल.प्रिंट्लन ("डी");

देरी (100);

}

अगर (डिजिटल रीड (इन 3))

{

सीरियल.प्रिंट्लन ("एस");

देरी (100);

}

अगर (डिजिटल रीड (इन 4))

{

सीरियल.प्रिंट्लन ("वी");

देरी (100);

}

इंट रीडवैल = एनालॉग रीड (ए 3);

Serial.println (स्ट्रिंग ("ए") + स्ट्रिंग (रीडवैल));

देरी (50);

}

चरण 4: पीसी ऐप कोड (सी#.नेट)

पीसी ऐप कोड (सी#.नेट)
पीसी ऐप कोड (सी#.नेट)

ऐप COM (USB) पोर्ट पर सुनेगा और जो कमांड प्राप्त होता है उसके आधार पर प्रतिक्रिया करेगा। पीसी पर ध्वनि को ऊपर और नीचे चालू करने का सबसे सरल तरीका है कि विंडोज ओएस से सीधे बात करने के लिए इंटरॉप सेवाओं का उपयोग किया जाए। हम माउस को स्क्रीन पर एक विशिष्ट स्थिति में ले जाने और क्लिक करने के लिए इंटरॉप सेवाओं का भी उपयोग करते हैं। विभिन्न स्क्रीन और आकार देखने की अनुमति देने के लिए, हम उपयोगकर्ता को स्किप ऐड और स्किप वीडियो बटन की स्थिति निर्दिष्ट करने की अनुमति देते हैं।

हमें प्राप्त होने वाले किसी भी ऑडियो कमांड को प्रदर्शित करने के लिए हम एक मानक.net चार्ट का उपयोग करते हैं।

विंडोज कोड:

यहां पूरी परियोजना डाउनलोड करें:

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 का उपयोग करना;

सिस्टम का उपयोग करना। थ्रेडिंग;

नेमस्पेस ऑडियो एडजस्ट

{

सार्वजनिक आंशिक वर्ग फॉर्म1: फॉर्म

{

[DllImport("User32. Dll")]

सार्वजनिक स्थैतिक बाहरी लंबा SetCursorPos (int x, int y);

[DllImport("User32. Dll")]

सार्वजनिक स्थैतिक बाहरी बूल 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 = नया रैंडम ();

सार्वजनिक इंट लास्टलेवल = 0;

सार्वजनिक इंट मैक्सलेवल = २५५;

स्थिर सीरियलपोर्ट _serialPort;

इंट एडएक्स = १२८१;

इंट एडवाई = ७०६;

इंट vidX = २५०;

इंट vidY = ७८०;

बूल सक्षमऑडियो चेंज = झूठा;

सार्वजनिक प्रपत्र1 ()

{

प्रारंभिक कॉम्पोनेंट ();

}

निजी शून्य फॉर्म1_लोड (ऑब्जेक्ट प्रेषक, EventArgs e)

{

स्ट्रिंग नाम = System. IO. Ports. SerialPort. GetPortNames ();

comboBoxPort. Items. AddRange (नाम);

कॉम्बोबॉक्सपोर्ट। चयनित इंडेक्स = 0;

}

इंट करंटपॉइंट = 0;

निजी शून्य बटन 1_क्लिक (ऑब्जेक्ट प्रेषक, EventArgs e)

{

_serialPort = नया सीरियलपोर्ट ();

_serialPort. DataReceived += नया SerialDataReceivedEventHandler(_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString ();//अपना बोर्ड सेट करें COM

_serialPort. BaudRate = ९६००;

अगर (_serialPort. IsOpen) _serialPort. Close ();

अन्यथा

{

_serialPort. Open ();

}

// keybd_event ((बाइट) कीज़। वॉल्यूमडाउन, 0, 0, 0); // वॉल्यूम कम करें

}

शून्य _serialPort_DataReceived (ऑब्जेक्ट प्रेषक, SerialDataReceivedEventArgs e)

{

प्रयत्न

{

स्ट्रिंग फुलवल = _serialPort. ReadLine ();

स्ट्रिंग कॉम = फुलवल [0]। ToString ();

स्विच (कॉम)

{

मामला "ए":

{

{

// ऑडियो स्तर

स्ट्रिंग वैल = फुलवल। रिप्लेस ("ए", "");

int valInt = int. Parse(val);

एडडाटा (वैलइंट);

}

टूटना;

}

मामला "यू":

{

// ऑडियो अप

keybd_event ((बाइट) कुंजियाँ। वॉल्यूमअप, 0, 0, 0); // वॉल्यूम कम करें

टूटना;

}

मामला "डी":

{

// ऑडियो डाउन

keybd_event((बाइट)कुंजी।वॉल्यूमडाउन, 0, 0, 0); // वॉल्यूम कम करें

टूटना;

}

मामला "एस":

{

//विज्ञापन को छोड़ें

MoveCursorSkipAd ();

धागा। सो (10);

डूमाउसक्लिक ();

टूटना;

}

मामला "वी":

{

//विज्ञापन को छोड़ें

मूव कर्सरस्किपवीडियो ();

धागा। सो (10);

डूमाउसक्लिक ();

टूटना;

}

}

}

पकड़

{

}

// नया NotImplementedException फेंकें ();

}

निजी शून्य MoveCursorSkipAd ()

{

कर्सर। स्थिति = नया बिंदु (1140, 725);

Cursor. Position = new Point(adX, adY);

}

निजी शून्य MoveCursorSkipVideo ()

{

कर्सर। स्थिति = नया बिंदु (1140, 725);

कर्सर। स्थिति = नया बिंदु (vidX, vidY);

}

सार्वजनिक शून्य DoMouseClick ()

{

// आयातित फ़ंक्शन को कर्सर की वर्तमान स्थिति के साथ कॉल करें

यूइंट एक्स = (यूइंट) कर्सर। स्थिति। एक्स;

यूंट वाई = (यूइंट) कर्सर। स्थिति। वाई;

माउस_इवेंट (MOUSEEVENTF_LEFTDOWN, एक्स, वाई, 0, 0);

माउस_इवेंट (MOUSEEVENTF_LEFTUP, एक्स, वाई, 0, 0);

}

शून्य AddData (इंट स्तर)

{

अगर (ऑडियो चेंज सक्षम करें)

{

अगर (स्तर> = अधिकतम स्तर)

{

keybd_event((बाइट)कुंजी।वॉल्यूमडाउन, 0, 0, 0); // वॉल्यूम कम करें

keybd_event((बाइट)कुंजी।वॉल्यूमडाउन, 0, 0, 0); // वॉल्यूम कम करें

keybd_event((बाइट)कुंजी।वॉल्यूमडाउन, 0, 0, 0); // वॉल्यूम कम करें

}

अन्यथा

{

अगर (स्तर <मैक्सलेवल - 0)

{

keybd_event ((बाइट) कुंजियाँ। वॉल्यूमअप, 0, 0, 0); // वॉल्यूम कम करें

}

}

}

सेटचार्ट (स्तर);

करंटपॉइंट ++;

}

प्रतिनिधि शून्य SetTextCallback (int वैल);

निजी शून्य सेट चार्ट (इंट वैल)

{

// InvokeRequired आवश्यक की थ्रेड आईडी की तुलना करता है

// थ्रेड को बनाने वाले थ्रेड की थ्रेड आईडी पर कॉल करें।

// यदि ये धागे अलग हैं, तो यह सच हो जाता है।

अगर (this.chart1. InvokeRequired)

{

सेटटेक्स्टकॉलबैक डी = नया सेटटेक्स्टकॉलबैक (सेटचार्ट);

this. Invoke (डी, नई वस्तु {वैल});

}

अन्यथा

{

चार्ट १.श्रृंखला [०]। अंक। AddXY(०, वैल);

अगर (वर्तमान बिंदु> = 10)

{

चार्ट १.श्रृंखला [०]। अंक। हटाएँ (०);

}

}

}

निजी शून्य टेक्स्टबॉक्सलेवल_टेक्स्ट चेंज (ऑब्जेक्ट प्रेषक, EventArgs e)

{

प्रयत्न

{

मैक्सलेवल = int. Parse(textBoxLevel. Text);

}

पकड़

{

टेक्स्टबॉक्स लेवल। टेक्स्ट = मैक्सलेवल + "";

}

}

निजी शून्य बटनTestSkip_Click (ऑब्जेक्ट प्रेषक, EventArgs e)

{

MoveCursorSkipAd ();

धागा। सो (10);

डूमाउसक्लिक ();

}

निजी शून्य textBoxXpos_TextChanged (वस्तु प्रेषक, EventArgs e)

{

प्रयत्न

{

adX = int. Parse(textBoxXpos. Text);

}

पकड़

{

textBoxXpos. Text = adX + "";

}

}

निजी शून्य टेक्स्टबॉक्सYpos_TextChanged (ऑब्जेक्ट प्रेषक, EventArgs e)

{

प्रयत्न

{

adY = int. Parse(textBoxYpos. Text);

}

पकड़

{

textBoxYpos. Text = adY + "";

}

}

निजी शून्य बटनSkipVideo_Click(ऑब्जेक्ट प्रेषक, EventArgs e)

{

मूव कर्सरस्किपवीडियो ();

धागा। सो (10);

डूमाउसक्लिक ();

}

निजी शून्य टेक्स्टबॉक्सXposVid_TextChanged (ऑब्जेक्ट प्रेषक, EventArgs e)

{

प्रयत्न

{

vidX = int. Parse (textBoxXposVid. Text);

}

पकड़

{

textBoxXposVid. Text = vidX + "";

}

}

निजी शून्य टेक्स्टबॉक्सYposVid_TextChanged (ऑब्जेक्ट प्रेषक, EventArgs e)

{

प्रयत्न

{

vidY = int. Parse(textBoxYposVid. Text);

}

पकड़

{

textBoxYposVid. Text = vidY + "";

}

}

निजी शून्य checkBoxEnable_CheckedChanged (ऑब्जेक्ट प्रेषक, EventArgs e)

{

enableAudioChange = checkBoxEnable.checked;

}

}

[स्ट्रक्चरलाउट (लेआउटकिंड। अनुक्रमिक)]

सार्वजनिक संरचना बिंदु

{

सार्वजनिक इंट एक्स;

सार्वजनिक इंट वाई;

}

}

सिफारिश की: