Controlador de servo interruptor sem fios DIY com Raspberry Pi Pico W

projecto de controlo de comutação sem fios diy
Visão geral do projecto de controlo do comutador sem fios DIY

Um dos maiores problemas que tenho é levantar-me da cama para desligar a luz do quarto.

É muito difícil fazê-lo quando se está aconchegado na cama.

Há alguns anos atrás, construí uma solução sem fios com um Arduino e um comando IR.

Resultou bastante bem porque era fiável e resolveu o meu problema.

Mas não foi sem os seus inconvenientes.

Para um, o Arduino Uno era maciço em comparação com o Raspberry Pi Pico W.

Em segundo lugar, dependia de um sinal IR, o que significava que eu precisava de saber onde estava o meu comando IR quando queria apagar a luz.

E é aqui que o Raspberry Pi Pico W tem a sua vantagem. Pode controlar o servo directamente a partir do seu telefone.

Porquê preocupar-se com este projecto de bricolage?

É feio. É enfadonho.

Mas também envolve a alegria e o divertimento de elaborar a sua própria solução para os seus problemas.

Os problemas modernos exigem soluções modernas, e pode ver aqui como as pessoas resolvem os seus problemas com o Raspberry Pi.

Além disso, poderá ter de o fazer porque não está autorizado a modificar os aparelhos eléctricos do seu apartamento.

Ou não quer passar pela despesa de contratar um profissional para o fazer.

Outra razão é porque este projecto é tão extensível e portátil. Não é necessário utilizá-lo num interruptor de luz, pode utilizá-lo num teclado, para parar os protectores de ecrã, por exemplo.

Vídeo

Controlo de interruptor bidireccional possível, mas de uma forma mais fácil

controlo de servo interruptor sem fios diy
Servo preparado para desligar o interruptor de luz
controlo de servo interruptor sem fios diy
Servo em rotação completa, desligando o interruptor

Se há uma coisa que pode definitivamente fazer com todos os interruptores do mundo, seja europeu ou norte-americano, pode sempre usar um servo para o desligar ou ligar.

Mas se se quiser controlar o interruptor de ambas as maneiras, torna-se um desafio de engenharia maior porque o servo pode ficar no caminho.

Por exemplo, se precisar de ser capaz de ligar ou desligar manualmente o interruptor, poderá encontrar os servo braços no caminho. Não pode forçá-lo a sair do caminho sem destruir o motor, pois o servo está programado para se manter no lugar com todas as suas forças.

Rede de radiodifusão ou ligação a uma rede?

O Raspberry Pi Pico W pode ligar-se à sua rede doméstica ou pode transmitir a sua própria rede.

Tentei ambos e encontrei alguns prós e contras de ambos os métodos.

Como uma estação (ou seja, liga-se a uma rede)

No desenho inicial, fiz a ligação do meu Pico W à minha rede doméstica e servi um ficheiro HTML com um botão no seu endereço IP 192.168.0.70.

O benefício disto foi poder facilmente arrancar o meu navegador e premir o botão que desligava a luz.

No entanto, a desvantagem é que qualquer pessoa na rede também foi capaz de o fazer, a menos que tenha implementado alguma forma de autenticação.

Outra desvantagem é que, se a sua rede doméstica perder energia, o Raspberry Pi Pico W não voltará a ligar-se à rede, a menos que tenha implementado um código que reinicie o seu Pico W ou o volte a ligar à rede.

Como um ponto de acesso

Ao ligar-se a isto, o servo irá rodar, desligando o interruptor

Actualmente, estou a utilizar o meu Pico W como ponto de acesso, embora não esteja a dizer que é o melhor caminho a seguir.

Transmite uma rede à qual tenho de me ligar separadamente para poder controlar o servo. Esta é uma desvantagem inconveniente.

O lado positivo disto é que, ao contrário do método da estação, tem uma palavra-passe na rede para que só você possa ligar-se a ela.

Inicialmente, eu tinha um ponto de acesso que servia uma página web com um botão para accionar o servo. Achei isto demasiado complicado porque será necessário 1) ligar à rede, 2) ir para o endereço IP do Pico W e 3) premir o botão

Descobri que a melhor solução é accionar o servo assim que o Pico W detecta um cliente a ligar-se ao ponto de acesso. Desta forma, tudo o que tem de fazer é ligar qualquer dispositivo ao Pico W e as suas luzes (ou interruptor) estarão apagadas.

Ligação do Pico W a um servo

Este é um projecto simples e deverá ser capaz de encontrar peças num kit para principiantes. Caso contrário, aqui está uma lista de peças.

Também utilizei uma tábua de pão opcional para ligar o servo ao Pico W com fios de saltadores macho-para-fêmea, mas é possível ligar o servo directamente aos cabeçalhos do Pico W com fios de saltadores macho-para-fêmea.

Também precisará de fita adesiva de dupla face para colar o seu servo na caixa do interruptor de luz.

Ligá-lo

Ligação de um Pico W a um servo. (diagrama feito com Wokwi)

Geralmente, todos os servo têm um fio vermelho, preto/castanho e terceiro fio.

Ligar um fio vermelho do jumper ao fio vermelho proveniente do servo. É para aqui que enviará 5V, via VBUS.

Ligar um fio preto ao fio preto/castanho. Irá ligar isto à GND no Pico W.

Ligar outro fio ao terceiro fio. O meu é de cor laranja, por isso usei um fio de salta laranja. Este é o fio de sinal que eu liguei ao GPIO16.

O código

Este código permitir-lhe-á accionar o servo sobre um cliente que se ligue ao ponto de acesso SoftAP do Pico W.

rede de importação
máquina de importação
de PWM de importação automática
a partir do tempo sono de importação

#Pin param = número de pino servo GPIO
pwm = PWM(machine.Pin(16))

ssid = 'Lights-Out' (apagamento das luzes)
senha = 'hora do sono'.

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

enquanto ap.active() == Falso:
  passe

imprimir('Conexão bem sucedida')
print(ap.ifconfig())

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sono(0,5)

    pwm.duty_ns(1500000)

#ap.status é uma matriz em branco até alguém se ligar, então terá uma entrada
# quando ap.status = verdadeiro, então irá accionar o reservatório rotativo()
# depois desliga-se para expulsar o utilizador da rede,
# permitindo que o dispositivo volte a ligar-se à sua rede habitual

embora Verdadeiro:
    tente:
        se ap.status('estações'):
            print('client connected')
            rotateServo()
            sono(5)
            ap.active(Falso)
            sono(2)
            ap.active(Verdadeiro)
        
    excepto OSError como e:
        print('Ligação fechada')

Algumas linhas de código importantes a explicar:

O código assume que ligou o fio de sinal à GPIO16. Caso contrário, altere o "16" inteiro nesta linha para o pino GPIO ao qual está ligado.

#Pin param = número de pino servo GPIO
pwm = PWM(machine.Pin(16))

Isto cria o SoftAP, declara o nome SSID e a palavra-passe,

rede de importação
...
ssid = 'Lights-Out' (apagamento das luzes)
senha = 'hora do sono'.

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

Controlo de servos no Pico W

Isto controla o servo. Provavelmente, terá de modificar isto.

Para o meu servo, poderia usar um valor de 500000 (500K) a 2000000 (2 mil). Isto daria a gama completa do servo.

No entanto, eu só precisava de uma pequena rotação. Assim, coloquei o servo na sua rotação completa com pwm.duty_ns(2000000) e depois deixá-lo regressar a pwm.duty_ns(1500000).

É provavelmente melhor testar isto enquanto o seu servo está a flutuar livremente para que possa ver se está a rodar na direcção certa e depois pode afinar os graus de rotação.

def rotateServo ():
    pwm.freq(50)

    pwm.duty_ns(2000000)

    sono(0,5)

    pwm.duty_ns(1500000)

Transmissão de um AP, accionando o rotateServo em ligação

Esta linha de código corre repetidamente.

embora Verdadeiro:
    tente:
        se ap.status('estações'):
            print('client connected')
            rotateServo()
            sono(10)
            ap.active(Falso)
            sono(2)
            ap.active(Verdadeiro)

Se ap.status('estações') detecta uma ligação à rede sem fios, devolve uma matriz com um item.

ap.status('estações') devolve uma matriz vazia se ninguém estiver ligado ao AP

Assim, se o código não for um conjunto vazio, será lançado rotateServo e desligar o AP antes de o voltar a ligar.

A ideia de ligar e desligar o AP é expulsar o cliente ligado da rede. Isto permite-lhe ligar-se à sua rede habitual com uma ligação à Internet.

androide auto reconectar
Reconexão automática desligada no Android

Certifique-se apenas de desligar a ligação automática no seu telefone ou computador.

Porque precisamos do sono(x) entre ap.active() chamadas? Isso porque aprendi que se eu desligar e ligar o AP demasiado depressa, o meu telefone não deixará cair a ligação.

Saiba mais sobre o Raspberry Pi Pico W

Escrevemos um artigo especificamente sobre o Raspberry Pi Pico W que o ajudará a tirar o máximo partido do seu Pico W. Clique aqui para aprender sobre coisas que nunca soube.

Deixe um comentário