利用網(wǎng)絡攝像頭的報警輸出端口的繼電器開開合合形成一個二進制的編碼,然后用一個Arduino來進行譯碼,擴展了網(wǎng)絡攝像頭的I/O口
1、網(wǎng)絡攝像頭
2、Arduino控制板
3、電機驅(qū)動擴展板
4、Arduino穩(wěn)壓板(為了保證網(wǎng)絡攝像頭穩(wěn)定的電源)
5、10k電阻(端口上拉)及面包線
6、小車底盤、( 2WD / 4WD)(含直流電機、電源)
L298P電機驅(qū)動擴展板
穩(wěn)壓擴展板
網(wǎng)絡攝像頭我是在網(wǎng)上為了保證攝像頭使用電壓的穩(wěn)定,我沒有使用Arduino板上的5V電壓,而是單獨用了一個穩(wěn)壓擴展板。該擴展板在小車調(diào)試前期可不用,直接用穩(wěn)壓器給網(wǎng)絡攝像頭提供電源。小車底盤( 2WD /4WD)是路虎5履帶底盤。最后找了一個直插的10k電阻,再準備一些面包線,這樣所有的材料都準備好了。
穩(wěn)壓擴展板的使用很簡單,我們先來簡單介紹一下。如下圖的標識,將電池接到擴展板的輸入端子,輸入端子旁邊的兩個跳線帽要跳到PWRIN位置;然后調(diào)節(jié)輸出電壓微調(diào)電位器,用萬用表測量電源輸出端電壓使其穩(wěn)定在5V;最后將網(wǎng)路攝像頭電源接口與擴展板電源輸出端連在一起。
電機驅(qū)動板的使用大家可能都比較熟悉了,本人這里再簡單提兩句。先要選擇控制方式,這個制作中使用的是PWM方式;再者就是連接直流電機,如下圖所示的連接端子。M1+和M1—連接一個直流電機,M2+和M2—連接另一個直流電機,電機驅(qū)動板占用Arduino的4、5、6、7腳。
最后我們重點來說一下Arduino控制板與網(wǎng)絡攝像頭的連接。在網(wǎng)上的那篇文章中作者用攝像頭公司提供的插件做了一個運行在PC端的軟件,以此來控制繼電器產(chǎn)生寬窄不一的脈沖。這里我沒有采用這種方式,PC軟件的制作也不是誰都能完成的。本人采用的方式是直接用Arduino捕獲網(wǎng)絡攝像頭內(nèi)控制步進電機的信號,拆掉了網(wǎng)絡攝像頭中左右轉(zhuǎn)的步進電機,用攝像頭本身左右旋轉(zhuǎn)的信號來控制小車的左右轉(zhuǎn),而用繼電器的吸合來控制小車的前進與停止。
開始拆攝像頭!
導線引出后,我們合上網(wǎng)絡攝像頭的底蓋,來看看它背面的接口。如下圖所示,在攝像頭后面最中間的是天線接口,天線右側(cè)的4個I/O口就是報警輸出端口,4個I/O用1、2、3、4標識,其中1、2是報警輸出端口,分別接到了繼電器兩端,3為報警輸入端口(此端口未用),4為攝像頭內(nèi)容電路的數(shù)字地。
這3個I/O(不包括3號I/O)加上之前的A+和B+總共5條線,與Arduino的連接關系如下圖所示。連接網(wǎng)絡攝像頭內(nèi)報警繼電器一端的2腳連到Arduino的GND,而連接繼電器另一端的1腳連到Arduino的9腳,同時在9腳加上10k的上拉電阻,這樣當繼電器未吸合時,9腳因為上拉電阻,所以狀態(tài)為高;而當繼電器吸合時,9腳接GND,所以狀態(tài)為低。網(wǎng)絡攝像頭報警接口的4腳也要連接到Arduino的GND,以使網(wǎng)絡攝像頭控制板與Arduino共地。A+與B+分別連接到Arduino的2、3腳,這兩個腳如果連反了可以在程序中調(diào)整
步進電機的控制方式是不斷的變化A、B兩相上的電壓大小和電流方向,這樣在A+和B+上就會產(chǎn)生一串脈沖。使用示波器觀察我們發(fā)現(xiàn),當發(fā)送左轉(zhuǎn)的命令時,首先在A+上產(chǎn)生脈沖,而當發(fā)送右轉(zhuǎn)的命令時,首先在B+上產(chǎn)生脈沖,效果如下圖所示。
我們就利用A+、B+上的信號差異,以及繼電器的吸合來實現(xiàn)對小車的控制。Arduino端用到了外部中斷功能,2腳對應Arduino外部中斷0,3腳對應Arduino外部中斷1,詳細代碼如下:
/**********************************************
捕獲步進電機信號控制直流電機
使用Arduino的外部中斷
created 2013
by Nille
**********************************************/
int InterruptA = 1; //定義InterruptA 為外部中斷1,也就是引腳3
int InterruptB = 0; //定義InterruptB 為外部中斷0,也就是引腳2
volatile int state = 0; //定義state用來保存小車左右轉(zhuǎn)的狀態(tài),
//1為左轉(zhuǎn),2為右轉(zhuǎn)
void setup()
{
//2、3腳為外部中斷0、1,用來捕獲A+、B+上的信號
pinMode(2, INPUT);
pinMode(3, INPUT);
//4、5、6、7用于控制直流電機
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
//9腳用于檢測繼電器的狀態(tài)
pinMode(9, INPUT);
// 監(jiān)視外部中斷輸入引腳的變化
attachInterrupt(InterruptA, stateInterruptA, FALLING);
attachInterrupt(InterruptB, stateInterruptB, FALLING);
}
void loop()
{
if(digitalRead(2) == LOW || digitalRead(3) == LOW)
{
if(state == 1)
{
//state為1時小車左轉(zhuǎn)
digitalWrite(4,LOW);
digitalWrite(7,HIGH);
analogWrite(5,240);
analogWrite(6,240);
}
else if(state == 2)
{
//state為2時小車右轉(zhuǎn)
digitalWrite(4,HIGH);
digitalWrite(7,LOW);
analogWrite(5,240);
analogWrite(6,240);
}
else
{
//小車停止
analogWrite(5,0);
analogWrite(6,0);
}
}
else
{
state = 0;
//在繼電器吸合的情況下
if(digitalRead(9) == 0)
{
//小車前進
digitalWrite(4,HIGH);
digitalWrite(7,HIGH);
analogWrite(5,250);
analogWrite(6,250);
}
else
{
//小車停止
analogWrite(5,0);
analogWrite(6,0);
}
}
}
//中斷函數(shù)stateInterruptA,當A+先收到脈沖則小車左轉(zhuǎn)
void stateInterruptA()
{
if(state == 0)
state = 1;
}
//中斷函數(shù)stateInterruptB,當B+先收到脈沖則小車左轉(zhuǎn)
void stateInterruptB()
{
if(state == 0)
state = 2;
}
可以在代碼中添加一些Serial.println()的語句來查看一下程序在我們控制網(wǎng)絡攝像頭時能夠做出正確的相應。代碼調(diào)試完成后,如圖下圖所示,將Arduino控制板、電機驅(qū)動擴展板、穩(wěn)壓擴展板層疊的插在一起固定在小車的后面,前方安裝好網(wǎng)絡攝像頭。
完成后的wifi小車上電工作正常后,如圖下圖所示。wifi小車的控制與網(wǎng)絡攝像頭的控制方式類似,打開電腦端的瀏覽器,在地址欄中輸入網(wǎng)絡攝像頭的IP地址(不確定IP地址的話可以使用產(chǎn)品中附帶的IP網(wǎng)絡攝像頭搜索軟件搜一下)進入監(jiān)控界面,就使用界面右側(cè)的按鈕來控制這部簡易的wifi小車。另外該攝像頭還有一個廠家分配的唯一域名,只要在我們的路由器端簡單配置就能夠?qū)崿F(xiàn)廣域網(wǎng)條件下的小車控制了。
PS:突然發(fā)現(xiàn)美圖秀秀很好玩 所以 虛化背景 沒按到 按了 橡皮 結果有一幅圖被檫去一部分
因為原圖片過大 所以載圖
-
編碼
+關注
關注
6文章
933瀏覽量
54731 -
WIFI
+關注
關注
81文章
5282瀏覽量
203101 -
Arduino
+關注
關注
187文章
6458瀏覽量
186507
發(fā)布評論請先 登錄
相關推薦
評論