Вращающаяся подставка на основе шагового двигателя, управляемая последовательным диалогом
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 |
Необходимые инструменты и машины
| ||||
|
Об этом проекте
Полная история здесь: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 ();}
Схема
Полная схема сделана во Фритцинге.Производственный процесс
- Шаговые двигатели
- Интегрированные драйверы упрощают разработку шаговых двигателей
- Вентилятор с регулируемой температурой
- Прототип Raspoulette
- Автономная турель Nerf Sentry
- Библиотека биполярных шаговых двигателей
- Игрушка под управлением Android с использованием Raspberry Motor Shield
- Swiper - Auto Tinder / Bumble Swiper
- Что такое линейный двигатель?
- Что такое серводвигатель?