您需要的東西
Arduino UNO或類似的
2 x微型或小型業(yè)余伺服器
公對(duì)公連接線
公對(duì)母連接線
各式拉鏈帶
構(gòu)建安全攝像機(jī)
使用提供的螺釘將伺服喇叭(塑料的“小形狀”)安裝到每個(gè)伺服上。盡管越大越好,但特定的形狀并不重要。請(qǐng)勿過(guò)度擰緊螺釘。
現(xiàn)在,使用拉緊帶將一個(gè)伺服器以直角連接到另一個(gè)伺服器。其中一個(gè)將是平移(從左到右),而另一個(gè)將是傾斜(向上和向下)。不管哪個(gè)人做什么,都可以在代碼中對(duì)其進(jìn)行調(diào)整。
最后,將您的網(wǎng)絡(luò)攝像頭連接到其中一個(gè)伺服器上。盡管我的網(wǎng)絡(luò)攝像頭帶有一個(gè)固定在底部的固定夾,但您可以使用拉鏈領(lǐng)帶-我卸下了固定夾并用螺釘將其固定在喇叭上。為了穩(wěn)定起見(jiàn),您可能需要將整個(gè)鉆機(jī)安裝到箱子或盒子上。一個(gè)簡(jiǎn)單的紙板箱可以很好地解決問(wèn)題。您可以切一個(gè)整潔的方孔,并在表面上安裝一個(gè)伺服平齊,但是只需系上一條拉鏈即可。
關(guān)于攝像頭的信息
并非所有USB網(wǎng)絡(luò)攝像頭都是一樣創(chuàng)建的。將網(wǎng)絡(luò)攝像頭連接到Pi的USB端口,然后運(yùn)行以下命令:
lsusb
此命令顯示有關(guān)連接到Pi的所有USB設(shè)備的信息。如果您的網(wǎng)絡(luò)攝像頭未在此處列出,則您可能要嘗試使用有源USB集線器并重復(fù)該命令。如果仍然無(wú)法識(shí)別該網(wǎng)絡(luò)攝像頭,則可能必須購(gòu)買兼容的網(wǎng)絡(luò)攝像頭。
伺服設(shè)置
雖然伺服器看起來(lái)很恐怖和復(fù)雜,但連接起來(lái)確實(shí)非常簡(jiǎn)單。伺服系統(tǒng)在脈寬調(diào)制(PWM)上運(yùn)行,這是數(shù)字系統(tǒng)模仿模擬信號(hào)的一種方式。 PWM信號(hào)本質(zhì)上是快速的ON-OFF信號(hào)。使用占空比來(lái)描述ON或HIGH的信號(hào)。占空比以百分比表示,并描述了信號(hào)開(kāi)啟的時(shí)間。占空比為25%的PWM信號(hào)將在25%的時(shí)間內(nèi)打開(kāi),其余75%的時(shí)間關(guān)閉。信號(hào)在開(kāi)始時(shí)并沒(méi)有打開(kāi),然后一直關(guān)閉,而是在非常短的時(shí)間內(nèi)定期發(fā)出脈沖。
Servos會(huì)監(jiān)聽(tīng)這些脈沖并采取相應(yīng)的措施。使用100%的占空比將與“常規(guī)” 5v相同,而0%將與接地相同。如果您不完全了解PWM的工作原理,請(qǐng)不要擔(dān)心,您仍然可以控制伺服器(Extreme Electronics是了解更多信息的好地方)。
使用PWM的主要方法有兩種:硬件或軟件。硬件PWM通常提供比軟件PWM更低的延遲(伺服器接收命令和移動(dòng)之間的時(shí)間),但是Pi只有一個(gè)具有硬件PWM功能的引腳。外部電路可用于提供多個(gè)硬件PWM通道,但是簡(jiǎn)單的Arduino也可以處理該任務(wù),因?yàn)樗鼈兙哂卸鄠€(gè)硬件PWM引腳。
這里是電路:
仔細(xì)檢查Pi的引腳排列,它們?cè)谛吞?hào)之間略有不同。您需要弄清楚伺服系統(tǒng)的接線方式。 Servos需要三根線來(lái)控制它們,但是顏色略有不同:
紅色為正,將其連接至Pi + 5v
棕色或黑色為負(fù),將其連接至Pi上的GND
橙色或白色是信號(hào),將其連接至Arduino引腳9和10
Arduino設(shè)置
Arduino的新功能?在這里開(kāi)始。
一旦連接了伺服器,請(qǐng)?jiān)谟?jì)算機(jī)上打開(kāi)Arduino IDE并上傳此測(cè)試代碼。不要忘記從 Tools》 Board 和 Tools》 Port 菜單
#include // Import the library
Servo servoPan, servoTilt; // Create servo objects
int servoMin = 20, servoMax = 160; // Define limits of servos
void setup() {
// Setup servos on PWM capable pins
servoPan.attach(9);
servoTilt.attach(10);
}
void loop() {
for(int i = servoMin; i 《 servoMax; ++i) { 1
// Move servos from minimum to maximum
servoPan.write(i);
servoTilt.write(i);
delay(100); // Wait 100ms
}
for(int i = servoMax; i 》 servoMin; --i) {
// Move servos from maximum to minimum
servoPan.write(i);
servoTilt.write(i);
delay(100); // Wait 100ms
}
} 一切都很好,您應(yīng)該看到兩個(gè)伺服器都緩慢地來(lái)回移動(dòng)。請(qǐng)注意,如何將“ servoMin”和“ ServoMax”定義為20度和160度(而不是0度和180度)。部分原因是這些廉價(jià)的伺服器無(wú)法準(zhǔn)確地移動(dòng)整個(gè)180度,還因?yàn)榫W(wǎng)絡(luò)攝像頭的物理尺寸阻止了整個(gè)范圍的使用。您可能需要針對(duì)設(shè)置進(jìn)行調(diào)整。
如果它們根本不起作用,請(qǐng)?jiān)俅螜z查電路是否正確接線。面包板的質(zhì)量有時(shí)也會(huì)有所不同,因此請(qǐng)考慮購(gòu)買萬(wàn)用表進(jìn)行驗(yàn)證。
伺服器幾乎對(duì)于Arduino而言功能太強(qiáng)大,因此它們將由Pi。 Pi上的5v電壓限制為提供給整個(gè)Pi的750mA,Pi汲取了大約500mA的電流,剩下250mA用于伺服器。這些微型伺服器消耗大約80mA電流,這意味著Pi應(yīng)該能夠處理其中的兩個(gè)。如果您希望使用更多的伺服器或更大,功率更高的型號(hào),則可能需要使用外部電源。
現(xiàn)在將以下代碼上傳到Arduino。這將偵聽(tīng)傳入的串行數(shù)據(jù)(如通用 Serial 總線或USB中的串行)。 Pi將通過(guò)USB將這些數(shù)據(jù)發(fā)送到Arduino,并告知將伺服器移至何處。
#include // Import the library
Servo servoPan, servoTilt; // Create servo object
String data = “”; // Store incoming commands (buffer)
void setup() {
// Setup servos on PWM capable pins
servoPan.attach(9);
servoTilt.attach(10);
Serial.begin(9600); // Start serial at 9600 bps (speed)
}
void loop() {
while (Serial.available() 》 0)
{
// If there is data
char singleChar = Serial.read(); // Read each character
if (singleChar == ‘P’) {
// Move pan servo
servoPan.write(data.toInt());
data = “”; // Clear buffer
}
else if (singleChar == ‘T’) {
// Move tilt servo
servoTilt.write(data.toInt());
data = “”; // Clear buffer
}
else {
data += singleChar; // Append new data
}
}
}
您可以通過(guò)打開(kāi)串行監(jiān)視器(右上角》串行監(jiān)視器)并發(fā)送一些測(cè)試數(shù)據(jù):
90P
0P
20T
100T
注意命令的格式-一個(gè)值,然后一個(gè)字母。該值是伺服系統(tǒng)的位置,字母(大寫)表示搖攝或俯仰伺服系統(tǒng)。由于從Pi串行傳輸此數(shù)據(jù),因此每個(gè)字符一次通過(guò)一個(gè)字符。 Arduino必須“存儲(chǔ)”這些,直到發(fā)送完整個(gè)命令。最后一個(gè)字母不僅指定了伺服,而且還使Arduino知道此命令中沒(méi)有更多數(shù)據(jù)。
最后,斷開(kāi)Arduino與計(jì)算機(jī)的連接,然后將其插入Raspberry Pi通過(guò)通常的USB端口連接。
Pi設(shè)置
現(xiàn)在是時(shí)候設(shè)置Pi了。首先,安裝操作系統(tǒng)。將網(wǎng)絡(luò)攝像頭和Arduino連接到Pi USB。
更新Pi:
sudo apt-get update
sudo apt-get upgrade
安裝動(dòng)作:
sudo apt-get install motion
Motion是一個(gè)用于處理網(wǎng)絡(luò)攝像頭流的程序。它可以處理所有繁重的工作,甚至可以執(zhí)行記錄和運(yùn)動(dòng)檢測(cè)(嘗試構(gòu)建運(yùn)動(dòng)捕獲安全系統(tǒng))。打開(kāi)Motion配置文件:
sudo nano /etc/motion/motion.conf
此文件提供了許多配置Motion的選項(xiàng)。設(shè)置如下:
守護(hù)程序打開(kāi)-運(yùn)行程序
framerate:100-關(guān)閉每秒要流多少幀或圖像
stream_localhost-允許通過(guò)網(wǎng)絡(luò)訪問(wèn)
寬度640-視頻寬度,調(diào)整您的網(wǎng)絡(luò)攝像頭
高度320-視頻高度,調(diào)整您的網(wǎng)絡(luò)攝像頭
stream_port 8081 —關(guān)閉將視頻輸出到的端口
output_picture —不保存任何圖像
這是一個(gè)很大的文件,因此您可能要使用 CTRL + W 搜索行。完成后,按 CTRL + X ,然后確認(rèn)保存并退出。
現(xiàn)在再編輯一個(gè)文件:
sudo nano /etc/default/motion
設(shè)置“ start_motion_daemon =是”。這是確保Motion運(yùn)行所必需的。
現(xiàn)在找出您的IP地址:
ifconfig
此命令將顯示Pi的網(wǎng)絡(luò)連接詳細(xì)信息。查看第二行 inet addr 。您可能想設(shè)置一個(gè)靜態(tài)IP地址(什么是靜態(tài)IP?),但現(xiàn)在記下這個(gè)數(shù)字。
現(xiàn)在開(kāi)始運(yùn)動(dòng):
sudo service motion start
您可以通過(guò)將“開(kāi)始”更改為“停止”或“重新啟動(dòng)”來(lái)停止或重新啟動(dòng)Motion。
切換到計(jì)算機(jī)并從Web瀏覽器導(dǎo)航到Pi:
http://xxx.xxx.x.xx:8081
其中xxx.xxx.x.xx是Pi IP地址。冒號(hào)后跟數(shù)字是之前設(shè)置的端口。一切順利,您應(yīng)該可以從網(wǎng)絡(luò)攝像頭中看到信息流!嘗試四處移動(dòng),看看情況如何。您可能需要在配置文件中調(diào)整亮度和對(duì)比度設(shè)置。您可能需要對(duì)網(wǎng)絡(luò)攝像頭進(jìn)行對(duì)焦-某些型號(hào)的鏡頭周圍有一個(gè)小的對(duì)焦環(huán)。將其旋轉(zhuǎn)直到圖像最清晰。
回到樹(shù)莓派,創(chuàng)建一個(gè)文件夾并導(dǎo)航到其中:
mkdir security-cam
cd security-cam/
現(xiàn)在安裝Twisted:
sudo apt-get install python-twisted
Twisted是用Python編寫的Web服務(wù)器,它將偵聽(tīng)命令,然后采取相應(yīng)的措施。
安裝后,創(chuàng)建Python腳本來(lái)執(zhí)行命令(移動(dòng)伺服器。)
sudo nano servos.rpy
注意文件擴(kuò)展名是“ .rpy”而不是“ py”。這是代碼:
# Import necessary files
import serial
from twisted.web.resource import Resource
# Setup Arduino at correct speed
try:
arduino = serial.Serial(‘/dev/ttyUSB0’, 9600)
except:
arduino = serial.Serial(‘/dev/ttyUSB1’, 9600)
class MoveServo(Resource):
isLeaf = True
def render_GET(self,request):
try:
# Send value over serial to the Arduino
arduino.write(request.args[‘value’][0])
return ‘Success’
except:
return ‘Failure’
resource = MoveServo()
現(xiàn)在啟動(dòng)Web服務(wù)器:
sudo twistd -n web -p 80 --path /home/pi/security-cam/
讓我們分解一下-“ -p 80”指定端口(80)。這是網(wǎng)頁(yè)的默認(rèn)端口。 “ –path/home/pi/security-cam/”告訴Twisted在指定目錄中啟動(dòng)服務(wù)器。如果您對(duì)“ security-cam”文件夾中的腳本進(jìn)行了任何更改,則需要重新啟動(dòng)服務(wù)器( CTRL + X 以關(guān)閉,然后再次運(yùn)行命令)。
現(xiàn)在創(chuàng)建網(wǎng)頁(yè):
sudo nano index.html
這是網(wǎng)頁(yè)代碼:
Left
Right
Up
Down
更改“ PI_IP_ADDRESS”(已使用兩次) )到您Pi的真實(shí)IP地址(如果您正在運(yùn)行最新的Raspian,則 raspberrypi.local 也應(yīng)該可以使用)。重新啟動(dòng)網(wǎng)絡(luò)服務(wù)器,然后從計(jì)算機(jī)導(dǎo)航至Pi,無(wú)需指定端口。您應(yīng)該可以左右左右平移,并觀看視頻流:
在那里。您自己的云臺(tái)網(wǎng)絡(luò)攝像機(jī)。如果要將網(wǎng)絡(luò)攝像頭暴露在互聯(lián)網(wǎng)上,請(qǐng)記住要考慮的危險(xiǎn)–然后研究端口轉(zhuǎn)發(fā),以便路由器知道將傳入請(qǐng)求發(fā)送到哪里。您可以為真正的便攜式設(shè)備添加外部電源和Wi-Fi適配器。
責(zé)任編輯:wv
-
攝像機(jī)
+關(guān)注
關(guān)注
3文章
1603瀏覽量
60075 -
樹(shù)莓派
+關(guān)注
關(guān)注
116文章
1707瀏覽量
105670
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論