תוכן עניינים:
וִידֵאוֹ: שלט רחוק Arduino Youtube לשינה (לאובוט אלקטרוניקה): 4 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:14
מרחוק Youtube של Arduino
אם אתה משתמש ב- YouTube כדי לספק לך סרט או מוזיקה לצפייה בזמן השינה, בוודאי היה מתעורר על ידי מודעת טעינה או רמות עוצמה שונות כאשר סרט חדש מתחיל. מיותר לציין שזה יכול להיות מעצבן למדי.
לכן, הפתרון שלי שאני מוכיח לכם כאן לבנות לעצמכם הוא שלט רחוק מבוסס Arduino לאינטראקציה עם Youtube מרחוק. השלט נדרש כדי לשנות את עוצמת הקול העיקרית של המחשב האישי שלי, לדלג על פרסומות ביוטיוב ולדלג על סרטונים ביוטיוב.
כמו כן, כלול חיישן רמת שמע כדי לקבוע עד כמה הרמקול באמת חזק, אשר בתורו ניתן להשתמש בו להורדה אוטומטית של רמת הקול בעת זיהוי הפרעות חזקות כגון מודעה.
לבסוף, הוספתי תרשים באפליקציית המחשב כדי להציג את רמות השמע שזוהו.
אפשר לשכלל את הפתרון טוב יותר אבל מבחינתי הוא מבצע את המשימה.
שלב 1: דרושים רכיבים
כל הרכיבים הללו מסופקים על ידי Leobot Electronics (https://leobot.net)
1) ארדואינו UNO R3
leobot.net/viewproduct.aspx?id=530
2) 4 ערוצים מרחוק (315 מגה -הרץ) + מודול מקלט (315 מגה -הרץ)
leobot.net/viewproduct.aspx?id=521
3) מודול חיישן זיהוי קול וקול מיקרופון (KY-037)
leobot.net/viewproduct.aspx?id=217
תוֹכנָה
1) Visual Studio
visualstudio.microsoft.com/
2) Arduino IDE
www.arduino.cc/en/main/software
שלב 2: התקנת חומרה
1) חבר את מודול המקלט של 4 ערוצים ל- Arduino.
פין מקלט 4-ערוצים-> סיכת אונו Arduino
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: קוד ארדואינו
סקירה כללית
ההיגיון שצריך לעקוב אחר הארדואינו הוא כדלקמן:
א) בדוק אם המקלט מסמן סיכות כלשהן.
ב) תלוי באיזו יציאת IO האות יתקבל היא איזו פקודה תישלח למחשב.
ג) לאחר שתעשה את כל פעולות השלט הרחוק, זיהה את רמת השמע עם המיקרופון ושלח אותו למחשב האישי.
ד) לכל הפקודות שנשלחות למחשב יש פורמט של תחילה בעל תו ואז ערך (אם יש צורך בערך).
ה) ישנן חמש פקודות שנשלחות מהארדואינו למחשב האישי
א. "U" - הגברת עוצמת הקול
ב. "D" - הורדת עוצמת הקול
ג. “S” - דלג על הוספה
ד. "V" - דלג על סרטון
ה. "A" - רמת האודיו זוהתה ואחריה הערך
קוד הארדואינו:
הורד את קוד Arduino כאן:
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
הגדרת בטל () {
Serial.begin (9600);
pinMode (A3, INPUT);
pinMode (in1, INPUT);
pinMode (in2, INPUT);
pinMode (in3, INPUT);
pinMode (in4, INPUT);
}
לולאת חלל () {
אם (digitalRead (in1))
{
Serial.println ("u");
עיכוב (100);
}
אם (digitalRead (in2))
{
Serial.println ("d");
עיכוב (100);
}
אם (digitalRead (in3))
{
Serial.println ("s");
עיכוב (100);
}
אם (digitalRead (in4))
{
Serial.println ("v");
עיכוב (100);
}
int readVal = analogRead (A3);
Serial.println (מחרוזת ("a")+ מחרוזת (readVal));
עיכוב (50);
}
שלב 4: קוד אפליקציות PC (C#. NET)
האפליקציה תקשיב מעל יציאת ה- COM (USB) ותגיב בהתאם לפקודה המתקבלת. הדרך הפשוטה ביותר להעלות ולרדת את הצליל במחשב היא להשתמש בשירותי Interrop כדי לדבר ישירות עם מערכת ההפעלה Windows. אנו משתמשים גם בשירותי אינטרופ כדי להזיז את העכבר למיקום ספציפי על המסך ולחץ. על מנת לאפשר מסכים וגדלי צפייה שונים, אנו מאפשרים למשתמש לציין את המיקום של לחצני הווידאו של הוספה ודילוג.
אנו משתמשים בתרשים.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
{
מעמד חלקי ציבורי טופס 1: טופס
{
[DllImport ("User32. Dll")]
ציבורי סטטי חיצוני ארוך SetCursorPos (int x, int y);
[DllImport ("User32. Dll")]
ציבור סטטי חיצוני bool ClientToScreen (IntPtr hWnd, נקודת ref ref);
[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);
// פעולות עכבר
const const int MOUSEEVENTF_LEFTDOWN = 0x02;
const const int MOUSEEVENTF_LEFTUP = 0x04;
const const int MOUSEEVENTF_RIGHTDOWN = 0x08;
const const int MOUSEEVENTF_RIGHTUP = 0x10;
[DllImport ("user32.dll")]
static extern void keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
Random aRand = new Random ();
public int LastLevel = 0;
public int MaxLevel = 255;
סטטי SerialPort _serialPort;
int adX = 1281;
int adY = 706;
int vidX = 250;
int vidY = 780;
bool enableAudioChange = false;
טופס ציבורי 1 ()
{
InitializeComponent ();
}
טופס ריק_טען פרטי (שולח אובייקט, EventArgs e)
{
string names = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (שמות);
comboBoxPort. SelectedIndex = 0;
}
int currentPoint = 0;
כפתור חלל פרטי1_קליק (שולח אובייקט, EventArgs e)
{
_serialPort = SerialPort חדש ();
_serialPort. DataReceived += new SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // הגדר את COM הלוח שלך
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close ();
אַחֵר
{
_serialPort. Open ();
}
// keybd_event ((בייט) Keys. VolumeDown, 0, 0, 0); // להקטין את עוצמת הקול
}
void _serialPort_DataReceived (שולח אובייקט, SerialDataReceivedEventArgs e)
{
לְנַסוֹת
{
string fullval = _serialPort. ReadLine ();
string com = fullval [0]. ToString ();
לעבור (com)
{
מקרה "א":
{
{
// רמת שמע
string val = fullval. Replace ("a", "");
int valInt = int. Parse (val);
AddData (valInt);
}
לשבור;
}
מקרה "אתה":
{
// שמע למעלה
keybd_event ((בייט) Keys. VolumeUp, 0, 0, 0); // להקטין את עוצמת הקול
לשבור;
}
מקרה "d":
{
// שמע למטה
keybd_event ((בייט) Keys. VolumeDown, 0, 0, 0); // להקטין את עוצמת הקול
לשבור;
}
מקרה "s":
{
//לדלג על מודעה
MoveCursorSkipAd ();
חוט. שינה (10);
DoMouseClick ();
לשבור;
}
מקרה "v":
{
//לדלג על מודעה
MoveCursorSkipVideo ();
חוט. שינה (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) Cursor. Position. Y;
אירוע עכבר (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
אירוע עכבר (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
חלל AddData (רמה int)
{
if (enableAudioChange)
{
אם (רמה> = מקס רמה)
{
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 (רמה);
currentPoint ++;
}
נציג void SetTextCallback (int val);
SetChart של חלל פרטי (int val)
{
// InvokeRequired required משווה את מזהה האשכול של
// קורא חוט אל מזהה האשכול של השרשור היוצר.
// אם האשכולות הללו שונים, הוא חוזר נכון.
if (this.chart1. InvokeRequired)
{
SetTextCallback d = SetTextCallback חדש (SetChart);
this. Invoke (ד, אובייקט חדש {val});
}
אַחֵר
{
chart1. Series [0]. Points. AddXY (0, val);
אם (currentPoint> = 10)
{
chart1. Series [0]. Points. RemoveAt (0);
}
}
}
private void textBoxLevel_TextChanged (שולח אובייקט, EventArgs e)
{
לְנַסוֹת
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
לתפוס
{
textBoxLevel. Text = MaxLevel + "";
}
}
כפתור חלל פרטי TestSkip_Click (שולח אובייקט, EventArgs e)
{
MoveCursorSkipAd ();
חוט. שינה (10);
DoMouseClick ();
}
טקסט חלל פרטי BoxXpos_TextChanged (שולח אובייקט, EventArgs e)
{
לְנַסוֹת
{
adX = int. Parse (textBoxXpos. Text);
}
לתפוס
{
textBoxXpos. Text = adX + "";
}
}
private private textBoxYpos_TextChanged (שולח אובייקט, EventArgs e)
{
לְנַסוֹת
{
adY = int. Parse (textBoxYpos. Text);
}
לתפוס
{
textBoxYpos. Text = adY + "";
}
}
כפתור חלל פרטי SlipVideo_Click (שולח אובייקט, EventArgs e)
{
MoveCursorSkipVideo ();
חוט. שינה (10);
DoMouseClick ();
}
טקסט חלל פרטי BoxXposVid_TextChanged (שולח אובייקט, EventArgs e)
{
לְנַסוֹת
{
vidX = int. Parse (textBoxXposVid. Text);
}
לתפוס
{
textBoxXposVid. Text = vidX + "";
}
}
private void textBoxYposVid_TextChanged (שולח אובייקט, EventArgs e)
{
לְנַסוֹת
{
vidY = int. Parse (textBoxYposVid. Text);
}
לתפוס
{
textBoxYposVid. Text = vidY + "";
}
}
check private void checkBoxEnable_CheckedChanged (שולח אובייקט, EventArgs e)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
public struct POINT
{
public int x;
ציבורי int y;
}
}
מוּמלָץ:
מד חום IR לשינה: 5 שלבים
מד חום IR לשינה: אז החנון העצלן העצל הזה (L.O.G.) רכש לאחרונה מודול תרמי IR, MLX90614 מ- AliExpress.com. ראה תמונות זהו אותו סוג של חיישן המשמש במדחומי המצח והאוזן המוצגים בתמונה השלישית. הם נקראים ללא מגע בגלל
בנה 15 $ $ שלט -רובוט באטלר / מכונית / טנק בשלט רחוק בשלט רחוק ל- iOS ו- Android: 4 שלבים
בנו 15 $ נשלט מרחוק ESP8266 רובוט באטלר / מכונית / טנק עבור iOS ו- Android: האם אתם שונאים ללכת למטבח לחטוף חטיף? או לקבל משקה חדש? ניתן לתקן את כל זה באמצעות משרת פשוט בשליטה מרחוק של $ 15. לפני שאנו הולכים רחוק יותר אני מפעיל פרויקט Kickstarter כרגע עבור רצועת LED RGB נשלטת
IRduino: שלט רחוק Arduino - חיקוי שלט אבוד: 6 שלבים
IRduino: שלט רחוק Arduino - חיקוי שלט רחוק: אם איבדת את השלט הרחוק לטלוויזיה או לנגן ה- DVD שלך, אתה יודע כמה זה מתסכל להיות צריך ללכת, למצוא ולהשתמש בכפתורים במכשיר עצמו. לפעמים הכפתורים האלה אפילו לא מציעים את אותה פונקציונליות כמו השלט. קבל
ערכת שלט רחוק רגילה השתנתה לשלט רחוק צעצוע RC בעל 4 ערוצים: 4 שלבים
ערכת שלט רחוק רגילה שהפכה לשלט רחוק צעצוע RC בעל 4 ערוצים: 如何 将 通用 遥控 套件 转换 为 为 模型 中 的 四 62 62 62 62改造 方法 非常 简单 只需 只需 准备 瓦楞纸 板 , 然后 按照 教程 完成 完成 这个 项目 并 您 服务 服务 车船 提供 提供
מיקרוסקופ אלקטרוניקה אלקטרוניקה זול של Microsoft Lifecam Studio: 4 שלבים (עם תמונות)
מיקרוסקופ אלקטרוניקה זול של Microsoft Lifecam Studio: אם כך, אני בחורה חנונית שמשקרנת להתעסק עם אלקטרוניקה, אבל אני גם זולה, והחזון שלי הוא לא הטוב ביותר. הוסיפו את העובדה כי הלחמת SMT היא באמת קשה ללא הגדלה, והחלטתי לקנות אחד ממיקרוסקופי ה- USB המחורבנים של $ 14