Πίνακας περιεχομένων:
- Βήμα 1: Απαιτούνται εξαρτήματα
- Βήμα 2: Ρύθμιση υλικού
- Βήμα 3: Κωδικός Arduino
- Βήμα 4: Κωδικός εφαρμογής PC (C#.NET)
Βίντεο: Τηλεχειριστήριο Arduino Youtube για ύπνο (Leobot Electronics): 4 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:34
Τηλεχειριστήριο Arduino Youtube
Εάν χρησιμοποιείτε το 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) Visual Studio
visualstudio.microsoft.com/
2) Arduino IDE
www.arduino.cc/en/main/software
Βήμα 2: Ρύθμιση υλικού
1) Συνδέστε τη μονάδα δέκτη 4 καναλιών στο Arduino.
Καρφίτσα δέκτη 4 καναλιών-> Arduino Uno Pin
GND-> GND
5V-> 5V
D0-> Digitalηφιακό 2
D1-> Digitalηφιακό 3
D2-> Digitalηφιακό 4
D3-> Digitalηφιακό 5
2) Συνδέστε τη μονάδα μικροφώνου KY-037 στο Arduino
Μικρόφωνο KY-037 Pin-> Arduino Uno Pin
GND-> GND
+-> 3,3V
A0-> Αναλογικό 3
Βήμα 3: Κωδικός Arduino
ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ
Η λογική που πρέπει να ακολουθήσει το Arduino είναι η εξής:
Α) Ελέγξτε εάν ο δέκτης σηματοδοτεί τυχόν ακίδες.
Β) Ανάλογα με ποια θύρα IO λαμβάνεται το σήμα, ποια είναι η εντολή που θα σταλεί στον υπολογιστή.
Γ) Μόλις τελειώσετε με όλες τις ενέργειες τηλεχειρισμού, εντοπίστε το επίπεδο ήχου με το μικρόφωνο και στείλτε το στον υπολογιστή.
Δ) Όλες οι εντολές που αποστέλλονται στον Η / Υ έχουν μια μορφή που πρώτα έχουν χαρακτήρα και μετά τιμή (αν απαιτείται τιμή).
Ε) Υπάρχουν πέντε εντολές που αποστέλλονται από το Arduino στον υπολογιστή
ένα. "U" - Αύξηση έντασης
σι. "D" - Μείωση έντασης
ντο. "S" - Παράλειψη προσθήκης
ρε. "V" - Παράλειψη βίντεο
μι. "A" - Εντοπίστηκε επίπεδο ήχου ακολουθούμενο από την τιμή
Ο κώδικας Arduino:
Κατεβάστε τον κώδικα Arduino εδώ:
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
void setup () {
Serial.begin (9600);
pinMode (A3, INPUT);
pinMode (in1, INPUT);
pinMode (in2, INPUT);
pinMode (in3, INPUT);
pinMode (in4, INPUT);
}
void loop () {
εάν (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 (String ("a")+ String (readVal));
καθυστέρηση (50)?
}
Βήμα 4: Κωδικός εφαρμογής PC (C#. NET)
Η εφαρμογή θα ακούσει τη θύρα COM (USB) και θα αντιδράσει ανάλογα με την εντολή που λαμβάνεται. Ο απλούστερος τρόπος για να γυρίσετε τον ήχο πάνω και κάτω στον υπολογιστή είναι να χρησιμοποιήσετε τις υπηρεσίες Interrop για να μιλήσετε απευθείας στο λειτουργικό σύστημα Windows. Χρησιμοποιούμε επίσης τις υπηρεσίες 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")]
δημόσιο στατικό εξωτερικό bool ClientToScreen (IntPtr hWnd, ref σημείο POINT);
[DllImport ("user32.dll", CharSet = CharSet. Auto, CallingConvention = CallingConvention. StdCall)]
δημόσιο στατικό εξωτερικό κενό mouse_event (uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
// Ενέργειες ποντικιού
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
ιδιωτικό const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
[DllImport ("user32.dll")]
στατικό εξωτερικό κενό keybd_event (byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
Τυχαίο aRand = νέο Τυχαίο ();
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 ();
}
ιδιωτικό κενό Form1_Load (αποστολέας αντικειμένων, EventArgs e)
{
string names = System. IO. Ports. SerialPort. GetPortNames ();
comboBoxPort. Items. AddRange (ονόματα);
comboBoxPort. SelectedIndex = 0;
}
int currentPoint = 0;
ιδιωτικό κουμπί κενό1_Click (αποστολέας αντικειμένων, EventArgs e)
{
_serialPort = νέο SerialPort ();
_serialPort. DataReceived += νέο SerialDataReceivedEventHandler (_serialPort_DataReceived);
_serialPort. PortName = comboBoxPort. SelectedItem. ToString (); // Ρυθμίστε το COM της πλακέτας σας
_serialPort. BaudRate = 9600;
if (_serialPort. IsOpen) _serialPort. Close ();
αλλού
{
_serialPort. Open ();
}
// keybd_event ((byte) 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. Ανάλυση (val);
AddData (valInt);
}
Διακοπή;
}
περίπτωση "u":
{
// αναβάθμιση ήχου
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // μείωση έντασης
Διακοπή;
}
περίπτωση "d":
{
// Απενεργοποίηση ήχου
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // μείωση έντασης
Διακοπή;
}
περίπτωση "s":
{
//παράκαμψη διαφήμισης
MoveCursorSkipAd ();
Θέμα. Leepπνος (10).
DoMouseClick ();
Διακοπή;
}
περίπτωση "v":
{
//παράκαμψη διαφήμισης
MoveCursorSkipVideo ();
Θέμα. Leepπνος (10).
DoMouseClick ();
Διακοπή;
}
}
}
σύλληψη
{
}
// ρίξτε νέο NotImplementedException ();
}
ιδιωτικό κενό MoveCursorSkipAd ()
{
Δρομέας. Θέση = νέο σημείο (1140, 725);
Δρομέας. Θέση = νέο Σημείο (adX, adY);
}
ιδιωτικό κενό MoveCursorSkipVideo ()
{
Δρομέας. Θέση = νέο σημείο (1140, 725);
Δρομέας. Θέση = νέο Σημείο (vidX, vidY);
}
δημόσιο κενό DoMouseClick ()
{
// Καλέστε την εισαγόμενη συνάρτηση με την τρέχουσα θέση του δρομέα
uint X = (uint) Cursor. Position. X;
uint Y = (uint) Cursor. Position. Y;
mouse_event (MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
mouse_event (MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
άκυρο AddData (επίπεδο int)
{
εάν (enableAudioChange)
{
εάν (επίπεδο> = MaxLevel)
{
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // μείωση έντασης
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // μείωση έντασης
keybd_event ((byte) Keys. VolumeDown, 0, 0, 0); // μείωση έντασης
}
αλλού
{
εάν (επίπεδο <MaxLevel - 0)
{
keybd_event ((byte) Keys. VolumeUp, 0, 0, 0); // μείωση έντασης
}
}
}
SetChart (επίπεδο);
currentPoint ++;
}
εξουσιοδότηση κενό SetTextCallback (int val);
ιδιωτικό κενό SetChart (int val)
{
// Το InvokeRequired required συγκρίνει το αναγνωριστικό νήματος του
// κλήση νήματος στο αναγνωριστικό νήματος του νήματος δημιουργίας.
// Εάν αυτά τα νήματα είναι διαφορετικά, επιστρέφει true.
if (this.chart1. InvokeRequired)
{
SetTextCallback d = νέο SetTextCallback (SetChart);
this. Invoke (d, new object {val});
}
αλλού
{
γράφημα 1. Σειρές [0]. Σημεία. AddXY (0, val);
εάν (currentPoint> = 10)
{
γράφημα 1. Σειρές [0]. Σημεία. Αφαίρεση σε (0).
}
}
}
ιδιωτικό κενό textBoxLevel_TextChanged (αποστολέας αντικειμένων, EventArgs e)
{
προσπαθήστε
{
MaxLevel = int. Parse (textBoxLevel. Text);
}
σύλληψη
{
textBoxLevel. Text = MaxLevel + "";
}
}
ιδιωτικό κενό κουμπίTestSkip_Click (αποστολέας αντικειμένων, EventArgs e)
{
MoveCursorSkipAd ();
Θέμα. Leepπνος (10).
DoMouseClick ();
}
ιδιωτικό κενό κείμενοBoxXpos_TextChanged (αποστολέας αντικειμένων, EventArgs e)
{
προσπαθήστε
{
adX = int. Parse (textBoxXpos. Text);
}
σύλληψη
{
textBoxXpos. Text = adX + "";
}
}
ιδιωτικό κενό textBoxYpos_TextChanged (αποστολέας αντικειμένων, EventArgs e)
{
προσπαθήστε
{
adY = int. Parse (textBoxYpos. Text);
}
σύλληψη
{
textBoxYpos. Text = adY + "";
}
}
ιδιωτικό κουμπί άκυρου SkipVideo_Click (αποστολέας αντικειμένων, EventArgs e)
{
MoveCursorSkipVideo ();
Θέμα. Leepπνος (10).
DoMouseClick ();
}
ιδιωτικό κενό κείμενοBoxXposVid_TextChanged (αποστολέας αντικειμένων, EventArgs e)
{
προσπαθήστε
{
vidX = int. Parse (textBoxXposVid. Text);
}
σύλληψη
{
textBoxXposVid. Text = vidX + "";
}
}
ιδιωτικό κενό κείμενοBoxYposVid_TextChanged (αποστολέας αντικειμένων, EventArgs e)
{
προσπαθήστε
{
vidY = int. Parse (textBoxYposVid. Text);
}
σύλληψη
{
textBoxYposVid. Text = vidY + "";
}
}
private void checkBoxEnable_CheckedChanged (αποστολέας αντικειμένων, EventArgs e)
{
enableAudioChange = checkBoxEnable. Checked;
}
}
[StructLayout (LayoutKind. Sequential)]
δημόσιο δομή ΣΗΜΕΙΟ
{
δημόσιο int x;
public int y?
}
}
Συνιστάται:
Θερμόμετρο IR για ύπνο: 5 βήματα
Θερμόμετρο IR για ύπνο: Αυτό το Lazy Old Geek (L.O.G.) αγόρασε πρόσφατα μια θερμική μονάδα IR, MLX90614 από το AliExpress.com. Αυτός είναι ο ίδιος τύπος αισθητήρα που χρησιμοποιείται σε εκείνα τα θερμόμετρα μετώπου και αυτιού που εμφανίζονται στην τρίτη εικόνα. Λέγονται χωρίς επαφή γιατί
IRduino: Τηλεχειριστήριο Arduino - Μιμήστε ένα χαμένο τηλεχειριστήριο: 6 βήματα
IRduino: Arduino Remote Control - Imitate a Lost Remote: Αν έχετε χάσει ποτέ το τηλεχειριστήριο της τηλεόρασης ή του DVD player σας, γνωρίζετε πόσο απογοητευτικό είναι να περπατάτε, να βρίσκετε και να χρησιμοποιείτε τα κουμπιά της ίδιας της συσκευής. Μερικές φορές, αυτά τα κουμπιά δεν προσφέρουν καν την ίδια λειτουργικότητα με το τηλεχειριστήριο. Λήψη
Οδηγός για τον ύπνο του Arduino: 5 βήματα
Οδηγός για τον ύπνο του Arduino: Μερικές φορές βρισκόμαστε σε μια κατάσταση που απαιτεί από εμάς να τοποθετήσουμε ένα Arduino σε ένα μέρος όπου η σύνδεση του στο δίκτυο δεν είναι επιλογή. Αυτό συμβαίνει συχνά όταν προσπαθούμε να καταγράψουμε πληροφορίες σε απομακρυσμένο ιστότοπο ή χρειάζεται μόνο να έχουμε το Arduino σας ενεργό σε μια
Κάντε την Alexa Mute στο τηλέφωνό σας όταν πηγαίνετε για ύπνο: 6 βήματα
Κάντε την Alexa Mute στο τηλέφωνό σας όταν πηγαίνετε για ύπνο: Κάντε την alexa να σβήσει το τηλέφωνό σας όταν πηγαίνετε για ύπνο χρησιμοποιώντας IFTTT και συσκευή ηχώ
Τηλεχειριστήριο για μικρά παιδιά για PC Video Player: 6 βήματα
Toddler Video Remote for PC Video Player: Δημιουργώ ένα τηλεχειριστήριο που συνδέεται σε έναν υπολογιστή με USB. Το μεγάλο τηλεχειριστήριο επιτρέπει στο παιδί μου να επιλέγει και να παίζει βίντεο σε έναν παλιό υπολογιστή. Αυτό είναι ένα σχετικά απλό έργο. Το βασικό στοιχείο είναι είτε ένα πληκτρολόγιο USB είτε ένα ασύρματο πληκτρολόγιο USB. Στη συνέχεια