Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Вращающаяся подставка на основе шагового двигателя, управляемая последовательным диалогом

Компоненты и расходные материалы

Шаговый двигатель 28BYJ48
× 1
Драйвер шагового двигателя X113647
× 1
Универсальная алюминиевая монтажная втулка Pololu для вала 5 мм
× 1
Arduino UNO
× 1
Деревянная основа 15 см x 15 см
× 1
резиновые прокладки
× 4

Необходимые инструменты и машины

лобзик
сверло с 6-миллиметровым сверлом по дереву

Об этом проекте

Полная история здесь:http://www.cesarebrizio.it/Arduino/Turntable.html

Этот проект посвящен вращающейся платформе на базе шагового двигателя.

Модель с шаговым двигателем - 28BYJ48, управляемая через драйвер шагового двигателя X113647 (на основе микросхемы ULN2003A), обычно приобретаемый вместе с шаговым двигателем.

Платформа может вращаться в обоих направлениях и управляется через серийный монитор или Tera Term.

Реализованы следующие команды:

  • R =Непрерывно вращать по часовой стрелке (то есть на несколько оборотов)
  • г =Повернуть на 360 градусов; по часовой стрелке
  • L =Непрерывно вращать против часовой стрелки (то есть на несколько оборотов)
  • l =Повернуть на 360 градусов; против часовой стрелки
  • S =Остановить вращение

С механической точки зрения сборка очень проста:для базового стола нужен квадрат из фанеры или аналогичного материала размером примерно 15 x 15 см.

Центр стола будет находиться на пересечении диагоналей - именно в этом месте будет просверлено отверстие диаметром 6 мм.

Ступица шагового двигателя смещена от центра:вставив ступицу в отверстие диаметром 6 мм, можно нарисовать контур шагового двигателя карандашом.

Затем лобзиком будет вырезано как можно более плотное круглое отверстие по контуру шагового двигателя, чтобы два крепежных отверстия шагового двигателя плотно прилегали к дереву стола, чтобы их можно было использовать для крепления шагового двигателя к столу. Таблица.

Для обеспечения необходимого зазора необходимы резиновые прокладки высотой 10 мм (степпер будет немного торчать под столом).

Вращающаяся пластина будет закреплена на шаговом двигателе с помощью универсальной алюминиевой монтажной втулки Pololu для вала 5 мм.

Источники информации:

Маленький шаговый регулятор:http://arduino-info.wikispaces.com/SmallSteppers

На самом деле я использовал 4 разных контакта, но схема ниже точно воспроизводит соединения. Глядя на фото выше (красный провод от Arduino заменяет «розовый»):

  #define motorPin1 4 // Синий - 28BYJ-48 pin 1 # define motorPin2 5 // Розовый - 28BYJ-48 pin 2 # define motorPin3 6 // Желтый - 28BYJ-48 pin 3 # define motorPin4 7 / / Оранжевый - 28BYJ-48 контакт 4 // Красный - 28BYJ-48 контакт 5 (VCC) // Синий - 28BYJ-48 контакт GND #define STEPS_PER_TURN 2048 // количество шагов на 360 градусов;  

Код

  • Полный набросок в Arduino
Полный набросок в Arduino Arduino
Полное описание программного обеспечения с комментариями
 / * Вращающаяся подставка на основе шагового двигателя, управляемая последовательным диалогом Схема и комментарии:См. Http://www.cesarebrizio.it/Arduino/Turntable.html Схема показана здесь:https:// www.tdegypt.com/wp-content/uploads/2017/08/stepper-motor-wiring.png Единственным исключением является то, что в скетче используются цифровые выходы 4–5–6–7, в то время как диаграмма Фритцинга, созданная 23 декабря 2017 г., изменена --- - by Cesare Brizio Этот пример кода находится в открытом доступе. Этот эскиз управляет вращающейся платформой на основе шагового двигателя. Модель шагового двигателя - 28BYJ48, управляемая через драйвер шагового двигателя X113647 (на основе ULN2003A IC), обычно приобретаемый вместе с шаговым двигателем. Платформа может вращаться в обоих направлениях и управляется через Serial Monitor или Tera Term. Реализованы следующие команды:R =Непрерывное вращение по часовой стрелке (то есть:на несколько оборотов) r =Поворот на 360 градусов; по часовой стрелке L =вращение против часовой стрелки непрерывно (то есть:на несколько оборотов) l =вращение на 360 градусов; против часовой стрелки S =​​Остановить вращение Источники информации:Маленький шаговый элемент управления:http://arduino-info.wikispaces.com/SmallSteppers*//*----- (Импортировать необходимые библиотеки) ----- * / # include  / * ----- (Объявление констант и номеров контактов) ----- * // * НИКОГДА НЕ ПОСТАВЛЯЙТЕ; ПОСЛЕ заявления #define !!!! * /// выводы двигателя # define motorPin1 4 // синий - 28BYJ-48 контакт 1 # определить motorPin2 5 // розовый - 28BYJ-48 контакт 2 # определить motorPin3 6 // желтый - 28BYJ-48 контакт 3 # определить motorPin4 7 / / Оранжевый - 28BYJ-48 контакт 4 // Красный - 28BYJ-48 контакт 5 (VCC) // Синий - 28BYJ-48 контакт GND #define STEPS_PER_TURN 2048 // количество шагов на 360 градусов; int motorSpeed ​​=500; // Высокие скорости (800 и выше) могут вызывать неустойчивое поведение 28BYJ-48int motorAccel =400; // Как указано выше:лучше избегать экстремальных ускорений int myPos =0; // будет использоваться для определения начальной точки для 360deg; rotationsint LeftTurnUp =0; // Пара флагов для определения направления вращения int RightTurnDown =0; // Пара флагов для определения направления вращения int Continuous =0; // используется ниже для различения команд одиночного вращения int incomingByte =0; // для входящих последовательных данных / * ----- (Объекты для управления шаговым двигателем) ----- * /// Настройте шаговый двигатель как 4-проводный биполярный на контактах 4,5,6,7 // ПРИМЕЧАНИЕ. последовательность 1-3-2-4 требуется для правильной последовательности 28BYJ48AccelStepper шагового двигателя (4, motorPin1, motorPin3, motorPin2, motorPin4); void setup () {Serial.begin (9600); stepper.setMinPulseWidth (20); // Рекомендуемая настройка, чтобы импульсы от Arduino // не были слишком быстрыми для декодирования stepper.setMaxSpeed ​​(motorSpeed); stepper.setSpeed ​​(motorSpeed); stepper.setAcceleration (motorAccel); // следующие две строки сбрасывают "нулевой шаг" в текущую позицию stepper.setCurrentPosition (stepper.currentPosition ()); stepper.runToPosition (); Serial.println ("Доступные команды:"); Serial.println («R =непрерывное вращение по часовой стрелке»); Serial.println ("r =360 градусов; вращение по часовой стрелке"); Serial.println («L =непрерывное вращение против часовой стрелки»); Serial.println ("l =360 градусов; вращение против часовой стрелки"); Serial.println ("S =остановить вращение");} void loop () {if (Serial.available ()> 0) {incomingByte =Serial.read (); {if (incomingByte =='R') {Serial.println («получил« R »- включение непрерывного вращения по часовой стрелке»); // Две следующие строки позволяют отправлять команды в любой последовательности:// перед выполнением выполняется быстрая остановка stepper.stop (); // Остановка как можно быстрее:устанавливает новую цель stepper.runToPosition (); // Теперь остановка после быстрой остановки // Следующая пара флагов определяет направление вращения LeftTurnUp =1; RightTurnDown =0; Непрерывный =1; // используется ниже для различения команд одиночного вращения stepper.setCurrentPosition (stepper.currentPosition ()); // Установить шаг 0 «здесь» stepper.setSpeed ​​(motorSpeed); // Предыдущие команды сбрасывали скорость} if (incomingByte =='L') {Serial.println («получено« L »- включение непрерывного вращения против часовой стрелки»); // Две следующие строки позволяют отправлять команды в любой последовательности:// перед выполнением выполняется быстрая остановка stepper.stop (); // Остановка как можно быстрее:устанавливает новую цель stepper.runToPosition (); // Теперь остановка после быстрой остановки // Следующая пара флагов определяет направление вращения RightTurnDown =1; LeftTurnUp =0; Непрерывный =1; // используется ниже для различения команд одиночного вращения stepper.setCurrentPosition (stepper.currentPosition ()); // Установить шаг 0 «здесь» stepper.setSpeed ​​(motorSpeed); // Предыдущие команды сбрасывали скорость} if (incomingByte =='r') {Serial.println («получено« r »- ​​активация одиночного вращения по часовой стрелке»); // Две следующие строки позволяют отправлять команды в любой последовательности:// перед выполнением выполняется быстрая остановка stepper.stop (); // Остановка как можно быстрее:устанавливает новую цель stepper.runToPosition (); // Теперь остановка после быстрой остановки // Следующая пара флагов определяет направление вращения LeftTurnUp =1; RightTurnDown =0; Непрерывный =0; // используется ниже для различения команд одиночного вращения stepper.setCurrentPosition (stepper.currentPosition ()); // Установить шаг 0 «здесь» stepper.setSpeed ​​(motorSpeed); // Предыдущие команды сбросили скорость // Поскольку мне придется сделать шаг вперед на 2047 шагов, я сохраняю свою // текущую позицию как начальную точку вращения myPos =stepper.currentPosition (); } if (incomingByte =='l') {Serial.println («получено« l »- активация однократного вращения против часовой стрелки»); // Две следующие строки позволяют отправлять команды в любой последовательности:// перед выполнением выполняется быстрая остановка stepper.stop (); // Остановка как можно быстрее:устанавливает новую цель stepper.runToPosition (); // Теперь остановка после быстрой остановки // Следующая пара флагов определяет направление вращения RightTurnDown =1; LeftTurnUp =0; Непрерывный =0; // используется ниже для различения команд одиночного вращения stepper.setCurrentPosition (stepper.currentPosition ()); // Установить шаг 0 «здесь» stepper.setSpeed ​​(motorSpeed); // Предыдущие команды сбрасывали скорость // Поскольку мне придется сделать шаг назад на 2047 шагов, я сохраняю свою // текущую позицию как начальную точку вращения myPos =stepper.currentPosition (); } if (incomingByte =='S') {Serial.println («получил« S »- остановка вращения»); // Сбрасываем флаги, определяющие направление вращения LeftTurnUp =0; RightTurnDown =0; stepper.stop (); // Остановка как можно быстрее:устанавливает новую цель stepper.runToPosition (); // Теперь остановка после быстрой остановки}}} if (Continuous ==1) // непрерывное вращение {if (LeftTurnUp ==1) // поворот налево {stepper.moveTo (10000); // перемещение на много шагов - больше, чем требуется механически} if (RightTurnDown ==1) // поворот направо {stepper.moveTo (-10000); // перемещаем много шагов - больше, чем требуется механически} stepper.run (); } if (Continuous ==0) // непрерывное вращение {if (LeftTurnUp ==1) // поворот налево {stepper.moveTo (myPos + STEPS_PER_TURN); // 1 поворот =2048 шагов} if (RightTurnDown ==1) // поворот направо {stepper.moveTo (myPos-STEPS_PER_TURN); // 1 оборот =2048 шагов}} stepper.run ();} 

Схема

Полная схема сделана во Фритцинге.

Производственный процесс

  1. Шаговые двигатели
  2. Интегрированные драйверы упрощают разработку шаговых двигателей
  3. Вентилятор с регулируемой температурой
  4. Прототип Raspoulette
  5. Автономная турель Nerf Sentry
  6. Библиотека биполярных шаговых двигателей
  7. Игрушка под управлением Android с использованием Raspberry Motor Shield
  8. Swiper - Auto Tinder / Bumble Swiper
  9. Что такое линейный двигатель?
  10. Что такое серводвигатель?