(昨天發了帖,不知怎么的,文件沒上傳,今天重發,希望可以給初學舵機的人起到點幫助)
初學舵機的人如果沒有掌握舵機的性能,會很迷惑,會遇到“程序導入不了”,“舵機不按程序運行”等問題,本帖可以完美解決初學者對舵機的控制,有小車視頻,程序很詳細。
本人基于“探索者”平臺,有詳細的照片資料
制作出來的實物圖如下:
2.jpg (114.72 KB, 下載次數: 57)
下載附件
2019-7-20 15:23 上傳
1.jpg (97.21 KB, 下載次數: 77)
下載附件
2019-7-20 15:23 上傳
視頻演示:
0.png (163.28 KB, 下載次數: 73)
下載附件
2019-7-20 15:26 上傳
Arduino源程序如下:
- //標準舵機,它的轉向是單方向,不同的視角,看到的不一樣,可以是順時針,可以是逆時針
- //我這個程序是將舵機預先調至90°,這樣保證車輪向正前方,其逆時針方向是其上限角度180°
- //千萬注意一點,如果就靠電腦USB的電量,是無法使舵機正常運行的,所以不要以為程序導入了,舵機就會轉,必須外接小型蓄電池
- /*友情提示:如果大家和我一樣,用的“探索者”套裝,它箱子里面有三塊芯片,
- 將擴展板拆下,有的芯片沒有復位鍵,沒有總開關,這個芯片應該是有特殊用途的,
- 我從來沒有將舵機程序導進去過,出現錯誤提示:
- “avrdude: stk500_getsync(): not in sync: resp=0x00”,
- 所以你寫舵機程序就不要用這個芯片*/
- #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)//如果紅外線感應到了,后退
- {
- digitalWrite( 6 , HIGH );
- digitalWrite( 5 , LOW );
- digitalWrite( 10 , HIGH );
- digitalWrite( 9 , LOW );
- delay(1500);
- servo_pin_4.write( 60);//這里是向著0的方向轉的,即順時針旋轉30度,小車前輪向右邊拐,然后會復位,復位代碼在下一個if()里面
- delay(1000);
- digitalWrite( 5 , HIGH );//直走
- digitalWrite( 6 , LOW );
- digitalWrite( 9 , HIGH );
- digitalWrite( 10 , LOW );
-
- }
- if(red_line==HIGH)
- {
- servo_pin_4.write( 90 );//這是舵機復位程序,在上個if()里面,小車轉了30°,但是這里復位并不是說寫成-30,而是直接以0度為參考,指定角度
- digitalWrite( 5 , HIGH );//而這里的復位并不是指0度,而是指你自己定義的某個角度,我開始定義90度,以保證小車前輪向正前方,這里就要復位到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的方向轉的,即逆時針旋轉30度(以90度為參考,90度在正中央),小車前輪向右拐,然后會復位
- 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的方向轉的,即順時針旋轉30度,小車前輪向右拐,然后會復位,復位代碼在下一個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 );
- }
- }
-
- //總結:一旦我們掌握這個舵機的性能,就會發現,舵機其實很簡單,簡單之處就在于,你不用知道舵機上次轉沒轉好多度;
- //我要舵機在某個角度,我就按照安裝舵機的參考面,寫某個角度就行了,而不用知道它現在歪著斜著到底是好多度,這就給編程帶來了極大的好處,省了很多判斷和循環語句,降低了代碼的復雜度
復制代碼
視頻資料51hei提供下載:
arduion對標準舵機或360舵機的控制.zip
(8.54 MB, 下載次數: 22)
2019-7-20 08:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|