Πίνακας περιεχομένων:

Τηλεχειριστήριο Arduino Youtube για ύπνο (Leobot Electronics): 4 βήματα
Τηλεχειριστήριο Arduino Youtube για ύπνο (Leobot Electronics): 4 βήματα

Βίντεο: Τηλεχειριστήριο Arduino Youtube για ύπνο (Leobot Electronics): 4 βήματα

Βίντεο: Τηλεχειριστήριο Arduino Youtube για ύπνο (Leobot Electronics): 4 βήματα
Βίντεο: Видеоуроки по Arduino #1: Первые шаги 2024, Ιούλιος
Anonim
Τηλεχειριστήριο Arduino Youtube για ύπνο (Leobot Electronics)
Τηλεχειριστήριο Arduino Youtube για ύπνο (Leobot Electronics)

Τηλεχειριστήριο 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)

Κωδικός εφαρμογής PC (C#. NET)
Κωδικός εφαρμογής 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?

}

}

Συνιστάται: