Mundarija:

Arduino Youtube uyqu uchun masofadan boshqarish pulti (Leobot Electronics): 4 qadam
Arduino Youtube uyqu uchun masofadan boshqarish pulti (Leobot Electronics): 4 qadam

Video: Arduino Youtube uyqu uchun masofadan boshqarish pulti (Leobot Electronics): 4 qadam

Video: Arduino Youtube uyqu uchun masofadan boshqarish pulti (Leobot Electronics): 4 qadam
Video: Романтика после 9 лет брака 😂❤️ #shorts 2024, Noyabr
Anonim
Arduino Youtube uyqu uchun masofadan boshqarish pulti (Leobot Electronics)
Arduino Youtube uyqu uchun masofadan boshqarish pulti (Leobot Electronics)

Arduino Youtube masofadan boshqarish pulti

Agar siz Youtube -dan uyqu paytida tomosha qilish uchun sizga kino yoki musiqa taqdim etish uchun foydalansangiz, yangi film boshlanganda yuklanish reklamasi yoki turli ovoz balandligi bilan uyg'ongan bo'lar edingiz. Aytishga hojat yo'q, bu juda asabiylashishi mumkin.

Shunday qilib, men sizga o'zim uchun bu erda isbotlaydigan echim-bu masofadan turib Youtube bilan ishlash uchun Arduino-ga asoslangan masofadan boshqarish pulti. Masofadan boshqarish pulti kompyuterning asosiy ovoz balandligini o'zgartirish, Youtube -dagi reklamalarni o'tkazib yuborish va Youtube -dagi videolarni o'tkazib yuborish uchun talab qilinadi.

Bundan tashqari, karnay qanchalik baland ovozda ekanligini aniqlash uchun ovoz balandligi sensori kiritilgan, bu o'z navbatida reklama kabi baland ovozli uzilishlarni aniqlashda ovoz darajasini avtomatik ravishda pasaytirish uchun ishlatilishi mumkin.

Nihoyat, men kompyuter ilovasida aniqlangan ovoz darajasini ko'rsatish uchun jadval qo'shdim.

Yechimni yaxshiroq takomillashtirish mumkin, lekin men uchun bu vazifani bajaradi.

1 -qadam: kerakli komponentlar

Bu komponentlarning barchasi Leobot Electronics tomonidan taqdim etilgan (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANAL DIMOTI (315 MGts) + QABUL QILISh MODULI (315 MGts)

leobot.net/viewproduct.aspx?id=521

3) MIKROFON OVOZI & Ovozni aniqlash sensori moduli (KY-037)

leobot.net/viewproduct.aspx?id=217

Dasturiy ta'minot

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

2 -qadam: Uskuna sozlamalari

1) 4-kanalli qabul qilish modulini Arduino-ga ulang.

4 kanalli qabul qilgich-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Raqamli 2

D1-> Raqamli 3

D2-> Raqamli 4

D3-> Raqamli 5

2) KY-037 mikrofon modulini Arduino-ga ulang

Mikrofon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3V

A0-> Analog 3

3 -qadam: Arduino kodi

Sharh

Arduino bajarishi kerak bo'lgan mantiq quyidagicha:

A) Qabul qiluvchining biron bir pin borligini tekshiring.

B) Qaysi IO portiga qarab, signal kompyuterga qanday buyruq yuboriladi.

C) Masofadan boshqarish pultidagi barcha harakatlar bajarilgandan so'ng, mikrofon yordamida ovoz darajasini aniqlang va uni kompyuterga yuboring.

D) Kompyuterga yuboriladigan barcha buyruqlar formatga ega bo'lib, birinchi navbatda, keyin qiymatga ega bo'ladi (agar qiymat kerak bo'lsa).

E) Arduino -dan kompyuterga yuboriladigan beshta buyruq mavjud

a. "U" - ovoz balandligi

b. "D" - ovoz balandligini pasaytirish

v. "S" - Qo'shishni o'tkazib yuborish

d. "V" - Videoni o'tkazib yuborish

e. "A" - Ovoz darajasi aniqlandi, keyin qiymat

Arduino kodi:

Arduino kodini bu erdan yuklab oling:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

bo'sh o'rnatish () {

Serial.begin (9600);

pinMode (A3, INPUT);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMod (in4, INPUT);

}

void loop () {

agar (digitalRead (in1))

{

Serial.println ("u");

kechikish (100);

}

agar (digitalRead (in2))

{

Serial.println ("d");

kechikish (100);

}

agar (digitalRead (in3))

{

Serial.println ("s");

kechikish (100);

}

agar (digitalRead (in4))

{

Serial.println ("v");

kechikish (100);

}

int readVal = analogRead (A3);

Serial.println (String ("a")+ String (readVal));

kechikish (50);

}

4 -qadam: Kompyuter dastur kodi (C#. NET)

Kompyuter dastur kodi (C#. NET)
Kompyuter dastur kodi (C#. NET)

Ilova COM (USB) portini tinglaydi va qanday buyruq qabul qilinganiga qarab javob beradi. Kompyuterda ovozni yuqoriga va pastga aylantirishning eng oddiy usuli - Windows OS bilan to'g'ridan -to'g'ri gaplashish uchun Interrop xizmatlaridan foydalanish. Shuningdek, biz sichqonchani ekrandagi ma'lum bir joyga ko'chirish va bosish uchun Interrop xizmatlaridan foydalanamiz. Turli xil ekranlar va ko'rish o'lchamlariga ruxsat berish uchun biz foydalanuvchiga video qo'shish va o'tkazib yuborish tugmalarining o'rnini belgilashga ruxsat beramiz.

Biz olgan har qanday audio buyruqlarni ko'rsatish uchun standart.net jadvalidan foydalanamiz.

Windows kodi:

Loyihaning to'liq versiyasini bu erda yuklab oling:

leobot.net/audioadjust.zip

tizimdan foydalanish;

System. Collections. Generic -dan foydalanish;

System. ComponentModel -dan foydalanish;

System. Data -dan foydalanish;

System. Drawing -dan foydalanish;

System. Linq -dan foydalanish;

System. Text -dan foydalanish;

System. Windows. Forms -dan foydalanish;

System. Runtime. InteropServices -dan foydalanish;

System. IO. Ports -dan foydalanish;

System. Threading -dan foydalanish;

nomlar maydoni AudioAdjust

{

ochiq qismli sinf Form1: Shakl

{

[DllImport ("User32. Dll")]

public static extern long SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

public static extern bool ClientToScreen (IntPtr hWnd, ref POINT nuqtasi);

[DllImport ("user32.dll", CharSet = CharSet. Auto, CallingConvention = CallingConvention. StdCall)]

public static extern void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Sichqoncha harakatlari

private const int MOUSEEVENTF_LEFTDOWN = 0x02;

private const int MOUSEEVENTF_LEFTUP = 0x04;

private const int MOUSEEVENTF_RIGHTDOWN = 0x08;

private const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport ("user32.dll")]

statik extern void keybd_event (bayt bVk, bayt bScan, uint dwFlags, int dwExtraInfo);

Tasodifiy aRand = yangi tasodifiy ();

public int LastLevel = 0;

ommaviy int MaxLevel = 255;

statik SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

ommaviy shakl1 ()

{

InitializeComponent ();

}

Maxsus bo'shliq Form1_Load (ob'ekt yuboruvchi, EventArgs e)

{

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

comboBoxPort. Items. AddRange (ismlar);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private void button1_Click (ob'ekt yuboruvchi, EventArgs e)

{

_serialPort = yangi SerialPort ();

_serialPort. DataReceived += yangi SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // COM kartasini o'rnatish

_serialPort. BaudRate = 9600;

agar (_serialPort. IsOpen) _serialPort. Close ();

boshqa

{

_serialPort. Open ();

}

// keybd_event ((bayt) Keys. VolumeDown, 0, 0, 0); // ovoz balandligini pasaytirish

}

vser _serialPort_DataReceived (ob'ektni yuboruvchi, SerialDataReceivedEventArgs e)

{

harakat qilib ko'ring

{

string fullval = _serialPort. ReadLine ();

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

almashtirish (com)

{

"a" holati:

{

{

// audio darajasi

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

int valInt = int. Parse (val);

AddData (valInt);

}

tanaffus;

}

"U" holati:

{

// ovoz baland

keybd_event ((bayt) Keys. VolumeUp, 0, 0, 0); // ovoz balandligini pasaytirish

tanaffus;

}

"d" holati:

{

// audio pastga

keybd_event ((bayt) Keys. VolumeDown, 0, 0, 0); // ovoz balandligini pasaytirish

tanaffus;

}

holat "s":

{

// skipAd

MoveCursorSkipAd ();

Uyqu (10);

DoMouseClick ();

tanaffus;

}

"v" holati:

{

// skipAd

MoveCursorSkipVideo ();

Uyqu (10);

DoMouseClick ();

tanaffus;

}

}

}

tutmoq

{

}

// yangi NotImplementedException () tashlash;

}

shaxsiy bo'sh joy MoveCursorSkipAd ()

{

Kursor. Pozitsiya = yangi nuqta (1140, 725);

Kursor. Pozitsiya = yangi nuqta (adX, adY);

}

shaxsiy bo'sh joy MoveCursorSkipVideo ()

{

Kursor. Pozitsiya = yangi nuqta (1140, 725);

Kursor. Pozitsiya = yangi nuqta (vidX, vidY);

}

umumiy bo'shliq DoMouseClick ()

{

// Import qilingan funktsiyani kursorning hozirgi holati bilan chaqiring

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);

}

void AddData (int darajasi)

{

agar (enableAudioChange)

{

agar (daraja> = Maks daraja)

{

keybd_event ((bayt) Keys. VolumeDown, 0, 0, 0); // ovoz balandligini pasaytirish

keybd_event ((bayt) Keys. VolumeDown, 0, 0, 0); // ovoz balandligini pasaytirish

keybd_event ((bayt) Keys. VolumeDown, 0, 0, 0); // ovoz balandligini pasaytirish

}

boshqa

{

agar (<MaxLevel darajasi - 0)

{

keybd_event ((bayt) Keys. VolumeUp, 0, 0, 0); // ovoz balandligini pasaytirish

}

}

}

SetChart (daraja);

currentPoint ++;

}

vakolatsiz SetTextCallback (int val);

shaxsiy bo'shliq SetChart (int val)

{

// InvokeRequired talab qilinadi

// yaratuvchi ipning ip identifikatoriga mavzu.

// Agar bu mavzular boshqacha bo'lsa, u to'g'ri qaytadi.

agar (this.chart1. InvokeRequired)

{

SetTextCallback d = yangi SetTextCallback (SetChart);

this. Invoke (d, yangi ob'ekt {val});

}

boshqa

{

chart1. Series [0]. Points. AddXY (0, val);

agar (currentPoint> = 10)

{

chart1. Series [0]. Points. RemoveAt (0);

}

}

}

maxfiy bo'sh matnBoxLevel_TextChanged (ob'ekt yuboruvchi, EventArgs e)

{

harakat qilib ko'ring

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

tutmoq

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (ob'ekt yuboruvchi, EventArgs e)

{

MoveCursorSkipAd ();

Uyqu (10);

DoMouseClick ();

}

shaxsiy bo'sh matnBoxXpos_TextChanged (ob'ekt yuboruvchi, EventArgs e)

{

harakat qilib ko'ring

{

adX = int. Parse (textBoxXpos. Text);

}

tutmoq

{

textBoxXpos. Text = adX + "";

}

}

shaxsiy bo'sh matnBoxYpos_TextChanged (ob'ekt yuboruvchi, EventArgs e)

{

harakat qilib ko'ring

{

adY = int. Parse (textBoxYpos. Text);

}

tutmoq

{

textBoxYpos. Text = adY + "";

}

}

Maxsus bo'sh tugma SkipVideo_Click (ob'ekt yuboruvchi, EventArgs e)

{

MoveCursorSkipVideo ();

Uyqu (10);

DoMouseClick ();

}

maxfiy bo'sh matnBoxXposVid_TextChanged (ob'ekt yuboruvchi, EventArgs e)

{

harakat qilib ko'ring

{

vidX = int. Parse (textBoxXposVid. Text);

}

tutmoq

{

textBoxXposVid. Text = vidX + "";

}

}

shaxsiy bo'sh matnBoxYposVid_TextChanged (ob'ekt yuboruvchi, EventArgs e)

{

harakat qilib ko'ring

{

vidY = int. Parse (textBoxYposVid. Text);

}

tutmoq

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (ob'ekt yuboruvchi, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

ommaviy tuzilish POINT

{

ommaviy int x;

ommaviy int y;

}

}

Tavsiya: