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

Слайдер для камеры своими руками с поворотной и наклонной головкой — проект на базе Arduino

<основной класс="главный сайт" id="главный">

В этом уроке мы узнаем, как сделать моторизованный слайдер для камеры с поворотной и наклонной головкой. Этот проект на основе Arduino на 100% сделан своими руками, построен из дешевых материалов, таких как МДФ и фанера, и управляется с помощью Arduino, трех шаговых двигателей, нескольких кнопок и джойстика, прикрепленных к специально разработанной печатной плате. Несмотря на это, конечный результат весьма впечатляет:сверхплавные движения камеры позволяют нам получать профессионально выглядящие кинематографические кадры.

Вы можете посмотреть следующее видео или прочитать письменное руководство ниже.

Обзор

Используя контроллер, мы можем либо вручную перемещать камеру, либо мы можем установить начальную и конечную точки, и тогда камера будет автоматически перемещаться из одного положения в другое. Также с помощью опорного рычага мы можем установить слайдер даже на штатив меньшего размера под любым углом, который нам нужен, и при этом получить стабильные движения.

Для начала я спроектировал слайдер с помощью программы для 3D-моделирования.

Вы можете найти и загрузить эту 3D-модель и получить все размеры из 3D-модели ниже, а также изучить ее в своем браузере на Thangs.

Загрузите 3D-модель сборки с Thangs.

Звено шкива GT2, напечатанное на 3D-принтере:

 Thingiverse

Создание слайдера камеры

Итак, я начал с изготовления направляющих, для которых я использовал 22-миллиметровую медную трубу. Я решил сделать ползунок длиной 1 метр, поэтому я отрезал две части по 1 метру длины. Медные трубы легко окисляются, поэтому их нужно полировать полиролью для металла. В моем случае у меня его не было, поэтому я использовал для этой цели зубную пасту.

Это было не идеальное решение, но я заметил разницу и сделал трубы немного чище.

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

Я буду крепить направляющие к основанию с помощью стержней с резьбой 8 мм, поэтому я сделал два отверстия в основании и вставил стержни длиной 138 мм, которые предварительно обрезал по размеру. Затем мне пришлось просверлить 8-миллиметровые отверстия в трубах, что на самом деле может быть немного сложно.

Для этого я сделал простой приспособление, в котором поднял карандаш на высоту 11 мм или половину диаметра трубы. Затем я закрепил трубу на ровной поверхности и с помощью приспособления разметил трубу с обеих сторон. Это позволяет получить точно выровненные отверстия с обеих сторон. Поэтому сначала я отметил точки сверления острым наконечником шурупа, а затем постепенно просверлил их сверлом диаметром 2, 4, 6 и 8 мм.

После этого я вставил направляющие через резьбовые стержни и с помощью шайб и гаек прикрепил их к основанию ползуна. Аналогичным образом, используя кусок фанеры и шпильку с резьбой, я закрепил концы реек.

Далее идет раздвижная платформа. Я снова использовал циркулярную пилу для резки плиты МДФ толщиной 8 мм по размеру в соответствии с 3D-моделью. Я также сделал отверстие диаметром 8 мм для резьбовых стержней, на которые будет крепиться подшипник. Для сборки платформы я использовал столярный клей и несколько шурупов. Используя аккумуляторную дрель, я сначала проделал направляющие отверстия, затем сделал контрраковины и вкрутил 3-миллиметровые винты на место.

После того, как панели были закреплены, я продолжил сборку системы подшипников. Я использую подшипники 608Z с внешним диаметром 22 мм. Две шайбы и гайка между двумя подшипниками обеспечивают достаточное расстояние между ними, что обеспечивает хороший контакт с 22-миллиметровыми рельсами.

Чтобы сделать платформу более безопасной при использовании слайдера под углом, аналогичным образом я вставил еще два набора подшипников в нижнюю часть платформы. В итоге оказалось, что раздвижная платформа отлично работает.

Здесь мы можем заметить, что теперь при перемещении платформы по ползуну на моем маленьком, не тяжелом штативе, голова не может выдержать вес платформы, поэтому пришлось сделать опорный рычаг, чтобы стабилизировать ползунок. Поэтому, используя два куска дерева и несколько гаек и болтов, я сделал простой зажим, который можно прикрепить к одной из ножек штатива.

Хомут имеет болт, на котором можно закрепить опорный рычаг. Затем мне пришлось сделать прорезь на опорном рычаге, чтобы можно было расположить ползунок под другим углом. Я сделал прорезь, просто просверлив множество 6-миллиметровых отверстий близко друг к другу, а затем с помощью рашпиля провел тонкие прямые линии. В итоге эта вспомогательная система заработала идеально.

Я продолжил эту сборку, добавив ножки к слайдеру на случай, если вы не хотите или вам не нужно использовать штатив. Я делал их из МДФ толщиной 8 мм. Используя ручную пилу и рашпиль, я легко получил желаемую форму ножек. Затем, используя немного клея и две гайки, я прикрепил их к концам слайдера.

Следующим этапом является создание системы панорамирования и наклона, которая будет прикреплена к верхней части раздвижной платформы. Используя циркулярную пилу, я вырезал все необходимые детали с размерами, взятыми из 3D-модели. Я использовал несколько кусков фанеры для изготовления шарнирного механизма выравнивающей платформы для камеры, когда ползунок установлен под углом, а также несколько плит МДФ, на которых я сделал соответствующие отверстия для двигателя и подшипников для системы панорамирования.

Я перешел к установке шагового двигателя и зубчатого ремня для скользящей платформы. С одной стороны платформы я закрепил шаговый двигатель с помощью куска плиты МДФ и нескольких винтов и болтов. А с другой стороны ползунка я закрепил натяжной ролик, так что теперь я могу установить ремень ГРМ. С помощью двух болтов и стяжек я легко прикрепил ремень ГРМ к скользящей платформе.

На этом шаге скользящий механизм был полностью готов.

Я продолжил делать верхние части системы панорамирования и наклона. По 3D-модели я сделал все необходимые отверстия для шагового двигателя и подшипников, склеил и прикрутил все вместе.

Мой друг напечатал для меня на 3D-принтере 2 80-зубчатых шкива. Таким образом, я получил 5-кратное снижение скорости по сравнению с 16-зубчатым шкивом, прикрепленным к шаговому двигателю.

Теперь мне нужно было сделать ремень ГРМ с замкнутым контуром в соответствии с моей установкой, поэтому я измерил необходимую длину ремня, обрезал его, а затем просто приклеил его клеем CA и добавил кусок ленты поверх него. Клей CA отлично справляется с резиной, поэтому ремень с замкнутой петлей работает без проблем.

Затем я начал окончательную сборку системы панорамирования и наклона. Сначала я закрепил двигатель наклона с помощью нескольких болтов, а затем добавил два подшипника на место, закрепив их в пазах эпоксидной смолой. Затем я закрепил платформу наклона на платформе панорамирования с помощью 8-миллиметровых болтов и одновременно прикрепил к ней шкив с 80 зубьями вместе с зубчатым ремнем.

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

Затем я закрепил двигатель панорамирования и добавил подшипники на верхнюю часть выравнивающей платформы, а также на нижнюю сторону. Затем вставил через них болт, добавил упорный подшипник, шкив на 80 зубьев и ремень ГРМ, а поверх них добавил ранее собранную головку наклона. Наконец, я закрепил его с помощью болта, и все, на этом сборка ползунка завершена.

Схема цепи

Хорошо, теперь самое интересное или установка электронных компонентов. Вот принципиальная схема этого самодельного слайдера камеры.

Таким образом, три шаговых двигателя NEMA 17 управляются тремя драйверами шаговых двигателей A4988. Для управления движением ползунка мы используем потенциометр, подключенный к аналоговому входу Arduino, а для управления поворотной и наклонной головкой мы используем модуль джойстика, который фактически состоит из двух потенциометров, поэтому он подключен к двум аналоговым входам. Также есть еще один потенциометр, используемый для установки скорости автоматического движения из положения входа и выхода. Эти положения включения и выключения устанавливаются с помощью кнопки. Эта кнопка имеет подтягивающий резистор и подключена к цифровому выводу платы Arduino. Также есть кнопка сброса, выключатель питания и разъем питания, а также концевой выключатель для ползунка и два светодиода для индикации состояния входа и выхода. Мы можем обеспечить этот проект напряжением 9 или 12 В.

Компоненты, необходимые для этого проекта, можно получить по ссылкам ниже:

Дизайн печатной платы

Затем, в соответствии с принципиальной схемой, я разработал специальную печатную плату, чтобы электронные компоненты были организованы.

Я сделал это с помощью бесплатной онлайн-программы для проектирования схем EasyEDA. В схеме было довольно много соединений, поэтому я использовал как верхний, так и нижний слой, и мне удалось получить функциональную и хорошо выглядящую печатную плату. Закончив этот шаг, я сгенерировал файл Gerber, необходимый для изготовления печатной платы. Затем я заказал печатную плату у JLCPCB, которая на самом деле является спонсором этого руководства.

Здесь мы можем просто загрузить файл Gerber, и после загрузки мы можем снова просмотреть нашу плату в средстве просмотра Gerber. Если все в порядке, мы можем продолжить, выбрать свойства, которые мы хотим для нашей печатной платы, а затем мы можем заказать нашу печатную плату по разумной цене. Обратите внимание:если это ваш первый заказ от JLCPCB, вы можете получить до 10 печатных плат всего за 2 доллара.

Тем не менее, через неделю печатные платы прибыли. Качество печатных плат отличное, и я должен признать, что очень приятно иметь собственный дизайн печатной платы.

Сборка электроники

Итак, затем я перешел к сборке электронных компонентов. Я начал с пайки штыревых разъемов на печатной плате. Это упрощает подключение и отсоединение компонентов при необходимости. На самом деле я использовал штыревые разъемы для всего, кроме конденсаторов и резисторов, которые я припаял непосредственно к печатной плате. Поэтому я продолжил припаивать перемычки ко всем электронным компонентам.

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

Что касается корпуса контроллера, я решил сделать его из прозрачного акрила толщиной 4 мм, потому что хотел, чтобы красота всех электронных компонентов была видна. Я использовал циркулярную пилу, чтобы вырезать панели для корпуса по размеру. Затем с помощью дрели и насадок Форстнера я сделал отверстие на передней панели для кнопок, потенциометров, выключателя питания и джойстика. После этого с помощью эпоксидной смолы 5 минут собрал корпус, а сверху вставил и приклеил два болта, через которые можно вставить переднюю панель и закрепить сверху гайками.

Наконец, я начал собирать электронику, вставив плату Arduino и драйверы шагового двигателя A4988 на печатную плату. Затем я продолжил вставлять и закреплять кнопки и другие компоненты на передней панели.

Как только я их закрепил, я подключил компоненты к соответствующим контактам на печатной плате. На боковой панели корпуса я добавил разъем питания, а затем вставил печатную плату в корпус. На этой же панели также есть отверстие, через которое я вставил перемычки для соединения драйверов с шаговыми двигателями, а также концевой выключатель, который я разместил на конце ползунка.

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

Что касается питания слайдера, я использовал три 3,7-вольтовых литий-ионных аккумулятора, соединенных последовательно, производящих около 11 В. Вот и все, слайдер готов и отлично работает.

Код Arduino для слайдера камеры своими руками

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

Программа основана на библиотеке AccelStepper Майка Макколи. Это невероятная библиотека, которая позволяет легко управлять несколькими шаговыми двигателями одновременно. Итак, как только мы включим эту библиотеку и библиотеку MultiStepper.h, которая является ее частью, нам нужно определить все выводы Arduino, которые будут использоваться, определить экземпляры для степперов, а также некоторые переменные, необходимые для программы ниже. /Р>

#include <AccelStepper.h>
#include <MultiStepper.h>

#define JoyX A0       // Joystick X pin
#define JoyY A1       // Joystick Y pin
#define slider A2     // Slider potentiometer
#define inOutPot A3   // In and Out speed potentiometer
#define JoySwitch 10  // Joystick switch connected
#define InOutSet 12   // Set Button
#define limitSwitch 11
#define inLED 8
#define outLED 9

// Define the stepper motors and the pins the will use
AccelStepper stepper1(1, 7, 6); // (Type:driver, STEP, DIR)
AccelStepper stepper2(1, 5, 4);
AccelStepper stepper3(1, 3, 2);

MultiStepper StepperControl;  // Create instance of MultiStepper

long gotoposition[3]; // An array to store the In or Out position for each stepper motor

int JoyXPos = 0;
int JoyYPos = 0;
int sliderPos = 0;
int currentSpeed = 100;
int inOutSpeed = 100;

int XInPoint = 0;
int YInPoint = 0;
int ZInPoint = 0;
int XOutPoint = 0;
int YOutPoint = 0;
int ZOutPoint = 0;
int InandOut = 0;Code language: Arduino (arduino)

В разделе настройки мы устанавливаем начальные значения скорости для степперов, определяем некоторые режимы выводов, а также добавляем три степпера в экземпляр управления мультистеппером под названием «StepperControl». С помощью циклов while мы перемещаем ползунок в исходное положение, или он перемещается до тех пор, пока не нажмет концевой выключатель, а затем перемещается на 200 шагов назад, чтобы отпустить концевой выключатель.

void setup() {
  // Set initial seed values for the steppers
  stepper1.setMaxSpeed(3000);
  stepper1.setSpeed(200);
  stepper2.setMaxSpeed(3000);
  stepper2.setSpeed(200);
  stepper3.setMaxSpeed(3000);
  stepper3.setSpeed(200);
  pinMode(JoySwitch, INPUT_PULLUP);
  pinMode(InOutSet, INPUT_PULLUP);
  pinMode(limitSwitch, INPUT_PULLUP);
  pinMode(inLED, OUTPUT);
  pinMode(outLED, OUTPUT);

  // Create instances for MultiStepper - Adding the 3 steppers to the StepperControl instance for multi control
  StepperControl.addStepper(stepper1);
  StepperControl.addStepper(stepper2);
  StepperControl.addStepper(stepper3);

  // Move the slider to the initial position - homing
  while (digitalRead(limitSwitch) != 0) {
    stepper1.setSpeed(3000);
    stepper1.runSpeed();
    stepper1.setCurrentPosition(0); // When limit switch pressed set position to 0 steps
  }
  delay(20);
  // Move 200 steps back from the limit switch
  while (stepper1.currentPosition() != -200) {
    stepper1.setSpeed(-3000);
    stepper1.run();
  }
}Code language: Arduino (arduino)

В разделе петли мы начинаем с проверки того, достиг ли ползунок крайних положений, или это концевой выключатель, или 80 см с другой стороны от него.

// Limiting the movement - Do nothing if limit switch pressed or distance traveled in other direction greater then 80cm
  while (digitalRead(limitSwitch) == 0 || stepper1.currentPosition() < -64800) {}Code language: Arduino (arduino)

Следующим оператором if мы увеличиваем скорость поворота и наклона при каждом нажатии джойстика.

// If Joystick pressed increase the Pan and Tilt speeds
  if (digitalRead(JoySwitch) == 0) {
    currentSpeed = currentSpeed + 50;
    delay(200);
  }Code language: Arduino (arduino)

Затем мы проверяем, нажали ли мы кнопку Set, которая используется для установки положений IN и OUT. При первом нажатии кнопки мы сохраняем положения ВХ шаговых двигателей, а также зажигаем светодиод ВХОД.

switch (InandOut) { 
      case 0:   // Set IN position
        InandOut = 1;
        XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1
        YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2
        ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3
        digitalWrite(inLED, HIGH); // Light up inLed
        break;Code language: Arduino (arduino)

Таким же образом вторым нажатием мы сохраняем позиции OUT и зажигаем светодиод OUT.

case 1: // Set OUT position
        InandOut = 2;
        XOutPoint = stepper1.currentPosition(); //  Set the OUT Points for both steppers
        YOutPoint = stepper2.currentPosition();
        ZOutPoint = stepper3.currentPosition();
        digitalWrite(outLED, HIGH);
        break;Code language: Arduino (arduino)

Затем при следующем нажатии кнопки мы считываем значение потенциометра автоматической скорости, который используется для установки максимальной скорости двигателей. Также мы помещаем позиции IN в массив «gotoposition», который используется в функции moveTo(), которая вычисляет требуемую скорость для всех степперов отдельно. Затем с помощью функции runSpeedToPosition() ползунок автоматически перемещается в положение In.

case 2: // Move to IN position / go to case 3
        InandOut = 3;
        inOutSpeed = analogRead(inOutPot); // Auto speed potentiometer
        // Place the IN position into the Array
        gotoposition[0] = XInPoint;
        gotoposition[1] = YInPoint;
        gotoposition[2] = ZInPoint;
        stepper1.setMaxSpeed(inOutSpeed);
        stepper2.setMaxSpeed(inOutSpeed);
        stepper3.setMaxSpeed(inOutSpeed);
        StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
        StepperControl.runSpeedToPosition(); // Blocks until all steppers are in position
        delay(200);
        break;Code language: Arduino (arduino)

Точно так же, в случае №3 или другим нажатием кнопки, мы перемещаем ползунок в положение OUT.

case 3: // Move to OUT position / go back to case 2
        InandOut = 2;
        inOutSpeed = analogRead(inOutPot);
        // Place the OUT position into the Array
        gotoposition[0] = XOutPoint;
        gotoposition[1] = YOutPoint;
        gotoposition[2] = ZOutPoint;
        stepper1.setMaxSpeed(inOutSpeed);
        stepper2.setMaxSpeed(inOutSpeed);
        stepper3.setMaxSpeed(inOutSpeed);
        StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
        StepperControl.runSpeedToPosition(); // Blocks until all are in position
        delay(200);
        break;Code language: Arduino (arduino)

Если мы удерживаем кнопку Set нажатой дольше половины секунды, будет выполнен 4-й оператор case, который сбрасывает положение IN и OUT, чтобы мы могли установить новые.

Далее идет джойстик управления панорамированием и наклоном. Аналоговое значение, которое мы получаем от джойстика, находится в диапазоне от 0 до 1024, или, когда он находится в середине, значения составляют около 500. Поэтому, если мы переместим джойстик влево, а аналоговое значение больше 600, мы установим скорость конкретного мотора на положительную, а наоборот, если мы переместим джойстик вправо, мы установим скорость мотора на отрицательную, что означает, что он будет вращаться в противоположном направлении.

// Joystick X - Pan movement
  JoyXPos = analogRead(JoyX);
  // if Joystick is moved left, move stepper 2 or pan to left
  if (JoyXPos > 600) {
    stepper2.setSpeed(currentSpeed);
  }
  // if Joystick is moved right, move stepper 2 or pan to right
  else if (JoyXPos < 400) {
    stepper2.setSpeed(-currentSpeed);
  }
  // if Joystick stays in middle, no movement
  else {
    stepper2.setSpeed(0);
  }Code language: Arduino (arduino)

Если он остается посередине, скорость устанавливается на 0. Этот метод используется как для оси джойстика, так и для ползункового потенциометра. На самом деле, в случае с потенциометром мы используем его аналоговое значение для увеличения скорости двигателя при дальнейшем повороте потенциометра.

// Slider potentiometer
  sliderPos = analogRead(slider);
  // If potentiometer is turned left, move slider left
  if (sliderPos > 600) {
    sliderPos = map(sliderPos, 600, 1024, 0, 3000);
    stepper1.setSpeed(sliderPos); // Increase speed as turning
  }
  // If potentiometer is turned right, move slider right
  else if (sliderPos < 400 ) {
    sliderPos = map(sliderPos, 400, 0, 0, 3000);
    stepper1.setSpeed(-sliderPos); // Increase speed as turning
  }
  // If potentiometer in middle, no movement
  else {
    stepper1.setSpeed(0);
  }Code language: Arduino (arduino)

Наконец, мы вызываем функции runSpeed() для каждого из трех шаговых двигателей, которые выполняют приведенные выше команды или соответствующим образом вращают двигатели.

// Execute the above commands - run the stepper motors
  stepper1.runSpeed();
  stepper2.runSpeed();
  stepper3.runSpeed();Code language: Arduino (arduino)

Вот полный исходный код:

/*
  DIY Camera Slider with Pan and Tilt Head
  by Dejan Nedelkovski
  www.HowToMechatronics.com

  Library - AccelStepper by Mike McCauley:
  http://www.airspayce.com/mikem/arduino/AccelStepper/index.html

*/

#include <AccelStepper.h>
#include <MultiStepper.h>

#define JoyX A0       // Joystick X pin
#define JoyY A1       // Joystick Y pin
#define slider A2     // Slider potentiometer
#define inOutPot A3   // In and Out speed potentiometer
#define JoySwitch 10  // Joystick switch connected
#define InOutSet 12   // Set Button
#define limitSwitch 11
#define inLED 8
#define outLED 9

// Define the stepper motors and the pins the will use
AccelStepper stepper1(1, 7, 6); // (Type:driver, STEP, DIR)
AccelStepper stepper2(1, 5, 4);
AccelStepper stepper3(1, 3, 2);

MultiStepper StepperControl;  // Create instance of MultiStepper

long gotoposition[3]; // An array to store the In or Out position for each stepper motor

int JoyXPos = 0;
int JoyYPos = 0;
int sliderPos = 0;
int currentSpeed = 100;
int inOutSpeed = 100;

int XInPoint = 0;
int YInPoint = 0;
int ZInPoint = 0;
int XOutPoint = 0;
int YOutPoint = 0;
int ZOutPoint = 0;
int InandOut = 0;

void setup() {
  // Set initial seed values for the steppers
  stepper1.setMaxSpeed(3000);
  stepper1.setSpeed(200);
  stepper2.setMaxSpeed(3000);
  stepper2.setSpeed(200);
  stepper3.setMaxSpeed(3000);
  stepper3.setSpeed(200);
  pinMode(JoySwitch, INPUT_PULLUP);
  pinMode(InOutSet, INPUT_PULLUP);
  pinMode(limitSwitch, INPUT_PULLUP);
  pinMode(inLED, OUTPUT);
  pinMode(outLED, OUTPUT);

  // Create instances for MultiStepper - Adding the 3 steppers to the StepperControl instance for multi control
  StepperControl.addStepper(stepper1);
  StepperControl.addStepper(stepper2);
  StepperControl.addStepper(stepper3);

  // Move the slider to the initial position - homing
  while (digitalRead(limitSwitch) != 0) {
    stepper1.setSpeed(3000);
    stepper1.runSpeed();
    stepper1.setCurrentPosition(0); // When limit switch pressed set position to 0 steps
  }
  delay(20);
  // Move 200 steps back from the limit switch
  while (stepper1.currentPosition() != -200) {
    stepper1.setSpeed(-3000);
    stepper1.run();
  }

}

void loop() {
  // Limiting the movement - Do nothing if limit switch pressed or distance traveled in other direction greater then 80cm
  while (digitalRead(limitSwitch) == 0 || stepper1.currentPosition() < -64800) {}

  // If Joystick pressed increase the Pan and Tilt speeds
  if (digitalRead(JoySwitch) == 0) {
    currentSpeed = currentSpeed + 50;
    delay(200);
  }
  // If Set button is pressed - toggle between the switch cases
  if (digitalRead(InOutSet) == 0) {
    delay(500);
    // If we hold set button pressed longer then half a second, reset the in and out positions
    if (digitalRead(InOutSet) == 0) {
      InandOut = 4;
    }
    switch (InandOut) { 
      case 0:   // Set IN position
        InandOut = 1;
        XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1
        YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2
        ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3
        digitalWrite(inLED, HIGH); // Light up inLed
        break;

      case 1: // Set OUT position
        InandOut = 2;
        XOutPoint = stepper1.currentPosition(); //  Set the OUT Points for both steppers
        YOutPoint = stepper2.currentPosition();
        ZOutPoint = stepper3.currentPosition();
        digitalWrite(outLED, HIGH);
        break;

      case 2: // Move to IN position / go to case 3
        InandOut = 3;
        inOutSpeed = analogRead(inOutPot); // Auto speed potentiometer
        // Place the IN position into the Array
        gotoposition[0] = XInPoint;
        gotoposition[1] = YInPoint;
        gotoposition[2] = ZInPoint;
        stepper1.setMaxSpeed(inOutSpeed);
        stepper2.setMaxSpeed(inOutSpeed);
        stepper3.setMaxSpeed(inOutSpeed);
        StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
        StepperControl.runSpeedToPosition(); // Blocks until all steppers are in position
        delay(200);
        break;

      case 3: // Move to OUT position / go back to case 2
        InandOut = 2;
        inOutSpeed = analogRead(inOutPot);
        // Place the OUT position into the Array
        gotoposition[0] = XOutPoint;
        gotoposition[1] = YOutPoint;
        gotoposition[2] = ZOutPoint;
        stepper1.setMaxSpeed(inOutSpeed);
        stepper2.setMaxSpeed(inOutSpeed);
        stepper3.setMaxSpeed(inOutSpeed);
        StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
        StepperControl.runSpeedToPosition(); // Blocks until all are in position
        delay(200);
        break;

      case 4: // If Set button is held longer then half a second go back to case 0
        InandOut = 0;
        digitalWrite(inLED, LOW);
        digitalWrite(outLED, LOW);
        delay(1000);
        break;
    }
  }

  // Joystick X - Pan movement
  JoyXPos = analogRead(JoyX);
  // if Joystick is moved left, move stepper 2 or pan to left
  if (JoyXPos > 600) {
    stepper2.setSpeed(currentSpeed);
  }
  // if Joystick is moved right, move stepper 2 or pan to right
  else if (JoyXPos < 400) {
    stepper2.setSpeed(-currentSpeed);
  }
  // if Joystick stays in middle, no movement
  else {
    stepper2.setSpeed(0);
  }

  //Joystick Y - Tilt movement
  JoyYPos = analogRead(JoyY);
  if (JoyYPos > 600) {
    stepper3.setSpeed(currentSpeed);
  }
  else if (JoyYPos < 400) {
    stepper3.setSpeed(-currentSpeed);
  }
  else {
    stepper3.setSpeed(0);
  }

  // Slider potentiometer
  sliderPos = analogRead(slider);
  // If potentiometer is turned left, move slider left
  if (sliderPos > 600) {
    sliderPos = map(sliderPos, 600, 1024, 0, 3000);
    stepper1.setSpeed(sliderPos); // Increase speed as turning
  }
  // If potentiometer is turned right, move slider right
  else if (sliderPos < 400 ) {
    sliderPos = map(sliderPos, 400, 0, 0, 3000);
    stepper1.setSpeed(-sliderPos); // Increase speed as turning
  }
  // If potentiometer in middle, no movement
  else {
    stepper1.setSpeed(0);
  }
  // Execute the above commands - run the stepper motors
  stepper1.runSpeed();
  stepper2.runSpeed();
  stepper3.runSpeed();
}Code language: Arduino (arduino)

На этом все, надеюсь, вам понравился этот проект Arduino и вы узнали что-то новое. Не стесняйтесь задавать любые вопросы в разделе комментариев ниже и проверять мою коллекцию проектов Arduino.


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

  1. Моторизованный слайдер камеры Arduino с управлением через Bluetooth
  2. Создание монитора Ambilight с помощью Arduino
  3. Система посещаемости с использованием Arduino и RFID с Python
  4. Вольтметр своими руками с использованием Arduino и смартфона
  5. DIY вольтметр с Arduino и дисплеем Nokia 5110
  6. Клеточные автоматы на основе Arduino и OLED
  7. Счетчик RPM на основе Arduino с новым и более быстрым алгоритмом
  8. FM-радио с использованием Arduino и RDA8057M
  9. Система посещаемости на основе Arduino и Google Spreadsheet
  10. Как создавать музыку с помощью Arduino