Orodha ya maudhui:

Udhibiti wa Kijijini wa Arduino kwa Kulala (Leobot Electronics): Hatua 4
Udhibiti wa Kijijini wa Arduino kwa Kulala (Leobot Electronics): Hatua 4

Video: Udhibiti wa Kijijini wa Arduino kwa Kulala (Leobot Electronics): Hatua 4

Video: Udhibiti wa Kijijini wa Arduino kwa Kulala (Leobot Electronics): Hatua 4
Video: Mambo 3 Ya Kufanya Leo Ili Uondoe Stress Maishani Mwako 2024, Julai
Anonim
Udhibiti wa Kijijini wa Arduino kwa Kulala (Leobot Electronics)
Udhibiti wa Kijijini wa Arduino kwa Kulala (Leobot Electronics)

Kijijini cha Arduino cha YouTube

Ikiwa unatumia Youtube kukupa sinema au muziki wa kutazama wakati wa kulala hakika ungekuwa umeamshwa na tangazo la mzigo au viwango tofauti vya sauti wakati sinema mpya inapoanza. Bila kusema, hii inaweza kuwa inakera kabisa.

Kwa hivyo, suluhisho langu ninakuthibitishia hapa kujijengea mwenyewe ni udhibiti wa kijijini wa Arduino ili kushirikiana na Youtube kwa mbali. Kijijini kinahitajika kubadilisha sauti kuu ya PC yangu, ruka matangazo kwenye Youtube na ruka video kwenye Youtube.

Pia, ni pamoja na sensorer ya kiwango cha sauti kuamua jinsi msemaji alivyo mwenye sauti kubwa, ambayo inaweza kutumika kupunguza kiatomati kiwima baada ya kugundua usumbufu mkubwa kama tangazo.

Mwishowe, niliongeza chati kwenye programu ya PC kuonyesha viwango vya sauti vilivyogunduliwa.

Suluhisho linaweza kusafishwa vizuri lakini kwangu hutimiza kazi hiyo.

Hatua ya 1: Vipengele vinahitajika

Vipengele hivi vyote hutolewa na Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 CHANNEL REMOTE (315MHZ) + MODULE WA KUPOKEA (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) SAUTI YA MICROPHONE & SENSOR MODULE SENSOR MODULE (KY-037)

leobot.net/viewproduct.aspx?id=217

Programu

1) Studio ya Visual

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Hatua ya 2: Usanidi wa vifaa

1) Unganisha moduli ya mpokeaji wa Channel 4 kwa Arduino.

Pini ya Mpokeaji wa Channel 4-> Arduino Uno Pin

GND-> GND

5V-> 5V

D0-> Dijiti 2

D1-> Dijitali 3

D2-> Dijiti 4

D3-> Dijitali 5

2) Unganisha kipaza sauti KY-037 moduli kwa Arduino

Kipaza sauti KY-037 Pin-> Arduino Uno Pin

GND-> GND

+ -> 3.3V

A0-> Analog 3

Hatua ya 3: Msimbo wa Arduino

Maelezo ya jumla

Mantiki ambayo Arduino inahitaji kufuata ni kama ifuatavyo:

A) Angalia ikiwa mpokeaji anaashiria pini yoyote.

B) Kulingana na bandari ya IO ishara inapokelewa ni amri gani itatumwa kwa PC.

C) Mara baada ya kufanywa na vitendo vyote vya kudhibiti kijijini, gundua kiwango cha sauti na kipaza sauti na upeleke kwa PC.

D) Amri zote zinazotumwa kwa PC zina muundo wa kwanza kuwa na tabia kisha thamani (ikiwa thamani inahitajika).

E) Kuna amri tano zilizotumwa kutoka Arduino kwenda kwa PC

a. "U" - Juzuu ya Juu

b. "D" - Juzuu Chini

c. "S" - Ruka Ongeza

d. "V" - Ruka Video

e. "A" - Kiwango cha Sauti kimegunduliwa ikifuatiwa na thamani

Nambari ya Arduino:

Pakua Nambari ya Arduino hapa:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

usanidi batili () {

Kuanzia Serial (9600);

pinMode (A3, INPUT);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INPUT);

pinMode (in4, INPUT);

}

kitanzi batili () {

ikiwa (digitalRead (in1))

{

Serial.println ("u");

kuchelewesha (100);

}

ikiwa (digitalRead (in2))

{

Serial.println ("d");

kuchelewesha (100);

}

ikiwa (digitalRead (in3))

{

Serial.println ("s");

kuchelewesha (100);

}

ikiwa (digitalRead (in4))

{

Serial.println ("v");

kuchelewesha (100);

}

kusoma kusomaVal = AnalogSoma (A3);

Serial.println (Kamba ("a") + Kamba (somaVal));

kuchelewesha (50);

}

Hatua ya 4: Nambari ya Programu ya PC (C #. NET)

Nambari ya Programu ya PC (C #. NET)
Nambari ya Programu ya PC (C #. NET)

Programu itasikiliza juu ya bandari ya COM (USB) na kuitikia kulingana na amri gani inapokelewa. Njia rahisi ya kugeuza sauti juu na chini kwenye PC ni kutumia huduma za Interrop kuzungumza moja kwa moja na Windows OS. Tunatumia pia huduma za Interrop kusonga panya kwenye nafasi maalum kwenye skrini na bonyeza. Ili kuruhusu skrini tofauti na ukubwa wa maoni, tunamruhusu mtumiaji kutaja nafasi ya kuruka ongeza na ruka vifungo vya video.

Tunatumia chati ya kawaida ya.net kuonyesha amri zozote za sauti tunazopokea.

Msimbo wa Windows:

Pakua mradi kamili hapa:

leobot.net/audioadjust.zip

kutumia Mfumo;

kutumia System. Collections. Generic;

kutumia System. ComponentModel;

kutumia System. Data;

kutumia Mfumo. Kuchora;

kutumia System. Linq;

kutumia Mfumo. Maandishi;

kutumia System. Windows. Forms;

kutumia System. Runtime. InteropServices;

kutumia Bandari za System. IO;

kutumia Mfumo. Kukanyaga;

nafasi ya jina AudioAdjust

{

darasa la sehemu ya umma Fomu1: Fomu

{

[DllImport ("Mtumiaji32. Dll")]

setCursorPos ya muda mrefu ya umma (int x, int y);

[DllImport ("Mtumiaji32. Dll")]

umma tuli nje bool ClientToScreen (IntPtr hWnd, ref POINT point);

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

umma tuli nje utupu wa panya_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Vitendo vya kipanya

kibinafsi const MOUSEEVENTF_LEFTDOWN = 0x02;

kibinafsi const MOUSEEVENTF_LEFTUP = 0x04;

kibinafsi const MOUSEEVENTF_RIGHTDOWN = 0x08;

kibinafsi const MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport ("user32.dll")]

tuli nje batili keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

Random Random = mpya bila mpangilio ();

umma int LastLevel = 0;

umma int MaxLevel = 255;

tuli SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = uongo;

Fomu1 ya umma ()

{

AnzishaComponent ();

}

Utupu wa kibinafsi Fomu1_Load (mtumaji wa vitu, Mikutano ya Matukio e)

{

kamba majina = System. IO. Ports. SerialPort. GetPortNames ();

comboBoxPort. Items. AddRange (majina);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

kitufe cha utupu cha kibinafsi1_Click (mtumaji wa kitu, Mikutano ya Matukio e)

{

_serialPort = mpya SerialPort ();

_serialPort. DataReceived + = mpya SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Weka bodi yako COM

_SerialPort. BaudRate = 9600;

ikiwa (_SerialPort. IsOpen) _serialPort. Close ();

mwingine

{

_SerialPort. Fungua ();

}

// keybd_event ((byte) Funguo. VolumeDown, 0, 0, 0); // punguza sauti

}

batili _serialPort_Data Imepokelewa (mtumaji wa kitu, SerialDataReceivedEventArgs e)

{

jaribu

{

fullval = _serialPort. ReadLine ();

kamba com = kamili [0]. ToString ();

badilisha (com)

{

kesi "a":

{

{

// kiwango cha sauti

kamba val = fullval. Badilisha ("a", "");

int valInt = int. Parse (val);

OngezaData (valInt);

}

kuvunja;

}

kesi "u":

{

// sauti juu

vitufe vya keybd_event ((byte). VolumeUp, 0, 0, 0); // punguza sauti

kuvunja;

}

kesi "d":

{

// sauti chini

keybd_event ((byte) Funguo. VolumeDown, 0, 0, 0); // punguza sauti

kuvunja;

}

kesi "s":

{

// rukaAd

HojaCursorSkipAd ();

Thread Kulala (10);

DoMouseClick ();

kuvunja;

}

kesi "v":

{

// rukaAd

HojaCursorSkipVideo ();

Thread Kulala (10);

DoMouseClick ();

kuvunja;

}

}

}

kukamata

{

}

// tupa mpya NotImplementedException ();

}

utupu wa kibinafsi MoveCursorSkipAd ()

{

Mshale. Position = Point mpya (1140, 725);

Mshale. Position = Point mpya (adX, adY);

}

utupu wa kibinafsi MoveCursorSkipVideo ()

{

Mshale. Position = Point mpya (1140, 725);

Mshale. Position = Point mpya (vidX, vidY);

}

DoMouseClick batili ya umma ()

{

// Piga kazi iliyoletwa na nafasi ya sasa ya mshale

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

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

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

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

}

batili AddData (kiwango cha int)

{

ikiwa (kuwezeshaAudioChange)

{

ikiwa (kiwango> = MaxLevel)

{

keybd_event ((byte) Funguo. VolumeDown, 0, 0, 0); // punguza sauti

keybd_event ((byte) Funguo. VolumeDown, 0, 0, 0); // punguza sauti

keybd_event ((byte) Funguo. VolumeDown, 0, 0, 0); // punguza sauti

}

mwingine

{

ikiwa (kiwango <MaxLevel - 0)

{

vitufe vya keybd_event ((byte). VolumeUp, 0, 0, 0); // punguza sauti

}

}

}

SetChart (kiwango);

sasaPoint ++;

}

kukabidhi batili SetTextCallback (int val);

Utupu wa kibinafsi SetChart (int val)

{

// Kuomba Inayohitajika inalinganisha kitambulisho cha thread ya

// kupiga simu kwa kitambulisho cha uzi wa uzi unaounda.

// Ikiwa nyuzi hizi ni tofauti, inarudi kweli.

ikiwa (chati hii 1. Invoke Inahitajika)

{

SetTextCallback d = mpya SetTextCallback (SetChart);

mwaliko (d, kitu kipya {val});

}

mwingine

{

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

ikiwa (sasaPoint> = 10)

{

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

}

}

}

maandishi batili ya kibinafsiBoxLevel_TextChanged (mtumaji wa vitu, Tukio la Mia e)

{

jaribu

{

MaxLevel = int. Parse (maandishiBoxLevel. Text);

}

kukamata

{

textBoxLevel. Text = MaxLevel + "";

}

}

kitufe cha utupu cha faraghaTestSkip_Click (mtumaji wa vitu, Mikutano ya Tukio e)

{

HojaCursorSkipAd ();

Thread Kulala (10);

DoMouseClick ();

}

maandishi batili ya kibinafsiBoxXpos_TextChanged (mtumaji wa vitu, Tukio la Args e)

{

jaribu

{

adX = int. Parse (maandishiBoxXpos. Text);

}

kukamata

{

textBoxXpos. Text = adX + "";

}

}

maandishi batili ya kibinafsiBoxYpos_TextChanged (mtumaji wa vitu, Tukio la Args e)

{

jaribu

{

adY = int. Parse (maandishiBoxYpos. Text);

}

kukamata

{

maandishiBoxYpos. Text = adY + "";

}

}

kitufe cha utupu wa kibinafsi SkipVideo_Click (mtumaji wa kitu, Mikutano ya Tukio e)

{

HojaCursorSkipVideo ();

Thread Kulala (10);

DoMouseClick ();

}

maandishi batili ya kibinafsiBoxXposVid_TextChanged

{

jaribu

{

vidX = int. Parse (maandishiBoxXposVid. Text);

}

kukamata

{

maandishiBoxXposVid. Text = vidX + "";

}

}

maandishi ya batili ya kibinafsiBoxYposVid_TextChanged (mtumaji wa kitu, Mikutano ya Tukio e)

{

jaribu

{

vidY = int. Parse (textBoxYposVid. Text);

}

kukamata

{

maandishiBoxYposVid. Text = vidY + "";

}

}

kuangalia batili ya kibinafsiBoxEnable_CheckedChanged (mtumaji wa kitu, Mikutano ya Tukio e)

{

wezeshaAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

muundo wa umma POINT

{

umma int x;

umma int y;

}

}

Ilipendekeza: