找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6524|回復: 1
收起左側(cè)

arduion對標準舵機或360舵機的控制程序及詳解 附視頻

[復制鏈接]
ID:584041 發(fā)表于 2019-7-20 08:57 | 顯示全部樓層 |閱讀模式
(昨天發(fā)了帖,不知怎么的,文件沒上傳,今天重發(fā),希望可以給初學舵機的人起到點幫助)
初學舵機的人如果沒有掌握舵機的性能,會很迷惑,會遇到“程序?qū)氩涣恕,“舵機不按程序運行”等問題,本帖可以完美解決初學者對舵機的控制,有小車視頻,程序很詳細。
本人基于“探索者”平臺,有詳細的照片資料

制作出來的實物圖如下:
2.jpg 1.jpg

視頻演示:
0.png

Arduino源程序如下:
  1. //標準舵機,它的轉(zhuǎn)向是單方向,不同的視角,看到的不一樣,可以是順時針,可以是逆時針

  2. //我這個程序是將舵機預先調(diào)至90°,這樣保證車輪向正前方,其逆時針方向是其上限角度180°
  3. //千萬注意一點,如果就靠電腦USB的電量,是無法使舵機正常運行的,所以不要以為程序?qū)肓,舵機就會轉(zhuǎn),必須外接小型蓄電池

  4. /*友情提示:如果大家和我一樣,用的“探索者”套裝,它箱子里面有三塊芯片,
  5. 將擴展板拆下,有的芯片沒有復位鍵,沒有總開關,這個芯片應該是有特殊用途的,
  6. 我從來沒有將舵機程序?qū)нM去過,出現(xiàn)錯誤提示:
  7. “avrdude: stk500_getsync(): not in sync: resp=0x00”,
  8. 所以你寫舵機程序就不要用這個芯片*/

  9. #include <Servo.h>
  10. Servo servo_pin_4;
  11. void setup()
  12. {
  13.   pinMode( 14, INPUT);
  14.   pinMode(17,INPUT);
  15.   servo_pin_4.attach(4);
  16.   pinMode( 5 , OUTPUT);
  17.   pinMode( 6 , OUTPUT);
  18.   pinMode( 9 , OUTPUT);
  19.   pinMode( 10 , OUTPUT);
  20. }

  21. void loop()
  22. {
  23.   int red_line=digitalRead(14);
  24.   int touch =digitalRead(17);
  25.   if (red_line==LOW)//如果紅外線感應到了,后退
  26.   {
  27.     digitalWrite( 6 , HIGH );
  28.     digitalWrite( 5 , LOW );
  29.     digitalWrite( 10 , HIGH );
  30.     digitalWrite( 9 , LOW );
  31.     delay(1500);
  32.     servo_pin_4.write( 60);//這里是向著0的方向轉(zhuǎn)的,即順時針旋轉(zhuǎn)30度,小車前輪向右邊拐,然后會復位,復位代碼在下一個if()里面
  33.     delay(1000);
  34.     digitalWrite( 5 , HIGH );//直走
  35.     digitalWrite( 6 , LOW );
  36.     digitalWrite( 9 , HIGH );
  37.     digitalWrite( 10 , LOW );
  38.   
  39.   }
  40.   if(red_line==HIGH)
  41.   {
  42.     servo_pin_4.write( 90 );//這是舵機復位程序,在上個if()里面,小車轉(zhuǎn)了30°,但是這里復位并不是說寫成-30,而是直接以0度為參考,指定角度
  43.     digitalWrite( 5 , HIGH );//而這里的復位并不是指0度,而是指你自己定義的某個角度,我開始定義90度,以保證小車前輪向正前方,這里就要復位到90度
  44.     digitalWrite( 6 , LOW );
  45.     digitalWrite( 9 , HIGH );
  46.     digitalWrite( 10 , LOW );
  47.   }
  48.   if(touch==LOW)
  49. {
  50. digitalWrite( 6 , HIGH );
  51.     digitalWrite( 5 , LOW );
  52.     digitalWrite( 10 , HIGH );
  53.     digitalWrite( 9 , LOW );
  54.     delay(1500);
  55.     servo_pin_4.write( 120);//這里是向著180的方向轉(zhuǎn)的,即逆時針旋轉(zhuǎn)30度(以90度為參考,90度在正中央),小車前輪向右拐,然后會復位
  56.     delay(1000);
  57.     digitalWrite( 5 , HIGH );//直走
  58.     digitalWrite( 6 , LOW );
  59.     digitalWrite( 9 , HIGH );
  60.     digitalWrite( 10 , LOW );
  61. }
  62. if(red_line==HIGH)
  63.   {
  64.     servo_pin_4.write( 90 );
  65.     digitalWrite( 5 , HIGH );
  66.     digitalWrite( 6 , LOW );
  67.     digitalWrite( 9 , HIGH );
  68.     digitalWrite( 10 , LOW );
  69.   }
  70. if(red_line==LOW&&touch==LOW)
  71. {
  72. digitalWrite( 6 , HIGH );
  73.     digitalWrite( 5 , LOW );
  74.     digitalWrite( 10 , HIGH );
  75.     digitalWrite( 9 , LOW );
  76.     delay(1000);
  77.     servo_pin_4.write( 30);//這里是向著0的方向轉(zhuǎn)的,即順時針旋轉(zhuǎn)30度,小車前輪向右拐,然后會復位,復位代碼在下一個if()里面
  78.     delay(2500);
  79.     digitalWrite( 5 , HIGH );//直走
  80.     digitalWrite( 6 , LOW );
  81.     digitalWrite( 9 , HIGH );
  82.     digitalWrite( 10 , LOW );
  83. }
  84. if(red_line==HIGH&&touch==HIGH)
  85.   {
  86.     servo_pin_4.write( 90 );
  87.     digitalWrite( 5 , HIGH );
  88.     digitalWrite( 6 , LOW );
  89.     digitalWrite( 9 , HIGH );
  90.     digitalWrite( 10 , LOW );
  91.   }
  92. }
  93.   
  94. //總結(jié):一旦我們掌握這個舵機的性能,就會發(fā)現(xiàn),舵機其實很簡單,簡單之處就在于,你不用知道舵機上次轉(zhuǎn)沒轉(zhuǎn)好多度;
  95. //我要舵機在某個角度,我就按照安裝舵機的參考面,寫某個角度就行了,而不用知道它現(xiàn)在歪著斜著到底是好多度,這就給編程帶來了極大的好處,省了很多判斷和循環(huán)語句,降低了代碼的復雜度
復制代碼

視頻資料51hei提供下載:
arduion對標準舵機或360舵機的控制.zip (8.54 MB, 下載次數(shù): 22)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:563075 發(fā)表于 2019-11-20 13:23 | 顯示全部樓層
學習一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表