Съдържание:

Пиано плочки играе робот ръка: 5 стъпки
Пиано плочки играе робот ръка: 5 стъпки

Видео: Пиано плочки играе робот ръка: 5 стъпки

Видео: Пиано плочки играе робот ръка: 5 стъпки
Видео: Основные ошибки при возведении перегородок из газобетона #5 2024, Ноември
Anonim
Пиано плочки играе робот ръка
Пиано плочки играе робот ръка

Групата се състои от 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

Настройка на Arduino
Настройка на 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: Заключение

В заключение, роботът е забавен малък проект за нас и забавно крадене, с което да си играем и да експериментираме. Препоръчвам ви да опитате и да го персонализирате.

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