Inhoudsopgave:

Arduino YouTube-afstandsbediening voor slapen (Leobot Electronics) - Ajarnpa
Arduino YouTube-afstandsbediening voor slapen (Leobot Electronics) - Ajarnpa

Video: Arduino YouTube-afstandsbediening voor slapen (Leobot Electronics) - Ajarnpa

Video: Arduino YouTube-afstandsbediening voor slapen (Leobot Electronics) - Ajarnpa
Video: 7 ПОЛЕЗНЫХ устройств на АРДУИНО, которые можно собрать за 15 минут. 2024, Juli-
Anonim
Arduino YouTube-afstandsbediening voor slapen (Leobot Electronics)
Arduino YouTube-afstandsbediening voor slapen (Leobot Electronics)

Arduino YouTube-afstandsbediening

Als je YouTube gebruikt om je een film of muziek te bieden om naar te kijken terwijl je slaapt, zou je zeker gewekt zijn door een laadadvertentie of verschillende volumeniveaus wanneer een nieuwe film begint. Onnodig te zeggen dat dit behoorlijk irritant kan zijn.

Dus mijn oplossing die ik je hier bewijs om voor jezelf te bouwen, is een op Arduino gebaseerde afstandsbediening om op afstand met YouTube te communiceren. De afstandsbediening is nodig om het hoofdgeluidsvolume van mijn pc te wijzigen, advertenties op YouTube over te slaan en video's op YouTube over te slaan.

Ook inbegrepen is een audioniveausensor om te bepalen hoe luid de luidspreker werkelijk is, die op zijn beurt kan worden gebruikt om het geluidsniveau automatisch te verlagen bij het detecteren van luide onderbrekingen zoals een advertentie.

Ten slotte heb ik een grafiek toegevoegd aan de pc-app om de gedetecteerde audioniveaus weer te geven.

De oplossing kan beter worden verfijnd, maar voor mij volbrengt het de taak.

Stap 1: Benodigde onderdelen

Al deze componenten worden geleverd door Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) 4-KANAALS AFSTANDSBEDIENING (315 MHZ) + ONTVANGERMODULE (315 MHZ)

leobot.net/viewproduct.aspx?id=521

3) MICROFOON STEM- & GELUIDDETECTIE SENSORMODULE (KY-037)

leobot.net/viewproduct.aspx?id=217

Software

1) Visuele Studio

visualstudio.microsoft.com/

2) Arduino-IDE

www.arduino.cc/en/main/software

Stap 2: Hardware-installatie

1) Sluit de 4-kanaals ontvangermodule aan op de Arduino.

4-kanaals ontvanger->Arduino Uno-pin

GND->GND

5V->5V

D0->Digitaal 2

D1->Digitaal 3

D2->Digitaal 4

D3->Digitaal 5

2) Sluit de microfoon KY-037-module aan op de Arduino

Microfoon KY-037 Pin->Arduino Uno Pin

GND->GND

+->3,3V

A0->Analoog 3

Stap 3: Arduino-code

Overzicht

De logica die de Arduino moet volgen is als volgt:

A) Controleer of de ontvanger pinnen signaleert.

B) Afhankelijk van op welke IO-poort het signaal wordt ontvangen, wordt welk commando naar de pc wordt verzonden.

C) Als u klaar bent met alle afstandsbedieningsacties, detecteert u het audioniveau met de microfoon en stuurt u het naar de pc.

D) Alle opdrachten die naar de pc worden verzonden, hebben de indeling eerst een teken en vervolgens een waarde (als een waarde nodig is).

E) Er zijn vijf opdrachten verzonden van de Arduino naar de pc

A. "u" - Volume omhoog

B. "d" - Volume omlaag

C. "s" - Toevoegen overslaan

NS. "v" - Video overslaan

e. "a" - Audioniveau gedetecteerd gevolgd door de waarde

De Arduino-code:

Download hier de Arduino-code:

int in1=2;

int in2=3;

int in3=4;

int in4=5;

ongeldige setup() {

Serieel.begin(9600);

pinMode (A3, INGANG);

pinMode (in1, INPUT);

pinMode (in2, INPUT);

pinMode (in3, INGANG);

pinMode (in4, INGANG);

}

lege lus() {

if(digitalRead(in1))

{

Serieel.println("u");

vertraging (100);

}

if(digitalRead(in2))

{

Serieel.println("d");

vertraging (100);

}

if(digitalRead(in3))

{

Serieel.println("s");

vertraging (100);

}

if(digitalRead(in4))

{

Serieel.println("v");

vertraging (100);

}

int readVal= analoogRead(A3);

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

vertraging (50);

}

Stap 4: PC-app-code (C#. NET)

PC-app-code (C#. NET)
PC-app-code (C#. NET)

De app luistert via de COM (USB)-poort en reageert afhankelijk van welk commando wordt ontvangen. De eenvoudigste manier om het geluid op de pc harder en zachter te zetten, is door Interrop-services te gebruiken om rechtstreeks met het Windows-besturingssysteem te spreken. We gebruiken ook de Interrop-services om de muis naar een specifieke positie op het scherm te verplaatsen en te klikken. Om verschillende schermen en weergaveformaten mogelijk te maken, kunnen we de gebruiker de positie van de knoppen voor het overslaan van toevoegen en het overslaan van video specificeren.

We gebruiken een standaard.net-diagram om alle audiocommando's die we ontvangen weer te geven.

Windows-code:

Download hier het volledige project:

leobot.net/audioadjust.zip

systeem gebruiken;

met behulp van System. Collections. Generic;

met behulp van System. ComponentModel;

met behulp van systeemgegevens;

met behulp van System. Drawing;

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 deelklasse Form1: Form

{

[DllImport("User32. Dll")]

openbare statische externe lange SetCursorPos (int x, int y);

[DllImport("User32. Dll")]

openbare statische externe bool ClientToScreen (IntPtr hWnd, ref POINT-punt);

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

openbare statische externe void mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

// Muisacties

privé const int MOUSEEVENTF_LEFTDOWN = 0x02;

privé const int MOUSEEVENTF_LEFTUP = 0x04;

privé const int MOUSEEVENTF_RIGHTDOWN = 0x08;

privé const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport("user32.dll")]

statische externe void keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

Willekeurig aRand = nieuw Willekeurig();

public int LastLevel = 0;

openbare int MaxLevel = 255;

statische SerialPort _serialPort;

int adX = 1281;

int adY = 706;

int vidX = 250;

int vidY = 780;

bool enableAudioChange = false;

openbaar formulier1()

{

InitialiseerComponent();

}

private void Form1_Load (objectafzender, EventArgs e)

{

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

comboBoxPort. Items. AddRange (namen);

comboBoxPort. SelectedIndex = 0;

}

int stroompunt = 0;

private void button1_Click(object afzender, EventArgs e)

{

_serialPort = nieuwe SerialPort();

_serialPort. DataReceived += nieuwe SerialDataReceivedEventHandler(_serialPort_DataReceived);

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

_serialPort. BaudRate = 9600;

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

anders

{

_serialPort. Open();

}

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

}

void _serialPort_DataReceived (objectafzender, SerialDataReceivedEventArgs e)

{

proberen

{

string fullval = _serialPort. ReadLine();

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

schakelaar (com)

{

geval "a":

{

{

//audioniveau

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

int valInt = int. Parse(val);

AddData(valInt);

}

pauze;

}

geval "u":

{

//audio omhoog

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

pauze;

}

geval "d":

{

//audio omlaag

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

pauze;

}

gevallen :

{

//advertentie overslaan

MoveCursorSkipAd();

Draad. Slaap (10);

DoMouseClick();

pauze;

}

geval "v":

{

//advertentie overslaan

MoveCursorSkipVideo();

Draad. Slaap (10);

DoMouseClick();

pauze;

}

}

}

vangst

{

}

// gooi nieuwe NotImplementedException();

}

privé leegte MoveCursorSkipAd()

{

Cursor. Positie = nieuw punt (1140, 725);

Cursor. Positie = nieuw punt (adX, adY);

}

privé leegte MoveCursorSkipVideo()

{

Cursor. Positie = nieuw punt (1140, 725);

Cursor. Positie = nieuw punt (vidX, vidY);

}

openbare leegte DoMouseClick()

{

// Roep de geïmporteerde functie op met de huidige positie van de cursor

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

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

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

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

}

void AddData (int-niveau)

{

if (AudioChange inschakelen)

{

if (niveau >= MaxLevel)

{

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

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

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

}

anders

{

if (niveau < MaxLevel - 0)

{

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

}

}

}

SetChart (niveau);

huidig punt++;

}

delegeren ongeldig SetTextCallback(int val);

privé leegte SetChart (int val)

{

// InvokeRequired vereist vergelijkt de thread-ID van de

// thread aanroepen naar de thread-ID van de thread die wordt gemaakt.

// Als deze threads verschillend zijn, wordt true geretourneerd.

if (this.chart1. InvokeRequired)

{

SetTextCallback d = nieuwe SetTextCallback (SetChart);

dit. Invoke(d, nieuw object {val});

}

anders

{

grafiek1. Serie[0]. Punten. ToevoegenXY(0, val);

if (currentPoint >= 10)

{

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

}

}

}

private void textBoxLevel_TextChanged (objectafzender, EventArgs e)

{

proberen

{

MaxLevel = int. Parse(textBoxLevel. Text);

}

vangst

{

textBoxLevel. Text = MaxLevel + "";

}

}

private void buttonTestSkip_Click(object afzender, EventArgs e)

{

MoveCursorSkipAd();

Draad. Slaap (10);

DoMouseClick();

}

private void textBoxXpos_TextChanged (objectafzender, EventArgs e)

{

proberen

{

adX = int. Parse(textBoxXpos. Text);

}

vangst

{

textBoxXpos. Text = adX + "";

}

}

private void textBoxYpos_TextChanged (objectafzender, EventArgs e)

{

proberen

{

adY = int. Parse(textBoxYpos. Text);

}

vangst

{

textBoxYpos. Text = adY + "";

}

}

private void-knopSkipVideo_Click (objectafzender, EventArgs e)

{

MoveCursorSkipVideo();

Draad. Slaap (10);

DoMouseClick();

}

private void textBoxXposVid_TextChanged (objectafzender, EventArgs e)

{

proberen

{

vidX = int. Parse(textBoxXposVid. Text);

}

vangst

{

textBoxXposVid. Text = vidX + "";

}

}

private void textBoxYposVid_TextChanged (objectafzender, EventArgs e)

{

proberen

{

vidY = int. Parse(textBoxYposVid. Text);

}

vangst

{

textBoxYposVid. Text = vidY + "";

}

}

private void checkBoxEnable_CheckedChanged (objectafzender, EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout(LayoutKind. Sequentiële)]

openbare structuur PUNT:

{

openbare int x;

openbaar int y;

}

}

Aanbevolen: