INHOUDSOPGAWE:

Arduino Youtube -afstandsbediening vir slaap (Leobot Electronics): 4 stappe
Arduino Youtube -afstandsbediening vir slaap (Leobot Electronics): 4 stappe

Video: Arduino Youtube -afstandsbediening vir slaap (Leobot Electronics): 4 stappe

Video: Arduino Youtube -afstandsbediening vir slaap (Leobot Electronics): 4 stappe
Video: Using 28BYJ-48 Stepper Motor Push button Speed with 8 projects: Ultimate Video Tutorial Lesson 107 2024, November
Anonim
Arduino Youtube -afstandsbediening vir slaap (Leobot Electronics)
Arduino Youtube -afstandsbediening vir slaap (Leobot Electronics)

Arduino Youtube Remote

As u YouTube gebruik om 'n film of musiek te gee om te slaap terwyl u slaap, sou u sekerlik deur 'n laai -advertensie of 'n ander volumevlak wakker geword het as 'n nuwe film begin. Nodeloos om te sê, dit kan nogal irriterend wees.

Dus, my oplossing wat ek u hier bewys om vir u te bou, is 'n afstandsbediening op Arduino om op 'n afstand met Youtube te kommunikeer. Die afstandsbediening moet die hoofklankvolume van my rekenaar verander, advertensies op Youtube oorslaan en video's op Youtube oorslaan.

Daar is ook 'n klankvlak -sensor ingesluit om te bepaal hoe hard die luidspreker eintlik is, wat weer gebruik kan word om die klankvlak outomaties te verlaag wanneer harde onderbrekings soos 'n advertensie opgemerk word.

Laastens het ek 'n grafiek op die rekenaar -app bygevoeg om die opgespoorde klankvlakke te vertoon.

Die oplossing kan beter verfyn word, maar dit is vir my die taak.

Stap 1: Komponente benodig

Al hierdie komponente word verskaf deur Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4 KANAAL AFSTAND (315MHZ) + ONTVANGER MODULE (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) MIKROFOONSTEM- EN GELUIDSOPMERKINGSSENSOR MODULE (KY-037)

leobot.net/viewproduct.aspx?id=217

Sagteware

1) Visual Studio

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

Stap 2: hardeware -opstelling

1) Koppel die 4-kanaals ontvanger module aan op die Arduino.

4-kanaals ontvanger-pin-> Arduino Uno-pin

GND-> GND

5V-> 5V

D0-> Digitaal 2

D1-> Digitaal 3

D2-> Digitaal 4

D3-> Digitaal 5

2) Koppel die mikrofoon KY-037-module aan die Arduino

Mikrofoon KY-037 Pin-> Arduino Uno Pin

GND-> GND

+-> 3.3V

A0-> Analoog 3

Stap 3: Arduino -kode

Oorsig

Die logika wat die Arduino moet volg, is soos volg:

A) Kyk of die ontvanger enige penne aandui.

B) Watter opdrag sal na die rekenaar gestuur word, afhangende van watter IO -poort die sein ontvang word?

C) As u klaar is met alle afstandbeheer-aksies, kan u die klankvlak met die mikrofoon opspoor en dit na die rekenaar stuur.

D) Alle opdragte wat na die rekenaar gestuur word, het 'n formaat om eers 'n karakter te hê, dan 'n waarde (indien 'n waarde nodig is).

E) Daar is vyf opdragte wat vanaf die Arduino na die rekenaar gestuur word

a. “U” - Volume op

b. “D” - Volume af

c. “S” - Slaan oor byvoeging

d. “V” - Slaan video oor

e. "A" - klankvlak opgespoor gevolg deur die waarde

Die Arduino -kode:

Laai die Arduino -kode hier af:

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

ongeldige opstelling () {

Serial.begin (9600);

pinMode (A3, INVOER);

pinMode (in1, INVOER);

pinMode (in2, INVOER);

pinMode (in3, INVOER);

pinMode (in4, INVOER);

}

leemte -lus () {

as (digitalRead (in1))

{

Serial.println ("u");

vertraging (100);

}

as (digitalRead (in2))

{

Serial.println ("d");

vertraging (100);

}

as (digitalRead (in3))

{

Serial.println ("s");

vertraging (100);

}

as (digitalRead (in4))

{

Serial.println ("v");

vertraging (100);

}

int readVal = analogRead (A3);

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

vertraging (50);

}

Stap 4: PC App -kode (C#. NET)

PC -programkode (C#. NET)
PC -programkode (C#. NET)

Die app luister oor die COM (USB) -poort en reageer, afhangende van watter opdrag ontvang word. Die eenvoudigste manier om die geluid op en af te draai op die rekenaar, is deur Interrop -dienste te gebruik om direk met die Windows -bedryfstelsel te praat. Ons gebruik ook die Interrop -dienste om die muis na 'n spesifieke posisie op die skerm te skuif en te klik. Om verskillende skerms en kykgroottes moontlik te maak, laat ons die gebruiker toe om die posisie van die video -knoppies vir oorslaan en byvoeging oor te gee.

Ons gebruik 'n standaard.net -grafiek om die klankopdragte wat ons ontvang, weer te gee.

Windows -kode:

Laai die volledige projek hier af:

leobot.net/audioadjust.zip

met behulp van System;

met behulp van System. Collections. Generic;

met behulp van System. ComponentModel;

met behulp van System. Data;

met behulp van System. Teken;

met behulp van System. Linq;

met behulp van System. Text;

met behulp van System. Windows. Forms;

met behulp van System. Runtime. InteropServices;

met behulp van System. IO. Ports;

met behulp van System. Threading;

naamruimte AudioAdjust

{

openbare gedeeltelike klas Vorm1: Vorm

{

[DllImport ("User32. Dll")]

openbare statiese eksterne lang SetCursorPos (int x, int y);

[DllImport ("User32. Dll")]

openbare statiese eksterne bool ClientToScreen (IntPtr hWnd, ref POINT point);

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

openbare statiese eksterne leegte muis_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Muisaksies

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

statiese eksterne leemte keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

Random aRand = new Random ();

public int LastLevel = 0;

openbare int MaxLevel = 255;

statiese SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

openbare vorm1 ()

{

InitializeComponent ();

}

private leemte Form1_Load (voorwerp sender, EventArgs e)

{

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

comboBoxPort. Items. AddRange (name);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

private leemte knoppie1_Klik (voorwerp sender, EventArgs e)

{

_serialPort = nuwe SerialPort ();

_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Stel u bord -COM in

_serialPort. BaudRate = 9600;

as (_serialPort. IsOpen) _serialPort. Close ();

anders

{

_serialPort. Open ();

}

// keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // volume verlaag

}

void _serialPort_DataReceived (voorwerp sender, SerialDataReceivedEventArgs e)

{

probeer

{

string fullval = _serialPort. ReadLine ();

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

skakelaar (com)

{

geval "a":

{

{

// klankvlak

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

int valInt = int. Parse (val);

AddData (valInt);

}

breek;

}

geval "u":

{

// klank op

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // volume verlaag

breek;

}

geval "d":

{

// klank af

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // volume verlaag

breek;

}

geval "s":

{

//slaan advertensie oor

MoveCursorSkipAd ();

Draad. Slaap (10);

DoMouseClick ();

breek;

}

geval "v":

{

//slaan advertensie oor

MoveCursorSkipVideo ();

Draad. Slaap (10);

DoMouseClick ();

breek;

}

}

}

vang

{

}

// gooi nuwe NotImplementedException ();

}

private leemte MoveCursorSkipAd ()

{

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

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

}

private leemte MoveCursorSkipVideo ()

{

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

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

}

openbare leemte DoMouseClick ()

{

// Bel die ingevoerde funksie met die huidige posisie van die wyser

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

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

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

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

}

leegte AddData (int -vlak)

{

as (enableAudioChange)

{

as (vlak> = MaxLevel)

{

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // volume verlaag

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // volume verlaag

keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // volume verlaag

}

anders

{

as (vlak <MaxLevel - 0)

{

keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // volume verlaag

}

}

}

SetChart (vlak);

currentPoint ++;

}

delegate void SetTextCallback (int val);

private leegte SetChart (int val)

{

// InvokeRequired required vergelyk die draad -ID van die

// roep draad na die draad -ID van die skepdraad.

// As hierdie drade anders is, word dit waar.

as (hierdie.kaart1. InvokeVereis)

{

SetTextCallback d = nuwe SetTextCallback (SetChart);

this. Invoke (d, new object {val});

}

anders

{

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

as (currentPoint> = 10)

{

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

}

}

}

private leemte textBoxLevel_TextChanged (voorwerp sender, EventArgs e)

{

probeer

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

vang

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click (voorwerp sender, EventArgs e)

{

MoveCursorSkipAd ();

Draad. Slaap (10);

DoMouseClick ();

}

private leemte teksBoxXpos_TextChanged (voorwerp sender, EventArgs e)

{

probeer

{

adX = int. Parse (textBoxXpos. Text);

}

vang

{

textBoxXpos. Text = adX + "";

}

}

private leemte teksBoxYpos_TextChanged (voorwerp sender, EventArgs e)

{

probeer

{

adY = int. Parse (textBoxYpos. Text);

}

vang

{

textBoxYpos. Text = adY + "";

}

}

private void -knoppieSkipVideo_Click (voorwerp sender, EventArgs e)

{

MoveCursorSkipVideo ();

Draad. Slaap (10);

DoMouseClick ();

}

private leemte teksBoxXposVid_TextChanged (voorwerp sender, EventArgs e)

{

probeer

{

vidX = int. Parse (textBoxXposVid. Text);

}

vang

{

textBoxXposVid. Text = vidX + "";

}

}

private leemte teksBoxYposVid_TextChanged (voorwerp sender, EventArgs e)

{

probeer

{

vidY = int. Parse (textBoxYposVid. Text);

}

vang

{

textBoxYposVid. Text = vidY + "";

}

}

private leemte checkBoxEnable_CheckedChanged (voorwerp sender, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout (LayoutKind. Sequential)]

openbare struktuur PUNT

{

publieke int x;

openbare int y;

}

}

Aanbeveel: