Съдържание:

Проста и интелигентна роботизирана ръка, използваща Arduino !!!: 5 стъпки (със снимки)
Проста и интелигентна роботизирана ръка, използваща Arduino !!!: 5 стъпки (със снимки)

Видео: Проста и интелигентна роботизирана ръка, използваща Arduino !!!: 5 стъпки (със снимки)

Видео: Проста и интелигентна роботизирана ръка, използваща Arduino !!!: 5 стъпки (със снимки)
Видео: Использование кнопки скорости шагового двигателя 28BYJ-48 с 8 проектами: Ultimate Video Tutorial, урок 107 2024, Юни
Anonim
Image
Image
Нещата, от които се нуждаете
Нещата, от които се нуждаете

В тази инструкция ще направя проста роботизирана ръка. Това ще се контролира с помощта на главна ръка. Ръката ще запомни движенията и ще играе последователно. Концепцията не е нова Получих идеята от "мини роботизирана ръка -от Stoerpeak" Исках да направя това за дълго време, но тогава бях напълно нубен и нямах никакви познания за програмиране. Сега най -накрая изграждам такъв, като го поддържам прост, евтин и го споделям с всички вас.

Така че нека започнем ….

Стъпка 1: Нещата, от които се нуждаете:-

Нещата, от които се нуждаете
Нещата, от които се нуждаете
Нещата, от които се нуждаете
Нещата, от които се нуждаете

Ето списък на нещата, от които ще се нуждаете:-

1. Серво мотори x 5 Връзка за САЩ:- https://amzn.to/2OxbSH7Link за Европа:-

2. Потенциометри x 5 (използвал съм 100 000). Връзка за САЩ:- https://amzn.to/2ROjhDMLink за Европа:-

3. Arduino UNO. (Можете да използвате и Arduino Nano) Връзка за САЩ:- https://amzn.to/2DBbENWLink за Европа:-

4. Платформа. (Предлагам този комплект) Връзка за САЩ:- https://amzn.to/2Dy86w4Link за Европа:-

5. Батерия. (по избор, използвам 5v адаптер)

6. Картон/дърво/дъска за слънце/акрил каквото и да е налично или лесно за намиране.

Освен това ще ви трябва инсталиран Arduino IDE.

Стъпка 2: Изработка на ръката:-

Изработка на ръката
Изработка на ръката
Изработка на ръката
Изработка на ръката

Тук съм използвал пръчици от Popsicle, за да направя ръката. Можете да използвате всички налични материали. И можете да опитате различни механични дизайни, за да направите още по -добро рамо. моят дизайн не е много стабилен.

Току -що използвах двустранна лента, за да залепя сервомоторите към пръчката Popsicle и да ги закрепя с помощта на винтове.

За ръката Master залепих потенциометри към пръчици за сладкиши и направих ръка.

Позоваването на снимките ще ви даде по -добра идея.

Монтирах всичко върху платно с размер А4, използвано като основа.

Стъпка 3: Осъществяване на връзки:-

Осъществяване на връзки
Осъществяване на връзки
Осъществяване на връзки
Осъществяване на връзки
Осъществяване на връзки
Осъществяване на връзки

В тази стъпка ще направим всички необходими връзки, вижте снимките по -горе.

  • Първо свържете всички сервоусилватели паралелно към захранването (Червеният проводник към +ve и черният или кафявия проводник към Gnd)
  • След това свържете сигналните проводници, т.е. жълт или оранжев проводник към PWM щифт на arduino.
  • Сега свържете паралелно потенциометрите към +5v и Gnd на arduino.
  • Свържете средния терминал към аналоговия щифт на ardunio.

Тук цифровите пинове 3, 5, 6, 9 и 10 се използват за управление на сервомоторите

Аналогови изводи A0 до A4 се използват за вход от потенциометри.

Сервото, свързано към щифт 3, ще се управлява от потенциометър, свързан към A0

Серво, свързано към пин 5, ще се управлява от пот на А1 и така нататък….

Забележка:- Въпреки че сервомоторите не се захранват от arduino, уверете се, че сте свързали Gnd на сервомоторите към arduino, в противен случай ръката няма да работи.

Стъпка 4: Кодиране:-

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

Логиката на този код е сравнително проста, стойностите на потенциометрите се съхраняват в масив, след което записите се преминават с помощта на цикъл for и сервомоторите изпълняват стъпките според стойностите. Можете да разгледате този урок, който използвах за справка „Серво управление и памет на Arduino потенциометър“

Код:- (Файл за изтегляне, прикачен по-долу.)

Първо ще декларираме всички необходими променливи в световен мащаб, за да можем да ги използваме в цялата програма. За това не са необходими специални обяснения

#включва

// Серво обекти Servo Servo_0; Серво Серво_1; Серво Серво_2; Серво Серво_3; Серво Серво_4; // Обекти на потенциометър int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Променлива за съхранение на Servo Position 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; // Съхранява номер на servo int Съхранение [600]; // Масив за съхраняване на данни (Увеличаването на размера на масива ще консумира повече памет) int Index = 0; // Индексът на масива започва от 0 -та позиция char data = 0; // променлива за съхраняване на данни от сериен вход.

Сега ще напишем функция за настройка, където задаваме щифтове и техните функции. Това е основната функция, която се изпълнява първа

void setup ()

{Serial.begin (9600); // За серийна комуникация между arduino и IDE. // Серво обектите са прикрепени към PWM щифтове. 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 и го съхранявайте в Variable 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); }

Сега ще напишем циклична функция:

void loop ()

{Map_Pot (); // Извикване на функция за четене на стойностите на пота, докато (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; Назад_1_Pos = Servo_1_Pos; Prev_2_Pos = Servo_2_Pos; Назад_3_Pos = Servo_3_Pos; Prev_4_Pos = Серво_4_Pos; Map_Pot (); // Функцията на картата се извиква за сравнение if (abs (Prev_0_Pos == Servo_0_Pos)) // абсолютната стойност се получава чрез сравняване на {Servo_0.write (Servo_0_Pos); // Ако стойностите съвпадат, серво се премества, ако (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 [Index] = 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 [Index] = 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 [Index] = 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) {Съхранение [Индекс] = 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 ("Index ="); Serial.println (индекс); забавяне (50); } ако (данни == 'P') // АКО е въведено 'P', Започнете да свирите записани ходове. {for (int i = 0; i <Index; i ++) // Обходете масива, използвайки for цикъл {Servo_Number = Storage /100; // Намира брой серво Servo_Position = Съхранение % 100; // Намира позиция на серво превключвателя (Servo_Number) {случай 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“, за да играете записаните ходове. Сервомоторите ще продължат да изпълняват ходовете, докато платката не се нулира.

Препоръчано: