使用树莓派Pico W的DIY无线伺服开关控制器

Pico W 伺服开关控制器 标题图像

我遇到的最大问题之一是从床上爬起来关掉卧室的灯。当你惬意地躺在床上时,很难做到这一点。在这里,我想告诉大家如何用 Pico W 伺服开关控制器来解决这个问题。

几年前,我用 Arduino 和红外遥控器制作了一个无线解决方案。因为它很可靠,而且解决了我的问题,所以效果还不错。但也不是没有缺点。

首先,与Raspberry Pi Pico W相比,Arduino Uno非常庞大。

第二,它依赖于红外信号,这意味着当我想把灯关掉时,我需要知道我的红外遥控器在哪里。

而这正是Raspberry Pi Pico W的优势所在。你可以直接从你的手机上控制舵机。

Pico W 伺服开关控制器
DIY无线开关控制项目的概述

为什么要费心做这个DIY项目?

它是丑陋的。它很乏味。

但它也涉及到为你的问题制定自己的解决方案的喜悦和乐趣。

现代问题需要现代的解决方案,而 你可以在这里看到人们如何用Raspberry Pi解决他们的问题。.

此外,您可能需要这样做,因为您不被允许修改家中的电气设置。

或者你不想花钱雇一个专业人员来做。

另一个原因是这个项目是如此的可扩展和可移植。你不必把它用在电灯开关上,你可以把它用在键盘上,例如用来停止屏幕保护程序。

视频

双向开关控制是可能的,但单向开关最容易。

Pico W 伺服开关控制器
舵机启动,关闭电灯开关
Pico W 伺服开关控制器
伺服机处于全速旋转状态,关闭开关

如果有一件事你肯定能做到,世界上所有的开关,无论是欧洲的还是北美的,你总能用一个伺服机来关闭或打开它。

但如果你想双向控制开关,就会成为一个更大的工程挑战,因为伺服机可能会碍事。

例如,如果你需要能够手动打开或关闭开关,你可能会发现伺服臂挡住了路。你不能在不破坏电机的情况下把它强行拉开,因为伺服机的程序是要全力保持自己的位置。

广播网络或连接到网络?

Raspberry Pi Pico W可以连接到你的家庭网络,或者它可以广播自己的网络。

我两种方法都试过了,发现两种方法都有一些优点和缺点。

作为一个站点(即连接到一个网络上)

在最初的设计中,我让我的Pico W连接到我的家庭网络,它在其IP地址192.168.0.70上提供了一个带有按钮的HTML文件。

这样做的好处是,我很容易就能启动我的浏览器,按下关灯的按钮。

然而,缺点是网络上的任何人也能够这样做,除非你实施某种形式的认证。

另一个缺点是,如果你的家庭网络断电,Raspberry Pi Pico W不会重新连接到网络,除非你实现了重启Pico W或重新连接到网络的代码。

作为一个接入点

连接到这里后,伺服机将旋转,关闭开关。

目前,我正在使用我的Pico W作为一个接入点,尽管我并不是说这是最好的方法。

它广播了一个网络,我必须单独连接到这个网络,以便我控制伺服机。这是一个不方便的缺点。

这样做的好处是,与站式方法不同,你在网络上有一个密码,所以只有你能连接到它。

最初,我有一个接入点,它提供了一个带有按钮的网页来触发伺服。我发现这太麻烦了,因为你需要1)连接到网络,2)进入Pico W的IP地址,3)按下按钮

我发现最好的解决办法是,一旦Pico W检测到有客户连接到接入点,就触发伺服装置。这样,你所要做的就是把任何设备连接到Pico W上,你的灯(或开关)就会关闭。

将Pico W连接到一个伺服机上

这是一个简单的项目,你应该能在初学者的套件中找到零件。如果没有,这里有一个零件清单。

我还使用了一个可选的面包板,用公-母跳线将伺服机与Pico W连接起来,但你也可以用公-母跳线将伺服机直接连接到Pico W的针座上。

你还需要双面胶把你的伺服机粘在灯光开关外壳上。

接线

Pico W 伺服开关控制器
将Pico W连接到一个伺服机上。(图中用 Wokwi)

一般来说,所有的伺服机都有一条红色、黑色/棕色和第三条线。

将一根红色跳线连接到来自伺服机的红线上。这就是你要通过VBUS发送5V的地方。

将一条黑线连接到黑/棕线上。你将把它连接到Pico W上的GND。

将另一条线连接到第三条线上。我的线是橙色的,所以我用了一条橙色的跳线。这是我连接到GPIO16的信号线。

准则

这段代码将允许你在客户端连接到Pico W的SoftAP接入点时触发伺服。

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(2mil)的值。这将提供伺服机的全部范围。

然而,我只需要小幅旋转。因此,我把舵机放到它的全速旋转,用 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,连接时触发旋转Servo

这行代码反复运行。

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

如果 ap.status('stations') 检测到无线网络的连接,它将返回一个包含一个项目的数组。

ap.status('stations') 如果没有人连接到AP,则返回一个空数组。

因此,如果代码不是一个空数组,就会启动 旋转伺服 并在再次开机前关闭AP。

开启和关闭AP的想法是将连接的客户端踢出网络。这样它就可以通过互联网连接到其习惯的网络上。

安卓系统自动重新连接关闭
安卓系统中的自动重新连接被关闭

只要确保在你的手机或电脑中关闭自动重新连接。

为什么我们需要在调用ap.active()之间设置sleep(x)?这是因为我了解到,如果我关闭和开启AP的速度太快,我的手机就不会放弃连接。

了解更多关于Raspberry Pi Pico W的信息

我们专门写了一篇关于Raspberry Pi Pico W的文章,将帮助你充分利用你的Pico W。 点击这里,了解你所不知道的事情。

2评论

  1. Udo 在2 月 24, 2023在3:47 下午

    非常有趣。
    I betreibe gerade viel Recherche zum pico w.
    我的想法太过简单了,我只是在一个与Pi Zero无关的项目上做了些工作。
    因此,我对Pico完全没有兴趣。
    我的目标:将Pico W作为键盘遥控器来使用。
    这是很重要的。我从我的Smarthome上用手或脚本发送传真,Pico上的传真和PC上的传真都被删除了。
    在hid库中,可以很好地模拟键盘。
    因此,我可以在某个特定的时间自动关闭电脑。
    Der Vorteil an der hid emulation:它几乎不需要在电脑上安装任何工具和软件。不管是哪种系统。因此,人们可以自己操纵Bios。
    你是否有一个想法,希望能通过Pico W来实现这个目标。
    哦,没有Wlan的时候,这很好。 https://www.heise.de/tests/Ausprobiert-Raspberry-Pico-mit-USB-HID-als-Tastatur-oder-Maus-benutzen-6011697.html
    是否也可以通过wlan的方式使用pico w?

    • raspi berry 在3 月 11, 2023在7:02 上午

      嗨,Udo,我不知道为什么人们不能用Pico W来实现这个目标。
      我把它作为PiCockpit的注册表,作为Pico W的一个新的应用程序(PiCockpit也支持Pico W!)。
      我们一直在努力,使Pico W也能支持PiControl--这样,人们就可以在Pico W上安装Python脚本,并在此基础上生成最佳的定义序列。
      (Falls es per Python auch geht - ich habe den Heise Artikel gerade nicht angeschaut).

      感谢你的提问和解答!你的问题是什么?
      最大

发表评论