Εισαγωγή
Στον οδηγό αυτό θα μάθετε πως μπορείτε να ελέγξετε την φωτινότητα ενός 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