arduino uno r3 机械臂

1、硬件

    arduino uno r3 改进板、sg90舵机(180度 x 4)、JoyStick Shield PS2游戏摇杆扩展板(或者按键 遥杆模块)、3D打印件、M3螺丝螺母(10mm 15mm 25mm )以及M2螺丝螺母。

2、接线

        开发版使用DC口7V-12V 供电(只用usb(5v)供电口 舵机驱动不了,usb口和DC口可同时供电),舵机正负极并联后直接使用拓展版5v供电,舵机信号线按照代码依次接到D9、D10、D11、D12,对应开发板 9、10、11、12 IO口。

 3、代码

#include <Servo.h>

Servo servob, servot, servol, servor;  // 舵机对象 底座、夹子、小臂、大臂

int bpos = 0, tpos = 0, lpos = 0, rpos = 0;  // 舵机初始角度

int FirstShotX, FirstShotY;

// 舵机动作 num 舵机 1 底座 2 夹子 3 小臂 4 大臂  status true 正向
void action(int num, bool status) {
  int plus = 1;
  if (status != 1) plus = -1;
  switch (num) {
    case 1:
      if (status) bpos += 2;
      else bpos -= 2;
      if (bpos > 180) bpos = 180;
      else if (bpos < 0) bpos = 0;
      servob.write(bpos);
      Serial.println("底座:" + String(bpos));
      delay(5);
      break;
    case 2:
      if (status) tpos += 6;
      else tpos -= 6;
      if (tpos > 180) tpos = 180;
      else if (tpos < 0) tpos = 0;
      servot.write(tpos);
      Serial.println("夹子:" + String(tpos));
      delay(5);
      break;
    case 3:
      if (status) lpos += 2;
      else lpos -= 2;
      if (lpos > 180) lpos = 180;
      else if (lpos < 0) lpos = 0;
      servol.write(lpos);
      delay(8);
      Serial.println("小臂:" + String(lpos));
      break;
    case 4:
      if (status) rpos += 2;
      else rpos -= 2;
      if (rpos > 180) rpos = 180;
      else if (rpos < 0) rpos = 0;
      servor.write(rpos);
      Serial.println("大臂:" + String(rpos));
      delay(8);
      break;
  }
}

void setup() {
  Serial.begin(9600);
  servob.attach(9);
  servot.attach(10);
  servol.attach(11);
  servor.attach(12);

  servob.write(bpos);
  servot.write(tpos);
  servol.write(lpos);
  servor.write(rpos);
  for (int i = 0; i < 19; i++) {
    pinMode(i, INPUT);
    digitalWrite(i, 1);
  }
  FirstShotX = 0;
  FirstShotY = 0;
}

void loop() {
  for (int i = 2; i < 9; i++) {
    int someInt = digitalRead(i);
    if (someInt == 0) {
      switch (i) {
        case 2:
          Serial.print("--------> Button A ");
          action(2, true);
          break;
        case 3:
          Serial.print("--------> Button B ");
          action(1, false);
          break;
        case 4:
          Serial.print("--------> Button C ");
          action(2, false);
          break;
        case 5:
          Serial.print("--------> Button D ");
          action(1, true);
          break;
        case 6: Serial.print("--------> Button E "); break;
        case 7: Serial.print("--------> Button F "); break;
        case 8: Serial.print("--------> Button KEY "); break;
        default: break;
      }
    }
  }

  int sensorValue = analogRead(A0);
  if (FirstShotX == 0) {
    FirstShotX = sensorValue;
    Serial.print("FirstShotX = ");
    Serial.println(FirstShotX);
  }
  int x = sensorValue - FirstShotX;
  if (abs(x) > 20)
    action(3, x > 20);
  // Serial.print("X = ");
  // Serial.print(x);
  sensorValue = analogRead(A1);
  if (FirstShotY == 0) {
    FirstShotY = sensorValue;
    Serial.print("FirstShotY = ");
    Serial.println(FirstShotY);
  }
  int y = sensorValue - FirstShotY;
  if (abs(y) > 20)
    action(4, y > 20);
  // delay(10);
}

         代码只是实现了功能,遥杆控制机械臂的大臂、小臂,按键控制底座转动和夹子。舵机的移动得根据实际情况更改每次角度+-的大小调以及延时时间试出最合适的参数。还有就是舵机安装时初始角度都弄到0度安装到机械臂上。

ardunio 机械臂

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少十步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值