Skip to content

Releases: bluerobotics/fillhead

v0.5.0

18 Mar 18:31

Choose a tag to compare

Message Cleanup

  • Fixed telemetry precision for force_motor_torque (%.1f -> %.2f) and press_threshold (%.1f -> %.2f) to match Pressboi wire format
  • Removed redundant "Error:" prefix from 23 injector error messages (was producing triple-prefixed FILLHEAD_ERROR: Injector: Error: ... on wire)
  • Added trailing periods to 18 error messages across fillhead.cpp, injector_controller.cpp, and heater_controller.cpp for consistency
  • Fixed ambiguous valve gate message: "Injector valve is not homed and open" -> "Injection valve must be homed and open"

Definition Updates

  • Fixed telemetry.json: joules help text now uses × (multiplication sign) matching Pressboi; added pin references (DI7)/(DI6) to home sensor help text

v0.4.0

18 Mar 17:57

Choose a tag to compare

Pressboi Parity (Telemetry)

  • Added torque_avg (wire key ta) to firmware telemetry — average of M0/M1 torque, matching Pressboi's torque_avg field
  • Added combined homed flag (wire key hm) to firmware telemetry — 1 when both machine and cartridge homing are complete, matching Pressboi's single homed field

Telemetry Key Mapping

  • Added firmware_key field to all telemetry.json entries where the firmware wire key differs from the canonical name (e.g. force_load_cellflc, current_poscp)
  • Added derived_from annotations for fields computed on the app side (motors_enabled, force_source)

Documentation

  • Added transducer/ folder with HX711 load cell interface documentation (README.md) and Ruggeduino Arduino sketch (hx711_arduino.ino)

v0.3.0

18 Mar 17:47

Choose a tag to compare

ForceSensor Port (CRITICAL)

  • Ported ForceSensor class from Pressboi (force_sensor.h/force_sensor.cpp) — HX711 load cell via Rugeduino on COM-0
  • Added ForceSensor m_forceSensor as public member on Fillhead; Injector accesses via m_controller->m_forceSensor
  • Fixed checkForceSensorStatus() stub — now checks isConnected() and validates force range (-10 to 1440 kg)
  • Wired updateJoules() to real load cell data (was hardcoded 0.0f)
  • Wired getTelemetryString() force_load_cell and force_adc_raw to real sensor readings
  • Uncommented and wired STATE_MOVING force limit check to m_forceSensor.getForce()
  • Fixed pre-move force check in moveAbsolute()/moveIncremental() for load cell hold action
  • Implemented CMD_SET_FORCE_ZERO, CMD_SET_FORCE_OFFSET, CMD_SET_FORCE_SCALE for load cell mode (were returning errors)
  • Changed default force mode from motor_torque to load_cell
  • NVM slots 0-1 now used by ForceSensor for load cell offset/scale calibration

Inject Command Rework (MAJOR)

  • Merged inject_stator and inject_rotor into single inject command
  • New signature: inject <volume_ml> [speed_ml_s] [force_limit_kg] [force_action]
  • Added set_cartridge_ml_per_mm command — NVM-persisted cartridge ratio (slot 18) replaces hardcoded piston diameter constants
  • Default ratio 5.2732 ml/mm (computed from legacy 75+33mm stator pistons)
  • Removed STATOR_PISTON_A/B_DIAMETER_MM and ROTOR_PISTON_A/B_DIAMETER_MM from config.h; replaced with DEFAULT_CARTRIDGE_ML_PER_MM
  • Added full force limit system to STATE_FEEDING with configurable action (retract/hold/skip/abort) — detects cartridge bottom

Bug Fixes

  • Extended reset_nvm to clear slots 0-18 (was 0-15); now covers valve home-on-boot flags and cartridge ratio
  • Fixed pressboi.set_strain_calfillhead.set_strain_cal in press_report.html (done in prior session)

Definition Cleanup

  • Removed 7 duplicate/dead C++ files from definition/ (commands.h, command_parser.cpp/h, events.h, responses.h, telemetry.h/cpp)
  • Removed ../definition from compiler include paths in fillhead.cppproj
  • definition/ now contains only JSON schemas and Python files

Definition Updates

  • Updated commands.json: replaced inject_stator/inject_rotor with inject (4 params) and set_cartridge_ml_per_mm
  • Updated simulator.py: new inject and set_cartridge_ml_per_mm handlers; added cartridge_ml_per_mm to default state

v0.2.0

18 Mar 16:06

Choose a tag to compare

Pinch Valve Homing

  • Replaced torque-based homing with hall sensor homing (open-side sensor, negative direction); states: CHECK_SENSOR → RAPID_APPROACH → BACKOFF → SLOW_APPROACH → SET_ZERO
  • Handles already-on-sensor edge case by skipping to backoff
  • Added per-valve home_on_boot NVM flags (default enabled); removed all tubed/untubed homing variants and torque-based logic
  • Added home_sensor field to pinch valve telemetry

Safety

  • Light curtain on IO4 checked every loop under watchdog; beam break aborts all motion → STATE_ERROR, blocks reset while obstructed
  • Added lc telemetry field (1=tripped, 0=clear) and compile-time LIGHT_CURTAIN_ENABLED toggle

Configuration

  • Light curtain pins/config: PIN_LIGHT_CURTAIN (IO4), LIGHT_CURTAIN_ACTIVE_STATE, LIGHT_CURTAIN_FILTER_MS
  • Hall sensor pins: HOME_SENSOR_M2 (DI8, vacuum valve), HOME_SENSOR_M3 (A9, injection valve)
  • Pinch homing constants: PINCH_HOMING_STROKE_MM, PINCH_HOMING_RAPID_VEL_MMS, PINCH_HOMING_SLOW_VEL_MMS, PINCH_HOMING_ACCEL_MMSS, PINCH_HOMING_BACKOFF_MM
  • NVM slots: NVM_SLOT_INJ_VALVE_HOME_ON_BOOT, NVM_SLOT_VAC_VALVE_HOME_ON_BOOT; removed old PINCH_HOMING_TUBED_*/PINCH_HOMING_UNTUBED_* constants
  • Replaced vacuum transducer with XP5-080-01 (compound, -101–100 kPa, 1-5V); updated VAC_PRESSURE_MIN → -14.65, VAC_PRESSURE_MAX → 14.50 PSIG

Commands

  • Added injection_valve_home_on_boot / vacuum_valve_home_on_boot (NVM, true/false); removed *_home_tubed / *_home_untubed variants
  • Updated commands.json schema for GUI/simulator alignment

Bug Fixes

  • Fixed valve auto-homing not firing when press home_on_boot was disabled (delay timer now starts when any homing is pending)
  • Fixed simulator valve state after homing ('Open' instead of 'Homed')

GUI

  • Created definition/gui.py standalone panel module with create_gui_components() entry point
  • Sections: press (force w/ source, position current→target, retract, homed/polarity/motor, energy, endpoint/startpoint), injector (state, home positions, volumes), valves (compact row: state/position/torque bar), vacuum & heater (state w/ ON/OFF color, pressure, temp w/ setpoint)
  • Force vs Position graph: live-updating canvas with auto-scaling and clear button
  • Helpers: make_homed_tracer, make_state_tracer, make_on_off_tracer, make_force_tracer, make_heater_value_tracer, make_vacuum_value_tracer, make_unit_stripper
  • Widget factories: create_torque_widget (vertical progress bar), create_device_frame (bordered card w/ header, state, IP)
  • get_gui_variable_names() declares all required tkinter variables for telemetry binding

Simulator

  • Updated valve homing simulation: removed tubed/untubed, added home_on_boot handling, added inj_valve_home_sensor/vac_valve_home_sensor to telemetry