本示例中,我们将加入一个16路PWM舵机驱动板,利用Arduino通过PWM舵机驱动板来控制机械臂。
需要的舵机驱动板如图所示:
在meArm机械臂项目中,把舵机驱动板的16路分为4个区块,每个区块连接4个舵机(对应机械臂的四个舵机)。区块编号从0开始(0~3)。
示例一:用奇果派舵机驱动板控制机械臂
Arduino与PWMServo驱动板引脚接线方式:
Arduino |
PWMServo |
GND |
GND |
5V |
VCC & V+ |
A4 |
SDA |
A5 |
SCL |
在本演示中,我们把机械臂舵机接到第)一个区块,从左到右分别接底部舵机、右侧(臂膀)舵机、左侧(肘部)舵机、爪子舵机。
连接方式如下:
PWMServo序号 |
机械臂舵机 |
0 |
底部舵机 |
1 |
右侧(臂膀)舵机 |
2 |
左侧(肘部)舵机 |
3 |
爪子舵机 |
实例代码:
- #include "meArm_Adafruit.h"
- #include <Adafruit_PWMServoDriver.h>
- #include <Wire.h>
- meArm arm;
- void setup() {
- Serial.begin(9600);
- arm.begin(); //默认为第一区块,编号从0开始
-
- }
- void loop() {
- //鼓掌—爪子多次开合
- arm.openGripper();
- arm.closeGripper();
- arm.openGripper();
-
- arm.closeGripper();
- arm.openGripper();
- delay(500);
- //转到左上方抓点东西
- arm.gotoPoint(-80,100,140);
-
- arm.closeGripper();
-
- //放到右前方去
- arm.gotoPoint(70,200,10);
- arm.openGripper();
- //回到起始点
- arm.gotoPoint(0,100,50);
- delay(2000);
- }
演示二:通过游戏手柄控制机械臂
本示例需要有一对游戏摇杆,如图:
配件连接说明:
Arduino |
摇杆1 |
摇杆2 |
PWMServo |
GND |
GND |
GND |
GND |
5V |
VCC |
VCC |
VCC & V+ |
A0 |
HOR(X) |
|
|
A1 |
VER(Y) |
|
|
A2 |
|
HOR(X) |
|
A3 |
|
VER(Y) |
|
A4 |
|
|
SDA |
A5 |
|
|
SCL |
舵机驱动与机械臂舵机连接说明:
PWMServo序号 |
机械臂舵机 |
0 |
底部舵机 |
1 |
右侧(臂膀)舵机 |
2 |
左侧(肘部)舵机 |
3 |
爪子舵机 |
实例程序:
- #include "meArm_Adafruit.h"
- #include "Adafruit_PWMServoDriver.h"
- #include <Wire.h>
- int xdirPin = 0;
- int ydirPin = 1;
- int zdirPin = 3;
- int gdirPin = 2;
- meArm arm;
- void setup() {
- arm.begin();
- }
- void loop() {
- float dx = map(analogRead(xdirPin), 0, 1023, -5.0, 5.0);
- float dy = map(analogRead(ydirPin), 0, 1023, 5.0, -5.0);
- float dz = map(analogRead(zdirPin), 0, 1023, 5.0, -5.0);
- float dg = map(analogRead(gdirPin), 0, 1023, 5.0, -5.0);
- if (abs(dx) < 1.5) dx = 0;
- if (abs(dy) < 1.5) dy = 0;
- if (abs(dz) < 1.5) dz = 0;
- if (!(dx == 0 && dy == 0 && dz == 0))
- arm.goDirectlyTo(arm.getX() + dx, arm.getY() + dy, arm.getZ() + dz);
- if (dg < -3.0)
- arm.closeGripper();
- else if (dg > 3.0)
- arm.openGripper();
- delay(50);
- }
|