Skip to content

Instantly share code, notes, and snippets.

@thienandangthanh
Last active November 22, 2018 04:36
Show Gist options
  • Save thienandangthanh/2a9d266cfe646c2cf2297f884851e972 to your computer and use it in GitHub Desktop.
Save thienandangthanh/2a9d266cfe646c2cf2297f884851e972 to your computer and use it in GitHub Desktop.
// TB6560-control-2-steppers.ino
// Thư viện điều khiển động cơ bước
// Cần phải thêm thư viện AccelStepper trước khi sử dụng
// Hướng dẫn tải thư viện về tại đây:
// https://www.stdio.vn/articles/cai-dat-thu-vien-tren-arduino-ide-531
// Tham khảo thêm tại https://www.pjrc.com/teensy/td_libs_AccelStepper.html
#include <AccelStepper.h>
/*
* SƠ ĐỒ NỐI CHÂN
*
* MOTOR Trái Arduino UNO
* DIR_L 2
* STEP_L 3 // phải là chân PWM (có dấu ~ ở phía trước)
* EN_L 4
*
* MOTOR Phải Arduino UNO
* DIR_R 5
* STEP_R 6 // phải là chân PWM (có dấu ~ ở phía trước)
* EN_R 7
*
*/
/*
* MÔ TẢ HOẠT ĐỘNG
*
* 5s đầu, 2 động cơ chạy với vận tốc SPEED cho trước
*
* sau đó 2 động cơ quay theo chiều thuận 5 vòng
* tạm ngưng 2s
*
* sau đó 2 động cơ quay ngược lại 5 vòng
* tạm ngưng 5s
*/
// Steppers
// Right Stepper
#define DIR_L 2
#define STEP_L 3
#define EN_L 4
// Left Stepper
#define DIR_R 5
#define STEP_R 6
#define EN_R 7
// Tốc độ tối đa cho động cơ (đơn vị: số bước trên 1 giây)
#define MAX_SPEED 800
// Số bước để động cơ quay hết 1 vòng
/*
* dành cho động cơ stp-58d1013-01 (có góc bước 1.8 độ/bước)
* khi set chế độ full step, số bước để quay 1 vòng: 360/1.8 = 200
* khi set chế độ half step, số bước để quay 1 vòng: 2*360/1.8 = 400
* khi set chế độ 1/8 step, số bước để quay 1 vòng: 8*360/1.8 = 1600
* khi set chế độ 1/16 step, số bước để quay 1 vòng: 16*360/1.8 = 3200
*/
#define ROUND 200
// Tốc độ để điều khiển động cơ (đơn vị: số bước trên 1 giây)
#define SPEED 200
AccelStepper LeftStepper(AccelStepper::DRIVER, STEP_L, DIR_L);
AccelStepper RightStepper(AccelStepper::DRIVER, STEP_R, DIR_R);
void setup() {
pinMode(EN_L, OUTPUT);
digitalWrite(EN_L, HIGH); // ngưng kích hoạt động cơ khi mới khởi động
LeftStepper.setMaxSpeed(MAX_SPEED);
LeftStepper.setSpeed(SPEED);
// RightStepper.setPinsInverted(true, false, false);
pinMode(EN_R, OUTPUT);
digitalWrite(EN_R, HIGH); // ngưng kích hoạt động cơ khi mới khởi động
RightStepper.setMaxSpeed(MAX_SPEED);
RightStepper.setSpeed(SPEED);
}
void loop() {
digitalWrite(EN_L, LOW); // kích hoạt động cơ vào chế độ hoạt động
digitalWrite(EN_R, LOW); // kích hoạt động cơ vào chế độ hoạt động
// chạy với vận tốc SPEED cho trước
LeftStepper.runSpeed();
RightStepper.runSpeed();
delay(5000); // chạy với tốc độ SPEED trong vòng 5s
LeftStepper.move(5*ROUND);
RightStepper.move(5*ROUND);
delay(2000); // tạm ngưng 2s
LeftStepper.move(-5*ROUND);
RightStepper.move(-5*ROUND);
delay(5000); // tạm ngưng 5s
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment