(昨天发了帖,不知怎么的,文件没上传,今天重发,希望可以给初学舵机的人起到点帮助)
初学舵机的人如果没有掌握舵机的性能,会很迷惑,会遇到“程序导入不了”,“舵机不按程序运行”等问题,本帖可以完美解决初学者对舵机的控制,有小车视频,程序很详细。
本人基于“探索者”平台,有详细的照片资料
制作出来的实物图如下:
视频演示:
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)
|