From 0ea00808861a0932e650ee6b63d3bb56f5c63fd0 Mon Sep 17 00:00:00 2001 From: Stani Date: Sun, 25 Oct 2026 20:26:33 +0100 Subject: [PATCH 1/2] =?UTF-8?q?6=20akser,=20StallGuard=20og=20basic=20web?= =?UTF-8?q?=20interface=20med=20ledningsdiagrammer=20tilf=C3=B8jet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + CLAUDE.md | 24 ++ platformio.ini | 14 + src/Axis.cpp | 307 ++++++++++++++ src/Axis.h | 111 +++++ src/Commands.cpp | 155 +++++++ src/Commands.h | 26 ++ src/Machine.cpp | 246 ++++++++++++ src/Machine.h | 59 +++ src/config.h | 89 ++++ src/main.cpp | 63 +++ web/requirements.txt | 3 + web/server.py | 193 +++++++++ web/static/index.html | 913 ++++++++++++++++++++++++++++++++++++++++++ 14 files changed, 2207 insertions(+) create mode 100644 .gitignore create mode 100644 CLAUDE.md create mode 100644 platformio.ini create mode 100644 src/Axis.cpp create mode 100644 src/Axis.h create mode 100644 src/Commands.cpp create mode 100644 src/Commands.h create mode 100644 src/Machine.cpp create mode 100644 src/Machine.h create mode 100644 src/config.h create mode 100644 src/main.cpp create mode 100644 web/requirements.txt create mode 100644 web/server.py create mode 100644 web/static/index.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a9aac70 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.pio/ +.vscode/ +web/.venv/ +__pycache__/ diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..023e08b --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,24 @@ +# Stepper-test (ESP32 + TMC2209) + +Første del af et DIY 5–6-akset robotarm-projekt (senere ROS2 + MoveIt2). +Målet nu: få steppere til at køre pålideligt fra en ESP32 via TMC2209 (UART). + +## Hardware +- Board: ESP32 DevKit (esp32dev), Arduino-framework via PlatformIO +- Driver: TMC2209, UART på Serial2 (RX=GPIO16, TX=GPIO17 via 1 kΩ), adresse 0 +- Pins: STEP=25, DIR=26, EN=27 (aktiv lav) +- R_SENSE = 0.11 Ω, 16 mikroskridt, motorstrøm starter på 600 mA +- Ingen encodere endnu (open-loop) – design så de kan tilføjes senere + +## Kommandoer +- Byg: `pio run` +- Upload: `pio run -t upload` +- Seriel monitor: `pio device monitor` (115200 baud) + +## Regler +- Brug FastAccelStepper til step-generering og TMCStepper til driver-konfiguration. +- IMPORTANT: Hæv aldrig motorstrøm, hastighed eller acceleration uden at spørge mig først. +- Koden skal kunne bygges med `pio run` før du siger, at du er færdig. +- Jeg uploader og tester selv på hardwaren – fortæl mig præcis, hvad jeg skal teste og forvente. +- Forklar kort ændringer i embedded-kode, så jeg forstår dem. +- Kommentarer og svar på dansk. \ No newline at end of file diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..fe93a31 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,14 @@ +; Stepper-test: ESP32 + TMC2209 (UART) + +[env:esp32dev] +platform = espressif32@7.1.3 +board = esp32dev +framework = arduino + +monitor_speed = 115200 +upload_port = /dev/ttyUSB0 +monitor_port = /dev/ttyUSB0 + +lib_deps = + gin66/FastAccelStepper@2.0.0 + teemuatlut/TMCStepper@0.7.3 diff --git a/src/Axis.cpp b/src/Axis.cpp new file mode 100644 index 0000000..406fa76 --- /dev/null +++ b/src/Axis.cpp @@ -0,0 +1,307 @@ +#include "Axis.h" + +Axis::Axis(uint8_t index, const AxisConfig& cfg, FastAccelStepperEngine& engine, HardwareSerial& bus) + : _index(index), + _cfg(cfg), + _engine(engine), + _bus(bus), + _driver(&bus, R_SENSE, cfg.address), + _speedHz(SPEED_HZ_DEFAULT), _accel(ACCEL_DEFAULT), _currentMa(CURRENT_MA_DEFAULT), + _sgManual(SG_THRESHOLD_DEFAULT) {} + +bool Axis::begin() { + _driver.begin(); + initDriver(); + applySgThreshold(); // beregn auto-tærsklen med det samme, også hvis driveren ikke er fundet endnu + + // ---- Step-generering ---- + _stepper = _engine.stepperConnectToPin(_cfg.stepPin); + if (!_stepper) return false; + _stepper->setDirectionPin(_cfg.dirPin); + _stepper->setAutoEnable(false); // EN er fælles og styres af Machine + _stepper->setSpeedInHz(_speedHz); + _stepper->setAcceleration(_accel); + return true; +} + +// Skriver hele konfigurationen til TMC2209. Kaldes ved opstart og igen hver gang +// driveren (gen)opdages – fx når VM tændes efter ESP32, for så har driveren mistet alt. +// En manglende driver koster ~14 ms (TMCStepper venter på svar), så vi læser kun ét register. +bool Axis::initDriver() { + _tmcVersion = _driver.version(); + _uartOk = (_tmcVersion == 0x21); + if (!_uartOk) return false; + + _driver.pdn_disable(true); // PDN_UART-benet bruges til UART, ikke standby + _driver.I_scale_analog(false); // strøm sættes via register, ikke VREF-potmeter + _driver.mstep_reg_select(true); // mikroskridt fra register, ikke MS1/MS2 (de er adresse) + _driver.toff(0); // udgang slukket indtil 'en' (driveren er disabled efter init) + _driver.blank_time(24); + _driver.rms_current(_currentMa); + _driver.microsteps(MICROSTEPS); + _driver.en_spreadCycle(!_stealth); + _driver.pwm_autoscale(true); + _driver.TPWMTHRS(0); // bliv i StealthChop ved alle hastigheder (StallGuard4 kræver det) + _driver.semin(0); // CoolStep slået fra indtil videre + _driver.GSTAT(0b111); // nulstil "reset"-flaget, så et senere strømudfald kan ses + updateSgSpeedWindow(); + applySgThreshold(); + return true; +} + +// TCOOLTHRS bestemmer den laveste hastighed, hvor driveren melder stall på DIAG. +// TSTEP = tid mellem 1/256-mikroskridt i clock-perioder = FCLK / (steps/s * 256/MICROSTEPS). +// StallGuard er aktiv når TSTEP <= TCOOLTHRS, dvs. over SG_MIN_SPEED_FRACTION af sat hastighed. +void Axis::updateSgSpeedWindow() { + if (!_uartOk) return; + float vMin = _speedHz * SG_MIN_SPEED_FRACTION; + uint32_t t = (uint32_t)(TMC_FCLK / (vMin * (256.0f / MICROSTEPS))); + _driver.TCOOLTHRS(min(t, 0xFFFFF)); +} + +// Beregner den effektive StallGuard-tærskel og skriver den til driveren. +// Auto: lineær kurve gennem aksens to kalibreringspunkter, plus brugerens finjustering. +// Manuel: den faste værdi fra 'sgt'. +// Driveren får kun tærsklen når stall-stop er slået til – ellers 0, så en akse uden +// stall-stop aldrig trækker den fælles DIAG-linje og stopper de andre akser. +void Axis::applySgThreshold() { + int32_t thr = _sgManual; + if (_sgAuto) { + float slope = float(_cfg.sgSgtHi - _cfg.sgSgtLo) / float(_cfg.sgSpeedHi - _cfg.sgSpeedLo); + thr = lroundf(_cfg.sgSgtLo + slope * (float(_speedHz) - float(_cfg.sgSpeedLo))) + _sgOffset; + } + _sgThreshold = constrain(thr, 0, 255); + if (_uartOk) _driver.SGTHRS(_stallStop ? _sgThreshold : 0); +} + +Axis::DriverEvent Axis::checkDriver() { + if (!_uartOk) { + // Prøv igen – driveren svarer først når VM er tændt. + return initDriver() ? DriverEvent::Found : DriverEvent::None; + } + // Mistet forbindelse, eller har driveren været nede (reset-flag i GSTAT)? + bool lost = _driver.version() != 0x21; + bool wasReset = !lost && (_driver.GSTAT() & 0x01); + if (!lost && !wasReset) return DriverEvent::None; + + // Konfigurationen i driveren er væk/ukendt -> stop sikkert og kræv nyt 'en'. + disable(); + _uartOk = false; + if (wasReset) initDriver(); + return DriverEvent::Lost; +} + +// CRC8 fra TMC2209-databladet (polynomium x^8 + x^2 + x + 1). +static uint8_t tmcCrc(const uint8_t* data, size_t len) { + uint8_t crc = 0; + for (size_t i = 0; i < len; i++) { + uint8_t b = data[i]; + for (int j = 0; j < 8; j++) { + crc = ((crc >> 7) ^ (b & 0x01)) ? (crc << 1) ^ 0x07 : (crc << 1); + b >>= 1; + } + } + return crc; +} + +String Axis::uartDiag() { + // Sender en læse-forespørgsel på IOIN (0x06) til hver adresse og tæller modtagne bytes. + // TX og RX deler bussen, så de første 4 bytes er altid vores eget ekko; svaret er 8 bytes mere. + String out = String("ok uartdiag bus ") + char('A' + _cfg.bus); + int echoes = 0, replies = 0; + for (uint8_t addr = 0; addr < 4; addr++) { + uint8_t req[4] = {0x05, addr, 0x06, 0}; + req[3] = tmcCrc(req, 3); + while (_bus.available()) _bus.read(); + _bus.write(req, 4); + _bus.flush(); + delay(15); + uint8_t buf[16]; + int n = 0; + while (_bus.available() && n < (int)sizeof(buf)) buf[n++] = _bus.read(); + + bool echo = n >= 4 && memcmp(buf, req, 4) == 0; + bool reply = n >= 12 && tmcCrc(buf + 4, 7) == buf[11]; + echoes += echo; + replies += reply; + out += " | adr" + String(addr) + ": " + String(n) + " bytes"; + if (reply) out += " SVAR (ver 0x" + String(buf[7], HEX) + ")"; + else if (echo) out += " kun ekko"; + else if (n == 0) out += " intet"; + } + if (replies) out += " => " + String(replies) + " driver(e) svarer"; + else if (echoes) out += " => ekko ok, men ingen TMC svarer: tjek VIO, GND, PDN_UART-benet og at VM er tændt"; + else out += " => intet ekko: TX/RX når ikke frem til hinanden (tjek pins, 1 kΩ og samlingspunktet)"; + return out; +} + +const char* Axis::enable() { + if (!_uartOk) return "ingen driver fundet på denne akse"; + _driver.toff(4); // driver-udgang til (0 = slukket) + _enabled = true; + return nullptr; +} + +void Axis::disable() { + if (_stepper && _stepper->isRunning()) _stepper->forceStop(); + if (_uartOk) _driver.toff(0); + _enabled = false; + if (_homing) endHome(); +} + +// Fælles for alle bevægelser: nulstil stall-tilstand fra sidste gang. +void Axis::startMove() { + _stalled = false; +} + +const char* Axis::move(int32_t steps) { + if (!_enabled) return "akse ikke enabled"; + startMove(); + return _stepper->move(steps) == MOVE_OK ? nullptr : "move afvist"; +} + +const char* Axis::moveTo(int32_t target) { + if (!_enabled) return "akse ikke enabled"; + startMove(); + return _stepper->moveTo(target) == MOVE_OK ? nullptr : "goto afvist"; +} + +void Axis::stop() { + if (_stepper) _stepper->stopMove(); +} + +// forceStopAndNewPosition() afbryder step-køen med det samme (forceStop() ville køre de +// allerede planlagte ~20 ms færdig) og sætter positionen i samme ombæring. +void Axis::halt(bool zeroPosition) { + if (!_stepper) return; + _stepper->forceStopAndNewPosition(zeroPosition ? 0 : _stepper->getCurrentPosition()); +} + +bool Axis::isRunning() const { return _stepper && _stepper->isRunning(); } +int32_t Axis::getPosition() const { return _stepper ? _stepper->getCurrentPosition() : 0; } +int32_t Axis::getTarget() const { return _stepper ? _stepper->targetPos() : 0; } + +const char* Axis::setZero() { + if (isRunning()) return "kan ikke nulstille under bevægelse"; + _stepper->setCurrentPosition(0); + return nullptr; +} + +uint32_t Axis::setSpeed(uint32_t hz) { + _speedHz = constrain(hz, 1u, SPEED_HZ_MAX); + _stepper->setSpeedInHz(_speedHz); + _stepper->applySpeedAcceleration(); // gælder også en igangværende bevægelse + updateSgSpeedWindow(); + applySgThreshold(); // auto-tærsklen følger den nye hastighed + return _speedHz; +} + +uint32_t Axis::setAccel(uint32_t a) { + _accel = constrain(a, 1u, ACCEL_MAX); + _stepper->setAcceleration(_accel); + _stepper->applySpeedAcceleration(); + return _accel; +} + +uint16_t Axis::setCurrent(uint16_t mA) { + _currentMa = constrain(mA, (uint16_t)50, CURRENT_MA_MAX); + if (_uartOk) _driver.rms_current(_currentMa); + return _currentMa; +} + +void Axis::setStealthChop(bool on) { + _stealth = on; + if (!on) setStallStop(false); // StallGuard4 virker ikke i SpreadCycle + if (_uartOk) _driver.en_spreadCycle(!on); +} + +// ---------- StallGuard ---------- + +void Axis::setSgThreshold(uint8_t thr) { + _sgManual = thr; + _sgAuto = false; + applySgThreshold(); +} + +void Axis::setSgAuto(bool on) { + _sgAuto = on; + applySgThreshold(); +} + +int16_t Axis::setSgOffset(int16_t off) { + _sgOffset = constrain(off, (int16_t)-SG_OFFSET_MAX, SG_OFFSET_MAX); + applySgThreshold(); + return _sgOffset; +} + +const char* Axis::setStallStop(bool on) { + if (on && !_stealth) return "StallGuard kræver StealthChop (mode stealth)"; + _stallStop = on; + applySgThreshold(); + return nullptr; +} + +uint16_t Axis::sgResult() { + return _uartOk ? _driver.SG_RESULT() : 0; +} + +bool Axis::isStallCandidate() const { + if (!_stallStop || !isRunning()) return false; + // Under accel/decel er StallGuard upålidelig – samme grænse som TCOOLTHRS i driveren. + int32_t vNow = abs(_stepper->getCurrentSpeedInMilliHz()) / 1000; + return vNow >= _speedHz * SG_MIN_SPEED_FRACTION; +} + +const char* Axis::startHome(int dir) { + if (!_enabled) return "akse ikke enabled"; + if (!_stealth) return "StallGuard kræver StealthChop (mode stealth)"; + if (_sgThreshold == 0) return "StallGuard-tærsklen er 0 (sgauto on eller sgt )"; + if (isRunning()) return "aksen kører allerede"; + _stallStopBeforeHome = _stallStop; + setStallStop(true); + startMove(); + if (_stepper->move((int32_t)dir * HOME_MAX_REVS * STEPS_PER_REV) != MOVE_OK) { + setStallStop(_stallStopBeforeHome); + return "home afvist"; + } + _homing = true; + return nullptr; +} + +void Axis::endHome() { + _homing = false; + setStallStop(_stallStopBeforeHome); +} + +String Axis::statusJson() { + // DRV_STATUS læses i ét UART-kald (~3 ms); step-generering kører i hardware og påvirkes ikke. + bool ot = false, otpw = false, s2g = false, ol = false; + uint16_t csActual = 0, sg = 0; + if (_uartOk) { + uint32_t ds = _driver.DRV_STATUS(); + otpw = ds & (1u << 0); + ot = ds & (1u << 1); + s2g = ds & (0b11u << 2); + ol = ds & (0b11u << 6); + csActual = (ds >> 16) & 0x1F; + sg = _driver.SG_RESULT(); + } + + char buf[512]; + snprintf(buf, sizeof(buf), + "{\"i\":%u,\"bus\":%u,\"adr\":%u,\"pos\":%ld,\"target\":%ld,\"running\":%s,\"enabled\":%s," + "\"speed\":%lu,\"accel\":%lu,\"ma\":%u,\"mode\":\"%s\",\"spr\":%ld," + "\"sg\":%u,\"sgt\":%u,\"sgAuto\":%s,\"sgOff\":%d,\"stallStop\":%s,\"stalled\":%s,\"homing\":%s," + "\"tmc\":{\"uart\":%s,\"ver\":%u,\"ot\":%s,\"otpw\":%s,\"s2g\":%s,\"ol\":%s,\"cs\":%u}}", + _index, _cfg.bus, _cfg.address, + (long)getPosition(), (long)getTarget(), + isRunning() ? "true" : "false", _enabled ? "true" : "false", + (unsigned long)_speedHz, (unsigned long)_accel, _currentMa, + _stealth ? "stealth" : "spread", (long)STEPS_PER_REV, + sg, _sgThreshold, _sgAuto ? "true" : "false", _sgOffset, + _stallStop ? "true" : "false", _stalled ? "true" : "false", _homing ? "true" : "false", + _uartOk ? "true" : "false", _tmcVersion, + ot ? "true" : "false", otpw ? "true" : "false", + s2g ? "true" : "false", ol ? "true" : "false", csActual); + return String(buf); +} diff --git a/src/Axis.h b/src/Axis.h new file mode 100644 index 0000000..0b63dff --- /dev/null +++ b/src/Axis.h @@ -0,0 +1,111 @@ +#pragma once +#include +#include +#include +#include "config.h" + +// Én akse = én stepper + én TMC2209 på en delt UART-bus. +// EN-pinnen er fælles for alle drivere (styres af Machine); den enkelte akse slås +// til/fra med driverens toff-register over UART. +// Positionen kommer i dag fra step-tælleren (open-loop). Når der kommer encodere, +// kan getPosition() læse dem i stedet uden at resten af koden ændres. +class Axis { +public: + Axis(uint8_t index, const AxisConfig& cfg, FastAccelStepperEngine& engine, HardwareSerial& bus); + + // Returnerer false hvis step-generatoren ikke kunne oprettes. + bool begin(); + + uint8_t index() const { return _index; } + const AxisConfig& config() const { return _cfg; } + + enum class DriverEvent { None, Found, Lost }; + // Kaldes periodisk: genfinder driveren (fx når VM tændes efter ESP32) og + // opdager hvis den forsvinder eller har været nulstillet (strømudfald på VM). + DriverEvent checkDriver(); + + // Fejlfinding af UART-bussen: ekko-test + svar fra adresse 0–3. + String uartDiag(); + + bool uartOk() const { return _uartOk; } + uint8_t tmcVersion() const { return _tmcVersion; } + + // Bevægelse – returnerer nullptr ved succes, ellers en fejltekst. + const char* move(int32_t steps); + const char* moveTo(int32_t target); + void stop(); // blød stop med deceleration + void halt(bool zeroPosition); // øjeblikkeligt stop uden flere steps (stall/kollision) + + const char* enable(); // driver-udgang til (toff) – Machine sætter fælles EN + void disable(); + bool isEnabled() const { return _enabled; } + + bool isRunning() const; + int32_t getPosition() const; + int32_t getTarget() const; + const char* setZero(); + + // Værdierne clampes til maks fra config.h; returnerer den faktisk satte værdi. + uint32_t setSpeed(uint32_t hz); + uint32_t setAccel(uint32_t stepsPerS2); + uint16_t setCurrent(uint16_t mA); + void setStealthChop(bool on); + + uint32_t speed() const { return _speedHz; } + uint32_t accel() const { return _accel; } + uint16_t current() const { return _currentMa; } + bool stealthChop() const { return _stealth; } + + // ---- StallGuard ---- + void setSgThreshold(uint8_t thr); // fast manuel tærskel – slår auto fra + void setSgAuto(bool on); // tærskel følger hastigheden (kalibreringskurve) + int16_t setSgOffset(int16_t off); // finjustering ± oven på kurven (kun i auto) + uint8_t sgThreshold() const { return _sgThreshold; } // den effektive værdi + bool sgAuto() const { return _sgAuto; } + int16_t sgOffset() const { return _sgOffset; } + const char* setStallStop(bool on); // kræver StealthChop + bool stallStop() const { return _stallStop; } + uint16_t sgResult(); // læser SG_RESULT over UART (høj = lav belastning) + + // Kan denne akse lige nu have udløst DIAG? (stall-stop til, kører over min.-hastighed) + bool isStallCandidate() const; + void markStalled() { _stalled = true; } + bool stalled() const { return _stalled; } + + const char* startHome(int dir); // kør mod mekanisk stop til stall + bool isHoming() const { return _homing; } + void endHome(); // afslut homing (gendanner stall-stop-indstilling) + + // Én linje JSON med aksens status (inkl. TMC-fejlflag og StallGuard). + String statusJson(); + +private: + bool initDriver(); + void updateSgSpeedWindow(); + void applySgThreshold(); + void startMove(); + + uint8_t _index; + AxisConfig _cfg; + FastAccelStepperEngine& _engine; + HardwareSerial& _bus; + TMC2209Stepper _driver; + FastAccelStepper* _stepper = nullptr; + + bool _uartOk = false; + uint8_t _tmcVersion = 0; + bool _enabled = false; + bool _stealth = true; + uint32_t _speedHz; + uint32_t _accel; + uint16_t _currentMa; + + uint8_t _sgManual; + uint8_t _sgThreshold = 0; // effektiv værdi (auto-kurve eller manuel) + bool _sgAuto = true; + int16_t _sgOffset = 0; + bool _stallStop = false; + bool _stalled = false; // låst indtil næste bevægelse + bool _homing = false; + bool _stallStopBeforeHome = false; +}; diff --git a/src/Commands.cpp b/src/Commands.cpp new file mode 100644 index 0000000..97f53a2 --- /dev/null +++ b/src/Commands.cpp @@ -0,0 +1,155 @@ +#include "Commands.h" +#include "config.h" + +// Parser et heltal; returnerer false hvis teksten ikke er et gyldigt tal. +static bool parseLong(const String& s, long& out) { + if (s.length() == 0) return false; + char* end = nullptr; + out = strtol(s.c_str(), &end, 10); + return *end == '\0'; +} + +static bool parseFloat(const String& s, float& out) { + if (s.length() == 0) return false; + char* end = nullptr; + out = strtof(s.c_str(), &end); + return *end == '\0'; +} + +static bool isDigits(const String& s) { + if (s.length() == 0) return false; + for (size_t i = 0; i < s.length(); i++) { + if (!isdigit((unsigned char)s[i])) return false; + } + return true; +} + +String Commands::handle(const String& raw) { + String line = raw; + line.trim(); + if (line.length() == 0) return ""; + + // ---- Valgfrit akse-index først ---- + int axisIdx = -1; + int sp = line.indexOf(' '); + String first = sp < 0 ? line : line.substring(0, sp); + if (isDigits(first)) { + axisIdx = first.toInt(); + if (axisIdx >= NUM_AXES) return "err ukendt akse " + first + " (0-" + String(NUM_AXES - 1) + ")"; + line = sp < 0 ? String() : line.substring(sp + 1); + line.trim(); + if (line.length() == 0) return "err mangler kommando efter akse-index"; + sp = line.indexOf(' '); + } + + String cmd = sp < 0 ? line : line.substring(0, sp); + String arg = sp < 0 ? String() : line.substring(sp + 1); + cmd.toLowerCase(); + arg.trim(); + + // ---- Fælles kommandoer ---- + if (cmd == "hb") { + _hbArmed = true; + return ""; + } + if (cmd == "help") { + return "ok kommandoer: [akse] . Fælles: status estop, og uden akse: en dis stop (alle). " + "Pr. akse: en dis stop move goto rev speed accel " + "zero current mode stealth|spread uartdiag " + "sgt <0-255> sgauto on|off sgoff <+-n> sg on|off sgr home +|-"; + } + if (cmd == "status") { + String out = "G " + _m.globalJson(); + for (uint8_t i = 0; i < NUM_AXES; i++) out += "\nS " + String(i) + " " + _m.axis(i).statusJson(); + return out; + } + if (cmd == "estop") { _m.estop(); return "ok estop (alle drivere disabled)"; } + + if (axisIdx < 0) { + if (cmd == "en") { + const char* err = _m.enableAll(); + return err ? String("err ") + err : String("ok alle fundne akser enabled"); + } + if (cmd == "dis") { _m.disableAll(); return "ok alle akser disabled"; } + if (cmd == "stop") { _m.stopAll(); return "ok stop alle"; } + } + + // ---- Akse-kommandoer (uden index: akse 0) ---- + uint8_t ai = axisIdx < 0 ? 0 : axisIdx; + Axis& a = _m.axis(ai); + _m.requestStatus(ai); // ny S-linje efter kommandoen, så UI'et altid er opdateret + String pre = "a" + String(ai) + " "; + auto okOrErr = [&](const char* err, const String& okText) { + return err ? "err " + pre + err : "ok " + pre + okText; + }; + + if (cmd == "en") return okOrErr(_m.enableAxis(ai), "enabled"); + if (cmd == "dis") { _m.disableAxis(ai); return "ok " + pre + "disabled"; } + if (cmd == "stop") { a.stop(); return "ok " + pre + "stop"; } + if (cmd == "zero") return okOrErr(a.setZero(), "pos=0"); + if (cmd == "uartdiag") return a.uartDiag(); + + long n; + float f; + if (cmd == "move") { + if (!parseLong(arg, n)) return "err brug: [akse] move "; + return okOrErr(a.move(n), "move " + String(n)); + } + if (cmd == "goto") { + if (!parseLong(arg, n)) return "err brug: [akse] goto "; + return okOrErr(a.moveTo(n), "goto " + String(n)); + } + if (cmd == "rev") { + if (!parseFloat(arg, f)) return "err brug: [akse] rev "; + long steps = lroundf(f * STEPS_PER_REV); + return okOrErr(a.move(steps), "move " + String(steps)); + } + if (cmd == "speed") { + if (!parseLong(arg, n) || n <= 0) return "err brug: [akse] speed "; + a.setSpeed(n); + return "ok " + pre + "speed=" + String(a.speed()) + " sgt=" + String(a.sgThreshold()); + } + if (cmd == "accel") { + if (!parseLong(arg, n) || n <= 0) return "err brug: [akse] accel "; + return "ok " + pre + "accel=" + String(a.setAccel(n)); + } + if (cmd == "current") { + if (!parseLong(arg, n) || n <= 0) return "err brug: [akse] current "; + return "ok " + pre + "current=" + String(a.setCurrent(n > 65535 ? 65535 : n)); + } + if (cmd == "sgt") { + if (!parseLong(arg, n) || n < 0 || n > 255) return "err brug: [akse] sgt <0-255>"; + a.setSgThreshold(n); + return "ok " + pre + "sgt=" + String(n) + " manuel (stall når sg <= " + String(2 * n) + ")"; + } + if (cmd == "sgauto") { + arg.toLowerCase(); + if (arg != "on" && arg != "off") return "err brug: [akse] sgauto on|off"; + a.setSgAuto(arg == "on"); + return "ok " + pre + "sgauto=" + arg + " sgt=" + String(a.sgThreshold()); + } + if (cmd == "sgoff") { + if (!parseLong(arg, n)) return "err brug: [akse] sgoff <-100..100>"; + int16_t off = a.setSgOffset(constrain(n, -1000L, 1000L)); + return "ok " + pre + "sgoff=" + String(off) + " sgt=" + String(a.sgThreshold()); + } + if (cmd == "sg") { + arg.toLowerCase(); + if (arg == "on") return okOrErr(a.setStallStop(true), "stall-stop til"); + if (arg == "off") { a.setStallStop(false); return "ok " + pre + "stall-stop fra"; } + return "err brug: [akse] sg on|off"; + } + if (cmd == "sgr") return "ok " + pre + "sg=" + String(a.sgResult()); + if (cmd == "home") { + if (arg == "+") return okOrErr(_m.home(ai, 1), "homing +"); + if (arg == "-") return okOrErr(_m.home(ai, -1), "homing -"); + return "err brug: [akse] home +|-"; + } + if (cmd == "mode") { + arg.toLowerCase(); + if (arg == "stealth") { a.setStealthChop(true); return "ok " + pre + "mode=stealth"; } + if (arg == "spread") { a.setStealthChop(false); return "ok " + pre + "mode=spread"; } + return "err brug: [akse] mode stealth|spread"; + } + return "err ukendt kommando '" + cmd + "' (prøv help)"; +} diff --git a/src/Commands.h b/src/Commands.h new file mode 100644 index 0000000..22eaa6c --- /dev/null +++ b/src/Commands.h @@ -0,0 +1,26 @@ +#pragma once +#include +#include "Machine.h" + +// Tekstprotokol (én kommando pr. linje): +// kommando: "[akse] [argument]" – fx "1 move 3200". Uden akse-index: +// akse-kommandoer går til akse 0, mens en/dis/stop gælder alle akser. +// svar: "ok ..." / "err ..." – præcis én linje pr. kommando (undtagen status) +// status: "G {json}" – fælles tilstand (EN, DIAG, grænser) +// "S {json}" – én akse; løbende mens den kører +// "status" svarer med én G-linje + én S-linje pr. akse +// log: "# ..." – kun til mennesker, ignoreres af PC-programmet +// "hb" er undtagelsen: heartbeat fra PC'en, aktiverer watchdog, giver intet svar. +class Commands { +public: + explicit Commands(Machine& machine) : _m(machine) {} + + // Returnerer svarlinjen/-linjerne (tom streng = intet svar). + String handle(const String& line); + + bool heartbeatArmed() const { return _hbArmed; } + +private: + Machine& _m; + bool _hbArmed = false; +}; diff --git a/src/Machine.cpp b/src/Machine.cpp new file mode 100644 index 0000000..ecdf60b --- /dev/null +++ b/src/Machine.cpp @@ -0,0 +1,246 @@ +#include "Machine.h" + +// DIAG-interrupt (kun DiodeOr): sætter kun et flag – selve stoppet sker i poll(), fordi vi skal +// finde ud af, hvilken akse der stallede, og det kræver UART-læsninger (ikke tilladt i en ISR). +static volatile bool s_diagFlag = false; +static void IRAM_ATTR onDiagRising() { s_diagFlag = true; } + +void Machine::begin() { + // Alle drivere holdes frakoblet (EN høj) mens de konfigureres. + pinMode(PIN_EN, OUTPUT); + digitalWrite(PIN_EN, HIGH); + + // GPIO39 er kun indgang og har ingen intern pull. DiodeOr: ekstern 10 kΩ pull-down holder den + // lav. ResistorAdc: de lave DIAG-udgange holder selv linjen nede gennem modstandene. + pinMode(PIN_DIAG, INPUT); + if (DIAG_MODE == DiagMode::DiodeOr) { + attachInterrupt(digitalPinToInterrupt(PIN_DIAG), onDiagRising, RISING); + } else { + analogSetPinAttenuation(PIN_DIAG, ADC_11db); // måleområde ~0–3,1 V + } + + Serial2.begin(TMC_BAUD, SERIAL_8N1, PIN_BUS_A_RX, PIN_BUS_A_TX); + Serial1.begin(TMC_BAUD, SERIAL_8N1, PIN_BUS_B_RX, PIN_BUS_B_TX); + delay(50); + + _engine.init(); + for (uint8_t i = 0; i < NUM_AXES; i++) { + HardwareSerial& bus = AXES[i].bus == 0 ? Serial2 : Serial1; + _axes[i] = new Axis(i, AXES[i], _engine, bus); + _axes[i]->begin(); + } +} + +bool Machine::diagActive() { + if (DIAG_MODE == DiagMode::DiodeOr) return digitalRead(PIN_DIAG); + _diagMv = analogReadMilliVolts(PIN_DIAG); // kalibreret måling, ~20 µs + return _diagMv > (int32_t)DIAG_ADC_THRESHOLD_MV; +} + +void Machine::updateMasterEnable() { + bool any = false; + for (uint8_t i = 0; i < NUM_AXES; i++) any |= _axes[i]->isEnabled(); + _master = any; + digitalWrite(PIN_EN, any ? LOW : HIGH); +} + +const char* Machine::enableAxis(uint8_t i) { + const char* err = _axes[i]->enable(); + if (!err) updateMasterEnable(); + return err; +} + +void Machine::disableAxis(uint8_t i) { + _axes[i]->disable(); + updateMasterEnable(); + requestStatus(i); +} + +const char* Machine::enableAll() { + uint8_t n = 0; + for (uint8_t i = 0; i < NUM_AXES; i++) { + if (_axes[i]->uartOk() && !_axes[i]->enable()) n++; + } + updateMasterEnable(); + requestAllStatus(); + return n ? nullptr : "ingen drivere fundet"; +} + +void Machine::disableAll() { + for (uint8_t i = 0; i < NUM_AXES; i++) _axes[i]->disable(); + updateMasterEnable(); + requestAllStatus(); +} + +void Machine::stopAll() { + for (uint8_t i = 0; i < NUM_AXES; i++) _axes[i]->stop(); +} + +void Machine::estop() { + digitalWrite(PIN_EN, HIGH); // hardware-sluk først, så intet afhænger af UART + for (uint8_t i = 0; i < NUM_AXES; i++) _axes[i]->disable(); + _master = false; + requestAllStatus(); +} + +const char* Machine::home(uint8_t i, int dir) { + for (uint8_t j = 0; j < NUM_AXES; j++) { + if (_axes[j]->isHoming()) return "en anden akse er i gang med homing"; + } + return _axes[i]->startHome(dir); +} + +bool Machine::anyRunning() { + for (uint8_t i = 0; i < NUM_AXES; i++) { + if (_axes[i]->isRunning()) return true; + } + return false; +} + +void Machine::requestAllStatus() { + for (uint8_t i = 0; i < NUM_AXES; i++) _statusPending[i] = true; + _globalPending = true; +} + +String Machine::globalJson() { + int8_t homing = -1; + for (uint8_t i = 0; i < NUM_AXES; i++) { + if (_axes[i]->isHoming()) homing = i; + } + bool diag = diagActive(); + char buf[240]; + snprintf(buf, sizeof(buf), + "{\"axes\":%u,\"master\":%s,\"diag\":%s,\"diagMode\":\"%s\",\"diagMv\":%ld,\"homing\":%d," + "\"max\":{\"speed\":%lu,\"accel\":%lu,\"ma\":%u}}", + NUM_AXES, _master ? "true" : "false", diag ? "true" : "false", + DIAG_MODE == DiagMode::DiodeOr ? "diode" : "adc", (long)_diagMv, homing, + (unsigned long)SPEED_HZ_MAX, (unsigned long)ACCEL_MAX, CURRENT_MA_MAX); + return String(buf); +} + +void Machine::poll(Print& out) { + pollDiag(out); // først: stall skal stoppes så hurtigt som muligt + pollHoming(out); + pollDrivers(out); + pollStatus(out); +} + +// DIAG er fælles for alle akser (diode-OR). Ved et stall stoppes ALLE kørende akser – +// en kollision et sted i armen skal stoppe hele armen. Derefter findes synderen. +void Machine::pollDiag(Print& out) { + bool flag = s_diagFlag; // kun sat i DiodeOr (fanger korte pulser mellem to loops) + s_diagFlag = false; + if (!flag && !diagActive()) return; + + uint8_t cand[NUM_AXES]; + uint8_t n = 0; + int8_t homingCand = -1; + for (uint8_t i = 0; i < NUM_AXES; i++) { + if (_axes[i]->isStallCandidate()) { + cand[n++] = i; + if (_axes[i]->isHoming()) homingCand = i; + } + } + // Ingen akse kan have udløst et stall (fx under accel, eller stall-stop er fra) -> ignorér. + if (n == 0) return; + + // Stop alle kørende akser med det samme. En homing-akse, der stallede, får position 0. + for (uint8_t i = 0; i < NUM_AXES; i++) { + if (_axes[i]->isRunning()) _axes[i]->halt(i == homingCand); + } + + // Find synderen: homing-aksen hvis den var kandidat, ellers den eneste kandidat, + // ellers den med lavest SG i forhold til sin tærskel (aflæst efter stop). + int8_t culprit = homingCand; + if (culprit < 0) { + culprit = cand[0]; + if (n > 1) { + float best = 1e9f; + for (uint8_t k = 0; k < n; k++) { + Axis& a = *_axes[cand[k]]; + float ratio = float(a.sgResult()) / float(max(1, 2 * a.sgThreshold())); + if (ratio < best) { best = ratio; culprit = cand[k]; } + } + } + } + + Axis& c = *_axes[culprit]; + c.markStalled(); + if (c.isHoming()) { + c.endHome(); + out.printf("# HOME ok a%d - stall fundet, position = 0\n", culprit); + } else { + out.printf("# STALL a%d ved pos %ld (sg=%u) - alle akser stoppet\n", + culprit, (long)c.getPosition(), c.sgResult()); + } + requestAllStatus(); +} + +// En homing, der slutter uden stall (eller stoppes udefra), er fejlet. +void Machine::pollHoming(Print& out) { + for (uint8_t i = 0; i < NUM_AXES; i++) { + Axis& a = *_axes[i]; + if (a.isHoming() && !a.isRunning()) { + a.endHome(); + out.printf("# HOME fejl a%d - intet stall inden for grænsen (eller stoppet)\n", i); + requestStatus(i); + } + } +} + +// Én akse tjekkes ad gangen, spredt over DRIVER_CHECK_INTERVAL_MS. En manglende driver +// koster ~14 ms pr. forsøg, så det må ikke ske for alle akser i samme loop. +void Machine::pollDrivers(Print& out) { + uint32_t now = millis(); + if (now - _lastDriverCheckMs < DRIVER_CHECK_INTERVAL_MS / NUM_AXES) return; + _lastDriverCheckMs = now; + + uint8_t i = _nextDriverCheck; + _nextDriverCheck = (i + 1) % NUM_AXES; + Axis::DriverEvent ev = _axes[i]->checkDriver(); + if (ev == Axis::DriverEvent::None) return; + if (ev == Axis::DriverEvent::Found) { + out.printf("# a%d UART OK - driver fundet og konfigureret\n", i); + } else { + out.printf("# a%d driver mistet eller nulstillet (VM?) - aksen er disabled, send 'en' igen\n", i); + updateMasterEnable(); + } + requestStatus(i); + _globalPending = true; +} + +// Højst én status-linje pr. loop (hver koster et par UART-læsninger), og lavere rate pr. akse +// når flere kører, så 115200 baud til PC'en ikke bliver flaskehals. +void Machine::pollStatus(Print& out) { + uint32_t now = millis(); + uint8_t running = 0; + for (uint8_t i = 0; i < NUM_AXES; i++) { + bool r = _axes[i]->isRunning(); + if (_wasRunning[i] && !r) _statusPending[i] = true; // én sidste status når den stopper + _wasRunning[i] = r; + running += r; + } + + bool diag = diagActive(); + if (_globalPending || diag != _lastDiagLevel || _master != _lastMaster) { + _globalPending = false; + _lastDiagLevel = diag; + _lastMaster = _master; + out.print("G "); + out.println(globalJson()); + return; + } + + uint32_t interval = max(STATUS_INTERVAL_MS, running * STATUS_MS_PER_RUNNING_AXIS); + for (uint8_t k = 0; k < NUM_AXES; k++) { + uint8_t i = (_nextStatus + k) % NUM_AXES; + bool due = _statusPending[i] || (_wasRunning[i] && now - _lastStatusMs[i] >= interval); + if (!due) continue; + _statusPending[i] = false; + _lastStatusMs[i] = now; + _nextStatus = (i + 1) % NUM_AXES; + out.printf("S %u ", i); + out.println(_axes[i]->statusJson()); + return; + } +} diff --git a/src/Machine.h b/src/Machine.h new file mode 100644 index 0000000..3c52da9 --- /dev/null +++ b/src/Machine.h @@ -0,0 +1,59 @@ +#pragma once +#include +#include +#include "config.h" +#include "Axis.h" + +// Hele maskinen: alle akser + de fælles ressourcer (EN-pin, DIAG-linje, UART-busser) +// og den løbende overvågning (stall, homing, driver-tjek, live-status). +class Machine { +public: + explicit Machine(FastAccelStepperEngine& engine) : _engine(engine) {} + + void begin(); + + uint8_t count() const { return NUM_AXES; } + Axis& axis(uint8_t i) { return *_axes[i]; } + + // Fælles EN er aktiv, så længe mindst én akse er enabled. + const char* enableAxis(uint8_t i); + void disableAxis(uint8_t i); + const char* enableAll(); // alle akser med fundet driver + void disableAll(); + void stopAll(); // blød stop af alle akser + void estop(); // EN høj med det samme + alle akser disabled + const char* home(uint8_t i, int dir); // kun én akse ad gangen + + bool masterEnabled() const { return _master; } + bool anyRunning(); + + String globalJson(); + void requestStatus(uint8_t i) { _statusPending[i] = true; } + void requestAllStatus(); + + // Kaldes hver loop. Skriver log- og status-linjer til out. + void poll(Print& out); + +private: + void pollDiag(Print& out); + void pollHoming(Print& out); + void pollDrivers(Print& out); + void pollStatus(Print& out); + void updateMasterEnable(); + bool diagActive(); // er den fælles DIAG-linje aktiv (afhænger af DIAG_MODE)? + + FastAccelStepperEngine& _engine; + Axis* _axes[NUM_AXES] = {}; + bool _master = false; + + uint8_t _nextDriverCheck = 0; + uint32_t _lastDriverCheckMs = 0; + uint8_t _nextStatus = 0; + uint32_t _lastStatusMs[NUM_AXES] = {}; + bool _wasRunning[NUM_AXES] = {}; + bool _statusPending[NUM_AXES] = {}; + bool _globalPending = true; + bool _lastDiagLevel = false; + bool _lastMaster = false; + int32_t _diagMv = -1; // seneste ADC-måling af DIAG-linjen (kun ResistorAdc) +}; diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..c5e3e83 --- /dev/null +++ b/src/config.h @@ -0,0 +1,89 @@ +#pragma once +#include + +// ---------- Akser ---------- +// Alle drivere deler EN, DIAG (via diode-OR) og en af to UART-busser. +// Hver akse har sin egen STEP/DIR og en UART-adresse 0–3 (MS1 = bit 0, MS2 = bit 1). +constexpr uint8_t NUM_AXES = 6; + +struct AxisConfig { + uint8_t stepPin; + uint8_t dirPin; + uint8_t bus; // 0 = bus A (Serial2), 1 = bus B (Serial1) + uint8_t address; // TMC2209 UART-adresse 0–3 + // StallGuard-kalibrering: sgt ved to hastigheder (steps/s), lineært imellem. + uint32_t sgSpeedLo; + uint8_t sgSgtLo; + uint32_t sgSpeedHi; + uint8_t sgSgtHi; +}; + +// Pins valgt så GPIO21/22 er fri til I²C (encodere senere). Boot-støjende pins (5, 14, 15) +// bruges kun til DIR, aldrig STEP, så der ikke kommer falske steps ved opstart. +constexpr AxisConfig AXES[NUM_AXES] = { + // STEP DIR bus adr StallGuard: lav hast., sgt, høj hast., sgt + { 25, 26, 0, 0, 800, 35, 3200, 90 }, // målt 2026-10-23 (42-motor, 600 mA) + { 33, 14, 0, 1, 800, 35, 3200, 90 }, // ikke kalibreret – kopi af akse 0 + { 23, 18, 0, 2, 800, 35, 3200, 90 }, // ikke kalibreret + { 19, 13, 0, 3, 800, 35, 3200, 90 }, // ikke kalibreret + { 32, 5, 1, 0, 800, 35, 3200, 90 }, // ikke kalibreret + { 16, 15, 1, 1, 800, 35, 3200, 90 }, // ikke kalibreret +}; + +// ---------- Fælles pins ---------- +constexpr uint8_t PIN_EN = 27; // fælles enable til alle drivere, aktiv lav +constexpr uint8_t PIN_DIAG = 39; // fælles DIAG-linje fra alle drivere (kun indgang, ingen intern pull) + +// Hvordan DIAG-udgangene er samlet på GPIO39: +// - DiodeOr: Schottky-diode pr. driver (anode på DIAG, katode på linjen) + 10 kΩ pull-down +// til GND. Rent digitalt signal (~3 V ved stall) -> interrupt. Mest pålidelig. +// - ResistorAdc: ens modstand pr. driver (4,7–10 kΩ anbefales, 1 kΩ virker) fra DIAG til linjen, +// ingen pull-down. Linjen bliver 3,3 V × (antal høje)/(antal drivere), altså for lav +// til digital læsning – den måles i stedet med ADC'en. +enum class DiagMode { DiodeOr, ResistorAdc }; +constexpr DiagMode DIAG_MODE = DiagMode::ResistorAdc; // skift til DiodeOr når dioderne er monteret +constexpr uint32_t DIAG_ADC_THRESHOLD_MV = 250; // én høj DIAG ud af 6 drivere giver ~550 mV + +// UART-busser (TX via 1 kΩ til bussen, RX direkte på bussen) +constexpr uint8_t PIN_BUS_A_TX = 17; +constexpr uint8_t PIN_BUS_A_RX = 35; // kun-indgang-pin +constexpr uint8_t PIN_BUS_B_TX = 4; +constexpr uint8_t PIN_BUS_B_RX = 34; // kun-indgang-pin +constexpr uint32_t TMC_BAUD = 115200; + +// Reserveret til encodere (I²C) – bruges ikke endnu. +constexpr uint8_t PIN_I2C_SDA = 21; +constexpr uint8_t PIN_I2C_SCL = 22; + +// ---------- Driver ---------- +constexpr float R_SENSE = 0.11f; // Ohm (BTT TMC2209 V1.3) +constexpr uint16_t MICROSTEPS = 16; +constexpr uint16_t FULL_STEPS_PER_REV = 200; // 1,8° motor +constexpr int32_t STEPS_PER_REV = (int32_t)FULL_STEPS_PER_REV * MICROSTEPS; // 3200 + +// ---------- Grænser ---------- +// VIGTIGT: Maks-værdierne hæves kun efter aftale. Kommandoer kan kun sænke under dem. +constexpr uint16_t CURRENT_MA_DEFAULT = 600; +constexpr uint16_t CURRENT_MA_MAX = 600; + +constexpr uint32_t SPEED_HZ_DEFAULT = 800; // steps/s (= 0,25 omdr./s) +constexpr uint32_t SPEED_HZ_MAX = 3200; // = 1 omdr./s – hævet efter aftale til StallGuard-test + +constexpr uint32_t ACCEL_DEFAULT = 2000; // steps/s² +constexpr uint32_t ACCEL_MAX = 2000; + +// ---------- StallGuard ---------- +// Stall når SG_RESULT <= 2 * SGTHRS. Tærsklen følger som standard kalibreringskurven pr. akse (auto). +constexpr int16_t SG_OFFSET_MAX = 100; // finjustering ± oven på kurven +constexpr uint8_t SG_THRESHOLD_DEFAULT = 0; // manuel tærskel (når auto slås fra med 'sgt ') +// StallGuard er upålidelig ved lav fart (accel/decel) – kun aktiv over denne andel af sat hastighed. +constexpr float SG_MIN_SPEED_FRACTION = 0.5f; +constexpr uint8_t HOME_MAX_REVS = 2; // homing giver op efter så mange omdrejninger +constexpr uint32_t TMC_FCLK = 12000000; // intern clock i TMC2209 + +// ---------- Seriel / sikkerhed ---------- +constexpr uint32_t PC_BAUD = 115200; +constexpr uint32_t STATUS_INTERVAL_MS = 100; // live-status pr. kørende akse (mindst) +constexpr uint32_t STATUS_MS_PER_RUNNING_AXIS = 75; // sænk raten når flere kører (115200 baud-budget) +constexpr uint32_t WATCHDOG_TIMEOUT_MS = 2000; // blød stop hvis PC'en tier (når "hb" er aktiveret) +constexpr uint32_t DRIVER_CHECK_INTERVAL_MS = 1000; // hver akse tjekkes så ofte (spredt ud) diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..d38ca64 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,63 @@ +#include +#include +#include "config.h" +#include "Machine.h" +#include "Commands.h" + +FastAccelStepperEngine engine; +Machine machine(engine); +Commands commands(machine); + +static String rxLine; +static uint32_t lastRxMs = 0; + +void setup() { + Serial.begin(PC_BAUD); + delay(200); + + machine.begin(); + + Serial.println(); + Serial.printf("# Stepper-test klar - %u akser\n", NUM_AXES); + uint8_t found = 0; + for (uint8_t i = 0; i < NUM_AXES; i++) { + Axis& a = machine.axis(i); + found += a.uartOk(); + Serial.printf("# a%u (bus %c, adr %u, STEP %u, DIR %u): %s\n", i, 'A' + a.config().bus, + a.config().address, a.config().stepPin, a.config().dirPin, + a.uartOk() ? "TMC2209 fundet" : "ingen driver"); + } + if (!found) Serial.println("# Ingen drivere fundet - er VM (12/24 V) tændt? Prøver igen løbende."); + Serial.printf("# DIAG: %s på GPIO%u\n", + DIAG_MODE == DiagMode::DiodeOr ? "diode-OR (digital)" : "modstande + ADC", PIN_DIAG); + Serial.println("# Skriv 'help' for kommandoer"); + Serial.println(commands.handle("status")); +} + +void loop() { + // ---- Læs kommandoer fra PC'en (ikke-blokerende) ---- + while (Serial.available()) { + char c = (char)Serial.read(); + lastRxMs = millis(); + if (c == '\n' || c == '\r') { + if (rxLine.length()) { + String reply = commands.handle(rxLine); + if (reply.length()) Serial.println(reply); + rxLine = ""; + } + } else if (rxLine.length() < 80) { + rxLine += c; + } + } + + // ---- Stall, homing, driver-tjek og live-status ---- + machine.poll(Serial); + + // ---- Watchdog: kun aktiv når PC-programmet sender "hb" ---- + uint32_t now = millis(); + if (commands.heartbeatArmed() && now - lastRxMs > WATCHDOG_TIMEOUT_MS && machine.anyRunning()) { + machine.stopAll(); + Serial.println("# watchdog: ingen heartbeat fra PC - blød stop af alle akser"); + lastRxMs = now; // undgå at gentage beskeden hver loop + } +} diff --git a/web/requirements.txt b/web/requirements.txt new file mode 100644 index 0000000..a4fe80f --- /dev/null +++ b/web/requirements.txt @@ -0,0 +1,3 @@ +fastapi +uvicorn[standard] +pyserial diff --git a/web/server.py b/web/server.py new file mode 100644 index 0000000..d59633f --- /dev/null +++ b/web/server.py @@ -0,0 +1,193 @@ +"""Web-interface til stepper-test. Kører på PC'en og taler med ESP32 over USB-serial. + +Start: web/.venv/bin/python web/server.py [--port /dev/ttyUSB0] +Åbn: http://127.0.0.1:8000 +""" + +import argparse +import asyncio +import json +import threading +import time +from contextlib import asynccontextmanager +from pathlib import Path + +import serial +import uvicorn +from fastapi import FastAPI, WebSocket, WebSocketDisconnect +from fastapi.responses import FileResponse + +STATIC_DIR = Path(__file__).parent / "static" +HEARTBEAT_S = 0.5 # firmwarens watchdog stopper efter 2 s uden data + + +class SerialLink: + """Én seriel forbindelse til ESP32. Genforbinder automatisk hvis kablet ryger.""" + + def __init__(self, port: str, baud: int, on_message): + self.port = port + self.baud = baud + self.on_message = on_message # kaldes fra læsetråden med en dict + self.ser: serial.Serial | None = None + self.lock = threading.Lock() + self.connected = False + self.error = "" + + def start(self): + threading.Thread(target=self._run, daemon=True).start() + + def _set_state(self, connected: bool, error: str = ""): + if connected != self.connected or error != self.error: + self.connected, self.error = connected, error + self.on_message({"type": "conn", "connected": connected, "port": self.port, "error": error}) + + def _open(self) -> serial.Serial: + ser = serial.Serial() + ser.port, ser.baudrate, ser.timeout = self.port, self.baud, 0.2 + # Undgå at DTR/RTS resetter ESP32 når porten åbnes (virker på de fleste boards). + ser.dtr = False + ser.rts = False + ser.open() + return ser + + def _run(self): + while True: + try: + ser = self._open() + except (serial.SerialException, OSError) as e: + self._set_state(False, str(e)) + time.sleep(2) + continue + with self.lock: + self.ser = ser + self._set_state(True) + # Reset ved hver forbindelse, så ESP32 altid starter i kendt tilstand (driver disabled). + # Firmwaren sender selv boot-log og en status-linje. + self.reset() + try: + while True: + raw = ser.readline() + if raw: + text = raw.decode("utf-8", errors="replace").rstrip("\r\n") + if text: + self.on_message({"type": "line", "text": text}) + except (serial.SerialException, OSError) as e: + with self.lock: + self.ser = None + try: + ser.close() + except Exception: + pass + self._set_state(False, str(e)) + time.sleep(1) + + def reset(self) -> bool: + """Genstart ESP32 via auto-reset-kredsløbet: RTS trækker EN lav, DTR=False holder IO0 høj.""" + with self.lock: + if not self.ser: + return False + try: + self.ser.dtr = False + self.ser.rts = True + time.sleep(0.15) + self.ser.rts = False + return True + except (serial.SerialException, OSError): + return False + + def write(self, line: str) -> bool: + with self.lock: + if not self.ser: + return False + try: + self.ser.write((line.strip() + "\n").encode()) + return True + except (serial.SerialException, OSError): + return False + + +clients: set[WebSocket] = set() +loop: asyncio.AbstractEventLoop | None = None +link: SerialLink | None = None + + +async def broadcast(msg: dict): + data = json.dumps(msg) + for ws in list(clients): + try: + await ws.send_text(data) + except Exception: + clients.discard(ws) + + +def on_serial_message(msg: dict): + # Kaldes fra læsetråden – flyt over i asyncio-loopet. + if loop: + asyncio.run_coroutine_threadsafe(broadcast(msg), loop) + + +async def heartbeat(): + # Kun heartbeat mens en browser er forbundet. Lukkes fanen, stopper firmwaren selv. + while True: + await asyncio.sleep(HEARTBEAT_S) + if clients and link: + link.write("hb") + + +@asynccontextmanager +async def lifespan(_app): + global loop + loop = asyncio.get_running_loop() + link.start() + hb = asyncio.create_task(heartbeat()) + yield + hb.cancel() + + +app = FastAPI(lifespan=lifespan) + + +@app.get("/") +async def index(): + return FileResponse(STATIC_DIR / "index.html") + + +@app.websocket("/ws") +async def ws_endpoint(ws: WebSocket): + await ws.accept() + clients.add(ws) + await ws.send_text(json.dumps( + {"type": "conn", "connected": link.connected, "port": link.port, "error": link.error})) + try: + while True: + cmd = (await ws.receive_text()).strip() + if cmd == "!reset": + ok = await asyncio.to_thread(link.reset) + await ws.send_text(json.dumps( + {"type": "line", "text": "# ESP32 resettes" if ok else "err ikke forbundet til ESP32"})) + elif cmd and not link.write(cmd): + await ws.send_text(json.dumps({"type": "line", "text": "err ikke forbundet til ESP32"})) + except WebSocketDisconnect: + pass + finally: + clients.discard(ws) + if not clients: + link.write("stop") # sidste fane lukket → blød stop med det samme + + +def main(): + global link + p = argparse.ArgumentParser(description="Stepper-test web-interface") + p.add_argument("--port", default="/dev/ttyUSB0", help="seriel port til ESP32") + p.add_argument("--baud", type=int, default=115200) + p.add_argument("--host", default="127.0.0.1") + p.add_argument("--http-port", type=int, default=8000) + args = p.parse_args() + + link = SerialLink(args.port, args.baud, on_serial_message) + print(f"Åbn http://{args.host}:{args.http_port} (ESP32 på {args.port})") + uvicorn.run(app, host=args.host, port=args.http_port, log_level="warning") + + +if __name__ == "__main__": + main() diff --git a/web/static/index.html b/web/static/index.html new file mode 100644 index 0000000..9c090e7 --- /dev/null +++ b/web/static/index.html @@ -0,0 +1,913 @@ + + + + + +Stepper-test + + + + + +
+ +
+
+

Styring

+
+
+
+
+
+ + +
+
+ + + + +
+
+ +
+

Oversigt – klik på en akse for at vælge den

+
+ + + +
AkseBus/adrDriverPositionOmdrHastighedSG / sgtFlag
+
+
+ +
+

Status – akse 0

+
–
+
 
+
+ Mål– + Kører– + Driver– + Hastighed– + Accel– + Strøm– + Mode– + TMC– +
+
+ +
+

Driver og jog – akse 0

+
+ + + + +
+
+ + + + +
+
+ steps + +
+
+ steps + +
+
+
+ +
+

Indstillinger – akse 0

+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+ Maks-værdier sættes i firmwaren (config.h) og gælder alle akser. +
+ +
+

Log

+
+
+ + + +
+
+
+
+ + +
+
+

StallGuard – belastning og stall-detektion

+
+
+
+
+
+
+ SG_RESULT – akse 0 +
–
+ høj = let belastning, lav = tung belastning +
+
–
+
+ +
+ SG_RESULT (live mens aksen kører) + Stall-grænse = 2 × sgt +
+
+ +
+

Tærskel og stall-stop – akse 0

+
+ Effektiv sgt: – + – +
+
Stall når SG ≤ 2 × sgt
+
+ +
+
+ + + + 0 + + + +
+
Auto bruger aksens kalibreringspunkter i config.h (akse 0: 800 → 35, 3200 → 90). Falske stop: −. Intet stop: +.
+
+ + + + +
+
Manuel slår auto fra. Bruges til at kalibrere nye akser.
+
+ + + +
+

Homing (sensorløs)

+
+ + + kører højst 2 omdr. mod et mekanisk stop +
+
+ +
+

Kør – akse 0

+
+ + +
+
+ + + + + steps/s · nu – +
+
+ + + + +
+
+ +
+

Sådan tuner du

+
    +
  1. Auto er standard: sgt følger hastigheden. Tjek at den røde linje ligger under den frie kurve ved alle tre hastigheder.
  2. +
  3. Slå stall-stop til. Fri kørsel må ikke stoppe; bremser du, skal den stoppe med det samme.
  4. +
  5. Falske stop: finjustér −. Intet stop: finjustér +.
  6. +
  7. Et stall på én akse stopper alle akser (fælles DIAG-linje). Loggen viser, hvilken akse der stallede.
  8. +
  9. Ny akse/motor: brug Manuel. Find sgt ved 800 og ved 3200, og indsæt dem som aksens kalibreringspunkter i config.h.
  10. +
+ StallGuard virker kun i StealthChop og kun over halvdelen af den indstillede hastighed (ikke under op- og nedbremsning). +
+
+
+ + +
+

Ledningsdiagram – ESP32 + TMC2209 + steppere

+
+
+
+ DIAG-linjen: + + + firmwaren: – +
+ Modstande + ADC virker uden dioder, men har mindre støjmargin. Diode-OR er mest pålidelig. + Skift i firmwaren med DIAG_MODE i config.h – og kobl om, så det passer. +
+
+

Én akse i detaljer (akse 0)

+ + + + ESP32 DevKit + 3V3 + GND + GPIO25 + GPIO26 + GPIO27 + GPIO17 (TX A) + GPIO35 (RX A) + GPIO39 (DIAG) + + USB-C + → PC (strøm + seriel) + + + + TMC2209 (BTT V1.3) + akse 0 · adresse 0 + VIO + GND + STEP + DIR + EN + PDN_UART + MS1 + MS2 + DIAG + VM + GND + A1 + A2 + B1 + B2 + + + + 3,3 V + + GND + + STEP + + DIR + + EN (fælles, aktiv lav) + + + + + 1 kΩ + + + + UART-bus A + + + + + + MS1 + MS2 → GND (adr 0) + + + + + + + 4,7–10 kΩ (1 kΩ virker) · ingen pull-down + + + + + + + + + + 10 kΩ + Schottky (BAT54 / 1N5817) + + + + + Strømforsyning + 12–24 V DC + + + − + + + + + + + ≥100 µF + + + + Stepper + 42-motor (1,8°) + + + spole A + + + spole B + +
+ Forsyning + GND + STEP / DIR / EN + UART + Motor + DIAG +
+
+ +
+

Flere drivere på samme bus (bus A, akse 0–3) – DIAG via modstandeDIAG via diode-OR

+ + + ESP32 + GPIO17 (TX A) + GPIO35 (RX A) + GPIO39 (DIAG) + + + + + 1 kΩ + + + + UART-bus A (én ledning til alle PDN_UART) + + + + fælles DIAG-linje + + + + + + 10 kΩ pull-down + + ingen pull-down – de lave DIAG-udgange holder linjen nede + + + + +

Bus B (GPIO4 TX via 1 kΩ, GPIO34 RX) til akse 4–5 kobles på samme måde, og deres DIAG går til den samme DIAG-linje via hver sin + modstand (samme værdi som de andre)diode. + EN (GPIO27), VIO (3,3 V) og GND går til alle drivere.

+
+ +
+

Alle akser

+
+ + + + + + + + +
AkseSTEPDIRBusAdresseMS1MS2
0GPIO25GPIO26A0GNDGND
1GPIO33GPIO14A13,3 VGND
2GPIO23GPIO18A2GND3,3 V
3GPIO19GPIO13A33,3 V3,3 V
4GPIO32GPIO5B0GNDGND
5GPIO16GPIO15B13,3 VGND
+
+

Fælles

+
+ + + + + + + + + +
SignalESP32Note
EN (alle drivere)GPIO27Lav = drivere aktive. Den enkelte akse slås til/fra over UART.
Bus A TX / RXGPIO17 / GPIO35TX via 1 kΩ, RX direkte på bussen. Akse 0–3.
Bus B TX / RXGPIO4 / GPIO34TX via 1 kΩ, RX direkte på bussen. Akse 4–5.
DIAG (alle drivere)GPIO39 + Modstande + ADC (DIAG_MODE = ResistorAdc): én modstand pr. driver fra DIAG til linjen, alle med samme værdi (4,7–10 kΩ anbefales, 1 kΩ virker). Ingen pull-down. Linjen er 0 V uden stall og mindst ~0,55 V ved stall (6 drivere), så den måles med ADC'en.
+ Diode-OR (DIAG_MODE = DiodeOr): én Schottky-diode pr. driver (BAT54/1N5817/1N5819/BAT85; anode på DIAG, katode på linjen) + 10 kΩ fra GPIO39 til GND. Pull-down'en er påkrævet, fordi GPIO39 ikke har en intern. 1N4148 virker, men giver kun ~2,7 V (lille margin).
+ Forbind aldrig flere DIAG direkte uden modstand eller diode.
I²C (encodere senere)GPIO21 / GPIO22Reserveret – må ikke bruges til andet.
VIO3V3Til alle drivere. 3,3 V, ikke 5 V.
GNDGNDFælles GND mellem ESP32, drivere og strømforsyning er påkrævet.
+
+

Adresse: MS1 er bit 0 og MS2 er bit 1. "3,3 V" betyder forbundet til VIO (3,3 V) – aldrig til VM. + Modul: brug BigTreeTech TMC2209 V1.3 (eller et andet modul med dokumenteret UART). De lilla AliExpress-moduler har ikke PDN_UART ført ud og virker kun i standalone-mode. + Benavne varierer mellem moduler, og pinplaceringen på ESP32 varierer også: find benene efter teksten på boardet.

+
+ +
+

Før strømmen tændes

+
    +
  • Tilslut USB først, tænd derefter for motorstrømmen. Sluk motorstrømmen, før USB tages ud.
  • +
  • Tag aldrig motorstikket ud eller i, mens der er strøm på VM. Det kan ødelægge driveren.
  • +
  • Hold motorkabler væk fra USB-kablet. Støj kan få pc'en til at miste forbindelsen til ESP32.
  • +
  • TMC2209 svarer kun på UART, når VM er tændt. Firmwaren leder efter alle drivere løbende, så når VM tændes, står der # aN UART OK - driver fundet i loggen for hver driver.
  • +
  • Finder den ikke en driver: kør UART-diagnose på aksen. Den viser, hvilke adresser der svarer på bussen. Svarer driveren på en anden adresse end forventet, sidder MS1/MS2 forkert.
  • +
  • Slukkes VM, mens en akse er enabled, disabler firmwaren den. Send en igen, når VM er tilbage.
  • +
+
+
+
+
+ + + + From 6fbb4b4f41bd8eed08adc42f6cd09013dae45010 Mon Sep 17 00:00:00 2001 From: Stani Date: Sun, 25 Oct 2026 21:09:42 +0100 Subject: [PATCH 2/2] Klar til og bruge Gitea siden --- README.md | 69 ++++++++++++ diy-robot.md | 283 ++++++++++++++++++++++++++++++++++++++++++++++++++ diy-robot.pdf | Bin 0 -> 333589 bytes robot-arms.md | 78 ++++++++++++++ 4 files changed, 430 insertions(+) create mode 100644 README.md create mode 100644 diy-robot.md create mode 100644 diy-robot.pdf create mode 100644 robot-arms.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..22b7fc0 --- /dev/null +++ b/README.md @@ -0,0 +1,69 @@ +# DIY robotarm til 3D-printer-automatisering + +En selvdesignet, 3D-printet robotarm, der skal automatisere en **Anycubic Kobra S1 Combo med ACE Pro**: + +1. Hente byggepladen, når printeren har frigjort den fra magneten, og tømme emnet ned i en kasse. +2. Skifte filamentspoler på 1 kg i ACE Pro. + +Armen skal også være en platform til større projekter senere. + +> **Status:** Planlægning. Der er endnu ingen CAD-filer eller kode i repoet. + +## Krav i korte træk + +| | | +|---|---| +| Nyttelast | ≥ 2 kg nominelt (værste last ~1,55 kg: fuld spole + griber) | +| Rækkevidde | ~550 mm vandret | +| Moment | Skulder ~20 Nm, albue ~10 Nm, håndled 2–4 Nm | +| Budget | Max 3.000 kr (skøn: ca. 2.100–3.250 kr) | +| Licens | Skal tillade erhvervsbrug, derfor eget design | +| Styring | Egen styring | + +## Opbygning + +- **Modul A, stort led (skulder og albue):** NEMA 23 + printet 2-trins planetgear (~20–30:1) med BB-kugler, gear i PA-CF/PC-CF, AS5600-encoder på udgangsakslen. +- **Modul B, lille led (base og håndled):** NEMA 17 med GT2-remtræk eller lille printet gear. +- **Led:** printet PETG, evt. forstærket med aluminiumsprofiler. +- **Base:** aksialleje/drejekrans, gasfjeder som modvægt og sokkel i pladens højde. +- **Griber:** parallelgriber med udskiftelige kæber til både byggeplade og spole. + +## Dokumenter + +| Fil | Indhold | +|-----|---------| +| [diy-robot.md](diy-robot.md) | Den samlede plan: krav, geometri, designstrategi, moduler, prisskøn, sammenligning med færdige arme, licens og CE | +| [diy-robot.pdf](diy-robot.pdf) | PDF-udgave af planen | +| [robot-arms.md](robot-arms.md) | Research af open source-robotarme med ≥ 1 kg nyttelast | + +## Næste skridt + +1. Fastlæg leddelængder og kinematik (AR4's proportioner som udgangspunkt). +2. Tegn, print og bænktest **Modul A** med 1,55 kg ved 400 mm. +3. Tegn **Modul B** (base og håndled). +4. Saml armen, og tilslut styring og encodere. +5. Byg griberen. +6. Design arbejdscellen ud fra armens arbejdsområde. +7. Lav risikovurdering og CE-dokumentation. + +## Sikkerhed + +Armen skal have et nødstop, der fysisk afbryder motorstrømmen, og den skal arbejde i en afskærmet celle. Ved erhvervsbrug er du selv fabrikant og skal CE-mærke maskinen (se afsnit 6 i [diy-robot.md](diy-robot.md)). + +## Inspiration og kreditering + +Designet er tegnet fra bunden, men bygger på idéer fra: + +- [AR4 / AR2](https://github.com/Chris-Annin/AR2) (Annin Robotics): geometri og leddelængder +- [KasperT00/TheRobotArm](https://github.com/KasperT00/TheRobotArm): NEMA 23 + printet planetgear med BB-kugler +- [TaylorAndonian/cycloidal-drive](https://github.com/TaylorAndonian/cycloidal-drive): designregler for printede gear +- [kutilz/robotic-arm](https://github.com/kutilz/robotic-arm): måledata for printede gear og AS5600-encodere +- [surynek/RR1](https://github.com/surynek/RR1): stivhed og materialer +- [Thor](https://github.com/AngelLM/Thor) (AngelLM): håndled med remtræk +- [Faze4](https://github.com/PCrnjak/Faze4-Robotic-arm) og [PAROL6](https://github.com/PCrnjak/PAROL6-Desktop-robot-arm) (Source Robotics): opbygning, software og kinematik + +Hvis filer fra disse projekter senere kopieres direkte ind, gælder det pågældende projekts licens for netop de dele. + +## Licens + +Ikke valgt endnu. diff --git a/diy-robot.md b/diy-robot.md new file mode 100644 index 0000000..fe34b39 --- /dev/null +++ b/diy-robot.md @@ -0,0 +1,283 @@ +# DIY robotarm: plan + +*Oprettet 2026-10-25, opdateret samme dag med strategien "eget design". Priserne er skøn ud fra typiske priser og ikke tjekket i dag, medmindre andet står.* + +## 1. Mål og kriterier + +**Printer:** Anycubic Kobra S1 Combo med ACE Pro. + +| Kriterie | Krav | +|----------|------| +| Opgave 1 | Hente byggepladen efter printeren har frigjort den fra magneten, og tømme emnet ned i en kasse | +| Opgave 2 | Skifte filamentspoler på 1 kg i ACE Pro | +| Nyttelast | ≥ 2 kg nominelt. Den samlede last må højst være 70–80 % af det | +| Budget | **Max 3.000 kr** | +| Licens | Skal tillade **erhvervsbrug** | +| Styring | Egen styring (næsten færdig) | +| Andet | Platform til større projekter senere | + +### Vægtbudget + +| Last | Vægt | +|------|------| +| Fuld spole (1 kg filament + spole) | ~1,25 kg | +| Byggeplade + emne | 0,25–0,75 kg | +| Let printet griber | ~0,3 kg | +| **Værste tilfælde (spole + griber)** | **~1,55 kg** | + +### Momentkrav (ved ~50 cm rækkevidde) + +- Last: 1,55 kg × 0,5 m × 9,81 ≈ **7,6 Nm** +- Armens egen vægt: ~1,5 kg × 0,25 m ≈ **3,7 Nm** +- **Skulder: mål ~20 Nm** med sikkerhedsmargin +- **Albue: mål ~10 Nm** +- **Håndled:** lille, ~2–4 Nm + +Halveres rækkevidden, halveres det **krævede** moment fra lasten (moment = kraft × arm). Skulderens eget moment er uændret, så armen kan i stedet løfte ca. **dobbelt så meget** på halv afstand. Derfor er placeringen af printer og ACE Pro vigtig. + +### Designmål for rækkevidde + +Arbejdscellen er ikke fastlagt endnu. Armen dimensioneres derfor ud fra udstyrets mål, og cellen tilpasses bagefter. + +| Udstyr | Mål (B × D × H) | Note | +|--------|-----------------|------| +| Kobra S1 | 400 × 410 × 490 mm | Byggevolumen 250 × 250 × 250 mm. Lukket CoreXY | +| ACE Pro | 366 × 283 × 235 mm, 4,6 kg | | + +**Antaget opstilling:** +- Printer og ACE Pro står side om side på bordet. ACE Pro står **ikke** oven på printeren, for så skulle armen række ~600–700 mm op til spolerne. +- Armens base står foran printeren og forskudt til siden (se nedenfor). + +**Geometri for byggepladen** (antaget: plade ~256 mm og centreret i dybden): +- Pladens forkant ligger ~77 mm inde: (410 − 256) / 2. +- Pladens tyngdepunkt ligger ~205 mm inde, og bagkanten ~333 mm inde. +- Griberen tager fat ~20 mm ind på forkanten, dvs. **~100 mm inde i printeren**. +- Hele pladen er først fri af printeren, når griberen er **~256 mm foran fronten**. + +**Konsekvens:** +- Står basen lige foran printeren, rammer pladen armen, når den trækkes ud. +- Basen skal derfor stå **forskudt til siden**. Regneeksempel: 150 mm foran fronten og 250 mm til siden for pladens midterlinje. + +| Bevægelse | Afstand fra basen (ca.) | +|-----------|-------------------------| +| Gribe pladens forkant | ~355 mm | +| Pladens tyngdepunkt, hvis den løftes, mens den sidder helt inde | ~435 mm | +| Pladen trukket helt ud (griber / tyngdepunkt) | ~270 / ~250 mm | +| Løfte en spole ud af eller ned i ACE Pro | ~300–400 mm | +| Flytte en tom plade over kassen | ~400–500 mm | + +**Designmål:** +- **Maks. rækkevidde: ~550 mm** (vandret). Lægges skulderen i samme højde som pladen, f.eks. på en sokkel, slipper armen for at skulle række ekstra lodret. +- **Pladen glides ud, ikke løftes ud.** Armen trækker pladen vandret ud over printerens bund og løfter den først, når tyngdepunktet er tæt på basen. +- **Løftes pladen alligevel helt inde,** bliver lastmomentet: 1,05 kg × 0,435 m × 9,81 ≈ **4,5 Nm**. +- **Fuld spole og griber (1,55 kg): håndteres inden for 350–400 mm.** Det giver ~5,3–6 Nm. +- **Armens egen vægt:** Længere led betyder et større moment fra armens egen vægt, ca. 4–5 Nm. Skulderens mål på ~20 Nm er stadig rigeligt. +- **Krav til opstillingen:** Spoleskift må aldrig ske med armen fuldt udstrakt. + +## 2. Designstrategi: eget design med inspiration fra flere projekter + +### Hvorfor tegne fra bunden +De planlagte ændringer af Thor rammer næsten alle bærende dele: +- skulder, albue og gear +- leddelængder (~550 mm) +- base forskudt til siden +- materialer og lejer + +Thors dele er tegnet til at passe præcist sammen. Det er derfor mere besværligt at ændre dem end at tegne nyt. + +**Fordele ved eget design:** +- **Egen ophavsret.** Ingen licensforpligtelser ved salg eller deling, hvilket er enklere til erhverv. +- **Dimensioneret direkte** efter kravene i afsnit 1. +- **Ledmoduler, der kan genbruges** i senere projekter. + +**Ulemper:** +- Mere CAD-arbejde. +- Ingen testet udgangsversion. Det afhjælpes ved at teste hvert ledmodul for sig, før armen samles. + +### Inspiration pr. modul + +Idéer og funktionsprincipper er ikke beskyttet af ophavsret. Licensen har kun betydning, hvis filer kopieres direkte. + +| Modul | Inspiration | Hvad vi tager med | Licens (ved kopi af filer) | +|-------|-------------|-------------------|----------------------------| +| Geometri og leddelængder | **AR4** (Annin) / **AR2** | Tættest på kravene: 1,9 kg, 629 mm rækkevidde, testet af mange brugere | Ikke angivet. Kun idéer | +| Skulder- og albuegear (billigst) | **KasperT00 / TheRobotArm** | NEMA 23 + printet 2-trins planetgear ~20:1 med **BB-kugler i stedet for kuglelejer** | Ingen. Kun idéer | +| Designregler for cykloidegear | **TaylorAndonian / cycloidal-drive** | Dokumenterede fejl: tandkontakten er grænsen. Parametrisk Python-CAD | Ingen. Kun idéer | +| Måledata for printede gear og encodere | **kutilz / robotic-arm** | Målt 10,7 Nm fra NEMA 17 + cykloidegear 30:1. AS5600 på udgangsakslen | Tjek repoet | +| Stivhed og materialer | **RR1** (surynek) | Aluminiumsprofiler, PC-CF-gear, sildebensfortanding mod slør | AGPL-3.0 | +| Håndled | **Thor** (AngelLM) | Let og kompakt håndled med remtræk | CC-BY-SA-4.0 | +| Stor arm med remtræk | **Faze4** | Opbygning med steppere og remme. Filerne må genbruges kommercielt | MIT | +| Software og kinematik | **PAROL6** | Python-GUI og kinematik, hvis den egne styring skal udvides | GPLv3 | + +**Hovedlinje:** +- Geometri fra **AR4**. +- Gear efter **KasperT00's** princip, dimensioneret med **TaylorAndonians** regler og tjekket mod **kutilz'** måling. +- Håndled efter **Thor**. + +### Fravalgt som inspiration/basis + +| Design | Årsag | +|--------|-------| +| Arctos | Ikke-kommerciel licens, og filerne koster penge | +| BCN3D Moveo | Lav nyttelast og kendte fejl i BOM'en | +| Sixi 2 | Ufærdigt projekt | + +## 3. Designmoduler + +### Modul A: stort led (skulder og albue) +- **Ét parametrisk design** bruges i begge led. Det skaleres evt. ned til albuen. +- **Motor:** NEMA 23 (~1,9 Nm). +- **Gear:** printet 2-trins planetgear med BB-kugler, ~20–30:1. + - Skulder: 1,9 × 20 × 0,8 ≈ **30 Nm** (mål 20 Nm). + - Albue: mål ≥ 10 Nm. +- **Materialer:** PA-CF eller PC-CF til gear. Det kræver en **hærdet dyse**. +- **Tænder:** brede tænder og mange i indgreb samtidig. Grænsen er tandkontakten, ikke motorens moment. +- **Lejer:** et stort udgangsleje (tyndrings- eller aksialleje), så gearet ikke skal bære bøjningsmomentet. +- **Feedback:** **AS5600-magnetencoder** på udgangsakslen (~20–30 kr). Closed-loop-drivere (MKS SERVO57D) er en senere opgradering. +- **Test på bænken:** Byg Modul A først, og test det med 1,55 kg ved 400 mm, før resten tegnes. + +### Modul B: lille led (base og håndled) +- **Motor:** NEMA 17 (genbrug fra en brugt printer). +- **Transmission:** remtræk (GT2) eller et lille printet gear, inspireret af Thors håndled. +- **Vægt:** hold håndleddet så let som muligt, fordi skulderen skal bære det. + +### Led (over- og underarm) +- **Længder:** dimensioneret efter ~550 mm maks. rækkevidde. Brug AR4's proportioner som udgangspunkt. +- **Konstruktion:** printet PETG med 4–6 vægge og 40 %+ infill. +- **Stivhed:** aluminiumsprofiler 2020/3030 (~100–200 kr) kun hvis PETG viser sig for blødt. +- **Underarmen:** så let som muligt. + +### Base +- **Leje:** et stort aksialleje eller drejekrans til basens rotation. +- **Fjeder eller gasfjeder** som modvægt på skulderen. Den halverer det krævede moment fra armens egen vægt. +- **Sokkel,** så skulderen kommer i samme højde som byggepladen. + +### Griber +- **Opgaven:** Én griber skal kunne både en byggeplade (flad, ~256 mm) og en spole (Ø200 mm, nav Ø55 mm). +- **Forslag:** En parallelgriber med udskiftelige kæber. Alternativt en krog eller dorn ind i spolens nav plus en flad gaffel til pladen. +- **Motor:** en servo på 15–25 kg·cm (~50–100 kr) eller en lille NEMA 17 med gevindstang. + +### Arbejdscelle (designes efter armen) +- **Placering:** ACE Pro og printer så tæt på armens base som muligt, med basen forskudt til siden. +- **Printerlågen:** den skal enten afmonteres eller automatiseres. +- **ACE Pro-låget:** det skal enten fjernes eller automatiseres. +- **Filamentet:** lav en printet tragt eller fører, så filamentenden kan føres ind i ACE Pro. Det er den sværeste del af spoleskiftet. + +## 4. Prisskøn + +| Del | Pris (ca.) | Note | +|-----|-----------|------| +| Brugt 3D-printer fra DBA | 300–500 kr | Giver 4× NEMA 17, 24V-strømforsyning, aksler og lejer | +| 2× NEMA 23 | 300–500 kr | Skulder og albue | +| 6× TMC2209-drivere | ~200 kr | | +| 6× AS5600-encodere | 120–180 kr | Kan vente | +| Kuglelejer, BB-kugler, bolte, GT2-remme og remskiver | 400–600 kr | BB-kugler sparer lejer i gearene | +| Filament: 2–3 kg PETG | 300 kr | | +| Filament: 1 kg PA-CF/PC-CF | 300–450 kr | Gear | +| Fjeder eller gasfjeder | 50–100 kr | | +| Griberservo | 50–100 kr | | +| Hærdet dyse | 0–200 kr | Hvis den ikke findes allerede | +| Nødstop og kontaktor | 100–150 kr | Påkrævet, se afsnit 6 | +| **I alt** | **≈ 2.100–3.250 kr** | Uden AS5600 ≈ 1.950–3.050 kr | + +**Hvis budgettet bliver presset:** +- Køb motorer og strømforsyning brugt. +- Udskyd encoderne. +- Brug PETG til alle gear undtagen skulderens. + +## 5. DIY vs. færdiglavet robotarm + +Alternativerne er undersøgt i samme forløb. Priserne er omregnet (1 USD ≈ 6,9 kr, 1 EUR ≈ 7,46 kr). Ved køb uden for EU kommer 25 % moms, told og fragt oveni. + +| Løsning | Eksempel | Pris (ca.) | Nyttelast | Fordele | Begrænsninger | +|---------|----------|-----------|-----------|---------|---------------| +| **DIY (denne plan)** | Eget design | **2.100–3.250 kr** | Mål ~2 kg (ikke testet) | Billigst. Egen ophavsret. Fuld kontrol. Lærerigt. Modulerne kan genbruges | Meget tid til design og test. Lavere præcision og mere slør (printede gear). Ingen CE, så du er selv fabrikant. Ingen support | +| **Arctos v2-kit** | Kit uden printede dele | ~5.000 kr | 0,5–2 kg (uklart) | Billigt kit | **Ikke-kommerciel licens**, så den kan ikke bruges i erhverv. Steppere uden feedback | +| **Open source-motorkit** | reBot B601-RS Body Motor Kit | ~10.100 kr + strømforsyning | 2,5 kg | Motorer med indbygget motorstyring og encodere (CAN), kraftfølsomme. Strukturen kan printes selv | 3–4× over budget | +| **Open source-arm, samlet** | reBot B601-RS | ~18.600 kr | 2,5 kg | Klar til brug. Åbent design. Passer til LeRobot | 6× over budget | +| **Open source-kit, aluminium** | AR4 MK5 (kit + motorer) | ~16.000–17.000 kr importeret | 1,9 kg | Moden og veldokumenteret | Over budget, lidt under 2 kg. Steppere uden kraftfeedback | +| **Brugt industriarm uden styreboks** | Denso VP-6242, UR3 (kun armen) | ~11.000–20.000 kr importeret | 2–3 kg | Industrimekanik: harmoniske gear, høj præcision og stivhed | **Styreboksen mangler.** Leddenes protokol eller encoderprotokol er proprietær (UR's er udokumenteret). Det kræver et stort ombygningsprojekt, ikke "små fixes". Denso: kun 432 mm rækkevidde | +| **Ny kommerciel cobot** | Fairino FR3 | ~42.000 kr | 3 kg | **CE-mærket**, sikkerhedsfunktioner, support, høj præcision | 14× over budget. Lukket software | +| **Brugt cobot med styreboks** | UR3 (USA) / UR5 (Tyskland) / xArm 6 (Spanien) | ~48.000–67.000 kr | 3–5 kg | CE-mærket, stort community, fungerer med det samme | Langt over budget. Tjek at styreboks, teach pendant og licenser følger med, og hvor mange driftstimer den har | + +**De vigtigste forskelle:** +1. **Pris:** DIY koster ca. 1/5 af det billigste brugbare kit og ca. 1/15–1/20 af en cobot. Du betaler i stedet med tid. +2. **CE og erhvervsbrug:** En ny eller brugt cobot er allerede CE-mærket. For DIY skal du selv lave risikovurdering, dokumentation og CE-erklæring (afsnit 6). Det er DIY's største skjulte omkostning ved erhvervsbrug. +3. **Præcision:** Industriarme har ca. 0,02–0,1 mm repeterbarhed. En printet arm har mere slør, men det er nok til plade og spoler, hvor en griber med lidt tolerance kan klare det. +4. **Sikkerhed:** Cobots har indbygget kollisionsdetektion. Den bygger du ikke billigt ind i en DIY-arm, så den kræver afskærmning og nødstop. +5. **Udvikling:** DIY og open source giver fuld adgang til at ændre alt. Det er en fordel som platform for større projekter. +6. **Brugte arme uden styreboks** ser billige ud, men er ikke billige. Den manglende styring er netop den del, der ikke kan laves med små fixes. + +**Konklusion:** Inden for et budget på 3.000 kr er DIY den eneste realistiske løsning. Bliver projektet senere til erhvervsdrift med større krav til oppetid og CE, er en brugt cobot med styreboks (fra ~48.000 kr) eller reBot B601-RS (~18.600 kr) det naturlige næste skridt. + +## 6. Erhvervsbrug: licens og CE + +### Licens +- **Eget design betyder egen ophavsret.** Du vælger selv licens senere eller ingen. +- **Kreditér inspirationskilderne** i README'en, f.eks. "inspireret af AR4, Thor og KasperT00/TheRobotArm". Det er god skik, ikke et krav. +- **Kopierede filer:** Bruges filer direkte (f.eks. Thors håndled), gælder deres licens for netop de dele: + - CC-BY-SA: kreditér, og del ændringer under samme licens, hvis du deler. + - MIT (Faze4): kun kreditering. +- **Kopiér ikke filer fra repos uden licens** (KasperT00, TaylorAndonian). Tegn selv. +- **Undgå ikke-kommercielle designs** (Arctos). + +### CE-mærkning +Bruger du maskinen erhvervsmæssigt, er du "fabrikant", også selvom du har bygget den til eget brug. Det gælder maskindirektivet, og fra januar 2027 EU's maskinforordning 2023/1230. + +- [ ] Risikovurdering (klemning, strømsvigt, at armen går i stå, tab af last) +- [ ] Nødstop, der fysisk afbryder motorstrømmen +- [ ] Afskærmning eller arbejdscelle, hvor armen stopper, når nogen kommer ind +- [ ] Sikker tilstand ved strømsvigt. Skulderen skal være selvlåsende eller have en bremse +- [ ] Teknisk dokumentation +- [ ] EU-overensstemmelseserklæring og CE-mærke på maskinen + +*Det her er generel information og ikke juridisk rådgivning. Spørg Arbejdstilsynet eller en rådgiver, før armen bruges i drift.* + +## 7. Næste skridt + +1. Fastlæg leddelængder og kinematik ud fra rækkevidden ~550 mm, med AR4's proportioner som udgangspunkt. +2. Tegn og print **Modul A**, og test det på bænken med 1,55 kg ved 400 mm. +3. Tegn **Modul B** (base og håndled). +4. Saml armen, og tilslut den egne styring og encoderne. +5. Byg griberen. +6. Design arbejdscellen ud fra armens færdige arbejdsområde. +7. Lav risikovurdering og CE-dokumentation. + +## Kilder + +**Inspiration** +- AR4 (Annin Robotics, specifikationer og kitpriser): https://www.anninrobotics.com/ +- AR2 (CAD og BOM): https://github.com/Chris-Annin/AR2 +- KasperT00/TheRobotArm (NEMA 23 + printede planetgear 20:1, ingen licens): https://github.com/KasperT00/TheRobotArm +- TaylorAndonian/cycloidal-drive (6 printede cykloidegear, ingen licens): https://github.com/TaylorAndonian/cycloidal-drive +- kutilz/robotic-arm (cykloidegear + AS5600-encodere, målt moment): https://github.com/kutilz/robotic-arm +- surynek/RR1 (PC-CF-gear, aluminiumsprofiler, AGPL-3.0): https://github.com/surynek/RR1 +- Thor (CC-BY-SA-4.0): https://github.com/AngelLM/Thor +- Faze4 (MIT): https://github.com/PCrnjak/Faze4-Robotic-arm +- PAROL6 (GPLv3): https://github.com/PCrnjak/PAROL6-Desktop-robot-arm +- Triple Cycloidal Robot Arm: https://hackaday.io/project/166133-triple-cycloidal-robot-arm +- Open6X (driverfejl ved test med 0,5 kg): https://hackaday.io/project/181875-open6x-robot-arm + +**Fravalgte designs** +- Arctos (ikke-kommerciel licens): https://hackaday.com/2023/05/08/arctos-robotics-build-a-robot-arm-out-of-3d-printer-spares/ +- BCN3D Moveo: https://github.com/jsechovec/BCN3D-Moveo +- Sixi 2: https://github.com/MarginallyClever/sixi-2 + +**Færdiglavede alternativer** +- reBot B601-RS (samlet arm): https://openelab.io/a/s/products/seeed-studio-rebot-arm-b601-rs-assembled-kit-with-gripper-without-power-supply +- reBot B601-RS Body Motor Kit: https://openelab.io/products/seeed-studio-rebot-arm-b601-rs-body-motor-kit +- Arctos v2-kit: https://eu.robotshop.com/products/arctos-robotics-arctos-6-axis-diy-robotic-arm-hardware-v2-open-loop-kit-complete-non-printed-components-arduino-ros-ai-robotics-projects +- Fairino FR3: https://top3dshop.com/product/fairino-fr3 +- Brugt UR3 (eBay): https://www.ebay.com/sch/i.html?_nkw=ur3+robot&_sop=12 +- Brugt UR5 (Werktuigen): https://www.werktuigen.dk/universal+robots-ur5/wt-189-82796 +- Brugt xArm 6 (Exapro): https://www.exapro.com/ufactory-xarm6-p260618085/ +- Denso VP-6242 (specifikationer): https://robodk.com/robot/Denso/VP-6242 +- Denso VP-6242 (eBay): https://www.ebay.com/itm/145894191985 +- UR-joints uden styreboks (forum): https://forum.universal-robots.com/t/using-ur-arm-with-custom-controller-and-power-supply/17535 + +**Udstyrsmål** +- Kobra S1 (mål og byggevolumen): https://www.3djake.ch/en-CH/anycubic-3d-printer-and-accessories/kobra-s1?sai=28837 +- ACE Pro (mål og vægt): https://ca.anycubic.com/products/ace-pro + +**Lovgivning** +- EU-maskinforordningen 2023/1230: https://eur-lex.europa.eu/eli/reg/2023/1230/oj diff --git a/diy-robot.pdf b/diy-robot.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6d82345a8b928598d0924ad239062e8d605878ed GIT binary patch literal 333589 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 vk3lA?m=B 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 literal 0 HcmV?d00001 diff --git a/robot-arms.md b/robot-arms.md new file mode 100644 index 0000000..252c467 --- /dev/null +++ b/robot-arms.md @@ -0,0 +1,78 @@ +# Open source robotarme til 3D-printer-automatisering + +**Mål:** En robotarm der tager byggepladen ud af 3D-printeren og lægger det færdige emne ned i en kasse. +**Krav:** Gratis open source design, og mindst 1 kg nyttelast med armen fuldt udstrakt. + +*Researchet 2026-10-25. Prisen er hvad det koster at bygge armen eller købe et kit. Selve designet er gratis, undtagen hvor andet står. Kroner er omregnet cirka (1 USD ≈ 6,9 kr, 1 EUR ≈ 7,46 kr, 1 CAD ≈ 4,9 kr). Fragt, told og moms kommer oveni.* + +## Oversigt (pris fra lav til høj) + +| # | Arm | Pris (ca.) | Nyttelast | Akser | Status / bemærkning | +|---|-----|-----------|-----------|-------|---------------------| +| 1 | Arctos | ~$400 dele + €40 filer (≈ 3.100 kr) | 0,5–2 kg (alt efter version) | 6 | ⚠️ CAD-filerne er **betalte**, kun firmwaren er gratis | +| 2 | OS-ARM (3DprintedLife) | < $500 i materialer (≈ 3.500 kr) | 1 kg (mål) | 5–6 | ⚠️ Udviklingsprojekt, tallene er designmål | +| 3 | Faze4 (Source Robotics) | $1.000–1.500 (≈ 6.900–10.400 kr) | Ikke oplyst | 6 | MIT-licens. Stor arm på 14–15 kg med steppere, forgænger til PAROL6 | +| 4 | Sixi 2 / Sixi 3 (Marginally Clever) | Sixi 3 DIY-kit 1.500 CAD (≈ 7.400 kr) | Sixi 3: 1 kg (5-akset) / 0,75 kg (6-akset). Sixi 2: mål 2 kg @ 80 cm | 5–6 | Sixi 2-filerne er open source. Datasheet og shop opgiver forskellig nyttelast | +| 5 | Seeed reBot-DevArm B601 | DM-version fra ~€1.120 (≈ 8.400 kr) | DM: 1,5 kg, RS: 2,5 kg | 6 | Fuld BOM og CAD er åben. Seeed anbefaler højst 70 % af rækkevidden ved fuld last | +| 6 | Annin Robotics AR4 MK5 | Kit ~$2.327 komplet (≈ 16.100 kr), selvbyg ~$2.000 | 1,9 kg (4,15 lb) | 6 | Aluminium, rækkevidde 629 mm, gratis manualer og software. Moden, "færdig" revision | +| 7 | PAROL6 (Source Robotics) | Kit €2.379 + print €476 (≈ 21.300 kr). Billigere ved selvsourcing fra BOM | 1 kg | 6 | GPLv3. Rækkevidde 400 mm, 0,08 mm repeterbarhed. Samlet pris €3.570 | +| 8 | PARA (Creative Machines Lab) | ~$3.400 (≈ 23.500 kr) | 2 kg @ 940 mm | 3 | Peer-reviewed (HardwareX 2021). Kun 3 akser, så ingen håndledsrotation | +| 9 | OpenArm 2.0 (Enactic) | Fra $6.500 (≈ 44.900 kr) | 4,1 kg nominelt, 6 kg peak | 7 | Nyttelasten er målt fuldt udstrakt i værste stilling. Prisen dækker muligvis 2 arme | +| 10 | Fenrir Arm (Verlab, UFMG) | Ukendt (Dynamixel-servoer, sandsynligvis dyrt) | 2 kg | ~5 | ROS1. Kode på GitHub, licens ikke oplyst | + +## Fravalgt (under 1 kg eller ikke open source) + +- **Thor (AngelLM):** Billig (< €350), men kun 750 g nyttelast. +- **BASIS (forskningsprojekt):** Målet var 1 kg, men testen gav kun 0,644 kg bevægelig last ved fuld rækkevidde. +- **Berkeley Blue:** 2 kg, men den er kommerciel/licenseret og ikke open source. +- **BCN3D Moveo, SO-100/101, Koch:** For lav nyttelast. + +## Projektkrav + +**Printer:** Anycubic Kobra S1 Combo (lukket CoreXY med ACE Pro til flere filamenter) + +Opgaverne: +1. **Fjerne byggepladen:** Printeren sænker pladen ned mod en anordning, der frigør den fra magneten. Armen skal derfor kun bære pladen, ikke trække den løs. +2. **Tømme pladen:** Armen flytter pladen hen over kassen, så emnet kommer ned i den (ved at vippe eller bøje pladen). +3. **Skifte filamentspoler på 1 kg** i ACE Pro. +4. **Platform til læring** og større projekter senere. + +## Vægtbudget + +| Opgave | Last | + let griber (~0,3 kg) | Krævet nyttelast (last ≤ 70–80 %) | +|--------|------|------------------------|-----------------------------------| +| Byggeplade + emne | 0,25–0,75 kg | 0,55–1,05 kg | ≥ 1,0–1,5 kg | +| Fuld spole (1 kg filament + spole 0,2–0,25 kg) | ~1,25 kg | ~1,55 kg | **≥ 2,0–2,5 kg** | + +Spoleskiftet er den tungeste opgave, så det er den, der bestemmer, hvilken arm der skal bruges. + +## Anbefaling + +1. **reBot B601-RS (2,5 kg):** Det bedste kompromis. Den har BLDC-motorer med encodere, så armen kan mærke modstand og belastning, og den passer godt til LeRobot og imitation learning. Den er en god indgang til større projekter. Prisen for RS-versionen er ikke bekræftet, men den ligger over DM-versionen (~€1.120). +2. **OpenArm 2.0 (4,1 kg):** Den mest kapable arm med masser af margin. 7 akser, kraftfeedback og et forskningsmiljø omkring den, men også den dyreste. +3. **AR4 MK5 (1,9 kg):** Moden og veldokumenteret, men grænsetilfælde til fulde spoler. Den kan klare opgaven ved rolig bevægelse tæt på basen. Den bruger steppere og har ingen kraftfeedback. +4. **PAROL6 / reBot B601-DM:** Kun nok til byggepladen. Ikke nok til fulde spoler. +5. **Sikkerhed:** Spol- og pladeopgaverne kræver ikke en 7-akset arm, men de stærkere BLDC-arme kan gøre skade. Planlæg nødstop og en afskærmet arbejdscelle fra start. + +## Praktiske udfordringer (uafhængigt af arm) + +- **At føre filamentet ind er sværere end at løfte spolen.** Filamentenden skal ind i ACE Pro's fremføringsindgang. Det kræver en griber med finmotorik eller en printet føringstragt. Overvej at lade armen nøjes med at lægge spolen i, og hjælpe ilægningen af filamentet på vej med en mekanisk guide. +- **Adgang til printeren:** Kobra S1 er lukket. Armen skal enten kunne åbne lågen, eller lågen skal afmonteres/automatiseres. Mål rækkevidden fra armens base til pladens bageste kant. +- **ACE Pro-låget:** Armen skal også kunne åbne og lukke låget, eller låget skal fjernes eller automatiseres. +- **Overkill?** Til pladen alene findes der enklere løsninger, f.eks. en dedikeret pladeskifter. Armen giver mening, fordi den både skifter spoler og fungerer som læringsplatform. + +## Kilder + +- PAROL6: [GitHub](https://github.com/PCrnjak/PAROL6-Desktop-robot-arm), [Hackster](https://hackster.io/news/petar-crnjak-s-parol6-is-an-industrial-style-robot-arm-you-can-print-and-build-at-home-366866022a7b), [Source Robotics kit](https://source-robotics.com/products/parol6-robotic-arm-kit) +- AR4 MK5: [Annin Robotics](https://www.anninrobotics.com/), [Hackster MK5](https://www.hackster.io/news/chris-annin-calls-the-open-source-ar4-robot-arm-done-with-the-new-final-mark-5-revision-62b51e0ae555), [Hackster review](https://www.hackster.io/news/is-the-annin-ar4-the-workhorse-robot-arm-for-you-6a26487fb517) +- OpenArm: [CNX Software](https://www.cnx-software.com/2026/09/30/openarm-2-0-an-open-source-7-dof-robot-arm-with-qdd-joints-bilateral-force-feedback-in-hand-camera/), [MyBotShop](https://www.mybotshop.de/OpenArm-Open-Source-Humanoid-Robot-Arm-by-Enactic_1), [Humanoid.guide](https://humanoid.guide/product/openarm-02/) +- reBot-DevArm: [OpenSourceForU](https://www.opensourceforu.com/?p=103512), [MyBotShop B601-DM](https://www.mybotshop.de/Seed-reBot-Arm-B601-DM-Assembled-Kit-with-Gripper-w-o-Power-supply) +- Faze4: [Docs](https://faze4-robotic-arm-docs.readthedocs.io/en/latest/About_faze4.html), [GitHub](https://github.com/PCrnjak/Faze4-Robotic-arm) +- Sixi: [Sixi 3 kit](https://www.marginallyclever.com/products/sixi-3-robot-arm-diy-kit), [Sixi 3 datasheet](https://www.marginallyclever.com/wp-content/uploads/2022/02/sixi3-datasheet.pdf), [Sixi 2 GitHub](https://github.com/MarginallyClever/sixi-2) +- PARA: [HardwareX](https://doaj.org/article/a6c707a165df42e7b1ddbd0709a7ff95), [Creative Machines Lab](https://www.creativemachineslab.com/para.html) +- OS-ARM: [DIYPhotography](https://www.diyphotography.net/the-os-arm-is-a-3d-printed-open-source-multi-axis-robot-arm-designed-for-use-with-cameras/) +- Arctos: [Hackster](https://hackster.io/news/arctos-robotics-aims-to-design-a-3d-printable-robot-arm-as-easy-as-building-lego-03559e924d70), [Arduino blog](https://blog.arduino.cc/?p=34636), [RobotShop](https://eu.robotshop.com/products/arctos-robotics-arctos-6-axis-diy-robotic-arm-hardware-v2-open-loop-kit-complete-non-printed-components-arduino-ros-ai-robotics-projects) +- Fenrir: [GitHub](https://github.com/verlab/Fenrir-Arm) +- Thor: [GitHub](https://github.com/AngelLM/Thor) +- Berkeley Blue: [IEEE Spectrum](https://spectrum.ieee.org/uc-berkeley-blue-low-cost-force-controlled-robot-arm) +- BASIS: [Society for Science](https://abstracts.societyforscience.org/Home/PrintPdf/24870)