Управление шаговым двигателем 28BYJ-48 через bluetooth

Arduino
Автор темы, Сержант
Сержант
Аватара
Arduino
Автор темы, Сержант
Сержант
Сообщения: 64
Зарегистрирован: 19 апреля 2017
С нами: 6 лет 11 месяцев

#1 Arduino » 12 июня 2019, 21:52

Схема
Управление шаговым двигателем 28BYJ-48 через bluetooth.jpg
Управление шаговым двигателем 28BYJ-48 через bluetooth
Управление шаговым двигателем 28BYJ-48 через bluetooth.jpg (112.87 КБ) 1583 просмотра
Убедитесь, что вы отключили модуль bluetooth HC-06 при загрузке кода!

Код: Выделить всё

// com0  STOP
// com1  шаг+
// com2  шаг-
// com3  ход+ 
// com4  ход- 
// comZ  СТОП после отключения Bluetooth

#include <AccelStepper.h>

#define HALFSTEP 8
#define motorPin1  8     // IN1 on ULN2003 ==> синий на 28BYJ-48
#define motorPin2  9     // IN2 on ULN2004 ==> Розовый на 28BYJ-48
#define motorPin3  10    // IN3 on ULN2003 ==> Желтый на 28BYJ-48
#define motorPin4  11    // IN4 on ULN2003 ==> Оранжевый на 28BYJ-48

//ПРИМЕЧАНИЕ. Последовательность 1-3-2-4 требуется для правильной последовательности 28BYJ-48

AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

String myString = "";

boolean validCommand = false;
boolean justRun = false;          //если правда, указывает нужно работать на постоянной скорости

long mySteps = 2048;              //Предполагая, что номинально 4096 шагов на оборот

float mySpeed = 500.0;

char command;

void setup()
{
  Serial.begin(9600);
  Serial.println("Bluetooth is NOT connected");//Bluetooth не подключен
  Serial.println("Waiting for data");//Ожидание данных
  stepper1.disableOutputs();                    // отключить мотор катушки, пока не потребуется
  stepper1.setMaxSpeed(1000.0);
}

void loop()
{
  validCommand = false;  
  
  readData
();             // Прочитайте все доступные символы из последовательного входного буфера
  
  checkData
();            // Проверите строку ввода данных на валидность и извлечь команду
 
  if 
(validCommand)       //Если командная строка была действительна
  {
    processCommand();     // Команда характер процесса и изменения шагового двигательное поведение
  }
  if (justRun)
  {
    stepper1.runSpeed();    // Хранить непрерывно работает на заранее определенной скорости и направлении
  }
  else
  
{
    stepper1.run();         // Запуск до определено ранее конечная точка не будет достигнута,
  }                         //с предварительно определенным ускорением и конечной скоростью.
}
//-------------------------------------------------------------------------------------------
//
// Функция для чтения доступных данных из последовательного входного буфера
//
void readData()
{
  while ( Serial.available() )         //Читайте в то время как есть доступные персонажи
  {
    delay(3);
    char c = Serial.read();
    myString += c;                     //построить командную строку
  }
  Serial.print(myString);              // Вывод полной командной строки - для отладки
}
//-------------------------------------------------------------------------------------------
//
//Функция для проверки строки входных данных для действия и извлечь управляющий символ
//
void checkData()
{
  // Является ли строка входных данных 4 символов, начиная с подстроки "com" ?
  if (( myString.length() == 4) && (myString.startsWith("com") )) 
  
{
    validCommand = true;
    command = myString[3];             //Получить командный характер
    Serial.print(" command is   ");
    Serial.println(command);
  }
  else  //строка входных данных должна содержать по крайней мере 1 символ, или мы застреваем в цикле
  if ( myString.length() > 0)
  {
    validCommand = false;
    Serial.println("   command string is invalid"); //командная строка недействительна
  }
  myString = "";                        // Очистить строку ввода данных в следующий раз
}
//-------------------------------------------------------------------------------------------
//
//Функция для обработки команд характера и изменить поведение двигателя шагового
//
void processCommand()
{
  justRun = false;
  stepper1.enableOutputs();              // включить катушки двигателя

  switch (command)
  {
  case '0':        //Прекратите немедленно
    {
      Serial.println("STOP immediately");//Прекратите немедленно
      stopNow();
      break;
    }
  case '1':        // двигаться половиной оборота по часовой стрелке, ускорение и замедление
    {
      Serial.println("step clockwise"); //шаг по часовой стрелке
      moveSteps(mySteps);
      break;
    }
  case '2':        //перейти половину оборота против часовой стрелки, ускорение и торможение
    {
      Serial.println("step anti-clockwise");//шаг против часовой стрелки
      moveSteps(-mySteps);
      break;
    }
  case '3':        // бегите медленно по часовой стрелке на постоянной скорости, без ускорения
    {
      Serial.println("бежать по часовой стрелке");
      runAtSpeed(mySpeed);
      break;
    }
  case '4':        //бегите медленно против часовой стрелки на постоянной скорости, без ускорения
    {
      Serial.println("бегите против часовой стрелки");
      runAtSpeed(-mySpeed);
      break;
    }
  case 'Z':        // Bluetooth отключен; немедленно остановитесь
    {
      Serial.println("Bluetooth отключен; немедленно остановитесь");
      stopNow();
      break;
    }
  default:         // символ команды не соответствует диапазону допустимых команд
    Serial.print(command);
    Serial.println(" ....не находится в допустимом диапазоне команд");
    break;
  }
}
//-------------------------------------------------------------------------------------------
//
// Функция настройки шагового двигателя для перемещения на определенное количество шагов
//
void moveSteps(long steps)
{
  stepper1.setAcceleration(10.0);
  stepper1.setSpeed(5.0);
  stepper1.setCurrentPosition(0);
  stepper1.moveTo(steps);
}
//-------------------------------------------------------------------------------------------
//
// Функция настройки шагового двигателя для работы с определенной скоростью
//
void runAtSpeed(float cSpeed)
{
  stepper1.setSpeed(cSpeed); 
  justRun 
= true; 
}
//-------------------------------------------------------------------------------------------
//
//Функция для того чтобы остановить stepper мотор немедленно и отключить катушки мотора
//
void stopNow()
{
  stepper1.stop();
  stepper1.setCurrentPosition(0);
  stepper1.run();                 // остановки и набор команд только "активные" после звонка на ("побегать") "run"
  stepper1.disableOutputs();      // отключите катушки двигателя для экономии энергии 
}

GOOGLE PLAY


Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя