Სარჩევი:
- ნაბიჯი 1: საჭირო კომპონენტები
- ნაბიჯი 2: აპარატურის დაყენება
- ნაბიჯი 3: Arduino კოდი
- ნაბიჯი 4: კომპიუტერის პროგრამის კოდი (C#. NET)
ვიდეო: Arduino Youtube დისტანციური მართვა ძილისთვის (Leobot Electronics): 4 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:17
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)
აპლიკაცია მოუსმენს 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;
საზოგადოებრივი ინტი;
}
}
გირჩევთ:
Arduino ბრაუზერის დაფუძნებული დისტანციური მართვა (linux): 9 ნაბიჯი (სურათებით)
Arduino ბრაუზერზე დაფუძნებული დისტანციური მართვა (linux): ჩვენ გვყავს ბავშვები. მე მიყვარს ისინი, მაგრამ ისინი მუდმივად მალავენ დისტანციური მართვის სატელიტს და ტელევიზიას, როდესაც ისინი ბავშვთა არხებს აყენებენ. მას შემდეგ რაც ეს ხდება რამდენიმე წლის განმავლობაში ყოველდღიურად, და მას შემდეგ რაც ჩემმა საყვარელმა მეუღლემ მომცა საშუალება მქონოდა
IR თერმომეტრი ძილისთვის: 5 ნაბიჯი
IR თერმომეტრი ძილისთვის: ამ ზარმაცი ძველმა გიკმა (L.O.G.) ცოტა ხნის წინ შეიძინა IR თერმული მოდული, MLX90614 AliExpress.com– დან. ეს არის იგივე ტიპის სენსორი, რომელიც გამოიყენება მესამე სურათზე ნაჩვენები შუბლისა და ყურის თერმომეტრებში. მათ უწოდებენ უკონტაქტო იმიტომ
LED RF დისტანციური მართვის დისტანციური მართვა "არაფრის"!: 5 ნაბიჯი
LED RF დისტანციური მართვის დისტანციური მართვა "არაფრის"!: ამ პროექტში მე გაჩვენებთ თუ როგორ უნდა გამოიყენოთ LED RF დისტანციური მართვის პულტი იმისათვის, რომ გააკონტროლოთ თითქმის ყველაფერი რაც გსურთ. ეს ნიშნავს, რომ ჩვენ უფრო ახლოს შევხედავთ RF დისტანციური გადაცემის პროცესს, წაიკითხავთ გაგზავნილ მონაცემებს Arduino µC– ით
დისტანციური Arduino დისტანციური მართვა: 5 ნაბიჯი
უსაფრთხო Arduino დისტანციური: ეს არის მაგალითი იმისა, თუ როგორ უნდა გააკეთოთ ულტრა უსაფრთხო უკაბელო (ავტოფარეხი) დისტანციური. ჩვეულებრივ დისტანციურ დისკებს აქვს მოძრავი კოდის ტიპის უსაფრთხოება, რომლის გვერდის ავლით ნებისმიერი მოწინავე ქურდი შეძლებს. ეს დისტანციური სისტემა ეყრდნობა 16 ბაიტიანი ღილაკის გამოყენებას, ასე რომ მისი გატეხვა იქნება
დისტანციური დისტანციური მართვა: 11 ნაბიჯი (სურათებით)
დისტანციური მართვა: მე მყავს ახალშობილი ბავშვი და ის არ ფიქრობს, რომ მან უნდა დაიძინოს მანამ, სანამ მე და ჩემმა ცოლმა მასაც ვუსურვოთ. ერთი რამ, რაც მას ბედნიერს ხდის თავის საწოლში არის მობილური, რომელიც მის თავზეა ჩამოკიდებული. ასე რომ, როდესაც ის გაიღვიძებს, თუ ჩვენ გვჭირდება კიდევ 25 წუთი ან მეტი