Cuprins:

Telecomandă Arduino Youtube pentru dormit (Leobot Electronics): 4 pași
Telecomandă Arduino Youtube pentru dormit (Leobot Electronics): 4 pași

Video: Telecomandă Arduino Youtube pentru dormit (Leobot Electronics): 4 pași

Video: Telecomandă Arduino Youtube pentru dormit (Leobot Electronics): 4 pași
Video: Sky Wings Foldable Mini Bracelet Smart Drone Ⓜ️Product Link in DescriptionⓂ️ 2024, Iulie
Anonim
Telecomandă Arduino Youtube pentru dormit (Leobot Electronics)
Telecomandă Arduino Youtube pentru dormit (Leobot Electronics)

Telecomandă Arduino Youtube

Dacă folosești Youtube pentru a-ți oferi un film sau o muzică de urmărit în timp ce dormi, cu siguranță ai fi fost trezit fie de o reclamă încărcată, fie de diferite niveluri de volum atunci când începe un nou film. Inutil să spun că acest lucru poate fi destul de iritant.

Așadar, soluția mea pe care ți-o dovedesc aici pentru a construi pentru tine este o telecomandă bazată pe Arduino pentru a interacționa cu Youtube la distanță. Telecomanda este necesară pentru a modifica volumul principal de sunet al computerului meu, pentru a sări peste anunțuri pe Youtube și pentru a sări videoclipuri pe Youtube.

De asemenea, este inclus un senzor de nivel audio pentru a determina cât de puternic este difuzorul, care la rândul său poate fi utilizat pentru a reduce automat nivelul sonor la detectarea întreruperilor puternice, cum ar fi o reclamă.

În cele din urmă, am adăugat o diagramă în aplicația PC pentru a afișa nivelurile audio detectate.

Soluția poate fi mai bine rafinată, dar pentru mine îndeplinește sarcina.

Pasul 1: Componente necesare

Toate aceste componente sunt furnizate de Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 canale la distanță (315 MHz) + MODUL RECEPTOR (315 MHz)

leobot.net/viewproduct.aspx?id=521

3) MODULUL DE SENZOR DE VOCARE ȘI DETECȚIE A SUNETULUI MICROFONIC (KY-037)

leobot.net/viewproduct.aspx?id=217

Software

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Pasul 2: Configurare hardware

1) Conectați modulul receptorului cu 4 canale la Arduino.

Pin receptor 4 canale-> Pin Arduino Uno

GND-> GND

5V-> 5V

D0-> Digital 2

D1-> Digital 3

D2-> Digital 4

D3-> Digital 5

2) Conectați modulul Microfon KY-037 la Arduino

Microfon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+ -> 3,3V

A0-> Analog 3

Pasul 3: Cod Arduino

Prezentare generală

Logica pe care Arduino trebuie să o urmeze este următoarea:

A) Verificați dacă receptorul semnalizează vreun pin.

B) În funcție de portul IO la care se recepționează semnalul, este la ce comandă va fi trimisă computerului.

C) După ce ați terminat toate acțiunile de control de la distanță, detectați nivelul audio cu microfonul și trimiteți-l la computer.

D) Toate comenzile trimise către PC au un format care are mai întâi un caracter, apoi o valoare (dacă este nevoie de o valoare).

E) Există cinci comenzi trimise de la Arduino la computer

A. „U” - Creșterea volumului

b. „D” - Reducere volum

c. „S” - Skip Add

d. „V” - Omiteți videoclipul

e. „A” - Nivelul audio detectat urmat de valoare

Codul Arduino:

Descărcați codul Arduino aici:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

configurare nulă () {

Serial.begin (9600);

pinMode (A3, INPUT);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

bucla nulă () {

if (digitalRead (in1))

{

Serial.println ("u");

întârziere (100);

}

if (digitalRead (in2))

{

Serial.println ("d");

întârziere (100);

}

if (digitalRead (in3))

{

Serial.println ("s");

întârziere (100);

}

if (digitalRead (in4))

{

Serial.println ("v");

întârziere (100);

}

int readVal = analogRead (A3);

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

întârziere (50);

}

Pasul 4: Codul aplicației PC (C #. NET)

Cod aplicație PC (C #. NET)
Cod aplicație PC (C #. NET)

Aplicația va asculta prin portul COM (USB) și va reacționa în funcție de ce comandă este primită. Cel mai simplu mod de a transforma sunetul în sus și în jos pe computer este de a utiliza serviciile Interrop pentru a vorbi direct cu sistemul de operare Windows. De asemenea, folosim serviciile Interrop pentru a muta mouse-ul într-o anumită poziție de pe ecran și a face clic. Pentru a permite diferite ecrane și dimensiuni de vizualizare, îi permitem utilizatorului să specifice poziția butoanelor de adăugare și saltare a videoclipurilor.

Folosim o diagramă.net standard pentru a afișa orice comenzi audio pe care le primim.

Cod Windows:

Descărcați proiectul complet aici:

leobot.net/audioadjust.zip

utilizarea sistemului;

folosind System. Collections. Generic;

folosind System. ComponentModel;

folosind System. Data;

folosind System. Drawing;

folosind System. Linq;

folosind System. Text;

folosind System. Windows. Forms;

folosind System. Runtime. InteropServices;

folosind System. IO. Ports;

folosind System. Threading;

spațiu de nume AudioAdjust

{

clasa parțială publică Form1: Form

{

[DllImport ("User32. Dll")]

public static extern long 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);

// Acțiuni ale mouse-ului

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")]

static extern void keybd_event (octet bVk, octet bScan, uint dwFlags, int dwExtraInfo);

Random aRand = nou Random ();

public int LastLevel = 0;

public int MaxLevel = 255;

static SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = fals;

public Form1 ()

{

InitializeComponent ();

}

private void Form1_Load (expeditor obiect, EventArgs e)

{

șir nume = System. IO. Ports. SerialPort. GetPortNames ();

comboBoxPort. Items. AddRange (nume);

comboBoxPort. SelectedIndex = 0;

}

int CurrentPoint = 0;

private void button1_Click (expeditor obiect, EventArgs e)

{

_serialPort = nou SerialPort ();

_serialPort. DataReceived + = new SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Set board COM

_serialPort. BaudRate = 9600;

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

altceva

{

_serialPort. Open ();

}

// keybd_event ((octet) Keys. VolumeDown, 0, 0, 0); // scade volumul

}

void _serialPort_DataReceived (expeditor obiect, SerialDataReceivedEventArgs e)

{

încerca

{

șir fullval = _serialPort. ReadLine ();

șir com = fullval [0]. ToString ();

comuta (com)

{

cazul "a":

{

{

// nivel audio

șir val = fullval. Replace ("a", "");

int valInt = int. Parse (val);

AddData (valInt);

}

pauză;

}

cazul "u":

{

// audio sus

keybd_event ((octet) Keys. VolumeUp, 0, 0, 0); // scade volumul

pauză;

}

cazul "d":

{

// audio în jos

keybd_event ((octet) Keys. VolumeDown, 0, 0, 0); // scade volumul

pauză;

}

caz „s”:

{

// skipAd

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

pauză;

}

cazul "v":

{

// skipAd

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

pauză;

}

}

}

captură

{

}

// aruncă o nouă NotImplementedException ();

}

private void MoveCursorSkipAd ()

{

Cursor. Position = punct nou (1140, 725);

Cursor. Position = punct nou (adX, adY);

}

private void MoveCursorSkipVideo ()

{

Cursor. Position = punct nou (1140, 725);

Cursor. Position = punct nou (vidX, vidY);

}

public void DoMouseClick ()

{

// Apelați funcția importată cu poziția curentă a cursorului

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 (nivel int)

{

dacă (enableAudioChange)

{

if (nivel> = MaxLevel)

{

keybd_event ((octet) Keys. VolumeDown, 0, 0, 0); // scade volumul

keybd_event ((octet) Keys. VolumeDown, 0, 0, 0); // scade volumul

keybd_event ((octet) Keys. VolumeDown, 0, 0, 0); // scade volumul

}

altceva

{

if (nivel <MaxLevel - 0)

{

keybd_event ((octet) Keys. VolumeUp, 0, 0, 0); // scade volumul

}

}

}

SetChart (nivel);

currentPoint ++;

}

delegate void SetTextCallback (int val);

private nul SetChart (int val)

{

// InvokeRequired required compară ID-ul firului

// apelarea firului la ID-ul firului firului de creație.

// Dacă aceste fire sunt diferite, se întoarce adevărat.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = nou SetTextCallback (SetChart);

this. Invoke (d, nou obiect {val});

}

altceva

{

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

if (currentPoint> = 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (expeditor obiect, EventArgs e)

{

încerca

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

captură

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (expeditor obiect, EventArgs e)

{

MoveCursorSkipAd ();

Thread. Sleep (10);

DoMouseClick ();

}

private void textBoxXpos_TextChanged (expeditor obiect, EventArgs e)

{

încerca

{

adX = int. Parse (textBoxXpos. Text);

}

captură

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (expeditor obiect, EventArgs e)

{

încerca

{

adY = int. Parse (textBoxYpos. Text);

}

captură

{

textBoxYpos. Text = adY + "";

}

}

buton nul privat SkipVideo_Click (expeditor obiect, EventArgs e)

{

MoveCursorSkipVideo ();

Thread. Sleep (10);

DoMouseClick ();

}

private void textBoxXposVid_TextChanged (expeditor obiect, EventArgs e)

{

încerca

{

vidX = int. Parse (textBoxXposVid. Text);

}

captură

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (expeditor obiect, EventArgs e)

{

încerca

{

vidY = int. Parse (textBoxYposVid. Text);

}

captură

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (expeditor obiect, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

public struct POINT

{

public int x;

public int y;

}

}

Recomandat: