机器人与人工智能爱好者论坛

 找回密码
 立即注册
查看: 1700|回复: 0
打印 上一主题 下一主题

舵机云台的制作分享

[复制链接]

12

主题

13

帖子

99

积分

注册会员

Rank: 2

积分
99
跳转到指定楼层
楼主
发表于 2022-12-21 14:49:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

1.运动功能说明
       舵机云台下方的舵机可以提供一个左右摆动的动作,同时上方横置的关节模组可以提供一个上下摆动的动作。在这两部分的配合下,云台的执行端端(即:关节模组的U型支架)可以灵活地走出一个近似半球的运动轨迹。


2.结构说明
     该样机由一个 舵机 加一个 舵机关节模组 构成。
3.运动功能实现
3.1 电子硬件
在这个示例中,采用了以下硬件,请大家参考:
Basra主控板(兼容Arduino Uno)、Bigfish2.1扩展板、7.4V锂电池

将两个舵机接在扩展板的D3以及D4舵机接口上。


3.2 编写程序
编程环境:Arduino 1.8.19
舵机云台的控制关键是驱动舵机舵机关节模组
云台运动的代码
/*------------------------------------------------------------------------------------  版权说明:Copyright 2022 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
           Distributed under MIT license.See file LICENSE for detail or copy at
           https://opensource.org/licenses/MIT
           by 机器谱 2022-5-31 https://www.robotway.com/
  ----------------------------------
  实验功能:
          实现云台模组的两个舵机同时运动.
  -----------------------------------------------
  实验接线:
               云台
             .-----.
             |     |   控制云台上下的舵机接:D3
           .---------.
           |         | 控制云台左右转动的舵机接:D4
           |         |
        -----------------
------------------------------------------------------------------------------------*/
#include <Servo.h>  //调用舵机库函数
Servo servo_pin_3; //声明控制云台上下转动的舵机
Servo servo_pin_4; //声明控制云台左右转动的舵机

//程序初始化部分:使能舵机引脚,并设置舵机初始角度
void setup() {
  servo_pin_3.attach(3); //使能3号舵机
  servo_pin_4.attach(4); //使能4号舵机
  servo_pin_3.write(0);  //3号舵机初始转到0度
  servo_pin_4.write(0);  //4号舵机初始转到0度
}

void loop() {
  Servo_Move( 0,95, 0,180); //D4舵机缓慢从0度转到180度,同时D3舵机缓慢从0度转到95度
  Servo_Move( 95,0, 180,0); //D4舵机缓慢从180度转到0度,同时D3舵机缓慢从95度转到0度
}

/*两舵机同时转动子函数.使用方法如下所示:
  servo_loop_count:表示舵机从A角度转到B角度分成了多少份.
  delay(20);表示每一份需要的延时时间.
  Servo_Move( 30, 45, 23, 80 );表示的意识是:D4舵机缓慢从23度转到80度,同时D3舵机缓慢从30度转到45度
  Servo_Move( 45, 30, 80, 23 );表示的意识是:D4舵机缓慢从80度转到23度,同时D3舵机缓慢从45度转到30度
*/
void Servo_Move(float servo3_start_angle, float servo3_end_angle, float servo4_start_angle, float servo4_end_angle){
  servo_pin_3.write( servo3_start_angle ); //设置3号舵机初始角度
  servo_pin_4.write( servo4_start_angle ); //设置4号舵机初始角度
  float xunhuan_count = 30.0;
  float delta_servo3 = 0;
  float delta_servo4 = 0;
  float servo3_calculate_angle = 0;
  float servo4_calculate_angle = 0;
  int   servo3_really_angle  = 0;
  int   servo4_really_angle  = 0;
  delta_servo3 = - ( ( servo3_start_angle - servo3_end_angle ) / xunhuan_count );
  delta_servo4 = - ( ( servo4_start_angle - servo4_end_angle ) / xunhuan_count );
  for( float i = 0; i< xunhuan_count; i++ )
  {
    servo3_calculate_angle = servo3_calculate_angle + delta_servo3;
    servo4_calculate_angle = servo4_calculate_angle + delta_servo4;
    servo3_really_angle = int(servo3_calculate_angle);
    servo4_really_angle = int(servo4_calculate_angle);
    servo_pin_4.write(servo4_really_angle);
    servo_pin_3.write(servo3_really_angle);
    delay(20);
  }
}

4.扩展样机
     使用不同的舵机和支架,可以构建出不同形态的云台,如图所示:
5.资料内容
样机3D文件
例程源代码







回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|陕ICP备15012670号-1    

GMT+8, 2024-4-20 14:42 , Processed in 0.062005 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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