https://github.com/talos-robotics/Kodon-melodikos
Κώδων ο μελωδικος
Το πρόβλημα
Σε πολλά σχολεία, το κουδούνι που σηματοδοτεί την έναρξη και τη λήξη των μαθημάτων είναι ένα κλασικός και μονότονος ήχος που συνήθως είναι δυνατός και απότομος. Αυτός ο ήχος, αν και πρακτικός, μπορεί να είναι ενοχλητικός ή ακόμη και αγχωτικός για πολλούς μαθητές και εκπαιδευτικούς. Σε μια καθημερινότητα γεμάτη από στρες και συνεχείς υποχρεώσεις, το κουδούνι, αντί να προσφέρει μια ευχάριστη μετάβαση στο διάλειμμα, συχνά εντείνει τη βιασύνη και την αίσθηση πίεσης.
Η λύση
Η ομάδα Τάλως Robotics έχει να προτείνει μια δημιουργική λύση: την αντικατάσταση του κλασικού κουδουνιού με ένα ψηφιακό κουδούνι που θα παίζει ευχάριστη μουσική σε όλη τη διάρκεια του διαλείμματος. Η μουσική έχει την ικανότητα να χαλαρώνει και να βελτιώνει τη διάθεση, δημιουργώντας ένα πιο φιλικό και θετικό σχολικό περιβάλλον.
Με αυτό το ψηφιακό κουδούνι, οι μαθητές θα βιώνουν πιο ομαλά τη μετάβαση από το μάθημα στο διάλειμμα. Η μουσική θα βοηθήσει στη μείωση του άγχους και θα προσφέρει στιγμές χαλάρωσης, ώστε τα παιδιά να απολαμβάνουν το διάλειμμά τους με περισσότερη ηρεμία και χαρά. Επιπλέον, θα ενθαρρύνει την κοινωνικοποίηση και το παιχνίδι, καθώς η μουσική μπορεί να αποτελέσει αφορμή για πιο δημιουργικές δραστηριότητες στην αυλή.
Το νέο αυτό σύστημα όχι μόνο θα προσφέρει μια πιο ευχάριστη καθημερινή εμπειρία για τους μαθητές, αλλά θα λειτουργήσει και ως ένα καινοτόμο παράδειγμα για το πώς η τεχνολογία μπορεί να συνδυαστεί με τη σχολική ζωή, κάνοντας το σχολείο έναν χώρο πιο ευχάριστο και δημιουργικό.
Θα ασχοληθούμε με,
- Γλώσσα προγραμματισμού Python
- Κατασκευή GUI με τη χρήση Tkinter
- Κατασκευή υπολογιστή παλάμης με τη χρήση raspberry pi για την ενσωμάτωση του λογισμικού
- Linux distributions σαν βασικό περιβάλλον εργασίας και δημιουργίας
- 3d εκτυπώσεις για τη φιλοξενία του εξοπλισμού
👥 Συμμετέχοντες
Υπεύθυνος εκπαιδευτικός
Μανούσακας Μανούσος – Εκπαιδευτικός Πληροφορικής ΠΕ86
Μαθητές
- ΜΠΟΥΡΔΑΚΗΣ ΔΗΜΗΤΡΗΣ
- ΝΙΚΟΛΑΝΤΩΝΑΚΗΣ ΔΗΜΗΤΡΙΟΣ
- ΠΕΡΟΓΙΑΝΝΗΣ ΙΩΑΝΝΗΣ ΜΑΡΙΟΣ
- ΦΑΛΑΓΚΑΡΑΣ ΝΙΚΟΛΑΣ
- ΦΡΑΓΚΙΟΥΔΑΚΗΣ ΕΜΜΑΝΟΥΗΛ
- ΛΑΜΡΙΝΑΚΗ ΑΛΕΞΑΝΔΡΑ
- ΕΙΚΟΣΙΠΕΝΤΑΚΗ ΔΑΦΝΗ ΕΙΡΗΝΗ
- ΚΟΝΙΤΟΠΟΥΛΟΣ ΝΙΚΟΛΑΟΣ
🎯 Γενικά στοιχεία σεναρίου
Σενάριο δραστηριότητας
Αριθμός μαθητών: 8
Αριθμός Ομάδων: 3
Αριθμός ατόμων ανά ομάδα: 2-3
Είδος δραστηριότητας: Ομαδοσυνεργατική
Ρόλοι: Δεν υπάρχουν διακριτοί ρόλοι στην ομάδα.
Ηλικιακή ομάδα: > 12
Φάση προετοιμασίας
Οι μαθητές θα πρέπει να:
- Διερευνήσουν στο διαδίκτυο σχετικά με το θέμα.
- Να αναζητήσουν και να αναλύσουν τις απαιτήσεις.
- Συντάξουν ένα έντυπο όπου θα περιγράφουν τις προδιαγραφές του project.
- Να αναζητήσουν στο διαδίκτυο πληροφορίες για τον τρόπο λύσης και τις επιλογές του υλικού.
Φάση σχεδιασμού
Οι μαθητές θα πρέπει να:
- Να αναζητήσουν στο διαδίκτυο πληροφορίες για τη συνδεσμολογία του υλικού.
- Να αναζητήσουν στο διαδίκτυο πληροφορίες για τις προδιαγραφές.
Φάση υλοποίησης
Οι μαθητές θα πρέπει να:
- Δημιουργήσουν τις φυσικές συνδέσεις των υλικών τους.
- Να εγκαταστήσουν τις απαραίτητες βιβλιοθήκες.
- Να δημιουργήσουν πρόγραμμα με τη χρήση της γλώσσας python που θα δημιουργεί τον κορμό του βασικού προγράμματος.
- Να δημιουργήσουν πρόγραμμα με τη χρήση του python interface έτσι ώστε να δημιουργήσουν ενα GUI καλάληλα κατασκευασμένο.
Φάση Δοκιμών
Οι μαθητές θα πρέπει να:
- Δοκιμάσουν τον εξοπλισμό τους και να επιβεβαιώσουν τη σωστή λειτουργία του.
🔩 Υλικά ηλεκτρονικά
📌 Ενότητα 1️⃣ :
Εκπαιδευτική διαδικασία
LAMS (Διαχείριση Μαθησιακών Δραστηριοτήτων)
Κατά τη διάρκεια της υλοποίησης του εκπαιδευτικού project “Κωδών – Μελωδικός”, αξιοποιήθηκε η πλατφόρμα του Πανελλήνιου Σχολικού Δικτύου LAMS, η οποία επέτρεψε τον σχεδιασμό, την οργάνωση και την παρακολούθηση μιας σύγχρονης, διαθεματικής μαθησιακής εμπειρίας. Το project ενσωματώνει στοιχεία Πληροφορικής, Τεχνολογίας και Αυτοματισμών, και σχεδιάστηκε με βάση το παιδαγωγικό μοντέλο της ανεστραμένης τάξης (flipped classroom). Οι μαθητές είχαν τη δυνατότητα να μελετήσουν θεωρητικό υλικό, όπως βασικές αρχές προγραμματισμού σε Python, έννοιες αυτοματισμού και λειτουργίας του VLC player, εκτός τάξης, μέσω διαδραστικών δραστηριοτήτων στην πλατφόρμα LAMS (βίντεο, ερωτηματολόγια, θεωρητικές σημειώσεις).
Κατά την παρουσία τους στην τάξη, αφιερωνόταν χρόνος στην εφαρμογή της γνώσης μέσα από πρακτικές δραστηριότητες, όπως η προσαρμογή του κώδικα της εφαρμογής “Κωδών – Μελωδικός”, η εισαγωγή ήχων, ο χειρισμός των χρόνων κουδουνιού και η αισθητική βελτίωση του περιβάλλοντος εργασίας. Η χρήση του LAMS υποστήριξε την διαφοροποιημένη μάθηση, επιτρέποντας στον κάθε μαθητή να προχωρά με τον ρυθμό του, και ενίσχυσε τη συνεργατική εργασία, καθώς οι μαθητές μπορούσαν να ανταλλάσσουν ιδέες και να αξιολογούν ο ένας τη δουλειά του άλλου.
Μέσα από αυτό το μοντέλο, οι μαθητές μετατράπηκαν από παθητικοί δέκτες σε ενεργούς δημιουργούς, ενισχύοντας δεξιότητες όπως η επίλυση προβλημάτων, η κριτική σκέψη και η δημιουργικότητα. Το αποτέλεσμα ήταν όχι μόνο μια πλήρως λειτουργική εφαρμογή αυτόματου σχολικού κουδουνιού, αλλά και η καλλιέργεια μιας θετικής στάσης απέναντι στη μάθηση και τη χρήση της τεχνολογίας με σκοπό.
Κατεβάστε ένα παράδειγμα δραστηριότητας που μπορείτε να κάνετε εισαγωγή στην πλατφόρμα LAMS
📝 Φύλλα Εργασίας Python
Εγκατάσταση του Thonny και την Προσθήκη Νέων Βιβλιοθηκών
Εντολή print()
Μεταβλητές
Εντολή IF
Βασικοί Κανόνες Σύνταξης
Συγκριτικοί τελεστές
Λογικές Πράξεις
Επαναληπτικές Δομές
Λίστες
Συναρτήσεις
Νήματα
Χρήση Αρχείων στην Python
📝 Φύλλα Εργασίας Tkinter
Βασικά Δομικά Στοιχεία της Βιβλιοθήκης Tkinter
Frames στο Tkinter
Textboxes
Buttons
Messagebox
Treeview
Προσθήκη Εικόνας σε Label.pdf
Open educational resources project
🎓 Θεωρητικό μέρος – Εισαγωγή
Κατεβάζω τα δωρεάν βιβλία
Η γλώσσα προγραμματισμού PYTHON
Η γλώσσα προγραμματισμού Python είναι μια υψηλού επιπέδου, διερμηνευόμενη γλώσσα προγραμματισμού που δημιουργήθηκε από τον Guido van Rossum και κυκλοφόρησε για πρώτη φορά το 1991. Η Python έχει σχεδιαστεί με έμφαση στην αναγνωσιμότητα του κώδικα και την απλότητα, κάτι που την καθιστά ιδανική για αρχάριους προγραμματιστές.
Μία από τις βασικές αρχές της Python είναι η φιλοσοφία του “υπάρχει μόνο ένας σωστός τρόπος να γίνει κάτι”. Αυτή η φιλοσοφία προωθεί την απλότητα και τη σαφήνεια στον κώδικα, καθιστώντας τον ευανάγνωστο και ευκολότερο στη συντήρηση. Επίσης, η Python υποστηρίζει μια μεθοδολογία προγραμματισμού που ονομάζεται “βαθμωτός προγραμματισμός”, όπου ο κώδικας γράφεται σε μικρές, αυτόνομες μονάδες που είναι ευκολότερο να διαχειριστεί και να επαναχρησιμοποιηθεί.
Η Python χρησιμοποιεί ένα συντακτικό που βασίζεται σε κενά (whitespace), γνωστό και ως “Pythonic”. Αυτό σημαίνει ότι ο κώδικας δομείται μέσω των κενών αλλά και των αλλαγών γραμμής, κάτι που καθιστά τον κώδικα πιο ευανάγνωστο και οργανωμένο. Επίσης, η Python υποστηρίζει δυναμική τυποποίηση, που σημαίνει ότι ο τύπος μιας μεταβλητής δεν χρειάζεται να δηλωθεί εκ των προτέρων και μπορεί να αλλάξει κατά τη διάρκεια της εκτέλεσης του προγράμματος.
Η Python έχει ευρύ φάσμα εφαρμογών και χρησιμοποιείται σε πολλές διάφορες περιπτώσεις. Από την ανάπτυξη λογισμικού γενικής χρήσης, όπως εφαρμογές γραφείου και ιστοσελίδες, μέχρι την επιστημονική προγραμματισμό και την ανάλυση δεδομένων. Επίσης, η Python έχει γίνει δημοφιλής στον τομέα της τεχνητής νοημοσύνης και του μηχανικού μάθηματος, καθώς παρέχει πλούσιες βιβλιοθήκες και εργαλεία για αυτές τις εφαρμογές.
Μερικά από τα χαρακτηριστικά που καθιστούν τη Python ιδιαίτερα δημοφιλή είναι:
-
Απλότητα: Η Python έχει σχεδιαστεί με έμφαση στην απλότητα και τη συνοχή του κώδικα. Ο συντακτικός της είναι ευανάγνωστος και ευκολονόητος, καθιστώντας την ιδανική για αρχάριους προγραμματιστές.
-
Ευελιξία: Η Python υποστηρίζει δυναμική τυποποίηση και δυναμική δέσμευση μνήμης, επιτρέποντάς στους προγραμματιστές να αλλάζουν τύπους μεταβλητών και να δημιουργούν νέες μεταβλητές χωρίς περιορισμούς.
-
Εκτελεστής πολλών πλατφορμών: Η Python είναι διαθέσιμη για πολλές πλατφόρμες, συμπεριλαμβανομένων των Windows, macOS, Linux και πολλών άλλων. Αυτό την καθιστά ευέλικτη για ανάπτυξη λογισμικού σε διάφορα περιβάλλοντα.
-
Συνοψίζοντας, η Python είναι μια δημοφιλής γλώσσα προγραμματισμού που έχει σχεδιαστεί για να είναι απλή, ευανάγνωστη και ευέλικτη. Χρησιμοποιείται σε πολλές εφαρμογές και περιβάλλοντα, από την ανάπτυξη λογισμικού γενικής χρήσης έως την τεχνητή νοημοσύνη και την ανάλυση δεδομένων.
Τι είναι το Tkinter
Η γλώσσα tkinter είναι μια βιβλιοθήκη προγραμματισμού που χρησιμοποιείται για την ανάπτυξη γραφικών διεπαφών χρήστη (GUI) σε Python. Το όνομα “tkinter” προέρχεται από τη συνδυασμένη χρήση των λέξεων “Tk” και “inter”, όπου το “Tk” αναφέρεται στη βιβλιοθήκη Tkinter και το “inter” στο γεγονός ότι αλληλεπιδρά με το περιβάλλον Python.
Η Tkinter αποτελεί μέρος της βασικής εγκατάστασης της Python, οπότε δεν απαιτεί επιπλέον εγκατάσταση. Παρέχει μια σειρά από κλάσεις και μέθοδους που επιτρέπουν τη δημιουργία και τη διαχείριση γραφικών στοιχείων, όπως παράθυρα, κουμπιά, ετικέτες, πλαίσια κ.λπ. Η Tkinter χρησιμοποιεί τη βιβλιοθήκη Tk για την απεικόνιση των γραφικών στοιχείων και προσφέρει μια απλή και ευέλικτη δομή για τη δημιουργία εφαρμογών με γραφική διεπαφή.
Η Tkinter χρησιμοποιείται ευρέως για την ανάπτυξη desktop εφαρμογών με γραφική διεπαφή χρήστη στη γλώσσα προγραμματισμού Python. Είναι μία από τις πλέον δημοφιλείς βιβλιοθήκες GUI για Python και προσφέρει μεγάλη ευκολία χρήσης και ευελιξία. Η Tkinter υποστηρίζει τη δημιουργία πολλών διάφορων στοιχείων GUI, όπως κουμπιά, πλαίσια, ετικέτες, κουτιά επιλογής, πεδία κειμένου κ.λπ., και παρέχει δυνατότητες για τη διαχείριση γεγονότων και αλληλεπίδραση με τον χρήστη.
Με τη βοήθεια της Tkinter, ο προγραμματιστής μπορεί να δημιουργήσει γρήγορα και εύκολα εφαρμογές με γραφική διεπαφή χρήστη που μπορούν να εκτελεστούν σε διάφορα λειτουργικά συστήματα, όπως Windows, macOS και Linux. Η Tkinter προσφέρει επίσης δυνατότητες για την προσαρμογή και την επέκταση των γραφικών στοιχείων, καθώς και για τη δημιουργία πολύπλοκων διεπαφών χρήστη.
Συνολικά, η γλώσσα tkinter αποτελεί ένα ισχυρό εργαλείο για τη δημιουργία γραφικών διεπαφών χρήστη σε Python, που προσφέρει ευκολία χρήσης, ευελιξία και δυνατότητες προσαρμογής.
Raspberry pi
Το Raspberry Pi είναι ένας μικρός υπολογιστής μονόπλευρης πλακέτας που αναπτύχθηκε από το Raspberry Pi Foundation. Αυτός ο μικρός υπολογιστής προσφέρει μια οικονομική και εύχρηστη λύση για την εκμάθηση προγραμματισμού, των ηλεκτρονικών και των υπολογιστικών δεξιοτήτων.
Το Raspberry Pi έχει σχεδιαστεί για να είναι προσβάσιμο σε όλους και να ενθαρρύνει τους ανθρώπους να ανακαλύψουν τη δύναμη του υπολογισμού και τη δημιουργία. Με μέγεθος που αντέχει στο χέρι, το Raspberry Pi μπορεί να συνδεθεί σε οποιαδήποτε οθόνη, πληκτρολόγιο και ποντίκι, καθιστώντας τον ιδανικό για εκπαιδευτικές, ερευνητικές και δημιουργικές εφαρμογές.
Το Raspberry Pi λειτουργεί με ένα λειτουργικό σύστημα που βασίζεται στο Linux και υποστηρίζει πολλές γλώσσες προγραμματισμού, όπως Python, Scratch, Java και C++. Αυτό το καθιστά ιδανικό για αρχάριους προγραμματιστές που θέλουν να μάθουν τη βάση του προγραμματισμού.
Το Raspberry Pi διαθέτει επίσης αρκετές επεκτάσεις GPIO (General Purpose Input/Output), που επιτρέπουν τη σύνδεση με διάφορα ηλεκτρονικά και αισθητήρια. Αυτό το χαρακτηριστικό το καθιστά ιδανικό για προγραμματισμό και εφαρμογές σχετικές με το Internet of Things (IoT).
Με την ανάπτυξη του Raspberry Pi, έχουν δημιουργηθεί πολλά ενδιαφέροντα projects και εφαρμογές. Μπορεί να χρησιμοποιηθεί για τη δημιουργία ρομπότ, έξυπνων συστημάτων ελέγχου, media center, δικτύων και πολλών άλλων.
📌 Ενότητα 2️⃣ :
Κατασκευή κουδουνιού
Περιγραφή λειτουργίας συστήματος
Δημιουργήσαμε μια εφαρμογή γραμμένη σε Python που χρησιμοποιεί τη βιβλιοθήκη Tkinter για τη δημιουργία γραφικού περιβάλλοντος χρήστη (GUI). Το πρόγραμμα είναι σχεδιασμένο για τη διαχείριση ενός συστήματος κουδουνιών σε σχολείο, με δυνατότητα αναπαραγωγής ήχων/τραγουδιών μέσω της βιβλιοθήκης Vlc.
Το γραφικό περιβάλλον επιτρέπει στον χρήστη:
- Να ορίσει χρονικά διαστήματα κουδουνιών για διαλείμματα
- Να φορτώσει φάκελο με τραγούδια ή ήχους
- Να προγραμματίσει την αναπαραγωγή τους αυτόματα την ώρα που έχει οριστεί.
Οι ενέργειες εκτελούνται με τη χρήση πολυνηματικής επεξεργασίας (threading).
Το πρόγραμμα μπορεί να λειτουργεί σε desktop περιβάλλον με λειτουργικά συστήματα που υποστηρίζουν Python, και λόγω της χρήσης της βιβλιοθήλης Tkinter , μπορεί να ενσωματωθεί και σε περιβάλλοντα με οθόνη αφής, όπως ένα Raspberry Pi. Αυτό καθιστά την εφαρμογή ιδανική για σύνδεση στο κουδούνι του σχολείου, επιτρέποντας τον έλεγχο της αναπαραγωγής των κουδουνιών μέσω μιας εύχρηστης οθόνης αφής.
🔨 ΥΛΙΚΟ
Εκτύπωση κομματιών στον 3d εκτυπωτή
Σχέδιο Σύνδεσης
Εγκατάσταση λειτουργικού συστήματος στο Raspberry pi και Raspberry pi Zero W
Προσοχή! να κάνετε εγκατάσταση του λειτουργικού συστήματος Rasbian 32 bit τα 64 bit παρουσιάζουν πρόβλημα στην έξοδο του ήχου.
Εγκαταστήστε ένα λειτουργικό σύστημα στο Raspberry Pi σας
Παραμετροποίηση λειτουργικού στο Raspberry pi
Ας κάνουμε οριζόντιο προσανατολισμό στην οθόνη μας
Εγκατάσταση Βιβλιοθηκών Python στο Raspberry pi
Στο τερματικό του raspbian
- sudo apt update
- sudo apt upgrage
- sudo apt install python3-pil python3-pil.imagetk
Συνδεσμολογία για το rasperry pi zero των μαθητών
📌 Ενότητα 3️⃣ :
💾 ΛΟΓΙΣΜΙΚΟ
Διάγραμμα ροής
Επεξήγηση κώδικα
Ο παρακάτω κώδικας υλοποιεί μια εφαρμογή σε Python με γραφικό περιβάλλον (GUI) μέσω της βιβλιοθήκης tkinter, η οποία λειτουργεί ως ένα “σχολικό κουδούνι” που παίζει μουσική σε προκαθορισμένες ώρες. Ο φάκελος music περιέχει τα διαθέσιμα μουσικά αρχεία (.mp3 ή .wav), ενώ το αρχείο bell_times.txt αποθηκεύει τις ώρες στις οποίες πρέπει να ενεργοποιείται το κουδούνι. Ο χρήστης μπορεί να προσθέτει ή να διαγράφει ώρες μέσα από το περιβάλλον, να βλέπει τη λίστα των ωρών και να τις χειρίζεται εύκολα μέσω αριθμητικών κουμπιών. Όταν φτάσει η ώρα ενός προγραμματισμένου κουδουνιού, η εφαρμογή ελέγχει εάν ήδη παίζει μουσική — αν όχι, ξεκινά να παίζει το επόμενο διαθέσιμο από τη λίστα τραγουδιών μέσω του vlc.MediaPlayer. Το πρόγραμμα ελέγχει συνεχώς την ώρα σε ξεχωριστό νήμα (thread) για να μην μπλοκάρει η διεπαφή. Υπάρχουν επίσης χειρισμοί για να διακόπτεται η μουσική και να γίνεται έξοδος από το πρόγραμμα. Συνολικά, είναι ένα πλήρες εργαλείο αυτοματισμού για τη χρήση μουσικής ως κουδούνι στο σχολικό περιβάλλον.
Κώδικας Python
import tkinter as tk # Εισάγει τη βιβλιοθήκη tkinter για δημιουργία GUI
from tkinter import messagebox # Για χρήση αναδυόμενων παραθύρων προειδοποίησης/πληροφόρησης
import os # Χρήση για διαχείριση αρχείων/φακέλων (π.χ. ανάγνωση, ύπαρξη)
import time # Εργαλεία σχετικά με την ώρα (π.χ. format, sleep)
import threading # Για να εκτελείται παράλληλα ο έλεγχος ώρας
import vlc # Χρήση του VLC player για αναπαραγωγή μουσικών αρχείων
from PIL import ImageTk, Image # Για εμφάνιση εικόνων στο tkinter GUI
# ----------- ΡΥΘΜΙΣΕΙΣ -----------
MUSIC_FOLDER = "music" # Ο φάκελος που πρέπει να βρίσκονται τα μουσικά αρχεία
SETTINGS_FILE = "bell_times.txt" # Το αρχείο που αποθηκεύονται οι ώρες κουδουνιού
# ----------- GLOBALS -----------
current_song_index = 0 # Δείκτης για το ποιο τραγούδι παίζεται αυτή τη στιγμή
music_files = [] # Λίστα με τα ονόματα των αρχείων μουσικής
bell_times = [] # Λίστα με τις καθορισμένες ώρες για κουδούνι
playing = False # Μεταβλητή κατάστασης αν παίζει μουσική
player = None # Αντικείμενο του vlc.MediaPlayer
# ----------- ΛΕΙΤΟΥΡΓΙΕΣ -----------
# Διαβάζει όλα τα μουσικά αρχεία από τον φάκελο MUSIC_FOLDER
def load_music_files():
return [f for f in os.listdir(MUSIC_FOLDER) if f.endswith(('.mp3', '.wav'))]
# Φορτώνει τις ώρες από το αρχείο SETTINGS_FILE
def load_bell_times():
if not os.path.exists(SETTINGS_FILE):
return [] # Αν δεν υπάρχει το αρχείο, επιστρέφει κενή λίστα
with open(SETTINGS_FILE, "r") as file:
return [line.strip() for line in file.readlines()] # Διαβάζει κάθε γραμμή (ώρα)
# Αποθηκεύει τις ώρες κουδουνιού στο αρχείο
def save_bell_times(times):
with open(SETTINGS_FILE, "w") as file:
for t in times:
file.write(t + "\n")
# Παίζει το επόμενο τραγούδι στη λίστα
def play_next_song():
global current_song_index, player, playing
if current_song_index < len(music_files):
song_path = os.path.join(MUSIC_FOLDER, music_files[current_song_index]) # Δημιουργεί την πλήρη διαδρομή αρχείου
player = vlc.MediaPlayer(song_path) # Δημιουργεί αντικείμενο αναπαραγωγής
player.play() # Εκκινεί την αναπαραγωγή
song_label.config(text=f"Παίζει: {music_files[current_song_index]}") # Ενημέρωση GUI
current_song_index += 1 # Περνά στο επόμενο τραγούδι
else:
current_song_index = 0 # Αν έφτασε στο τέλος της λίστας, επανεκκίνηση
if playing:
play_next_song()
# Ξεκινά την ακολουθία τραγουδιών
def start_music_sequence():
global current_song_index, playing
playing = True
play_next_song()
# Σταματά την αναπαραγωγή μουσικής
def stop_music():
global playing, player
if player:
player.stop()
playing = False
song_label.config(text="Καμία μουσική") # Ενημερώνει το GUI
# Ελέγχει αν έχει τελειώσει το τραγούδι
def is_song_finished():
global player
if player:
return player.get_state() == vlc.State.Ended
return False
# Εκτελεί σε νέο νήμα συνεχή έλεγχο της ώρας για το αν ταιριάζει με bell_times
def start_bell_checker():
def check_time():
last_triggered = ""
while True:
current = time.strftime("%H:%M") # Παίρνει την τρέχουσα ώρα σε μορφή 24ώρη
if current != last_triggered and current in bell_times:
last_triggered = current
if playing:
stop_music()
else:
start_music_sequence()
time.sleep(60) # Περιμένει 60" για να μην χτυπά ξανά μέσα στο ίδιο λεπτό
if playing and player and is_song_finished():
play_next_song()
time.sleep(1) # Περιμένει 1 δευτερόλεπτο μεταξύ ελέγχων
threading.Thread(target=check_time, daemon=True).start() # Εκκίνηση νήματος
# Προσθήκη ώρας στο κουδούνι
def add_time():
t = time_entry.get()
if t and t not in bell_times:
bell_times.append(t)
update_listbox()
save_bell_times(bell_times)
time_entry.delete(0, tk.END)
else:
messagebox.showinfo("Προσοχή", "Ώρα άδεια ή υπάρχει ήδη.")
# Ανανεώνει το γραφικό στοιχείο λίστας με τις ώρες
def update_listbox():
listbox.delete(0, tk.END)
for index, t in enumerate(sorted(bell_times)):
listbox.insert(tk.END, t)
if index % 2 == 0:
listbox.itemconfig(index, {'bg': 'green', 'fg': 'white'})
else:
listbox.itemconfig(index, {'bg': 'red', 'fg': 'white'})
# Κλείνει το πρόγραμμα
def exodos():
exit()
# Προσθέτει αριθμούς ή διαγράφει από το πεδίο εισόδου ώρας
def numbut(pressed):
if pressed == "d":
time_entry.delete(time_entry.index("end") - 1, "end")
else:
time_entry.insert("end", pressed)
# Διαγράφει ώρα που έχει επιλεγεί στη λίστα
def delhour():
try:
selectedtime = listbox.curselection()
selectedtime = int(selectedtime[0])
bell_times.remove(bell_times[selectedtime])
listbox.delete(selectedtime)
save_bell_times(bell_times)
load_bell_times()
update_listbox()
except:
messagebox.showinfo("Προσοχή", "Παρουσιάστηκε σφάλμα. Ισως δεν έγινε επιλογή στιχείου")
# ----------- GUI -----------
root = tk.Tk() # Δημιουργία του παραθύρου της εφαρμογής
root.title("Σχολικό Κουδούνι")
root.geometry("1280x720")
root.attributes('-fullscreen', True) # Πλήρης οθόνη
tk.Label(root, text="Ώρα (π.χ. 08:15):").pack(pady=5)
time_entry = tk.Entry(root)
time_entry.pack()
tk.Button(root, text="Προσθήκη Ώρας", command=add_time).pack(pady=5)
row1 = tk.Frame(root)
row1.pack(pady=5)
# Κουμπιά αριθμητικού πληκτρολογίου
tk.Button(row1, text="<-", font=("Arial", 30), command=lambda: numbut("d")).pack(side=tk.RIGHT)
tk.Button(row1, text=" : ", font=("Arial", 30), command=lambda: numbut(":")).pack(side=tk.RIGHT)
tk.Button(row1, text="0", font=("Arial", 30), command=lambda: numbut(0)).pack(side=tk.RIGHT)
tk.Button(row1, text="9", font=("Arial", 30), command=lambda: numbut(9)).pack(side=tk.RIGHT)
tk.Button(row1, text="8", font=("Arial", 30), command=lambda: numbut(8)).pack(side=tk.RIGHT)
tk.Button(row1, text="7", font=("Arial", 30), command=lambda: numbut(7)).pack(side=tk.RIGHT)
tk.Button(row1, text="6", font=("Arial", 30), command=lambda: numbut(6)).pack(side=tk.RIGHT)
tk.Button(row1, text="5", font=("Arial", 30), command=lambda: numbut(5)).pack(side=tk.RIGHT)
tk.Button(row1, text="4", font=("Arial", 30), command=lambda: numbut(4)).pack(side=tk.RIGHT)
tk.Button(row1, text="3", font=("Arial", 30), command=lambda: numbut(3)).pack(side=tk.RIGHT)
tk.Button(row1, text="2", font=("Arial", 30), command=lambda: numbut(2)).pack(side=tk.RIGHT)
tk.Button(row1, text="1", font=("Arial", 30), command=lambda: numbut(1)).pack(side=tk.RIGHT)
tk.Label(root, text="Ώρες Κουδουνιού:").pack(pady=5)
listbox = tk.Listbox(root, font=("Arial", 15))
listbox.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)
tk.Button(root, text="Διαγραφή ώρας", command=delhour).pack(pady=5)
row2 = tk.Frame(root)
row2.pack(padx=10, pady=5, side=tk.LEFT)
tk.Label(row2, text="Τραγούδια:").pack(pady=5)
music_list = tk.Listbox(row2, height=3)
music_list.pack(fill=tk.BOTH, expand=True, pady=5)
song_label = tk.Label(row2, text="Καμία μουσική", fg="blue")
song_label.pack(pady=10)
row3 = tk.Frame(root)
row3.pack(padx=10, pady=5, side=tk.RIGHT)
img = Image.open("kodon.png")
img = img.resize((100, 100))
img = ImageTk.PhotoImage(img)
panel = tk.Label(row3, image=img)
panel.image = img # Χρήσιμο για να κρατήσει την εικόνα ενεργή στο αντικείμενο
panel.pack()
tk.Button(row3, text="Έξοδος", command=exodos).pack(pady=5)
# ----------- ΕΚΚΙΝΗΣΗ -----------
bell_times = load_bell_times() # Φόρτωση αποθηκευμένων ωρών
music_files = load_music_files() # Ανάγνωση τραγουδιών από τον φάκελο
update_listbox() # Εμφάνιση των ωρών στο GUI
for song in music_files:
music_list.insert(tk.END, song) # Εισαγωγή κάθε τραγουδιού στη λίστα
start_bell_checker() # Εκκίνηση ελέγχου ώρας σε background thread
root.mainloop() # Εκκίνηση του GUI
📌 Ενότητα 4️⃣ :
⚠️ Τι να προσέξω – Αστοχίες και λάθη
Ένα απο τα προβλήματα που μας παρουσιάστηκαν είναι οτι στην python 3.12 υπάρχουν προβλήματα με τη βιβλιοθήκη του vlc. Παρακάτω υπάρχουν οι εντολές που θα χρειαστεί να εκτελέσετε στο τερματικό έτσι ώστε να κάνετε εγκατάσταση μία παλαιότερη έκδοση python οπως την 3.10 και στη συνέχεια να εγκαταστήσετε τις βιβλιοθήκες που πρέπει. Θα δημιουργήσετε ένα εικονικό περιβάλλον για να εκτελείτε την 3.10.
- sudo apt update
- sudo apt install software-properties-common -y
- sudo add-apt-repository ppa:deadsnakes/ppa
- sudo apt update
- sudo apt install python3.10 python3.10-venv python3.10-dev
- python3.10 -m venv ~/mypython10
- source ~/mypython10/bin/activate
- pip install –upgrade pip
- python3.10 -m pip install python-vlc
- sudo apt install python3.10-tk
- python3.10 -m pip install pillow
📌 Ενότητα 5️⃣ :
Παρουσίαση
🎥 Βίντεο παρουσίαση
📷 Φωτογραφικό υλικό
Προγραμματισμός – Κατασκευή
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
🙏 ΕΥΧΑΡΙΣΤΙΕΣ
Τον Οργανισμό Ανοιχτών Τεχνολογιών
Τη Διεύθυνση των σχολείων