সুচিপত্র:

আরডুইনো ইউটিউব রিমোট কন্ট্রোল ফর স্লিপিং (লিওবট ইলেকট্রনিক্স): 4 টি ধাপ
আরডুইনো ইউটিউব রিমোট কন্ট্রোল ফর স্লিপিং (লিওবট ইলেকট্রনিক্স): 4 টি ধাপ

ভিডিও: আরডুইনো ইউটিউব রিমোট কন্ট্রোল ফর স্লিপিং (লিওবট ইলেকট্রনিক্স): 4 টি ধাপ

ভিডিও: আরডুইনো ইউটিউব রিমোট কন্ট্রোল ফর স্লিপিং (লিওবট ইলেকট্রনিক্স): 4 টি ধাপ
ভিডিও: আরডুইনো ভার্চুয়াল প্রজেক্ট টিউটেরিয়াল (পার্ট - ৬) || Arduino Virtual Project 2024, জুলাই
Anonim
ঘুমানোর জন্য আরডুইনো ইউটিউব রিমোট কন্ট্রোল (লিওবট ইলেকট্রনিক্স)
ঘুমানোর জন্য আরডুইনো ইউটিউব রিমোট কন্ট্রোল (লিওবট ইলেকট্রনিক্স)

আরডুইনো ইউটিউব রিমোট

যদি আপনি ইউটিউব ব্যবহার করে আপনাকে ঘুমানোর সময় দেখার জন্য একটি সিনেমা বা সঙ্গীত প্রদান করেন তাহলে আপনি নিশ্চয়ই একটি নতুন সিনেমা শুরু হওয়ার সময় লোড বিজ্ঞাপন বা বিভিন্ন ভলিউম লেভেল দ্বারা জেগে উঠতেন। বলা বাহুল্য, এটি বেশ বিরক্তিকর হতে পারে।

সুতরাং, আমার সমাধান আমি আপনাকে এখানে প্রমাণ করেছি যে আপনি নিজের জন্য তৈরি করছেন একটি দূরত্বের সাথে ইউটিউবের সাথে যোগাযোগ করার জন্য একটি আরডুইনো-ভিত্তিক রিমোট কন্ট্রোল। আমার পিসির মূল সাউন্ড ভলিউম পরিবর্তন করতে, ইউটিউবে বিজ্ঞাপন এড়িয়ে যাওয়ার এবং ইউটিউবে ভিডিও এড়িয়ে যাওয়ার জন্য রিমোট প্রয়োজন।

এছাড়াও, একটি অডিও লেভেল সেন্সর অন্তর্ভুক্ত করা হয়েছে যাতে স্পিকারটি আসলে কতটা জোরে তা নির্ধারণ করতে পারে, যা বিজ্ঞাপনের মতো জোরে বাধা সনাক্ত করার পরে স্বয়ংক্রিয়ভাবে সাউন্ড লেভেল কমানোর জন্য ব্যবহার করা যেতে পারে।

অবশেষে, আমি সনাক্ত করা অডিও স্তরগুলি প্রদর্শনের জন্য পিসি অ্যাপে একটি চার্ট যুক্ত করেছি।

সমাধানটি আরও ভালভাবে পরিমার্জিত হতে পারে তবে আমার জন্য এটি কাজটি সম্পাদন করে।

ধাপ 1: উপাদান প্রয়োজন

এই সমস্ত উপাদান লিওবট ইলেকট্রনিক্স দ্বারা সরবরাহ করা হয় (https://leobot.net)

1) আরডুইনো ইউএনও আর 3

leobot.net/viewproduct.aspx?id=530

2) 4 চ্যানেল রিমোট (315MHZ) + রিসিভার মডিউল (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) মাইক্রোফোন ভয়েস এবং সাউন্ড ডিটেকশন সেন্সর মডিউল (KY-037)

leobot.net/viewproduct.aspx?id=217

সফটওয়্যার

1) ভিজ্যুয়াল স্টুডিও

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

পদক্ষেপ 2: হার্ডওয়্যার সেটআপ

1) 4-চ্যানেল রিসিভার মডিউলটি আরডুইনোতে সংযুক্ত করুন।

4-চ্যানেল রিসিভার পিন-> আরডুইনো ইউনো পিন

GND-> GND

5V-> 5V

D0-> ডিজিটাল 2

D1-> ডিজিটাল 3

D2-> ডিজিটাল 4

D3-> ডিজিটাল 5

2) মাইক্রোফোন KY-037 মডিউলটি আরডুইনোতে সংযুক্ত করুন

মাইক্রোফোন KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3V

A0-> এনালগ 3

ধাপ 3: Arduino কোড

ওভারভিউ

Arduino যে যুক্তি অনুসরণ করতে হবে তা হল নিম্নরূপ:

ক) রিসিভার কোন পিনের সংকেত দিচ্ছে কিনা তা পরীক্ষা করুন।

খ) কোন আইও পোর্টে সিগন্যাল প্রাপ্ত হয় তার উপর নির্ভর করে পিসিতে কোন কমান্ড পাঠানো হবে।

গ) একবার সব রিমোট-কন্ট্রোল অ্যাকশন সম্পন্ন হয়ে গেলে, মাইক্রোফোন দিয়ে অডিও লেভেল শনাক্ত করুন এবং পিসিতে পাঠান।

D) পিসিতে পাঠানো সমস্ত কমান্ডের প্রথমে একটি অক্ষর এবং তারপর একটি মান (যদি একটি মান প্রয়োজন হয়) এর একটি বিন্যাস থাকে।

E) আরডুইনো থেকে পিসিতে পাঁচটি কমান্ড পাঠানো হয়েছে

ক। "আপনি" - ভলিউম আপ

খ। "ডি" - ভলিউম কম

গ। "গুলি" - অ্যাড এড়িয়ে যান

ঘ। "V" - ভিডিও এড়িয়ে যান

ই "A" - মান অনুসারে অডিও লেভেল ধরা পড়ে

Arduino কোড:

এখানে Arduino কোড ডাউনলোড করুন:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

অকার্যকর সেটআপ() {

Serial.begin (9600);

পিনমোড (এ 3, ইনপুট);

পিনমোড (ইন 1, ইনপুট);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

অকার্যকর লুপ () {

যদি (digitalRead (in1))

{

Serial.println ("u");

বিলম্ব (100);

}

যদি (digitalRead (in2))

{

Serial.println ("d");

বিলম্ব (100);

}

যদি (digitalRead (in3))

{

Serial.println ("s");

বিলম্ব (100);

}

যদি (ডিজিটাল রিড (in4))

{

Serial.println ("v");

বিলম্ব (100);

}

int readVal = analogRead (A3);

Serial.println (স্ট্রিং ("a")+ স্ট্রিং (readVal));

বিলম্ব (50);

}

ধাপ 4: পিসি অ্যাপ কোড (C#. NET)

পিসি অ্যাপ কোড (C#. NET)
পিসি অ্যাপ কোড (C#. NET)

অ্যাপ্লিকেশনটি 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 ব্যবহার করে;

System. Threading ব্যবহার করে;

নেমস্পেস অডিও অ্যাডজাস্ট

{

পাবলিক আংশিক ক্লাস ফর্ম 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)]

পাবলিক স্ট্যাটিক এক্সটার্ন অকার্যকর মাউস_ইভেন্ট (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// মাউস কর্ম

ব্যক্তিগত কনস্ট int MOUSEEVENTF_LEFTDOWN = 0x02;

ব্যক্তিগত কনস্ট int MOUSEEVENTF_LEFTUP = 0x04;

ব্যক্তিগত const int MOUSEEVENTF_RIGHTDOWN = 0x08;

ব্যক্তিগত const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport ("user32.dll")]

স্ট্যাটিক বহিরাগত শূন্য keybd_event (বাইট bVk, বাইট bScan, uint dwFlags, int dwExtraInfo);

এলোমেলো aRand = নতুন এলোমেলো ();

সর্বজনীন 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;

ব্যক্তিগত অকার্যকর বোতাম 1_ ক্লিক করুন (বস্তু প্রেরক, ইভেন্ট আর্গস ই)

{

_serialPort = নতুন সিরিয়ালপোর্ট ();

_serialPort. DataReceived += নতুন SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // আপনার বোর্ড COM সেট করুন

_serialPort. BaudRate = 9600;

if (_serialPort. IsOpen) _serialPort. Close ();

অন্য

{

_serialPort. Open ();

}

// keybd_event ((বাইট) কী। ভলিউমডাউন, 0, 0, 0); // ভলিউম হ্রাস

}

void _serialPort_DataReceived (অবজেক্ট প্রেরক, SerialDataReceivedEventArgs e)

{

চেষ্টা করুন

{

স্ট্রিং fullval = _serialPort. ReadLine ();

স্ট্রিং com = fullval [0]. ToString ();

সুইচ (com)

{

কেস "a":

{

{

// অডিও স্তর

string val = fullval. Replace ("a", "");

int valInt = int. Parse (val);

AddData (valInt);

}

বিরতি;

}

কেস "ইউ":

{

// অডিও আপ

keybd_event ((বাইট) Keys. VolumeUp, 0, 0, 0); // ভলিউম হ্রাস

বিরতি;

}

কেস "ডি":

{

// অডিও ডাউন

keybd_event ((বাইট) Keys. VolumeDown, 0, 0, 0); // ভলিউম হ্রাস

বিরতি;

}

কেস "গুলি":

{

//বিজ্ঞাপন এড়িয়ে

MoveCursorSkipAd ();

থ্রেড ঘুম (10);

DoMouseClick ();

বিরতি;

}

কেস "ভি":

{

//বিজ্ঞাপন এড়িয়ে

MoveCursorSkipVideo ();

থ্রেড ঘুম (10);

DoMouseClick ();

বিরতি;

}

}

}

ধরা

{

}

// নতুন NotImplementedException নিক্ষেপ ();

}

ব্যক্তিগত অকার্যকর MoveCursorSkipAd ()

{

কার্সার পজিশন = নতুন পয়েন্ট (1140, 725);

Cursor. Position = নতুন পয়েন্ট (adX, adY);

}

ব্যক্তিগত অকার্যকর MoveCursorSkipVideo ()

{

কার্সার পজিশন = নতুন পয়েন্ট (1140, 725);

কার্সার পজিশন = নতুন পয়েন্ট (vidX, vidY);

}

পাবলিক অকার্যকর DoMouseClick ()

{

// কার্সারের বর্তমান অবস্থানের সাথে আমদানি করা ফাংশনটি কল করুন

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)

{

যদি (লেভেল> = ম্যাক্স লেভেল)

{

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); // ভলিউম হ্রাস

}

}

}

সেটচার্ট (স্তর);

currentPoint ++;

}

প্রতিনিধি অকার্যকর SetTextCallback (int val);

ব্যক্তিগত অকার্যকর SetChart (int val)

{

// InvokeRequired প্রয়োজনের থ্রেড আইডি তুলনা করে

// তৈরির থ্রেডের থ্রেড আইডিতে থ্রেড কল করা।

// যদি এই থ্রেডগুলি ভিন্ন হয়, তবে এটি সত্য।

যদি (this.chart1. InvokeRequired)

{

SetTextCallback d = নতুন SetTextCallback (SetChart);

এই আহ্বান (d, নতুন বস্তু {val});

}

অন্য

{

চার্ট 1. সিরিজ [0]। পয়েন্ট.এডক্সওয়াই (0, ভ্যাল)

যদি (currentPoint> = 10)

{

চার্ট 1. সিরিজ [0]।

}

}

}

ব্যক্তিগত অকার্যকর টেক্সটবক্স লেভেল_টেক্সটেঞ্জড (অবজেক্ট প্রেরক, ইভেন্টআর্গস ই)

{

চেষ্টা করুন

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

ধরা

{

textBoxLevel. Text = MaxLevel + "";

}

}

ব্যক্তিগত অকার্যকর বোতাম TestSkip_Click (বস্তু প্রেরক, EventArgs ই)

{

MoveCursorSkipAd ();

থ্রেড ঘুম (10);

DoMouseClick ();

}

ব্যক্তিগত অকার্যকর টেক্সটবক্সএক্সপস_টেক্সটেঞ্জড

{

চেষ্টা করুন

{

adX = int. Parse (textBoxXpos. Text);

}

ধরা

{

textBoxXpos. Text = adX + "";

}

}

ব্যক্তিগত অকার্যকর পাঠ্যবক্স Ypos_TextChanged (বস্তু প্রেরক, EventArgs ই)

{

চেষ্টা করুন

{

adY = int. Parse (textBoxYpos. Text);

}

ধরা

{

textBoxYpos. Text = adY + "";

}

}

ব্যক্তিগত অকার্যকর বোতামস্কিপভিডিও_ক্লিক (বস্তু প্রেরক, ইভেন্টআর্গস ই)

{

MoveCursorSkipVideo ();

থ্রেড ঘুম (10);

DoMouseClick ();

}

ব্যক্তিগত অকার্যকর টেক্সটবক্সএক্সপোসভিড_টেক্সটেঞ্জড

{

চেষ্টা করুন

{

vidX = int. Parse (textBoxXposVid. Text);

}

ধরা

{

textBoxXposVid. Text = vidX + "";

}

}

ব্যক্তিগত অকার্যকর পাঠ্যবক্স YposVid_TextChanged (বস্তু প্রেরক, EventArgs ই)

{

চেষ্টা করুন

{

vidY = int. Parse (textBoxYposVid. Text);

}

ধরা

{

textBoxYposVid. Text = vidY + "";

}

}

ব্যক্তিগত অকার্যকর checkBoxEnable_CheckedChanged (বস্তু প্রেরক, EventArgs ই)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

পাবলিক স্ট্রাকচার পয়েন্ট

{

পাবলিক int x;

পাবলিক int y;

}

}

প্রস্তাবিত: