İçindekiler:

Uyumak için Arduino Youtube Uzaktan Kumandası (Leobot Electronics): 4 Adım
Uyumak için Arduino Youtube Uzaktan Kumandası (Leobot Electronics): 4 Adım

Video: Uyumak için Arduino Youtube Uzaktan Kumandası (Leobot Electronics): 4 Adım

Video: Uyumak için Arduino Youtube Uzaktan Kumandası (Leobot Electronics): 4 Adım
Video: 15 yaşında kulak kıllarını jiletle aldıktan sonra kulakların durumu 😳😨 2024, Kasım
Anonim
Uyumak için Arduino Youtube Uzaktan Kumandası (Leobot Electronics)
Uyumak için Arduino Youtube Uzaktan Kumandası (Leobot Electronics)

Arduino Youtube Uzaktan Kumandası

Youtube'u size uyurken izleyeceğiniz bir film veya müzik sağlamak için kullanırsanız, yeni bir film başladığında kesinlikle bir reklam filmi veya farklı ses seviyeleri ile uyanırdınız. Söylemeye gerek yok, bu oldukça rahatsız edici olabilir.

Bu yüzden, burada kendiniz için inşa etmek için size kanıtladığım çözümüm, uzaktan Youtube ile etkileşime geçmek için Arduino tabanlı bir uzaktan kumandadır. Bilgisayarımın ana ses seviyesini değiştirmek, Youtube'daki reklamları atlamak ve Youtube'daki videoları atlamak için uzaktan kumanda gerekiyor.

Ayrıca, hoparlörün gerçekte ne kadar yüksek olduğunu belirlemek için bir ses seviyesi sensörü de dahildir, bu da bir reklam gibi yüksek sesli kesintileri tespit ettikten sonra ses seviyesini otomatik olarak düşürmek için kullanılabilir.

Son olarak, algılanan ses seviyelerini görüntülemek için PC uygulamasına bir grafik ekledim.

Çözüm daha iyi rafine edilebilir ama benim için görevi yerine getiriyor.

Adım 1: Gerekli Bileşenler

Tüm bu bileşenler Leobot Electronics tarafından sağlanmaktadır (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANAL UZAKTAN (315MHZ) + ALICI MODÜLÜ (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MİKROFON SES & SES ALGILAMA SENSÖR MODÜLÜ (KY-037)

leobot.net/viewproduct.aspx?id=217

Yazılım

1) Görsel Stüdyo

visualstudio.microsoft.com/

2) Arduino IDE'si

www.arduino.cc/en/main/software

Adım 2: Donanım Kurulumu

1) 4 Kanallı alıcı modülünü Arduino'ya bağlayın.

4-Kanal Alıcı Pimi->Arduino Uno Pimi

GND->GND

5V->5V

D0->Dijital 2

D1->Dijital 3

D2->Dijital 4

D3->Dijital 5

2) Mikrofon KY-037 modülünü Arduino'ya bağlayın

Mikrofon KY-037 Pin->Arduino Uno Pin

GND->GND

+->3.3V

A0->Analog 3

Adım 3: Arduino Kodu

genel bakış

Arduino'nun izlemesi gereken mantık aşağıdaki gibidir:

A) Alıcının herhangi bir pin sinyali verip vermediğini kontrol edin.

B) Sinyalin hangi IO portundan alındığına bağlı olarak, bilgisayara hangi komutun gönderileceği.

C) Tüm uzaktan kumanda işlemleri bittiğinde, mikrofon ile ses seviyesini tespit edin ve PC'ye gönderin.

D) PC'ye gönderilen tüm komutlar önce karakter sonra değer (eğer bir değer gerekiyorsa) şeklindedir.

E) Arduino'dan PC'ye gönderilen beş komut var

a. "u" - Sesi Aç

B. “d” - Sesi Kısma

C. “s” - Eklemeyi Atla

NS. “v” - Videoyu Atla

e. “a” - Ses Düzeyi algılandı ve ardından değer

Arduino Kodu:

Arduino Kodunu buradan indirin:

int in1=2;

int in2=3;

int in3=4;

int in4=5;

geçersiz kurulum() {

Seri.başla(9600);

pinMode(A3, GİRİŞ);

pinMode(in1, INPUT);

pinMode(in2, INPUT);

pinMode(in3, INPUT);

pinMode(in4, INPUT);

}

boşluk döngüsü () {

if(dijitalOkuma(in1))

{

Seri.println("u");

gecikme(100);

}

if(dijitalOkuma(in2))

{

Seri.println("d");

gecikme(100);

}

if(dijitalOkuma(in3))

{

Serial.println("s");

gecikme(100);

}

if(dijitalOkuma(in4))

{

Serial.println("v");

gecikme(100);

}

int readVal= analogRead(A3);

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

gecikme(50);

}

4. Adım: PC Uygulama Kodu (C#. NET)

PC Uygulama Kodu (C#. NET)
PC Uygulama Kodu (C#. NET)

Uygulama, COM (USB) bağlantı noktasını dinler ve hangi komutun alındığına bağlı olarak tepki verir. Bilgisayarda sesi açıp kapatmanın en basit yolu, Windows işletim sistemiyle doğrudan konuşmak için Interrop hizmetlerini kullanmaktır. Fareyi ekranda belirli bir konuma hareket ettirmek ve tıklamak için Interrop hizmetlerini de kullanıyoruz. Farklı ekranlara ve görünüm boyutlarına izin vermek için, kullanıcının video eklemeyi atla ve videoyu atla düğmelerinin konumunu belirlemesine izin veriyoruz.

Aldığımız tüm sesli komutları görüntülemek için standart bir.net grafiği kullanıyoruz.

Windows Kodu:

Tam projeyi buradan indirin:

leobot.net/audioadjust.zip

Sistemi kullanarak;

System. Collections. Generic kullanarak;

System. ComponentModel kullanarak;

System. Data kullanarak;

System. Drawing'i kullanarak;

System. Linq kullanarak;

System. Text'i kullanarak;

System. Windows. Forms'u kullanarak;

System. Runtime. InteropServices'i kullanarak;

System. IO. Port'ları kullanarak;

System. Threading kullanarak;

ad alanı AudioAdjust

{

genel kısmi sınıf Form1: Form

{

[DllImport("User32. Dll")]

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

[DllImport("User32. Dll")]

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

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

//Fare eylemleri

özel const int MOUSEEVENTF_LEFTDOWN = 0x02;

özel const int MOUSEEVENTF_LEFTUP = 0x04;

özel const int MOUSEEVENTF_RIGHTDOWN = 0x08;

özel const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport("user32.dll")]

statik harici void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

Rastgele aRand = yeni Rastgele();

public int LastLevel = 0;

public int MaxLevel = 255;

statik SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

genel Form1()

{

Bileşeni Başlatma();

}

özel geçersiz Form1_Load(nesne gönderen, EventArgs e)

{

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

comboBoxPort. Items. AddRange(isimler);

comboBoxPort. SelectedIndex = 0;

}

int akımNoktası = 0;

private void button1_Click(nesne gönderen, EventArgs e)

{

_serialPort = yeni SeriPort();

_serialPort. DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString();//board COM'unuzu ayarlayın

_serialPort. BaudRate = 9600;

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

Başka

{

_serialPort. Open();

}

// keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // sesi azalt

}

void _serialPort_DataReceived(nesne gönderici, SerialDataReceivedEventArgs e)

{

denemek

{

string fullval = _serialPort. ReadLine();

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

geçiş (com)

{

"a" durumu:

{

{

//ses seviyesi

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

int valInt = int. Parse(val);

AddData(valInt);

}

kırmak;

}

"u" durumu:

{

//ses aç

keybd_event((byte)Keys. VolumeUp, 0, 0, 0); // sesi azalt

kırmak;

}

"d" durumu:

{

//ses kıs

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // sesi azalt

kırmak;

}

durum "s":

{

//reklamı geç

MoveCursorSkipAd();

Thread. Sleep(10);

DoMouseClick();

kırmak;

}

durum "v":

{

//reklamı geç

MoveCursorSkipVideo();

Thread. Sleep(10);

DoMouseClick();

kırmak;

}

}

}

tutmak

{

}

//yeni NotImplementedException() atın;

}

özel boşluk MoveCursorSkipAd()

{

Cursor. Position = new Point(1140, 725);

Cursor. Position = new Point(adX, adY);

}

özel boşluk MoveCursorSkipVideo()

{

Cursor. Position = new Point(1140, 725);

Cursor. Position = new Point(vidX, vidY);

}

genel geçersiz DoMouseClick()

{

// İmlecin geçerli konumu ile içe aktarılan işlevi çağır

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

}

geçersiz AddData(int düzeyi)

{

if (enableAudioChange)

{

if (seviye >= MaxLevel)

{

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // sesi azalt

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // sesi azalt

keybd_event((byte)Keys. VolumeDown, 0, 0, 0); // sesi azalt

}

Başka

{

if (seviye < MaxLevel - 0)

{

keybd_event((byte)Keys. VolumeUp, 0, 0, 0); // sesi azalt

}

}

}

SetChart(seviye);

currentPoint++;

}

temsilci geçersiz SetTextCallback(int val);

özel geçersiz SetChart(int val)

{

// InvokeRequired gerekli dizinin iş parçacığı kimliğini karşılaştırır

// iş parçacığını oluşturan iş parçacığının iş parçacığı kimliğine çağırıyoruz.

// Bu threadler farklıysa true döndürür.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = new SetTextCallback(SetChart);

this. Invoke(d, yeni nesne { val });

}

Başka

{

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

if (currentPoint >= 10)

{

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

}

}

}

private void textBoxLevel_TextChanged(nesne gönderen, EventArgs e)

{

denemek

{

MaxLevel = int. Parse(textBoxLevel. Text);

}

tutmak

{

textBoxLevel. Text = MaxLevel + "";

}

}

özel geçersiz buttonTestSkip_Click(nesne gönderen, EventArgs e)

{

MoveCursorSkipAd();

Thread. Sleep(10);

DoMouseClick();

}

özel geçersiz textBoxXpos_TextChanged(nesne gönderen, EventArgs e)

{

denemek

{

adX = int. Parse(textBoxXpos. Text);

}

tutmak

{

textBoxXpos. Text = adX + "";

}

}

özel geçersiz textBoxYpos_TextChanged(nesne gönderen, EventArgs e)

{

denemek

{

adY = int. Parse(textBoxYpos. Text);

}

tutmak

{

textBoxYpos. Text = adY + "";

}

}

özel geçersiz buttonSkipVideo_Click(nesne gönderen, EventArgs e)

{

MoveCursorSkipVideo();

Thread. Sleep(10);

DoMouseClick();

}

private void textBoxXposVid_TextChanged(nesne gönderici, EventArgs e)

{

denemek

{

vidX = int. Parse(textBoxXposVid. Text);

}

tutmak

{

textBoxXposVid. Text = vidX + "";

}

}

özel geçersiz textBoxYposVid_TextChanged(nesne gönderici, EventArgs e)

{

denemek

{

vidY = int. Parse(textBoxYposVid. Text);

}

tutmak

{

textBoxYposVid. Text = vidY + "";

}

}

özel geçersiz checkBoxEnable_CheckedChanged(nesne gönderici, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout(LayoutKind. Sequential)]

genel yapı NOKTASI

{

genel int x;

genel int y;

}

}

Önerilen: