找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5434|回复: 1
收起左侧

arduion对标准舵机或360舵机的控制程序及详解 附视频

[复制链接]
ID:584041 发表于 2019-7-20 08:57 | 显示全部楼层 |阅读模式
(昨天发了帖,不知怎么的,文件没上传,今天重发,希望可以给初学舵机的人起到点帮助)
初学舵机的人如果没有掌握舵机的性能,会很迷惑,会遇到“程序导入不了”,“舵机不按程序运行”等问题,本帖可以完美解决初学者对舵机的控制,有小车视频,程序很详细。
本人基于“探索者”平台,有详细的照片资料

制作出来的实物图如下:
2.jpg 1.jpg

视频演示:
0.png

Arduino源程序如下:
  1. //标准舵机,它的转向是单方向,不同的视角,看到的不一样,可以是顺时针,可以是逆时针

  2. //我这个程序是将舵机预先调至90°,这样保证车轮向正前方,其逆时针方向是其上限角度180°
  3. //千万注意一点,如果就靠电脑USB的电量,是无法使舵机正常运行的,所以不要以为程序导入了,舵机就会转,必须外接小型蓄电池

  4. /*友情提示:如果大家和我一样,用的“探索者”套装,它箱子里面有三块芯片,
  5. 将扩展板拆下,有的芯片没有复位键,没有总开关,这个芯片应该是有特殊用途的,
  6. 我从来没有将舵机程序导进去过,出现错误提示:
  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的方向转的,即顺时针旋转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()里面,小车转了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的方向转的,即逆时针旋转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的方向转的,即顺时针旋转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. //总结:一旦我们掌握这个舵机的性能,就会发现,舵机其实很简单,简单之处就在于,你不用知道舵机上次转没转好多度;
  95. //我要舵机在某个角度,我就按照安装舵机的参考面,写某个角度就行了,而不用知道它现在歪着斜着到底是好多度,这就给编程带来了极大的好处,省了很多判断和循环语句,降低了代码的复杂度
复制代码

视频资料51hei提供下载:
arduion对标准舵机或360舵机的控制.zip (8.54 MB, 下载次数: 22)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:563075 发表于 2019-11-20 13:23 | 显示全部楼层
学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表