Ένας οδηγός για αρχάριους για τη χρήση ενός Raspberry Pi με breadboard για τη δημιουργία ενός παιχνιδιού Simon

Το breadboard σάς επιτρέπει να δημιουργείτε κυκλώματα χωρίς να χρειάζεται να κολλήσετε τίποτα. Είναι ένα εξαιρετικό εργαλείο για να πειραματιστείτε με τα ηλεκτρονικά, αλλά μπορεί να είναι λίγο τρομακτικό. Η δημιουργία ενός έργου μπορεί να σας βοηθήσει να παραμείνετε παρακινημένοι ενώ μαθαίνετε.

Υπάρχουν πολλά απλά παιχνίδια που μπορούν να σας βοηθήσουν να δημιουργήσετε εξαιρετικά έργα για αρχάριους Raspberry Pi. Ένα από τα εύκολα παιχνίδια που μπορείτε να ξεκινήσετε είναι το Simon. Το παιχνίδι του Σάιμον παιχνίδι μνήμης Μια σειρά από φώτα αναβοσβήνουν με τυχαία σειρά και ο παίκτης πρέπει να θυμάται τη σειρά. Καθώς ο παίκτης προχωρά, το μήκος της ακολουθίας αυξάνεται.

Απαιτούμενα εξαρτήματα

Για να ξεκινήσετε, θα χρειαστείτε τα ακόλουθα πράγματα:

  • Συσκευή Raspberry Pi.
  • Η κάρτα microSD Flash έχει κατασκευαστεί για το λειτουργικό σύστημα Λειτουργικό σύστημα Raspbian Σε αυτήν.
  • 4 x φώτα LED σε διάφορα χρώματα.
  • 4 x αντιστάσεις (οτιδήποτε από 220 ohms έως 1 κιλό ohm).
  • 4 x κουμπιά.
  • 1 x Πειραματικός πίνακας.
  • Συνδέστε τα καλώδια για να συνδέσετε τα πάντα.

Μπορείτε να χρησιμοποιήσετε οποιοδήποτε μοντέλο Raspberry Pi για αυτό το έργο, αλλά τα μοντέλα Pi Zero δεν συνδέονται εύκολα σε breadboards χωρίς κάποια συγκόλληση. Όποιο μοντέλο κι αν χρησιμοποιείτε, θα χρειαστείτε επίσης τροφοδοτικό, οθόνη, πληκτρολόγιο και ποντίκι.

Εάν δεν έχετε ρυθμίσει ένα Raspberry Pi πριν, μπορείτε να μάθετε πώς να ρυθμίζετε τα πάντα για αυτό το σεμινάριο στο Οδηγός για αρχάριους για το Raspberry Pi.

Θα γράψετε κώδικα Python σε αυτό το σεμινάριο, μπορείτε να χρησιμοποιήσετε οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου για να τον γράψετε, αλλά ίσως βρείτε έναν πιο εύκολο επεξεργαστή κώδικα. Υπάρχουν πολλά από αυτά ήδη εγκατεστημένα στο Raspberry Pi OS και το Thonny έχει σχεδιαστεί για να είναι βολικό για αρχάριους. Ό,τι κι αν χρησιμοποιείτε, θα πρέπει να μπορείτε να αποθηκεύσετε και να εκτελέσετε τον κώδικα για να ακολουθήσετε αυτό το σεμινάριο.

Ξεκινώντας με το breadboard

Το Raspberry Pi έχει δύο σειρές ακίδων γενικής χρήσης εισόδου/εξόδου (GPIO). Αυτές οι ακίδες σάς επιτρέπουν να συνδέσετε διάφορα εξωτερικά εξαρτήματα στο Raspberry Pi σας. Ορισμένες ακίδες στέλνουν πληροφορίες, άλλες παρέχουν τροφοδοσία και κάποιες γειώνουν τις ηλεκτρονικές συσκευές σας.

Θα ξεκινήσουμε προσθέτοντας ένα LED στο breadboard μας.

Ξεκινήστε συνδέοντας την καρφίτσα GPIO στην πλακέτα σας. Δεν έχει σημασία ποιος ακροδέκτης, αρκεί να είναι pin GPIO και όχι ακροδέκτης τροφοδοσίας ή πείρου γείωσης. Παραπάνω είναι ένα διάγραμμα των ακίδων GPIO, το οποίο θα σας βοηθήσει να αποφασίσετε ποιο pin θα χρησιμοποιήσετε. Αυτό το σεμινάριο χρησιμοποιεί Pin 18, που ονομάζεται επίσης GPIO 24.

Η ακίδα θα παρέχει κάποια ισχύ στο breadboard και θα επιτρέψει στο Raspberry Pi να επικοινωνεί με τα εξαρτήματα στην πλακέτα. Στη συνέχεια, συνδέστε την ακίδα 6 στο Pi στο καλώδιο γείωσης του breadboard. Αυτό θα γειώσει την πλακέτα και θα επιτρέψει τη δημιουργία ηλεκτρικών κυκλωμάτων.

Η ισχύς που προέρχεται από το Raspberry είναι πολύ υψηλή για να συνδέσετε απευθείας το LED. Η χρήση αντίστασης μειώνει το επίπεδο ισχύος και εμποδίζει το LED να καεί. Συνδέστε τη μία πλευρά της αντίστασης στην ίδια γραμμή στην οποία συνδέθηκε η ακίδα GPIO και το άκρο στην άλλη πλευρά της πλακέτας. Στη συνέχεια, βάλτε τη θετική πλευρά του LED μετά την ηλεκτρική αντίσταση. Ο αρνητικός ακροδέκτης του LED μπορεί να συνδεθεί απευθείας στην αρνητική πλευρά. Το τελικό αποτέλεσμα θα πρέπει να μοιάζει με το παραπάνω γράφημα. Ελέγξτε καλά τα καλώδιά σας και ενεργοποιήστε το Pi. Η λάμπα πρέπει να ανάβει.

Τώρα, έχετε δημιουργήσει ένα κύκλωμα με το Raspberry Pi που μπορείτε να ελέγξετε χρησιμοποιώντας τον κωδικό σας.

Χρησιμοποιήστε τον κώδικα Python για να ελέγξετε τα φώτα

Αυτό το σεμινάριο σας καθοδηγεί στον κώδικα μέσω των βημάτων, αλλά εάν θέλετε να επιστρέψετε στον τελικό κώδικα, είναι διαθέσιμο στη διεύθυνση Pastebin.

Αυτήν τη στιγμή το ρεύμα πηγαίνει στο LED, αλλά θέλουμε να ελέγχουμε πότε ανάβει και σβήνει. Ο παρακάτω κώδικας Python θα μας επιτρέψει να μιλήσουμε στον πίνακα.

Εισαγωγή RPi.GPIO ως GPIO GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) κόκκινο = 18 GPIO.setup(κόκκινο, GPIO.OUT) GPIO.output(κόκκινο, GPIO.LOW)

Οι πρώτες γραμμές είναι αυτές που καθορίζουν τα πράγματα. Η βιβλιοθήκη Raspberry Pi GPIO έχει εισαχθεί. όπου μας επιτρέπει ως GPIO Ανατρέξτε στη μεταβλητή RPi.GPIO ως GPIO για να αποθηκεύσετε λίγο γράψιμο. Η λειτουργία pin GPIO έχει ρυθμιστεί σε ΕΠΙΤΡΟΠΉ. Δεν χρειάζεται να χρησιμοποιήσετε αυτήν τη ρύθμιση, αλλά μπορεί να είναι ευκολότερο να αναφέρετε τις καρφίτσες με τη σειρά τους στις σειρές GPIO.

Τέλος, ορίσαμε τις προειδοποιήσεις σε ψευδείς. Αυτό θα σταματήσει τις περιττές προειδοποιήσεις.

Οι τρεις τελευταίες γραμμές ελέγχουν το LED. Το κόκκινο LED είναι συνδεδεμένο με τον ακροδέκτη GPIO 18. Αντί να το θυμάται αυτό, θα αποθηκεύσει τη μεταβλητή Red το μέρος. Μετά από αυτό, ενημερώνεται Ρύθμιση GPIO Το λογισμικό μας στέλνει τις πληροφορίες στην κόκκινη καρφίτσα. Τέλος, ορίσαμε το GPIO.output στην κόκκινη καρφίτσα σε χαμηλός. Όταν εκτελείτε αυτό το πρόγραμμα, το φως θα σβήσει. Για να το ενεργοποιήσετε ξανά, κάντε εναλλαγή GPIO. ΧΑΜΗΛΟ σε μένα GPIO.ΥΨΗΛΟ και εκτελέστε ξανά το πρόγραμμα.

Αποθηκεύστε τον κωδικό και κάντε κλικ εργασία Να τον δω εν δράσει. Εάν δεν υπάρχει κουμπί εκτέλεσης στον επεξεργαστή κώδικα, αποθηκεύστε το με οποιοδήποτε όνομα (myfilename) και εκτελέστε την εντολή python myfilename.py στο παράθυρο Terminal. Θα πρέπει πρώτα να μεταβείτε στον ίδιο κατάλογο με το νέο αρχείο Python.

Προσθέστε περισσότερα φώτα LED

Για να δημιουργήσουμε το παιχνίδι Simon, χρειαζόμαστε τέσσερα LED διαφορετικών χρωμάτων. Τα ίδια βήματα που χρησιμοποιήσατε για τη ρύθμιση του κόκκινου LED μπορούν να χρησιμοποιηθούν για τη ρύθμιση των άλλων τριών. Η καλωδίωση θα πρέπει να μοιάζει με το παρακάτω διάγραμμα:

Ο κωδικός σας θα πρέπει να μοιάζει με αυτό:

Εισαγωγή RPi.GPIO ως GPIO GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) κόκκινο = 18 κίτρινο = 22 πράσινο = 24 μπλε = 26 GPIO.setup(κόκκινο, GPIO.OUT) GPIO.setup(κίτρινο, GPIO.OUT) GPIO.setup(πράσινο, GPIO.OUT) GPIO.setup(μπλε, GPIO.OUT) GPIO.output(κόκκινο, GPIO.HIGH) GPIO.output(κίτρινο, GPIO.HIGH) GPIO.output(πράσινο, GPIO.HIGH) GPIO.output(μπλε, GPIO.HIGH)

Μόλις δοκιμαστούν τα LED, ρυθμίστε Έξοδος GPIO على GPIO. ΧΑΜΗΛΟ Για να ανάψετε ξανά κάθε LED.

Αν και το χρώμα των καλωδίων που χρησιμοποιείτε δεν έχει σημασία, προσπαθήστε να χρησιμοποιήσετε χρώματα που έχουν νόημα για να σας βοηθήσουν να διαβάσετε τα περιεχόμενα του πίνακα ευκολότερα. Για παράδειγμα, τα μαύρα καλώδια χρησιμοποιούνται συχνά για καλώδια γείωσης. Σε αυτό το κύκλωμα, μπορεί να θέλετε να ταιριάξετε το χρώμα του καλωδίου με το χρώμα της λυχνίας LED.

Φώτα ελέγχου με κουμπιά

Ξεκινήστε προσθέτοντας ένα κουμπί στον πίνακα σας. Το κουμπί θα πρέπει να συνδεθεί τόσο στην υποδοχή γείωσης όσο και στην ακίδα GPIO. Το ηλεκτρικό κύκλωμα πρέπει να μοιάζει με αυτό:

Για να κάνουμε το κουμπί να ελέγχει το LED πρέπει να προσθέσουμε κάποιο κωδικό στον κώδικά μας. Η ρύθμιση του κουμπιού είναι παρόμοια με τη ρύθμιση ενός LED, με τη διαφορά ότι η ακίδα GPIO έχει ρυθμιστεί ως είσοδος και όχι έξοδος. Αυτός ο κωδικός ρυθμίζει επίσης την εσωτερική αντίσταση έλξης στο Pi, η οποία απαιτείται για να κάνει το κουμπί να συμπεριφέρεται σωστά.

GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP)

Τώρα χρειαζόμαστε κωδικό που ελέγχει εάν πατήθηκε το κουμπί.

παιχνίδι = Αληθές ενώ παιχνίδι: redButtonState = GPIO.input(32) αν redButtonState == 0: GPIO.output(κόκκινο, GPIO.HIGH) time.sleep(1) GPIO.output(κόκκινο, GPIO.LOW)

Θέλουμε το πρόγραμμά μας να συνεχίσει να ελέγχει εάν το κουμπί είναι πατημένο, επομένως πρέπει να χρησιμοποιηθεί η εντολή επανάληψης ενώ. Δεδομένου ότι η επανάληψη δεν είναι ποτέ ψευδής, ο κώδικας συνεχίζει να εκτελείται και να ελέγχει το κουμπί μέχρι να τερματίσουμε το πρόγραμμα χειροκίνητα πατώντας το κουμπί διακοπής ή χρησιμοποιώντας μια συντόμευση πληκτρολογίου Ctrl + C.

Στη συνέχεια, για να διευκολυνθεί η ένδειξη της εισόδου που μας στέλνει η καρφίτσα GPIO, αποθηκεύουμε αυτές τις πληροφορίες στη μεταβλητή redButtonState. Εάν η εισαγωγή του κουμπιού μας αλλάξει σε 0, γνωρίζουμε ότι το κουμπί έχει πατηθεί.

Εάν πατηθεί το κουμπί, το κόκκινο LED θα ανάψει. Στη συνέχεια, μετά από ένα δευτερόλεπτο, το LED θα σβήσει. Για να προσθέσουμε αυτή τη διάρκεια, χρησιμοποιούμε τη συνάρτηση ώρα ύπνου (1). Για να λειτουργήσει αυτό, θα χρειαστεί να εισαγάγετε τη βιβλιοθήκη χρόνου πάνω από τον κώδικά σας.

Μόλις ενεργοποιήσετε ένα κουμπί, μπορείτε να προσθέσετε άλλα τρία κουμπιά, ένα για κάθε LED. Ο κωδικός σας θα πρέπει να μοιάζει με αυτό:

εισαγωγή τυχαίας ώρας εισαγωγής εισαγωγή RPi.GPIO ως GPIO GPIO.setmode (GPIO.BOARD) GPIO.setwarnings(False) κόκκινο = 18 κίτρινο = 22 πράσινο = 24 μπλε = 26 GPIO.setup(κόκκινο, GPIO.OUT) GPIO.setup(κίτρινο, GPIO.OUT) GPIO.setup(πράσινο, GPIO.OUT) GPIO.setup(μπλε, GPIO.OUT) GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(40, GPIO.IN, pull_up_down=GPIO.PUD_UP) game = True ενώ game: redButtonState = GPIO.input(32) αν redButtonState == 0: GPIO.output(κόκκινο, GPIO.HIGH) time.sleep(1) GPIO.output(κόκκινο, GPIO.LOW) yellowButtonState = GPIO.input(36) αν yellowButtonState == 0: GPIO.output(κίτρινο, GPIO.HIGH) GPIO.input(40) αν blueButtonState == 0:GPIO.output(μπλε, GPIO.HIGH) time.sleep(1) GPIO.output(μπλε, GPIO.LOW)

Και το breadboard θα πρέπει να μοιάζει με αυτήν την εικόνα:

Όλες οι ηλεκτρονικές συσκευές είναι πλέον έτοιμες. Εάν αντιμετωπίζετε προβλήματα, ελέγξτε τον κωδικό σας για τυχόν σφάλματα. Να θυμάστε ότι μπορείτε να κάνετε λήψη του πλήρους κώδικα από Pastebin Αν κολλήσεις!

Δημιουργήστε το παιχνίδι

Αυτό το έργο έχει ήδη καλύψει όλα τα βασικά που πρέπει να γνωρίζετε για να ξεκινήσετε με ένα breadboard. Αλλά η μετατροπή αυτών των δεξιοτήτων σε παιχνίδι θα δείξει πραγματικά τι μπορείτε να κάνετε!

Στο παιχνίδι του Simon, ο παίκτης βλέπει μια σειρά από φώτα να αναβοσβήνουν και πρέπει να θυμάται το μοτίβο. Ξεκινά εύκολα με ένα μόνο φως. Κάθε επίπεδο προσθέτει ένα τυχαίο φως στο μοτίβο για να κάνει το παιχνίδι πιο προκλητικό.

Δημιουργήστε στυλ

Αυτό το βήμα είναι αρκετά απλό. Ένας πίνακας θα φέρει το φωτεινό μας μοτίβο (πρότυπο). Μια δεύτερη συστοιχία θα αποθηκεύσει τις ακίδες GPIO των LED μας (φώτα). Σε κάθε επανάληψη του παιχνιδιού, ένα νέο τυχαίο φως θα προστίθεται στο τέλος του σετ μοτίβων. Θα χρησιμοποιήσουμε τη συνάρτηση . random.randent() Για να επιλέξετε έναν αριθμό μεταξύ 0 και 3, που αντιπροσωπεύει 4 LED.

μοτίβο = [] φώτα = [κόκκινο, κίτρινο, πράσινο, μπλε] ενώ το παιχνίδι: pattern.append(random.randint(0,3))

Στη συνέχεια, πρέπει να ανάψουμε τα φώτα για να φαίνεται το μοτίβο.

ενώ το παιχνίδι: pattern.append(random.randint(0,3)) για το x στο μοτίβο: GPIO.output(lights[x], GPIO.HIGH) time.sleep(1) GPIO.output(lights[x], GPIO.LOW) time.sleep(0.5)

Είναι σημαντικό να σταματήσετε ανάμεσα σε δύο λαμπτήρες. Διευκολύνει να δείτε εάν το ίδιο φως χρησιμοποιείται διαδοχικά σε ένα μοτίβο.

Λάβετε στοιχεία παίκτη

Στη συνέχεια, το παιχνίδι πρέπει να περιμένει μέχρι ο παίκτης να μαντέψει τη σειρά των φώτων. Το λογισμικό πρέπει να ελέγξει κάθε φωτεινή ένδειξη στο μοτίβο και να περιμένει μέχρι η συσκευή αναπαραγωγής να πατήσει το κουμπί. Αυτό απαιτεί ένθετους επαναλήπτες:

για time.sleep(1) GPIO.output(red, GPIO.LOW) if yellowButtonState == 0: GPIO.output(yellow, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(yellow, GPIO.LOW) if greenButtonState == 0: GPIO.output(green, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(green, GPIO.LOW) if blueButtonState == 0: GPIO.output(blue, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(blue, GPIO.LOW)

Το μεγαλύτερο μέρος του παραπάνω κώδικα χρησιμοποιεί ξανά τον κώδικα που γράψαμε για να δοκιμάσουμε τα κουμπιά.

Ελέγξτε την είσοδο της συσκευής αναπαραγωγής

Από εδώ, είναι πολύ εύκολο να ελέγξετε αν ο παίκτης έχει εισάγει το σωστό μοτίβο. Κάθε φορά που πατιέται ένα κουμπί, το παιχνίδι μπορεί να ελέγξει αν είναι το σωστό κουμπί. Για να το κάνετε αυτό, προσθέστε τη φράση if Άλλο για κάθε καταχώρηση κουμπιού:

αν redButtonState == 0: GPIO.output(κόκκινο, GPIO.HIGH) waitingForInput = False αν x != 0: game = False time.sleep(1) GPIO.output(κόκκινο, GPIO.LOW)

μεταβλητός x της επανάληψης για Έχει τον παρακάτω αριθμό φωτός. Το κόκκινο LED βρίσκεται στην πρώτη θέση, ή τον αριθμό 0. Αν ο παίκτης πατήσει το κόκκινο κουμπί LED όταν έχουμε ένα 0 στο μοτίβο μας, έχει δίκιο! Αν όχι, χάνει το παιχνίδι. θα έχει ως αποτέλεσμα τη διαμόρφωση της μεταβλητής παιχνίδι على ψευδής Για να σταματήσετε τον βρόχο του παιχνιδιού και να τερματίσετε το πρόγραμμα.

το τέλος μας! Δημιούργησα ένα παιχνίδι από την αρχή!

Η δημιουργία ενός παιχνιδιού προσθέτει περισσότερο κώδικα σε αυτό το έργο από την απλή προσθήκη LED και κουμπιών. Η εργασία σε ένα τελικό έργο που μπορείτε να δείξετε στους φίλους και την οικογένειά σας μπορεί να σας βοηθήσει να παρακινήσετε.

Αυτό το παιχνίδι είναι αρκετά απλό. Προκαλέστε τον εαυτό σας να βελτιώσει τον βασικό σχεδιασμό. Ίσως τα φώτα να αναβοσβήσουν αν χάσει ο παίκτης. Μπορεί να θέλετε να προκαλέσετε τον εαυτό σας να προσθέσει ήχους στο παιχνίδι. Η φαντασία σας είναι το μόνο όριο!

Λοιπόν, η φαντασία σας και το υλικό που πρέπει να χρησιμοποιήσετε. Τώρα μπορείτε να δείτε Τα καλύτερα έργα για τη δημιουργία μιας έξυπνης τηλεόρασης με το Raspberry Pi

Κουμπί μετάβασης στην κορυφή