Мазмуну:
- 1 -кадам: жабдуулар
- 2 -кадам: Arduino орнотуу
- 3 -кадам: Финалдык программа
- 4 -кадам: Video Guide
- 5 -кадам: Жыйынтык
Video: Робот колун ойногон пианино плиткалары: 5 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Топ UCNден 2 автоматика инженерлеринен турат, алар бизди өнүктүрүүгө түрткү болгон сонун идея менен келишкен. Идея робот колун башкарган 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 "pozes.h" #include // Pixy Library #include
#аныктоо МҮМКҮНЧҮЛҮГҮ 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);; // биргелешкен номер 3 регистрин 32 ылдамдыгын 50гө коюңуз. ax12SetRegister2 (4, 32, 50); 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) {
case '1': MovePose1 (); тыныгуу;
case '2': MovePose2 (); тыныгуу; case '3': MovePose3 (); тыныгуу;
case '4': MovePose4 (); тыныгуу;
case '5': MoveHome (); тыныгуу; case '6': Grab (); тыныгуу;
case '7': LEDTest (); тыныгуу;
case '8': RelaxServos (); тыныгуу; }}
void CheckVoltage () {// күтө туруңуз, андан кийин чыңалууну текшериңиз (LiPO коопсуздугу) калкыма чыңалуу = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("#############################"); Serial.print ("Системдик чыңалуу:"); Serial.print (чыңалуу); Serial.println ("вольт."); if (Voltage 10.0) {Serial.println ("Чыңалуу деңгээлдери номиналдуу."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("#############################"); }
void MoveHome () {delay (100); // сунушталган тыныгуу bioloid.loadPose (Башкы бет); // позаны FLASHтен кийинкиPose буферине жүктө bioloid.readPose (); // curPose буферине Servo.println ("##########################") учурдагы серво позицияларда окуу; Serial.println ("Серволорду Башкы позицияга жылдыруу"); Serial.println ("#############################"); кечигүү (1000); bioloid.interpolateSetup (1000); // учурдан тартып> секундасына 1/2дан ашыгыраак убакытка чейин интерполяциялоону орнотуу (bioloid.interpolating> 0) {// муну биз жаңы позага жете элек кезде жасаңыз bioloid.interpolateStep (); // эгер керек болсо, серверлерди жылдырыңыз. кечигүү (3); } if (RunCheck == 1) {MenuOptions (); }}
жараксыз MovePose1 () {кечиктирүү (100); // сунушталган тыныгуу bioloid.loadPose (Pose1); // позаны FLASHтен кийинкиPose буферине жүктө bioloid.readPose (); // curPose буферине Servo.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 (); }}
жараксыз MovePose2 () {кечиктирүү (100); // сунушталган тыныгуу bioloid.loadPose (Pose2); // позаны FLASHтен кийинкиPose буферине жүктө bioloid.readPose (); // curPose буферине Servo.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тен кийинкиPose буферине жүктө bioloid.readPose (); // curPose буферине Servo.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 (); }}
жараксыз MovePose4 () {кечиктирүү (100); // сунушталган тыныгуу bioloid.loadPose (Pose4); // позаны FLASHтен кийинкиPose буферине жүктө bioloid.readPose (); // curPose буферине Servo.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 ("Initializing Movement Sign Test"); Serial.println ("#############################"); кечигүү (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Жылдырылуучу Servo ID:"); 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) 2nd Position"); Serial.println ("3) 3rd Position"); 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 ("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 программасына негиздеп койдук. Биз роботтун эс тутумундагы орундарга ээ болушу үчүн pozes.h колдондук. Биринчиден, биз Pixycam менен ойноочу колубузду автоматтык түрдө түзүүгө аракет кылдык, бирок жарык жана кичинекей экран көйгөйлөрүнөн улам андай боло алган жок. Роботтун негизги үй позициясы бар, программаны жүктөгөндөн кийин роботтон табылган баардык серволорду текшерет. Биз 1-4 кнопкалары үчүн позаларды койдук, ошондуктан аны эстөө оңой болот. Программаны колдонуудан тартынбаңыз.
4 -кадам: Video Guide
5 -кадам: Жыйынтык
Жыйынтыктап айтканда, робот биз үчүн кызыктуу кичинекей долбоор жана айланып ойноо жана эксперимент жасоо үчүн кызыктуу. Мен аны сынап көрүүгө жана аны ыңгайлаштырууга чакырам.
Сунушталууда:
TLV493D, Joystick And, Arduino менен робот колун башкаруу: 3 кадам
TLV493D, Joystick And, Arduino менен робот колун башкаруу: TLV493D сенсорлуу роботуңуздун альтернативдүү контролери, 3 даража эркиндикке ээ болгон магниттик сенсор (x, y, z), булар менен жаңы долбоорлоруңузду I2C байланышы менен көзөмөлдөй аласыз. микроконтроллерлер жана электрондук такта Bast P
Arduino жана Ps2 Remote Control менен 4dof жогорку кубаттуу чоң көлөмдөгү робот колун кантип башкарса болот ?: 4 кадам
Arduino жана Ps2 Remote Control менен 4dof Жогорку Power Big Size робот колун кантип башкарса болот ?: бул комплект жогорку кубаттуулуктагы мотор99996 колдонот, ага жогорку ток керектелет, бизде көп күчтү текшерүү керек. 5v 6а адаптер иштейт. Жана arduino тактасы 6dof робот колунда дагы иштейт
Прима - пианинодо ойногон робот: 13 кадам
Прима - пианино ойногон робот: Роботтун аспапта ойноо идеясы мени дайыма кызыктырчу, мен ар дайым аны өзүм кургум келет. Бирок, мен эч качан музыка жана музыкалык аспаптар жөнүндө көп маалыматка ээ эмесмин, ошондуктан мен муну кантип баштаарымды эч качан түшүнө алган эмесмин. Р чейин
КАНТИП ЖЫГЫМДУУ ЖЫГАЧ РОБОТ КОЛУН ЧОГУЛСА БОЛОТ (3 -БӨЛҮК: РОБОТ АРКАСЫ) - МИКРОГО ТҮЗҮЛГӨН: БИТ: 8 Кадам
КАНТИП ИШТЕГЕН ЖЫГАЧ РОБОТ КОЛУН ЧОГУЛСА БОЛОТ (3 -БӨЛҮК: ROBOT ARM) - МИКРОГО ЖАЗЫЛЫП: BITN: Кийинки орнотуу процесси тоскоолдуктарды болтурбоо режимин аяктоого негизделген. Мурунку бөлүмдөгү орнотуу процесси линияны көзөмөлдөө режиминдеги орнотуу процесси менен бирдей. Анда Анын акыркы формасын карап көрөлү
КАНТИП ЖЫГАЧТУУ РОБОТ КОЛУН ЧОГУЛУШУ КЕРЕК (2 -БӨЛҮМ: Тоскоолдукту болтурбоо үчүн РОБОТ) - МИКРОГО БАЗЫЛГАН: БИТ: 3 кадам
КАНТИП ЖЫГАЧТУУ РОБОТ КОЛУН ЧОГУЛУШУ КЕРЕК (2-БӨЛҮМ: Тоскоолдукту болтурбоо үчүн РОБОТ)-МИКРОГО ТУЗУЛГАН: БИТ: Буга чейин биз Armbitти линияны көзөмөлдөө режиминде киргизгенбиз. Андан кийин, тоскоолдуктардан качуу үчүн Armbitди кантип орнотууну тааныштырабыз