Bezprzewodowy sterownik serwonapędów DIY z Raspberry Pi Pico W

Projekt bezprzewodowego sterowania przełącznikiem diy
Przegląd projektu bezprzewodowego sterowania przełącznikami DIY

Jednym z największych problemów, jakie mam, jest wstawanie z łóżka, aby wyłączyć światło w sypialni.

Bardzo trudno jest to zrobić, gdy jest się przytulonym w łóżku.

Kilka lat temu zbudowałem bezprzewodowe rozwiązanie z Arduino i pilotem IR.

Sprawdził się całkiem dobrze, bo był niezawodny i rozwiązał mój problem.

Nie obyło się jednak bez minusów.

Po pierwsze, Arduino Uno było masywne w porównaniu z Raspberry Pi Pico W.

Po drugie, zależało to od sygnału IR, co oznaczało, że musiałem wiedzieć, gdzie jest mój pilot IR, gdy chciałem wyłączyć światło.

I tu właśnie Raspberry Pi Pico W ma swoją przewagę. Można sterować serwomechanizmem bezpośrednio z telefonu.

Dlaczego warto zawracać sobie głowę tym projektem DIY?

Jest brzydki. Nużące.

Ale to także radość i zabawa z tworzenia własnych rozwiązań problemów.

Nowoczesne problemy wymagają nowoczesnych rozwiązań, a możesz zobaczyć jak ludzie rozwiązują swoje problemy z Raspberry Pi tutaj.

Co więcej, być może będziesz musiał to zrobić, ponieważ nie wolno ci modyfikować instalacji elektrycznej w mieszkaniu.

Lub nie chcesz przejść przez koszt wynajęcia profesjonalisty, aby to zrobić.

Innym powodem jest to, że ten projekt jest tak rozszerzalny i przenośny. Nie musisz używać go na przełączniku światła, możesz go użyć na klawiaturze, aby zatrzymać wygaszacze ekranu, na przykład.

Wideo

Możliwe jest sterowanie dwukierunkowe, ale najłatwiejsze jest sterowanie jednokierunkowe

bezprzewodowe sterowanie serwomechanizmami
Serwo przygotowane do wyłączenia wyłącznika światła
bezprzewodowe sterowanie serwomechanizmami
Serwo na pełnych obrotach, wyłączenie wyłącznika

Jeśli jest jedna rzecz, którą na pewno można zrobić ze wszystkimi przełącznikami na świecie, czy to europejskimi czy północnoamerykańskimi, zawsze można użyć serwomechanizmu do wyłączenia lub włączenia.

Ale jeśli chcesz kontrolować przełącznik w obie strony, staje się to większym wyzwaniem inżynierskim, ponieważ serwo może wejść w drogę.

Na przykład, jeśli musisz być w stanie ręcznie włączyć lub wyłączyć przełącznik, może się okazać, że ramiona serwo są w drodze. Nie można go zmusić do usunięcia z drogi bez zniszczenia silnika, ponieważ serwomechanizm jest zaprogramowany, aby utrzymać się w miejscu z całej siły.

Rozgłaszać sieć czy łączyć się z siecią?

Raspberry Pi Pico W może połączyć się z siecią domową lub rozgłosić własną sieć.

Próbowałem obu i znalazłem kilka plusów i minusów obu metod.

Jako stacja (tzn. łączy się z siecią)

W początkowym projekcie sprawiłem, że mój Pico W połączył się z moją siecią domową i na swoim adresie IP 192.168.0.70 serwował plik HTML z przyciskiem.

Korzyść z tego była taka, że bez problemu mogłem uruchomić przeglądarkę i nacisnąć przycisk, który wyłączał światło.

Jednak minusem jest to, że każdy w sieci był również w stanie to zrobić, chyba że wdrożyłeś jakąś formę uwierzytelniania.

Kolejnym minusem jest to, że jeśli sieć domowa straciła zasilanie, Raspberry Pi Pico W nie połączy się ponownie z siecią, chyba że masz zaimplementowany kod, który restartuje Pico W lub ponownie łączy go z siecią.

Jako punkt dostępu

Po podłączeniu do niego, serwo będzie się obracać, wyłączając przełącznik

Obecnie używam mojego Pico W jako punktu dostępu, choć nie twierdzę, że to najlepsze rozwiązanie.

Rozgłasza sieć, do której muszę się osobno podłączyć, aby móc sterować serwem. Jest to niewygodny minus.

Plusem tego jest to, że w przeciwieństwie do metody stacyjnej, masz hasło na sieć, więc tylko ty możesz się z nią połączyć.

Początkowo miałem punkt dostępu, który serwował stronę internetową z przyciskiem do wyzwalania serwa. Stwierdziłem, że jest to zbyt uciążliwe, ponieważ trzeba będzie 1) połączyć się z siecią, 2) wejść na adres IP Pico W i 3) nacisnąć przycisk

Znalazłem najlepsze rozwiązanie, aby wyzwolić serwo, gdy Pico W wykryje klienta łączącego się z punktem dostępu. W ten sposób wystarczy, że podłączysz dowolne urządzenie do Pico W, a twoje światła (lub przełącznik) będą wyłączone.

Podłączenie Pico W do serwa

Jest to prosty projekt i powinieneś być w stanie znaleźć części w zestawie dla początkujących. Jeśli nie, oto lista części.

Użyłem również opcjonalnego breadboardu, aby podłączyć serwo do Pico W za pomocą przewodów zworkowych męsko-męskich, ale możesz podłączyć serwo bezpośrednio do głowic Pico W za pomocą przewodów zworkowych męsko-żeńskich.

Potrzebna będzie również taśma dwustronna do przyklejenia serwa na obudowę przełącznika świateł.

Podłączenie

Podłączenie Pico W do serwomechanizmu. (schemat wykonany przy użyciu Wokwi)

Generalnie wszystkie serwa mają przewód czerwony, czarny/brązowy i trzeci.

Podłącz czerwony przewód zworki do czerwonego przewodu wychodzącego z serwa. W tym miejscu będziesz przesyłał 5V, poprzez VBUS.

Podłącz czarny przewód do czarnego/brązowego przewodu. Podłączysz go do GND na Pico W.

Podłącz kolejny przewód do trzeciego przewodu. Mój jest koloru pomarańczowego, więc użyłem pomarańczowej zworki. Jest to przewód sygnałowy, który podłączyłem do GPIO16.

Kodeks

Ten kod pozwoli na wyzwolenie serwa po podłączeniu się klienta do punktu dostępu SoftAP Pico W.

sieć importowa
importować maszynę
from machine import PWM
from time import sleep

#Pin param = numer pinu GPIO serwomechanizmu
pwm = PWM(machine.Pin(16))

ssid = 'Lights-Out'
hasło = 'sleeptime'

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

while ap.active() == False:
  pass

print('Połączenie zakończone sukcesem')
print(ap.ifconfig())

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sleep(0.5)

    pwm.duty_ns(1500000)

#ap.status jest pustą tablicą dopóki ktoś się nie połączy, wtedy będzie miał jeden wpis
#when ap.status = true, wtedy uruchomi rotateServo()
#wtedy wyłączy się, aby wyrzucić użytkownika z sieci,
# pozwalając urządzeniu na ponowne połączenie się ze swoją zwykłą siecią.

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('Połączenie zamknięte')

Niektóre ważne linie kodu do wyjaśnienia:

Kod zakłada, że podłączyłeś przewód sygnałowy do GPIO16. Jeśli nie, zmień liczbę całkowitą "16" w tej linii na pin GPIO, do którego jesteś podłączony.

#Pin param = numer pin GPIO serwa
pwm = PWM(machine.Pin(16))

To ustawia SoftAP, deklaruje nazwę SSID i hasło,

sieć importowa
...
ssid = 'Lights-Out'
password = 'sleeptime'

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

Serwosterowanie na Pico W

To steruje serwomechanizmem. Prawdopodobnie będziesz musiał to zmodyfikować.

Dla mojego serwa mógłbym użyć wartości od 500000 (500K) do 2000000 (2 mil). To dałoby pełny zakres działania serwa.

Ja jednak potrzebowałem tylko niewielkich obrotów. Dlatego też ustawiłem serwo na pełny obrót za pomocą pwm.duty_ns(2000000) a potem niech wróci do pwm.duty_ns(1500000).

Prawdopodobnie najlepiej przetestować to, gdy twoje serwo jest swobodnie pływające, dzięki czemu można zobaczyć, czy obraca się we właściwym kierunku, a następnie można dostroić stopnie obrotu.

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sleep(0.5)

    pwm.duty_ns(1500000)

Nadawanie AP, wyzwalanie rotateServo przy połączeniu

Ta linia kodu działa wielokrotnie.

while True:
    try:
        if ap.status('stations'):
            print('client connected')
            rotateServo()
            sleep(10)
            ap.active(False)
            sleep(2)
            ap.active(True)

Jeśli ap.status('stacje') wykryje połączenie do sieci bezprzewodowej, zwróci tablicę z jednym elementem.

ap.status('stacje') zwraca pustą tablicę, jeśli nikt nie jest podłączony do AP

Stąd, jeśli kod nie jest pustą tablicą, to uruchomi rotateServo i wyłączyć AP przed ponownym włączeniem.

Ideą włączania i wyłączania AP jest wyrzucenie podłączonego klienta z sieci. Dzięki temu może on podłączyć się do swojej zwyczajowej sieci z połączeniem internetowym.

android auto reconnect off
Automatyczne ponowne połączenie wyłączone w systemie Android

Upewnij się tylko, że wyłączyłeś auto-reconnect w swoim telefonie lub komputerze.

Dlaczego potrzebujemy sleep(x) pomiędzy wywołaniami ap.active()? To dlatego, że nauczyłem się, że jeśli wyłączę i włączę AP zbyt szybko, mój telefon nie zrzuci połączenia.

Dowiedz się więcej o Raspberry Pi Pico W

Napisaliśmy artykuł specjalnie o Raspberry Pi Pico W, który pomoże Ci w pełni wykorzystać możliwości Twojego Pico W. Kliknij tutaj, aby dowiedzieć się o rzeczach, których nigdy nie wiedziałeś.

Pozostaw komentarz