A native Qt application for controlling pan and tilt servos for the FAC1 Camera. Ported from the macOS version to Linux with Flatpak distribution support.
- Automatic USB-Serial Detection: Automatically finds and connects to USB-serial devices
- Dual Servo Control: Controls pan and tilt servos (IDs: pan=6, tilt=4)
- Connection Status: Detailed status reporting for USB and individual servo connections
- Calibration: Calibrate the center point of the servos and toggle axis inversion
- Always on Top: Optional window mode to keep the controller always visible
- Minimal Interface: Simple arrow button controls (↑ ↓ o ← →)
- Linux (tested on Ubuntu/Debian-based distributions)
- Qt6 (Widgets)
- USB-to-serial adapter
- FAC1 Camera with Feetech STS servos
- CMake 3.16+
- C++17 compiler
Ubuntu/Debian:
sudo apt-get install build-essential cmake qt6-base-devFedora:
sudo dnf install gcc-c++ cmake qt6-qtbase-develArch:
sudo pacman -S base-devel cmake qt6-base# Clone this repository
git clone https://github.com/FyrbyAdditive/FAC1-Controller-Linux.git
cd FAC1-Controller-Linux
# Clone the SCServo_Linux library (patched version)
git clone https://github.com/FyrbyAdditive/SCServo_Linux.git
# Build
mkdir build && cd build
cmake ..
make
# Run
./FAC1Controller# Run the build script
./build-flatpak.shThis creates FAC1Controller.flatpak - a single-file bundle you can distribute.
Install and run:
flatpak install FAC1Controller.flatpak
flatpak run com.fyrbyadditive.FAC1Controller# Install flatpak and flatpak-builder
sudo apt-get install flatpak flatpak-builder
# Add Flathub repository
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Install KDE runtime
flatpak install flathub org.kde.Platform//6.7 org.kde.Sdk//6.7
# Build the Flatpak with repository
flatpak-builder --repo=repo --force-clean build-dir com.fyrbyadditive.FAC1Controller.yml
# Create single-file bundle
flatpak build-bundle repo FAC1Controller.flatpak com.fyrbyadditive.FAC1Controller
# Or install locally for development
flatpak-builder --user --install --force-clean build-dir com.fyrbyadditive.FAC1Controller.yml
# Run the Flatpak
flatpak run com.fyrbyadditive.FAC1Controller- Connect your USB-to-serial adapter
- Power on your servos
- Launch the application
- The app will automatically search for and connect to available USB-serial ports
- ↑ (Up Arrow): Tilt up
- ↓ (Down Arrow): Tilt down
- O (Circular Button): Center Camera
- ← (Left Arrow): Pan left
- → (Right Arrow): Pan right
- Pan Servo ID: Hardcoded to ID 6
- Tilt Servo ID: Hardcoded to ID 4
- Always on Top: Check to keep the window always visible
- Reconnect/Disconnect: Manually control USB-serial connection
Use the "Calibration" menu to:
- Calibrate Center Position: Set the current position as the center point
- Invert Pan: Reverse the pan direction
- Invert Tilt: Reverse the tilt direction
The application uses the following servo settings:
- Pan Servo ID: 6 (hardcoded)
- Tilt Servo ID: 4 (hardcoded)
- Baud Rate: 1,000,000
- Protocol: STS series (STS3250)
- Movement Step: 100 units per button press
- Speed: 200
- Acceleration: 50
- Position Range: 0 - 4095 (full 360°)
Servo IDs can be changed in src/ServoController.cpp if needed.
- Check that servos are powered on
- Verify USB-serial adapter is connected
- Make sure servo IDs match the configured values
- Click "Reconnect" to retry connection
On Linux, you may need to add your user to the dialout group:
sudo usermod -a -G dialout $USERLog out and log back in for the changes to take effect.
Alternatively, you can use udev rules. Create /etc/udev/rules.d/99-usb-serial.rules:
SUBSYSTEM=="tty", ATTRS{idVendor}=="YOUR_VENDOR_ID", MODE="0666"
Then reload udev rules:
sudo udevadm control --reload-rules
sudo udevadm triggerls /dev/ttyUSB* /dev/ttyACM*This project uses the SCServo_Linux library by Aditya Kamath for servo communication.
Original macOS version: FAC1-Controller-macOS
Copyright 2025, Timothy Ellis, Fyrby Additive Manufacturing & Engineering

