INHOUDSOPGAWE:
- Stap 1: Komponente benodig
- Stap 2: hardeware -opstelling
- Stap 3: Arduino -kode
- Stap 4: PC App -kode (C#.NET)
Video: Arduino Youtube -afstandsbediening vir slaap (Leobot Electronics): 4 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
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)
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:
IR -termometer vir slaap: 5 stappe
IR -termometer vir slaap: hierdie Lazy Old Geek (L.O.G.) het onlangs 'n IR -termiese module, MLX90614, van AliExpress.com gekoop. Sien foto's Dit is dieselfde tipe sensor wat gebruik word in die voorkop- en oortermometers wat in die derde prentjie getoon word. Hulle word nie-kontak genoem omdat
Slaap maklik: 5 stappe (met foto's)
Slaap maklik: Hallo, my naam is Jakob. Ek is allergies vir huisstofmyte en ek het asma. Dit is die inspirasie vir hierdie projek. Vir my eerste jaar van MCT het ons 'n opdrag gekry om 'n projek van nuuts af te maak met behulp van al die kennis wat ons hierdie jaar opgedoen het. Ek het gekies om m
Weerstasie: ESP8266 Met diep slaap, SQL, grafiek volgens fles en plots: 3 stappe
Weerstasie: ESP8266 Met diep slaap, SQL, grafiek deur fles en plots: sou dit lekker wees om die temperatuur, humiditeit of ligintensiteit op u balkon te weet? Ek weet ek sou. Ek het dus 'n eenvoudige weerstasie gemaak om sulke data te versamel. Die volgende afdelings is die stappe wat ek geneem het om een te bou: laat ons begin
N Gids om u Arduino aan die slaap te maak: 5 stappe
N Gids om u Arduino aan die slaap te maak: soms is ons in 'n situasie wat vereis dat ons 'n Arduino op 'n plek moet plaas waar dit nie 'n opsie is om dit aan te sluit nie. Dit gebeur gereeld as ons probeer om inligting op 'n afgeleë webwerf aan te meld, of slegs u Arduino aktief hoef te wees op 'n
DIY Dodow Clone Arduino slaap meditasie masjien: 4 stappe (met foto's)
DIY Dodow Clone Arduino Slaapmeditasie -masjien: Sinkroniseer u asemhaling met die gloeiende ligte om u asemhaling te verlaag en hopelik makliker aan die slaap te raak