STM32 Blackpill F411CE mikrodenetleyicisi üzerinde çalışan, USB-CDC seri haberleşme protokolü ile Python PyQt6 arayüzünden kontrol edilebilen 6 eksenli robot kol yazılımı.
| Bileşen | Adet | Açıklama |
|---|---|---|
| STM32 Blackpill F411CE | 1 | Ana mikrodenetleyici |
| Servo Motor | 6 | PWM kontrollü (50Hz) |
| 5V / 10A Güç Kaynağı | 1 | Servo motorlar için |
| USB-A to USB-C Kablo | 1 | STM32 bağlantısı ve programlama |
| Jumper Kablo | - | Sinyal ve GND bağlantıları |
| Yazılım | Sürüm | Amaç |
|---|---|---|
| VSCode | Güncel | IDE |
| PlatformIO Extension | Güncel | Firmware build & upload |
| Python | 3.8+ | GUI çalıştırma |
| PyQt6 | 6.6+ | GUI framework |
| PySerial | 3.5+ | Seri port haberleşmesi |
Gereksinimler: VSCode + PlatformIO Extension
# Projeyi aç
cd firmware/
# Bağımlılıkları indir ve derle
pio run
# STM32'yi USB'ye bağla (DFU modunda)
# Firmware'i yükle
pio run --target uploadDFU Modu: STM32'yi DFU modunda başlatmak için BOOT0 pinini 3.3V'a bağlarken RESET butonuna bas, sonra BOOT0'ı bırak.
cd gui/
# Sanal ortam oluştur
python3 -m venv venv
source venv/bin/activate # macOS / Linux
# venv\Scripts\activate # Windows
# Bağımlılıkları yükle
pip install -r requirements.txt
# GUI'yi başlat
python3 robot_arm_controller.pycd gui/
source venv/bin/activate
python3 setup.py py2app
# → dist/RoboArmController.apppython3 robot_arm_controller.pykomutunu çalıştır- Sol panelden USB seri portunu seç (macOS:
/dev/cu.usbmodem...) - Yenile (↻) butonuyla portları tara
- Bağlan butonuna tıkla
- S1–S6 slider'larını kullanarak servo açılarını ayarla
- Her kart altındaki Min / Max kutuları ile açı limitlerini belirle
| Buton | İşlev |
|---|---|
| ⌂ HOME (90°) | Tüm servoları 90°'ye (merkez) getirir |
| ↺ RESET | STM32'ye RESET komutu gönderir |
| ◈ STATUS | Tüm servo açılarını STM32'den okur ve ekrana yansıtır |
| Bağlantıyı Kes | Seri bağlantıyı kapatır |
# macOS/Linux — minicom veya screen ile
screen /dev/cu.usbmodem1101 115200
# Windows — PuTTY ile bağlan (COM port, 115200 baud)Komut sonuna Enter tuşuna bas. Detaylı komut listesi için Komut Referansı bölümüne bak.
| Komut | Açıklama | Örnek |
|---|---|---|
S<n>:<açı> |
n. servoyu belirtilen açıya ayarla | S1:90 |
ALL:<açı> |
Tüm servoları aynı açıya ayarla | ALL:90 |
STATUS |
Tüm servo açılarını raporla | STATUS |
RESET |
Tüm servoları 90°'ye döndür | RESET |
Parametre aralıkları:
n→ 1 ile 6 arasında (servo numarası)açı→ 0 ile 180 arasında (derece)
Yanıt formatları:
OK → Komut başarıyla işlendi
S1:90,S2:45,... → STATUS yanıtı
ERROR:Angle out of range → Açı sınır dışı
ERROR:Servo ID out of range → Geçersiz servo numarası
ERROR:Invalid command format → Format hatası
ERROR:Unknown command → Tanınmayan komut
Robo_Arm/
├── firmware/ # STM32 PlatformIO projesi
│ ├── platformio.ini
│ ├── src/
│ │ ├── main.cpp # setup() / loop()
│ │ └── servo_control.cpp # Servo + UART mantığı
│ ├── include/
│ │ └── servo_control.h # API tanımları
│ └── docs/
│ └── Robot_Arm_Roadmap.pdf
├── gui/ # Python PyQt6 arayüzü
│ ├── robot_arm_controller.py
│ ├── serial_handler.py
│ ├── setup.py # py2app .app bundle
│ └── requirements.txt
├── docs/ # Dokümantasyon
│ ├── README.md
│ ├── HARDWARE.md
│ ├── API_REFERENCE.md
│ └── TROUBLESHOOTING.md
└── .gitignore
Sorun giderme için TROUBLESHOOTING.md dosyasına bak.