Përmbajtje:

Telekomandë Arduino Youtube për të fjetur (Elektronikë Leobot): 4 hapa
Telekomandë Arduino Youtube për të fjetur (Elektronikë Leobot): 4 hapa

Video: Telekomandë Arduino Youtube për të fjetur (Elektronikë Leobot): 4 hapa

Video: Telekomandë Arduino Youtube për të fjetur (Elektronikë Leobot): 4 hapa
Video: 35 video me fantazma të frikshme: Mega përmbledhje e vitit 2023 [V1] 2024, Korrik
Anonim
Telekomandë Arduino Youtube për të fjetur (Leobot Electronics)
Telekomandë Arduino Youtube për të fjetur (Leobot Electronics)

Telekomandë Arduino Youtube

Nëse përdorni Youtube për t'ju siguruar një film ose muzikë për të parë gjatë gjumit, me siguri do të ishit zgjuar nga një reklamë e ngarkuar ose nivele të ndryshme të volumit kur të fillonte një film i ri. Eshtë e panevojshme të thuhet, kjo mund të jetë mjaft irrituese.

Pra, zgjidhja ime që unë ju dëshmoj këtu për të ndërtuar për veten tuaj është një telekomandë me bazë Arduino për të bashkëvepruar me Youtube në distancë. Telekomanda kërkohet të ndryshojë volumin kryesor të zërit të kompjuterit tim, të kalojë reklamat në Youtube dhe të kalojë video në Youtube.

Gjithashtu, përfshihet një sensor i nivelit audio për të përcaktuar se sa i zhurmshëm është në të vërtetë altoparlanti, i cili nga ana tjetër mund të përdoret për të ulur automatikisht nivelin e zërit me zbulimin e ndërprerjeve me zë të lartë, siç është një reklamë.

Së fundmi, shtova një tabelë në aplikacionin PC për të shfaqur nivelet e zbuluara të zërit.

Zgjidhja mund të rafinohet më mirë, por për mua ajo e përmbush detyrën.

Hapi 1: Përbërësit e nevojshëm

Të gjithë këta përbërës furnizohen nga Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANEL TEMOTE (315MHZ) + MODULE MARRS (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MODULI I SENSORIT TO ZORIT TIC ZORIT DHE ZGJIMIT TIC MIKROFONIT (KY-037)

leobot.net/viewproduct.aspx?id=217

Softuer

1) Studio vizuale

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Hapi 2: Konfigurimi i harduerit

1) Lidhni modulin e marrësit me 4 kanale me Arduino.

Pin i Marrësit me 4 Kanale-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Digital 2

D1-> Digital 3

D2-> Digital 4

D3-> Digital 5

2) Lidhni modulin e Mikrofonit KY-037 me Arduino

Mikrofoni KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3V

A0-> Analog 3

Hapi 3: Kodi Arduino

Vështrim i përgjithshëm

Logjika që Arduino duhet të ndjekë është si më poshtë:

A) Kontrolloni nëse marrësi po sinjalizon ndonjë kunj.

B) Në varësi të portës IO, sinjali është marrë se cila komandë do t'i dërgohet kompjuterit.

C) Pasi të keni përfunduar me të gjitha veprimet e telekomandës, zbuloni nivelin e zërit me mikrofonin dhe dërgojeni atë në kompjuter.

D) Të gjitha komandat e dërguara në PC kanë një format që së pari të ketë një karakter pastaj një vlerë (nëse nevojitet një vlerë).

E) Janë pesë komanda të dërguara nga Arduino në PC

a "U" - Volume Up

b "D" - Zbritja e vëllimit

c "S" - Kalo Shto

d "V" - Kalo videon

e "A" - Niveli i audios i zbuluar i ndjekur nga vlera

Kodi Arduino:

Shkarkoni Arduino Code këtu:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

void setup () {

Serial.filloj (9600);

pinMode (A3, INPUT);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

lak void () {

nëse (digitalRead (in1))

{

Serial.println ("u");

vonesë (100);

}

nëse (digitalRead (in2))

{

Serial.println ("d");

vonesë (100);

}

nëse (digitalRead (in3))

{

Serial.println ("s");

vonesë (100);

}

nëse (digitalRead (in4))

{

Serial.println ("v");

vonesë (100);

}

int readVal = analogRead (A3);

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

vonesë (50);

}

Hapi 4: Kodi i Aplikacionit për PC (C#. NET)

Kodi i Aplikacionit për PC (C#. NET)
Kodi i Aplikacionit për PC (C#. NET)

Aplikacioni do të dëgjojë përmes portës COM (USB) dhe do të reagojë në varësi të asaj komande që merret. Mënyra më e thjeshtë për ta kthyer zërin lart e poshtë në kompjuter është përdorimi i shërbimeve Interrop për të folur drejtpërdrejt me Windows OS. Ne gjithashtu përdorim shërbimet Interrop për të lëvizur miun në një pozicion të caktuar në ekran dhe klikoni. Për të lejuar ekranet dhe madhësitë e ndryshme të shikimit, ne i lejojmë përdoruesit të përcaktojë pozicionin e butonave të shtimit dhe kapërcimit të videos.

Ne përdorim një tabelë standarde.net për të shfaqur çdo komandë audio që marrim.

Kodi i Windows:

Shkarkoni projektin e plotë këtu:

leobot.net/audioadjust.zip

duke përdorur Sistemin;

duke përdorur System. Collections. Generic;

duke përdorur System. ComponentModel;

duke përdorur System. Data;

duke përdorur System. Drawing;

duke përdorur System. Linq;

duke përdorur System. Text;

duke përdorur System. Windows. Forms;

duke përdorur System. Runtime. InteropServices;

duke përdorur System. IO. Ports;

duke përdorur System. Threading;

hapësira e emrave AudioAdjust

{

klasa e pjesshme publike Form1: Forma

{

[DllImport ("User32. Dll")]

jashtme statike publike SetCursorPos gjatë (int x, int y);

[DllImport ("User32. Dll")]

publik statik i jashtëm bool ClientToScreen (IntPtr hWnd, ref pika POINT);

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

publiku statik i jashtëm i pavlefshëm miu_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Veprimet e miut

konstrukt privat int MOUSEEVENTF_LEFTDOWN = 0x02;

konstituc privat int MOUSEEVENTF_LEFTUP = 0x04;

konstituti privat në MOUSEEVENTF_RIGHTDOWN = 0x08;

konstituc privat int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport ("user32.dll")]

zbrazëti statike e jashtme keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

Random aRand = e re Random ();

public int LastLevel = 0;

int int publike MaxLevel = 255;

SerialPort statik _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

Formulari publik 1 ()

{

InitializeComponent ();

}

zbrazëti private Form1_Load (dërguesi i objektit, EventArgs e)

{

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

comboBoxPort. Items. AddRange (emrat);

comboBoxPort. SelectIndex = 0;

}

int currentPoint = 0;

butoni privat i zbrazëtisë1_Kliko (dërguesi i objektit, EventArgs e)

{

_serialPort = SerialPort i ri ();

_serialPort. DataReceived += serialDataReceivedEventHandler i ri (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Vendosni bordin tuaj COM

_serialPort. BaudRate = 9600;

nëse (_serialPort. IsOpen) _serialPort. Mbyll ();

tjeter

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // ul volumin

}

void _serialPort_DataReceived (dërguesi i objektit, SerialDataReceivedEventArgs e)

{

provo

{

string fullval = _serialPort. ReadLine ();

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

kaloni (com)

{

rasti "a":

{

{

// niveli audio

vargu val = fullval. Zëvendëso ("a", "");

int valInt = int. Parse (val);

AddData (valInt);

}

pushim;

}

rasti "u":

{

// audio lart

keybd_event ((byte) Çelësat. VolumeUp, 0, 0, 0); // ul volumin

pushim;

}

rasti "d":

{

// audio poshtë

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // ul volumin

pushim;

}

rasti "s":

{

// kalo Shto

MoveCursorSkipAd ();

Fije. Gjumi (10);

DoMouseClick ();

pushim;

}

rasti "v":

{

// kalo Shto

MoveCursorSkipVideo ();

Fije. Gjumi (10);

DoMouseClick ();

pushim;

}

}

}

kap

{

}

// hidhni NotImplementedException të ri ();

}

zbrazëti private MoveCursorSkipAd ()

{

Kursori. Pozicioni = Pika e re (1140, 725);

Cursor. Position = pikë e re (adX, adY);

}

zbrazëti private MoveCursorSkipVideo ()

{

Kursori. Pozicioni = Pika e re (1140, 725);

Kursori. Pozicioni = Pika e re (vidX, vidY);

}

zbrazëti publike DoMouseClick ()

{

// Thirrni funksionin e importuar me pozicionin aktual të kursorit

uint X = (uint) Cursor. Position. X;

uint Y = (uint) Cursor. Position. Y;

ngjarja_mouse (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);

ngjarja_mouse (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);

}

pavlefshme AddData (niveli int)

{

nëse (aktivizo ndryshimin audio)

{

nëse (niveli> = Niveli maksimal)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // ul volumin

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // ul volumin

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // ul volumin

}

tjeter

{

nëse (niveli <MaxLevel - 0)

{

keybd_event ((byte) Çelësat. VolumeUp, 0, 0, 0); // ul volumin

}

}

}

SetChart (niveli);

currentPoint ++;

}

delego void SetTextCallback (int val);

zbrazëti private SetChart (int val)

{

// InvokeRequired required krahason ID -në e thread -it të

// thirrja e fijes në ID -në e fillit të fillit krijues.

// Nëse këto fije janë të ndryshme, ai kthehet i vërtetë.

nëse (kjo. grafiku 1. InvokeRequired)

{

SetTextCallback d = i ri SetTextCallback (SetChart);

this. Invoke (d, objekt i ri {val});

}

tjeter

{

grafiku 1. Seritë [0]. Pikat. ShtoXY (0, val);

nëse (aktualePoint> = 10)

{

tabelë1. Seritë [0]. Pikat. HiqniAt (0);

}

}

}

teksti i pavlefshëm privatBoxLevel_TextChanged (dërguesi i objektit, EventArgs e)

{

provo

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

kap

{

textBoxLevel. Text = MaxLevel + "";

}

}

butoni privat i zbrazëtisëTestSkip_Click (dërguesi i objektit, EventArgs e)

{

MoveCursorSkipAd ();

Fije. Gjumi (10);

DoMouseClick ();

}

tekst privat i pavlefshëmBoxXpos_TextChanged (dërguesi i objektit, EventArgs e)

{

provo

{

adX = int. Parse (textBoxXpos. Text);

}

kap

{

textBoxXpos. Text = adX + "";

}

}

teksti i pavlefshëm privatBoxYpos_TextChanged (dërguesi i objektit, EventArgs e)

{

provo

{

adY = int. Parse (textBoxYpos. Text);

}

kap

{

textBoxYpos. Text = adY + "";

}

}

butoni privat i zbrazëtisë SkipVideo_Click (dërguesi i objektit, EventArgs e)

{

MoveCursorSkipVideo ();

Fije. Gjumi (10);

DoMouseClick ();

}

teksti i pavlefshëm privatBoxXposVid_TextChanged (dërguesi i objektit, EventArgs e)

{

provo

{

vidX = int. Parse (textBoxXposVid. Text);

}

kap

{

textBoxXposVid. Text = vidX + "";

}

}

tekst privat i pavlefshëmBoxYposVid_TextChanged (dërguesi i objektit, EventArgs e)

{

provo

{

vidY = int. Parse (textBoxYposVid. Text);

}

kap

{

textBoxYposVid. Text = vidY + "";

}

}

kontroll i pavlefshëm privatBoxEnable_CheckedChanged (dërguesi i objektit, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

struktura publike PIKA

{

publik int x;

int int publike;

}

}

Recommended: