विषयसूची:

Arduino और एक सर्वो के साथ स्वचालित बॉल रोलर: 3 चरण
Arduino और एक सर्वो के साथ स्वचालित बॉल रोलर: 3 चरण

वीडियो: Arduino और एक सर्वो के साथ स्वचालित बॉल रोलर: 3 चरण

वीडियो: Arduino और एक सर्वो के साथ स्वचालित बॉल रोलर: 3 चरण
वीडियो: PCA9685 और Arduino का उपयोग करके 32 सर्वो मोटर्स को नियंत्रित करना: V3 2024, नवंबर
Anonim
Image
Image

यह एक साधारण सा Arduino और सर्वो प्रोजेक्ट है जिसे पूरा होने में लगभग दो घंटे लगते हैं। यह जार कैप के एक सिरे को उठाने के लिए एक सर्वो का उपयोग करता है ताकि स्टील की गेंद को अंदर की परिधि के चारों ओर घुमाया जा सके। यह सेल्फ स्टार्टिंग है, गति बदल सकता है और एक बार में दो (या अधिक?) गेंदों को स्पिन कर सकता है। बनाने और काम करने में मज़ा। समय के मापदंडों के साथ शायद और भी तेज गति के लिए खेला जा सकता है। एक चुंबकीय गेंद के साथ कुछ हॉल इफेक्ट सेंसर का उपयोग इसे एक स्मार्ट मशीन बनाने के लिए किया जा सकता है जो सर्वोत्तम मापदंडों का पता लगा सकता है।

मुझे यह उल्लेख करना चाहिए कि यहाँ पर किसी व्यक्ति के पास एक अधिक परिष्कृत बॉल रोलर मशीन है:

सामग्री की जरूरत:

Arduino Uno (या कोई Arduino)

सर्वो शील्ड (वैकल्पिक)

9जी सर्वो

जार टोपी

स्टील बॉल

कुछ स्क्रैप लकड़ी

चरण 1: बेस और हिंगेड कैप होल्डर बनाएं

बेस और हिंगेड कैप होल्डर बनाएं
बेस और हिंगेड कैप होल्डर बनाएं

लकड़ी के हिंग वाले टुकड़े को माउंट करने के लिए आधार सिर्फ लकड़ी का एक टुकड़ा है। टिका हुआ लकड़ी एक जार कैप से बड़ा होना चाहिए जिसका आप उपयोग करेंगे और टिका के लिए और सर्वो को माउंट करने के लिए पर्याप्त जगह होगी।

मैंने छोटे प्लास्टिक आरसी एयरक्राफ्ट टिका का इस्तेमाल किया और बस उन्हें हिंग वाली लकड़ी और बेस से जोड़ दिया।

चरण 2: लंबा सर्वो आर्म बनाएं और सर्वो संलग्न करें

लंबा सर्वो आर्म बनाएं और सर्वो संलग्न करें
लंबा सर्वो आर्म बनाएं और सर्वो संलग्न करें
लंबा सर्वो आर्म बनाएं और सर्वो संलग्न करें
लंबा सर्वो आर्म बनाएं और सर्वो संलग्न करें

एक लंबी सर्वो भुजा बनाने के लिए मैंने सिर्फ 5 सेंटीमीटर लकड़ी के टुकड़े को सर्वो बांह से जोड़ा, जिसमें कुछ छोटे स्क्रू और नट थे। आधार के क्षैतिज होने पर सर्वो आर्म सर्वो पर 90 डिग्री पर होना चाहिए।

मैंने सिर्फ हिंग वाले लकड़ी के धारक को सर्वो को गर्म किया, लेकिन मैंने पाया कि यदि आप इसे कुछ मिनटों से अधिक समय तक चलने देते हैं, तो सर्वो गर्म गोंद को गर्म कर देगा और लकड़ी से जाने देगा। तो एक बेहतर लगाव विधि वारंट है।

चरण 3: स्केच लोड करें और चलाएं

लोड और रन स्केच
लोड और रन स्केच

मैंने अपने सर्वो को एक ढाल का उपयोग करके 7 पिन करने के लिए संलग्न किया क्योंकि यह सिर्फ सुविधाजनक है और उन्हें केवल कुछ रुपये खर्च होते हैं। यदि आपके पास शील्ड नहीं है तो Arduino पर 7 पिन करने के लिए सर्वो सिग्नल वायर, Arduino पर 5v को लाल तार और Arduino पर GND को ग्राउंड वायर संलग्न करें। सर्वो को संचालित करने के लिए आर्डिनो को पर्याप्त करंट प्रदान करना चाहिए। मैं ढाल का उपयोग करता हूं क्योंकि केवल सर्वो के लिए बाहरी वोल्टेज का उपयोग करना आसान है।

यहाँ स्केच है। मैंने सर्वो गति नियंत्रक दिनचर्या लिखी ताकि सर्वो की गति को बदल सकें क्योंकि यह शायद पूरी गति से अच्छी तरह से काम नहीं करेगा।

बॉल रोलिंग की विभिन्न गति प्राप्त करने के लिए आप समय को बदल सकते हैं। गति को बदलने के लिए आप myServo() फ़ंक्शन के तीसरे पैरामीटर को भी बदल सकते हैं।

////////////////////////////////////////////// /////////////////////////////////////////////// /////////////// जिम डेमेलो, शांगलुओ विश्वविद्यालय, 2017 द्वारा बनाया गया

// आप इस कोड के साथ उपयोग करने, हेरफेर करने, जो चाहें करने के लिए स्वतंत्र हैं, मेरे नाम की आवश्यकता नहीं है

// यह दिनचर्या किसी भी संख्या में सर्वो को प्रक्षेपित करने की अनुमति देती है, यदि सर्वो की संख्या 4. से अधिक हो तो बस नई लाइनें जोड़ें

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#शामिल

सर्वो myservo1, myservo2; // सर्वो को नियंत्रित करने के लिए सर्वो ऑब्जेक्ट बनाएं

इंट सर्वो रीड (इंट सर्वो नंबर) {

इंट सर्वो करंट;

अगर (सर्वो नम्बर == 1) {सर्वो करंट = myservo1.read (); }

अगर (servoNumber== 2) { सर्वो करंट = myservo2.read (); }

सर्वो करंट लौटाएं;

}

शून्य सर्वोराइट (इंट सर्वो नंबर, इंट ऑफ़सेट) {

अगर (servoNumber==1) { myservo1.write(offset); }

अगर (servoNumber==2) { myservo2.write(offset); }

}

शून्य myServo (int newAngle, int angleInc, int incDelay, int ServoNum) {

इंट वक्रएंगल;

अगर (सर्वोनम == 1) {curAngle = myservo1.read (); }

अगर (सर्वोनम == 2) {curAngle = myservo2.read (); }

अगर (curAngle <newAngle) {

for(int angle=curAngle;angle < newAngle;angle +=angleInc) {

अगर (servoNum == 1) myservo1.write(angle);

अगर (servoNum == 2) myservo2.write(angle);

देरी (incDelay); }

}

और अगर (curAngle > newAngle) {

for(int angle=curAngle;angle> newAngle;angle -=angleInc) {

अगर (servoNum == 1) myservo1.write(angle);

अगर (servoNum == 2) myservo2.write(angle);

देरी (incDelay); }

}

}

शून्य इंटरपोलेट 2 सर्वोस (इंट सर्वो 1, इंट सर्वो 1 स्थिति, इंट सर्वो 2, इंट सर्वो 2 पोजीशन, इंट नंबरस्टेप्स, इंट टाइमडेले){

इंट सर्वो 1 करंट, सर्वो 2 करंट;

सर्वो १ करंट = सर्वोरेड (सर्वो १);

सर्वो २ करंट = सर्वोरेड (सर्वो २);

// सीरियल.प्रिंट ("सर्वो 3 पॉज़ और करंट"); Serial.print(servo3Position); सीरियल.प्रिंट (""); Serial.println(servo3Current);

// सीरियल.प्रिंट ("सर्वो 4 पॉज़ और करंट"); Serial.print(servo4Position); सीरियल.प्रिंट (""); Serial.println (servo4Current);

// सीरियल.प्रिंट ("सर्वो 5 पॉज़ और करंट"); Serial.print(servo5Position); सीरियल.प्रिंट (""); Serial.println (servo5Current);

// सीरियल.प्रिंट ("सर्वो 6 पॉज़ और करंट"); Serial.print(servo6Position); सीरियल.प्रिंट (""); Serial.println(servo6Current);

// सीरियल.प्रिंट्लन ("");

int cOffset = (servo1Position - सर्वो1Current); कॉफ़सेट = एब्स (कॉफ़सेट)/नंबरस्टेप्स;

int dOffset = (servo2Position - इमदादी2Current); dOffset = abs(dOffset)/numberSteps;

int cOffsetTotal=0, dOffsetTotal=0;

cOffsetTotal = सर्वो १ करंट;

dOffsetTotal = सर्वो२ करंट;

के लिए (int x=0; x

अगर (सर्वो 1 स्थिति> सर्वो 1 करंट) {cOffsetTotal = cOffsetTotal + cOffset; }

अन्य {cOffsetTotal = cOffsetTotal - cOffset; }

अगर (सर्वो२ स्थिति > सर्वो२ करंट) { dOffsetTotal = dOffsetTotal + dOffset; }

अन्य { डीओफ़सेट टोटल = डीओफ़सेट टोटल - डी ऑफ़सेट; }

अगर (सर्वो १ स्थिति! = सर्वो १ करंट) सर्वोराइट (सर्वो १, कॉफ़सेट टोटल);

अगर (सर्वो २ स्थिति! = सर्वो २ करंट) सर्वोराइट (सर्वो २, डीऑफसेट टोटल);

// सीरियल.प्रिंट ("ए और बी ऑफसेट"); सीरियल.प्रिंट (एक ऑफसेट टोटल); Serial.print(" ");Serial.println(bOffsetTotal); देरी(10);

देरी (समय विलंब);

}// के लिए समाप्त करें

//////////////////////////////////////

// मोडुलो अवशेषों का ध्यान रखें //

/////////////////////////////////////

अगर (सर्वो 1 स्थिति! = सर्वो 1 वर्तमान) सर्वोराइट (सर्वो 1, सर्वो 1 स्थिति);

अगर (सर्वो २ स्थिति! = सर्वो २ वर्तमान) सर्वोराइट (सर्वो २, सर्वो २ स्थिति);

}

इंट टाइमिंगडेले = १००;

इंट सर्वोडेल = १००;

इंट डिगगैप = 10;

// यह प्रारंभिक डिग्री है (अंत डिग्री से कम होनी चाहिए)

int degStart = 0;

// यह अंतिम डिग्री है (प्रारंभ डिग्री से अधिक होनी चाहिए)

int degEnd = ३६०;

// यह वृत्त त्रिज्या है

इंट त्रिज्या = 8;

व्यर्थ व्यवस्था()

{

सीरियल.बेगिन (९६००);

देरी (100);

myservo1.attach(7); // पिन 7 पर सर्वो को सर्वो ऑब्जेक्ट से जोड़ता है

myservo1.लिखें (९०);

myservo2.attach(8); // सर्वो को पिन 8 पर सर्वो ऑब्जेक्ट से जोड़ता है

myservo2.लिखें (९०);

देरी (1000); // सर्वो के वहां पहुंचने की प्रतीक्षा करता है

इंटरपोलेट2सर्वो(1, 90, 2, 90, 10, 60); // तटस्थ

देरी (1000);

}

शून्य लूप () {

समय विलंब = 15; // 10. पर काम करता है

सर्वोडेल = 4;

स्पिन 4 ();

// इंटरपोलेट 2 सर्वोस (1, 90, 2, 90, 1, 60); // तटस्थ

// देरी (1000);

// बाहर निकलें (0); // रोकें कार्यक्रम - जारी रखने के लिए रीसेट हिट करें

}

शून्य स्पिन3 () {

इंटरपोलेट2सर्वो(1, 90, 2, 110, 1, 60); // तटस्थ

देरी (समय देरी);

इंटरपोलेट2सर्वो(1, 90, 2, 80, 1, 60); // तटस्थ

देरी (समय देरी);

}

शून्य स्पिन 2 () {

// इंटरपोलेट 2 सर्वोस (1, 80, 2, 90, 1, 50); // तटस्थ

देरी (समय देरी);

इंटरपोलेट2सर्वो(1, 80, 2, 80, 1, 60); // तटस्थ

देरी (समय देरी);

इंटरपोलेट2सर्वो(1, 110, 2, 80, 1, 60); // तटस्थ

देरी (समय देरी);

// इंटरपोलेट 2 सर्वोस (1, 110, 2, 110, 1, 60); // तटस्थ

देरी (समय देरी);

}

शून्य स्पिन1 () {

// int deg = (degStart / (180 / 3.14));

फ्लोट डिग्री = (डीगस्टार्ट * 3.141592/180); // डिग्री को रेडियन में बदलें

फ्लोट xPos = ९० + (cos(deg) * त्रिज्या);

// xPos = राउंड (xPos);

फ्लोट yPos = ९० + (पाप(डिग्री) * त्रिज्या);

// yPos = गोल (yPos);

Serial.print("degGap=");Serial.print(degGap);Serial.print("deg=");Serial.print(deg);Serial.print("cos=");Serial.print(cos(deg));Serial.print("degStart=");Serial.print(degStart);Serial.print("x=");Serial.print(xPos);Serial.print(" y=");Serial. प्रिंट्लन (वाईपीओएस);

// इंटरपोलेट 2 सर्वोस (1, xPos, 2, yPos, 1, सर्वोडेल); // तटस्थ

myservo1.write(xPos);

myservo2.write(yPos);

देरी (समय देरी);

अगर (डिगस्टार्ट> = डिगएंड) {

डीगस्टार्ट = 0;

अगर (डिग्रीगैप> 180)

डिगगैप = १८०;

// डीगगैप = 0;

अन्यथा

degGap = degGap + 2;

degGap = degGap - 2;

// degStart = degStart + degGap;

}

degStart = degStart + degGap;

}

शून्य स्पिन4 () {

for(int i=0; i<=360; i++){

फ्लोट j = 20 * (cos ((3.14 * i)/180)) + 90;

फ्लोट के = २० * (पाप ((३.१४ * आई)/१८०)) + ९०;

myservo1.लिखें (जे);

myservo2.लिखें (के);

सीरियल.प्रिंट (जे);

सीरियल.प्रिंट ("", ");

सीरियल.प्रिंट्लन (के);

देरी (100);

}

}

सिफारिश की: