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

Рука робота Arduino своими руками с управлением смартфоном

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

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

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

Обзор

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

3D-модель руки робота Arduino

Для начала я спроектировал манипулятора робота с помощью программы трехмерного моделирования Solidworks. Рука имеет 5 степеней свободы.

Для первых 3 осей, талии, плеча и локтя, я использовал сервоприводы MG996R, а для других 2 осей, поворота запястья и шага запястья, а также для захвата я использовал меньшие микросервоприводы SG90.

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

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

Спасибо Thangs за поддержку этого руководства.

Файлы STL для 3D-печати:

STL-файлы Arduino Robot Arm

1 файл(ы) 0,00 КБ Скачать

3D-печать руки робота

Используя свой новый 3D-принтер Creality CR-10, я напечатал все детали руки робота Arduino.

Здесь я хотел бы поблагодарить Banggood.com за предоставленный мне этот потрясающий 3D-принтер. Качество печати Creality CR-10 удивительно для своей цены, и что еще хорошо, так это то, что он поставляется почти на 90% предварительно собранным.

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

Прежде чем пробовать, рекомендуется проверить, достаточно ли затянуты роликовые колеса, а если нет, то можно просто подтянуть их с помощью эксцентриковых гаек. Вот и все, после выравнивания платформы для 3D-печати вы готовы превратить свои 3D-творения в реальность.

Все детали для манипулятора Arduino были готовы всего за несколько часов.

Подробнее:15 самых необходимых аксессуаров и инструментов для 3D-принтеров

Сборка руки робота

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

А поверх нее поставил верхнюю часть и закрепил двумя шурупами.

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

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

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

Наконец, я прикрепил механизм захвата к последнему сервоприводу, и рука робота Arduino была готова.

Схема манипулятора робота Arduino

Следующий этап – подключение электроники. Принципиальная схема этого проекта на самом деле довольно проста. Нам просто нужна плата Arduino и модуль Bluetooth HC-05 для связи со смартфоном. Управляющие контакты шести серводвигателей подключены к шести цифровым контактам платы Arduino.

Для питания сервоприводов нам нужно 5 В, но это должно поступать от внешнего источника питания, потому что Arduino не может обрабатывать ток, который все они могут потреблять. Источник питания должен выдерживать ток не менее 2А. Итак, как только мы соединили все вместе, мы можем перейти к программированию Arduino и созданию приложения для Android.

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

Код руки робота Arduino

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

Итак, сначала нам нужно включить библиотеку SoftwareSerial для последовательной связи модуля Bluetooth, а также библиотеку сервоприводов. Обе эти библиотеки входят в состав Arduino IDE, поэтому вам не нужно устанавливать их извне. Затем нам нужно определить шесть сервоприводов, модуль Bluetooth HC-05 и некоторые переменные для хранения текущего и предыдущего положения сервоприводов, а также массивы для хранения положений или шагов для автоматического режима.

#include <SoftwareSerial.h>
#include <Servo.h>

Servo servo01;
Servo servo02;
Servo servo03;
Servo servo04;
Servo servo05;
Servo servo06;

SoftwareSerial Bluetooth(3, 4); // Arduino(RX, TX) - HC-05 Bluetooth (TX, RX)

int servo1Pos, servo2Pos, servo3Pos, servo4Pos, servo5Pos, servo6Pos; // current position
int servo1PPos, servo2PPos, servo3PPos, servo4PPos, servo5PPos, servo6PPos; // previous position
int servo01SP[50], servo02SP[50], servo03SP[50], servo04SP[50], servo05SP[50], servo06SP[50]; // for storing positions/steps
int speedDelay = 20;
int index = 0;
String dataIn = "";Code language: Arduino (arduino)

В разделе настройки нам нужно инициализировать сервоприводы и модуль Bluetooth и переместить руку робота в исходное положение. Мы делаем это с помощью функции write(), которая просто перемещает сервопривод в любое положение от 0 до 180 градусов.

void setup() {
  servo01.attach(5);
  servo02.attach(6);
  servo03.attach(7);
  servo04.attach(8);
  servo05.attach(9);
  servo06.attach(10);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module
  Bluetooth.setTimeout(1);
  delay(20);
  // Robot arm initial position
  servo1PPos = 90;
  servo01.write(servo1PPos);
  servo2PPos = 150;
  servo02.write(servo2PPos);
  servo3PPos = 35;
  servo03.write(servo3PPos);
  servo4PPos = 140;
  servo04.write(servo4PPos);
  servo5PPos = 85;
  servo05.write(servo5PPos);
  servo6PPos = 80;
  servo06.write(servo6PPos);
}Code language: Arduino (arduino)

Далее, в секции loop, с помощью функции Bluetooth.available() мы постоянно проверяем, есть ли входящие данные со Смартфона. Если это правда, с помощью функции readString() мы читаем данные как строку и сохраняем их в переменной dataIn. В зависимости от полученных данных мы скажем роботу-манипулятору, что делать.

// Check for incoming data
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.readString();  // Read the data as stringCode language: Arduino (arduino)

Управление приложением Android

Теперь давайте взглянем на приложение для Android и посмотрим, какие данные оно на самом деле отправляет на Arduino.

Я создал приложение с помощью онлайн-приложения MIT App Inventor, и вот как оно работает. Вверху у нас есть две кнопки для подключения смартфона к Bluetooth-модулю HC-05. Затем слева у нас есть изображение манипулятора робота, а справа у нас есть шесть ползунков для управления сервоприводами и один ползунок для управления скоростью.

Каждый ползунок имеет разные начальные, минимальные и максимальные значения, соответствующие суставам руки робота. В нижней части приложения у нас есть три кнопки:СОХРАНИТЬ, ЗАПУСТИТЬ и СБРОС, с помощью которых мы можем запрограммировать манипулятор для автоматического запуска. Ниже также есть метка, которая показывает количество сохраненных нами шагов. Тем не менее, для получения более подробной информации о том, как создавать подобные приложения с помощью MIT App Inventor, вы можете обратиться к другому моему подробному руководству.

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

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

Вот файл для загрузки вышеуказанного проекта MIT App Inventor, а также приложение для Android, готовое к установке на ваш смартфон:

Файл проекта Arduino Robot Arm Control MIT App Inventor

1 файл(ы) 24,85 КБ Скачать

Android-приложение для управления роботом-манипулятором Arduino

1 файл(ы) 2,57 МБ Скачать

Поэтому в Arduino с помощью функцииstartWith() мы проверяем префикс каждых входящих данных и знаем, что делать дальше. Например, если префикс «s1», мы знаем, что нам нужно переместить сервопривод номер один. Используя функцию substring(), мы получаем оставшийся текст или значение позиции, мы конвертируем его в целое число и используем значение для перемещения сервопривода в эту позицию.

// If "Waist" slider has changed value - Move Servo 1 to position
    if (dataIn.startsWith("s1")) {
      String dataInS = dataIn.substring(2, dataIn.length()); // Extract only the number. E.g. from "s1120" to "120"
      servo1Pos = dataInS.toInt();  // Convert the string into integerCode language: Arduino (arduino)

Здесь мы можем просто вызвать функцию write(), и сервопривод перейдет в это положение, но таким образом сервопривод будет работать на максимальной скорости, что слишком много для манипулятора робота. Вместо этого нам нужно контролировать скорость сервоприводов, поэтому я использовал несколько циклов FOR, чтобы постепенно перемещать сервопривод из предыдущей позиции в текущую, реализуя время задержки между каждой итерацией. Изменяя время задержки, вы можете изменить скорость сервопривода.

// We use for loops so we can control the speed of the servo
      // If previous position is bigger then current position
      if (servo1PPos > servo1Pos) {
        for ( int j = servo1PPos; j >= servo1Pos; j--) {   // Run servo down
          servo01.write(j);
          delay(20);    // defines the speed at which the servo rotates
        }
      }
      // If previous position is smaller then current position
      if (servo1PPos < servo1Pos) {
        for ( int j = servo1PPos; j <= servo1Pos; j++) {   // Run servo up
          servo01.write(j);
          delay(20);
        }
      }
      servo1PPos = servo1Pos;   // set current position as previous position
    }Code language: Arduino (arduino)

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

Под ними находится кнопка СОХРАНИТЬ. Если мы нажмем кнопку SAVE, положение каждого серводвигателя будет сохранено в массиве. С каждым нажатием индекс увеличивается, поэтому массив заполняется шаг за шагом.

// If button "SAVE" is pressed
    if (dataIn.startsWith("SAVE")) {
      servo01SP[index] = servo1PPos;  // save position into the array
      servo02SP[index] = servo2PPos;
      servo03SP[index] = servo3PPos;
      servo04SP[index] = servo4PPos;
      servo05SP[index] = servo5PPos;
      servo06SP[index] = servo6PPos;
      index++;                        // Increase the array index
    }Code language: Arduino (arduino)

Затем, если мы нажмем кнопку RUN, мы вызовем пользовательскую функцию runservo(), которая запускает сохраненные шаги. Давайте посмотрим на эту функцию. Итак, здесь мы повторяем сохраненные шаги снова и снова, пока не нажмем кнопку RESET. С помощью цикла FOR проходим по всем позициям, хранящимся в массивах, и заодно проверяем, есть ли у нас входящие данные со смартфона. Этими данными может быть кнопка RUN/PAUSE, которая приостанавливает работу робота и при повторном нажатии продолжает автоматические движения. Кроме того, если мы изменим положение ползунка скорости, мы будем использовать это значение для изменения времени задержки между каждой итерацией в циклах FOR ниже, которые управляют скоростью серводвигателей.

// Automatic mode custom function - run the saved steps
void runservo() {
  while (dataIn != "RESET") {   // Run the steps over and over again until "RESET" button is pressed
    for (int i = 0; i <= index - 2; i++) {  // Run through all steps(index)
      if (Bluetooth.available() > 0) {      // Check for incomding data
        dataIn = Bluetooth.readString();
        if ( dataIn == "PAUSE") {           // If button "PAUSE" is pressed
          while (dataIn != "RUN") {         // Wait until "RUN" is pressed again
            if (Bluetooth.available() > 0) {
              dataIn = Bluetooth.readString();
              if ( dataIn == "RESET") {     
                break;
              }
            }
          }
        }
        // If SPEED slider is changed
        if (dataIn.startsWith("ss")) {
          String dataInS = dataIn.substring(2, dataIn.length());
          speedDelay = dataInS.toInt(); // Change servo speed (delay time)
        }
      }
      // Servo 1
      if (servo01SP[i] == servo01SP[i + 1]) {
      }
      if (servo01SP[i] > servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j >= servo01SP[i + 1]; j--) {
          servo01.write(j);
          delay(speedDelay);
        }
      }
      if (servo01SP[i] < servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j <= servo01SP[i + 1]; j++) {
          servo01.write(j);
          delay(speedDelay);
        }
      }Code language: Arduino (arduino)

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

// If button "RESET" is pressed
    if ( dataIn == "RESET") {
      memset(servo01SP, 0, sizeof(servo01SP)); // Clear the array data to 0
      memset(servo02SP, 0, sizeof(servo02SP));
      memset(servo03SP, 0, sizeof(servo03SP));
      memset(servo04SP, 0, sizeof(servo04SP));
      memset(servo05SP, 0, sizeof(servo05SP));
      memset(servo06SP, 0, sizeof(servo06SP));
      index = 0;  // Index to 0
    }Code language: Arduino (arduino)

Вот и все, теперь мы можем наслаждаться и веселиться с роботом-манипулятором.

Вот полный код манипулятора Arduino:

/*        
       DIY Arduino Robot Arm Smartphone Control  
        by Dejan, www.HowToMechatronics.com  
*/

#include <SoftwareSerial.h>
#include <Servo.h>

Servo servo01;
Servo servo02;
Servo servo03;
Servo servo04;
Servo servo05;
Servo servo06;

SoftwareSerial Bluetooth(3, 4); // Arduino(RX, TX) - HC-05 Bluetooth (TX, RX)

int servo1Pos, servo2Pos, servo3Pos, servo4Pos, servo5Pos, servo6Pos; // current position
int servo1PPos, servo2PPos, servo3PPos, servo4PPos, servo5PPos, servo6PPos; // previous position
int servo01SP[50], servo02SP[50], servo03SP[50], servo04SP[50], servo05SP[50], servo06SP[50]; // for storing positions/steps
int speedDelay = 20;
int index = 0;
String dataIn = "";

void setup() {
  servo01.attach(5);
  servo02.attach(6);
  servo03.attach(7);
  servo04.attach(8);
  servo05.attach(9);
  servo06.attach(10);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module
  Bluetooth.setTimeout(1);
  delay(20);
  // Robot arm initial position
  servo1PPos = 90;
  servo01.write(servo1PPos);
  servo2PPos = 150;
  servo02.write(servo2PPos);
  servo3PPos = 35;
  servo03.write(servo3PPos);
  servo4PPos = 140;
  servo04.write(servo4PPos);
  servo5PPos = 85;
  servo05.write(servo5PPos);
  servo6PPos = 80;
  servo06.write(servo6PPos);
}

void loop() {
  // Check for incoming data
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.readString();  // Read the data as string
    
    // If "Waist" slider has changed value - Move Servo 1 to position
    if (dataIn.startsWith("s1")) {
      String dataInS = dataIn.substring(2, dataIn.length()); // Extract only the number. E.g. from "s1120" to "120"
      servo1Pos = dataInS.toInt();  // Convert the string into integer
      // We use for loops so we can control the speed of the servo
      // If previous position is bigger then current position
      if (servo1PPos > servo1Pos) {
        for ( int j = servo1PPos; j >= servo1Pos; j--) {   // Run servo down
          servo01.write(j);
          delay(20);    // defines the speed at which the servo rotates
        }
      }
      // If previous position is smaller then current position
      if (servo1PPos < servo1Pos) {
        for ( int j = servo1PPos; j <= servo1Pos; j++) {   // Run servo up
          servo01.write(j);
          delay(20);
        }
      }
      servo1PPos = servo1Pos;   // set current position as previous position
    }
    
    // Move Servo 2
    if (dataIn.startsWith("s2")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo2Pos = dataInS.toInt();

      if (servo2PPos > servo2Pos) {
        for ( int j = servo2PPos; j >= servo2Pos; j--) {
          servo02.write(j);
          delay(50);
        }
      }
      if (servo2PPos < servo2Pos) {
        for ( int j = servo2PPos; j <= servo2Pos; j++) {
          servo02.write(j);
          delay(50);
        }
      }
      servo2PPos = servo2Pos;
    }
    // Move Servo 3
    if (dataIn.startsWith("s3")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo3Pos = dataInS.toInt();
      if (servo3PPos > servo3Pos) {
        for ( int j = servo3PPos; j >= servo3Pos; j--) {
          servo03.write(j);
          delay(30);
        }
      }
      if (servo3PPos < servo3Pos) {
        for ( int j = servo3PPos; j <= servo3Pos; j++) {
          servo03.write(j);
          delay(30);
        }
      }
      servo3PPos = servo3Pos;
    }
    // Move Servo 4
    if (dataIn.startsWith("s4")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo4Pos = dataInS.toInt();
      if (servo4PPos > servo4Pos) {
        for ( int j = servo4PPos; j >= servo4Pos; j--) {
          servo04.write(j);
          delay(30);
        }
      }
      if (servo4PPos < servo4Pos) {
        for ( int j = servo4PPos; j <= servo4Pos; j++) {
          servo04.write(j);
          delay(30);
        }
      }
      servo4PPos = servo4Pos;
    }
    // Move Servo 5
    if (dataIn.startsWith("s5")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo5Pos = dataInS.toInt();
      if (servo5PPos > servo5Pos) {
        for ( int j = servo5PPos; j >= servo5Pos; j--) {
          servo05.write(j);
          delay(30);
        }
      }
      if (servo5PPos < servo5Pos) {
        for ( int j = servo5PPos; j <= servo5Pos; j++) {
          servo05.write(j);
          delay(30);
        }
      }
      servo5PPos = servo5Pos;
    }
    // Move Servo 6
    if (dataIn.startsWith("s6")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo6Pos = dataInS.toInt();
      if (servo6PPos > servo6Pos) {
        for ( int j = servo6PPos; j >= servo6Pos; j--) {
          servo06.write(j);
          delay(30);
        }
      }
      if (servo6PPos < servo6Pos) {
        for ( int j = servo6PPos; j <= servo6Pos; j++) {
          servo06.write(j);
          delay(30);
        }
      }
      servo6PPos = servo6Pos; 
    }
    // If button "SAVE" is pressed
    if (dataIn.startsWith("SAVE")) {
      servo01SP[index] = servo1PPos;  // save position into the array
      servo02SP[index] = servo2PPos;
      servo03SP[index] = servo3PPos;
      servo04SP[index] = servo4PPos;
      servo05SP[index] = servo5PPos;
      servo06SP[index] = servo6PPos;
      index++;                        // Increase the array index
    }
    // If button "RUN" is pressed
    if (dataIn.startsWith("RUN")) {
      runservo();  // Automatic mode - run the saved steps 
    }
    // If button "RESET" is pressed
    if ( dataIn == "RESET") {
      memset(servo01SP, 0, sizeof(servo01SP)); // Clear the array data to 0
      memset(servo02SP, 0, sizeof(servo02SP));
      memset(servo03SP, 0, sizeof(servo03SP));
      memset(servo04SP, 0, sizeof(servo04SP));
      memset(servo05SP, 0, sizeof(servo05SP));
      memset(servo06SP, 0, sizeof(servo06SP));
      index = 0;  // Index to 0
    }
  }
}

// Automatic mode custom function - run the saved steps
void runservo() {
  while (dataIn != "RESET") {   // Run the steps over and over again until "RESET" button is pressed
    for (int i = 0; i <= index - 2; i++) {  // Run through all steps(index)
      if (Bluetooth.available() > 0) {      // Check for incomding data
        dataIn = Bluetooth.readString();
        if ( dataIn == "PAUSE") {           // If button "PAUSE" is pressed
          while (dataIn != "RUN") {         // Wait until "RUN" is pressed again
            if (Bluetooth.available() > 0) {
              dataIn = Bluetooth.readString();
              if ( dataIn == "RESET") {     
                break;
              }
            }
          }
        }
        // If speed slider is changed
        if (dataIn.startsWith("ss")) {
          String dataInS = dataIn.substring(2, dataIn.length());
          speedDelay = dataInS.toInt(); // Change servo speed (delay time)
        }
      }
      // Servo 1
      if (servo01SP[i] == servo01SP[i + 1]) {
      }
      if (servo01SP[i] > servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j >= servo01SP[i + 1]; j--) {
          servo01.write(j);
          delay(speedDelay);
        }
      }
      if (servo01SP[i] < servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j <= servo01SP[i + 1]; j++) {
          servo01.write(j);
          delay(speedDelay);
        }
      }

      // Servo 2
      if (servo02SP[i] == servo02SP[i + 1]) {
      }
      if (servo02SP[i] > servo02SP[i + 1]) {
        for ( int j = servo02SP[i]; j >= servo02SP[i + 1]; j--) {
          servo02.write(j);
          delay(speedDelay);
        }
      }
      if (servo02SP[i] < servo02SP[i + 1]) {
        for ( int j = servo02SP[i]; j <= servo02SP[i + 1]; j++) {
          servo02.write(j);
          delay(speedDelay);
        }
      }

      // Servo 3
      if (servo03SP[i] == servo03SP[i + 1]) {
      }
      if (servo03SP[i] > servo03SP[i + 1]) {
        for ( int j = servo03SP[i]; j >= servo03SP[i + 1]; j--) {
          servo03.write(j);
          delay(speedDelay);
        }
      }
      if (servo03SP[i] < servo03SP[i + 1]) {
        for ( int j = servo03SP[i]; j <= servo03SP[i + 1]; j++) {
          servo03.write(j);
          delay(speedDelay);
        }
      }

      // Servo 4
      if (servo04SP[i] == servo04SP[i + 1]) {
      }
      if (servo04SP[i] > servo04SP[i + 1]) {
        for ( int j = servo04SP[i]; j >= servo04SP[i + 1]; j--) {
          servo04.write(j);
          delay(speedDelay);
        }
      }
      if (servo04SP[i] < servo04SP[i + 1]) {
        for ( int j = servo04SP[i]; j <= servo04SP[i + 1]; j++) {
          servo04.write(j);
          delay(speedDelay);
        }
      }

      // Servo 5
      if (servo05SP[i] == servo05SP[i + 1]) {
      }
      if (servo05SP[i] > servo05SP[i + 1]) {
        for ( int j = servo05SP[i]; j >= servo05SP[i + 1]; j--) {
          servo05.write(j);
          delay(speedDelay);
        }
      }
      if (servo05SP[i] < servo05SP[i + 1]) {
        for ( int j = servo05SP[i]; j <= servo05SP[i + 1]; j++) {
          servo05.write(j);
          delay(speedDelay);
        }
      }

      // Servo 6
      if (servo06SP[i] == servo06SP[i + 1]) {
      }
      if (servo06SP[i] > servo06SP[i + 1]) {
        for ( int j = servo06SP[i]; j >= servo06SP[i + 1]; j--) {
          servo06.write(j);
          delay(speedDelay);
        }
      }
      if (servo06SP[i] < servo06SP[i + 1]) {
        for ( int j = servo06SP[i]; j <= servo06SP[i + 1]; j++) {
          servo06.write(j);
          delay(speedDelay);
        }
      }
    }
  }
}Code language: Arduino (arduino)

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


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

  1. Управление монетоприемником с помощью Arduino
  2. Вольтметр своими руками с использованием Arduino и смартфона
  3. Использование Интернета вещей для удаленного управления манипулятором
  4. Робот с сервомотором избегает препятствий
  5. Arduino с Bluetooth для управления светодиодом!
  6. Роботизированная рука, управляемая нунчук (с Arduino)
  7. Arduino Nano:управление двумя шаговыми двигателями с помощью джойстика
  8. MobBob:самостоятельный робот Arduino, управляемый смартфоном Android
  9. Littlearm 2C:создание напечатанной на 3D-принтере руки робота Arduino
  10. Токарный центр с манипулятором