Сегодня покажу как организовать беспроводное управление двумя шаговыми моторами 28BYJ-48 5V по Bluetooth с помощью телефона ANDROID.
Вот так все выглядит:) В моей мастерской был мороз, и провода словно стальные тросы не в какую не получалось упорядочить:)
Плата Arduino NANO, Bluetooth модуль HC-05,
2 униполярных шаговых мотора 28BYJ-48 5V в комплекте с драйверами на базе ULN2003 и конечно же ANDROID телефон.
Я еще использую макетную плату и соединительные провода, Вы же можете сразу все спаять.
Прежде чем приступить к сборке загрузите этот скетч на плату.
В скетче есть 5 настроек!
Переменная t1 отвечает за скорость вращения, первого шагового мотора, после старта.
Переменная t2 отвечает за скорость вращения, второго шагового мотора, после старта.
Переменная t1g отвечает за скорость вращения, первого шагового мотора, после проработки определенного количества шагов.
Переменная t2g отвечает за скорость вращения, второго шагового мотора, после проработки определенного количества шагов.
Переменная kx для хранения максимального количества шагов с момента старта. При достижения указанного количества шагов скорость вращения шагового мотора увеличивается.
Чем больше значение переменных t1g, t2g, t1, t2 тем медленнее скорость вращения шаговых моторов!
Чем больше значение переменной kx тем больше шагов придется выполнить, прежде чем шаговый мотор начнет вращаться быстрее
//Начало скетча
#include "SoftwareSerial.h"
SoftwareSerial BTSerial(3, 8);
int val, i = 0, k = 0;
int t1g = 3; //НАСТРОЙКА!!!//
int t2g = 3; //НАСТРОЙКА!!!//
int t1 = 12; //НАСТРОЙКА!!!//
int t2 = 12; //НАСТРОЙКА!!!//
int kx = 40; //НАСТРОЙКА!!!//
void setup() {
Serial.begin(9600);
BTSerial.begin(115200);
Serial.println("Start");
//4,5,6,7 контакты для 1 мотора
pinMode(4, OUTPUT); pinMode(5, OUTPUT);
pinMode(6, OUTPUT); pinMode(7, OUTPUT);
//12,13,10,11 контакты для 2 мотора
pinMode(12, OUTPUT); pinMode(13, OUTPUT);
pinMode(10, OUTPUT); pinMode(11, OUTPUT);
}
void stopPins() { // функция для остановки ШД
if (BTSerial.available()) {
char val = BTSerial.read(); //читаем из программного Serial-порта
Serial.println(val); //пишем в Serial-порт
if (val == '0') {
i++;
}
}
}
void loop() {
if (BTSerial.available()) {
char val = BTSerial.read(); //читаем из программного Serial-порта
Serial.println(val); //пишем в Serial-порт
if (val == '1') {
while (i < 1) {
k++; if (k > kx) {
t1 = t1g; //цикл для вращения мотора 1 вправо
}
digitalWrite(7, HIGH); digitalWrite(5, LOW); delay(t1); stopPins();
digitalWrite(6, HIGH); digitalWrite(4, LOW); delay(t1); stopPins();
digitalWrite(5, HIGH); digitalWrite(7, LOW); delay(t1); stopPins();
digitalWrite(4, HIGH); digitalWrite(6, LOW); delay(t1); stopPins();
} i = 0, k = 0, t1 = 12;
}
if (val == '3') {
while (i < 1) {
k++; if (k > kx) {
t1 = t1g; //цикл для вращения мотора 1 влево
}
digitalWrite(4, HIGH); digitalWrite(6, LOW); delay(t1); stopPins();
digitalWrite(5, HIGH); digitalWrite(7, LOW); delay(t1); stopPins();
digitalWrite(6, HIGH); digitalWrite(4, LOW); delay(t1); stopPins();
digitalWrite(7, HIGH); digitalWrite(5, LOW); delay(t1); stopPins();
} i = 0, k = 0, t1 = 12;
}
if (val == '2') {
while (i < 1) {
k++; if (k > kx) {
t2 = t2g; //цикл для вращения мотора 1 вправо
}
digitalWrite(13, HIGH); digitalWrite(11, LOW); delay(t2); stopPins();
digitalWrite(12, HIGH); digitalWrite(10, LOW); delay(t2); stopPins();
digitalWrite(11, HIGH); digitalWrite(13, LOW); delay(t2); stopPins();
digitalWrite(10, HIGH); digitalWrite(12, LOW); delay(t2); stopPins();
} i = 0, k = 0, t2 = 12;
}
if (val == '4') {
while (i < 1) {
k++; if (k > kx) {
t2 = t2g; //цикл для вращения мотора 1 влево
}
digitalWrite(10, HIGH); digitalWrite(12, LOW); delay(t2); stopPins();
digitalWrite(11, HIGH); digitalWrite(13, LOW); delay(t2); stopPins();
digitalWrite(12, HIGH); digitalWrite(10, LOW); delay(t2); stopPins();
digitalWrite(13, HIGH); digitalWrite(11, LOW); delay(t2); stopPins();
} i = 0, k = 0, t2 = 12;
}
} else {
digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW);
digitalWrite(7, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW);
digitalWrite(12, LOW); digitalWrite(13, LOW);
}
}
//Конец скетча
Подредактируйте настройки на свое усмотрение, или загрузите скетч на плату как есть, и соберите все согласно схемы как показано на фото ниже.
Проверьте! И если все верно, то можете подключить устройство к блоку питания от 6 до 12 вольт через контакт Vin, как показано на схеме. Или от павербанка , или от USB компьютера используя Mini-USB разъем на платеArduino NANO.
Так как устройство в режиме вращения вала шагового двигателя потребляет около 350 миллиампер, то источник питания должен быть минимум на 500 миллиампер.