Სარჩევი:

საფორტეპიანო ფილები რობოტი მკლავი: 5 ნაბიჯი
საფორტეპიანო ფილები რობოტი მკლავი: 5 ნაბიჯი

ვიდეო: საფორტეპიანო ფილები რობოტი მკლავი: 5 ნაბიჯი

ვიდეო: საფორტეპიანო ფილები რობოტი მკლავი: 5 ნაბიჯი
ვიდეო: ნადავლი ფილმები 2024, ივლისი
Anonim
ფორტეპიანო ფილები რობოტი მკლავი
ფორტეპიანო ფილები რობოტი მკლავი

ჯგუფი შედგება 2 ავტომატიზაციის ინჟინრებისგან UCN– დან, რომლებმაც წარმოადგინეს ბრწყინვალე იდეა, რომლის მოტივაციაც გვაქვს და განვავითაროთ. იდეა ემყარება არდუინოს დაფას, რომელიც აკონტროლებს რობოტულ მკლავს. არდუინოს დაფა არის ოპერაციის ტვინი და შემდეგ ოპერაციის გამტარებელი, Robotic arm, გააკეთებს იმას, რაც მას სჭირდება. უფრო ღრმა ახსნა მოგვიანებით მოვა.

ნაბიჯი 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: საბოლოო პროგრამა

||| პროგრამა |||

#ჩართეთ

#მოიცავს #მოიცავს "უქმნის.ჰ" #მოიცავს // Pixy Library #include

#განსაზღვრეთ POSECOUNT 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); // დააწესეთ ერთობლივი ნომერი 5 რეგისტრი 32 სიჩქარის 100. // ცვლადების ინიციალიზაცია id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // სერიული პორტის გახსნა Serial.begin (9600); დაგვიანება (500); Serial.println ("############################"); Serial.println ("სერიული კომუნიკაცია დამყარდა.");

// შეამოწმეთ ლიპო ბატარეის ძაბვის CheckVoltage ();

// სერვანების სკანირება, პოზიციის დაბრუნება MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }

void loop () {// წაიკითხეთ სენსორი: int inByte = Serial.read ();

გადართვა (inByte) {

საქმე '1': MovePose1 (); შესვენება;

საქმე '2': MovePose2 (); შესვენება; საქმე '3': MovePose3 (); შესვენება;

საქმე '4': MovePose4 (); შესვენება;

საქმე '5': MoveHome (); შესვენება; საქმე '6': დაიჭირე (); შესვენება;

საქმე '7': LEDTest (); შესვენება;

საქმე '8': RelaxServos (); შესვენება; }}

void CheckVoltage () {// დაელოდეთ, შემდეგ შეამოწმეთ ძაბვა (LiPO უსაფრთხოება) float voltage = (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 ("############################"); }

ბათილია MoveHome () {დაგვიანებით (100); // რეკომენდირებული პაუზა bioloid.loadPose (მთავარი); // ჩატვირთეთ პოზა FLASH– დან, nextPose ბუფერულ ბიოლოიდში. readPose (); // მიმდინარე სერვო პოზიციებში წაკითხვა curPose ბუფერზე Serial.println ("############################"); Serial.println ("სერვისების გადატანა სახლის პოზიციაზე"); Serial.println ("############################"); დაგვიანება (1000); bioloid.interpolateSetup (1000); // ინტერპოლაციის დაყენება მიმდინარე-> მომდევნო 1/2 წამზე მეტი ხნის განმავლობაში (bioloid.interpolating> 0) {// ამის გაკეთება სანამ ჩვენ არ მივაღწიეთ ჩვენს ახალ პოზას bioloid.interpolateStep (); // გადაადგილება servos, საჭიროების შემთხვევაში. დაგვიანება (3); } if (RunCheck == 1) {MenuOptions (); }}

ბათილია MovePose1 () {დაგვიანებით (100); // რეკომენდირებული პაუზა bioloid.loadPose (Pose1); // ჩატვირთეთ პოზა FLASH– დან, nextPose ბუფერულ ბიოლოიდში. readPose (); // მიმდინარე სერვო პოზიციებში წაკითხვა curPose ბუფერზე Serial.println ("############################"); Serial.println ("სერვისების გადატანა პირველ პოზიციაზე"); Serial.println ("############################"); დაგვიანება (1000); bioloid.interpolateSetup (1000); // ინტერპოლაციის დაყენება მიმდინარე-> მომდევნო 1/2 წამზე მეტი ხნის განმავლობაში (bioloid.interpolating> 0) {// ამის გაკეთება სანამ ჩვენ არ მივაღწიეთ ჩვენს ახალ პოზას bioloid.interpolateStep (); // გადაადგილება servos, საჭიროების შემთხვევაში. დაგვიანება (3); } SetPosition (3, 291); // დააწესეთ სახსრის პოზიცია 3 '0' დაგვიანებით (100); // დაელოდეთ სახსრის გადაადგილებას if (RunCheck == 1) {MenuOptions (); }}

ბათილია MovePose2 () {დაგვიანებით (100); // რეკომენდირებული პაუზა bioloid.loadPose (Pose2); // ჩატვირთეთ პოზა FLASH– დან, nextPose ბუფერულ ბიოლოიდში. readPose (); // მიმდინარე სერვო პოზიციებში წაკითხვა curPose ბუფერზე Serial.println ("############################"); Serial.println ("სერვისების გადატანა მე -2 პოზიციაზე"); Serial.println ("############################"); დაგვიანება (1000); bioloid.interpolateSetup (1000); // ინტერპოლაციის დაყენება მიმდინარე-> მომდევნო 1/2 წამზე მეტი ხნის განმავლობაში (bioloid.interpolating> 0) {// გააკეთეთ ეს სანამ ჩვენ არ მივაღწიეთ ჩვენს ახალ პოზას bioloid.interpolateStep (); // გადაადგილება servos, საჭიროების შემთხვევაში. დაგვიანება (3); } SetPosition (3, 291); // დააწესეთ სახსრის პოზიცია 3 '0' დაგვიანებით (100); // დაელოდეთ სახსრის გადაადგილებას if (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {დაგვიანებით (100); // რეკომენდებული პაუზა bioloid.loadPose (Pose3); // ჩატვირთეთ პოზა FLASH– დან, nextPose ბუფერულ ბიოლოიდში. readPose (); // მიმდინარე სერვო პოზიციებში წაკითხვა curPose ბუფერზე Serial.println ("############################"); Serial.println ("სერვისების გადატანა მე -3 პოზიციაზე"); Serial.println ("############################"); დაგვიანება (1000); bioloid.interpolateSetup (1000); // ინტერპოლაციის დაყენება მიმდინარე-> მომდევნო 1/2 წამზე მეტი ხნის განმავლობაში (bioloid.interpolating> 0) {// ამის გაკეთება სანამ ჩვენ არ მივაღწიეთ ჩვენს ახალ პოზას bioloid.interpolateStep (); // გადატანა servos, საჭიროების შემთხვევაში. დაგვიანება (3); } SetPosition (3, 291); // დააწესეთ სახსრის პოზიცია 3 '0' დაგვიანებით (100); // დაელოდეთ სახსრის გადაადგილებას if (RunCheck == 1) {MenuOptions (); }}

ბათილია MovePose4 () {დაგვიანებით (100); // რეკომენდირებული პაუზა bioloid.loadPose (Pose4); // ჩატვირთეთ პოზა FLASH– დან, nextPose ბუფერულ ბიოლოიდში. readPose (); // მიმდინარე სერვო პოზიციებში წაკითხვა curPose ბუფერზე Serial.println ("############################"); Serial.println ("სერვისების გადატანა მე -4 პოზიციაზე"); Serial.println ("############################"); დაგვიანება (1000); bioloid.interpolateSetup (1000); // ინტერპოლაციის დაყენება მიმდინარე-> მომდევნო 1/2 წამზე მეტი ხნის განმავლობაში (bioloid.interpolating> 0) {// ამის გაკეთება სანამ ჩვენ არ მივაღწიეთ ჩვენს ახალ პოზას bioloid.interpolateStep (); // გადაადგილება servos, საჭიროების შემთხვევაში. დაგვიანება (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 ("გადადის სერვო ID:"); Serial.println (id);

while (pos> = 312) {SetPosition (id, pos); pos = pos--; დაგვიანება (10); }

while (pos <= 512) {SetPosition (id, pos); pos = pos ++; დაგვიანება (10); }

// გამეორება მომდევნო სერვო ID id = id ++;

} if (RunCheck == 1) {MenuOptions (); }}

void MenuOptions () {Serial.println ("#############################"); Serial.println ("გთხოვთ შეიყვანოთ ვარიანტი 1-5 ინდივიდუალური ტესტების ხელახლა გასაშვებად."); Serial.println ("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 ("############################"); }

void RelaxServos () {id = 1; Serial.println ("############################"); Serial.println ("დამამშვიდებელი სერვისები."); Serial.println ("############################"); while (id <= SERVOCOUNT) {დამშვიდდით (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 პროგრამაზე, რამდენიმე მნიშვნელოვანი შესწორებით პოზიციონირების შემთხვევაში. ჩვენ გამოვიყენეთ პოზა.ჰ რობოტს, რომ ჰქონდეს პოზიციები მეხსიერებაში. პირველ რიგში ჩვენ შევეცადეთ Pixycam– ით ჩვენი სათამაშო იარაღი ავტომატური ყოფილიყო, მაგრამ სინათლისა და მცირე ეკრანის პრობლემების გამო, ეს არ შეიძლებოდა მომხდარიყო. რობოტს აქვს მთავარი სახლის პოზიცია, პროგრამის ატვირთვის შემდეგ, ის შეამოწმებს რობოტში ნაპოვნი ყველა სერვისს. ჩვენ დავაყენეთ პოზები 1-4 ღილაკზე, ასე რომ ადვილი დასამახსოვრებელი იქნება. მოგერიდებათ გამოიყენოთ პროგრამა.

ნაბიჯი 4: ვიდეო სახელმძღვანელო

ნაბიჯი 5: დასკვნა

დასასრულს, რობოტი არის სახალისო პატარა პროექტი ჩვენთვის და სახალისო თამაში და ექსპერიმენტების ჩატარება. მე გირჩევთ სცადოთ და ასევე მოარგოთ მას.

გირჩევთ: