Φύλλο εργασίας 3 - Χριστουγεννιάτικα φωτάκια (σταδιακή αύξηση και μείωση φωτεινότητας ενός LED) Στην δραστηριότητα αυτή θα χρησιμοποιήσουμε ένα LED το οποίο θα ανάβει σταδιακά και όταν θα φτάσει στη μέγιστη τιμή του θα αρχίσει να σβήνει σταδιακά. Η διαδικασία αυτή θα επαναλαμβάνεται συνεχώς. Υλικά που θα χρειαστούμε: 1 Arduino UNO 1 Breadboard 1 LED Κόκκινο 1 αντίσταση 220 Ohm Το κύκλωμα σε breadboard Φ3.1
1 Ανοίξτε το προγραμματιστικό περιβάλλον του Arduino. 2 Από το μενού Tools επίλεξε Ardublock για να ξεκινήσετε το προγραμματιστικό περιβάλλον του Ardublock. 3 Δημιουργήστε το παρακάτω πρόγραμμα στο περιβάλλον του Ardublock. Εικόνα 3 - program3.adp * Οι αριθμοί δίπλα σε κάθε εντολή χρησιμοποιούνται στην ανάλυση του προγράμματος που ακολουθεί στην επόμενη παράγραφο. Φ3.2
Ανάλυση προγράμματος (program3.adp) * Κάθε γραμμή αντιστοιχεί σε μια εντολή (με τον ίδιο αριθμό) στην Εικόνα 3. 1. Η εντολή set integer variable(brightness, 0) θέτει την τιμή 0 στην μεταβλητή brightness. Μια μεταβλητή είναι μια θέση μνήμης στην οποία μπορούμε να αποθηκεύσουμε δεδομένα τα οποία μπορεί να αλλάξουν κατά τη διάρκεια εκτέλεσης του προγράμματος. Η μεταβλητή brightness είναι ακέραιου τύπου. Στο Arduino UNO οι τιμές που μπορεί να πάρει μια μεταβλητή ακέραιου τύπου είναι από το -32.768 έως το 32.767. 2. Η εντολή set integer variable(status, HIGH) θέτει την τιμή HIGH στην μεταβλητή status. Η μεταβλητή status είναι τύπου boolean και μπορεί να πάρει δύο τιμές 0 και 1 (δηλαδή LOW και HIGH). Στην συγκεκριμένη εφαρμογή όταν έχει την τιμή HIGH σημαίνει ότι το λαμπάκι ανάβει σταδιακά μέχρι να φτάσει την μέγιστη τιμή του (την τιμή 255), ενώ όταν έχει την τιμή LOW σβήνει σταδιακά μέχρι να πάρει την ελάχιστη τιμή του (την τιμή 0). 3. Η εντολή set analog pin(10, brightness) στέλνει μια τάση που αντιστοιχεί στην τιμή της μεταβλητής brightness στην ψηφιακή θύρα 10. Οι αποδεκτές τιμές που μπορεί να πάρει η μεταβλητή brightness είναι από το 0 έως το 255. Η set analog pin λειτουργεί μόνο στις PWM ψηφιακές θύρες οι οποίες στις περισσότερες πλακέτες είναι οι 3, 5, 6, 9, 10, 11. Δηλαδή στις θύρες αυτές μπορούμε να παράγουμε ενδιάμεσες τάσεις στο διάστημα [0, 5] Volt στέλνοντας τιμές από 0 έως 255. 4. Με την εντολή delay MILLIS milliseconds(100) σταματά η εκτέλεση του προγράμματος για χρονικό διάστημα 100 ms ( 1 sec = 1000 ms ). 5. Η εντολή if... then... else... ελέγχει αν η μεταβλητή status έχει την τιμή HIGH. Αν η μεταβλητή status έχει την τιμή HIGH τότε θα εκτελεστεί η εντολή στο τμήμα then, αλλιώς θα εκτελεστεί η εντολή στο τμήμα else. Η εντολή set integer variable(brightness, brightness+15), στο τμήμα then, υπολογίζει το άθροισμα brightness+15 και καταχωρεί το αποτέλεσμα στην μεταβλητή brightness. Δηλαδή, αυξάνει την τιμή της μεταβλητής brightness κατά 15. Η εντολή set integer variable(brightness, brightness-15), στο τμήμα else, υπολογίζει την διαφορά brightness-15 και καταχωρεί το αποτέλεσμα στην μεταβλητή brightness. Δηλαδή, μειώνει την τιμή της μεταβλητής brightness κατά 15. Φ3.3
6. Η εντολή if... then... ελέγχει αν η μεταβλητή brightness έχει την τιμή 0 ή την τιμή 255. Αν αυτό συμβαίνει τότε το LED έχει την ελάχιστη (τιμή 0) ή την μέγιστη τιμή του (τιμή 255). Οπότε στο τμήμα then με την εμφωλευμένη εντολή if... then... αντιστρέφουμε την τιμή της μεταβλητής status. Αν η status έχει την τιμή HIGH τότε την κάνουμε LOW και αν έχει την τιμή LOW τότε την κάνουμε HIGH. Η τιμή της μεταβλητής status δίνει την πληροφορία στο πρόγραμμα αν πρέπει να αυξάνει την φωτεινότητα του LED ή να την μειώνει. Όταν έχει την τιμή HIGH σημαίνει ότι το λαμπάκι ανάβει σταδιακά μέχρι να φτάσει την μέγιστη τιμή του (την τιμή 255), ενώ όταν έχει την τιμή LOW σβήνει σταδιακά μέχρι να πάρει την ελάχιστη τιμή του (την τιμή 0). Φ3.4
Φ3.5 Διατύπωση αλγορίθμου με λογικό διάγραμμα
Δραστηριότητες 1. Προσπαθήστε να προσθέσετε ένα πράσινο LED στο παραπάνω κύκλωμα το οποίο θα έχει αντίστροφη λειτουργία με το υπάρχον κόκκινο LED. Συγκεκριμένα, όταν η φωτεινότητα του κόκκινου LED θα αυξάνει, η φωτεινότητα του πράσινου LED θα μειώνεται και το αντίστροφο. Φ3.6