机器谱
【R211】履带式机械臂小车
作者:机器谱
图文展示3264(1)

图文展示3264(1)

副标题

概述
蓝牙遥控搬运
概述

1. 运动功能说明

      211号样机是一款搭载了机械臂的平行履带小车。它的底盘具备基本的行驶和原地转向功能,机械臂具备抬升、放下、抓取等功能。整体上可以实现抓取、搬运、码放等功能,可作为搬运机器人、排爆机器人等的模型使用。

2. 结构说明

     211号样机的底盘是一个026号样机,机械臂包含2个串联的关节模组和1个舵机夹爪模组

3. 运动功能实现

     本样机的运动功能相当于是把底盘、关节、夹爪的动作进行组合实现。

3.1 电子硬件

     在这个示例中,我们采用了以下硬件,请大家参考:

主控板Basra(兼容Arduino Uno)
扩展板Bigfish2.1
电池7.4V锂电池


/*------------------------------------------------------------------------------------

  版权说明: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-9-14 https://www.robotway.com/

  ------------------------------

  实验功能: 小车前进→机械臂下落→夹爪闭合→机械臂抬起→小车后退→夹爪张开

  -----------------------------------------------------

  实验接线:

机械爪:D4

腕部(连接机械爪)舵机:D7

底部舵机:D11

左轮:D9,D10

右轮:D5,D6。                                     

------------------------------------------------------------------------------------*/

#include <Servo.h>


int SERVO_SPEED=20;                                        //定义舵机转动快慢的时间

int ACTION_DELAY=200;                                      //定义所有舵机每个状态时间间隔


Servo myServo[6];


int f = 50;                                                     //定义舵机每个状态间转动的次数,以此来确定每个舵机每次转动的角度

int servo_port[6] = {4,7,11,3,8,12};                            //定义舵机引脚

int servo_num = sizeof(servo_port) / sizeof(servo_port[0]);     //定义舵机数量

float value_init[6] = {125, 130, 160, 30, 60, 120};                //定义舵机初始角度


void setup() {

  Serial.begin(9600);

  pinMode(5, OUTPUT);

  pinMode(6, OUTPUT);

  pinMode(9, OUTPUT);

  pinMode(10, OUTPUT);

  for(int i=0;i<servo_num;i++){

    ServoGo(i,value_init[i]);

  }

}


void loop() {

  /*

  servo_move(90, 130, 15, 70, 10, 150);

  servo_move(90, 90, 90, 36, 110, 75);

  servo_move(90, 130, 140, 132, 44, 16);

  servo_move(90, 90, 90, 36, 110, 75);

  while(1){

    f = 20;

    SERVO_SPEED = 20;

    servo_move(120, 90, 90, 70, 10, 150);

    servo_move(90, 90, 90, 70, 10, 150);

  };

  */

  //实现了定点多角度抓取、放置的动作

  digitalWrite(5, HIGH);

  digitalWrite(6, LOW);

  digitalWrite(9, HIGH);

  digitalWrite(10, LOW);

  delay(1000);

  digitalWrite(5, LOW);

  digitalWrite(6, LOW);

  digitalWrite(9, LOW);

  digitalWrite(10, LOW);

  delay(1000);

  servo_move(125, 70, 70, 30, 60, 120);

  delay(500);

  servo_move(98, 70, 70, 30, 60, 120);

  delay(500);

  servo_move(98, 160, 160, 30, 60, 120);

  delay(500);

  digitalWrite(5, LOW);

  digitalWrite(6, HIGH);

  digitalWrite(9, LOW);

  digitalWrite(10, HIGH);

  delay(1000);

  digitalWrite(5, LOW);

  digitalWrite(6, LOW);

  digitalWrite(9, LOW);

  digitalWrite(10, LOW);

  delay(1000);

  servo_move(125, 160, 160, 30, 60, 120);

  delay(500);

  while(true);

}


void ServoStart(int which)

{

  if(!myServo[which].attached())myServo[which].attach(servo_port[which]);

  pinMode(servo_port[which], OUTPUT);

}




void ServoStop(int which)

{

  myServo[which].detach();

  digitalWrite(servo_port[which],LOW);

}


void ServoGo(int which , int where)

{

  if(where!=200)

  {

    if(where==201) ServoStop(which);

    else

    {

      ServoStart(which);

      myServo[which].write(where);

    }

  }

}


void servo_move(float value0, float value1, float value2, float value3, float value4, float value5)

{

 

  float value_arguments[] = {value0, value1, value2, value3, value4, value5};

  float value_delta[servo_num];

 

  for(int i=0;i<servo_num;i++)

  {

    value_delta[i] = (value_arguments[i] - value_init[i]) / f;


    /**************************串口查看输出*****************************/

//    Serial.print(value_init[i]);

//    Serial.print(" ");

//    Serial.print(value_arguments[i]);

//    Serial.print(" ");

//    Serial.println(value_delta[i]);

    /**************************串口查看输出*****************************/

  }

 

  for(int i=0;i<f;i++)

  {

    for(int k=0;k<servo_num;k++)

    {

      value_init[k] = value_delta[k] == 0 ? value_arguments[k] : value_init[k] + value_delta[k];


      /**************************串口查看输出*****************************/

//      Serial.print(value_init[k]);

//      Serial.print(" ");

    }

//    Serial.println();

      /**************************串口查看输出*****************************/

   

    for(int j=0;j<servo_num;j++)

    {

      ServoGo(j,value_init[j]);

    }

    delay(SERVO_SPEED);

  }

  delay(ACTION_DELAY);

 

  /**************************串口查看输出*****************************/

//   for(int i=0;i<6;i++)

//   {

//    Serial.println(value_init[i]);

//   }

  /**************************串口查看输出*****************************/

 

}

3.2 编写程序

编程环境:Arduino 1.8.19

编写并烧录以下代码(Servo_Sync_Se.ino):

4. 扩展样机

    可以通过更换底盘、增加机械臂数量、改变机械臂安装位置、增加或减少机械臂的关节数量来对样机进行扩展。

5. 资料清单

序号

内容
1

211号样机3D文件(含扩展及近似样机)

2    211号样机例程源代码


文件下载
【整体打包】-【211】履带式机械臂小车-概述-资料附件.zip
5.15MB下载74次下载
上一页 1 下一页

蓝牙遥控搬运

1. 功能描述

     本文提供的示例所实现的功能为:用手机APP遥控211号样机实现移动和搬运。


2. 所用样机

      211a

3. 电子硬件

    在这个示例中,我们采用了以下硬件,请大家参考:

主控板Basra(兼容Arduino Uno)
扩展板Bigfish2.1
电池7.4V锂电池
通信蓝牙串口模块


/*------------------------------------------------------------------------------------

  版权说明: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-9-28 https://www.robotway.com/

  ------------------------------

  实功能: 从串口(蓝牙)接收字符,根据不同字符分别做出前进、后退、原地左转、原地右转、夹爪打开、夹爪闭合的动作。

  -----------------------------------------------------

  实验接线:

机械爪:D3

左轮:D9,D10

右轮:D5,D6。                                     

------------------------------------------------------------------------------------*/


#include <Servo.h>


int a = 0 ;

Servo servo_pin_3;


void Open();

void Close();

void Spot_turn_Right();

void Spot_turn_Left();

void Stop();

void Backwards();

void Forward();


void setup()

{

  pinMode( 10, OUTPUT);

  pinMode( 6, OUTPUT);

  pinMode( 5, OUTPUT);

  pinMode( 9, OUTPUT);

  Serial.begin(9600);

  servo_pin_3.attach(3);

}


void loop()

{

  a = Serial.parseInt() ;

  if (( ( a ) > ( 0 ) ))

  {

    if (( ( a ) == ( 1 ) ))

    {

      Forward();

    }

    if (( ( a ) == ( 2 ) ))

    {

      Backwards();

    }

    if (( ( a ) == ( 3 ) ))

    {

      Spot_turn_Left();

    }

    if (( ( a ) == ( 4 ) ))

    {

      Spot_turn_Right();

    }

    if (( ( a ) == ( 5 ) ))

    {

      Stop();

    }

    if (( ( a ) == ( 6 ) ))

    {

      Open();

    }

    if (( ( a ) == ( 7 ) ))

    {

      Close();

    }

  }

}


void Spot_turn_Right()

{

  analogWrite(5 , 255);

  analogWrite(6 , 0);

  analogWrite(9 , 0);

  analogWrite(10 , 255);

}


void Stop()

{

  analogWrite(5 , 255);

  analogWrite(6 , 255);

  analogWrite(9 , 255);

  analogWrite(10 , 255);

}


void Backwards()

{

  analogWrite(5 , 255);

  analogWrite(6 , 0);

  analogWrite(9 , 255);

  analogWrite(10 , 0);

}


void Forward()

{

  analogWrite(5 , 0);

  analogWrite(6 , 255);

  analogWrite(9 , 0);

  analogWrite(10 , 255);

}


void Spot_turn_Left()

{

  analogWrite(5 , 0);

  analogWrite(6 , 255);

  analogWrite(9 , 255);

  analogWrite(10 , 0);

}


void Close()

{

  servo_pin_3.write( 70 );

}


void Open()

{

  servo_pin_3.write( 110 );

}

下图为样机安装了蓝牙串口模块后的样子。

4. 示例程序

编程环境:Arduino 1.8.19

程序通过使用if语句来判断读取到的串口的不同字符值来匹配不同的动作,从而实现对机器人的远程控制。

接收到“1”的时候,执行前进;

接收到“2”的时候,执行后退;

接收到“3”的时候,执行左转;

接收到“4”的时候,执行右转;

接收到“5”的时候,执行停止;

接收到“6”的时候,机械爪打开;

接收到“7”的时候,机械爪闭合。

手机APP的键值按上述规则进行配置,然后单片机接收到不同的信息,对应执行不同的动作。

例程代码(211a_Bluetooth_RC.ino)如下:

5. 资料清单

序号

内容
1

211a样机组装步骤图

2211a样机蓝牙遥控例程源代码


文件下载
【整体打包】-【211】履带式机械臂小车-蓝牙遥控搬运-资料附件.zip
3.81MB下载18次下载
上一页 1 下一页
© 2024 机器时代(北京)科技有限公司  版权所有
机器谱——机器人共享方案网站
学习  开发  设计  应用