Arduino ομαλή ενεργοποίηση ενός RGB LED από ένα κουμπί. Έλεγχος φωτεινότητας LED με χρήση ποτενσιόμετρου. Περιγραφή του προγράμματος για το Arduino

Σε αυτό το πείραμα, προσθέτουμε ένα μέρος της φωτεινότητας στο LED με το ένα κουμπί και το μειώνουμε με το άλλο.

ΚΑΤΑΛΟΓΟΣ ΜΕ ΜΕΡΗ ΓΙΑ ΤΟ ΠΕΙΡΑΜΑ

- 1 πλακέτα Arduino Uno

- 1 breadboard χωρίς συγκόλληση

- 2 κουμπιά ρολογιού

- 1 αντίσταση με ονομαστική τιμή 220 Ohms.

- 1 LED;

- 7 σύρματα αρσενικό-αρσενικό.

ΔΙΑΓΡΑΜΜΑ ΚΥΚΛΩΜΑΤΟΣ

ΔΙΑΓΡΑΜΜΑ ΣΕ ΠΛΑΚΑ

ΣΗΜΕΙΩΣΗ

  • Εάν επεξεργάζεστε ξανά το κύκλωμα από το προηγούμενο πείραμα, σημειώστε ότι αυτή τη φορά πρέπει να συνδέσουμε το LED σε μια θύρα που υποστηρίζει PWM.

ΣΚΙΤΣΟ

κατεβάστε το σκίτσο για το Arduino IDE
#define PLUS_BUTTON_PIN 2 #define MINUS_BUTTON_PIN 3 #define LED_PIN 9 int φωτεινότητα = 100; boolean plusUp = true; boolean minusUp = true; void setup() ( pinMode(LED_PIN, OUTPUT); pinMode(PLUS_BUTTON_PIN, INPUT_PULLUP); pinMode(MINUS_BUTTON_PIN, INPUT_PULLUP); ) void loop() ( analogWrite(LED_PIN, φωτεινότητα); // απαντάμε στα κλικ συν). = handleClick(PLUS_BUTTON_PIN, plusUp, +35); minusUp = handleClick(MINUS_BUTTON_PIN, minusUp, -35); ) // Ίδια λειτουργία με 3 παραμέτρους: ο αριθμός pin με το κουμπί // (buttonPin), η κατάσταση πριν από την επαλήθευση (wasUp ) και διαβάθμιση // της φωτεινότητας όταν κάνετε κλικ στο κουμπί (δέλτα). Η συνάρτηση επιστρέφει // (Αγγλικά επιστροφή) πίσω τη νέα, τρέχουσα κατάσταση του κουμπιού boolean handleClick(int buttonPin, boolean wasUp, int delta) ( boolean isUp = digitalRead(buttonPin); if (wasUp && !isUp) ( delay(10 ); isUp = digitalRead(buttonPin); // αν έγινε κλικ, αλλάξτε τη φωτεινότητα από 0 σε 255 εάν (!isUp) φωτεινότητα = περιορισμός (φωτεινότητα + δέλτα, 0, 255); ) επιστρέψτε isUp; // επιστρέψτε το η τιμή πίσω στον κωδικό καλούντος)

ΕΞΗΓΗΣΕΙΣ ΓΙΑ ΤΟΝ ΚΩΔ

  • Μπορούμε να χρησιμοποιήσουμε όχι μόνο ενσωματωμένες λειτουργίες, αλλά και να δημιουργήσουμε τις δικές μας. Αυτό δικαιολογείται όταν χρειάζεται να επαναλάβουμε τις ίδιες ενέργειες σε διαφορετικά σημεία του κώδικα ή, για παράδειγμα, πρέπει να εκτελέσουμε τις ίδιες ενέργειες σε διαφορετικά δεδομένα, όπως σε αυτήν την περίπτωση: επεξεργασία του σήματος από τις ψηφιακές θύρες 2 και 3.
  • Μπορείτε να ορίσετε τις δικές σας συναρτήσεις οπουδήποτε στον κώδικα εκτός του κώδικα άλλων συναρτήσεων. Στο παράδειγμά μας, ορίσαμε μια συνάρτηση μετά βρόχος .
  • Για να ορίσουμε τη δική μας λειτουργία χρειαζόμαστε:
    • Δηλώστε τον τύπο δεδομένων που θα επιστρέψει. Στην περίπτωσή μας είναι boolean. Εάν η συνάρτηση εκτελεί μόνο ορισμένες ενέργειες και δεν επιστρέφει καμία τιμή, χρησιμοποιήστε τη λέξη-κλειδί κενός
    • Εκχωρήστε στη συνάρτηση ένα όνομα - αναγνωριστικό. Εδώ ισχύουν οι ίδιοι κανόνες όπως όταν ονομάζουμε μεταβλητές και σταθερές. Οι συναρτήσεις ονομάζονται με το ίδιο στυλ likeΜεταβλητές .
    • Σε παρένθεση, παραθέστε τις παραμέτρους που μεταβιβάστηκαν στη συνάρτηση, υποδεικνύοντας τον τύπο καθεμιάς. Αυτή είναι μια δήλωση μεταβλητών που είναι ορατές μέσα στη συνάρτηση που δημιουργήθηκε πρόσφατα και μόνο μέσα σε αυτήν. Για παράδειγμα, εάν σε αυτό το πείραμα προσπαθήσουμε να έχουμε πρόσβαση wasUpή είναι μέχριαπό βρόχος()Θα λάβουμε ένα μήνυμα σφάλματος από τον μεταγλωττιστή. Ομοίως, οι μεταβλητές που δηλώνονται στο βρόχος, δεν είναι ορατές σε άλλες συναρτήσεις, αλλά οι τιμές τους μπορούν να περάσουν ως παράμετροι.
    • Ανάμεσα σε ένα ζευγάρι σγουρά τιράντες, γράψτε τον κώδικα που εκτελείται από τη συνάρτηση
    • Εάν η συνάρτηση πρέπει να επιστρέψει κάποια τιμή, χρησιμοποιήστε τη λέξη-κλειδί ΕΠΙΣΤΡΟΦΗκαθορίστε ποια τιμή θα επιστρέψετε. Αυτή η τιμή πρέπει να είναι του τύπου που δηλώσαμε
  • Οι λεγόμενες καθολικές μεταβλητές, δηλ. Οι μεταβλητές που μπορούν να προσπελαστούν από οποιαδήποτε συνάρτηση δηλώνονται συνήθως στην αρχή του προγράμματος. Στην περίπτωσή μας, αυτό είναι λάμψη .
  • Μέσα στη συνάρτηση που δημιουργήσαμε handleClickΣυμβαίνει το ίδιο όπως στο πείραμα.
  • Δεδομένου ότι με ένα βήμα αύξησης φωτεινότητας 35, μετά από όχι περισσότερα από οκτώ συνεχόμενα κλικ σε ένα από τα κουμπιά, η τιμή της έκφρασης φωτεινότητα + δέλταθα βγει εκτός του διαστήματος . Χρησιμοποιώντας τη λειτουργία περιορίζωπεριορίζουμε τις επιτρεπόμενες τιμές για τη μεταβλητή λάμψηκαθορισμένα όρια διαστήματος.
  • Στην έκφραση plusUp = handleClick(PLUS_BUTTON_ ΚΑΡΦΙΤΣΑ , plusUp, +35)έχουμε πρόσβαση στη μεταβλητή plusUpεις διπλούν. Επειδή η = βάζει την τιμή του δεξιού τελεστέου στον αριστερό, υπολογίζοντας πρώτα τι θα επιστρέψει handleClick. Όταν λοιπόν της δίνουμε plusUpΩς παράμετρος, εξακολουθεί να έχει την παλιά τιμή που υπολογίστηκε κατά την τελευταία κλήση handleClick .
  • Μέσα handleClickΥπολογίζουμε τη νέα τιμή φωτεινότητας LED και την γράφουμε σε μια καθολική μεταβλητή λάμψη, που σε κάθε επανάληψη βρόχοςμόλις πέρασε σε αναλογικήΓράψτε .

ΕΡΩΤΗΣΕΙΣ ΓΙΑ ΝΑ ΔΟΚΙΜΑΣΕΤΕ ΤΟΝ ΕΑΥΤΟ ΣΑΣ

  1. Τι σημαίνει η λέξη-κλειδί; κενός ?
  2. Πώς συμπεριφέρεται ένα πρόγραμμα όταν αναφέρεται μια μεταβλητή από διαφορετικές πλευρές του τελεστή εκχώρησης = ?

ΚΑΘΗΚΟΝΤΑ ΓΙΑ ΑΝΕΞΑΡΤΗΤΗ ΛΥΣΗ

  1. Τροποποιήστε τον κωδικό έτσι ώστε το βήμα αλλαγής φωτεινότητας να προσαρμόζεται σε ένα σημείο.
  2. Δημιουργήστε μια άλλη συνάρτηση και επεξεργαστείτε ξανά τον κώδικα έτσι ώστε μια συνάρτηση να είναι υπεύθυνη για την παρακολούθηση των πλήκτρων και μια άλλη να είναι υπεύθυνη για τον υπολογισμό της φωτεινότητας της λυχνίας LED και την επιστροφή της στο αναλογικήΓράψτε .

Τώρα ας δούμε το πολύχρωμο LED, το οποίο συχνά ονομάζεται συντομογραφία: RGB LED. Το RGB είναι μια συντομογραφία που σημαίνει: Κόκκινο - κόκκινο, Πράσινο - πράσινο, Μπλε - μπλε. Δηλαδή, τρία ξεχωριστά LED τοποθετούνται μέσα σε αυτή τη συσκευή. Ανάλογα με τον τύπο, ένα RGB LED μπορεί να έχει μια κοινή κάθοδο ή μια κοινή άνοδο.

1. Ανάμειξη χρωμάτων

Γιατί ένα RGB LED είναι καλύτερο από τρία συμβατικά; Όλα έχουν να κάνουν με την ικανότητα της όρασής μας να αναμειγνύει φως από διαφορετικές πηγές τοποθετημένες η μία κοντά στην άλλη. Για παράδειγμα, αν τοποθετήσουμε μπλε και κόκκινα LED το ένα δίπλα στο άλλο, τότε σε απόσταση αρκετών μέτρων η λάμψη τους θα ενωθεί και το μάτι θα δει μια μωβ κουκκίδα. Και αν προσθέσουμε και πράσινο, η κουκκίδα θα μας φαίνεται λευκή. Έτσι ακριβώς λειτουργούν οι οθόνες υπολογιστών, οι τηλεοράσεις και οι οθόνες εξωτερικού χώρου. Η μήτρα τηλεόρασης αποτελείται από μεμονωμένες κουκκίδες διαφορετικών χρωμάτων. Εάν πάρετε έναν μεγεθυντικό φακό και κοιτάξετε μέσα από αυτόν στην ενεργοποιημένη οθόνη, μπορείτε εύκολα να δείτε αυτές τις κουκκίδες. Αλλά σε μια εξωτερική οθόνη, οι κουκκίδες δεν τοποθετούνται πολύ πυκνά, ώστε να διακρίνονται με γυμνό μάτι. Όμως από απόσταση πολλών δεκάδων μέτρων αυτά τα σημεία δεν διακρίνονται. Αποδεικνύεται ότι όσο πιο κοντά είναι οι πολύχρωμες κουκκίδες μεταξύ τους, τόσο λιγότερη απόσταση χρειάζεται το μάτι για να αναμίξει αυτά τα χρώματα. Εξ ου και το συμπέρασμα: σε αντίθεση με τρία ξεχωριστά LED, η ανάμειξη χρωμάτων ενός RGB LED είναι αισθητή ήδη σε απόσταση 30-70 εκ. Παρεμπιπτόντως, ένα LED RGB με ματ φακό αποδίδει ακόμα καλύτερα.

2. Σύνδεση LED RGB στο Arduino

Δεδομένου ότι το πολύχρωμο LED αποτελείται από τρία κανονικά LED, θα τα συνδέσουμε ξεχωριστά. Κάθε LED συνδέεται με τη δική του ακίδα και έχει τη δική του ξεχωριστή αντίσταση. Σε αυτό το σεμινάριο χρησιμοποιούμε ένα RGB LED με κοινή κάθοδο, επομένως θα υπάρχει μόνο ένα καλώδιο στη γείωση. Σχηματικό διάγραμμα
Εμφάνιση διάταξης

3. Πρόγραμμα για έλεγχο LED RGB

Ας συνθέσουμε ένα απλό πρόγραμμα, το οποίο θα ανάψει κάθε ένα από τα τρία χρώματα με τη σειρά του. const byte rPin = 3; const byte gPin = 5; byte const bPin = 6; void setup() ( pinMode(rPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(bPin, OUTPUT); ) void loop() ( // απενεργοποίηση μπλε, ενεργοποίηση κόκκινου digitalWrite(bPin, LOW); digitalWrite( rPin, HIGH); καθυστέρηση (500); // απενεργοποίηση κόκκινου, ενεργοποίηση πράσινου digitalWrite(rPin, LOW); digitalWrite(gPin, HIGH); καθυστέρηση (500); // απενεργοποίηση πράσινου, ενεργοποίηση μπλε digitalWrite(gPin , LOW); digitalWrite ( bPin, HIGH), καθυστέρηση (500); ) Φορτώστε το πρόγραμμα στο Arduino και παρατηρήστε το αποτέλεσμα. Το πρόγραμμα περιήγησής σας δενυποστήριξη της ετικέτας βίντεο. Ας βελτιστοποιήσουμε λίγο το πρόγραμμα: αντί για τις μεταβλητές rPin, gPin και bPin, θα χρησιμοποιήσουμε έναν πίνακα. Αυτό θα μας βοηθήσει στις επόμενες εργασίες. const byte rgbPins = (3,5,6); void setup() ( for(byte i=0; i<3; i++) pinMode(rgbPins[i], OUTPUT); } void loop() { digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); }

4. Επτά χρώματα του ουράνιου τόξου

Τώρα ας προσπαθήσουμε να ανάψουμε δύο χρώματα ταυτόχρονα. Ας προγραμματίσουμε την ακόλουθη σειρά χρωμάτων:
  • το κόκκινο
  • κόκκινο + πράσινο = κίτρινο
  • πράσινος
  • πράσινο + μπλε = γαλάζιο
  • μπλε
  • μπλε + κόκκινο = μωβ
Παραλείψαμε το πορτοκαλί χρώμα για απλότητα. Έτσι, αποδείχθηκε ότι ήταν έξι χρώματα του ουράνιου τόξου 🙂 const byte rgbPins = (3,5,6); const byte ουράνιο τόξο = ( (1,0,0), // κόκκινο (1,1,0), // κίτρινο (0,1,0), // πράσινο (0,1,1), // μπλε ( 0,0,1), // μπλε (1,0,1), // μωβ ); void setup() ( for(byte i=0; i<3; i++) pinMode(rgbPins[i], OUTPUT); } void loop() { // перебираем все шесть цветов for(int i=0; i<6; i++){ // перебираем три компоненты каждого из шести цветов for(int k=0; k<3; k++){ digitalWrite(rgbPins[k], rainbow[i][k]); } delay(1000); } } В результате работы программы получается: Your browser does not support the video tag.

5. Ομαλή αλλαγή χρώματος

Δεν ήταν τυχαίο που συνδέσαμε το RGB LED στις ακίδες 3, 5 και 6. Όπως γνωρίζετε, αυτές οι ακίδες σας επιτρέπουν να δημιουργήσετε ένα σήμα PWM διαφορετικών κύκλων λειτουργίας. Με άλλα λόγια, δεν μπορούμε απλώς να ανάψουμε ή να απενεργοποιήσουμε το LED, αλλά να ελέγξουμε το επίπεδο τάσης σε αυτό. Αυτό γίνεται χρησιμοποιώντας τη συνάρτηση αναλογικήΓράψτε. Ας βεβαιωθούμε ότι το LED μας θα μεταβεί μεταξύ των χρωμάτων του ουράνιου τόξου όχι απότομα, αλλά ομαλά. const byte rgbPins = (3,5,6); int dim = 1; void setup() ( for(byte i=0; i<3; i++){ pinMode(rgbPins[i], OUTPUT); } // начальное состояние - горит красный цвет analogWrite(rgbPins, 255); analogWrite(rgbPins, 0); analogWrite(rgbPins, 0); } void loop() { // гасим красный, параллельно разжигаем зеленый for(int i=255; i>=0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); delay(10); ) // απενεργοποίηση πράσινου, ενεργοποίηση μπλε παράλληλα για(int i=255 ; i> =0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); καθυστέρηση(10); ) // απενεργοποίηση μπλε, ενεργοποίηση κόκκινου παράλληλα for(int i=255; i>=0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); delay(10); ) ) Η μεταβλητή dim καθορίζει τη φωτεινότητα της λάμψης. Στο dim = 1 έχουμε μέγιστη φωτεινότητα. Φορτώστε το πρόγραμμα στο Arduino. Το πρόγραμμα περιήγησής σας δεν υποστηρίζει την ετικέτα βίντεο.

Καθήκοντα

  1. Ένδειξη θερμοκρασίας. Ας προσθέσουμε ένα θερμίστορ στο κύκλωμα και ας το συνδέσουμε στην αναλογική είσοδο. Το LED θα πρέπει να αλλάζει χρώμα ανάλογα με τη θερμοκρασία του θερμίστορ. Όσο χαμηλότερη είναι η θερμοκρασία, τόσο πιο μπλε είναι το χρώμα και όσο υψηλότερη είναι η θερμοκρασία, τόσο πιο κόκκινο.
  2. Λάμπα RGB με ρυθμιστή. Ας προσθέσουμε τρεις μεταβλητές αντιστάσεις στο κύκλωμα και ας τις συνδέσουμε στις αναλογικές εισόδους. Το πρόγραμμα θα πρέπει να διαβάζει συνεχώς τις τιμές της αντίστασης και να αλλάζει το χρώμα του αντίστοιχου στοιχείου LED RGB.

Σε αυτό το παράδειγμα, θα μάθετε πώς να αλλάζετε τη φωτεινότητα ενός LED χρησιμοποιώντας αντιστάσεις με διαφορετικές αντιστάσεις.

Για αυτό το παράδειγμα θα χρειαστείτε

1 LED διαμέτρου 5mm

Αντίσταση 1 270 ohm (κόκκινο, μωβ, καφέ)

Αντίσταση 1 470 ohm (κίτρινο, μωβ, καφέ)

1 αντίσταση 2,2 kOhm (κόκκινο, κόκκινο, κόκκινο)

1 αντίσταση 10 kOhm (καφέ, μαύρο, πορτοκαλί)

LED - γενικές πληροφορίες

Τα LED χρησιμεύουν καλά σε συσκευές για διάφορους τύπους ενδείξεων. Καταναλώνουν λίγο ρεύμα και είναι ανθεκτικά.

Σε αυτό το παράδειγμα, χρησιμοποιούμε τα πιο συνηθισμένα LED με διάμετρο 5 mm. Επίσης κοινά είναι τα LED με διάμετρο 3 χιλιοστών και τα μεγάλα LED με διάμετρο 10 mm.

Δεν συνιστάται η απευθείας σύνδεση του LED σε μπαταρία ή πηγή τάσης. Πρώτον, πρέπει πρώτα να καταλάβετε πού ακριβώς το LED έχει τα αρνητικά και τα θετικά σκέλη του. Λοιπόν, δεύτερον, είναι απαραίτητο να χρησιμοποιήσετε αντιστάσεις περιορισμού ρεύματος, διαφορετικά το LED θα καεί πολύ γρήγορα.

Εάν δεν χρησιμοποιήσετε αντίσταση με το LED, το LED θα αποτύχει πολύ γρήγορα επειδή θα περάσει πολύ ρεύμα μέσα από αυτό. Ως αποτέλεσμα, η λυχνία LED θα θερμανθεί και η λυχνία παραγωγής επαφής θα καταστραφεί.

Υπάρχουν δύο τρόποι διάκρισης μεταξύ των θετικών και αρνητικών σκελών ενός LED.

Το πρώτο είναι ότι το θετικό πόδι είναι μακρύτερο.

Το δεύτερο είναι ότι κατά την είσοδο στο περίβλημα της ίδιας της διόδου, υπάρχει μια επίπεδη άκρη στον αρνητικό συνδετήρα του ποδιού.

Εάν συναντήσετε ένα LED που έχει επίπεδη άκρη στο μακρύτερο πόδι, το μακρύτερο πόδι εξακολουθεί να είναι θετικό.

Αντιστάσεις - γενικές πληροφορίες

Αντίσταση - αντίσταση (Αγγλικά)

Όπως υποδηλώνει το όνομα, οι αντιστάσεις αντιστέκονται στη ροή του ηλεκτρισμού. Όσο μεγαλύτερη είναι η τιμή (ohms) της αντίστασης, τόσο μεγαλύτερη είναι η αντίσταση και τόσο λιγότερο ρεύμα θα διαρρέει το κύκλωμα στο οποίο είναι εγκατεστημένη. Θα χρησιμοποιήσουμε αυτήν την ιδιότητα των αντιστάσεων για να ρυθμίσουμε το ρεύμα που διέρχεται από το LED και συνεπώς τη φωτεινότητά του.

Αλλά πρώτα, ας μιλήσουμε λίγο για τις αντιστάσεις.

Οι μονάδες στις οποίες μετράται η αντίσταση είναι τα Ohm, τα οποία σε πολλές πηγές συμβολίζονται με το ελληνικό γράμμα Ω - Ωμέγα Δεδομένου ότι το Ohm είναι μια μικρή τιμή αντίστασης (σχεδόν ανεπαίσθητη σε ένα κύκλωμα), συχνά λειτουργούμε με μονάδες όπως kOhm - kiloohm (1000 Ohm) και MOhm megaohm (1.000.000 ohms).

Σε αυτό το παράδειγμα, θα χρησιμοποιήσουμε αντιστάσεις με τέσσερις διαφορετικές τιμές: 270 Ω, 470 Ω, 2,2 kΩ και 10 kΩ. Τα μεγέθη αυτών των αντιστάσεων είναι τα ίδια. Χρώμα επίσης. Το μόνο που τα ξεχωρίζει είναι οι χρωματιστές ρίγες. Από αυτές τις λωρίδες προσδιορίζεται οπτικά η τιμή των αντιστάσεων.

Για αντιστάσεις που έχουν τρεις χρωματιστές λωρίδες και την τελευταία χρυσή λωρίδα, λειτουργούν οι ακόλουθες αντιστοιχίες:

Καφέ 1

Κόκκινο 2

Πορτοκαλί 3

Πράσινο 5

Μωβ 7

Οι δύο πρώτες λωρίδες υποδεικνύουν τις 2 πρώτες αριθμητικές τιμές, επομένως το κόκκινο, μοβ σημαίνει 2, 7. Η επόμενη λωρίδα είναι ο αριθμός των μηδενικών που πρέπει να τοποθετηθούν μετά τα δύο πρώτα ψηφία. Δηλαδή, αν η τρίτη λωρίδα είναι καφέ, όπως στην παραπάνω φωτογραφία, θα υπάρχει ένα μηδέν και η τιμή της αντίστασης είναι 270 Ω.

Αντίσταση με ρίγες καφέ, μαύρου, πορτοκαλί: 10 και τρία μηδενικά, άρα 10000 Ω. Δηλαδή 10 kΩ.

Σε αντίθεση με τα LED, οι αντιστάσεις δεν έχουν θετικά και αρνητικά πόδια. Δεν έχει σημασία ποιο πόδι χρησιμοποιείτε για να τα συνδέσετε στο ρεύμα/γείωση.

Διάγραμμα σύνδεσης

Συνδέστε σύμφωνα με το παρακάτω διάγραμμα:

Το Arduino διαθέτει ακροδέκτη 5V για την τροφοδοσία περιφερειακών. Θα το χρησιμοποιήσουμε για να τροφοδοτήσουμε ένα LED και μια αντίσταση. Δεν θα χρειαστείτε τίποτα άλλο από την πλακέτα, απλώς συνδέστε τη μέσω USB στον υπολογιστή σας.

Με αντίσταση 270 Ω, το LED θα πρέπει να ανάβει αρκετά έντονα. Εάν αντικαταστήσετε την αντίσταση 270 Ω με αντίσταση 470 Ω, η λυχνία LED δεν θα ανάψει τόσο έντονα. Με αντίσταση 2,2 kΩ, το LED θα πρέπει να σβήσει λίγο περισσότερο. Εξάλλου, με μια αντίσταση 10 kΩ, το LED θα είναι ελάχιστα ορατό. Είναι πιθανό ότι για να δείτε τη διαφορά στο τελευταίο βήμα θα πρέπει να βγάλετε τον κόκκινο προσαρμογέα, χρησιμοποιώντας τον ως διακόπτη. Τότε μπορείτε να δείτε τη διαφορά στη φωτεινότητα.

Παρεμπιπτόντως, μπορείτε να κάνετε αυτό το πείραμα με σβηστά φώτα.

Διάφορες επιλογές εγκατάστασης αντιστάσεων

Τη στιγμή που το 5V συνδέεται στο ένα πόδι της αντίστασης, το δεύτερο σκέλος της αντίστασης συνδέεται στο θετικό σκέλος του LED και το δεύτερο σκέλος του LED συνδέεται στη γείωση. Εάν μετακινήσουμε την αντίσταση έτσι ώστε να βρίσκεται πίσω από το LED όπως φαίνεται παρακάτω, το LED θα εξακολουθεί να ανάβει.

Το LED αναβοσβήνει

Μπορούμε να συνδέσουμε το LED στην έξοδο Arduino. Μετακινήστε το κόκκινο καλώδιο από τον ακροδέκτη τροφοδοσίας 5 V στο D13 όπως φαίνεται παρακάτω.

Τώρα κατεβάστε το παράδειγμα "Blink" που εξετάσαμε. Λάβετε υπόψη ότι και τα δύο LED - η ενσωματωμένη και η εξωτερική που εγκαταστήσατε - άρχισαν να αναβοσβήνουν.

Ας δοκιμάσουμε να χρησιμοποιήσουμε μια διαφορετική καρφίτσα στο Arduino. Ας πούμε D7. Μετακινήστε την υποδοχή από την ακίδα D13 στην ακίδα D7 και αλλάξτε την ακόλουθη γραμμή του κώδικά σας:

Ανεβάστε το τροποποιημένο σκίτσο στο Arduino. Το LED θα συνεχίσει να αναβοσβήνει, αλλά αυτή τη φορά με τροφοδοσία από τον ακροδέκτη D7.

Σε προηγούμενα μαθήματα γνωρίσαμε τα πιο απλά κυκλώματα - συναρμολόγηση και. Σήμερα συναρμολογούμε ένα μοντέλο με ποτενσιόμετρο (μεταβλητή αντίσταση) και LED. Ένα τέτοιο μοντέλο μπορεί να χρησιμοποιηθεί για τον έλεγχο ενός ρομπότ.

Ποτενσιόμετροείναι μια μεταβλητή αντίσταση με ρυθμιζόμενη αντίσταση.Τα ποτενσιόμετρα χρησιμοποιούνται στη ρομποτική ως ρυθμιστές διαφόρων παραμέτρων - ένταση ήχου, ισχύς, τάση κ.λπ. Στο μοντέλο μαςαπό το γύρισμα του πόμολο του ποτενσιόμετρουΗ φωτεινότητα του LED θα εξαρτηθεί. Αυτό είναι επίσης ένα από τα βασικά σχήματα.

Οδηγίες βίντεο για τη συναρμολόγηση του μοντέλου:

Για να συναρμολογήσουμε το μοντέλο χρειαζόμαστε:

  • Πλακέτα Arduino (ή ανάλογα).
  • Breadboard?
  • 6 καλώδια και/ή βραχυκυκλωτήρες από αρσενικό σε αρσενικό.
  • Δίοδος εκπομπής φωτός;
  • ποτενσιόμετρο (μεταβλητή αντίσταση).
  • Αντίσταση 220 Ohm;
  • Arduino IDE, το οποίο μπορείτε να κατεβάσετε από τον ιστότοπο του Arduino.

Τι χρειάζεστε για να συνδέσετε ένα ποτενσιόμετρο και ένα LED στο Arduino;

Διάγραμμα σύνδεσης για μοντέλο Arduino με ποτενσιόμετρο και LED:

Διάγραμμα σύνδεσης μοντέλου Arduino με ποτενσιόμετρο και LED

Το παρακάτω πρόγραμμα είναι κατάλληλο για να λειτουργήσει αυτό το μοντέλο (μπορείτε απλώς να αντιγράψετε το πρόγραμμα στο Arduino IDE):

// δώστε ονόματα ακίδων με LED
// και ποτενσιόμετρο
#define led 9
#define pot A0
void setup()
{
// pin με LED - έξοδο
pinMode(led, OUTPUT);
// καρφίτσα με ποτενσιόμετρο - είσοδος
pinMode(pot, INPUT);
}
void loop()
{
// Δηλώστε τη μεταβλητή x
int x;
// διαβάστε την τάση από το ποτενσιόμετρο:
// Θα ληφθεί ένας αριθμός από το 0 έως το 1023
// διαιρέστε το με 4, παίρνετε έναν αριθμό στο εύρος
// 0-255 (το κλασματικό μέρος θα απορριφθεί)
x = analogRead(pot) / 4;
// έξοδος του αποτελέσματος στο LED
analogWrite(led, x);
}

Έτσι μοιάζει το συναρμολογημένο μοντέλο Arduino ενός ποτενσιόμετρου με LED:

Μοντέλο Arduino με συναρμολογημένο ποτενσιόμετρο και LED

Αυτό ολοκληρώνει το τρίτο μάθημα «Arduino για αρχάριους». Συνεχίζεται!

Αναρτήσεις μαθήματος:

  1. Πρώτο μάθημα: .
  2. Δεύτερο μάθημα: .
  3. Τρίτο μάθημα: .
  4. Τέταρτο μάθημα: .
  5. Πέμπτο μάθημα: .
  6. Μάθημα έκτο: .
  7. Έβδομο μάθημα: .
  8. Όγδοο μάθημα: .
  9. Ένατο μάθημα:

Και ας προσπαθήσουμε να ολοκληρώσουμε μια νέα εργασία. Νομίζω ότι όλοι έχουν δει γιρλάντες προβολής της Πρωτοχρονιάς στις οποίες τα LED αναβοσβήνουν ομαλά. Ας πούμε ότι θέλουμε να κάνουμε κάτι τέτοιο.
Έχουμε ήδη εξετάσει τη συνάρτηση digitalWrite() και γνωρίζουμε ότι η τιμή που γράφει μπορεί να είναι δύο επιλογών - υψηλή ή χαμηλή. Σε αυτή την περίπτωση, η συνάρτηση analogWrite() θα μας βοηθήσει. Οι "διατυπώσεις" των συναρτήσεων διαφέρουν μόνο στα αρχικά προθέματα, επομένως είναι εύκολο να θυμούνται.

Η συνάρτηση analogWrite(), όπως η digitalWrite(), περιέχει δύο ορίσματα σε παρένθεση και λειτουργεί με την ίδια λεκτική αρχή: "where, what". Η κύρια διαφορά είναι η δυνατότητα καταγραφής ενός ευρέος φάσματος τιμών αντί για το συνηθισμένο LOW ή HIGH. Αυτό θα μας επιτρέψει να ρυθμίσουμε τη φωτεινότητα του LED. Η κύρια σημείωση που πρέπει να έχετε κατά νου είναι ότι αυτή η δυνατότητα λειτουργεί μόνο σε ορισμένες επαφές. Αυτές οι ακίδες επισημαίνονται με το σύμβολο "~". Αυτό το σύμβολο υποδεικνύει ότι πρόκειται για επαφή PWM. Το PWM (διαμόρφωση πλάτους παλμού) ακούγεται σαν PWM (διαμόρφωση πλάτους παλμού) στα ρωσικά. Η αρχή λειτουργίας βασίζεται στην αλλαγή της διάρκειας του παλμού. Γραφικά αυτό μπορεί να απεικονιστεί ως εξής:

Ας προσπαθήσουμε να καταλάβουμε πώς λειτουργεί αυτό εξετάζοντας ένα απλό παράδειγμα. Για να το κάνετε αυτό, πρέπει να συνδέσετε το LED στην επαφή PWM μέσω μιας αντίστασης 150 Ohm και να "συνδέσετε" ένα απλό πρόγραμμα στο Arduino. Το διάγραμμα σύνδεσης και ο κώδικας του σκίτσου παρουσιάζονται παρακάτω:


void setup()
{
pinMode(led,OUTPUT);
}

void loop()
{
for(int i=0; i<=255; i++)
{
analogWrite(led,i);
καθυστέρηση(10);
}
for(int i=255; i>=0; i--)
{
analogWrite(led,i);
καθυστέρηση(10);
}
}


Νομίζω ότι ο κώδικας είναι γενικά σαφής, αλλά πρέπει να δώσουμε λίγη προσοχή στον βρόχο for(). Υπάρχει κάτι σαν άδεια. Δεδομένου ότι εργαζόμαστε με ανάλυση 8-bit (αυτό θα συζητηθεί λίγο αργότερα), η ελάχιστη τιμή θα είναι 0 και η μέγιστη θα είναι 255. Στο τέλος κάθε επανάληψης, ορίζουμε τη χρονική καθυστέρηση στα 10 ms.

Ας επιστρέψουμε στο διάγραμμα από το προηγούμενο μάθημα και ας προσπαθήσουμε να φτιάξουμε μια παρόμοια γιρλάντα χρησιμοποιώντας τη συνάρτηση analogWrite().


int buttonPin = 2;
int pin = (3,5,6,9,10,11);

Boolean lastButton = LOW;
Κουμπί δυαδικού ρεύματος = LOW;
boolean enable = false;

void setup()
{
pinMode(buttonPin, INPUT);
for(int mode = 0; mode<= 5; mode++) pinMode(pins, OUTPUT);
}

boolean debounce (boolean last)
{
boolean ρεύμα = digitalRead(buttonPin);
αν (τελευταίο != τρέχον)
{
καθυστέρηση(5);
τρέχον = digitalRead(buttonPin);
}
ρεύμα επιστροφής?
}

void loop()
{
currentButton = debounce(lastButton);
if(lastButton == LOW && currentButton == HIGH)
{
enable = !enable;
}

Αν (ενεργοποίηση == αληθές)
{
για (int i=0; i<=5; i++)
{
για (int φωτεινότητα = 0, φωτεινότητα<= 255; brightness++)
{
καθυστέρηση(1);
}
καθυστέρηση(40);
}
για (int i=0; i<=5; i++)
{
για (int φωτεινότητα = 255; φωτεινότητα >= 0; φωτεινότητα--)
{
analogWrite(pins[i], φωτεινότητα);
καθυστέρηση(1);
}
καθυστέρηση(40);
}
}

Εάν (ενεργοποίηση == false)
{
for(int i = 0; i<= 5; i++) digitalWrite(pins[i], LOW);
}

LastButton = τρέχον Κουμπί;
}


Οπτικά το σκίτσο έχει γίνει κάπως πιο περίπλοκο. Στην πραγματικότητα, όλα είναι απλά εδώ και ας το καταλάβουμε. Πρέπει να αναγνωρίσουμε όλα τα συνδεδεμένα LED, αλλά αντί για το συνηθισμένο int led χρησιμοποιούμε έναν πίνακα, κάθε στοιχείο του οποίου είναι μια ακίδα PWM στο Arduino. Στο σώμα της συνάρτησης void setup(), ενεργήσαμε επίσης με πονηρό τρόπο. Εμπιστευτήκαμε την «καταχώριση» όλων των επαφών στον βρόχο for(), με κάθε επανάληψη του οποίου η αντίστοιχη επαφή διαμορφώνεται στο OUTPUT. Ας προχωρήσουμε στη συνάρτηση void loop(). Η συνάρτηση debounce() και η αρχική συνθήκη if() παραμένουν αμετάβλητες. Εξακολουθούμε να ελέγχουμε τα επίπεδα δύο μεταβλητών: την προηγούμενη τιμή (αρχικά LOW) και την τρέχουσα κατάσταση του κουμπιού. Όταν πληρούνται αυτές οι προϋποθέσεις, η τιμή της μεταβλητής ενεργοποίησης αντιστρέφεται. Έχοντας αυτό υπόψη, προσθέσαμε δύο ακόμη απλές συνθήκες if(). Εάν enable = true, τότε ενεργοποιείται η γιρλάντα, η ομαλότητα της ροής της οποίας ελέγχεται από τον βρόχο for(). Εάν enable = false, τότε όλα τα LED απενεργοποιούνται. Στο τέλος των συνθηκών, η μεταβλητή lastButton παίρνει την τρέχουσα κατάσταση του κουμπιού.
Κατά τη δοκιμή του προγράμματός μας, παρατηρήσαμε ότι όλα δεν λειτουργούσαν όπως αναμενόταν. Θυμάστε, στο τελευταίο μάθημα κάναμε μια τροποποίηση ότι αν η χρονική καθυστέρηση είναι μεγάλη, το κουμπί θα ενεργοποιηθεί αφού λήξει; Στο προηγούμενο παράδειγμα, όταν ενεργοποιήθηκε η γιρλάντα, η συνολική καθυστέρηση στο σώμα της συνάρτησης void loop() ήταν 85ms. Αυτό μας έδωσε την ευκαιρία να «φτάσουν εκεί» μέσα σε ένα ορισμένο χρονικό διάστημα. Σε αυτό το σκίτσο, υπό την ίδια συνθήκη, η καθυστέρηση διαφέρει αρκετές φορές. Ίσως, αν θέλετε να απενεργοποιήσετε τη γιρλάντα, η λέξη "διακοπή" υποδηλώνεται. Αυτή θα είναι η λύση σε αυτό το πρόβλημα!

Ελπίζω ότι αυτό το άρθρο ήταν χρήσιμο για εσάς. Στο επόμενο tutorial θα δούμε τις διακοπές στο Arduino και θα πετύχουμε το επιθυμητό αποτέλεσμα.




Μπλουζα