সুচিপত্র:
- ধাপ 1: বেস এবং হিংজড ক্যাপ হোল্ডার তৈরি করুন
- ধাপ 2: লম্বা সার্ভো আর্ম করুন এবং সার্ভো সংযুক্ত করুন
- ধাপ 3: লোড এবং রান স্কেচ
ভিডিও: Arduino এবং এক Servo সঙ্গে স্বয়ংক্রিয় বল রোলার: 3 ধাপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 07:56
এটি একটি সহজ ছোট Arduino এবং servo প্রকল্প যা প্রায় দুই ঘন্টা সময় নেয়। এটি একটি জার ক্যাপের এক প্রান্ত উত্তোলনের জন্য একটি সার্ভো ব্যবহার করে যাতে ভিতরের পরিধির চারপাশে একটি স্টিলের বল ঘুরাতে পারে। এটি স্ব -প্রারম্ভিক, গতি পরিবর্তন করতে পারে এবং একবারে দুটি (বা আরো?) বল স্পিন করতে পারে। নির্মাণ এবং কাজ পেতে মজা। টাইমিং প্যারামিটারগুলি সম্ভবত আরও দ্রুত গতির জন্য খেলতে পারে। একটি চৌম্বক বল সহ কয়েকটি হল ইফেক্ট সেন্সর ব্যবহার করে এটি একটি স্মার্ট মেশিন তৈরি করা যেতে পারে যা সেরা পরামিতিগুলি বের করতে পারে।
আমার উল্লেখ করা উচিত যে এখানে instructables.com- এ কারও কাছে আরও অত্যাধুনিক বল রোলার মেশিন রয়েছে:
উপকরণ প্রয়োজন:
Arduino Uno (অথবা কোন Arduino)
Servo ieldাল (alচ্ছিক)
9g servo
জার টুপি
লোহার গোলক
কিছু স্ক্র্যাপ কাঠ
ধাপ 1: বেস এবং হিংজড ক্যাপ হোল্ডার তৈরি করুন
ভিত্তিটি কেবল কাঠের একটি অংশ যা কাঠের টুকরোটি মাউন্ট করা। হিংড কাঠ একটি জারের ক্যাপের চেয়ে বড় হওয়া উচিত যা আপনি ব্যবহার করবেন এবং কব্জা এবং সার্ভো মাউন্ট করার জন্য পর্যাপ্ত জায়গা থাকবে।
আমি ছোট প্লাস্টিকের আরসি উড়োজাহাজের হিংস ব্যবহার করেছি এবং শুধু তাদের হিংগড কাঠ এবং বেসে গরম করেছি।
ধাপ 2: লম্বা সার্ভো আর্ম করুন এবং সার্ভো সংযুক্ত করুন
একটি দীর্ঘ servo আর্ম করতে আমি শুধু একটি ছোট স্ক্রু এবং বাদাম একটি জোড়া সঙ্গে servo বাহু কাঠের একটি 5 সেন্টিমিটার টুকরা সংযুক্ত। বেসের অনুভূমিক হলে সার্ভো আর্মটি 90 ডিগ্রিতে থাকা উচিত।
আমি শুধু হিংড কাঠের ধারককে গরম করে আঠালো করেছিলাম কিন্তু আমি দেখেছি যে যদি আপনি এটি কয়েক মিনিটের বেশি সময় ধরে চলতে দেন, তাহলে সার্ভো গরম আঠালো গরম করবে এবং কাঠ থেকে ছেড়ে দেবে। সুতরাং একটি ভাল সংযুক্তি পদ্ধতি সমর্থনযোগ্য।
ধাপ 3: লোড এবং রান স্কেচ
আমি একটি usingাল ব্যবহার করে পিন 7 এ আমার সার্ভো সংযুক্ত করেছি কারণ এটি সুবিধাজনক এবং তাদের মাত্র কয়েক টাকা খরচ হয়। যদি আপনার কোন ieldাল না থাকে তাহলে Arduino এ 7 পিন করার জন্য servo সংকেত তার, Arduino এ 5v তে লাল তার এবং Arduino এ GND এর সাথে স্থল তার সংযুক্ত করুন। Arduino servo চালানোর জন্য যথেষ্ট বর্তমান প্রদান করা উচিত। আমি useাল ব্যবহার করি কারণ শুধুমাত্র সার্ভোর জন্য একটি বাহ্যিক ভোল্টেজ ব্যবহার করা সহজ।
এখানে স্কেচ। আমি একটি সার্ভো স্পিড কন্ট্রোলার রুটিন লিখেছিলাম যাতে সার্ভোর গতি পরিবর্তন করা যায় কারণ এটি সম্ভবত পূর্ণ গতিতে ভাল কাজ করবে না।
আপনি বল ঘূর্ণায়মানের বিভিন্ন গতি পেতে টাইমিং বিলম্ব পরিবর্তন করতে পারেন। আপনি গতি পরিবর্তন করতে myServo () ফাংশনের তৃতীয় প্যারামিটার পরিবর্তন করতে পারেন।
////////////////////////////////////////////////////// ////////////////////////////////////////////////////// ////////////// // জিম ডেমেলো, শাংলুও বিশ্ববিদ্যালয়, 2017 দ্বারা তৈরি
// আপনি এই কোডটি ব্যবহার করতে পারেন, ম্যানিপুলেট করতে পারেন, যা করতে চান তা করুন, আমার নামের প্রয়োজন নেই
// এই রুটিন যেকোনো সংখ্যক সার্ভিসকে ইন্টারপোলেটেড করার অনুমতি দেয়, সার্ভসের সংখ্যা 4 ছাড়িয়ে গেলে কেবল নতুন লাইন যুক্ত করুন
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#অন্তর্ভুক্ত
Servo myservo1, myservo2; // একটি servo নিয়ন্ত্রণ করার জন্য servo অবজেক্ট তৈরি করুন
int servoRead (int servoNumber) {
int servoCurrent;
যদি (servoNumber == 1) {servoCurrent = myservo1.read (); }
যদি (servoNumber == 2) {servoCurrent = myservo2.read (); }
ফিরতি servoCurrent;
}
অকার্যকর servoWrite (int servoNumber, int offset) {
যদি (servoNumber == 1) {myservo1.write (অফসেট); }
যদি (servoNumber == 2) {myservo2.write (অফসেট); }
}
অকার্যকর myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
যদি (servoNum == 1) {curAngle = myservo1.read (); }
যদি (servoNum == 2) {curAngle = myservo2.read (); }
যদি (curAngle <newAngle) {
জন্য (int angle = curAngle; angle <newAngle; angle += angleInc) {
যদি (servoNum == 1) myservo1.write (কোণ);
যদি (servoNum == 2) myservo2.write (কোণ);
বিলম্ব (incDelay); }
}
অন্যথায় যদি (curAngle> newAngle) {
জন্য (int angle = curAngle; angle> newAngle; angle -= angleInc) {
যদি (servoNum == 1) myservo1.write (কোণ);
যদি (servoNum == 2) myservo2.write (কোণ);
বিলম্ব (incDelay); }
}
}
অকার্যকর interpolate2Servos (int servo1, int servo1Position, int servo2, int servo2Position, int numberSteps, int timeDelay) {
int servo1Current, servo2Current;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// সিরিয়াল.প্রিন্ট ("Servo3Pos এবং বর্তমান"); Serial.print (servo3Position); সিরিয়াল.প্রিন্ট (""); Serial.println (servo3Current);
// সিরিয়াল.প্রিন্ট ("Servo4Pos এবং বর্তমান"); Serial.print (servo4Position); সিরিয়াল.প্রিন্ট (""); Serial.println (servo4Current);
// সিরিয়াল.প্রিন্ট ("Servo5Pos এবং বর্তমান"); Serial.print (servo5Position); সিরিয়াল.প্রিন্ট (""); Serial.println (servo5Current);
// সিরিয়াল.প্রিন্ট ("Servo6Pos এবং বর্তমান"); Serial.print (servo6Position); সিরিয়াল.প্রিন্ট (""); Serial.println (servo6Current);
// Serial.println ("");
int cOffset = (servo1Position - servo1Current); cOffset = abs (cOffset)/numberSteps;
int dOffset = (servo2Position - servo2Current); dOffset = abs (dOffset)/numberSteps;
int cOffsetTotal = 0, dOffsetTotal = 0;
cOffsetTotal = servo1Current;
dOffsetTotal = servo2Current;
জন্য (int x = 0; x
যদি (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
অন্যথায় {cOffsetTotal = cOffsetTotal - cOffset; }
যদি (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
অন্যথায় {dOffsetTotal = dOffsetTotal - dOffset; }
যদি (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
যদি (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// সিরিয়াল.প্রিন্ট ("a এবং b অফসেট"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); বিলম্ব (10);
বিলম্ব (সময় বিলম্ব);
} // এর জন্য শেষ
//////////////////////////////////////
// মডিউলো অবশিষ্টদের যত্ন নিন //
/////////////////////////////////////
যদি (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
যদি (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int টাইমিং বিলম্ব = 100;
int servoDelay = 100;
int degGap = 10;
// এটি প্রারম্ভিক ডিগ্রী (শেষ ডিগ্রির চেয়ে কম হতে হবে)
int degStart = 0;
// এটি শেষ ডিগ্রী (শুরু ডিগ্রির চেয়ে বড় হতে হবে)
int degEnd = 360;
// এটি বৃত্ত ব্যাসার্ধ
int ব্যাসার্ধ = 8;
অকার্যকর সেটআপ()
{
Serial.begin (9600);
বিলম্ব (100);
myservo1.attach (7); // সার্ভো বস্তুর সাথে পিন 7 এ সার্ভো সংযুক্ত করে
myservo1.write (90);
myservo2.attach (8); // সার্ভো অবজেক্টে 8 পিনে সার্ভো সংযুক্ত করে
myservo2.write (90);
বিলম্ব (1000); // সেখানে পৌঁছানোর জন্য সার্ভোর জন্য অপেক্ষা করে
interpolate2Servos (1, 90, 2, 90, 10, 60); // নিরপেক্ষ
বিলম্ব (1000);
}
অকার্যকর লুপ () {
সময় বিলম্ব = 15; // 10 এ কাজ করে
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // নিরপেক্ষ
// বিলম্ব (1000);
// প্রস্থান (0); // বিরতি প্রোগ্রাম - চালিয়ে যেতে রিসেট চাপুন
}
অকার্যকর স্পিন 3 () {
interpolate2 Servos (1, 90, 2, 110, 1, 60); // নিরপেক্ষ
বিলম্ব (সময় বিলম্ব);
interpolate2Servos (1, 90, 2, 80, 1, 60); // নিরপেক্ষ
বিলম্ব (সময় বিলম্ব);
}
অকার্যকর স্পিন 2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // নিরপেক্ষ
বিলম্ব (সময় বিলম্ব);
interpolate2Servos (1, 80, 2, 80, 1, 60); // নিরপেক্ষ
বিলম্ব (সময় বিলম্ব);
interpolate2 Servos (1, 110, 2, 80, 1, 60); // নিরপেক্ষ
বিলম্ব (সময় বিলম্ব);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // নিরপেক্ষ
বিলম্ব (সময় বিলম্ব);
}
অকার্যকর স্পিন 1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // ডিগ্রিকে রেডিয়ানে রূপান্তর করুন
ফ্লোট xPos = 90 + (cos (deg) * ব্যাসার্ধ);
// xPos = বৃত্তাকার (xPos);
ভাসান yPos = 90 + (sin (deg) * ব্যাসার্ধ);
// yPos = বৃত্তাকার (yPos);
Serial.print ("degGap ="); Serial.print (degGap); Serial.print ("deg ="); সিরিয়াল.প্রিন্ট (deg); সিরিয়াল। সিরিয়াল.প্রিন্ট ("degStart ="); Serial.print (degStart); Serial.print ("x ="); Serial.print (xPos); println (yPos);
// interpolate2Servos (1, xPos, 2, yPos, 1, servoDelay); // নিরপেক্ষ
myservo1.write (xPos);
myservo2.write (yPos);
বিলম্ব (সময় বিলম্ব);
যদি (degStart> = degEnd) {
degStart = 0;
যদি (degGap> 180)
ডিগ্যাপ = 180;
// degGap = 0;
অন্য
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
অকার্যকর স্পিন 4 () {
জন্য (int i = 0; i <= 360; i ++) {
float j = 20 * (cos ((3.14 * i)/180)) + 90;
float k = 20 * (sin ((3.14 * i)/180)) + 90;
myservo1.write (j);
myservo2.write (k);
সিরিয়াল.প্রিন্ট (জে);
সিরিয়াল.প্রিন্ট (",");
Serial.println (k);
বিলম্ব (100);
}
}
প্রস্তাবিত:
প্রসেসিং এবং আরডুইনো সংযোগ এবং 7 সেগমেন্ট এবং Servo GUI কন্ট্রোলার তৈরি করুন: 4 টি ধাপ
প্রসেসিং এবং আরডুইনো সংযোগ করা এবং 7 সেগমেন্ট এবং সার্ভো GUI কন্ট্রোলার তৈরি করুন: কিছু প্রকল্পের জন্য আপনাকে Arduino ব্যবহার করতে হবে কারণ এটি একটি সহজ প্রোটোটাইপিং প্ল্যাটফর্ম প্রদান করে কিন্তু Arduino এর সিরিয়াল মনিটরে গ্রাফিক্স প্রদর্শন করতে বেশ সময় লাগতে পারে এবং এটি করাও কঠিন। আপনি Arduino সিরিয়াল মনিটর bu এ গ্রাফ প্রদর্শন করতে পারেন
Arduino এবং RTC টাইমারের সাথে স্বয়ংক্রিয় আলো এবং পাম্প অ্যাকোয়ারিয়াম সিস্টেম: 3 টি ধাপ
আরডুইনো এবং আরটিসি টাইমারের সাথে অটোমেটিক লাইট অ্যান্ড পাম্প অ্যাকোয়ারিয়াম সিস্টেম: একটি অ্যাকোয়ারিয়ামকে শূন্য হস্তক্ষেপে তৈরি করা যেতে পারে কিছু যত্ন এবং প্রযুক্তির সাহায্যে স্ব-টেকসই বাস্তুতন্ত্র:) প্রথম আমি 2 টি বন্যা আলো 50 ওয়াট এবং 1 6W ব্যবহার করেছি
ঘূর্ণন অক্ষ সঙ্গে বস্তু ট্র্যাকিং ক্যামেরা স্লাইডার। 3D মুদ্রিত এবং RoboClaw ডিসি মোটর কন্ট্রোলার এবং Arduino উপর নির্মিত: 5 ধাপ (ছবি সহ)
ঘূর্ণন অক্ষ সঙ্গে বস্তু ট্র্যাকিং ক্যামেরা স্লাইডার। 3D মুদ্রিত এবং RoboClaw ডিসি মোটর কন্ট্রোলার এবং Arduino এ নির্মিত: এই প্রকল্পটি আমার প্রিয় প্রকল্পগুলির মধ্যে একটি ছিল যেহেতু আমি DIY এর সাথে ভিডিও তৈরির প্রতি আমার আগ্রহকে একত্রিত করেছি। আমি সবসময় দেখেছি এবং সিনেমার শটগুলিকে সিনেমায় অনুকরণ করতে চেয়েছি যেখানে একটি ক্যামেরা স্ক্রিন জুড়ে চলে যায় যখন এটি ট্র্যাক করার জন্য প্যানিং করে
Arduino মাইক্রো সঙ্গে সেন্সর/ আরএফ যোগাযোগ সঙ্গে রাগ: 4 ধাপ (ছবি সহ)
Arduino মাইক্রো দিয়ে সেন্সর/ আরএফ যোগাযোগের সাথে রাগ: আমি সম্প্রতি সমানভাবে বৈচিত্র্যপূর্ণ ইনস্টলেশন সমাপ্ত করেছি, যা প্রদীপের একটি সিরিজ দিয়ে তৈরি যা প্রদীপের নীচে একটি পাটিতে রাখা সেন্সরগুলিতে প্রতিক্রিয়া জানায়। এখানে আমি কীভাবে চাপ সেন্সর দিয়ে পাটি তৈরি করেছি। আমি আশা করি আপনি এটি দরকারী পাবেন।
Arduino মোটর চালিত রোলার ব্লাইন্ডস: 8 ধাপ
আরডুইনো মোটর চালিত রোলার ব্লাইন্ডস: প্রকল্পের বিবরণ: আমার প্রকল্পের উদ্দেশ্য হল একটি বাস্তব মোটর চালিত রোলার ব্লাইন্ড তৈরি করা, যাতে আমি প্রতিদিন ব্যবহার করতে পারি। পরিকল্পনা হল একটি বাইপোলার স্টেপার মোটরের মাধ্যমে একটি রোলার ব্লাইন্ড নিয়ন্ত্রিত করা, যেখানে আমি একটি arduino uno bo এর মাধ্যমে নিয়ন্ত্রণ করব