สารบัญ:
- ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น
- ขั้นตอนที่ 2: การตั้งค่าฮาร์ดแวร์
- ขั้นตอนที่ 3: รหัส Arduino
- ขั้นตอนที่ 4: รหัสแอปพีซี (C#.NET)
วีดีโอ: Arduino Youtube Remote Control for Sleeping (Leobot Electronics): 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
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)
แอพจะฟังผ่านพอร์ต 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;
}
}
แนะนำ:
Arduino Browser Based Remote Control (linux): 9 ขั้นตอน (พร้อมรูปภาพ)
Arduino Browser Based Remote Control (linux): เรามีลูกแล้ว ฉันชอบมันมาก แต่พวกเขายังคงซ่อนรีโมทคอนโทรลสำหรับดาวเทียมและทีวีเมื่อพวกเขาเปิดช่องสำหรับเด็ก หลังจากสิ่งนี้เกิดขึ้นทุกวันเป็นเวลาหลายปีและหลังจากที่ภรรยาที่รักของฉันอนุญาตให้ฉันมี
IR Remote Control สำหรับคอมพิวเตอร์ของคุณด้วย Arduino: 6 ขั้นตอน
IR Remote Control สำหรับคอมพิวเตอร์ของคุณด้วย Arduino: ด้วยตัวรับสัญญาณนี้ ควบคุมคอมพิวเตอร์ของคุณจากระยะไกลด้วยโมดูล IR และ Arduino เปิดโหมด Lazzy แล้ว ^^
IRduino: Arduino Remote Control - เลียนแบบรีโมทที่หายไป: 6 ขั้นตอน
IRduino: Arduino Remote Control - เลียนแบบรีโมทที่สูญหาย: หากคุณเคยทำรีโมทควบคุมสำหรับทีวีหรือเครื่องเล่น DVD หาย คุณรู้ดีว่ามันน่าหงุดหงิดแค่ไหนที่จะต้องเดินไปหา และใช้ปุ่มต่างๆ ที่ตัวอุปกรณ์เอง ในบางครั้ง ปุ่มเหล่านี้ไม่มีฟังก์ชันการทำงานเหมือนกับรีโมตด้วยซ้ำ รับ
Tim's Cybot Arduino NANO Remote Control: 31 ขั้นตอน (พร้อมรูปภาพ)
Tim's Cybot Arduino NANO Remote Control: โครงการนี้คือการสร้างรีโมทคอนโทรลอินฟราเรดเพื่อควบคุม Cybot ดั้งเดิมที่ได้รับพร้อมกับนิตยสาร Ultimate Real Robots ซึ่งเริ่มต้นขึ้นในปี 2544 เหตุผลในการสร้างรีโมต:(ประวัติเล็กน้อย) ก่อนเกิดปัญหา ชิ้นส่วนสำหรับเครื่อง IR,
แปลง IR Remote ของคุณเป็น RF Remote: 9 ขั้นตอน (พร้อมรูปภาพ)
แปลง IR Remote ของคุณเป็น RF Remote: ในคำแนะนำของวันนี้ ฉันจะแสดงให้คุณเห็นว่าคุณสามารถใช้โมดูล RF ทั่วไปได้อย่างไรโดยไม่ต้องใช้ไมโครคอนโทรลเลอร์ ซึ่งในที่สุดจะนำเราไปสู่การสร้างโครงการที่คุณสามารถแปลง IR Remote ของอุปกรณ์ใดๆ เป็น RF ระยะไกล. ข้อได้เปรียบหลักของการแปลงเป็น