|
(昨天發(fā)了帖,不知怎么的,文件沒上傳,今天重發(fā),希望可以給初學(xué)舵機(jī)的人起到點(diǎn)幫助)
初學(xué)舵機(jī)的人如果沒有掌握舵機(jī)的性能,會(huì)很迷惑,會(huì)遇到“程序?qū)氩涣恕保岸鏅C(jī)不按程序運(yùn)行”等問題,本帖可以完美解決初學(xué)者對舵機(jī)的控制,有小車視頻,程序很詳細(xì)。
本人基于“探索者”平臺(tái),有詳細(xì)的照片資料
制作出來的實(shí)物圖如下:
視頻演示:
Arduino源程序如下:
- //標(biāo)準(zhǔn)舵機(jī),它的轉(zhuǎn)向是單方向,不同的視角,看到的不一樣,可以是順時(shí)針,可以是逆時(shí)針
- //我這個(gè)程序是將舵機(jī)預(yù)先調(diào)至90°,這樣保證車輪向正前方,其逆時(shí)針方向是其上限角度180°
- //千萬注意一點(diǎn),如果就靠電腦USB的電量,是無法使舵機(jī)正常運(yùn)行的,所以不要以為程序?qū)肓耍鏅C(jī)就會(huì)轉(zhuǎn),必須外接小型蓄電池
- /*友情提示:如果大家和我一樣,用的“探索者”套裝,它箱子里面有三塊芯片,
- 將擴(kuò)展板拆下,有的芯片沒有復(fù)位鍵,沒有總開關(guān),這個(gè)芯片應(yīng)該是有特殊用途的,
- 我從來沒有將舵機(jī)程序?qū)нM(jìn)去過,出現(xiàn)錯(cuò)誤提示:
- “avrdude: stk500_getsync(): not in sync: resp=0x00”,
- 所以你寫舵機(jī)程序就不要用這個(gè)芯片*/
- #include <Servo.h>
- Servo servo_pin_4;
- void setup()
- {
- pinMode( 14, INPUT);
- pinMode(17,INPUT);
- servo_pin_4.attach(4);
- pinMode( 5 , OUTPUT);
- pinMode( 6 , OUTPUT);
- pinMode( 9 , OUTPUT);
- pinMode( 10 , OUTPUT);
- }
- void loop()
- {
- int red_line=digitalRead(14);
- int touch =digitalRead(17);
- if (red_line==LOW)//如果紅外線感應(yīng)到了,后退
- {
- digitalWrite( 6 , HIGH );
- digitalWrite( 5 , LOW );
- digitalWrite( 10 , HIGH );
- digitalWrite( 9 , LOW );
- delay(1500);
- servo_pin_4.write( 60);//這里是向著0的方向轉(zhuǎn)的,即順時(shí)針旋轉(zhuǎn)30度,小車前輪向右邊拐,然后會(huì)復(fù)位,復(fù)位代碼在下一個(gè)if()里面
- delay(1000);
- digitalWrite( 5 , HIGH );//直走
- digitalWrite( 6 , LOW );
- digitalWrite( 9 , HIGH );
- digitalWrite( 10 , LOW );
-
- }
- if(red_line==HIGH)
- {
- servo_pin_4.write( 90 );//這是舵機(jī)復(fù)位程序,在上個(gè)if()里面,小車轉(zhuǎn)了30°,但是這里復(fù)位并不是說寫成-30,而是直接以0度為參考,指定角度
- digitalWrite( 5 , HIGH );//而這里的復(fù)位并不是指0度,而是指你自己定義的某個(gè)角度,我開始定義90度,以保證小車前輪向正前方,這里就要復(fù)位到90度
- digitalWrite( 6 , LOW );
- digitalWrite( 9 , HIGH );
- digitalWrite( 10 , LOW );
- }
- if(touch==LOW)
- {
- digitalWrite( 6 , HIGH );
- digitalWrite( 5 , LOW );
- digitalWrite( 10 , HIGH );
- digitalWrite( 9 , LOW );
- delay(1500);
- servo_pin_4.write( 120);//這里是向著180的方向轉(zhuǎn)的,即逆時(shí)針旋轉(zhuǎn)30度(以90度為參考,90度在正中央),小車前輪向右拐,然后會(huì)復(fù)位
- delay(1000);
- digitalWrite( 5 , HIGH );//直走
- digitalWrite( 6 , LOW );
- digitalWrite( 9 , HIGH );
- digitalWrite( 10 , LOW );
- }
- if(red_line==HIGH)
- {
- servo_pin_4.write( 90 );
- digitalWrite( 5 , HIGH );
- digitalWrite( 6 , LOW );
- digitalWrite( 9 , HIGH );
- digitalWrite( 10 , LOW );
- }
- if(red_line==LOW&&touch==LOW)
- {
- digitalWrite( 6 , HIGH );
- digitalWrite( 5 , LOW );
- digitalWrite( 10 , HIGH );
- digitalWrite( 9 , LOW );
- delay(1000);
- servo_pin_4.write( 30);//這里是向著0的方向轉(zhuǎn)的,即順時(shí)針旋轉(zhuǎn)30度,小車前輪向右拐,然后會(huì)復(fù)位,復(fù)位代碼在下一個(gè)if()里面
- delay(2500);
- digitalWrite( 5 , HIGH );//直走
- digitalWrite( 6 , LOW );
- digitalWrite( 9 , HIGH );
- digitalWrite( 10 , LOW );
- }
- if(red_line==HIGH&&touch==HIGH)
- {
- servo_pin_4.write( 90 );
- digitalWrite( 5 , HIGH );
- digitalWrite( 6 , LOW );
- digitalWrite( 9 , HIGH );
- digitalWrite( 10 , LOW );
- }
- }
-
- //總結(jié):一旦我們掌握這個(gè)舵機(jī)的性能,就會(huì)發(fā)現(xiàn),舵機(jī)其實(shí)很簡單,簡單之處就在于,你不用知道舵機(jī)上次轉(zhuǎn)沒轉(zhuǎn)好多度;
- //我要舵機(jī)在某個(gè)角度,我就按照安裝舵機(jī)的參考面,寫某個(gè)角度就行了,而不用知道它現(xiàn)在歪著斜著到底是好多度,這就給編程帶來了極大的好處,省了很多判斷和循環(huán)語句,降低了代碼的復(fù)雜度
復(fù)制代碼
視頻資料51hei提供下載:
arduion對標(biāo)準(zhǔn)舵機(jī)或360舵機(jī)的控制.zip
(8.54 MB, 下載次數(shù): 22)
2019-7-20 08:56 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|