बहुत सरलता से, मैं कहीं से पढ़े गए कुछ आंकड़ों के आधार पर सर्वो (9g माइक्रो सर्वोस) को नियंत्रित कर रहा हूं। सब कुछ ठीक काम करता है सिवाय इसके कि सर्वो लगातार "हिलाएगा।" यही है, वे बहुत सूक्ष्म आंदोलनों (1/2 -> 1 सेमी या तो के आंतरायिक आंदोलनों के साथ) के साथ वापस कंपन करते हैं।
मैंने कुछ ऐसा करके सॉफ्टवेयर में इस समस्या को ठीक करने की कोशिश की:
do{
delay(DTIME);
positionServo();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("X position: ");
lcd.print(xRead);
lcd.setCursor(0,1);
lcd.print("Y position: ");
lcd.print(yRead);
}while( readChange() ); //while there has been change
जहां आवश्यक है, मैप किए गए सर्वो मूल्य (arduino सर्वो पुस्तकालय) का उपयोग करने वाले चर को इनिशियलाइज़ करना आवश्यक है।
ReadChange () फ़ंक्शन को इस प्रकार परिभाषित किया गया है:
int readChange(){
int x_Temp, y_Temp;
x_Temp = map(analogRead(x_axisReadPin), 0, 1023, 0, 179);
y_Temp = map(analogRead(y_axisReadPin), 0, 1023, 0, 179);
if( abs(x_Temp - xRead) < DEG && abs(y_Temp - yRead) < DEG ) return 0; // no change
else return 1; //change
}
जहाँ xRead वह मान है जिसे आरंभीकृत किया गया था (पहला, मैप किया गया सर्वो आउटपुट)।
हालांकि, यह वास्तव में एक अच्छा दृष्टिकोण नहीं है। यह आवश्यक है कि बीओटीएच मान डीईजी (~ 10 डिग्री, या ~ 0.28V मेरे मामले में) के एक कारक द्वारा नहीं बदला जाना चाहिए। अगर मैं फ़ंक्शन ऐसा लिखूं जो या तो या DEG से कम हो, तो क्या होगा अगर मैं एक बार में केवल एक सर्वो बदल रहा हूं? इसलिए एक परिसीमन है ।।
क्या यह बस सर्वोस (शायद सस्ते वाले?) की संपत्ति है या कोई वर्कअराउंड है?
एक पेस्टी लिंक को शामिल करना बहुत सरल होगा। यहाँ पूर्ण कोड है: http://pastie.org/8191459
मैंने दो सर्वर्स को एक साथ लेजर पॉइंटर के साथ दो डिग्री की स्वतंत्रता (एक्स, वाई) के लिए अनुमति दी है। विभिन्न तरीकों से सर्वो को नियंत्रित करने के लिए कई बटन की स्थिति के आधार पर विकल्प हैं। पहला "मोशन" है जहां मेरे पास दो फोटोरिस्टोर हैं जो प्रकाश जोखिम की मात्रा के आधार पर, सर्वो की स्थिति को प्रभावित करते हैं। मैंने अभी तक किसी Xbox नियंत्रक द्वारा सर्वो को नियंत्रित करने के लिए कोड लागू नहीं किया है। और तीसरा विकल्प सिर्फ यादृच्छिक गति है।