Სარჩევი:

Arduino Youtube დისტანციური მართვა ძილისთვის (Leobot Electronics): 4 ნაბიჯი
Arduino Youtube დისტანციური მართვა ძილისთვის (Leobot Electronics): 4 ნაბიჯი

ვიდეო: Arduino Youtube დისტანციური მართვა ძილისთვის (Leobot Electronics): 4 ნაბიჯი

ვიდეო: Arduino Youtube დისტანციური მართვა ძილისთვის (Leobot Electronics): 4 ნაბიჯი
ვიდეო: 35 საშინელი მოჩვენების ვიდეო: 2023 წლის მეგა კრებული [V1] 2024, ივლისი
Anonim
Arduino Youtube დისტანციური მართვა ძილისთვის (Leobot Electronics)
Arduino Youtube დისტანციური მართვა ძილისთვის (Leobot Electronics)

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 არხის დისტანციური მართვა (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-არხიანი მიმღების პინი-> Arduino Uno Pin

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 კოდი

მიმოხილვა

ლოგიკა, რომელსაც არდუინომ უნდა დაიცვას, არის შემდეგი:

ა) შეამოწმეთ მიმღები სიგნალს აძლევს რაიმე ქინძისთავებს.

ბ) იმისდა მიხედვით, თუ რომელი IO პორტიდან მიიღება სიგნალი, რა ბრძანება გაიგზავნება კომპიუტერზე.

გ) დისტანციური მართვის ყველა მოქმედების დასრულების შემდეგ, აღმოაჩინეთ აუდიოს დონე მიკროფონით და გაუგზავნეთ კომპიუტერს.

დ) კომპიუტერზე გაგზავნილ ყველა ბრძანებას აქვს ფორმატი, რომელსაც ჯერ აქვს ხასიათი, შემდეგ მნიშვნელობა (თუ მნიშვნელობა სჭირდება).

ე) Arduino– დან კომპიუტერზე გაგზავნილი ხუთი ბრძანებაა

ა "U" - მოცულობის გაზრდა

ბ "დ" - მოცულობის შემცირება

გ "S" - გამოტოვეთ დამატება

დ "V" - გამოტოვეთ ვიდეო

ე "A" - გამოვლენილია აუდიო დონე, რასაც მოჰყვება მნიშვნელობა

არდუინოს კოდი:

ჩამოტვირთეთ Arduino კოდი აქ:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

void setup () {

სერიული.დაწყება (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 ("s");

დაგვიანება (100);

}

თუ (digitalRead (in4))

{

Serial.println ("v");

დაგვიანება (100);

}

int readVal = analogRead (A3);

Serial.println (სიმებიანი ("a")+ String (readVal));

დაგვიანება (50);

}

ნაბიჯი 4: კომპიუტერის პროგრამის კოდი (C#. NET)

PC პროგრამის კოდი (C#. NET)
PC პროგრამის კოდი (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")]

საჯარო სტატიკური გარე ბოლი 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);

// თაგვის მოქმედებები

პირადი კონსტატი 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;

public int MaxLevel = 255;

სტატიკური SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

საჯარო ფორმა 1 ()

{

კომპონენტის ინიციალიზაცია ();

}

პირადი სიცარიელე Form1_Load (ობიექტის გამგზავნი, EventArgs e)

{

string names = System. IO. Ports. SerialPort. GetPortNames ();

comboBoxPort. Items. AddRange (სახელები);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

პირადი ბათილობის ღილაკი 1_ დაწკაპუნება (ობიექტის გამგზავნი, EventArgs e)

{

_serialPort = ახალი SerialPort ();

_serialPort. DataReceived += ახალი SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // დააყენეთ თქვენი დაფის COM

_serialPort. BaudRate = 9600;

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

სხვა

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // შემცირება მოცულობა

}

void _serialPort_DataReceived (ობიექტის გამგზავნი, SerialDataReceivedEventArgs e)

{

სცადე

{

string fullval = _serialPort. ReadLine ();

string com = fullval [0]. ToString ();

გადართვა (com)

{

შემთხვევა "ა":

{

{

// აუდიო დონე

string val = fullval. შეცვლა ("a", "");

int valInt = int. გაანალიზება (val);

AddData (valInt);

}

შესვენება;

}

საქმე "u":

{

// აუდიო

keybd_event ((ბაიტი) Keys. VolumeUp, 0, 0, 0); // შემცირება მოცულობა

შესვენება;

}

შემთხვევა "დ":

{

// აუდიო გამორთულია

keybd_event ((ბაიტი) Keys. VolumeDown, 0, 0, 0); // შემცირება მოცულობა

შესვენება;

}

საქმე "s":

{

// გამოტოვება დამატება

MoveCursorSkipAd ();

თემა ძილი (10);

DoMouseClick ();

შესვენება;

}

შემთხვევა "v":

{

// გამოტოვება დამატება

MoveCursorSkipVideo ();

თემა ძილი (10);

DoMouseClick ();

შესვენება;

}

}

}

დაჭერა

{

}

// ჩააგდე ახალი NotImplementedException ();

}

პირადი სიცარიელე MoveCursorSkipAd ()

{

კურსორი. პოზიცია = ახალი წერტილი (1140, 725);

კურსორი. პოზიცია = ახალი წერტილი (adX, adY);

}

პირადი სიცარიელე MoveCursorSkipVideo ()

{

კურსორი. პოზიცია = ახალი წერტილი (1140, 725);

კურსორი. პოზიცია = ახალი წერტილი (vidX, vidY);

}

public void DoMouseClick ()

{

// დარეკეთ იმპორტირებული ფუნქცია კურსორის ამჟამინდელი პოზიციით

uint X = (uint) კურსორი. პოზიცია. X;

uint Y = (uint) კურსორი. პოზიცია. Y;

მაუსის მოვლენა (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);

მაუსის მოვლენა (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 ++;

}

დელეგირება void SetTextCallback (int val);

პირადი void SetChart (int val)

{

// InvokeRequired required ადარებს ძაფის ID- ს

// ძაფის გამოძახება შემქმნელი ძაფის ძაფის ID- ზე.

// თუ ეს ძაფები განსხვავებულია, ის ბრუნდება ჭეშმარიტი.

თუ (ეს. დიაგრამა 1. InvokeRequired)

{

SetTextCallback d = ახალი SetTextCallback (SetChart);

this. Iveoke (დ, ახალი ობიექტი {val});

}

სხვა

{

დიაგრამა 1. სერიები [0]. პუნქტები. დამატება XY (0, val);

თუ (მიმდინარე პუნქტი> = 10)

{

დიაგრამა 1. სერიები [0]. პუნქტები. ამოღება (0);

}

}

}

პირადი სიცარიელე textBoxLevel_TextChanged (ობიექტის გამგზავნი, EventArgs e)

{

სცადე

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

დაჭერა

{

textBoxLevel. Text = MaxLevel + "";

}

}

პირადი ბათილობის ღილაკი TestSkip_Click (ობიექტის გამგზავნი, EventArgs e)

{

MoveCursorSkipAd ();

თემა ძილი (10);

DoMouseClick ();

}

პირადი ბათილი ტექსტი BoxXpos_TextChanged (ობიექტის გამგზავნი, EventArgs e)

{

სცადე

{

adX = int. Parse (textBoxXpos. Text);

}

დაჭერა

{

textBoxXpos. Text = adX + "";

}

}

პირადი სიცარიელე textBoxYpos_TextChanged (ობიექტის გამგზავნი, EventArgs e)

{

სცადე

{

adY = int. Parse (textBoxYpos. Text);

}

დაჭერა

{

textBoxYpos. Text = adY + "";

}

}

პირადი ბათილობის ღილაკი გამოტოვება ვიდეო_კლიკი (ობიექტის გამგზავნი, EventArgs e)

{

MoveCursorSkipVideo ();

თემა ძილი (10);

DoMouseClick ();

}

პირადი ბათილი ტექსტიBoxXposVid_TextChanged (ობიექტის გამგზავნი, EventArgs e)

{

სცადე

{

vidX = int. Parse (textBoxXposVid. Text);

}

დაჭერა

{

textBoxXposVid. Text = vidX + "";

}

}

პირადი სიცარიელე textBoxYposVid_TextChanged (ობიექტის გამგზავნი, EventArgs e)

{

სცადე

{

vidY = int. Parse (textBoxYposVid. Text);

}

დაჭერა

{

textBoxYposVid. Text = vidY + "";

}

}

პირადი ბათილობის შემოწმება BoxEnable_CheckedChanged (ობიექტის გამგზავნი, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

საჯარო სტრუქტურის წერტილი

{

საჯარო int x;

საზოგადოებრივი ინტი;

}

}

გირჩევთ: