DIY ασύρματος ελεγκτής σερβοδιακόπτη με Raspberry Pi Pico W
Ένα από τα μεγαλύτερα προβλήματα που έχω είναι να σηκώνομαι από το κρεβάτι για να σβήσω το φως του υπνοδωματίου. Είναι πολύ δύσκολο να το κάνεις αυτό όταν είσαι αναπαυτικά στο κρεβάτι. Και έτσι εδώ, θέλω να σας πω πώς να λύσετε αυτό το πρόβλημα με έναν ελεγκτή διακόπτη Pico W Servo.
Βλέπετε, πριν από μερικά χρόνια, κατασκεύασα μια ασύρματη λύση με ένα Arduino και ένα τηλεχειριστήριο IR. Λειτούργησε αρκετά καλά, επειδή ήταν αξιόπιστο και έλυσε το πρόβλημά μου. Δεν ήταν όμως χωρίς τα μειονεκτήματά της.
Πρώτον, το Arduino Uno ήταν τεράστιο σε σύγκριση με το Raspberry Pi Pico W.
Δεύτερον, εξαρτιόταν από ένα σήμα IR, πράγμα που σήμαινε ότι έπρεπε να ξέρω πού βρισκόταν το τηλεχειριστήριο IR όταν ήθελα να σβήσω το φως.
Και σε αυτό το σημείο το Raspberry Pi Pico W έχει το πλεονέκτημά του. Μπορείτε να ελέγξετε το σερβομηχανισμό απευθείας από το τηλέφωνό σας.
Γιατί να ασχοληθείτε με αυτό το έργο DIY;
Είναι άσχημο. Είναι κουραστικό.
Αλλά περιλαμβάνει επίσης τη χαρά και τη διασκέδαση του να δημιουργείτε τη δική σας λύση στα προβλήματά σας.
Τα σύγχρονα προβλήματα απαιτούν σύγχρονες λύσεις, και μπορείτε να δείτε πώς οι άνθρωποι λύνουν τα προβλήματά τους με το Raspberry Pi εδώ.
Επιπλέον, μπορεί να χρειαστεί να το κάνετε αυτό επειδή δεν επιτρέπεται να τροποποιήσετε την ηλεκτρική εγκατάσταση στο σπίτι σας.
Ή δεν θέλετε να μπείτε στη διαδικασία να προσλάβετε έναν επαγγελματία για να το κάνει.
Ένας άλλος λόγος είναι ότι αυτό το έργο είναι τόσο επεκτάσιμο και φορητό. Δεν χρειάζεται να το χρησιμοποιείτε σε έναν διακόπτη φωτός, μπορείτε να το χρησιμοποιήσετε σε ένα πληκτρολόγιο, για να σταματήσετε τις προφυλάξεις οθόνης, για παράδειγμα.
Βίντεο
Έλεγχος διακόπτη δύο κατευθύνσεων δυνατός, αλλά ο ευκολότερος τρόπος είναι ο μονόδρομος
Αν υπάρχει ένα πράγμα που μπορείτε σίγουρα να κάνετε με όλους τους διακόπτες στον κόσμο, είτε είναι Ευρωπαίοι είτε Βορειοαμερικανοί, μπορείτε πάντα να χρησιμοποιήσετε ένα σερβομηχανισμό για να τον απενεργοποιήσετε ή να τον ενεργοποιήσετε.
Αν όμως θέλετε να ελέγξετε το διακόπτη και προς τις δύο κατευθύνσεις, τότε η πρόκληση είναι μεγαλύτερη, επειδή ο σερβομηχανισμός μπορεί να μπει στη μέση.
Για παράδειγμα, αν πρέπει να μπορείτε να ενεργοποιείτε ή να απενεργοποιείτε χειροκίνητα το διακόπτη, μπορεί να βρείτε ότι οι βραχίονες του σερβομηχανισμού είναι εμπόδιο. Δεν μπορείτε να τον απομακρύνετε με τη βία χωρίς να καταστρέψετε το μοτέρ, καθώς το σερβομηχανισμό είναι προγραμματισμένο να διατηρείται στη θέση του με όλη του τη δύναμη.
Εκπομπή δικτύου ή σύνδεση σε δίκτυο;
Το 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 με καλώδια γέφυρας αρσενικό προς θηλυκό.
Θα χρειαστείτε επίσης ταινία διπλής όψης για να κολλήσετε τον σερβομηχανισμό σας στο περίβλημα του διακόπτη φωτός.
Καλωδίωση
Γενικά, όλα τα σερβομηχανήματα έχουν ένα κόκκινο, μαύρο/καφέ και ένα τρίτο καλώδιο.
Συνδέστε ένα κόκκινο καλώδιο βραχυκυκλώματος στο κόκκινο καλώδιο που προέρχεται από το σερβομηχανισμό. Εδώ θα στείλετε τα 5V, μέσω του VBUS.
Συνδέστε ένα μαύρο καλώδιο στο μαύρο/καφέ καλώδιο. Θα το συνδέσετε με το GND του Pico W.
Συνδέστε ένα άλλο καλώδιο στο τρίτο καλώδιο. Το δικό μου έχει πορτοκαλί χρώμα, οπότε χρησιμοποίησα ένα πορτοκαλί καλώδιο βραχυκύκλωσης. Αυτό είναι το καλώδιο σήματος που σύνδεσα με το GPIO16.
Ο κώδικας
Αυτός ο κώδικας θα σας επιτρέψει να ενεργοποιήσετε το σερβομηχανισμό όταν ένας πελάτης συνδεθεί στο σημείο πρόσβασης SoftAP του Pico W.
import network
import machine
from machine import PWM
from time import sleep
#Pin param = servo GPIO pin number
pwm = PWM(machine.Pin(16))
ssid = 'Lights-Out'
password = 'sleeptime'
ap = network.WLAN(network.AP_IF)
ap.config(essid=ssid, password=password)
ap.active(True)
while ap.active() == False:
pass
print('Connection successful')
print(ap.ifconfig())
def rotateServo ():
pwm.freq(50)
pwm.duty_ns(2000000)
sleep(0.5)
pwm.duty_ns(1500000)
#ap.status is a blank array until someone connects, then it will have one entry
#when ap.status = true, then it will trigger rotateServo()
# then it will shut itself off to kick the user off the network,
# allowing the device to reconnect to its usual network
while True:
try:
if ap.status('stations'):
print('client connected')
rotateServo()
sleep(5)
ap.active(False)
sleep(2)
ap.active(True)
except OSError as e:
print('Connection closed')
Ορισμένες σημαντικές γραμμές κώδικα που πρέπει να εξηγηθούν:
Ο κώδικας υποθέτει ότι έχετε συνδέσει το καλώδιο σήματος στο GPIO16. Αν όχι, αλλάξτε τον ακέραιο αριθμό "16" σε αυτή τη γραμμή με τον ακροδέκτη GPIO στον οποίο έχετε συνδεθεί.
#Pin param = servo GPIO pin number
pwm = PWM(machine.Pin(<strong>16</strong>))
Αυτό ρυθμίζει το SoftAP, δηλώνει το όνομα SSID και τον κωδικό πρόσβασης,
import network
...
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:
if ap.status('stations'):
print('client connected')
rotateServo()
sleep(10)
ap.active(False)
sleep(2)
ap.active(True)
Εάν ap.status('stations') ανιχνεύει μια σύνδεση στο ασύρματο δίκτυο, θα επιστρέψει έναν πίνακα με ένα στοιχείο.
Ως εκ τούτου, αν ο κώδικας δεν είναι ένας άδειος πίνακας, θα ξεκινήσει rotateServo και απενεργοποιήστε το AP πριν το ενεργοποιήσετε ξανά.
Η ιδέα της ενεργοποίησης και απενεργοποίησης του AP είναι να διώξετε τον συνδεδεμένο πελάτη από το δίκτυο. Αυτό του επιτρέπει να συνδεθεί στο συνηθισμένο του δίκτυο με σύνδεση στο διαδίκτυο.
Απλά βεβαιωθείτε ότι έχετε απενεργοποιήσει την αυτόματη επανασύνδεση στο τηλέφωνο ή τον υπολογιστή σας.
Γιατί χρειαζόμαστε την sleep(x) μεταξύ των κλήσεων ap.active(); Επειδή έμαθα ότι αν απενεργοποιήσω και ενεργοποιήσω το AP πολύ γρήγορα, το τηλέφωνό μου δεν θα διακόψει τη σύνδεση.
Μάθετε περισσότερα για το Raspberry Pi Pico W
Έχουμε γράψει ένα άρθρο ειδικά για το Raspberry Pi Pico W που θα σας βοηθήσει να αξιοποιήσετε στο έπακρο το Pico W. Κάντε κλικ εδώ για να μάθετε πράγματα που δεν γνωρίζατε ποτέ.
Πολύ ενδιαφέρον,
ich betreibe gerade viel Recherche zum pico w.
Vielleicht ist meine Idee auch zu selten, deshalb bin ich nur auf eine ähnliches Projekt mit dem Pi Zero gestossen.
So ganz blicke ich bei dem Pico noch nicht durch.
Στόχος μου: Den Pico W als Keyboard Remote eingabe zu nutzen.
Σημασία: Ich schicke von meinem Smarthome per Handy oder Script Tastaturbefehle, die der Pico empfängt und quasi die Tasten am PC drückt.
Mit der hid library ist es wohl möglich eine Keyboard zu emulieren.
Έτσι θα μπορούσα να φρενάρει τον υπολογιστή αυτόματα ανά Tasturbefehl zu einer gewissen Zeit.
Der Vorteil an der hid emulation: Es läuft quasi überall ohne Treiber und Software auf dem PC. Egal welches System. So könnte man selbst das Bios steuern.
Maybe hast du ja eine Idee, ob sich das mit dem Pico W realisieren lässt.
Χωρίς Wlan geht das wohl: https://www.heise.de/tests/Ausprobiert-Raspberry-Pico-mit-USB-HID-als-Tastatur-oder-Maus-benutzen-6011697.html
Ob das auch mit dem pico w per wlan geht?
Γεια σου Udo, ich sehe nicht warum man das nicht mit dem Pico W realisieren könnte. die Ausgabe per USB HID funktioniert genauso, es müsste im Prinzip nur ein Webinterface geschrieben werden.
Ich habe das als Anregung für PiCockpit aufgenommen, als eine neue App für den Pico W. (PiCockpit unterstützt ja auch den Pico W!)
Wir arbeiten gerade daran, dass der Pico W auch PiControl unterstützt - damit könnte man bspw. auf dem Pico W ein Python Skript hinterlegen und bestimmte fest definierte Sequenzen bereits ausgeben.
(Falls es per Python auch geht - ich habe den Heise Artikel gerade nicht angeschaut).
Danke jedenfalls für die Frage und die Anregung!
Max