Мазмұны:

Робот қолында ойнайтын фортепиано плиткалары: 5 қадам
Робот қолында ойнайтын фортепиано плиткалары: 5 қадам

Бейне: Робот қолында ойнайтын фортепиано плиткалары: 5 қадам

Бейне: Робот қолында ойнайтын фортепиано плиткалары: 5 қадам
Бейне: NURBULLIN - Махаббат пен ойнама сен 2024, Шілде
Anonim
Робот қолында ойнайтын фортепиано плиткалары
Робот қолында ойнайтын фортепиано плиткалары

Топ UCN -ден 2 автоматтандыру инженерлерінен тұрады, олар бізді жасауға және дамытуға ынталандыратын тамаша идеямен келді. Бұл идея робот қолын басқаратын Arduino тақтасына негізделген. Arduino тақтасы - бұл операцияның миы, содан кейін операцияны орындаушы робот қолы қажет нәрсені жасайды. Толығырақ түсіндіру кейінірек болады.

1 -қадам: Жабдық

Жабдық
Жабдық

Робот қолы:

Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

Роботқа арналған бағдарламалық жасақтама- https://www.arduino.cc/kz/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 -қадам: Қорытынды бағдарлама

||| БАҒДАРЛАМА |||

#қосу

#қосу #қосу «позалар.h» #қосу // Pixy кітапханасы #қосу

#МҮМКІНДІКТІ анықтау 5

BioloidController биолоид = 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 регистрді 32 жылдамдыққа 50. ax12SetRegister2 (5, 32, 100) орнатыңыз; 32 жылдамдыққа 100. // айнымалыларды инициализациялау id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // Serial.begin (9600) сериялық портын ашу; кешіктіру (500); Serial.println («#############################»); Serial.println («Сериялық байланыс орнатылды.»);

// Тексеру Lipo Battery Voltage CheckVoltage ();

// Серверлерді қарап шығу, MoveTest () орнын қайтару; MoveHome (); MenuOptions (); RunCheck = 1; }

void loop () {// сенсорды оқу: int inByte = Serial.read ();

ауыстыру (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.println («вольт.»); if (кернеу 10.0) {Serial.println («Кернеу деңгейлері номиналды.»); } if (RunCheck == 1) {MenuOptions (); } Serial.println («#############################»); }

void MoveHome () {delay (100); // ұсынылған үзіліс bioloid.loadPose (Үй); // позаны FLASH -тен келесіPose буферіне жүктеңіз bioloid.readPose (); // ағымдағы серво позициясында curPose буферіне оқыңыз Serial.println («###########################»); Serial.println («Серверлерді бастапқы күйге жылжыту»); Serial.println («############################»); кешіктіру (1000); bioloid.interpolateSetup (1000); // ағымдағыдан> секундына 1/2 секундтан астам уақыт бойы интерполяциялауды орнату (bioloid.interpolating> 0) {// мұны біз жаңа позицияға қол жеткізе алмаған кезде жасаңыз bioloid.interpolateStep (); // егер қажет болса, серводы жылжытыңыз. кешіктіру (3); } if (RunCheck == 1) {MenuOptions (); }}

void MovePose1 () {delay (100); // ұсынылған үзіліс bioloid.loadPose (Pose1); // позаны FLASH -тен келесіPose буферіне жүктеңіз bioloid.readPose (); // ағымдағы серво позициясында оқыңыз curPose буферіне Serial.println («###########################»); Serial.println («Серверлерді 1 -ші орынға жылжыту»); Serial.println («############################»); кешіктіру (1000); bioloid.interpolateSetup (1000); // ағымдағыдан> секундына 1/2 секундтан астам уақыт бойы интерполяциялауды орнату (bioloid.interpolating> 0) {// мұны біз жаңа позицияға қол жеткізе алмаған кезде жасаңыз bioloid.interpolateStep (); // қажет болса, сервоприводтарды жылжытыңыз. кешіктіру (3); } SetPosition (3, 291); // 3 буынының орнын '0' кешігуіне (100) орнатыңыз; // буынның жылжуын күтіңіз, егер (RunCheck == 1) {MenuOptions (); }}

void MovePose2 () {delay (100); // ұсынылған үзіліс bioloid.loadPose (Pose2); // позаны FLASH -тен келесіPose буферіне жүктеңіз bioloid.readPose (); // ағымдағы серво позициясында оқыңыз curPose буферіне Serial.println («###########################»); Serial.println («Серверлерді 2 -ші орынға жылжыту»); Serial.println («############################»); кешіктіру (1000); bioloid.interpolateSetup (1000); // ағымдағыдан> секундына 1/2 секундтан астам уақыт бойы интерполяциялауды орнату (bioloid.interpolating> 0) {// мұны біз жаңа позицияға қол жеткізе алмаған кезде жасаңыз bioloid.interpolateStep (); // егер қажет болса, серводы жылжытыңыз. кешіктіру (3); } SetPosition (3, 291); // 3 буынының орнын '0' кешігуіне (100) орнатыңыз; // буынның жылжуын күтіңіз, егер (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {delay (100); // ұсынылған үзіліс bioloid.loadPose (Pose3); // позаны FLASH -ден келесі bioPro буферіне жүктеңіз bioloid.readPose (); // ағымдағы серво позициясында оқыңыз curPose буферіне Serial.println («###########################»); Serial.println («Серверлерді 3 -ші орынға жылжыту»); Serial.println («#############################»); кешіктіру (1000); bioloid.interpolateSetup (1000); // ағымдағыдан> секундына 1/2 секундтан астам уақыт бойы интерполяциялауды орнату (bioloid.interpolating> 0) {// мұны біз жаңа позицияға қол жеткізе алмаған кезде жасаңыз bioloid.interpolateStep (); // қажет болса, сервоприводтарды жылжытыңыз. кешіктіру (3); } SetPosition (3, 291); // 3 буынының орнын '0' кешігуіне (100) орнатыңыз; // буынның жылжуын күтіңіз, егер (RunCheck == 1) {MenuOptions (); }}

void MovePose4 () {delay (100); // ұсынылған үзіліс bioloid.loadPose (Pose4); // позаны FLASH -ден келесі bioPro буферіне жүктеңіз bioloid.readPose (); // ағымдағы серво позициясында оқыңыз curPose буферіне Serial.println («###########################»); Serial.println («Серваларды 4 -ші орынға жылжыту»); Serial.println («############################»); кешіктіру (1000); bioloid.interpolateSetup (1000); // ағымдағыдан> секундына 1/2 секундтан астам уақыт бойы интерполяциялауды орнату (bioloid.interpolating> 0) {// мұны біз жаңа позицияға қол жеткізе алмаған кезде жасаңыз bioloid.interpolateStep (); // егер қажет болса, серводы жылжытыңыз. кешіктіру (3); } SetPosition (3, 291); // 3 буынының орнын '0' кешігуіне (100) орнатыңыз; // буынның жылжуын күтіңіз, егер (RunCheck == 1) {MenuOptions (); }}

жарамсыз 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 ++;

} 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) Relax Servos»); Serial.println («#############################»); }

бос RelaxServos () {id = 1; Serial.println («#############################»); Serial.println («Сергітетін сервистер.»); Serial.println («#############################»); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; кешіктіру (50); } if (RunCheck == 1) {MenuOptions (); }}

жарамсыз LEDTest () {id = 1; Serial.println («#############################»); Serial.println («Жарықдиодты тестті іске қосу»); Serial.println («#############################»); while (id <= SERVOCOUNT) {ax12SetRegister (идентификатор, 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 өндірушілерінің бағдарламасына негізделгенміз. Біз роботтың жадта орналасуы үшін позаларды.h қолдандық. Алдымен біз Pixycam -мен автоматты түрде ойнайтын қолды құруға тырыстық, бірақ жарық пен шағын экран ақауларына байланысты бұл мүмкін болмады. Роботтың негізгі үй позициясы бар, бағдарламаны жүктегеннен кейін ол роботтан табылған барлық серводы тексереді. Біз позаларды 1-4 түймешіктеріне қойдық, сондықтан есте сақтау оңай болады. Бағдарламаны еркін қолданыңыз.

4 -қадам: бейне нұсқаулық

5 -қадам: Қорытынды

Қорытындылай келе, робот - бұл біз үшін қызықты шағын жоба және ойнауға және тәжірибе жасауға қызықты. Мен оны сынап көруге және оны теңшеуге шақырамын.

Ұсынылған: