Εισαγωγή
|
Στον οδηγό αυτό θα μάθετε πως μπορείτε να ελέγξετε την φωτινότητα ενός led με με την χρήση της συνάρτησης/εντολής analogWrite(). H analogWrite στέλνει ένα σήμα-παλμό (PWM) στο pin 3 πετυχαίνοντας την γρήγορη εναλλαγή μεταξύ HIGH/LOW. Το led αναβοσβήνει πολύ γρήγορα δίνοντας μας έτσι την αίσθηση οτι "ξεθωριάζει" χάνοντας την φωτεινότητα του.
|
Παλμοί PWM
Με τους παλμούς PWM (Pulse Width Modulation) μπορούμε να στείλουμε ένα αναλογικό σήμα με την ψηφιακή του έννοια όμως. Υπό την γενική έννοια, η μέση τιμή της τάσης (και του ρεύματος) που τροφοδοτείτε στο φορτίο ελέγχεται με το γύρισμα του διακόπτη on/off πολύ γρήγορα. Όσο πιο πολύ μένει ο διακόπτης στην λειτουργία on, τόσο μεγαλύτερη είναι και η τροφοδοσία στο φορτίο. Αντίθετα, όσο πιο πολύ μένει ο διακόπτης στην off λειτουργία, τόσο λιγότερο είναι η τροφοδοσία στο φορτίο. Για να καταλάβετε την λογική, απλά φανταστείτε έναν διακόπτη να ανοιγοκλείνει πολύ γρήγορα.
|
Ο ψηφιακός έλεγχος χρησιμοποιείτε για να δημιουργηθεί ένας τατραγωνικός παλμός, ένας διακόπτης δηλαδή μεταξύ on και off (HIGH/LOW). Στην 'on' λειτουργία του παλμού έχουμε σήμα 5V (δηλαδή HIGH) ενώ στην 'off' λειτουργία έχουμε σήμε 0V(δηλαδή LOW). Το χρονικό διάστημα που απαιτείται για να γίνει αυτή η εναλλαγή ονομάζεται πλάτος παλμού (pulse width). Οι τιμές που μπορούν να δοθούν είναι απο 0 έως 255. Έτσι, η χρήση της analogWrite(255) θα κρατήσει το led στο 100% της φωτεινότητας του (όπως θα έκανε και η digitalWrite(HIGH), ενώ η χρήση της analogWrite(0) θα κρατήσει το led σβηστό (όπως θα έκανε και η digitalWrite(LOW). Όμως η analogWrite(127) θα κράταγε το led αναμμένο στο μισό της φωτεινότητας του!
|
Το Arduino uno μπορεί να στείλει παλμούς PWM μόνο στους ακροδέκτες 3, 5, 6, 9, 10, και 11, όπως φαίνονται και στην παραπάνω εικόνα.
Τα υλικά που θα χρειαστούμε
|
Για το tutorial αυτό θα χρειαστούμε Αν θέλετε για μεγαλύτερη ευκολία μπορείτε να χρησιμοποιήσετε το Breadboard Shield
|
Το κύκλωμα
Οι συνδέσεις είναι αρκετά εύκολες, δείτε την παραπάνω εικόνα με το σχηματικό του κυκλώματος σε breadboard.
Ο κώδικας
Ο κώδικας για το "Fade Led" βρίσκεται παρακάτω.
Θυμηθείτε πως η ρουτίνα setup() τρέχει μόνο μια φορά κατά την τροφοδοσία/προγραμματισμό του Arduino uno ή όταν πατηθεί το κουμπί reset. Στο πρόγραμμα παρακάτω, το πρώτο πράγμα που κάνουμε μέσα στην setup() είναι να δηλώσουμε με την pinMode() οτι το pin3 είναι έξοδος.
Στην ρουτίνα loop(), ο κώδικας τρέχει ξανά και ξανά, για πάντα. H συνάρτηση analogWrite() χρειάζεται δύο ορίσματα για να λειτουργήσει. Το ένα λέει στην συνάρτηση σε ποιον ακροδέκτη να στείλει το σήμα-παλμό και το άλλο την τιμή PWM που θέλει να στείλει σε αυτόν.
Θυμηθείτε πως η ρουτίνα setup() τρέχει μόνο μια φορά κατά την τροφοδοσία/προγραμματισμό του Arduino uno ή όταν πατηθεί το κουμπί reset. Στο πρόγραμμα παρακάτω, το πρώτο πράγμα που κάνουμε μέσα στην setup() είναι να δηλώσουμε με την pinMode() οτι το pin3 είναι έξοδος.
Στην ρουτίνα loop(), ο κώδικας τρέχει ξανά και ξανά, για πάντα. H συνάρτηση analogWrite() χρειάζεται δύο ορίσματα για να λειτουργήσει. Το ένα λέει στην συνάρτηση σε ποιον ακροδέκτη να στείλει το σήμα-παλμό και το άλλο την τιμή PWM που θέλει να στείλει σε αυτόν.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /* Fade This example shows how to fade an LED on pin 3 using the analogWrite() function. This example code is in the public domain. More info: http://www.ardumotive.com/how-to-fade-an-led-en.html */ int led = 3; // the pin that the LED is attached to int brightness = 0; // how bright the LED is int fadeAmount = 5; // how many points to fade the LED by // the setup routine runs once when you press reset: void setup() { // declare pin 3 to be an output: pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { // set the brightness of pin 3: analogWrite(led, brightness); // change the brightness for next time through the loop: brightness = brightness + fadeAmount; // reverse the direction of the fading at the ends of the fade: if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // wait for 30 milliseconds to see the dimming effect delay(30); } |
Μπορείτε να κάνετε τις δικές σας παρεμβάσεις στον κώδικα, δοκιμάστε για παράδειγμα να αλλάξετε τον χρόνο στην delay().
|
Κατεβάστε τον κώδικα απ' εδώ και ανοίξτε το αρχείο με το Arduino IDE.
|
| ||||||
Συγχαρητήρια!
Μόλις ολοκληρώσατε το δεύτερο "How to" tutorial και μάθατε πως να :
- αλλάξετε την φωτεινότητα ενός led
- χρησιμοποιείτε τους παλμούς PWM με την συνάρτηση analogWrite()
- βάζετε μεταβλητές στον κώδικας σας
- χρησιμοποιείτε την δομή ελέγχου if