來(lái)自 RasPi 的 PWM 控制
使用 Raspberry Pi 計(jì)算機(jī)控制 Survey3 的 Python 腳本
使用我們的HDMI PWM 觸發(fā)電纜,您可以將 PWM 命令發(fā)送到 Survey3 相機(jī)以執(zhí)行一些操作。
樹莓派設(shè)置
將 HDMI 電纜連接到相機(jī),將單伺服連接器連接到 RasPi GPIO 接頭上相應(yīng)的 GPIO 引腳,如下所示:
RASPI 上 GPIO 接頭的引腳圖
對(duì)于下面的代碼示例,我們將白色信號(hào)連接器連接到引腳 12 (GPIO18),將黑色接地連接器連接到引腳 14。
我們還將隨附的 Survey3 USB 電纜連接到 RasPi USB 端口之一。如果您不需要安裝/卸載 SD 卡或使用 USB 為相機(jī)供電,則可以將其保持?jǐn)嚅_狀態(tài)。
如果 RasPi 無(wú)法啟動(dòng)且 USB 電纜已連接,則可能需要太多電流來(lái)為內(nèi)部相機(jī)電池充電。我們建議將相機(jī)電池取出,然后當(dāng) USB 線通電啟動(dòng)時(shí),它會(huì)自動(dòng)打開相機(jī)。
所需的 PWM 信號(hào)需要始終發(fā)送“什么都不做”脈沖寬度。然后,僅當(dāng)我們想要執(zhí)行特定命令時(shí)才更改脈沖寬度。它只需要一個(gè)寬度較長(zhǎng)的脈沖來(lái)執(zhí)行每個(gè)命令。
脈寬調(diào)制指令:
1000us:什么都不做
1500us:安裝/卸載 uSD 存儲(chǔ)卡(在 Survey3 相機(jī)內(nèi))
2000us:觸發(fā)拍照
發(fā)送一次 1500us 命令以卸載(在軟件中)相機(jī)內(nèi)的 uSD 存儲(chǔ)卡,然后安裝到連接的 USB 計(jì)算機(jī) (RasPi),然后再次發(fā)送 1500us 以將 uSD 安裝回相機(jī)。這通常用于將捕獲的照片傳輸?shù)?RasPi 或?qū)D像進(jìn)行后期處理。
當(dāng) uSD 從相機(jī)上卸下時(shí),它無(wú)法保存新拍攝的圖像。要在安裝時(shí)查看圖像,您需要使用WIFI 連接和相應(yīng)的 url 命令。
脈寬調(diào)制代碼:
要發(fā)送 PWM 信號(hào),您需要始終發(fā)送 1000us 的“無(wú)操作”脈沖寬度,然后當(dāng)您想要執(zhí)行命令時(shí),您需要發(fā)送一個(gè)瞬時(shí) 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 設(shè)置為無(wú)操作 1000us,然后發(fā)送 2000us 觸發(fā)命令拍攝照片,然后返回發(fā)送無(wú)操作 1000us。最快的 2000us 命令應(yīng)該是大約每 1.5 秒發(fā)送一次,因?yàn)橄鄼C(jī)無(wú)法以超過(guò) 1.5 秒的速度捕獲 JPG 圖像。對(duì)于 RAW+JPG 模式,我們建議等待時(shí)間為 2.5-3.0 秒。
代碼可以設(shè)置為循環(huán)直到用戶退出(CTRL+Z),每 1.5 秒觸發(fā)一次捕獲命令:
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
二進(jìn)制
您還可以將其設(shè)置為接受用戶鍵盤輸入:
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()
二進(jìn)制
上面的代碼允許您輸入字母“t”,然后按“Enter”鍵,它會(huì)拍照。您可以鍵入“s + Enter”,它將從相機(jī)上卸載 uSD 卡,然后 RasPi 會(huì)將其顯示為可移動(dòng)驅(qū)動(dòng)器。再次鍵入“s + Enter”將從 RasPi 卸載并將 uSD 安裝回相機(jī)。