Оглавление:

Простой и умный робот-манипулятор с использованием Arduino !!!: 5 шагов (с изображениями)
Простой и умный робот-манипулятор с использованием Arduino !!!: 5 шагов (с изображениями)

Видео: Простой и умный робот-манипулятор с использованием Arduino !!!: 5 шагов (с изображениями)

Видео: Простой и умный робот-манипулятор с использованием Arduino !!!: 5 шагов (с изображениями)
Видео: 🦾Оживляем танк с манипулятором на Arduino 2024, Июнь
Anonim
Image
Image
Вещи, которые вам понадобятся
Вещи, которые вам понадобятся

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

Итак, приступим …

Шаг 1. Вещи, которые вам понадобятся: -

Вещи, которые вам понадобятся
Вещи, которые вам понадобятся
Вещи, которые вам понадобятся
Вещи, которые вам понадобятся

Вот список вещей, которые вам понадобятся: -

1. Серводвигатели x 5 Ссылка для США: - https://amzn.to/2OxbSH7 Ссылка для Европы: -

2. Потенциометры x 5 (я использовал 100к.) Ссылка для США: - https://amzn.to/2ROjhDML Ссылка для Европы: -

3. Arduino UNO. (Вы также можете использовать Arduino Nano) Ссылка для США: - https://amzn.to/2DBbENW Ссылка для Европы: -

4. Макетная плата. (Я предлагаю этот комплект) Ссылка для США: - https://amzn.to/2Dy86w4 Ссылка для Европы: -

5. Аккумулятор. (необязательно, я использую адаптер на 5 В)

6. Картон / дерево / солнечная доска / акрил - все, что есть в наличии или легко найти.

И вам также понадобится установленная Arduino IDE.

Шаг 2: Изготовление руки: -

Изготовление руки
Изготовление руки
Изготовление руки
Изготовление руки

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

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

Для руки Master я приклеил потенциометры к палочкам для мороженого и сделал руку.

Обращение к изображениям даст вам лучшую идею.

Я установил все на брезентовую доску формата А4, используемую в качестве основы.

Шаг 3: Подключение: -

Установление связей
Установление связей
Установление связей
Установление связей
Установление связей
Установление связей

На этом этапе мы сделаем все необходимые подключения, см. Изображения выше.

  • Сначала подключите все сервоприводы параллельно к источнику питания (красный провод к + ve и черный или коричневый провод к Gnd)
  • Затем подключите сигнальные провода, то есть желтый или оранжевый провод, к выводу PWM Arduino.
  • Теперь подключите потенциометры к + 5В и Gnd на Arduino параллельно.
  • Подключите средний вывод к аналоговому выводу ardunio.

Здесь цифровые выводы 3, 5, 6, 9 и 10 используются для управления сервоприводами.

Аналоговые выводы от A0 до A4 используются для ввода от потенциометров.

Сервопривод, подключенный к контакту 3, будет управляться потенциометром, подключенным к A0.

Сервопривод, подключенный к выводу 5, будет управляться потенциометром на A1, и так далее….

Примечание: - Несмотря на то, что сервоприводы не питаются от Arduino, обязательно подключите Gnd сервоприводов к Arduino, иначе рука не будет работать.

Шаг 4: Кодирование: -

Кодирование
Кодирование

Логика этого кода довольно проста: значения потенциометров хранятся в массиве, записи затем просматриваются с использованием цикла for, а сервоприводы выполняют шаги в соответствии со значениями. Вы можете проверить это руководство, которое я использовал для справки «Управление сервоприводом потенциометра Arduino и память»

Код: - (Загружаемый файл прилагается ниже.)

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

#включают

// Сервообъекты Servo Servo_0; Серво Серво_1; Серво Серво_2; Серво Серво_3; Servo Servo_4; // Объекты потенциометра int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Переменная для хранения позиции сервопривода int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Переменная для хранения значений предыдущих позиций int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Переменная для хранения значений текущей позиции int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // Сохраняет угол int Servo_Number; // Не хранит серво int Storage [600]; // Массив для хранения данных (при увеличении размера массива потребуется больше памяти) int Index = 0; // Индекс массива начинается с 0-й позиции char data = 0; // переменная для хранения данных из последовательного ввода.

Теперь мы напишем функцию настройки, в которой мы установим контакты и их функции. Это основная функция, которая выполняется первой

установка void ()

{Serial.begin (9600); // Для последовательной связи между arduino и IDE. // Сервообъекты прикреплены к выводам ШИМ. Servo_0.attach (3); Servo_1.attach (5); Servo_2.attach (6); Servo_3.attach (9); Servo_4.attach (10); // Сервоприводы устанавливаются в положение 100 при инициализации. Servo_0.write (100); Servo_1.write (100); Servo_2.write (100); Servo_3.write (100); Servo_4.write (100); Serial.println («Нажмите« R »для записи и« P »для воспроизведения»); }

Теперь мы должны считывать значения потенциометров с помощью выводов аналогового входа и отображать их для управления сервоприводами. Для этого мы определим функцию и назовем ее Map_Pot ();, вы можете назвать его как хотите, это функция, определяемая пользователем

void Map_Pot ()

{/ * Сервоприводы вращаются на 180 градусов, но использовать его в ограниченных пределах - не лучшая идея, так как из-за этого сервоприводы постоянно гудят, что раздражает, поэтому мы ограничиваем перемещение сервопривода между: 1-179 * / Pot_0 = analogRead (A0); // Считываем ввод из банка и сохраняем его в переменной Pot_0. Servo_0_Pos = карта (Pot_0, 0, 1023, 1, 179); // Отображение сервоприводов в соответствии со значением от 0 до 1023 Servo_0.write (Servo_0_Pos); // Перемещаем сервопривод в это положение. Pot_1 = analogRead (A1); Servo_1_Pos = карта (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = карта (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = карта (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = карта (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Теперь напишем функцию цикла:

пустой цикл ()

{Map_Pot (); // Вызов функции для чтения значений горшков while (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println («Запись движется…»); if (data == 'P') Serial.println («Воспроизведение записанных ходов…»); } if (data == 'R') // Если введено 'R', начать запись. {// Сохраняем значения в переменной Prev_0_Pos = Servo_0_Pos; Prev_1_Pos = Servo_1_Pos; Prev_2_Pos = Servo_2_Pos; Prev_3_Pos = Servo_3_Pos; Prev_4_Pos = Servo_4_Pos; Map_Pot (); // Функция карты вызывается для сравнения if (abs (Prev_0_Pos == Servo_0_Pos)) // абсолютное значение получается путем сравнения {Servo_0.write (Servo_0_Pos); // Если значения совпадают, сервопривод перемещается if (Current_0_Pos! = Servo_0_Pos) // Если значения не совпадают {Storage [Index] = Servo_0_Pos + 0; // В массив добавляется значение Index ++; // Значение индекса увеличивается на 1} Current_0_Pos = Servo_0_Pos; } / * Подобным образом сравнение значений выполняется для всех сервоприводов, для каждой записи добавляется +100 в качестве дифференциального значения. * / if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); if (Current_1_Pos! = Servo_1_Pos) {Storage [индекс] = Servo_1_Pos + 100; Индекс ++; } Current_1_Pos = Servo_1_Pos; } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); if (Current_2_Pos! = Servo_2_Pos) {Storage [индекс] = Servo_2_Pos + 200; Индекс ++; } Current_2_Pos = Servo_2_Pos; } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); if (Current_3_Pos! = Servo_3_Pos) {Storage [индекс] = Servo_3_Pos + 300; Индекс ++; } Current_3_Pos = Servo_3_Pos; } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); if (Current_4_Pos! = Servo_4_Pos) {Storage [индекс] = Servo_4_Pos + 400; Индекс ++; } Current_4_Pos = Servo_4_Pos; } / * Значения печатаются на последовательном мониторе, '\ t' - для отображения значений в табличном формате * / Serial.print (Servo_0_Pos); Serial.print ("\ t"); Serial.print (Servo_1_Pos); Serial.print ("\ t"); Serial.print (Servo_2_Pos); Serial.print ("\ t"); Serial.print (Servo_3_Pos); Serial.print ("\ t"); Serial.println (Servo_4_Pos); Serial.print ("Индекс ="); Serial.println (индекс); задержка (50); } if (data == 'P') // ЕСЛИ введено 'P', начать воспроизведение записанных ходов. {for (int i = 0; i <Index; i ++) // Обойти массив, используя цикл for {Servo_Number = Storage / 100; // Находит количество сервоприводов Servo_Position = Storage % 100; // Находит положение сервопереключателя (Servo_Number) {case 0: Servo_0.write (Servo_Position); перерыв; случай 1: Servo_1.write (Servo_Position); перерыв; случай 2: Servo_2.write (Servo_Position); перерыв; случай 3: Servo_3.write (Servo_Position); перерыв; случай 4: Servo_4.write (Servo_Position); перерыв; } задержка (50); }}}

Как только код будет готов, загрузите его на плату Arduino

Умная рука готова к работе. Функция еще не такая гладкая, как у Stoerpeak.

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

С учетом сказанного, перейдем к тестированию….

Шаг 5: Тестирование: -

После успешной загрузки кода на плату откройте «Serial Monitor», вы можете найти его в разделе «Инструменты». Когда серийный монитор запускается, Arduino перезагружается. Теперь вы можете управлять роботизированной рукой с помощью главной руки. Но ничего не записывается.

Чтобы начать запись, введите «R» на мониторе, теперь вы можете выполнять движения, которые хотите записать.

После того, как ходы сделаны, вы должны ввести «P», чтобы сыграть записанные ходы. Сервоприводы будут продолжать выполнять движения до тех пор, пока плата не будет сброшена.

Рекомендуемые: