Inhoudsopgave:
- Stap 1: Benodigde onderdelen
- Stap 2: Hardware-installatie
- Stap 3: Arduino-code
- Stap 4: PC-app-code (C#.NET)
Video: Arduino YouTube-afstandsbediening voor slapen (Leobot Electronics) - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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)
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:
Installatie voor externe Bluetooth GPS-provider voor Android-apparaten: 8 stappen
Installatie voor externe Bluetooth GPS-provider voor Android-apparaten: deze instructable legt uit hoe u uw eigen externe Bluetooth-compatibele GPS voor uw telefoon kunt maken, wat dan ook voor ongeveer $ 10. Materiaallijst: NEO 6M U-blox GPSHC-05 bluetooth-module Kennis van interface Blutooth Low energy-modulesArdui
De beknopte handleiding voor het maken van een video met uw iPhone en het uploaden naar Facebook of YouTube: 9 stappen
De beknopte handleiding voor het maken van een video met uw iPhone en het uploaden naar Facebook of YouTube: gebruik dit eenvoudige proces van 5 stappen (Instructables laat het lijken op meer stappen dan het in werkelijkheid is) om uw eerste YouTube- of Facebook-video te maken en te uploaden - met slechts je iPhone
Een Arduino-bibliotheek maken voor YouTube Sight: 7 stappen
Een Arduino-bibliotheek maken voor YouTube Sight: Hallo allemaal, ik heb onlangs een service gebouwd met de naam YouTube Sight die abonneegegevens kan extraheren uit de YouTube Analytics API en u nauwkeurigere abonneetellingen kan geven sinds YouTube de resultaten begon te verzamelen. Hiermee heb ik een voorbeeld gebouwd
Idee voor doe-het-zelf-activiteit voor weerstations voor 12+ jaar: 4 stappen
Idee voor doe-het-zelf-weerstationactiviteit voor 12-plussers: in deze activiteit zullen deelnemers hun weerstation opzetten, de lucht in sturen en de opnames (licht, temperatuur, vochtigheid) in realtime volgen via de Blynk-app. Bovendien leert u hoe u de geregistreerde waarden publiceert
Relaisbord voor Arduino voor minder dan $8: 5 stappen
Relaisbord voor Arduino voor minder dan $8.: Hallo vrienden, vandaag ga ik je vertellen hoe je een relaisbord voor Arduino maakt voor minder dan $8. In dit circuit gaan we geen IC of transistor gebruiken. Dus laten we het doen