blob: 3a65f02ae39f7d04875fc18631d0aa5298c3cad7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
---
title: "3D Printing"
date: "2025-06-25"
excerpt: "My 3D-printing projects: from a robotic arm to a DIY drone."
cover: "/images/a1.webp"
---
# Projects
## Robotic Arm
3D model on [MakerWorld](https://makerworld.com/en/models/528885-robotic-arm#profileId-445995) – modified to work with my servo motors.
```cpp
#include <Bluepad32.h>
#include <ESP32Servo.h>
#define DEADZONE 30
#define BASE_PIN 15
#define SHOULDER_PIN 2
#define ELBOW_PIN 4
#define WRIST_PIN 16
#define HAND_PIN 17
Servo base, shoulder, elbow, wrist, hand;
ControllerPtr pad;
void onConnectedGamepad(ControllerPtr ctl) {
Serial.printf("Gamepad #%d connected\n", ctl->index());
pad = ctl;
}
void onDisconnectedGamepad(ControllerPtr ctl) {
Serial.printf("Gamepad disconnected\n");
}
int16_t mapAxis(int16_t v) {
if (abs(v) < DEADZONE) v = 0;
return map(v, -512, 512, 0, 180);
}
void setup() {
BP32.setup(&onConnectedGamepad, &onDisconnectedGamepad);
BP32.enableNewBluetoothConnections(true);
base.attach(BASE_PIN);
shoulder.attach(SHOULDER_PIN);
elbow.attach(ELBOW_PIN);
wrist.attach(WRIST_PIN);
hand.attach(HAND_PIN);
}
void loop() {
BP32.update();
if (pad && pad->isConnected()) {
base.write(mapAxis(pad->axisX()));
shoulder.write(mapAxis(-pad->axisY()));
elbow.write(mapAxis(-pad->axisRY()));
hand.write(mapAxis(pad->throttle() - pad->brake()));
if (pad->l1()) wrist.write(0);
else if (pad->r1()) wrist.write(180);
else wrist.write(90);
}
delay(15);
}
|