İçindekiler:
- Adım 1: Gerekli Bileşenler
- Adım 2: Donanım Kurulumu
- Adım 3: Arduino Kodu
- 4. Adım: PC Uygulama Kodu (C#.NET)
Video: Uyumak için Arduino Youtube Uzaktan Kumandası (Leobot Electronics): 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:18
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)
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:
10W RGB Dış Mekan Gece Lambası Uzaktan Kumandası: 5 Adım
10W RGB Dış Gece Lambası Uzaktan Kumandası: Bu proje, gece için 10W RGB ledli bir lambadır, yanınıza yerleştirilebilir ve size saatlerce ruh hali aydınlatması sağlayabilir. Fransa'da bulunan Balad Lamp'den ilham aldım ama biraz daha güçlü (ticari versiyon yaklaşık 3W, benimki 10W) ve daha fazlası
Güvenli Arduino Uzaktan Kumandası: 5 Adım
Secure Arduino Remote: Bu, ultra güvenli kablosuz (garaj) uzaktan kumandanın nasıl yapılacağına bir örnektir. Genellikle uzaktan kumandalarda, herhangi bir gelişmiş hırsız tarafından atlanabilen, yuvarlanan kod tipi güvenlik bulunur. Bu uzak sistem, 16 baytlık bir anahtar kullanmaya dayanır, bu nedenle onu hacklemek ac olurdu
Güvenilir, Güvenli, Özelleştirilebilir SMS Uzaktan Kumandası (Arduino/pfodApp) - Kodlama Gerekmez: 4 Adım
Güvenilir, Güvenli, Özelleştirilebilir SMS Uzaktan Kumandası (Arduino/pfodApp) - Kodlama Gerekmez: 6 Temmuz 2018 Güncellemesi: Bu projenin SIM5320 kullanan 3G/2G versiyonu burada mevcuttur Güncelleme: 19 Mayıs 2015: pfodParser kitaplığı Sürüm 2.5 veya kullanın daha yüksek. Kalkanın cihaza bağlanması için yeterli zamana izin vermediği bildirilen bir sorunu giderir
Arduino Irlib ile TV Uzaktan Kumandası veya Başka Bir Şey Nasıl Taklit Edilir: 3 Adım (Resimlerle)
Arduino Irlib ile TV Uzaktan Kumandası veya Başka Bir Şey Nasıl Taklit Edilir: Giriş Herkese merhaba ve ilk Instructable'ıma hoş geldiniz. Bugün, başlığın dediği gibi, Arduino (herhangi bir model) kullanarak e TV uzaktan kumandasını veya Kızılötesi sinyallerle çalışan benzer bir şeyi taklit etmeyi öğreneceğiz. .Sorun şuydu: Kodları bir bilgisayara nasıl iletebilirim?
PC Video Oynatıcısı için Yürümeye Başlayan Video Uzaktan Kumandası: 6 Adım
Toddler Video Remote for PC Video Player: Bir PC'ye USB ile bağlanan bir uzaktan kumanda yapıyorum. Büyük uzaktan kumanda, yürümeye başlayan çocuğumun eski bir bilgisayarda videoları seçmesine ve oynatmasına izin veriyor. Bu nispeten basit bir proje. Temel bileşen ya bir USB tuş takımı ya da bir kablosuz USB tuş takımıdır. O zaman