Spisu treści:
- Krok 1: Potrzebne komponenty
- Krok 2: Konfiguracja sprzętu
- Krok 3: Kod Arduino
- Krok 4: Kod aplikacji PC (C#.NET)
Wideo: Pilot Arduino Youtube do spania (Leobot Electronics): 4 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:29
Pilot Arduino Youtube
Jeśli korzystasz z YouTube, aby zapewnić Ci film lub muzykę do oglądania podczas snu, z pewnością obudziła Cię reklama wczytywania lub inny poziom głośności, gdy zaczyna się nowy film. Nie trzeba dodawać, że może to być dość irytujące.
Tak więc moim rozwiązaniem, które tutaj udowadniam, aby zbudować dla siebie, jest oparty na Arduino pilot zdalnego sterowania do interakcji z Youtube na odległość. Pilot jest wymagany do zmiany głównej głośności dźwięku mojego komputera, pomijania reklam na Youtube i pomijania filmów na Youtube.
W zestawie znajduje się również czujnik poziomu dźwięku, który określa, jak głośno jest głośnik, co z kolei może zostać wykorzystane do automatycznego obniżenia poziomu dźwięku po wykryciu głośnych zakłóceń, takich jak reklama.
Na koniec dodałem wykres w aplikacji na PC, aby wyświetlić wykryte poziomy dźwięku.
Rozwiązanie może być lepiej dopracowane, ale dla mnie spełnia zadanie.
Krok 1: Potrzebne komponenty
Wszystkie te komponenty są dostarczane przez Leobot Electronics (https://leobot.net)
1) Arduino UNO R3
leobot.net/viewproduct.aspx?id=530
2) PILOT 4 KANAŁOWY (315MHZ) + MODUŁ ODBIORNIKA (315MHZ)
leobot.net/viewproduct.aspx?id=521
3) MIKROFON MODUŁ CZUJNIKA GŁOSU I DŹWIĘKU (KY-037)
leobot.net/viewproduct.aspx?id=217
Oprogramowanie
1) Studio wizualne
visualstudio.microsoft.com/
2) IDE Arduino
www.arduino.cc/en/main/software
Krok 2: Konfiguracja sprzętu
1) Podłącz 4-kanałowy moduł odbiornika do Arduino.
4-kanałowy pin odbiornika-> pin Arduino Uno
GND->GND
5V->5V
D0->cyfrowe 2
D1->cyfrowe 3
D2->cyfrowy 4
D3->cyfrowy 5
2) Podłącz moduł mikrofonu KY-037 do Arduino
Mikrofon KY-037 Pin->Arduino Uno Pin
GND->GND
+->3,3V
A0->Analog 3
Krok 3: Kod Arduino
Przegląd
Logika, którą Arduino musi przestrzegać, jest następująca:
A) Sprawdź, czy odbiornik sygnalizuje jakiekolwiek piny.
B) W zależności od tego, na którym porcie IO sygnał jest odbierany, polecenie zostanie wysłane do komputera.
C) Po wykonaniu wszystkich czynności związanych ze zdalnym sterowaniem, wykryj poziom dźwięku za pomocą mikrofonu i wyślij go do komputera.
D) Wszystkie polecenia wysyłane do komputera mają format: najpierw znak, a następnie wartość (jeśli wartość jest potrzebna).
E) Istnieje pięć poleceń wysyłanych z Arduino do komputera!
a. „u” - zwiększanie głośności
b. „d” - Zmniejszenie głośności
C. „s” - Pomiń Dodaj
D. „v” – Pomiń wideo
mi. „a” – wykryty poziom dźwięku, po którym następuje wartość
Kod Arduino:
Pobierz kod Arduino tutaj:
int in1=2;
int in2=3;
int in3=4;
int in4=5;
pusta konfiguracja () {
Serial.początek(9600);
pinMode(A3, WEJŚCIE);
pinMode(we1, WEJŚCIE);
pinMode(we2, INPUT);
pinMode(we3, INPUT);
pinMode(we4, WEJŚCIE);
}
pusta pętla () {
if(odczyt cyfrowy(in1))
{
Serial.println("u");
opóźnienie (100);
}
if(odczyt cyfrowy(in2))
{
Serial.println("d");
opóźnienie (100);
}
if (odczyt cyfrowy (in3))
{
Serial.println("s");
opóźnienie (100);
}
if(odczyt cyfrowy(in4))
{
Serial.println("v");
opóźnienie (100);
}
int odczytWart=odczyt analogowy(A3);
Serial.println(String("a")+ String(readVal));
opóźnienie(50);
}
Krok 4: Kod aplikacji PC (C#. NET)
Aplikacja będzie nasłuchiwać przez port COM (USB) i reagować w zależności od otrzymanego polecenia. Najprostszym sposobem zwiększania i zmniejszania dźwięku na komputerze jest skorzystanie z usług Interrop w celu bezpośredniego komunikowania się z systemem operacyjnym Windows. Korzystamy również z usług Interrop, aby przesunąć mysz w określone miejsce na ekranie i kliknąć. Aby umożliwić różne ekrany i rozmiary widoków, umożliwiamy użytkownikowi określenie pozycji przycisków pomijania dodawania i pomijania wideo.
Używamy standardowego wykresu.net do wyświetlania dowolnych poleceń audio, które otrzymujemy.
Kod systemu Windows:
Pobierz cały projekt tutaj:
leobot.net/audioadjust.zip
korzystanie z Systemu;
za pomocą System. Collections. Generic;
przy użyciu System. ComponentModel;
za pomocą System. Data;
za pomocą System. Drawing;
za pomocą System. Linq;
za pomocą System. Text;
za pomocą System. Windows. Forms;
za pomocą System. Runtime. InteropServices;
za pomocą System. IO. Ports;
za pomocą System. Threading;
przestrzeń nazw AudioAdjust
{
public częściowa klasa Form1: Form
{
[DllImport("User32. Dll")]
public static extern long SetCursorPos(int x, int y);
[DllImport("User32. Dll")]
public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);
[DllImport("user32.dll", CharSet = CharSet. Auto, CallingConvention = CallingConvention. StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
//Akcje myszy
stała prywatna int MOUSEEVENTF_LEFTDOWN = 0x02;
stała prywatna int MOUSEEVENTF_LEFTUP = 0x04;
stała prywatna int MOUSEEVENTF_RIGHTDOWN = 0x08;
stała prywatna int MOUSEEVENTF_RIGHTUP = 0x10;
[DllImport("user32.dll")]
static extern void keybd_event(bajt bVk, bajt bScan, uint dwFlags, int dwExtraInfo);
Random aRand = nowy Random();
public int Ostatni Poziom = 0;
public int MaxLevel = 255;
statyczny SerialPort _serialPort;
int adX = 1281;
int adY = 706;
int vidX = 250;
int vidY = 780;
bool enableAudioChange = false;
publiczny formularz1()
{
InitializeComponent();
}
private void Form1_Load (nadawca obiektu, EventArgs e)
{
string names = System. IO. Ports. SerialPort. GetPortNames();
comboBoxPort. Items. AddRange(nazwy);
comboBoxPort. SelectedIndex = 0;
}
int bieżącyPunkt = 0;
private void button1_Click (nadawca obiektu, argumenty zdarzenia e)
{
_SerialPort = nowy SerialPort();
_serialPort. DataReceived += nowy SerialDataReceivedEventHandler(_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString();//Ustaw tablicę COM
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close();
w przeciwnym razie
{
_serialPort. Open();
}
// keybd_event((bajt)Klucze. VolumeDown, 0, 0, 0); // zmniejsz głośność
}
void _serialPort_DataReceived (nadawca obiektu, SerialDataReceivedEventArgs e)
{
próbować
{
string fullval = _serialPort. ReadLine();
string com = fullval[0]. ToString();
przełącznik (com)
{
przypadek „a”:
{
{
//poziom dźwięku
string val = fullval. Replace("a", "");
int valInt = int. Parse(val);
DodajDane(valInt);
}
przerwa;
}
przypadek „u”:
{
//dźwięk w górę
keybd_event((bajt)Klucze. Zwiększenie głośności, 0, 0, 0); // zmniejsz głośność
przerwa;
}
przypadek „d”:
{
//wyłączony dźwięk
keybd_event((bajt)Klucze. GłośnośćDown, 0, 0, 0); // zmniejsz głośność
przerwa;
}
sprawy :
{
//Pomiń reklamę
PrzesuńKursorPomińAd();
Wątek. Uśpienie(10);
DoMouseClick();
przerwa;
}
przypadek „v”:
{
//Pomiń reklamę
PrzesuńKursorPomińWideo();
Wątek. Uśpienie(10);
DoMouseClick();
przerwa;
}
}
}
łapać
{
}
//wyrzuć nowy NotImplementedException();
}
private void MoveCursorSkipAd()
{
Cursor. Position = nowy punkt (1140, 725);
Cursor. Position = new Point(adX, adY);
}
private void MoveCursorSkipVideo()
{
Cursor. Position = nowy punkt (1140, 725);
Cursor. Position = new Point(vidX, vidY);
}
public void DoMouseClick()
{
//Wywołaj zaimportowaną funkcję z aktualną pozycją kursora
uint X = (uint)Kursor. Pozycja. X;
uint Y = (uint) Kursor. Pozycja. Y;
mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
void AddData (poziom wewnętrzny)
{
jeśli (włączAudioChange)
{
jeśli (poziom >= MaxLevel)
{
keybd_event((bajt)Klucze. GłośnośćDown, 0, 0, 0); // zmniejsz głośność
keybd_event((bajt)Klucze. GłośnośćDown, 0, 0, 0); // zmniejsz głośność
keybd_event((bajt)Klucze. GłośnośćDown, 0, 0, 0); // zmniejsz głośność
}
w przeciwnym razie
{
jeśli (poziom < MaxLevel - 0)
{
keybd_event((bajt)Klucze. Zwiększenie głośności, 0, 0, 0); // zmniejsz głośność
}
}
}
SetChart(poziom);
aktualnyPunkt++;
}
deleguj void SetTextCallback(int val);
private void SetChart(int val)
{
// InvokeRequired wymagane porównuje identyfikator wątku
// wywołanie wątku na identyfikator wątku tworzącego wątku.
// Jeśli te wątki są różne, zwraca true.
if (this.chart1. InvokeRequired)
{
SetTextCallback d = nowy SetTextCallback(SetChart);
this. Invoke(d, nowy obiekt { val });
}
w przeciwnym razie
{
chart1. Seria[0]. Points. AddXY(0, val);
jeśli (bieżącyPunkt >= 10)
{
chart1. Series[0]. Points. RemoveAt(0);
}
}
}
private void textBoxLevel_TextChanged(nadawca obiektu, EventArgs e)
{
próbować
{
PoziomMaksymalny = int. Parse(PoziomPolaTekstowego. Tekst);
}
łapać
{
textBoxLevel. Text = MaxLevel + "";
}
}
private void buttonTestSkip_Click(object sender, EventArgs e)
{
PrzesuńKursorPomińAd();
Wątek. Uśpienie(10);
DoMouseClick();
}
private void textBoxXpos_TextChanged (nadawca obiektu, EventArgs e)
{
próbować
{
adX = int. Parse(pole tekstoweXpoz. Tekst);
}
łapać
{
textBoxXpos. Text = adX + "";
}
}
private void textBoxYpos_TextChanged (nadawca obiektu, EventArgs e)
{
próbować
{
adY = int. Parse(pole tekstoweYpoz. Tekst);
}
łapać
{
textBoxYpos. Text = adY + "";
}
}
private void buttonSkipVideo_Click(object sender, EventArgs e)
{
PrzesuńKursorPomińWideo();
Wątek. Uśpienie(10);
DoMouseClick();
}
private void textBoxXposVid_TextChanged (nadawca obiektu, EventArgs e)
{
próbować
{
vidX = int. Parse(textBoxXposVid. Text);
}
łapać
{
textBoxXposVid. Text = vidX + "";
}
}
private void textBoxYposVid_TextChanged (nadawca obiektu, EventArgs e)
{
próbować
{
vidY = int. Parse(textBoxYposVid. Text);
}
łapać
{
textBoxYposVid. Text = vidY + "";
}
}
private void checkBoxEnable_CheckedChanged (nadawca obiektu, EventArgs e)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout(Layout Kind. Sequential)]
struktura publiczna POINT
{
publiczne int x;
int publicznej;
}
}
Zalecana:
Czujnik podczerwieni Arduino i pilot z wyświetlaczem LCD: 4 kroki
Czujnik podczerwieni Arduino i pilot z wyświetlaczem LCD: Jesteśmy grupą studentów UQD10801 (Robocon1) z Universiti Tun Hussein Onn Malaysia (UTHM)W tym samouczku dowiesz się, jak wyświetlać przyciski pilota na podczerwień na wyświetlaczu ciekłokrystalicznym (LCD) ) za pomocą Arduino Uno R3. Ten samouczek będzie
Muzyka do spania z maską na oczy: 5 kroków
Eye Mask Sleeping Music: To projekt, który pozwala lepiej spać w nocy, polegać na wolnej wersji świątecznej piosenki na masce na oczy
Słuchawki do spania: 5 kroków
Słuchawki do spania: Ten projekt opiera się na SleepPhone wykonanym przez akustyczną owcę, jest wygodny i cienki, dzięki czemu możesz słuchać ulubionej muzyki, podcastów lub asmr leżąc w łóżku. Nie wymaga żadnego programowania ani specjalnych narzędzi do zrób to (
Pilot na PC Youtube i Netflix: 9 kroków (ze zdjęciami)
Remote dla PC Youtube i Netflix: Mam licznik PC z dala od łóżka, więc naturalnie lubię oglądać youtube i filmy w zaciszu mojego łóżka. Za każdym razem, gdy się kładę, muszę dostosować głośność, wstrzymać wideo z jakichś powodów lub po prostu całkowicie pominąć wideo
Arduino UNO CO-pilot (Auto-pilot): 6 kroków
Arduino UNO a CO-pilot (Autopilot): Witam wszystkich, zamieszczam mały system autopilota dla samolotu RC ze stałymi skrzydłami (Sky surfer V3), ponieważ sky surfer v3 jest szybowcem z napędem, możemy używać tego systemu autopilota podczas ślizga się, a nawet gdy jest zasilany. Przed rozpoczęciem mojego pomysłu na auto