来自 RasPi 的 PWM 控制
使用 Raspberry Pi 计算机控制 Survey3 的 Python 脚本
使用我们的HDMI PWM 触发电缆,您可以将 PWM 命令发送到 Survey3 相机以执行一些操作。
树莓派设置
将 HDMI 电缆连接到相机,将单伺服连接器连接到 RasPi GPIO 接头上相应的 GPIO 引脚,如下所示:
RASPI 上 GPIO 接头的引脚图
对于下面的代码示例,我们将白色信号连接器连接到引脚 12 (GPIO18),将黑色接地连接器连接到引脚 14。
我们还将随附的 Survey3 USB 电缆连接到 RasPi USB 端口之一。如果您不需要安装/卸载 SD 卡或使用 USB 为相机供电,则可以将其保持断开状态。
如果 RasPi 无法启动且 USB 电缆已连接,则可能需要太多电流来为内部相机电池充电。我们建议将相机电池取出,然后当 USB 线通电启动时,它会自动打开相机。
所需的 PWM 信号需要始终发送“什么都不做”脉冲宽度。然后,仅当我们想要执行特定命令时才更改脉冲宽度。它只需要一个宽度较长的脉冲来执行每个命令。
脉宽调制指令:
1000us:什么都不做
1500us:安装/卸载 uSD 存储卡(在 Survey3 相机内)
2000us:触发拍照
发送一次 1500us 命令以卸载(在软件中)相机内的 uSD 存储卡,然后安装到连接的 USB 计算机 (RasPi),然后再次发送 1500us 以将 uSD 安装回相机。这通常用于将捕获的照片传输到 RasPi 或对图像进行后期处理。
当 uSD 从相机上卸下时,它无法保存新拍摄的图像。要在安装时查看图像,您需要使用WIFI 连接和相应的 url 命令。
脉宽调制代码:
要发送 PWM 信号,您需要始终发送 1000us 的“无操作”脉冲宽度,然后当您想要执行命令时,您需要发送一个瞬时 1500us 或 2000us 宽度的脉冲。
pin = 18 #set (BCM) GPIO pin to send GPIO.HIGH pulse
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
time.sleep(0.001) #1000us pulse width (do nothing)
GPIO.cleanup()
time.sleep(0.1)
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.HIGH)
time.sleep(0.002) #2000us pulse width
GPIO.cleanup()
time.sleep(0.1)
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
time.sleep(0.001) #1000us pulse width (do nothing)
GPIO.cleanup()
上面的代码将 PWM 设置为无操作 1000us,然后发送 2000us 触发命令拍摄照片,然后返回发送无操作 1000us。最快的 2000us 命令应该是大约每 1.5 秒发送一次,因为相机无法以超过 1.5 秒的速度捕获 JPG 图像。对于 RAW+JPG 模式,我们建议等待时间为 2.5-3.0 秒。
代码可以设置为循环直到用户退出(CTRL+Z),每 1.5 秒触发一次捕获命令:
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
pin = 18 #set (BCM) GPIO pin to send GPIO.HIGH pulse
try:
while True:
print("Command Sent\n")
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.HIGH)
time.sleep(0.002) #2000us pulse width
GPIO.cleanup()
time.sleep(0.1)
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
time.sleep(0.001) #1000us pulse width (do nothing)
GPIO.cleanup()
time.sleep(1.5) #time delay between GPIO.HIGH pulses, >1.5s recommended
#to exit type CTRL+Z
except KeyboardInterrupt:
pass
二进制
您还可以将其设置为接受用户键盘输入:
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
pin = 18 #set (BCM) GPIO pin to send GPIO.HIGH pulse
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
time.sleep(0.001)
GPIO.cleanup()
print("\nCommands:")
print("t + Enter: Trigger (2000us)")
print("s + Enter: SD Card Mount/Unmount (1500us)")
print("e + Enter: Exit\n")
while True:
key = input(">")
if key == "t":
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.HIGH)
time.sleep(0.002)
GPIO.cleanup()
time.sleep(0.1)
print("Trigger")
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
time.sleep(0.001)
GPIO.cleanup()
if key == "s":
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.HIGH)
time.sleep(0.0015)
GPIO.cleanup()
time.sleep(0.1)
print("SD Mount/UnMount")
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
time.sleep(0.001)
GPIO.cleanup()
if key == "e":
print("Exiting\n")
break
else:
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
time.sleep(0.001)
GPIO.cleanup()
二进制
上面的代码允许您输入字母“t”,然后按“Enter”键,它会拍照。您可以键入“s + Enter”,它将从相机上卸载 uSD 卡,然后 RasPi 会将其显示为可移动驱动器。再次键入“s + Enter”将从 RasPi 卸载并将 uSD 安装回相机。