Съдържание:
- Стъпка 1: Оборудване
- Стъпка 2: Настройка на Arduino
- Стъпка 3: Окончателна програма
- Стъпка 4: Видео ръководство
- Стъпка 5: Заключение
Видео: Пиано плочки играе робот ръка: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Групата се състои от 2 инженери по автоматизация от UCN, които дойдоха с брилянтна идея, която сме мотивирани да правим и развиваме. Идеята се основава на дъска Arduino, управляваща роботизирана ръка. Платката Arduino е мозъкът на операцията и след това задвижващият механизъм на операцията, роботизираната ръка, ще направи каквото трябва. По -задълбоченото обяснение ще дойде по -късно.
Стъпка 1: Оборудване
Ръка на робота:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Софтуер за робота- https://www.arduino.cc/en/Main/OldSoftwareRelease… Камера за разпознаване на цвят:
CMUcam5 Pixy камера - (https://charmedlabs.com/default/pixy-cmucam5/)
Софтуер - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Стъпка 2: Настройка на Arduino
Можете да видите настройката на дъската тук, което е много лесно.
Вляво е захранването.
Средната е за първото серво, което по -късно е свързано с другите серво, серво от серво.
Долната част е мястото, където контролираме платката от компютър или лаптоп, който има USB вход в другия край.
Стъпка 3: Окончателна програма
||| ПРОГРАМА |||
#включва
#include #include "poses.h" #include // Pixy Library #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController (1000000);
const int SERVOCOUNT = 5; int id; int pos; логическо IDCheck; логическо RunCheck;
void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // настройте съвместен номер 1 регистър 32 на скорост 50. ax12SetRegister2 (2, 32, 50); // задайте регистър номер 2 на регистър 32 на скорост 50. ax12SetRegister2 (3, 32, 50); // задайте регистър номер 3 на 32 към скорост 50. ax12SetRegister2 (4, 32, 50); // настройте регистър номер на съединение 4 към скорост 50. ax12SetRegister2 (5, 32, 100); // задайте регистър номер на съединение 5 32 до скорост 100. // инициализира променливи id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // отваря сериен порт Serial.begin (9600); забавяне (500); Serial.println ("###########################"); Serial.println ("Установена серийна комуникация.");
// Проверете напрежението на Lipo батерията CheckVoltage ();
// Сканиране на сервоустройства, връщане на позицията MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }
void loop () {// четене на сензора: int inByte = Serial.read ();
switch (inByte) {
случай '1': MovePose1 (); прекъсване;
случай '2': MovePose2 (); прекъсване; случай '3': MovePose3 (); прекъсване;
случай '4': MovePose4 (); прекъсване;
случай '5': MoveHome (); прекъсване; случай '6': Grab (); прекъсване;
случай '7': LEDTest (); прекъсване;
случай '8': RelaxServos (); прекъсване; }}
void CheckVoltage () {// изчакайте, след това проверете напрежението (LiPO безопасност) плаващото напрежение = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10,0; Serial.println ("###########################"); Serial.print ("Системно напрежение:"); Serial.print (напрежение); Serial.println ("волта."); if (напрежение 10.0) {Serial.println ("Номинални нива на напрежение."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("##########################"); }
void MoveHome () {забавяне (100); // препоръчителна пауза bioloid.loadPose (Начало); // зареждаме позата от FLASH, в nextPose буфера bioloid.readPose (); // четене в текущите позиции на серво към буфера curPose Serial.println ("##########################"); Serial.println ("Преместване на сервомоторите в начална позиция"); Serial.println ("###########################"); забавяне (1000); bioloid.interpolateSetup (1000); // настройка за интерполация от текущи-> следващи над 1/2 секунда while (bioloid.interpolating> 0) {// направете това, докато не сме достигнали новата ни поза bioloid.interpolateStep (); // преместване на серво, ако е необходимо. забавяне (3); } if (RunCheck == 1) {MenuOptions (); }}
void MovePose1 () {забавяне (100); // препоръчителна пауза bioloid.loadPose (Pose1); // зареждаме позата от FLASH, в nextPose буфера bioloid.readPose (); // четене в текущите серво позиции на буфера curPose Serial.println ("##########################"); Serial.println ("Преместване на сервомоторите на 1 -ва позиция"); Serial.println ("###########################"); забавяне (1000); bioloid.interpolateSetup (1000); // настройка за интерполация от текущи-> следващи над 1/2 в секунда while (bioloid.interpolating> 0) {// направете това, докато не сме достигнали новата ни позиция bioloid.interpolateStep (); // преместване на серво, ако е необходимо. забавяне (3); } SetPosition (3, 291); // задаваме позицията на съединение 3 на '0' забавяне (100); // изчакваме съединението да се премести if (RunCheck == 1) {MenuOptions (); }}
void MovePose2 () {забавяне (100); // препоръчителна пауза bioloid.loadPose (Pose2); // зареждаме позата от FLASH, в nextPose буфера bioloid.readPose (); // четене в текущите серво позиции на буфера curPose Serial.println ("##########################"); Serial.println ("Преместване на сервомоторите на 2 -ра позиция"); Serial.println ("###########################"); забавяне (1000); bioloid.interpolateSetup (1000); // настройка за интерполация от текущи-> следващи над 1/2 в секунда while (bioloid.interpolating> 0) {// направете това, докато не сме достигнали новата ни позиция bioloid.interpolateStep (); // преместване на серво, ако е необходимо. забавяне (3); } SetPosition (3, 291); // задаваме позицията на съединение 3 на '0' забавяне (100); // изчакваме съединението да се премести if (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {забавяне (100); // препоръчителна пауза bioloid.loadPose (Pose3); // зареждаме позата от FLASH, в nextPose буфера bioloid.readPose (); // четене в текущите позиции на серво към буфера curPose Serial.println ("##########################"); Serial.println ("Преместване на сервомоторите на 3 -та позиция"); Serial.println ("###########################"); забавяне (1000); bioloid.interpolateSetup (1000); // настройка за интерполация от текущи-> следващи над 1/2 в секунда while (bioloid.interpolating> 0) {// направете това, докато не сме достигнали новата ни позиция bioloid.interpolateStep (); // преместване на серво, ако е необходимо. забавяне (3); } SetPosition (3, 291); // задаваме позицията на съединение 3 на '0' забавяне (100); // изчакваме съединението да се премести if (RunCheck == 1) {MenuOptions (); }}
void MovePose4 () {забавяне (100); // препоръчителна пауза bioloid.loadPose (Pose4); // зареждаме позата от FLASH, в nextPose буфера bioloid.readPose (); // четене в текущите позиции на серво към буфера curPose Serial.println ("##########################"); Serial.println ("Преместване на сервомоторите на 4 -та позиция"); Serial.println ("###########################"); забавяне (1000); bioloid.interpolateSetup (1000); // настройка за интерполация от текущи-> следващи над 1/2 в секунда while (bioloid.interpolating> 0) {// направете това, докато не сме достигнали новата ни позиция bioloid.interpolateStep (); // преместване на серво, ако е необходимо. забавяне (3); } SetPosition (3, 291); // задаваме позицията на съединение 3 на '0' забавяне (100); // изчакваме съединението да се премести if (RunCheck == 1) {MenuOptions (); }}
void MoveTest () {Serial.println ("###########################"); Serial.println ("Инициализиране на тест за знак за движение"); Serial.println ("###########################"); забавяне (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Преместване на серво идентификатор:"); Serial.println (id);
while (pos> = 312) {SetPosition (id, pos); pos = pos--; забавяне (10); }
while (pos <= 512) {SetPosition (id, pos); pos = pos ++; забавяне (10); }
// итерация към следващия servo ID id = id ++;
} if (RunCheck == 1) {MenuOptions (); }}
void MenuOptions () {Serial.println ("###########################"); Serial.println ("Моля, въведете опция 1-5, за да стартирате отново индивидуални тестове."); Serial.println ("1) 1 -ва позиция"); Serial.println ("2) 2 -ра позиция"); Serial.println ("3) 3 -та позиция"); Serial.println ("4) 4 -та позиция"); Serial.println ("5) Начална позиция"); Serial.println ("6) Проверка на напрежението на системата"); Serial.println ("7) Извършване на LED тест"); Serial.println ("8) Отпуснете сервомоторите"); Serial.println ("###########################"); }
void RelaxServos () {id = 1; Serial.println ("###########################"); Serial.println ("Релаксиращи сървъри."); Serial.println ("###########################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; забавяне (50); } if (RunCheck == 1) {MenuOptions (); }}
void LEDTest () {id = 1; Serial.println ("###########################"); Serial.println ("Изпълняващ се LED тест"); Serial.println ("###########################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); забавяне (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); забавяне (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // задаваме позицията на съединение 1 на '0' забавяне (100); // изчакваме ставата да се премести
}
Ние базирахме нашата програма на програмата PincherTest на производителите с някои големи промени в случая на позициониране. Използвахме poses.h, за да може роботът да има позициите в паметта. Първо се опитахме да създадем нашата ръка за игра с Pixycam да бъде автоматична, но поради проблеми със светлината и малкия екран това не можеше да се случи. Роботът има основна начална позиция, след като качи програмата, той ще тества всички сервоустройства, открити в робота. Задали сме пози за бутоните 1-4, така че ще бъде лесно да се запомни. Чувствайте се свободни да използвате програмата.
Стъпка 4: Видео ръководство
Стъпка 5: Заключение
В заключение, роботът е забавен малък проект за нас и забавно крадене, с което да си играем и да експериментираме. Препоръчвам ви да опитате и да го персонализирате.
Препоръчано:
Махнете с ръка, за да контролирате роботизираната ръка на OWI Без прикачени низове: 10 стъпки (със снимки)
Махнете с ръка, за да контролирате роботизираната ръка на OWI … Без прикачени низове: ИДЕЯТА: Има поне 4 други проекта на Instructables.com (към 13 май 2015 г.) около модифицирането или контрола на роботизираната ръка на OWI. Не е изненадващо, тъй като това е толкова страхотен и евтин роботизиран комплект за игра. Този проект е подобен в
Arduino - Пиано плочки: 16 стъпки (със снимки)
Arduino - Piano Tiles: Здравейте интернет хора, това ще бъде за това как да направите това, което ОПРЕДЕЛНО не е откъсване от мобилна игра на arduino uno r3. така, за да започнете, ще ви трябват всички части, които са както следва ! 1x Arduino Uno r3 ($ 42) 2x LCD клавиатурен щит ($ 19 всеки) 5
КАК ДА СЕ СБОРЯ ВРЕМЕННА ДЪРВЕНА РОБОТНА РЪКА (ЧАСТ 3: РОБОТНА РЪКА) - НА ОСНОВА НА МИКРО: BITN: 8 стъпки
КАК ДА СЕ СБОРЯ ВРЕМЕННА ДЪРВЕНА РОБОТНА РЪКА (ЧАСТ 3: РОБОТНА РЪКА) - НА ОСНОВА НА МИКРО: BITN: Следващият процес на инсталиране се основава на завършването на режима за избягване на препятствия. Процесът на инсталиране в предишния раздел е същият като процеса на инсталиране в режим на проследяване на линии. Тогава нека да разгледаме окончателната форма на A
Как да сглобите впечатляваща дървена ръка на робот (част 1: Робот за проследяване на линии)-Въз основа на Micro: Bit: 9 стъпки
Как да съберем впечатляваща дървена ръка на робот (част 1: Робот за проследяване на линии)-Въз основа на Micro: Bit: Този дървен човек има три форми, той е много различен и впечатляващ. Тогава нека влезем в него един по един
Трета ръка ++: Многофункционална помощна ръка за електроника и друга деликатна работа .: 14 стъпки (със снимки)
Трета ръка ++: Многофункционална помощна ръка за електроника и други деликатни работи. Никога не успях да получа клиповете точно там, където ги исках, или ми отне повече време, отколкото наистина трябваше, за да се инсталира