Mundarija:
- 1 -qadam: kerakli komponentlar
- 2 -qadam: Uskuna sozlamalari
- 3 -qadam: Arduino kodi
- 4 -qadam: Kompyuter dastur kodi (C#.NET)
Video: Arduino Youtube uyqu uchun masofadan boshqarish pulti (Leobot Electronics): 4 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:25
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)
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:
LoRa asosidagi masofadan boshqarish pulti - Katta masofadan asboblarni boshqarish: 8 qadam
LoRa asosidagi masofadan boshqarish pulti | Katta masofadan asboblarni boshqarish: Hey, nima bo'ldi, bolalar! Bu loyihada biz LEDlar, motorlar kabi turli xil asboblarni boshqarish uchun ishlatilishi mumkin bo'lgan masofadan boshqarish pultini yaratmoqchimiz yoki agar biz kundalik hayotimiz haqida gapiradigan bo'lsak, biz o'z uy dasturchimizni boshqaramiz.
Arduino va Ps2 masofadan boshqarish pulti yordamida 4dof yuqori quvvatli katta o'lchamli robot qo'lini qanday boshqarish mumkin?: 4 qadam
Arduino va Ps2 masofadan boshqarish pulti bilan 4dof yuqori quvvatli katta o'lchamli robot qo'lini qanday boshqarish mumkin?: Bu to'plamda yuqori quvvatli mg996 dvigateli ishlatiladi, u yuqori oqimga muhtoj, bizda ko'p quvvat manbai sinovi bor. Faqat 5v 6a adapter ishlaydi. Va arduino taxtasi 6dof robot qo'li ustida ham ishlaydi.end: yozing SINONING do'konini DIY o'yinchoq uchun sotib oling
IRduino: Arduino masofadan boshqarish pulti - yo'qolgan masofadan boshqarish pultiga taqlid: 6 qadam
IRduino: Arduino masofadan boshqarish pulti - Yo'qotilgan masofadan boshqarish pultiga taqlid qiling: Agar siz televizor yoki DVD pleer uchun masofadan boshqarish pultini yo'qotib qo'ysangiz, qurilmaning o'zi tugmachalarini bosib o'tish, topish va ulardan foydalanish qanchalik achinarli ekanligini bilasiz. Ba'zida bu tugmalar masofadan boshqarish pulti bilan bir xil funktsiyalarni taklif qilmaydi. Qabul qilish
Oddiy masofadan boshqarish pulti to'rt kanalli RC o'yinchoqli masofadan boshqarish pultiga aylantirildi: 4 qadam
Oddiy masofadan boshqarish pulti to'rt kanalli RC o'yinchoqli masofadan boshqarish pultiga aylantirildi: 如何 通用 遥控 器 套件 的 的.方法 非常 简单。 只需
Kompyuter Youtube va Netflix uchun masofadan boshqarish pulti: 9 qadam (rasmlar bilan)
Kompyuter Youtube va Netflix uchun masofadan boshqarish pulti: Menda ish stoli kompyuter o'lchagichi yotog'imdan uzoqda, shuning uchun tabiiyki, men YouTube va filmlarni yotog'imdan turib tomosha qilishni yaxshi ko'raman. Har safar yotganda, men ovoz balandligini sozlashim, ba'zi sabablarga ko'ra videoni to'xtatib qo'yishim yoki videoni butunlay o'tkazib yuborishim kerak