Θέλατε ποτέ να φτάσετε στο σπίτι για ένα προσωπικό καλωσόρισμα; Με ένα Raspberry Pi και μερικά απλά εξαρτήματα, μπορείτε! Σε αυτό το απλό πρόγραμμα θα χρησιμοποιήσουμε ένα διακόπτη καλαμιών για να ενεργοποιήσουμε ένα μελωδικό θέμα όταν ανοίξει μια πόρτα. Θα χρησιμοποιήσουμε ένα Raspberry Pi ως τον ελεγκτή εδώ, αν και θα μπορούσατε να χρησιμοποιήσετε σχεδόν οποιοδήποτε άλλο μικροελεγκτή $ 5 Microcontrollers: Arduino, Raspberry Pi Zero, ή NodeMCU; $ 5 Μικροελεγκτές: Arduino, Ras Zero μηδέν, ή NodeMCU; Ήταν η περίπτωση ότι αν θελήσατε να πάρετε έναν υπολογιστή, θα πρέπει να remortgage το σπίτι σας για να πληρώσει για αυτό. Τώρα, μπορείτε να πάρετε ένα για έναν Αβραάμ Λίνκολν. Διαβάστε περισσότερα για αυτό το έργο χρησιμοποιώντας το ίδιο κύκλωμα. Εδώ είναι ένα demo.
Θα χρειαστείτε
Πιθανότατα να έχετε ήδη όλα τα μέρη που χρειάζεστε για να το κάνετε εκτός από το διακόπτη καλαμιού, που είναι περίπου $ 2-3, ή μπορείτε να πάρετε ένα πακέτο 5 για λίγο πάνω από $ 8 εδώ.
- Ένα Raspberry Pi (οποιοδήποτε μοντέλο θα λειτουργήσει για αυτό).
- 1 x 220 Ohm αντίσταση.
- 1 x 1K αντίσταση Ohm.
- 3 x 10K Ohm αντίσταση.
- 1 x Μαγνητικός διακόπτης καλαμιού.
- 1 x LED.
- 2 x διακόπτης με κουμπιά.
- Breadboard.
- Καλώδια σύνδεσης.
- Ηχείο υπολογιστή ή παρόμοια.
Θα χρησιμοποιήσουμε το Raspberry Pi για να παίξουμε ένα τραγούδι όταν μπαίνουμε στην αίθουσα και σχεδιάζουμε ένα κύκλωμα με κουμπιά στο breadboard μας για να το ενεργοποιήσουμε με καθυστέρηση και να σταματήσουμε το πρόγραμμα.
Αυτό το έργο, ενώ παράγεται κυρίως για διασκέδαση, καλύπτει τα βασικά για πολλές εφαρμογές στο σπίτι αυτοματισμού σπίτι Αρχική Αυτοματισμού Οδηγός με Raspberry Pi και Arduino Οδηγός αυτοματισμού σπίτι με Raspberry Pi και Arduino Η αγορά αυτοματισμού σπίτι είναι πλημμυρισμένο με ακριβά καταναλωτικά συστήματα, ασυμβίβαστη με ένα μια άλλη και δαπανηρή εγκατάσταση. Εάν έχετε ένα Raspberry Pi και ένα Arduino, μπορείτε βασικά να επιτύχετε το ίδιο πράγμα στο ... Διαβάστε περισσότερα και επίσης DIY σπίτι ασφάλεια Ψάχνετε για ένα DIY Home Security System Λύση; Δοκιμάστε ένα από αυτά που αναζητούν ένα DIY Home Security System Solution; Δοκιμάστε ένα από αυτά Στην εποχή της ψηφιακής τεχνολογίας και πάντα συνδεδεμένο υλικό, η εγκατάσταση ενός οικιακού συστήματος ασφαλείας θα ξεπερνά την τέχνη της τοποθέτησης ενός κουτιού σε σχήμα συναγερμού στον τοίχο. Διαβάστε περισσότερα
Raspberry Pi 3 Μοντέλο Β Μητρική πλακέτα Raspberry Pi 3 Μοντέλο Β Μητρική πλακέτα Αγοράστε τώρα στο Amazon $ 29.99
Ξεκινώντας
Ας αρχίσουμε κάνοντας το κύκλωμά μας. Βεβαιωθείτε ότι το Pi σας είναι unpowered, και να ρυθμίσετε το κύκλωμα σας όπως αυτό:
Η λυχνία LED είναι συνδεδεμένη στον ακροδέκτη 7 στην πίν. Οι δύο διακόπτες με κουμπιά συνδέονται με τους ακροδέκτες 11 και 13 και ο διακόπτης καλαμιού συνδέεται στον ακροδέκτη 15. Η ισχύς μας πηγαίνει στον ακροδέκτη 1 (3v3) και τον ακροδέκτη 6 (Gnd).
Βεβαιωθείτε ότι έχετε ελέγξει ότι όλα βρίσκονται ακριβώς στο σωστό μέρος.
Ενώ δοκιμάζετε αυτό το έργο, μπορεί να σας βοηθήσει να κρατήσετε τον διακόπτη καλαμιού σας μπροστά σας, ώστε να μπορείτε εύκολα να το ενεργοποιήσετε ή να τον απενεργοποιήσετε. Στην περίπτωση αυτή, ο διακόπτης καλαμιού ήταν ήδη εγκατεστημένος πάνω από την πόρτα. Μόλις το έργο σας είναι έτοιμο, μπορείτε είτε να επισυνάψετε προσωρινά το διακόπτη στην πόρτα σας χρησιμοποιώντας ταινία ή αν αισθάνεστε πιο σίγουροι ότι μπορείτε να το επισυνάψετε πιο μόνιμα για χρήση σε μελλοντικά έργα!
Συνδέστε την έξοδο jack 3, 5 mm της συσκευής σας Pi στο σύστημα ηχείων. Μόλις συναρμολογηθούν τα πάντα, θα πρέπει να φαίνεται κάτι τέτοιο:
Σημειώστε ότι το breadboard που χρησιμοποιείται εδώ έχει τις ράγες εξουσίας αντίθετα στο διάγραμμα Fritzing παραπάνω.
Τώρα ενεργοποιήστε το Pi σας και προσπελάστε το χρησιμοποιώντας SSH, ώστε να έχουμε πρόσβαση στο τερματικό. Εάν δεν είστε σίγουροι πώς να το κάνετε αυτό, αυτός ο οδηγός Ρύθμιση του Raspberry Pi σας για την απρόσκοπτη χρήση με SSH Ρύθμιση του Raspberry Pi σας για Headless Χρήση με SSH Το Raspberry Pi μπορεί να δεχτεί εντολές SSH όταν είναι συνδεδεμένο σε ένα τοπικό δίκτυο (είτε μέσω Ethernet Wi-Fi), επιτρέποντάς σας να το ρυθμίσετε εύκολα. Τα οφέλη της SSH υπερβαίνουν την ανατροπή της καθημερινής προβολής ... Διαβάστε περισσότερα μπορεί να σας βοηθήσει. Εάν χρησιμοποιείτε το Raspberry Pi με οθόνη, ποντίκι και πληκτρολόγιο, παραλείψτε αυτό το βήμα και ανοίξτε το τερματικό.
Πριν ξεκινήσετε, αξίζει να ελέγξετε αν είστε ενημερωμένοι. Πληκτρολογήστε sudo apt-get update
στο τερματικό.
Τώρα μπορούμε να προχωρήσουμε στο να μιλήσουμε για το Pi μας στο κύκλωμά μας.
Δοκιμάζοντας τη ρύθμισή μας
Αρχικά, μπορείτε να ελέγξετε το κύκλωμά μας χρησιμοποιώντας ένα απλό πρόγραμμα. Εάν είστε βέβαιοι ότι έχετε συνδέσει τα πάντα μέχρι τώρα μπορείτε να παραλείψετε αυτό το βήμα, αν και θα το συνιστούσα, καθώς μπορεί να εξοικονομήσει πονοκεφάλους αργότερα.
Αν δεν έχετε προγραμματίσει ποτέ στο Python πριν και αισθάνεστε λίγο απογοητευμένοι, υπάρχουν πολλοί μεγάλοι ιστοχώροι Οι 5 καλύτεροι ιστοχώροι για να μάθετε τον Python Προγραμματισμό Οι 5 καλύτεροι ιστοχώροι για να μάθετε τον προγραμματισμό της Python Κατά την τελευταία δεκαετία, η γλώσσα προγραμματισμού Python έχει εκραγεί σε δημοτικότητα μεταξύ των προγραμματιστών σε όλους τους τομείς της κωδικοποίησης. Από τους προγραμματιστές Ιστού έως τους σχεδιαστές παιχνιδιών βίντεο με τους δημιουργούς εργαλείων στο σπίτι, πολλοί άνθρωποι έχουν πέσει ... Διαβάστε περισσότερα που μπορούν να σας βοηθήσουν να ξεκινήσετε.
Στο τερματικό, δημιουργήστε ένα νέο σενάριο:
nano test.py
Μόλις ανοίξετε, προσθέστε αυτόν τον κώδικα στο αρχείο και πιέστε Ctrl-C για έξοδο, ακολουθώντας τον διάλογο αποθήκευσης:
#This code was written for an article on www.MakeUseOf.com by Ian Buckley. import RPi.GPIO as GPIO import time GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT) GPIO.setup(11, GPIO.IN) GPIO.setup(13, GPIO.IN) GPIO.setup(15, GPIO.IN) while True: GPIO.output(7, GPIO.HIGH) if (GPIO.input(11)==1): print("Button on GPIO 11") time.sleep(1) if (GPIO.input(13)==1): print("Button on GPIO 13") time.sleep(1) if (GPIO.input(15)==1): print("Button on GPIO 15") time.sleep(1) GPIO.cleanup()
Αυτός ο κώδικας διαβάζει την τιμή των κουμπιών και των εκτυπώσεων στην οθόνη όταν αλλάζουν. Τα δύο κουμπιά έχουν αντιστάσεις έλξης, έτσι ώστε να αναφέρουν HIGH όταν πιέζονται. Ο διακόπτης μαγνητικού καλαμιού αναφέρει HIGH κάθε φορά που ο συνοδευτικός μαγνήτης του είναι κοντά.
Εκτελέστε το πρόγραμμα:
python test.py
Θα πρέπει να δείτε ότι η λυχνία LED ανάβει και μια αναφορά στην οθόνη όταν πατάτε τα δύο κουμπιά και τραβάτε το μαγνήτη μακριά από το διακόπτη καλαμιού. Εάν δεν λαμβάνετε σχόλια όταν πιέζετε κουμπιά, ελέγξτε ξανά το κύκλωμά σας και βεβαιωθείτε ότι όλα είναι συνδεδεμένα όπως πρέπει. Όταν ολοκληρώσετε τη δοκιμή, πατήστε CTRL-C για να διακόψετε το πρόγραμμα.
Τώρα μπορούμε να βάλουμε μαζί ένα απλό πρόγραμμα για να ρυθμίσετε, να ενεργοποιήσετε και να επαναφέρετε τον αισθητήρα πόρτας μας. Θα μεταβιβάσουμε τον κώδικα σε μέρη και σύντομα θα εξηγήσουμε τι κάνει κάθε μέρος, αν και αν θέλετε να δείτε τον πλήρη κωδικό κύλισης προς τα κάτω για να δείτε ότι παρουσιάστηκε πλήρως.
Πρέπει να ξεκινήσουμε με την εισαγωγή ορισμένων ενοτήτων:
import Rpi.GPIO as GPIO import pygame.mixer import time
Θα χρησιμοποιήσουμε τη μονάδα Pygame για να παίξουμε τη μουσική μας. Έρχεται ως πρότυπο με Raspbian Jessie, και είναι μια μεγάλη βιβλιοθήκη για όλα όσα χρειάζεστε για να κάνετε Python παιχνίδια και πολλά άλλα καταπληκτικά έργα Πώς να οικοδομήσουμε ένα Raspberry Pi Twitter Bot Πώς να οικοδομήσουμε ένα Raspberry Pi Twitter Twitter Το Twitter είναι ο μεγαλύτερος αποθετήριο του κόσμου της σύντομης μηνύματα από άτομα που δεν έχουν τίποτα να πουν - και τώρα κι εσείς μπορείτε να συμβάλλετε σε αυτό το επικό έργο με ένα αυτοματοποιημένο bot bot, το οποίο τροφοδοτείται από το Raspberry σας ... Διαβάστε περισσότερα.
Θα χρησιμοποιήσουμε μια μεταβλητή που λέγεται ενεργή για να αποφασίσουμε εάν το σύστημά μας είναι ενεργό ή όχι. Αφήστε να ορίσετε μερικές λειτουργίες που θα το κάνουν αυτό για εμάς:
def activeSetup(): global active active=0 print("Currently Not Active") def activeState(): global active if active==1: active=0 GPIO.output(7, GPIO.LOW) print("Currently Not Active") elif active==0: print ("Activating in 10 seconds") for x in range(0, 10): GPIO.output(7, GPIO.HIGH) time.sleep(0.5) GPIO.output(7, GPIO.LOW) time.sleep(0.5) active=1 GPIO.output(7, GPIO.HIGH) print("Currently Active") else: return
Η πρώτη συνάρτηση εδώ δημιουργεί μια μεταβλητή με την ονομασία ενεργή και την ορίζει ως 0. Για να δώσετε στην ενεργό κατάσταση μια αριθμητική τιμή σημαίνει ότι εάν σχεδιάζετε να αυξήσετε αργότερα το πρόγραμμα σας ώστε να έχετε διαφορετικές ενεργές καταστάσεις, μπορείτε να τις αριθμήσετε ανάλογα. Ενώ μπορεί να μην είναι ο καλύτερος προγραμματισμός Python στον κόσμο, θα είναι κάτι περισσότερο από αρκετό για αυτό το έργο.
Η δεύτερη λειτουργία όταν καλείται ελέγχεται αν το σύστημα είναι ενεργό (ή ενεργό == 1 ). Αν είναι, θέτει το σύστημα σε μη ενεργό ( ενεργό == 0 ), απενεργοποιεί τη λυχνία και εκτυπώνει στην κονσόλα. Αν δεν συμβαίνει αυτό, σας δίνει μια αντίστροφη αντίστροφη μέτρηση 10 δευτερολέπτων για να αφήσετε το δωμάτιο στο οποίο αναβοσβήνει η ενδεικτική λυχνία LED, πριν παραμείνει για να δείξει ότι το σύστημα είναι ενεργό.
Τώρα μπορούμε να ορίσουμε μια συνάρτηση που θα παρακολουθεί τον διακόπτη μαγνητών μας:
def watchDoor(): global playing playing = False while True: if active==1 and GPIO.input(15)==1 and playing == False: playing=True pygame.mixer.music.play() if GPIO.input(13)==1: print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if GPIO.input(11)==1: activeState() time.sleep(0.5)
Δημιουργούμε μια άλλη μεταβλητή εδώ που ονομάζεται παιχνίδι - αυτό είναι απλώς να σταματήσουμε το πρόγραμμα προσπαθώντας να αρχίσει να παίζει επανειλημμένα όταν ενεργοποιείται ο διακόπτης.
Μέσα στο βρόχο while, η πρώτη εντολή if αρχίζει τη μουσική (η οποία δεν έχουμε ακόμα, αλλά δεν πρέπει να ανησυχείτε, έρχεται). Παρέχει μόνο την έναρξη της μουσικής, εάν το σύστημα είναι ενεργό, ο διακόπτης καλαμιού είναι ανοιχτός και δεν παίζει ήδη.
Η δεύτερη δήλωση if είναι για το κουμπί εξόδου. Εάν πατήσετε αυτό το κουμπί, η μουσική σταματά και το πρόγραμμα εξέρχεται.
Η τρίτη εντολή if είναι για την εναλλαγή του εάν το σύστημα είναι ενεργό ή όχι. Η λειτουργία time.sleep εδώ είναι να αποτρέψετε την ανάγνωση πολλαπλών κουμπιών όταν πατηθεί.
Τώρα είναι καιρός να ρυθμίσετε τις ακίδες του Pi.
GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(11, GPIO.IN) GPIO.setup(13, GPIO.IN) GPIO.setup(15, GPIO.IN)
Εάν έχετε κάνει πειραματισμούς με την Pi πριν από αυτό, θα πρέπει να είστε εξοικειωμένοι με εσάς. Το αρχικό = argument GPIO.LOW στην εγκατάσταση του pin 7 το θέτει σε χαμηλό μόλις αρχίσει.
Τώρα μπορούμε να καλέσουμε τη λειτουργία μας που θα θέσει το σύστημα να μην είναι ενεργό κατά την εκκίνηση του προγράμματος.
activeSetup()
Μουσική Maestro!
Σε αυτό το σημείο, θα πρέπει να αρχίσουμε να σκεφτόμαστε τη μουσική που παίζει. Μπορείτε να επιλέξετε οποιοδήποτε αρχείο μουσικής θέλετε, αλλά θα επιλέξουμε κάτι που είναι διαθέσιμο για όλους τώρα. Εάν παρακολουθείτε το YouTube, ίσως έχετε ήδη εξοικειωθεί με τη μουσική του Kevin MacLeod. Αφήνει να κατεβάσετε μια φανταστική μουσική από τον ίδιο που ονομάζεται "One-eyed Maestro". Αυτό, μαζί με ένα μεγάλο μέρος της μουσικής στον ιστότοπό του, είναι αδειοδοτημένο υπό Creative Commons, και υπάρχουν πολλοί καλοί λόγοι. Τι είναι το Creative Commons, και πρέπει να το χρησιμοποιήσετε; Τι είναι το Creative Commons, και πρέπει να το χρησιμοποιήσετε; Το Creative Commons είναι ένα σύνολο αδειών που σας δίνουν αυτόματα άδεια να κάνετε διάφορα πράγματα, όπως επαναχρησιμοποίηση και διανομή του περιεχομένου. Ας μάθουμε περισσότερα για αυτό και πώς να το χρησιμοποιήσετε. Διαβάστε περισσότερα για να χρησιμοποιήσετε περιεχόμενο με αυτές τις άδειες χρήσης για τα έργα σας.
Πίσω στον κώδικα μας, πρέπει να ξεκινήσουμε το μίξερ Pygame και να φορτώσουμε τον τόνο μας.
pygame.mixer.init(44100, -16, 2, 1024) pygame.mixer.music.set_volume(1.0) name = "One-eyed Maestro.mp3" pygame.mixer.music.load(name) print("Loaded track - "+ str(name))
Η πρώτη γραμμή αυτού του μπλοκ εκκινεί το μίξερ Pygame . Το τελευταίο όρισμα στις παρενθέσεις είναι το buffer που ελέγχει την λανθάνουσα κατάσταση στην οποία αναπαράγεται ο ήχος. Εάν αντιμετωπίζετε αργή αναπαραγωγή αργότερα όταν η μουσική σας παίζει, δοκιμάστε να αυξήσετε αυτόν τον αριθμό στις 4096. Οι ρυθμίσεις καθώς λειτουργούν χωρίς πρόβλημα σε Pi 3.
Αν έχετε κατεβάσει το αρχείο μουσικής σας σε διαφορετικό κατάλογο με το πρόγραμμα door.py, θα πρέπει να παρέχετε την πλήρη διαδρομή μέσα στις αγκύλες όταν καθορίζετε τη μεταβλητή ονόματος.
Τώρα το μόνο που πρέπει να κάνετε είναι να ρυθμίσετε έναν βρόχο που μας περιμένει να ρυθμίσουμε είτε το πρόγραμμα είναι ενεργό είτε να το βγούμε.
while True: if(GPIO.input(13)==1): print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if(GPIO.input(11)==1): activeState() time.sleep(0.5) if(active==1): watchDoor() break GPIO.cleanup()
Αυτός ο βρόχος ενώ περιμένει μια είσοδο από οποιοδήποτε από τα κουμπιά και κλείνει ή αλλάζει την κατάσταση στην ενεργή αντίστοιχα. Αν η κατάσταση ενεργού γίνει 1, τότε η λειτουργία watchDoor που ορίσαμε προηγουμένως αποκαλείται και την επόμενη φορά που θα ανοίξει η πόρτα η ηχηρά μας θα παίξει. Ονομάζουμε επίσης GPIO.cleanup () για να επαναφέρουμε τους πείρους μας στην έξοδο, κάτι που είναι γενικά μια καλή πρακτική για όλους τους προγραμματισμούς στο Raspberry Pi.
Αυτό είναι το μόνο που πρέπει να κάνουμε για να φέρουμε σε λειτουργία αυτό το έργο, εδώ είναι ο πλήρης κώδικας:
import RPi.GPIO as GPIO import pygame.mixer import time def activeSetup(): global active active=0 print("Currently Not Active") def activeState(): global active if active==1: active=0 GPIO.output(7, GPIO.LOW) print("Currently Not Active") elif active==0: print ("Activating in 10 seconds") for x in range(0, 10): GPIO.output(7, GPIO.HIGH) time.sleep(0.5) GPIO.output(7, GPIO.LOW) time.sleep(0.5) active=1 GPIO.output(7, GPIO.HIGH) print("Currently Active") else: return def watchDoor(): global playing playing = False while True: if active==1 and GPIO.input(15)==1 and playing == False: playing=True pygame.mixer.music.play() if GPIO.input(13)==1: print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if GPIO.input(11)==1: activeState() time.sleep(0.5) GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(11, GPIO.IN) GPIO.setup(13, GPIO.IN) GPIO.setup(15, GPIO.IN) activeSetup() pygame.mixer.init(44100, -16, 2, 1024) pygame.mixer.music.set_volume(1.0) name = "One-eyed Maestro.mp3" pygame.mixer.music.load(name) print("Loaded track - "+ str(name)) while True: if(GPIO.input(13)==1): print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if(GPIO.input(11)==1): activeState() time.sleep(0.5) if(active==1): watchDoor() break GPIO.cleanup()
Εάν μετακινηθείτε εδώ για να τραβήξετε αμέσως τον πλήρη κωδικό, λάβετε υπόψη ότι θα χρειαστεί ακόμα να κατεβάσετε τη μουσική στην Pi σας για να λειτουργήσει!
Τώρα θα πρέπει να έχετε ένα λειτουργικό καλωσόρισμα θέματος στο σπίτι! Συνδέστε το διακόπτη καλαμιών στην πόρτα σας και δοκιμάστε το. Ο ενοχλητικός χορός είναι προαιρετικός αλλά συνιστάται.
Το έργο αυτό κάλυψε τα βασικά στοιχεία για πολλές μορφές παρακολούθησης, ασφάλειας και αυτοματισμού, και ελπίζω ότι ήταν και διασκεδαστικό!
Τώρα που έχετε έρθει τόσο μακριά, γιατί να σταματήσετε εκεί; Θα μπορούσατε να προσθέσετε περισσότερα κομμάτια και να έχετε επιλέξει το πρόγραμμα τυχαία από μια λίστα. Θα μπορούσατε να προσθέσετε ένα ρελέ Ξεκινώντας με το GPIO Σε ένα Raspberry Pi Ξεκινώντας με το GPIO Σε ένα Raspberry Pi Εάν, αν και το Arduino ήταν δροσερό, απλά περιμένετε μέχρι να βγάλετε τα χέρια σας σε ένα Raspberry Pi - αυτά τα πράγματα είναι καταπληκτικά. Εκτός του ότι είναι ένας πλήρως λειτουργικός υπολογιστής, έχουν επίσης ένα ... Διαβάστε περισσότερα και έχουν άλλα αντικείμενα που ενεργοποιούνται κατά την είσοδο. Εάν διαθέτετε σύστημα οικιακής μουσικής, γιατί να μην έχετε ένα τραγούδι για κάθε δωμάτιο;
Θα σχεδιάζετε το προσωπικό σας μήνυμα καλωσορίσματος; Έχετε εφευρεθεί με διακόπτες καλαμιού στο σπίτι σας με άλλους τρόπους; Εάν ναι, αφήστε ένα σχόλιο για το τι σχεδιάζετε ή έχετε ήδη κάνει στην παρακάτω ενότητα σχολίων!