สารบัญ:

Arduino Youtube Remote Control for Sleeping (Leobot Electronics): 4 ขั้นตอน
Arduino Youtube Remote Control for Sleeping (Leobot Electronics): 4 ขั้นตอน

วีดีโอ: Arduino Youtube Remote Control for Sleeping (Leobot Electronics): 4 ขั้นตอน

วีดีโอ: Arduino Youtube Remote Control for Sleeping (Leobot Electronics): 4 ขั้นตอน
วีดีโอ: Omni Pendulum 2024, พฤศจิกายน
Anonim
Arduino Youtube Remote Control สำหรับการนอนหลับ (Leobot Electronics)
Arduino Youtube Remote Control สำหรับการนอนหลับ (Leobot Electronics)

Arduino Youtube Remote

หากคุณใช้ Youtube เพื่อจัดหาภาพยนตร์หรือเพลงให้คุณดูในขณะนอนหลับ คุณจะต้องตื่นขึ้นจากโฆษณาโหลดหรือระดับเสียงที่แตกต่างกันเมื่อภาพยนตร์ใหม่เริ่มต้นขึ้น จำเป็นต้องพูดสิ่งนี้อาจทำให้ระคายเคืองได้

ดังนั้น วิธีแก้ปัญหาของฉัน ฉันพิสูจน์ให้คุณเห็นที่นี่เพื่อสร้างสำหรับตัวคุณเองคือรีโมตคอนโทรลที่ใช้ Arduino เพื่อโต้ตอบกับ Youtube ในระยะไกล ต้องใช้รีโมทเพื่อเปลี่ยนระดับเสียงหลักของพีซี ข้ามโฆษณาบน Youtube และข้ามวิดีโอบน Youtube

รวมทั้งยังมีเซ็นเซอร์ระดับเสียงเพื่อกำหนดว่าลำโพงจริงดังแค่ไหน ซึ่งสามารถใช้เพื่อลดระดับเสียงโดยอัตโนมัติเมื่อตรวจพบการรบกวนที่ดังเช่นโฆษณา

สุดท้ายนี้ ฉันได้เพิ่มแผนภูมิในแอป PC เพื่อแสดงระดับเสียงที่ตรวจพบ

โซลูชันสามารถปรับปรุงให้ดีขึ้นได้ แต่สำหรับฉัน วิธีนี้ทำให้งานสำเร็จ

ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น

ส่วนประกอบทั้งหมดเหล่านี้จัดทำโดย Leobot Electronics (https://leobot.net)

1) Arduino UNO R3

leobot.net/viewproduct.aspx?id=530

2) รีโมท 4 ช่อง (315MHZ) + โมดูลรับสัญญาณ (315MHZ)

leobot.net/viewproduct.aspx?id=521

3) โมดูลเซ็นเซอร์ตรวจจับเสียงและเสียงไมโครโฟน (KY-037)

leobot.net/viewproduct.aspx?id=217

ซอฟต์แวร์

1) วิชวลสตูดิโอ

visualstudio.microsoft.com/

2) Arduino IDE

www.arduino.cc/en/main/software

ขั้นตอนที่ 2: การตั้งค่าฮาร์ดแวร์

1) เชื่อมต่อโมดูลตัวรับสัญญาณ 4-Channel กับ Arduino

4-Channel Receiver Pin->Arduino Uno Pin

GND->GND

5V->5V

D0->ดิจิตอล2

D1->ดิจิตอล3

D2->ดิจิตอล4

D3->ดิจิตอล 5

2) เชื่อมต่อโมดูลไมโครโฟน KY-037 กับ Arduino

ไมโครโฟน KY-037 Pin->Arduino Uno Pin

GND->GND

+->3.3V

A0->อนาล็อก 3

ขั้นตอนที่ 3: รหัส Arduino

ภาพรวม

ตรรกะที่ Arduino ต้องปฏิบัติตามมีดังนี้:

A) ตรวจสอบว่าเครื่องรับส่งสัญญาณพินใด ๆ หรือไม่

B) ขึ้นอยู่กับพอร์ต IO ที่รับสัญญาณคือสิ่งที่คำสั่งจะถูกส่งไปยังพีซี

C) เมื่อดำเนินการกับรีโมทคอนโทรลเสร็จแล้ว ให้ตรวจหาระดับเสียงด้วยไมโครโฟนแล้วส่งไปยังพีซี

D) คำสั่งทั้งหมดที่ส่งไปยังพีซีมีรูปแบบเป็นอันดับแรกที่มีอักขระแล้วจึงมีค่า (หากต้องการค่า)

E) มีห้าคำสั่งที่ส่งจาก Arduino ไปยัง PC

NS. “คุณ” - เพิ่มระดับเสียง

NS. “d” - ลดระดับเสียง

ค. “s” - ข้ามเพิ่ม

NS. “v” - ข้ามวิดีโอ

อี “a” - ตรวจพบระดับเสียงตามด้วยค่า

รหัส Arduino:

ดาวน์โหลด Arduino Code ได้ที่นี่:https://leobot.net/audiousb.zip

int in1=2;

int in2=3;

int ใน3=4;

int in4=5;

การตั้งค่าเป็นโมฆะ () {

Serial.begin(9600);

โหมดพิน (A3, INPUT);

โหมดพิน (in1, INPUT);

โหมดพิน (in2, INPUT);

โหมดพิน (in3, INPUT);

โหมดพิน (in4, INPUT);

}

วงเป็นโมฆะ () {

ถ้า(ดิจิตอลอ่าน(in1))

{

Serial.println("u");

ล่าช้า (100);

}

ถ้า(digitalRead(in2))

{

Serial.println("d");

ล่าช้า (100);

}

if(digitalRead(in3))

{

Serial.println("s");

ล่าช้า (100);

}

ถ้า(digitalRead(in4))

{

Serial.println("v");

ล่าช้า (100);

}

int readVal= analogRead (A3);

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

ล่าช้า (50);

}

ขั้นตอนที่ 4: รหัสแอปพีซี (C#. NET)

รหัสแอปพีซี (C#. NET)
รหัสแอปพีซี (C#. NET)

แอพจะฟังผ่านพอร์ต COM (USB) และตอบสนองขึ้นอยู่กับว่าได้รับคำสั่งใด วิธีที่ง่ายที่สุดในการเปิดเสียงบนพีซีคือการใช้บริการ Interrop เพื่อพูดกับ Windows OS โดยตรง นอกจากนี้เรายังใช้บริการ Interrop เพื่อเลื่อนเมาส์ไปยังตำแหน่งเฉพาะบนหน้าจอแล้วคลิก เพื่อให้สามารถแสดงหน้าจอและขนาดการดูที่แตกต่างกันได้ เราอนุญาตให้ผู้ใช้ระบุตำแหน่งของปุ่มข้ามเพิ่มและข้ามวิดีโอ

เราใช้แผนภูมิ.net มาตรฐานเพื่อแสดงคำสั่งเสียงที่เราได้รับ

รหัส Windows:

ดาวน์โหลดโครงการเต็มได้ที่นี่:

leobot.net/audioadjust.zip

การใช้ระบบ

ใช้ System. Collections. Generic;

ใช้ System. ComponentModel;

ใช้ System. Data;

ใช้ System. Drawing;

ใช้ System. Linq;

ใช้ System. Text;

ใช้ System. Windows. Forms;

ใช้ System. Runtime. InteropServices;

ใช้ System. IO. Ports;

ใช้ System. Threading;

เนมสเปซ AudioAdjust

{

คลาสบางส่วนสาธารณะ Form1: Form

{

[DllImport("User32. Dll")]

SetCursorPos แบบยาวภายนอกแบบคงที่สาธารณะ (int x, int y);

[DllImport("User32. Dll")]

บูลภายนอกแบบคงที่สาธารณะ ClientToScreen (IntPtr hWnd, อ้างอิงจุด POINT);

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

โมฆะภายนอกแบบคงที่สาธารณะ mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

//การกระทำของเมาส์

ส่วนตัว const int MOUSEEVENTF_LEFTDOWN = 0x02;

ส่วนตัว const int MOUSEEVENTF_LEFTUP = 0x04;

int const ส่วนตัว MOUSEEVENTF_RIGHTDOWN = 0x08;

ส่วนตัว const int MOUSEEVENTF_RIGHTUP = 0x10;

[DllImport("user32.dll")]

static extern void keybd_event (ไบต์ bVk, ไบต์ bScan, uint dwFlags, int dwExtraInfo);

Random aRand = สุ่มใหม่ ();

int สาธารณะ LastLevel = 0;

int สาธารณะ MaxLevel = 255;

SerialPort แบบคงที่ _serialPort;

int adX = 1281;

int โฆษณา = 706;

int vidX = 250;

int vidY = 780;

บูล enableAudioChange = เท็จ;

แบบฟอร์มสาธารณะ1()

{

InitializeComponent();

}

โมฆะส่วนตัว Form1_Load (ผู้ส่งวัตถุ EventArgs e)

{

ชื่อสตริง = System. IO. Ports. SerialPort. GetPortNames();

comboBoxPort. Items. AddRange (ชื่อ);

comboBoxPort. SelectedIndex = 0;

}

int currentPoint = 0;

โมฆะส่วนตัว button1_Click (ผู้ส่งอ็อบเจ็กต์ EventArgs e)

{

_serialPort = SerialPort ใหม่ ();

_serialPort. DataReceived += SerialDataReceivedEventHandler ใหม่ (_serialPort_DataReceived);

_serialPort. PortName = comboBoxPort. SelectedItem. ToString();// ตั้งค่าบอร์ดของคุณ COM

_serialPort. BaudRate = 9600;

ถ้า (_serialPort. IsOpen) _serialPort. Close();

อื่น

{

_serialPort. Open();

}

// keybd_event ((ไบต์) Keys. VolumeDown, 0, 0, 0); // ลดเสียง

}

เป็นโมฆะ _serialPort_DataReceived (ผู้ส่งวัตถุ SerialDataReceivedEventArgs e)

{

ลอง

{

สตริง fullval = _serialPort. ReadLine();

สตริง com = fullval[0]. ToString();

สวิตช์ (คอม)

{

กรณี "a":

{

{

// ระดับเสียง

สตริง val = fullval. Replace("a", "");

int valInt = int. Parse (วาล);

เพิ่มข้อมูล (valInt);

}

หยุดพัก;

}

กรณี "u":

{

//เปิดเสียง

keybd_event((ไบต์)Keys. VolumeUp, 0, 0, 0); // ลดเสียง

หยุดพัก;

}

กรณี "d":

{

//เสียงลง

keybd_event ((ไบต์) Keys. VolumeDown, 0, 0, 0); // ลดเสียง

หยุดพัก;

}

กรณี "s":

{

//ข้ามโฆษณา

ย้ายเคอร์เซอร์ข้ามโฆษณา();

เธรดการนอนหลับ(10);

DoMouseClick();

หยุดพัก;

}

กรณี "วี":

{

//ข้ามโฆษณา

ย้ายเคอร์เซอร์ข้ามวิดีโอ ();

เธรดการนอนหลับ(10);

DoMouseClick();

หยุดพัก;

}

}

}

จับ

{

}

// โยนใหม่ NotImplementedException();

}

โมฆะส่วนตัว MoveCursorSkipAd()

{

Cursor. Position = จุดใหม่ (1140, 725);

Cursor. Position = จุดใหม่ (adX, adY);

}

โมฆะส่วนตัว MoveCursorSkipVideo()

{

Cursor. Position = จุดใหม่ (1140, 725);

Cursor. Position = จุดใหม่ (vidX, vidY);

}

โมฆะสาธารณะ DoMouseClick()

{

//เรียกใช้ฟังก์ชันที่นำเข้าด้วยตำแหน่งปัจจุบันของเคอร์เซอร์

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

uint Y = (uint) เคอร์เซอร์. ตำแหน่ง. Y;

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

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

}

เป็นโมฆะ AddData (ระดับ int)

{

ถ้า (เปิดใช้งานAudioChange)

{

ถ้า (ระดับ >= MaxLevel)

{

keybd_event ((ไบต์) Keys. VolumeDown, 0, 0, 0); // ลดเสียง

keybd_event ((ไบต์) Keys. VolumeDown, 0, 0, 0); // ลดเสียง

keybd_event ((ไบต์) Keys. VolumeDown, 0, 0, 0); // ลดเสียง

}

อื่น

{

ถ้า (ระดับ < MaxLevel - 0)

{

keybd_event((ไบต์)Keys. VolumeUp, 0, 0, 0); // ลดเสียง

}

}

}

SetChart(ระดับ);

จุดปัจจุบัน++;

}

ผู้รับมอบสิทธิ์เป็นโมฆะ SetTextCallback (int val);

โมฆะส่วนตัว SetChart (int val)

{

// InvokeRequired required เปรียบเทียบ ID เธรดของ

// เรียกเธรดไปยัง ID เธรดของเธรดที่สร้าง

// ถ้า thread เหล่านี้ต่างกัน มันจะคืนค่า true

ถ้า (this.chart1. InvokeRequired)

{

SetTextCallback d = SetTextCallback ใหม่ (SetChart);

this. Invoke (d, วัตถุใหม่ { val });

}

อื่น

{

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

ถ้า (currentPoint >= 10)

{

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

}

}

}

โมฆะส่วนตัว textBoxLevel_TextChanged (ผู้ส่งวัตถุ EventArgs e)

{

ลอง

{

MaxLevel = int. Parse (textBoxLevel. Text);

}

จับ

{

textBoxLevel. Text = MaxLevel + "";

}

}

ปุ่มโมฆะส่วนตัวTestSkip_Click (ผู้ส่งวัตถุ, EventArgs e)

{

ย้ายเคอร์เซอร์ข้ามโฆษณา();

เธรดการนอนหลับ(10);

DoMouseClick();

}

โมฆะส่วนตัว textBoxXpos_TextChanged (ผู้ส่งวัตถุ EventArgs e)

{

ลอง

{

adX = int. Parse (textBoxXpos. Text);

}

จับ

{

textBoxXpos. Text = adX + "";

}

}

โมฆะส่วนตัว textBoxYpos_TextChanged (ผู้ส่งวัตถุ EventArgs e)

{

ลอง

{

adY = int. Parse (textBoxYpos. Text);

}

จับ

{

textBoxYpos. Text = โฆษณา + "";

}

}

ปุ่มโมฆะส่วนตัวSkipVideo_Click(ผู้ส่งวัตถุ, EventArgs e)

{

ย้ายเคอร์เซอร์ข้ามวิดีโอ();

เธรดการนอนหลับ(10);

DoMouseClick();

}

โมฆะส่วนตัว textBoxXposVid_TextChanged (ผู้ส่งวัตถุ EventArgs e)

{

ลอง

{

vidX = int. Parse (textBoxXposVid. Text);

}

จับ

{

textBoxXposVid. Text = vidX + "";

}

}

โมฆะส่วนตัว textBoxYposVid_TextChanged (ผู้ส่งวัตถุ EventArgs e)

{

ลอง

{

vidY = int. Parse (textBoxYposVid. Text);

}

จับ

{

textBoxYposVid. Text = vidY + "";

}

}

โมฆะส่วนตัว checkBoxEnable_CheckedChanged (ผู้ส่งวัตถุ EventArgs e)

{

enableAudioChange = checkBoxEnable. Checked;

}

}

[StructLayout(LayoutKind. Sequential)]

โครงสร้างสาธารณะ POINT

{

สาธารณะ int x;

int สาธารณะ y;

}

}

แนะนำ: