aboutsummaryrefslogtreecommitdiff
path: root/src/blog/3dprint.md
blob: ab3cf28e354abe0f8da7edfbce111c3564c6d71f (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 – including the ESP32 controller code."
cover: "/src/assets/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);
}