ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° AccelStepper.h β ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π³ΠΎΠ²ΡΠΌΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΡΠΌΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
Π½Π° Arduino, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΠ»Π°Π²Π½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅/Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅, ΡΠΎΡΠ½ΠΎΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Stepper.h, ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΡΠΌΠΈ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡΠΎ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ±ΠΎΡΠΎΡΠ΅Ρ
Π½ΠΈΠΊΠΈ, 3D-ΠΏΡΠΈΠ½ΡΠ΅ΡΠΎΠ² ΠΈ CNC-ΡΡΠ°Π½ΠΊΠΎΠ².
ΠΡΠ»ΠΈ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ ΡΡΠ²ΠΊΠ°ΠΌΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅/ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈΠ»ΠΈ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ΡΡ Π² ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΡΡ
Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ β AccelStepper ΡΡΠ°Π½Π΅Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎΠΌ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, A4988, DRV8825, TMC2208) ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΆΠΈΠΌΡ FULL_STEP, HALF_STEP, MICROSTEP. ΠΠ΄Π½Π°ΠΊΠΎ Π΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠΊΠΎΡΠΎΡΡΡ (setMaxSpeed()) ΠΈ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ (setAcceleration()).
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΡΠΌ:
- π§ ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΠ΅ΡΠ΅Π΄ Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ
- π ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π²
- βοΈ Π’ΠΎΠ½ΠΊΠΎΡΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ, ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΈ ΠΌΠΈΠΊΡΠΎΡΠ°Π³ΠΎΠ²
- β οΈ Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ
1. Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ AccelStepper.h ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΎΠ½Π° Π½ΡΠΆΠ½Π°?
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° AccelStepper.h Π±ΡΠ»Π° ΡΠΎΠ·Π΄Π°Π½Π° ΠΠ°ΠΉΠΊΠΎΠΌ ΠΠ°ΠΊΠΊΠΎΡΠ½ΠΎΠΌ (Mike McCauley) ΠΊΠ°ΠΊ ΠΎΡΠ²Π΅Ρ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Stepper.h. ΠΠ»Π°Π²Π½ΠΎΠ΅ Π΅Ρ ΠΎΡΠ»ΠΈΡΠΈΠ΅ β ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π³ΠΎΠ½Π°/ΡΠΎΡΠΌΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΏΡΡΠΊ ΡΠ°Π³ΠΎΠ² ΠΏΡΠΈ ΡΠ΅Π·ΠΊΠΈΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ
ΡΠΊΠΎΡΠΎΡΡΠΈ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ:
- π€ Π ΠΎΠ±ΠΎΡΠΎΡΠ΅Ρ Π½ΠΈΠΊΠΈ: ΡΠΎΡΠ½ΡΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΎΡΠΎΠ²
- π¨οΈ 3D-ΠΏΡΠΈΠ½ΡΠ΅ΡΠΎΠ²: ΠΏΠ»Π°Π²Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΡΡΡΡΠ΄Π΅ΡΠ°
- π¨ CNC-ΡΡΠ°Π½ΠΊΠΎΠ²: ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π²ΠΈΠ±ΡΠ°ΡΠΈΠΉ ΠΏΡΠΈ ΡΡΠ΅Π·Π΅ΡΠΎΠ²ΠΊΠ΅
- ποΈ ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ: ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ, ΠΏΠΎΠ²ΠΎΡΠΎΡΠ½ΡΠ΅ ΡΡΠΎΠ»Ρ
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
- π ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ: Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½Π΅ "Π·Π°ΠΌΠΎΡΠ°ΠΆΠΈΠ²Π°Ρ"
loop() - π ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ: Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ (ΡΠ΅ΡΠ΅Π·
setAcceleration()) - π ΠΠΈΠ±ΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ: ΡΠ°Π±ΠΎΡΠ° Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°ΠΌΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅
STEP/DIRΠΈΠ»ΠΈ ΠΏΡΡΠΌΡΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΡΡΡΠΊΠ°ΠΌΠΈ - π’ ΠΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ: Π΄ΠΎ 10 Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠ°ΠΌΡΡΠΈ)
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ΡΠ²ΠΎΠΏΡΠΈΠ²ΠΎΠ΄Ρ β ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π³ΠΎΠ²ΡΠ΅ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΠΈ. ΠΠ»Ρ ΡΠ΅ΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅Servo.hΠΈΠ»ΠΈESP32Servo.h.
- 3D-ΠΏΡΠΈΠ½ΡΠ΅Ρ
- CNC-ΡΡΠ°Π½ΠΎΠΊ
- Π ΠΎΠ±ΠΎΡ
- ΠΠΎΠΌΠ°ΡΠ½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ
- ΠΡΡΠ³ΠΎΠΉ
2. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ AccelStepper.h ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ΅ΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
- Π§Π΅ΡΠ΅Π· Arduino IDE:
- ΠΡΠΊΡΠΎΠΉΡΠ΅
Π‘ΠΊΠ΅ΡΡ β ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ β Π£ΠΏΡΠ°Π²Π»ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ - Π ΠΏΠΎΠΈΡΠΊΠ΅ Π²Π²Π΅Π΄ΠΈΡΠ΅
AccelStepper - ΠΡΠ±Π΅ΡΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡ ΠΎΡ Mike McCauley ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ
- ΠΡΠΊΡΠΎΠΉΡΠ΅
- ΠΡΡΡΠ½ΡΡ:
- Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ZIP-Π°ΡΡ ΠΈΠ² Ρ GitHub
- Π Π°ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ Π² ΠΏΠ°ΠΏΠΊΡ
~/Documents/Arduino/libraries/(Windows/Linux) ΠΈΠ»ΠΈ/ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡ/Arduino/libraries/(macOS) - ΠΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Arduino IDE
- Π§Π΅ΡΠ΅Π· PlatformIO:
lib_deps =adafruit/AccelStepper @ ^1.61
ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ:
#include <AccelStepper.h>
// ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠΈΠ½Ρ Π΄Π»Ρ STEP ΠΈ DIR
#define STEP_PIN 2
#define DIR_PIN 3
// Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ (ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ DRIVER Π΄Π»Ρ A4988/DRV8825)
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
stepper.setMaxSpeed(1000); // ΠΠ°ΠΊΡ. ΡΠΊΠΎΡΠΎΡΡΡ, ΡΠ°Π³/ΡΠ΅ΠΊ
stepper.setAcceleration(500); // Π£ΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅, ΡΠ°Π³/ΡΠ΅ΠΊΒ²
}
void loop() {
stepper.moveTo(200); // Π¦Π΅Π»Π΅Π²Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ
stepper.run(); // ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
}
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ Π²ΡΠ°ΡΠ°Π΅ΡΡΡ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅:
- ΠΠΎΠ»ΡΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
DIR(ΠΏΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄Π°, Π΅ΡΠ»ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅)- Π£ΡΠΎΠ²Π½ΠΈ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, DRV8825 ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
VREF)- ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΡΡ ΠΌΠΎΡΠ½ΠΎΡΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΏΠΈΡΠ°Π½ΠΈΡ (ΡΠ°Π³ΠΎΠ²ΡΠ΅ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΠΈ ΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡ Π΄ΠΎ 2Π Π½Π° ΡΠ°Π·Ρ)
3. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ 30 ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π½ΠΎ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π·Π°Π΄Π°Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ 5β7 ΠΊΠ»ΡΡΠ΅Π²ΡΡ . Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ:
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ |
|---|---|---|
setMaxSpeed() |
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ (ΡΠ°Π³/ΡΠ΅ΠΊ). ΠΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΏΡΠΎΠΏΡΡΠΊΡ ΡΠ°Π³ΠΎΠ². | stepper.setMaxSpeed(2000); |
setAcceleration() |
ΠΠ°Π΄Π°ΡΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ (ΡΠ°Π³/ΡΠ΅ΠΊΒ²). ΠΠ»ΠΈΡΠ΅Ρ Π½Π° ΠΏΠ»Π°Π²Π½ΠΎΡΡΡ ΡΡΠ°ΡΡΠ°/ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ. | stepper.setAcceleration(1000); |
moveTo() |
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΡ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ (ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠ»Ρ). | stepper.moveTo(500); |
move() |
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ (ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ). | stepper.move(-100); // ΠΠ° 100 ΡΠ°Π³ΠΎΠ² Π½Π°Π·Π°Π΄ |
run() |
ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π³ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ (Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² loop()). |
stepper.run(); |
ΠΠ»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΡΠ΄Π΅Π»Π°Π» 3 ΠΎΠ±ΠΎΡΠΎΡΠ° Π²ΠΏΠ΅ΡΠ΅Π΄ ΠΈ 2 Π½Π°Π·Π°Π΄ Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ:
stepper.moveTo(600); // 3 ΠΎΠ±ΠΎΡΠΎΡΠ° (200 ΡΠ°Π³ΠΎΠ²/ΠΎΠ±ΠΎΡΠΎΡ)
while (stepper.distanceToGo() != 0) {
stepper.run();
}
stepper.moveTo(-400); // 2 ΠΎΠ±ΠΎΡΠΎΡΠ° Π½Π°Π·Π°Π΄
while (stepper.distanceToGo() != 0) {
stepper.run();
}
ΠΠ»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ stepper.currentPosition() β ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π² ΡΠ°Π³Π°Ρ
, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠ΅Π»Ρ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠ°.
4. Π Π΅ΠΆΠΈΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ 4 ΡΠΈΠΏΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π΄Π°ΡΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° AccelStepper:
- π
AccelStepper::DRIVERβ Π΄Π»Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ² Ρ Π²Ρ ΠΎΠ΄Π°ΠΌΠΈSTEP/DIR(A4988, DRV8825, TMC2208). Π‘Π°ΠΌΡΠΉ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. - π
AccelStepper::FULL2WIREβ Π΄Π»Ρ Π±ΠΈΠΏΠΎΠ»ΡΡΠ½ΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Π΅ΠΉ Ρ 2 ΠΏΡΠΎΠ²ΠΎΠ΄Π°ΠΌΠΈ Π½Π° ΠΊΠ°ΡΡΡΠΊΡ (ΡΠ΅ΠΆΠΈΠΌΡFULL_STEPΠΈΠ»ΠΈHALF_STEP). - π
AccelStepper::FULL3WIREβ Π΄Π»Ρ ΡΠ½ΠΈΠΏΠΎΠ»ΡΡΠ½ΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Π΅ΠΉ Ρ 3 ΠΏΡΠΎΠ²ΠΎΠ΄Π°ΠΌΠΈ (ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ). - π
AccelStepper::FULL4WIREβ Π΄Π»Ρ Π±ΠΈΠΏΠΎΠ»ΡΡΠ½ΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Π΅ΠΉ Ρ 4 ΠΏΡΠΎΠ²ΠΎΠ΄Π°ΠΌΠΈ (ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΊΠ°ΡΡΡΠ΅ΠΊ).
ΠΡΠΈΠΌΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²:
// 1. ΠΠ»Ρ DRV8825 (ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ DRIVER)
AccelStepper stepper1(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
// 2. ΠΠ»Ρ Π±ΠΈΠΏΠΎΠ»ΡΡΠ½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Ρ 4 ΠΏΡΠΎΠ²ΠΎΠ΄Π°ΠΌΠΈ (FULL4WIRE)
AccelStepper stepper2(AccelStepper::FULL4WIRE, IN1_PIN, IN2_PIN, IN3_PIN, IN4_PIN);
// 3. ΠΠ»Ρ ΡΠ½ΠΈΠΏΠΎΠ»ΡΡΠ½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ (FULL3WIRE)
AccelStepper stepper3(AccelStepper::FULL3WIRE, IN1_PIN, IN2_PIN, IN3_PIN, IN4_PIN);
ΠΠ»Ρ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² FULL4WIRE ΠΈ FULL2WIRE ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΡΠΈΠΏ ΠΌΠΈΠΊΡΠΎΡΠ°Π³Π° ΡΠ΅ΡΠ΅Π· setPinsInverted():
stepper.setPinsInverted(false, false, true); // ΠΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΠΌ 3-ΠΉ ΠΏΠΈΠ½
ΠΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ?
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΡΠ°ΠΉΠ²Π΅Ρ (A4988, DRV8825, TMC2208), Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ AccelStepper::DRIVER. ΠΠ»Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ°ΡΡΡΠΊΠ°ΠΌΠΈ (Π±Π΅Π· Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ FULL4WIRE ΠΈΠ»ΠΈ FULL2WIRE, Π½ΠΎ ΡΡΡΠΈΡΠ΅, ΡΡΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π½Π΅ΡΠ½ΠΈΡ
ΡΡΠ°Π½Π·ΠΈΡΡΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠΊΠΎΠΌ.
5. ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ
Π§Π°ΡΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ AccelStepper.h ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
- π₯ ΠΠ²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅Π³ΡΠ΅Π²Π°Π΅ΡΡΡ:
- Π£ΠΌΠ΅Π½ΡΡΠΈΡΠ΅ ΡΠΎΠΊ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° (Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
VREFΠ½Π° DRV8825) - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°Π΄ΠΈΠ°ΡΠΎΡΡ ΠΈΠ»ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΡ Π»Π°ΠΆΠ΄Π΅Π½ΠΈΠ΅
- ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, Π½Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ Π»ΠΈ Π²Π°Π» ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΈ
- Π£ΠΌΠ΅Π½ΡΡΠΈΡΠ΅ ΡΠΎΠΊ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° (Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
- π’ ΠΠ²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π΄Π²ΠΈΠΆΠ΅ΡΡΡ ΡΡΠ²ΠΊΠ°ΠΌΠΈ:
- Π£Π²Π΅Π»ΠΈΡΡΡΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ (
setAcceleration()) - ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΠΈΡΠ°Π½ΠΈΠ΅: ΡΠ°Π³ΠΎΠ²ΡΠ΅ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΠΈ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Ρ ΠΊ ΠΏΡΠΎΡΠ°Π΄ΠΊΠ°ΠΌ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠ½Π΄Π΅Π½ΡΠ°ΡΠΎΡΡ 100β470 ΠΌΠΊΠ€ ΡΡΠ΄ΠΎΠΌ Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠΌ
- Π£Π²Π΅Π»ΠΈΡΡΡΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ (
- π ΠΠ²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΡΠΎΡΠΎΠ½Ρ:
- ΠΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄Π°
DIRΠΈΠ»ΠΈ ΠΈΠ½Π²Π΅ΡΡΠΈΡΡΠΉΡΠ΅ ΡΠΈΠ³Π½Π°Π»:stepper.setPinsInverted(true, false, false); - ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠ½ΠΎΡΡΡ ΠΎΠ±ΠΌΠΎΡΠΎΠΊ (Π΄Π»Ρ
FULL4WIRE)
- ΠΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄Π°
ΠΠ»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ:
- π§ ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΡ: ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅
stepper.run()Π½Π°stepper.runSpeedToPosition()Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ. - β‘ ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠΉΡΠ΅
loop(): ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΡΡΠΆΠ΅Π»ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π²Π½ΡΡΡΠΈ ΡΠΈΠΊΠ»Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Π΅ΠΌ. - π‘ Π£ΠΌΠ΅Π½ΡΡΠΈΡΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ: ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅
delay(), Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π°millis()Π΄Π»Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ.
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ STEP/DIR ΠΊ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ|ΠΠ°ΡΡΡΠΎΠ΅Π½ VREF Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ΅|ΠΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Arduino|ΠΡΠΎΠ²Π΅ΡΠ΅Π½Π° ΠΏΠΎΠ»ΡΡΠ½ΠΎΡΡΡ ΠΎΠ±ΠΌΠΎΡΠΎΠΊ|Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΊΠΎΠ½Π΄Π΅Π½ΡΠ°ΡΠΎΡΡ ΡΠΈΠ»ΡΡΡΠ°
-->
6. ΠΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ: ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² AccelStepper.h ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ:
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
AccelStepper:AccelStepper steppers[] = {AccelStepper(AccelStepper::DRIVER, STEP1, DIR1),
AccelStepper(AccelStepper::DRIVER, STEP2, DIR2)
};
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
MultiStepperΠ΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ:#include <MultiStepper.h>MultiStepper multi;
void setup() {
multi.addStepper(steppers[0]);
multi.addStepper(steppers[1]);
long positions[2] = {100, -100}; // ΠΠΎΠ·ΠΈΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
multi.moveTo(positions);
}
void loop() {
multi.run(); // Π£ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΠ΅ΠΌΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ
}
ΠΠ»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ±ΠΎΡΠ°-Π‘ΠΊΠΎΡΠΏΠΈΠΎΠ½Π°) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΈΠ½Π΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ:
- π ΠΡΡΠΌΠ°Ρ ΠΊΠΈΠ½Π΅ΠΌΠ°ΡΠΈΠΊΠ°: Π Π°ΡΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΠΏΠΎ ΡΠ³Π»Π°ΠΌ ΡΠ΅ΡΠ²ΠΎΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠ².
- π ΠΠ±ΡΠ°ΡΠ½Π°Ρ ΠΊΠΈΠ½Π΅ΠΌΠ°ΡΠΈΠΊΠ°: ΠΡΡΠΈΡΠ»ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°Π³ΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠΎΡΠΊΠΈ.
ΠΠ»Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΎΡΠ΅ΠΉ Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ MultiStepper β ΡΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΠΈ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ ΡΠ΅Π»Π΅Π²ΡΡ
ΠΏΠΎΠ·ΠΈΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π±Π΅Π· ΡΠ°ΡΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
7. ΠΡΠΈΠΌΠ΅ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ AccelStepper.h
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ 3 ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΡΡ Π΅ΠΌΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ:
ΠΡΠΈΠΌΠ΅Ρ 1: Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ½ΠΎΠΉ Π»Π΅Π½ΡΠΎΠΉ
ΠΠ°Π΄Π°ΡΠ°: Π»Π΅Π½ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π²ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡΡ 500 ΡΠ°Π³/ΡΠ΅ΠΊ, ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎ ΡΠΈΠ³Π½Π°Π»Ρ ΠΎΡ Π΄Π°ΡΡΠΈΠΊΠ° (IR-ΡΠ΅Π½ΡΠΎΡΠ°).
#include <AccelStepper.h>
#define STEP_PIN 2
#define DIR_PIN 3
#define SENSOR_PIN 4
AccelStepper conveyor(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
pinMode(SENSOR_PIN, INPUT_PULLUP);
conveyor.setMaxSpeed(500);
conveyor.setAcceleration(200);
conveyor.moveTo(10000); // ΠΠ»ΠΈΠ½Π½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
}
void loop() {
if (digitalRead(SENSOR_PIN) == LOW) {
conveyor.stop(); // ΠΠΊΡΡΡΠ΅Π½Π½Π°Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
}
conveyor.run();
}
ΠΡΠΈΠΌΠ΅Ρ 2: 3D-ΠΏΡΠΈΠ½ΡΠ΅Ρ (ΠΎΡΡ X)
ΠΠ°Π΄Π°ΡΠ°: ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΡΡΡΡΠ΄Π΅ΡΠ° Π½Π° 50 ΠΌΠΌ Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ 1000 ΡΠ°Π³/ΡΠ΅ΠΊΒ² (ΡΠ°Π³ ΡΠ΅ΠΌΠ½Ρ 1.8Β° Ρ ΠΌΠΈΠΊΡΠΎΡΠ°Π³ΠΎΠΌ 1/16).
#include <AccelStepper.h>
#define STEPS_PER_MM 80 // Π¨Π°Π³ΠΎΠ² Π½Π° ΠΌΠΌ (Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠΈ)
#define DISTANCE 50 // Π Π°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π² ΠΌΠΌ
AccelStepper xAxis(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
xAxis.setMaxSpeed(200 * STEPS_PER_MM); // 200 ΠΌΠΌ/ΡΠ΅ΠΊ
xAxis.setAcceleration(1000 * STEPS_PER_MM);
xAxis.move(DISTANCE * STEPS_PER_MM);
}
void loop() {
xAxis.run();
}
ΠΡΠΈΠΌΠ΅Ρ 3: ΠΠΎΠ²ΠΎΡΠΎΡΠ½ΡΠΉ ΡΡΠΎΠ» Π΄Π»Ρ ΡΠΎΡΠΎΡΡΡΠΌΠΊΠΈ
ΠΠ°Π΄Π°ΡΠ°: ΠΏΠ»Π°Π²Π½ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ Π½Π° 360Β° Π·Π° 60 ΡΠ΅ΠΊΡΠ½Π΄ Ρ ΡΠΈΠΊΡΠ°ΡΠΈΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ.
#include <AccelStepper.h>
#define STEPS_PER_DEGREE 1600 / 360 // ΠΠ»Ρ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ 1.8Β° Ρ 1/16 ΠΌΠΈΠΊΡΠΎΡΠ°Π³ΠΎΠΌ
AccelStepper turntable(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
turntable.setMaxSpeed(10 * STEPS_PER_DEGREE); // 10Β°/ΡΠ΅ΠΊ
turntable.setAcceleration(5 * STEPS_PER_DEGREE);
turntable.move(360 * STEPS_PER_DEGREE); // ΠΠΎΠ»Π½ΡΠΉ ΠΎΠ±ΠΎΡΠΎΡ
}
void loop() {
static bool isMoving = true;
if (isMoving && turntable.distanceToGo() == 0) {
isMoving = false;
delay(2000); // ΠΠ°ΡΠ·Π° Π΄Π»Ρ ΡΡΡΠΌΠΊΠΈ
turntable.move(-360 * STEPS_PER_DEGREE); // ΠΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΎΠ±ΠΎΡΠΎΡ
isMoving = true;
}
turntable.run();
}
Π§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ (FAQ)
β ΠΠ°ΠΊ ΡΠ°ΡΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π³ΠΎΠ² Π½Π° ΠΌΠΈΠ»Π»ΠΈΠΌΠ΅ΡΡ Π΄Π»Ρ ΠΌΠΎΠ΅Π³ΠΎ 3D-ΠΏΡΠΈΠ½ΡΠ΅ΡΠ°?
Π€ΠΎΡΠΌΡΠ»Π°:
ΡΠ°Π³ΠΈ_Π½Π°_ΠΌΠΌ = (ΡΠ°Π³ΠΈ_Π½Π°_ΠΎΠ±ΠΎΡΠΎΡ_Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ * ΠΌΠΈΠΊΡΠΎΡΠ°Π³) / (ΡΠ°Π³_ΡΠ΅ΠΌΠ½Ρ_ΠΌΠΌ * ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ_Π·ΡΠ±ΡΠ΅Π²_ΡΠ΅ΡΡΠ΅ΡΠ½ΠΈ)
ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ GT2-ΡΠ΅ΠΌΠ½Ρ (ΡΠ°Π³ 2 ΠΌΠΌ, 20 Π·ΡΠ±ΡΠ΅Π² Π½Π° ΡΠ΅ΡΡΠ΅ΡΠ½Π΅) ΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ NEMA17 (200 ΡΠ°Π³ΠΎΠ²/ΠΎΠ±ΠΎΡΠΎΡ, 1/16 ΠΌΠΈΠΊΡΠΎΡΠ°Π³):
(200 * 16) / (2 * 20) = 80 ΡΠ°Π³/ΠΌΠΌ
β ΠΠΎΡΠ΅ΠΌΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°Π³ΠΈ ΠΏΡΠΈ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ?
ΠΡΠΈΡΠΈΠ½Ρ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
- π ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ΅ ΠΏΠΈΡΠ°Π½ΠΈΠ΅: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Ρ ΡΠΎΠΊΠΎΠΌ β₯2Π Π½Π° ΡΠ°Π·Ρ.
- β‘ Π‘Π»ΠΈΡΠΊΠΎΠΌ Π²ΡΡΠΎΠΊΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅: Π£ΠΌΠ΅Π½ΡΡΠΈΡΠ΅
setAcceleration()Π² 2β3 ΡΠ°Π·Π°. - π§ ΠΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΠ΅: ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠΌΠ°Π·ΠΊΡ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΈ ΡΠΎΠΎΡΠ½ΠΎΡΡΡ Π²Π°Π»ΠΎΠ².
- π‘ ΠΠ»Π΅ΠΊΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠΌΠ΅Ρ ΠΈ: ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠ½Π΄Π΅Π½ΡΠ°ΡΠΎΡΡ 100 Π½Π€ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΠΎΠ±ΠΌΠΎΡΠΊΠ°ΠΌ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ.
β ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ AccelStepper.h Π½Π° ESP32?
ΠΠ°, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Ρ ESP32, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ:
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΠ΅Π· PlatformIO ΠΈΠ»ΠΈ ΡΡΡΠ½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ (Π² Arduino IDE Π΄Π»Ρ ESP32 ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ).
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ
ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ² Π΄Π»Ρ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π³Π°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
hw_timer_t).
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ESP32:
#include <AccelStepper.h>
AccelStepper stepper(AccelStepper::DRIVER, 25, 26); // GPIO25=STEP, GPIO26=DIR
void IRAM_ATTR onTimer() {
stepper.run();
}
void setup() {
hw_timer_t *timer = timerBegin(0, 80, true); // Π’Π°ΠΉΠΌΠ΅Ρ 0, ΠΏΡΠ΅Π΄Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ 80
timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 1000, true); // 1 ΠΌΡ
timerAlarmEnable(timer);
}
β ΠΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ»Π°Π²Π½ΠΎΠ΅ ΡΠΎΡΠΌΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ?
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ setAcceleration() ΠΈ stop() Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ:
stepper.setAcceleration(500); // ΠΠ°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅
stepper.moveTo(stepper.currentPosition() + 50); // ΠΠΎΡΠΎΡΠΊΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΡΠΌΠΎΠΆΠ΅Π½ΠΈΡ
while (stepper.isRunning()) {
stepper.run();
}
stepper.stop(); // ΠΠΎΠ»Π½Π°Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΠ»Ρ ΡΠΎΡΠ½ΠΎΠΉ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ runToPosition():
stepper.runToPosition(); // ΠΠ»ΠΎΠΊΠΈΡΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΈ
β ΠΠ΄Π΅ Π½Π°ΠΉΡΠΈ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ?
ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ:
- π ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡ Π°Π²ΡΠΎΡΠ° (Π°Π½Π³Π».)
- π» ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° GitHub (Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅
examples) - πΊ ΠΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊΠΈ Π½Π° YouTube (ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ)
ΠΠ»Ρ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ:
- π€ Π£ΡΠΎΠΊΠΈ ΠΎΡ AlexGyver (ΡΠ°Π·Π΄Π΅Π» "Π¨Π°Π³ΠΎΠ²ΡΠ΅ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΠΈ")
- π Π‘ΡΠ°ΡΡΠΈ Π½Π° Π₯Π°Π±ΡΠ΅