Professional Documents
Culture Documents
Συμπράτ
των
φορέας:
Ενότητα 7 Επιμορφωτικό Υλικό: Ειδικό Μέρος
Περιεχόμενα
ΣΕΝΑΡΙΟ: Physical Computing με Raspberry Pi και Python ........................................................... 4
1. ΤΙΤΛΟΣ ΔΙΔΑΚΤΙΚΟΥ ΣΕΝΑΡΙΟΥ .......................................................................................... 4
2. ΕΚΤΙΜΩΜΕΝΗ ΔΙΑΡΚΕΙΑ ΔΙΔΑΚΤΙΚΟΥ ΣΕΝΑΡΙΟΥ ............................................................... 4
3. ΕΝΤΑΞΗ ΤΟΥ ΔΙΔΑΚΤΙΚΟΥ ΣΕΝΑΡΙΟΥ ΣΤΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ & ΠΡΟΑΠΑΙΤΟΥΜΕΝΕΣ
ΓΝΩΣΕΙΣ ..................................................................................................................................... 4
4. ΣΚΟΠΟΙ ΚΑΙ ΣΤΟΧΟΙ ΤΟΥ ΔΙΔΑΚΤΙΚΟΥ ΣΕΝΑΡΙΟΥ ............................................................... 4
5. ΣΥΝΟΠΤΙΚΗ ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΔΙΔΑΚΤΙΚΟΥ ΣΕΝΑΡΙΟΥ ........................................................ 5
6. ΕΠΙΣΤΗΜΟΛΟΓΙΚΗ ΠΡΟΣΕΓΓΙΣΗ ΚΑΙ ΕΝΝΟΙΟΛΟΓΙΚΗ ΑΝΑΛΥΣΗ – ΘΕΜΑΤΑ ΘΕΩΡΙΑΣ ΤΟΥ
ΔΙΔΑΚΤΙΚΟΥ ΣΕΝΑΡΙΟΥ .............................................................................................................. 5
7. ΕΠΕΚΤΑΣΕΙΣ/ΔΙΑΣΥΝΔΕΣΕΙΣ ΤΩΝ ΕΝΝΟΙΩΝ ..................................................................... 10
8. ΠΟΛΛΑΠΛΕΣ ΑΝΑΠΑΡΑΣΤΑΣΕΙΣ – ΠΟΛΛΑΠΛΕΣ ΠΡΟΣΕΓΓΙΣΕΙΣ ........................................ 11
9. ΠΡΟΒΛΕΨΗ ΔΥΣΚΟΛΙΩΝ ΣΤΟ ΔΙΔΑΚΤΙΚΟ ΣΕΝΑΡΙΟ .......................................................... 11
10. ΓΙΑΤΙ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ Ο Η.Υ. .................................................................................... 11
11. ΔΙΔΑΚΤΙΚΟΣ ΘΟΡΥΒΟΣ ................................................................................................. 11
12. ΧΡΗΣΗ ΕΞΩΤΕΡΙΚΩΝ ΠΗΓΩΝ ........................................................................................ 11
13. ΥΠΟΚΕΙΜΕΝΗ ΘΕΩΡΙΑ ΜΑΘΗΣΗΣ ................................................................................ 12
14. ΕΠΙΣΗΜΑΝΣΗ ΜΙΚΡΟΜΕΤΑΒΟΛΩΝ ΣΤΗΝ ΟΡΓΑΝΩΣΗ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΚΑΙ ΣΤΟ
ΝΟΗΜΑ ΤΩΝ ΕΝΝΟΙΩΝ ........................................................................................................... 12
15. ΔΙΔΑΚΤΙΚΟ ΣΥΜΒΟΛΑΙΟ............................................................................................... 12
16. ΟΡΓΑΝΩΣΗ ΤΑΞΗΣ – ΕΦΙΚΤΟΤΗΤΑ ΣΧΕΔΙΑΣΗΣ ............................................................. 12
17. ΠΕΡΙΓΡΑΦΗ ΚΑΙ ΑΝΑΛΥΣΗ ΤΩΝ ΦΥΛΛΩΝ ΕΡΓΑΣΙΑΣ – ΑΞΙΟΛΟΓΗΣΗ ............................ 13
18. ΦΥΛΛΑ ΕΡΓΑΣΙΑΣ ......................................................................................................... 14
ΣΕΝΑΡΙΟ: Physical Computing με Arduino - ArduBlock ............................................................... 28
1. Τίτλος ενότητας ................................................................................................................... 28
2. Συνοπτική περιγραφή μαθήματος....................................................................................... 28
3. Εκτιμώμενη διάρκεια .......................................................................................................... 28
4. Σκοποί και στόχοι ................................................................................................................ 28
5. Συσχετισμός με το Αναλυτικό Πρόγραμμα .......................................................................... 29
6. Διδακτικό υλικό και απαιτούμενη υλικοτεχνική υποδομή για την ενότητα ........................ 29
7. Οι εναλλακτικές αντιλήψεις (αναπαραστάσεις, ιδέες, κλπ.) των μαθητών ........................ 29
8. Διδακτικές προσεγγίσεις και στρατηγικές/ θεωρίες μάθησης ............................................ 30
10. ΦΥΛΛΑ ΕΡΓΑΣΙΑΣ ............................................................................................................. 32
11. ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ARDUBLOCK - ΦΥΛΛΑ ΕΡΓΑΣΙΑΣ ARDUINO ............ 41
ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ MATLAB και SIMULINK για ARDUINO ................................ 53
Raspberry Pi
Το Raspberry Pi (https://www.raspberrypi.org/) είναι ένας πλήρης μικρός
υπολογιστής σε μέγεθος πιστωτικής κάρτας.
Δημιουργήθηκε στο Ηνωμένο Βασίλειο από τον μη κερδοσκοπικό
οργανισμό Raspberry Pi Foundation για να προωθήσει την εκπαίδευση
στην επιστήμη των υπολογιστών.
Το επίσημο λειτουργικό σύστημα προς εγκατάσταση σε μια microSD
κάρτα είναι το Raspbian, έκδοση του Debian Linux ειδικά προσαρμοσμένη για το Raspberry Pi.
Διαθέτει πλήθος προεγκατεστημένων εφαρμογών, ενώ μπορεί να προγραμματιστεί σε διάφορες
γλώσσες, από το Scratch μέχρι την Python, με την τελευταία να αποτελεί και την προτεινόμενη
γλώσσα (εξ ου και η ονομασία Pi).
Το Pi διατίθεται σε διάφορες εκδόσεις, με διαφορετικά τεχνικά χαρακτηριστικά και υποδοχές
σύνδεσης περιφερειακών. Η πρώτη γενιά (Raspberry Pi 1 model B) δόθηκε στο κοινό τον
Φεβρουάριο του 2012. Το 2014 κυκλοφόρησε η νέα βελτιωμένη έκδοση του Raspberry Pi 1 η
οποία ονομάστηκε RPi 1 model B+. Τον Απρίλιο του 2014 η εταιρία κυκλοφόρησε τον μικρότερο
και οικονομικότερο υπολογιστή τσέπης. Το μοντέλο ονομάστηκε Raspberry Pi Zero και είχε
κόστος μόλις 5 $. Τον Φεβρουάριο του 2015 κυκλοφόρησε το Raspberry Pi 2 το οποίο είχε την
διπλάσια μνήμη RAM από τα προηγούμενα μοντέλα. Φτάνοντας στο σήμερα, τον Φεβρουάριο
του 2016, κυκλοφόρησε στο Raspberry Pi 3 Model B το οποίο έχει ενσωματωμένο WiFi και
Bluetooth και ακριβώς το ίδιο μέγεθος με το προηγούμενο.
Το Breadboard είναι μία πλαστική πλακέτα δοκιμών, που επιτρέπει τη σύνδεση των
ηλεκτρονικών εξαρτημάτων μεταξύ τους χωρίς να χρειάζεται συγκόλληση (τοποθετώντας πάνω
στις ειδικές οπές τα διάφορα ηλεκτρικά στοιχεία και συνδέοντάς τα με καλώδια σύνδεσης). Συχνά
χρησιμοποιείται για τη δοκιμή ενός κυκλώματος πριν από τη δημιουργία ενός τυπωμένου
κυκλώματος (PCB). Με το Breadboard μπορεί να αλλάξει η συνδεσμολογία και να δημιουργηθεί
ένα νέο κύκλωμα ή να διορθωθεί άμεσα μία προβληματική συνδεσμολογία. Όπως φαίνεται και
στην εικόνα όλες οι οπές που καταλήγουν στην ίδια ράγα (Rail) ή μπάρα (Bar) είναι συνδεδεμένες
και αυτό χρησιμεύει σαν καλώδιο για τη συνδεσμολογία των κυκλωμάτων.
(Ενημερωτικό video: https://www.youtube.com/watch?v=k9jcHB9tWko )
LED
Το LED είναι μία Φωτοεκπέμπουσα Δίοδος (Light Emitting Diode). Η δίοδος είναι ένα εξάρτημα
(καταναλωτής) που επιτρέπει στο ρεύμα να περνά από μέσα του μόνο
προς τη μία κατεύθυνση. Άρα έχει πολικότητα. Στην προκειμένη περίπτωση
λέγεται Φωτοεκπέμπουσα γιατί όταν περνάει ρεύμα, εκπέμπει φώς.
Το LED, έχει το ένα άκρο (πόδι) μεγαλύτερο από το άλλο. Το μεγαλύτερο
άκρο (γνωστό ως «άνοδος») συνδέεται πάντοτε με τη θετική παροχή του
τροφοδοτικού. Το μικρότερο άκρο (γνωστό ως «κάθοδος») συνδέεται με
την αρνητική πλευρά της παροχής ρεύματος, γνωστή ως «γείωση». Οι λυχνίες LED λειτουργούν
μόνο εάν η "πολικότητα" είναι σωστή. Αν συνδεθούν εσφαλμένα δεν θα ανάψουν. Όταν ένα LED
άγει, έχει πρακτικά μηδενική αντίσταση. Άρα συμπεριφέρεται σαν αγωγός. Συνεπώς αν
συνδέσουμε ένα LED απευθείας στην πηγή θα προκαλέσουμε βραχυκύκλωμα. Για να το
αποφύγουμε αυτό, συνδέουμε πάντα το LED σε σειρά με έναν αντιστάτη.
ΑΝΤΙΣΤΑΣΕΙΣ
Ο αντιστάτης είναι ένας καταναλωτής, που η μόνη του λειτουργικότητα είναι να
εμποδίζει (περιορίζει) τη ροή του
ρεύματος στο κύκλωμα. Η μονάδα
μέτρησης της αντίστασης ονομάζεται Ohm (Ω), και όσο
μεγαλύτερη είναι η αντίσταση, τόσο περισσότερο
περιορίζει το ρεύμα.
Η τιμή ενός αντιστάτη επισημαίνεται με έγχρωμες ζώνες
κατά μήκος του σώματος της αντίστασης. Η πιο
συνηθισμένη μορφή χρωματικού κώδικα είναι των 4
λωρίδων, όπως φαίνεται και στο σχήμα. Παρόλα αυτά
υπάρχουν χρωματικοί κώδικες με 5 λωρίδες (3 ψηφία,
πολλαπλασιαστής, θερμικός συντελεστής) και 6 λωρίδες (3 ψηφία, πολλαπλασιαστής, ανοχή,
θερμικός συντελεστής).
Ο Χρωματικός Κώδικας
ΚΑΛΩΔΙΑ ΣΥΝΔΕΣΗΣ
Τα καλώδια σύνδεσης χρησιμοποιούνται σε πίνακες breadboard για να «ενώσουν» τη μια
σύνδεση στην άλλη. Τα καλώδια έχουν διαφορετικούς συνδετήρες σε
κάθε άκρο. Η άκρη με τον «πείρο» θα πάει στο breadboard, και είναι
γνωστό ως «αρσενική» άκρη. Η άκρη με το κομμάτι πλαστικό με μια
τρύπα, θα πάει στις ακίδες GPIO του Raspberry Pi. Αυτή είναι η
«θηλυκή» άκρη.
και εμπέδωσης του αντικειμένου και η αξιολόγηση γίνονται στο σχολικό εργαστήριο, με τον κάθε
μαθητή να δουλεύει συνεργατικά με τους συμμαθητές του.
Δραστηριότητα 2
Δημιουργία ηλεκτρικού κυκλώματος με LED
Κάθε διάταξη που αποτελείται από κλειστούς αγώγιμους «δρόμους», μέσω των οποίων μπορεί
να διέλθει ηλεκτρικό ρεύμα ονομάζεται ηλεκτρικό κύκλωμα.
Ένα ηλεκτρικό κύκλωμα αποτελείται από ένα σύνολο ηλεκτρικών στοιχείων (καλώδια,
αντιστάσεις, λαμπτήρες, μπαταρίες ή άλλες πηγές ρεύματος)
που είναι μεταξύ τους συνδεδεμένα. Θεωρούμε ότι η φορά του
ηλεκτρικού ρεύματος ταυτίζεται με τη φορά κίνησης υποθετικών
θετικών φορτίων που κινούνται κατά μήκος των αγωγών (στην
πραγματικότητα η φορά είναι αντίθετη λόγω της κίνησης των
ηλεκτρονίων). Επομένως, αν στο εσωτερικό των αγωγών
κινούνταν θετικά φορτισμένα σωματίδια, η κίνησή τους θα ήταν
από το θετικό πόλο της πηγής προς τον αρνητικό.
Στην εικόνα απεικονίζεται ένα ανοικτό ηλεκτρικό κύκλωμα όπου
τα στοιχεία είναι συνδεδεμένα σε σειρά:
Η πηγή (2 μπαταρίες 1,5 V, συνολική τάση 3 V). Τον αρνητικό πόλο της πηγής (δηλαδή 0 V)
τον ονομάζουμε γείωση Ground, και στο Raspberry Pi θα τον συναντήσουμε ως GND.
Μία κόκκινη λάμπα LED (Light Emitting Diode), ένα είδος συσκευής εξόδου. Όταν το ρεύμα
ρέει μέσα από αυτήν, εκπέμπει φως. Υπάρχουν τέτοιες λάμπες με πολλά διαφορετικά
χρώματα, ακόμα και λάμπες που μπορούν να παράγουν διαφορετικούς χρωματισμούς.
Η λάμπα LED χαρακτηρίζεται ως δίοδος. Μία δίοδος επιτρέπει τη ροή του ρεύματος μόνο
προς μία κατεύθυνση, πράγμα που σημαίνει ότι τα άκρα της λάμπας LED πρέπει να
συνδεθούν με συγκεκριμένο τρόπο στο κύκλωμα.
Μία αντίσταση (στην περίπτωσή μας 330 Ω) που προστατεύει τη λάμπα LED. Οι αντιστάσεις
καταναλώνουν ενέργεια από την πηγή και επομένως η ποσότητα ενέργειας που καταλήγει
στη λάμπα LED είναι μικρότερη. Χωρίς την αντίσταση η λάμπα LED πιθανόν να καεί (με
παρόμοιο τρόπο λειτουργεί η ηλεκτρική ασφάλεια στις διάφορες συσκευές του σπιτιού, με τη
διαφορά ότι εκεί επιθυμούμε να πέσει δηλαδή να ανοίξει το κύκλωμα, για να προστατέψει
από πιθανή διαρροή ρεύματος ή να προστατέψει τις συσκευές από καταστροφή).
Ο διακόπτης λειτουργεί αντίστροφα ενός φράγματος, στο κύκλωμα μας. Όταν είναι ανοικτός
δεν κυκλοφορεί ρεύμα, ενώ όταν κλείσει το ρεύμα κυκλοφορεί και επομένως ανάβει η λάμπα
LED.
Raspberry Pi
Πάνω στην πλακέτα του Raspberry Pi υπάρχει μία σειρά από 40 ακίδες (GPIO).
Υπάρχουν 2 ακίδες των 5 V, 2 ακίδες των 3.3 V και αρκετές ακίδες γείωσης (Ground). Αυτές οι
ακίδες δεν προγραμματίζονται. Όλες οι άλλες ακίδες προγραμματίζονται με κατάλληλο λογισμικό
και μπορούν να συνδεθούν σε αυτές διάφορες συσκευές εισόδου (π.χ. κουμπί οπότε ρυθμίζονται
σε κατάσταση input) ή διάφορες συσκευές εξόδου (π.χ. LED οπότε ρυθμίζονται σε κατάσταση
output).
Με ακίδες εισόδου (input) μπορεί να ανιχνευτεί αν πατήθηκε ένα κουμπί ή όχι ή να ληφθεί μία
τιμή από έναν αισθητήρα κτλ. Με ακίδες εξόδου (output) μπορούν να σταλούν σήματα on/off
(δηλαδή HIGH 3.3 V ή LOW 0 V) και να ελεγχθεί η συμπεριφορά των στοιχείων εξόδου του
κυκλώματος, όπως για παράδειγμα να αναβοσβήνει μία λάμπα LED.
Βρείτε στις ακίδες GPIO, του Raspberry Pi, μία ακίδα των 3.3 V που
είναι σημειωμένη ως 3V3 και μία ακίδα των 0 V που είναι σημειωμένη
ως GND. Το κύκλωμα θα κλείνει σε αυτές τις δύο ακίδες ώστε να
δημιουργηθεί η απαραίτητη διαφορά δυναμικού των 3.3 Volt.
Τοποθετείστε ένα καλώδιο που θα συνδέει μία ακίδα 3V3 με μία
μπάρα (δε έχει σημασία το γράμμα-στήλη αφού όλες οι τρύπες κάθε
πεντάδας επικοινωνούν). Έπειτα στην τελευταία τρύπα της μπάρας
βάλτε το μακρύ άκρο της λάμπας LED (έχει σημασία να συνδέετε πάντα το μακρύ άκρο με το
θετικό πόλο της πηγής). Βάλτε το κοντό άκρο στην πρώτη τρύπα της παράπλευρης μπάρας. Σε
μία από τις υπόλοιπες τρύπες της μπάρας που βάλατε το κοντό άκρο του LED, θα συνδέσετε της
αντίσταση. Τελευταίο βήμα είναι να κλείσετε το κύκλωμα σε μία ακίδα GND, συνδέοντας την
μπάρα που βρίσκεται η αντίσταση με ακόμα ένα καλώδιο. Το κύκλωμα έκλεισε και η λάμπα
ανάβει! (η λάμπα LED μένει συνεχώς αναμμένη).
Δραστηριότητα 3
Προγραμματισμός LED που αναβοσβήνει
Ανοίξτε στον υπολογιστή σας ένα συντάκτη IDE. Για τον προγραμματισμό της ακίδας που θα
συνδέεται με το μεγάλο άκρο της λάμπας LED, θα χρησιμοποιήσετε τη βιβλιοθήκη gpiozero. Μία
βιβλιοθήκη στην Python είναι μία συλλογή από αντικείμενα και διαδικασίες/συναρτήσεις που
βοηθούν να προγραμματίσετε πιο σύντομα και αποτελεσματικά. Στην προκειμένη περίπτωση, η
ευκολία αφορά στον προγραμματισμό των ακίδων GPIO και στη διαχείριση του χρόνου (αναμονή
ανάμεσα στο άναμμα και σβήσιμο της λάμπας LED).
Γράψτε τον ακόλουθο κώδικα (μετά τον χαρακτήρα # ακολουθούν επεξηγηματικά σχόλια):
from gpiozero import LED #εισαγωγή συναρτήσεων LED της βιβλιοθήκης GPIOZero
from time import sleep #συλλογή συναρτήσεων που σχετίζονται με το χρόνο
Δραστηριότητα 4
Δημιουργήστε ένα κύκλωμα με 3 LED (κόκκινο, κίτρινο, πράσινο) στα pin 18, 23 και 24.
Γράψτε ένα πρόγραμμα που θα ανάβει τα LED για 1 sec και μετά θα τα σβήνει.
red = LED(18)
yellow = LED(23)
green = LED(24)
while True:
red.on()
yellow.on()
green.on()
time.sleep(1)
red.off()
yellow.off()
green.off()
time.sleep(1)
Φύλλο εργασίας 2
Δραστηριότητα 1
Τροποποιήστε το πρόγραμμα έτσι ώστε πρώτα να ρωτάει τον χρήστη:
α) ποιο Led θα ανάψει β) πόσες φορές και γ) με τι διάρκεια.
red = LED(18)
yellow = LED(23)
green = LED(24)
if led_choice == 1:
LEDChoice = red
elif led_choice == 2:
LEDChoice = yellow
elif led_choice == 3:
LEDChoice = green
# Μπορείτε να τροποποιήσετε το πρόγραμμα ώστε να προστατεύεται από λάθος τιμές;
Αποδεκτές τιμές είναι μόνο οι 1,2 και 3.
if led_choice > 0:
while count > 0:
LEDChoice.on()
time.sleep(t) # Ανάβει t sec
LEDChoice.off()
time.sleep(1)
count = count-1 # Μείωση της μεταβλητής κατά 1 για να τερματίσει κάποτε
Δραστηριότητα 2
Προγραμματισμός LED με μεταβλητή φωτεινότητα
Η φωτεινότητα του LED (PWM pulse-width-modulation), μπορεί να οριστεί χρησιμοποιώντας την
κλάση PWMLED, με την ιδιότητα value του αντικειμένου led, βάζοντας τιμές μεταξύ 0 και 1.
Γράψτε τον ακόλουθο κώδικα:
led = PWMLED(17)
while True:
led.value = 0 # σβηστό LED
sleep(1)
led.value = 0.5 # μισή από τη διαθέσιμη φωτεινότητα
sleep(1)
led.value = 1 # αναμμένο με όλη τη διαθέσιμη φωτεινότητα
sleep(1)
Δραστηριότητα 3
Γράψτε ένα πρόγραμμα που θα αναβοσβήνει ένα LED αργά, ώστε να μοιάζει σαν να αναπνέει.
Υπόδειξη:
Ξεκινήστε από φωτεινότητα μηδέν και αυξήστε σταδιακά τη φωτεινότητα με μια πολύ μικρή
καθυστέρηση (~0.05 sec) σε κάθε αλλαγή. Όταν φτάσει στη φωτεινότητα 1, μια μικρή αναμονή
(~0.5 sec) Τώρα αντίστροφα, ξεκινήστε από φωτεινότητα 1 και μειώστε σταδιακά τη φωτεινότητα
με μια πολύ μικρή καθυστέρηση σε κάθε αλλαγή, μέχρι 0να γίνει 0. Όταν το led έχει σβήσει, μια
μικρή αναμονή (~0.5 sec)
Δραστηριότητα 5
Δημιουργήστε ένα κύκλωμα με 6 LED. Γράψτε ένα πρόγραμμα που θα δημιουργεί ένα εφέ της
αρεσκείας σας. (Μπορεί να είναι σαν τα φωτάκια του Χριστουγεννιάτικου δέντρου).
Φύλλο εργασίας 3
Εισαγωγή και διαχείριση κουμπιών (push button)
Δραστηριότητα 1
Προγραμματίστε:
button = Button(25)
while True:
if button.is_pressed:
print("Button pressed")
time.sleep(1)
else:
print("Waiting for you to press the button ")
time.sleep(0.5)
Δραστηριότητα 2
Προγραμμάτισε την κλήση μιας συνάρτησης όταν πατηθεί το κουμπί:
def say_hello():
print("Hello!")
button = Button(25)
button.when_pressed = say_hello # Χωρίς παρενθέσεις (γιατί ;)
pause()
Δραστηριότητα 3
Προγραμμάτισε όταν πατηθεί το κουμπί να ανάβει το κόκκινο LED αλλιώς να σβήνει:
red = LED(18)
button = Button(25)
while True:
if button.is_pressed:
red.on()
print("Άναψε το κόκκινο")
else:
red.off()
print("Περιμένω να πατηθεί το κουμπί")
pause()
Δραστηριότητα 4
Δημιουργήσετε ένα παιχνίδι αντανακλαστικών με 2 παίκτες. Κάθε παίκτης θα έχει το δικό του
κουμπί. Ένα LED παραμένει σβηστό για τυχαίο αριθμό δευτερολέπτων από 5 μέχρι 10 και έπειτα
ανάβει. Κερδίζει ο παίκτης που θα πατήσει πιο γρήγορα το κουμπί του, αφού ανάψει η λάμπα
LED.
Υπόδειξη:
Θα χρειαστεί να εισάγετε τη συνάρτηση randint :
from random import randint
Φύλλο εργασίας 4
Δραστηριότητα 1
Φωτεινός σηματοδότης
red = LED(18)
yellow = LED(23)
green = LED(24)
green.on() # Αρχικοποίηση
yellow.off()
red.off()
while True:
sleep(10) # Το πράσινο και το κόκκινο ανάβουν 10 sec
green.off()
yellow.on()
sleep(2) # Το κίτρινο ανάβει 2 sec
yellow.off()
red.on()
sleep(10)
yellow.on()
sleep(2)
green.on()
yellow.off()
red.off()
Δραστηριότητα 2
Εκπέμπω SOS με βομβητή
Βομβητής (Buzzer)
Ο βομβητής έχει 2 άκρα, θετικό και αρνητικό. Το μακρύτερο άκρο είναι το
θετικό (εμφανίζεται με κόκκινο χρώμα στο διάγραμμα), το βραχύτερο άκρο
είναι το αρνητικό (εμφανίζεται με μαύρο χρώμα στο διάγραμμα).
Στη δραστηριότητα αυτή θα δημιουργήσετε ένα κύκλωμα που θα εκπέμπει
σήματα Morse από τον βομβητή. Αρχικά θα προγραμματίσετε να εκπέμπει
SOS. Ο κώδικας Morse για το S είναι • • • (3 τελείες) και για το O είναι − − −
(3 παύλες). Για την τελεία ο βομβητής θα ηχεί για 0,1 sec ενώ για την παύλα θα ηχεί 0,3 sec. Θα
πρέπει να υπάρχει ένα διαχωριστικό ανάμεσα στους χαρακτήρες (θα μεσολαβεί ένα χρονικό
διάστημα 0,3 sec) και ένα διαχωριστικό ανάμεσα στις λέξεις (θα μεσολαβεί ένα χρονικό διάστημα
0,7 sec) (Τα διαστήματα καθορίζονται από τον κώδικα Morse). Το πρόγραμμα θα ρωτάει τον
χρήστη πόσες φορές θέλει να εκπέμψει SOS και ο βομβητής θα αποκρίνεται.
Δημιουργήστε το παρακάτω κύκλωμα:
Προγραμματίστε:
buzzer = Buzzer(22)
def dot(): # Ορισμός της τελείας
buzzer.on()
time.sleep(0.1)
buzzer.off()
time.sleep(0.2)
def dash(): # Ορισμός της παύλας
buzzer.on()
time.sleep(0.3)
buzzer.off()
time.sleep(0.1)
def letterSpace(): # Διαχωριστικό ανάμεσα σε χαρακτήρες
time.sleep(0.3)
def wordSpace(): # Διαχωριστικό ανάμεσα σε λέξεις
time.sleep(0.7)
def morseS(): # Ορισμός του S
dot()
dot()
dot()
def morseO(): # Ορισμός του O
dash()
dash()
dash()
Δραστηριότητα 3
Τροποποιήστε το πρόγραμμα για να εκπέμπει οποιοδήποτε μήνυμα σε κώδικα Morse. Ο κώδικας
Morse είναι ο εξής:
Φύλλο εργασίας 5
Προγραμματισμός αισθητήρα ανιχνευτή κίνησης (Passive Infrared Sensor)
Δραστηριότητα 1
Ένας αισθητήρας PIR έχει δύο θύρες (slots). Κάθε μία είναι ευαίσθητη στην
υπέρυθρη ακτινοβολία IR. Όταν δε υπάρχει κίνηση, ο αισθητήρας είναι
ανενεργός και οι δύο θύρες λαμβάνουν τη ίδια υπέρυθρη ακτινοβολία. Όταν
ένα θερμό σώμα εισέλθει στο πεδίο, το σώμα θα εντοπιστεί πρώτα στη μία από
τις δύο θύρες του αισθητήρα, δημιουργώντας έτσι μια διαφορά με την άλλη
θύρα. Αντίστοιχη διαφορά θα προκληθεί και αν το θερμό σώμα είναι μέσα στο
πεδίο των 2 θυρών και ξαφνικά αποχωρήσει. Αυτό οφείλεται στους φακούς
(lens) που τοποθετούνται πάνω στον αισθητήρα (πλαστικό άσπρο περίβλημα)
και διαιρούν τις δύο μεγάλες περιοχές ανίχνευσης σε πολλαπλές μικρότερες
περιοχές για αποτελεσματικότερη ανίχνευση
pir = MotionSensor(4)
bz = Buzzer(3)
while True:
print("Σε αναμονή...")
pir.wait_for_motion()
print("Ανιχνεύτηκε κίνηση!")
bz.beep(0.5, 0.25, 8)
sleep(3)
Δραστηριότητα 2
Προσθέστε στο κύκλωμα ένα LED που θα αναβοσβήνει σε περίπτωση alarm μαζί με τον ήχο του
βομβητή. Επίσης να καταγράφεται και να εμφανίζεται η ημερομηνία και η ώρα που ανιχνεύτηκε
η κίνηση.
Υπόδειξη:
from datetime import datetime
t=datetime.now()
print("ALARM: ", t)
Φύλλο εργασίας 6
Αυτοσχεδιάστε
Σκεφθείτε ως ομάδα, μία ιδέα ψηφιακής κατασκευής που θα μπορούσατε να υλοποιήσετε. Τι
υλικά θα χρησιμοποιήσετε για την κατασκευή σας; Κάντε ένα σχεδιάγραμμα της κατασκευής και
διατυπώστε τις βασικές αρχές λειτουργίας της. Πως θα την προγραμματίσετε;
1. Τίτλος ενότητας
Σειριακή επικοινωνία Arduino- Η/Υ- Οι μεταβλητές στον προγραμματισμό
3. Εκτιμώμενη διάρκεια
Το μάθημα προβλέπεται να διαρκέσει συνολικά 2-3 ώρες
Ως προς το Περιεχόμενο:
• Να κατανοήσουν τη λειτουργία εισόδου και εξόδου σε ένα υπολογιστικό σύστημα
χρησιμοποιώντας τις κατάλληλες εντολές.
• Να κατανοήσουν την έννοια της μεταβλητής καθώς και τους τύπους μεταβλητών που
μπορούν να χρησιμοποιήσουν
Ένα δεύτερο διδακτικό εμπόδιο που συναντούν στον προγραμματισμό οι μαθητές είναι η
ανάθεση (ή εκχώρηση) τιμής μιας μεταβλητής. Η σχετική εντολή ενέχει μια μαθηματική υπόσταση,
η οποία προέρχεται από τα ονόματα των εμπλεκόμενων μεταβλητών και το σύμβολο ανάθεσης.
Ένα πρόσθετο σημαντικό διδακτικό πρόβλημα, που απαντάται κυρίως στους αρχάριους
προγραμματιστές είναι η μη αρχικοποίηση τιμών των μεταβλητών του προγράμματος. Για
παράδειγμα, στο κλασσικό πρόβλημα υπολογισμού του μέσου όρου μιας σειράς θετικών αριθμών
που εισάγονται από το πληκτρολόγιο, οι μαθητές συνήθως παραλείπουν την αρχικοποίηση τιμών
του αθροιστή s και του μετρητή m.
Καταλήγοντας μια ακόμη δυσκολία που αντιμετωπίζουν οι μαθητές είναι η κατανόηση του
γεγονότος ότι οι πράξεις επιτρέπονται μεταξύ μεταβλητών του ίδιου τύπου. Οι μαθητές είναι
περισσότερο εξοικειωμένοι με τη χρήση αριθμητικών μεταβλητών, ενώ συναντούν ιδιαίτερες
δυσκολίες όταν χειρίζονται δεδομένα τύπου string ή boolean
• Πρόσθετες πληροφορίες
Δαγδιλελης. Β.(1996), «Διδακτική της πληροφορικής. Η διδασκαλία του προγραμματισμού:
αντιλήψεις των σπουδαστών για την κατασκευή κι επικύρωση προγραμμάτων και
διδακτικές καταστάσεις για τη διαμόρφωσή τους», Διδακτορική διατριβή, Τμήμα Εφ.
Πληροφορικής, Πανεπιστήμιο Μακεδονίας
Ξυνόγαλος, Σ. (2005), Η Διδασκαλία των Αλγοριθμικών Δομών στα πλαίσια του μαθήματος
Τζιμογιάννης Α. και Κόμης Β. (2000), Η έννοια της μεταβλητής στον Προγραμματισμό: δυσκολίες
και παρανοήσεις μαθητών του Ενιαίου Λυκείου, Πρακτικά 2ου Πανελλήνιου Συνεδρίου με Διεθνή
Συμμετοχή ‘’Οι Τεχνολογίες της Πληροφορίας και της Επικοινωνίας στην Εκπαίδευση’’, 103‐114,
Πάτρα.
Τζιμογιάννης Α., Πολίτης Π. και Κόμης Β. (2005), Μελέτη των αναπαραστάσεων τελειόφοιτων
μαθητών Ενιαίου Λυκείου για την έννοια της μεταβλητής, στο Α. Τζιμογιάννης (επιμ.), Πρακτικά
3ου Πανελλήνιο
10.ΦΥΛΛΑ ΕΡΓΑΣΙΑΣ
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 1
Σύνδεση του Arduino με τον υπολογιστή
Συνδέστε το Arduino σε μία από τις USB θύρες του υπολογιστή χρησιμοποιώντας το
παρεχόμενο καλώδιο. Στη συνέχεια εκτελέστε από την επιφάνεια εργασίας το
πρόγραμμα με όνομα Arduino.
Στο παράθυρο που θα ανοίξει πηγαίνετε στο μενού Εργαλεία και στην επιλογή Πλακέτα
και επιλέξτε το Arduino/Genuino UNO. Στη συνέχεια πάλι από το μενού Εργαλεία
πηγαίνετε στο Σειριακή Θύρα και επιλέξτε τη θύρα COM στην οποία έχει συνδεθεί το
Arduino (μπορείτε να δείτε τη σωστή θύρα στη διαχείριση συσκευών των Windows)
(COM3 ή COM4).
Προγραμματισμός του Arduino
Δραστηριότητα 1
Το πρόγραμμά μας θα χρησιμοποιεί την σειριακή θύρα USB για να στείλει ένα μήνυμα
από το arduino στον υπολογιστή.
Α) Στο κεντρικό παράθυρο και συγκεκριμένα στην περιοχή void setup πληκτρολογήστε τις
παρακάτω εντολές
void setup() {
Serial.begin(9600);
Serial.print("HELLO WORLD");
}
void loop() {
}
Τι βλέπετε;
……………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………
Δ. Μεταφέρετε την εντολή Serial.print("HELLO WORLD"); από την void setup στην
void loop
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("HELLO WORLD");
}
Ε. φορτώστε το πρόγραμμα στο arduino
ΣΤ. Ανοίξτε το παράθυρο της σειριακής θύρας
Ποια η διαφορά σε σχέση με την προηγούμενη δραστηριότητα: ………………………………
……………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………
Δραστηριότητα 2η
Λίγη θεωρία…. παρακολουθήστε στον πίνακα!!!!!
Για την υλοποίηση της δραστηριότητας η οποία θα διαβάζει τα ψηφιακά
δεδομένα από ένα αισθητήρα λευκού/μαύρου και θα τα μεταδίδει μέσω της σειριακής
θύρας πίσω στον Η/Υ θα χρειαστούμε.
Β.
Προγ
ραμμ
ατίστ
ε το
Ardui
no
έτσι
ώστε
να
δέχετ
αι τις
τιμές
του αισθητήρα και να τις εμφανίζει μέσω της σειριακής θύρας στον Η/Υ.
Στη θέση του ? πρέπει να τοποθετήσουμε την εντολή η οποία διαβάζει και
επιστρέφει την τιμή του αισθητήρα. Ποια είναι η εντολή????
void setup() {
…………………………………….
…………………………………….
}
void loop() {
…………………………………….
…………………………………….
…………………………………….
}
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 2
Λίγη θεωρία…. παρακολουθήστε στον πίνακα!!!!!
Δραστηριότητα 1η
Α. Στο παρακάτω πρόγραμμα εντοπίστε τις μεταβλητές, καταγράψτε τον τύπο τους
καθώς και το περιεχόμενο τους.
int led;
int ledOrange;
double thermokrasia;
String minima;
boolean motion;
void setup() {
Serial.begin(9600);
led=1;
ledOrange=3;
thermokrasia=21.6;
minima="H Θερμοκρασία είναι";
motion=LOW;
}
void loop() {
Serial.println(led);
Serial.println(ledOrange);
Serial.println(thermokrasia);
Serial.println(minima);
Serial.println(motion);
delay(5000);
}
void loop() {
}
Απάντηση:………………………………………
void setup() {
Serial.begin(9600);
a=5;
b=10;
a=a+1;
c=a+b;
Serial.println(c);
}
void loop() {
}
Απάντηση:………………………………………
Δ. Στο προηγούμενο πρόγραμμα προσθέστε τις νέες εντολές που φαίνονται με έντονο
μαύρο στο παρακάτω πρόγραμμα:
int a;
int b;
int c;
String m;
void setup() {
Serial.begin(9600);
m="Το αποτελεσμα είναι:";
a=5;
b=10;
a=a+1;
c=a+b;
Serial.print(m);
Serial.println(c);
}
void loop() {
}
Τι πιστεύετε ότι θα εμφανίσει το πρόγραμμα;
………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………….
Συζητώντας στην ομάδα σας εξηγήστε τον τρόπο με τον οποίο εμφανίζουμε ένα
Στο προηγούμενο μάθημα δημιουργήσατε ένα πρόγραμμα το οποίο διαβάζει την τιμή
του αισθητήρα λευκού/μαύρου και την μεταδίδει μέσω της σειριακής θύρας πίσω στον
Η/Υ.
Τροποποιήστε το πρόγραμμα σας έτσι ώστε αφού διαβάσει την τιμή του αισθητήρα να
την μεταβιβάσει σε μία μεταβλητή (Χ) ακέραιου τύπου και στη συνέχεια να μεταδίδει
μέσω της σειριακής την τιμή της (Χ) .
void setup() {
………………………………………..
………………………………………..
………………………………………..
……………………………………….
}
void loop() {
……………………………………….
………………………………………..
………………………………………..
………………………………………..
……………………………………….
………………………………………..
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 1
Σύνδεση του Arduino με τον υπολογιστή
Συνδέστε το Arduino σε μία από τις USB θύρες του υπολογιστή χρησιμοποιώντας το
παρεχόμενο καλώδιο. Στη συνέχεια εκτελέστε από την επιφάνεια εργασίας το πρόγραμμα
με όνομα Arduino.
Στο παράθυρο που θα ανοίξει πηγαίνετε στο μενού Εργαλεία και στην επιλογή Πλακέτα
και επιλέξτε το Arduino/Genuino UNO. Στη συνέχεια πάλι από το μενού Εργαλεία
πηγαίνετε στο Σειριακή Θύρα και επιλέξτε τη θύρα COM στην οποία έχει συνδεθεί το
Arduino (μπορείτε να δείτε τη σωστή θύρα στη διαχείριση συσκευών των Windows)
(COM3 ή COM4).
Τέλος από το μενού Εργαλεία επιλέξτε Ardublock
Στον παρακάτω πίνακα μπορείτε να δείτε σε ποια ομάδα εντολών ανήκει κάθε εντολή που θα
χρησιμοποιήσουμε.
Η εντολή serial.print περιλαμβάνει το πλακίδιο message στο οποίο κάνοντας κλίκ γράφουμε το
μήνυμα που θέλουμε να στείλουμε.
Τι βλέπετε;
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
……………………………………………………
Ζ. Αντικαταστήστε την επιλογή νέα γραμμή από <ΨΕΥΔΕΣ> σε <ΑΛΗΘΕΣ> και εκτελέστε τα
βήματα Ε και ΣΤ
Ποια η διαφορά μεταξύ των επιλογών νέα γραμμή <ΑΛΗΘΕΣ> και νέα γραμμή <ΨΕΥΔΕΣ)
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
………………………………………
Δραστηριότητα 2η
Για την υλοποίηση της δραστηριότητας η οποία θα διαβάζει τα ψηφιακά δεδομένα από ένα
αισθητήρα λευκού/μαύρου και θα τα μεταδίδει μέσω της σειριακής θύρας πίσω στον Η/Υ θα
χρειαστούμε.
Β.
Προγραμ
ματίστε
το
Arduino
έτσι
ώστε να
δέχεται
τις τιμές
του
αισθητήρ
α και να
τις
εμφανίζει μέσω της σειριακής θύρας στον Η/Υ.
Στον παρακάτω πίνακα μπορείτε να δείτε σε ποια ομάδα εντολών ανήκει κάθε εντολή που θα
χρησιμοποιήσουμε.
Παράδειγμα:
Δημιουργήστε το πρόγραμμα το οποίο θα διαβάζει τα ψηφιακά δεδομένα (0 ή 1) από ένα
αισθητήρα λευκού/μαύρου και θα τα μεταδίδει μέσω της σειριακής θύρας πίσω στον Η/Υ.
Επιβεβαιώστε την απάντησή σας εκτελώντας το πρόγραμμα στο Arduino
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 2
Λίγη θεωρία σχετικά με τις μεταβλητές…. παρακολουθήστε στον πίνακα!!!!!
Δραστηριότητα 1η
Α. Στο παρακάτω πρόγραμμα εντοπίστε τις μεταβλητές, καταγράψτε τον τύπο τους καθώς και το
περιεχόμενο τους.
B. Στην επιφάνεια εργασίας υπάρχει το sketch με το όνομα variables, επιβεβαιώστε τον πίνακά σας
εκτελώντας το πρόγραμμα στο Arduino.
Γ. Τι αποτέλεσμα θα εμφανίσει στην σειριακή οθόνη το παρακάτω πρόγραμμα :
Απάντηση:………………………………………
Στην επιφάνεια εργασίας υπάρχει το sketch με το όνομα variables_2, επιβεβαιώστε την απάντησή
σας εκτελώντας το πρόγραμμα στο Arduino.
!Προσοχή!
(ΠΡΟΣΟΧΗ το πλακίδιο στο οποίο συμπληρώνουμε τον αριθμό που θέλουμε να προσθέσουμε
είναι τύπου integer(Ακεραίου ) και θα το βρούμε στην κατηγορία: ΜΕΤΑΒΛΗΤΕΣ/ΣΤΑΘΕΡΕΣ.
Απάντηση:………………………………………
Επιβεβαιώστε την απάντησή σας εκτελώντας το πρόγραμμα στο Arduino
Συζητώντας στην ομάδα σας εξηγήστε τον τρόπο λειτουργίας της εντολής
α=α+1
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
……………………………………………………
Δ. Στο προηγούμενο πρόγραμμα προσθέστε μια μεταβλητή με όνομα m τύπου String και δώστε
την τιμή "Το αποτέλεσμα είναι:"
ΣΤ. τοποθέτηστέ τις δυο εντολές πριν την εντολή εμφάνισης του περιεχομένου της μεταβλητής C
(σσ βλέπε κόκκινο βέλος στο σχήμα)
Συζητώντας στην ομάδα σας εξηγήστε τον τρόπο με τον οποίο εμφανίζουμε ένα συγκεκριμένο
μήνυμα στον υπολογιστή με την χρήση της μεταβλητής m
…………………………………………………………………………………………………………
…………………………………………………………………………………………………………
……………………………………………………
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 2η
Στο προηγούμενο μάθημα δημιουργήσατε ένα πρόγραμμα το οποίο διαβάζει την τιμή του
αισθητήρα λευκού/μαύρου και την μεταδίδει μέσω της σειριακής θύρας πίσω στον Η/Υ.
Τροποποιήστε το πρόγραμμα σας έτσι ώστε αφού διαβάσει την τιμή του αισθητήρα να την
μεταβιβάσει σε μία μεταβλητή (Χ) Λογικού τύπου (αναφέρεται ως digital στο περιβάλλον
Ardublock)
και στη συνέχεια να μεταδίδει μέσω της σειριακής την τιμή της (Χ) στον Η/Υ.
ΦΥΛΛΟ ΑΞΙΟΛΟΓΗΣΗΣ
(χρόνος υλοποίησης 5 λεπτά)
Ονοματεπώνυμο:…………………………………………………… Ημερομηνία:………….
Άσκηση 1η
Αντιστοιχίστε τους τύπους μεταβλητών με τις τιμές που μπορούν να πάρουν
Α Int 1 Σ
Β Long 2 ΚΑΛΗΜΕΡΑ
Γ Float 3 ΑΛΗΘΗΣ
Δ Char 4 125
Ε String 5 2345000
Στ Boolean 6 45.8
Απάντηση:
Α
Β
Γ
Δ
Ε
Στ
Επιλέξτε Σωστό ή Λάθος για κάθε μία από τις παρακάτω προτάσεις.
Σωστό Λάθος
1. Στην εντολή σ=α+1 το πρώτο που θα γίνει είναι να υπολογιστεί το
α=1
2. Ένας ψηφιακός αισθητήρας μπορεί να επιστρέψει 1024
διαφορετικές τιμές
3. Οι μεταβλητές δηλώνονται πριν την void Setup
4. Χρησιμοποιώντας την παρακάτω εντολή delay (3000); Το
πρόγραμμα θα κάνει παύση για 30 sec;
Με τα εργαλεία και τις γλώσσες υψηλού επιπέδου και τα μπλοκ διαγράμματα της πλατφόρμας
Matlab και Simulink της Mathworks έχουμε τα παρακάτω οφέλη από τη χρήση του MATLAB για
προγραμματισμό Arduino:
Ανάγνωση και εγγραφή δεδομένων αισθητήρα διαδραστικά χωρίς την ανάγκη ανάπτυξης
κώδικα για την καταγραφή
Αναλύση των δεδομένων αισθητήρων χρησιμοποιώντας χιλιάδες προκαθορισμένες
λειτουργίες για την επεξεργασία σήματος, την εκμάθηση μηχανών, τη μαθηματική
μοντελοποίηση και πολλά άλλα
Γρήγορη απεικόνιση των δεδομένων χρησιμοποιώντας τη μεγάλη ποικιλία τύπων σχεδίων
στο MATLAB
Ανάπτυξη και προσομοίωση αλγορίθμων στο Simulink και χρήση τους στην αυτόματη
δημιουργία κωδικών για να τις εκτελέσετε στη συσκευή
Ενσωμάτωση της επεξεργασίας σήματος, το σχεδιασμό του ελέγχου, την λογική
κατάστασης και άλλες προηγμένες μαθηματικές και μηχανικές ρουτίνες στα projects
Δια δραστικός συντονισμός και βελτιστοποίηση τις παραμέτρων καθώς ο αλγόριθμος
εκτελείται στη συσκευή