DIY ασύρματος ελεγκτής σερβοδιακόπτη με Raspberry Pi Pico W

diy έργο ασύρματου ελέγχου διακοπτών
Επισκόπηση του έργου ασύρματου ελέγχου διακόπτη DIY

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

Είναι πολύ δύσκολο να το κάνεις αυτό όταν είσαι αναπαυτικά στο κρεβάτι.

Πριν από μερικά χρόνια, κατασκεύασα μια ασύρματη λύση με ένα Arduino και ένα τηλεχειριστήριο IR.

Λειτούργησε αρκετά καλά επειδή ήταν αξιόπιστο και έλυσε το πρόβλημά μου.

Δεν ήταν όμως χωρίς τα μειονεκτήματά του.

Πρώτον, το Arduino Uno ήταν τεράστιο σε σύγκριση με το Raspberry Pi Pico W.

Δεύτερον, εξαρτιόταν από ένα σήμα IR, πράγμα που σήμαινε ότι έπρεπε να ξέρω πού βρισκόταν το τηλεχειριστήριο IR όταν ήθελα να σβήσω το φως.

Και σε αυτό το σημείο το Raspberry Pi Pico W έχει το πλεονέκτημά του. Μπορείτε να ελέγξετε το σερβομηχανισμό απευθείας από το τηλέφωνό σας.

Γιατί να ασχοληθείτε με αυτό το έργο DIY;

Είναι άσχημο. Είναι κουραστικό.

Αλλά περιλαμβάνει επίσης τη χαρά και τη διασκέδαση του να δημιουργείτε τη δική σας λύση στα προβλήματά σας.

Τα σύγχρονα προβλήματα απαιτούν σύγχρονες λύσεις, και μπορείτε να δείτε πώς οι άνθρωποι λύνουν τα προβλήματά τους με το Raspberry Pi εδώ.

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

Ή δεν θέλετε να μπείτε στη διαδικασία να προσλάβετε έναν επαγγελματία για να το κάνει.

Ένας άλλος λόγος είναι ότι αυτό το έργο είναι τόσο επεκτάσιμο και φορητό. Δεν χρειάζεται να το χρησιμοποιείτε σε έναν διακόπτη φωτός, μπορείτε να το χρησιμοποιήσετε σε ένα πληκτρολόγιο, για να σταματήσετε τις προφυλάξεις οθόνης, για παράδειγμα.

Βίντεο

Έλεγχος διακόπτη δύο κατευθύνσεων δυνατός, αλλά ο ευκολότερος τρόπος είναι ο μονόδρομος

diy ασύρματος έλεγχος σερβοδιακόπτη
Servo προετοιμασμένο για να απενεργοποιήσει τον διακόπτη φωτός
diy ασύρματος έλεγχος σερβοδιακόπτη
Σερβομηχανισμός σε πλήρη περιστροφή, απενεργοποίηση του διακόπτη

Αν υπάρχει ένα πράγμα που μπορείτε σίγουρα να κάνετε με όλους τους διακόπτες στον κόσμο, είτε είναι Ευρωπαίοι είτε Βορειοαμερικανοί, μπορείτε πάντα να χρησιμοποιήσετε ένα σερβομηχανισμό για να τον απενεργοποιήσετε ή να τον ενεργοποιήσετε.

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

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

Εκπομπή δικτύου ή σύνδεση σε δίκτυο;

Το Raspberry Pi Pico W μπορεί να συνδεθεί στο οικιακό σας δίκτυο ή να εκπέμψει το δικό του δίκτυο.

Έχω δοκιμάσει και τα δύο και βρήκα κάποια πλεονεκτήματα και μειονεκτήματα και των δύο μεθόδων.

Ως σταθμός (δηλ. συνδέεται σε δίκτυο)

Στον αρχικό σχεδιασμό, έκανα το Pico W να συνδεθεί στο οικιακό μου δίκτυο και να σερβίρει ένα αρχείο HTML με ένα κουμπί στη διεύθυνση IP 192.168.0.70.

Το πλεονέκτημα αυτού ήταν ότι μπορούσα εύκολα να εκκινήσω το πρόγραμμα περιήγησης και να πατήσω το κουμπί που έσβηνε το φως.

Ωστόσο, το μειονέκτημα είναι ότι οποιοσδήποτε στο δίκτυο ήταν επίσης σε θέση να το κάνει αυτό, εκτός αν εφαρμόζατε κάποια μορφή ελέγχου ταυτότητας.

Ένα άλλο μειονέκτημα είναι ότι, αν το οικιακό σας δίκτυο χάσει την τροφοδοσία του, το Raspberry Pi Pico W δεν θα συνδεθεί ξανά στο δίκτυο, εκτός αν έχετε εφαρμόσει κώδικα που επανεκκινεί το Pico W ή το επανασυνδέει στο δίκτυο.

Ως σημείο πρόσβασης

Κατά τη σύνδεση σε αυτό, ο σερβομηχανισμός θα περιστραφεί, απενεργοποιώντας το διακόπτη

Επί του παρόντος, χρησιμοποιώ το Pico W ως σημείο πρόσβασης, αν και δεν λέω ότι είναι ο καλύτερος τρόπος.

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

Το πλεονέκτημα είναι ότι, σε αντίθεση με τη μέθοδο του σταθμού, έχετε έναν κωδικό πρόσβασης στο δίκτυο, ώστε μόνο εσείς να μπορείτε να συνδεθείτε σε αυτό.

Αρχικά, είχα ένα σημείο πρόσβασης που εξυπηρετούσε μια ιστοσελίδα με ένα κουμπί για την ενεργοποίηση του σερβομηχανισμού. Βρήκα ότι αυτό ήταν πολύ δύσχρηστο, επειδή θα πρέπει 1) να συνδεθείτε στο δίκτυο, 2) να μεταβείτε στη διεύθυνση IP του Pico W και 3) να πατήσετε το κουμπί

Βρήκα ότι η καλύτερη λύση είναι να ενεργοποιήσω το σερβομηχανισμό μόλις το Pico W ανιχνεύσει έναν πελάτη που συνδέεται στο σημείο πρόσβασης. Με αυτόν τον τρόπο, το μόνο που έχετε να κάνετε είναι να συνδέσετε οποιαδήποτε συσκευή στο Pico W και τα φώτα σας (ή ο διακόπτης) θα είναι σβηστά.

Σύνδεση του Pico W σε σερβομηχανισμό

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

Χρησιμοποίησα επίσης ένα προαιρετικό breadboard για να συνδέσω το σερβομηχανισμό με το Pico W με καλώδια γέφυρας αρσενικό προς αρσενικό, αλλά μπορείτε να συνδέσετε το σερβομηχανισμό απευθείας στις κεφαλές του Pico W με καλώδια γέφυρας αρσενικό προς θηλυκό.

Θα χρειαστείτε επίσης ταινία διπλής όψης για να κολλήσετε τον σερβομηχανισμό σας στο περίβλημα του διακόπτη φωτός.

Καλωδίωση

Σύνδεση ενός Pico W σε σερβομηχανισμό. (διάγραμμα που έγινε με Wokwi)

Γενικά, όλα τα σερβομηχανήματα έχουν ένα κόκκινο, μαύρο/καφέ και ένα τρίτο καλώδιο.

Συνδέστε ένα κόκκινο καλώδιο βραχυκυκλώματος στο κόκκινο καλώδιο που προέρχεται από το σερβομηχανισμό. Εδώ θα στείλετε τα 5V, μέσω του VBUS.

Συνδέστε ένα μαύρο καλώδιο στο μαύρο/καφέ καλώδιο. Θα το συνδέσετε με το GND του Pico W.

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

Ο κώδικας

Αυτός ο κώδικας θα σας επιτρέψει να ενεργοποιήσετε το σερβομηχανισμό όταν ένας πελάτης συνδεθεί στο σημείο πρόσβασης SoftAP του Pico W.

δίκτυο εισαγωγής
μηχανή εισαγωγής
from machine import PWM
from time import sleep

#Pin param = αριθμός καρφιτσών GPIO σερβομηχανισμού
pwm = PWM(machine.Pin(16))

ssid = 'Lights-Out'
κωδικός πρόσβασης = 'sleeptime'

ap = network.WLAN(network.AP_IF)
ap.config(essid=ssid, password=password)
ap.active(True)

while ap.active() == False:
  pass

print('Σύνδεση επιτυχής')
print(ap.ifconfig())

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sleep(0.5)

    pwm.duty_ns(1500000)

Το #ap.status είναι ένας άδειος πίνακας μέχρι να συνδεθεί κάποιος, οπότε θα έχει μία καταχώρηση
#όταν ap.status = true, τότε θα ενεργοποιηθεί η rotateServo()
# τότε θα κλείσει μόνο του για να διώξει τον χρήστη από το δίκτυο,
# επιτρέποντας στη συσκευή να συνδεθεί εκ νέου στο συνηθισμένο της δίκτυο.

while True:
    try:
        ap.status('stations'):
            print('client connected')
            rotateServo()
            sleep(5)
            ap.active(False)
            sleep(2)
            ap.active(True)
        
    except OSError as e:
        σύνδεση έκλεισε')

Ορισμένες σημαντικές γραμμές κώδικα που πρέπει να εξηγηθούν:

Ο κώδικας υποθέτει ότι έχετε συνδέσει το καλώδιο σήματος στο GPIO16. Αν όχι, αλλάξτε τον ακέραιο αριθμό "16" σε αυτή τη γραμμή με τον ακροδέκτη GPIO στον οποίο έχετε συνδεθεί.

#Pin param = αριθμός καρφίτσας GPIO σερβομηχανισμού
pwm = PWM(machine.Pin(16))

Αυτό ρυθμίζει το SoftAP, δηλώνει το όνομα SSID και τον κωδικό πρόσβασης,

δίκτυο εισαγωγής
...
ssid = 'Lights-Out'
password = 'sleeptime'

ap = network.WLAN(network.AP_IF)
ap.config(essid=ssid, password=password)
ap.active(True)

Έλεγχος σερβομηχανισμού στο Pico W

Αυτό ελέγχει το σερβομηχανισμό. Πιθανόν να χρειαστεί να το τροποποιήσετε.

Για τον σερβομηχανισμό μου, θα μπορούσα να χρησιμοποιήσω μια τιμή από 500000 (500K) έως 2000000 (2 mil). Αυτό θα έδινε το πλήρες εύρος του σερβομηχανισμού.

Ωστόσο, χρειαζόμουν μόνο μικρή περιστροφή. Ως εκ τούτου, έβαλα το σερβο σε πλήρη περιστροφή με pwm.duty_ns(2000000) και στη συνέχεια αφήστε το να επιστρέψει στο pwm.duty_ns(1500000).

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

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sleep(0.5)

    pwm.duty_ns(1500000)

Εκπομπή ενός AP, ενεργοποίηση rotateServo κατά τη σύνδεση

Αυτή η γραμμή κώδικα εκτελείται επανειλημμένα.

while True:
    try:
        Σταθμοί'):
            ): print('client connected')
            rotateServo()
            sleep(10)
            ap.active(False)
            sleep(2)
            ap.active(True)

Εάν ap.status('stations') ανιχνεύει μια σύνδεση στο ασύρματο δίκτυο, θα επιστρέψει έναν πίνακα με ένα στοιχείο.

ap.status('stations') επιστρέφει έναν άδειο πίνακα αν δεν υπάρχει σύνδεση με το AP

Ως εκ τούτου, αν ο κώδικας δεν είναι ένας άδειος πίνακας, θα ξεκινήσει rotateServo και απενεργοποιήστε το AP πριν το ενεργοποιήσετε ξανά.

Η ιδέα της ενεργοποίησης και απενεργοποίησης του AP είναι να διώξετε τον συνδεδεμένο πελάτη από το δίκτυο. Αυτό του επιτρέπει να συνδεθεί στο συνηθισμένο του δίκτυο με σύνδεση στο διαδίκτυο.

αυτόματη επανασύνδεση android off
Αυτόματη επανασύνδεση απενεργοποιημένη στο Android

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

Γιατί χρειαζόμαστε την sleep(x) μεταξύ των κλήσεων ap.active(); Επειδή έμαθα ότι αν απενεργοποιήσω και ενεργοποιήσω το AP πολύ γρήγορα, το τηλέφωνό μου δεν θα διακόψει τη σύνδεση.

Μάθετε περισσότερα για το Raspberry Pi Pico W

Έχουμε γράψει ένα άρθρο ειδικά για το Raspberry Pi Pico W που θα σας βοηθήσει να αξιοποιήσετε στο έπακρο το Pico W. Κάντε κλικ εδώ για να μάθετε πράγματα που δεν γνωρίζατε ποτέ.

Αφήστε ένα σχόλιο