Mündəricat:
- Addım 1: Avadanlıq
- Addım 2: Arduino Quraşdırması
- Addım 3: Son Proqram
- Addım 4: Video Bələdçisi
- Addım 5: Nəticə
Video: Robot qolu çalan fortepiano plitələri: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
Qrup, UCN -dən 2 Avtomatika Mühəndisindən ibarətdir ki, bizim etməyimizə və inkişaf etməyimizə həvəsli olduğumuz parlaq bir fikir ortaya qoydu. Fikir, robot qolu idarə edən bir Arduino lövhəsinə əsaslanır. Arduino lövhəsi əməliyyatın beyinləridir və sonra əməliyyatın aktuatoru olan Robotik qol, lazım olanı edəcək. Daha dərin izah daha sonra gələcək.
Addım 1: Avadanlıq
Robot qolu:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Robot üçün proqram təminatı- https://www.arduino.cc/en/Main/OldSoftwareRelease… Rəng aşkarlama kamerası:
CMUcam5 Pixy kamera - (https://charmedlabs.com/default/pixy-cmucam5/)
Proqram təminatı - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Addım 2: Arduino Quraşdırması
Lövhədə quraşdırmanı burada görə bilərsiniz, bu çox asandır.
Solda Güc Təchizatı var.
Orta, sonradan digər servolara servo ilə bağlanan ilk servo üçündür.
Ən alt tərəfi, lövhəni digər ucunda USB girişi olan bir PC və ya Laptopdan idarə etdiyimiz yerdir.
Addım 3: Son Proqram
||| PROQRAM |||
#daxil edin
#include #include "pozes.h" #include // Pixy Library #include
#TƏQDİM OLUN 5
BioloidController bioloid = BioloidController (1000000);
const int SERVOCOUNT = 5; int id; int pos; boolean IDCheck; boolean RunCheck;
void setup () {pinMode (0, ÇIXIŞ); ax12SetRegister2 (1, 32, 50); // birləşmə nömrəsi 1 registrini 32 sürətini 50 -yə təyin edin. ax12SetRegister2 (2, 32, 50); // birləşmə nömrəsi 2 qeydini 32 sürətini 50 -yə təyin edin. ax12SetRegister2 (3, 32, 50); // birləşmə nömrəsi 3 reyestrini 32 sürətini 50 -yə təyin edin. ax12SetRegister2 (4, 32, 50); // birləşmə nömrəsi 4 qeydini 32 sürətini 50 -yə təyin edin. ax12SetRegister2 (5, 32, 100); 32 sürəti 100 -ə çatdırmaq üçün. // dəyişənləri başlatmaq id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // açıq seriyalı port Serial.begin (9600); gecikmə (500); Serial.println ("############################"); Serial.println ("Serial Rabitə Quruldu.");
// Lipo Batareya Gərginliyinin yoxlanılması CheckVoltage ();
// Servosları tarayın, MoveTest () mövqeyini qaytarın; MoveHome (); MenuOptions (); RunCheck = 1; }
void loop () {// sensoru oxuyun: int inByte = Serial.read ();
keçid (inBayt) {
hal '1': MovePose1 (); fasilə;
hal '2': MovePose2 (); fasilə; hal '3': MovePose3 (); fasilə;
hal '4': MovePose4 (); fasilə;
hal '5': MoveHome (); fasilə; hal '6': Grab (); fasilə;
hal '7': LEDTest (); fasilə;
hal '8': RelaxServos (); fasilə; }}
void CheckVoltage () {// gözləyin, sonra gərginliyi yoxlayın (LiPO təhlükəsizliyi) float gərginliyi = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("############################"); Serial.print ("Sistem Gerilimi:"); Serial çap (gərginlik); Serial.println ("volt."); if (gərginlik 10.0) {Serial.println ("Gərginlik səviyyələri nominal."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("############################"); }
etibarsız MoveHome () {gecikmə (100); // tövsiyə olunan fasilə bioloid.loadPose (Ev); // pozanı FLASH -dan nextPose buferinə yükləyin bioloid.readPose (); // cari servo mövqelərində curPose buferinə oxuyun Serial.println ("##########################"); Serial.println ("Servoları Ev mövqeyinə keçir"); Serial.println ("############################"); gecikmə (1000); bioloid.interpolateSetup (1000); // cari-> sonrakı 1/2 saniyədən çox müddət ərzində (bioloid.interpolating> 0) interpolasiya üçün qurma {// yeni vəziyyətimiz bioloid.interpolateStep () ə çatmamış ikən bunu edin; // lazım gələrsə servoları hərəkət etdirin. gecikmə (3); } if (RunCheck == 1) {MenuOptions (); }}
etibarsız MovePose1 () {gecikmə (100); // tövsiyə olunan fasilə bioloid.loadPose (Poz1); // pozanı FLASH -dan nextPose buferinə yükləyin bioloid.readPose (); // cari servo mövqelərində curPose buferinə oxuyun Serial.println ("###########################"); Serial.println ("Servoları 1 -ci yerə köçürür"); Serial.println ("############################"); gecikmə (1000); bioloid.interpolateSetup (1000); // cari-> saniyədə 1/2 saniyədən çox müddət ərzində (bioloid.interpolating> 0) interpolasiya üçün qurma {// yeni poza bioloid.interpolateStep () çatmamışkən bunu edin; // lazım gələrsə servoları hərəkət etdirin. gecikmə (3); } SetPosition (3, 291); // 3 -cü qovşağın mövqeyini '0' gecikməsinə təyin edin (100); // oynağın hərəkət etməsini gözləyin, əgər (RunCheck == 1) {MenuOptions (); }}
etibarsız MovePose2 () {gecikmə (100); // tövsiyə olunan fasilə bioloid.loadPose (Pose2); // pozanı FLASH -dan nextPose buferinə yükləyin bioloid.readPose (); // cari servo mövqelərində curPose buferinə oxuyun Serial.println ("##########################"); Serial.println ("Servoları 2 -ci yerə köçürür"); Serial.println ("############################"); gecikmə (1000); bioloid.interpolateSetup (1000); // cari-> sonrakı 1/2 saniyədən çox müddət ərzində (bioloid.interpolating> 0) interpolasiya üçün qurma {// yeni vəziyyətimiz bioloid.interpolateStep () ə çatmamış ikən bunu edin; // lazım gələrsə servoları hərəkət etdirin. gecikmə (3); } SetPosition (3, 291); // 3 -cü qovşağın mövqeyini '0' gecikməsinə təyin edin (100); // oynağın hərəkət etməsini gözləyin, əgər (RunCheck == 1) {MenuOptions (); }} etibarsız MovePose3 () {gecikmə (100); // tövsiyə olunan fasilə bioloid.loadPose (Pose3); // pozanı FLASH -dan nextPose buferinə yükləyin bioloid.readPose (); // cari servo mövqelərində curPose buferinə oxuyun Serial.println ("##########################"); Serial.println ("Servoları 3 -cü yerə köçürür"); Serial.println ("############################"); gecikmə (1000); bioloid.interpolateSetup (1000); // cari-> sonrakı 1/2 saniyədən çox müddət ərzində (bioloid.interpolating> 0) interpolasiya üçün qurma {// yeni vəziyyətimiz bioloid.interpolateStep () ə çatmamış ikən bunu edin; // lazım gələrsə servoları hərəkət etdirin. gecikmə (3); } SetPosition (3, 291); // 3 -cü qovşağın mövqeyini '0' gecikməsinə təyin edin (100); // oynağın hərəkət etməsini gözləyin, əgər (RunCheck == 1) {MenuOptions (); }}
etibarsız MovePose4 () {gecikmə (100); // tövsiyə olunan fasilə bioloid.loadPose (Pose4); // pozanı FLASH -dan nextPose buferinə yükləyin bioloid.readPose (); // cari servo mövqelərində curPose buferinə oxuyun Serial.println ("##########################"); Serial.println ("Servoları 4 -cü mövqeyə keçir"); Serial.println ("############################"); gecikmə (1000); bioloid.interpolateSetup (1000); // cari-> sonrakı 1/2 saniyədən çox müddət ərzində (bioloid.interpolating> 0) interpolasiya üçün qurma {// yeni vəziyyətimiz bioloid.interpolateStep () ə çatmamış ikən bunu edin; // lazım gələrsə servoları hərəkət etdirin. gecikmə (3); } SetPosition (3, 291); // 3 -cü qovşağın mövqeyini '0' gecikməsinə təyin edin (100); // oynağın hərəkət etməsini gözləyin, əgər (RunCheck == 1) {MenuOptions (); }}
etibarsız MoveTest () {Serial.println ("###########################"); Serial.println ("Hərəkət İşarəsi Testini Başlatmaq"); Serial.println ("############################"); gecikmə (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Daşınan Servo ID:"); Serial.println (id);
while (pos> = 312) {SetPosition (id, pos); pos = pos--; gecikmə (10); }
while (pos <= 512) {SetPosition (id, pos); pos = pos ++; gecikmə (10); }
// növbəti servo ID -yə təkrarlayın id = id ++;
} if (RunCheck == 1) {MenuOptions (); }}
etibarsız MenuOptions () {Serial.println ("###########################"); Serial.println ("Yenidən fərdi testlər aparmaq üçün 1-5 seçimini daxil edin."); Serial.println ("1) 1 -ci Mövqe"); Serial.println ("2) 2 -ci Mövqe"); Serial.println ("3) 3 -cü Mövqe"); Serial.println ("4) 4 -cü Mövqe"); Serial.println ("5) Ev Vəzifəsi"); Serial.println ("6) Sistem Gerilimini yoxlayın"); Serial.println ("7) LED Testini həyata keçirin"); Serial.println ("8) Relax Servos"); Serial.println ("############################"); }
boş RelaxServos () {id = 1; Serial.println ("############################"); Serial.println ("Rahatlatıcı xidmətlər."); Serial.println ("############################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; gecikmə (50); } if (RunCheck == 1) {MenuOptions (); }}
boş LEDTest () {id = 1; Serial.println ("############################"); Serial.println ("LED Testi İşləyir"); Serial.println ("############################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); gecikmə (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); gecikmə (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // birləşmə 1 -in mövqeyini '0' gecikməsinə təyin edin (100); // oynağın hərəkət etməsini gözləyin
}
Proqramımızı istehsalçıların PincherTest proqramına əsaslanaraq mövqeləşdirmə halında bəzi əsas dəyişikliklər etdik. Robotun yaddaşdakı mövqelərinə sahib olması üçün poz.h istifadə etdik. Əvvəlcə Pixycam ilə oyun kolumuzu avtomatik olaraq yaratmağa çalışdıq, ancaq işıq və kiçik ekran problemləri səbəbindən bu baş vermədi. Robotun əsas ev mövqeyi var, proqramı yüklədikdən sonra robotda olan bütün servoları sınayacaq. 1-4 düymələri üçün pozalar qoyduq, buna görə yadda saxlamaq asan olacaq. Proqramdan istifadə etməkdən çekinmeyin.
Addım 4: Video Bələdçisi
Addım 5: Nəticə
Nəticə olaraq, robot bizim üçün əyləncəli kiçik bir layihədir və ətrafında oynamaq və təcrübə etmək üçün əyləncəli bir əyləncədir. Sizi də sınamağa və özəlləşdirməyə dəvət edirəm.
Tövsiyə:
Pi-aser lazer fortepiano: 9 addım
Pi-aser bir Lazer Pianosu: Salam, mən tələbə Multimedia & Howest Belgium -da Yaradıcı Texnologiya. Həmişə musiqi çalmaq istəyirdiniz, amma hamı kimi deyil? O zaman bu sizin üçün bir şey ola bilər! Lazerlərdən bir fortepiano hazırladım. Barmaqlarınızı yuxarı qaldırmalısınız
Bükmə Efektoru: Bükülmə Plitələri üçün Robot Son Efektoru: 6 Addım
Bükmə Efektoru: Bükülmə Plitələri üçün Robot Son Efektoru: Məqsəd: Üçüncü dərəcəli əyilmə aktiv elementlərinin birincil/ikincil struktur elementə/çərçivəyə formalaşdırılması və bərkidilməsi. Qrup üzvləri: Babasola Thomas, Niloofar İmani, Bitki Songkhroh
Proqram əsaslı fırlanan günəş plitələri: 9 addım
Proqrama əsaslanan fırlanan günəş lövhələri: Artan əhaliyə və ehtiyaca görə daha az xərclə daha çox məhsul tələb edirik. Proqrama əsaslanan fırlanan günəş lövhəsi təklif etdik. Həmişə günəş işığının intensivliyi istiqamətində işləyir. Bu yarışmada xüsusi bir növ təklif etdik
Prima - Piano çalan bir robot: 13 addım
Prima - Pianoda Oynayan Robot: Robotun alətdə çalması fikri həmişə məni valeh edirdi və mən həmişə özüm qurmaq istəyirdim. Ancaq heç vaxt musiqi və musiqi alətləri haqqında çox məlumatım yox idi, buna görə necə başlayacağımı heç vaxt anlaya bilmədim. R -a qədər
Çaybotski (fortepiano çalan robot): 12 addım (şəkillərlə)
Tchaibotsky (Piano Çalma Robotu): Bu təlimat, Cənubi Florida Universitetindəki Makecourse (www.makecourse.com) layihəsi tələbinin yerinə yetirilməsi üçün yaradılmışdır. Motivasiya edə biləcək bir şey qurmaq idi