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

हालाँकि, कोड को थोड़ा संशोधित किया जाना था: Serial.print से सभी पंक्तियों को हटा दें और एक Serial.write (आउटपुटव्यू) के साथ प्रतिस्थापित करें:
const int analogInPin = A0; // A0
int sensorValue = 0; // ,
void setup() {
Serial.begin(9600); // COM-
}
// A0 COM-
void loop() {
sensorValue = analogRead(analogInPin);
outputValue = map(sensorValue, 0, 1023, 0, 255);
Serial.write(outputValue);
delay(10);
}
विजुअल स्टूडियो 2010 एक्सप्रेस में कंप्यूटर के लिए नियंत्रण कार्यक्रम C # में लिखा गया था।
कार्यक्रम की मुख्य खिड़की:

सेटिंग्स संवाद बॉक्स:

नोट: "बटन" बटन पर क्लिक करना अभी तक संसाधित नहीं हुआ है।
यहां "विविध" समूह से पैरामीटर को और अधिक विस्तार से विचार करने योग्य है। पहले एक कीस्ट्रोक का अनुकरण करने के लिए आवश्यक है, बाकी को चटर को खत्म करने की आवश्यकता है।
विलंबता - एक कुंजी दबाने और जारी करने के बीच मिलीसेकंड में देरी।
बफर - COM पोर्ट से क्रमिक रूप से पढ़े गए मानों की संख्या।
घबराना - पिछले नमूने के मूल्य से अनुमेय विचलन को दर्शाता है।
चर अवरोध करनेवाला शाफ्ट के घूमने की दिशा का बकबक दमन और निर्धारण निम्नानुसार काम करता है:
- सीरियल पोर्ट से बफर में एक निश्चित संख्या में बाइट्स (बफर पैरामीटर) पढ़े जाते हैं;
- यदि बफर में अंतिम बाइट पहले बाइट और जिटर मूल्य के योग से अधिक है, तो इसका मतलब है कि शाफ्ट दाईं ओर घूमती है;
- यदि बफ़र में अंतिम बाइट पहले बाइट और जिटर मूल्य के बीच के अंतर से कम है, तो इसका मतलब है कि शाफ्ट बाईं ओर घूमता है।
इस विधि के नुकसान:
- शाफ्ट के रोटेशन की शुरुआत और उस पर कार्यक्रम की प्रतिक्रिया के बीच की देरी;
- रोटेशन के कोण की परवाह किए बिना, कुंजी को एक बार दबाया जाता है। यही है, आप जल्दी से रोकनेवाला शाफ्ट को घुमा सकते हैं (बफर में पहला बाइट, 10, और अंतिम - 30 कहेंगे), और प्रोग्राम इसे एक क्लिक में बाहर काम करेगा।
एल्गोरिथम कोड:
int[] buffer = new int[(int)conf.buffer]; // Buffer
int bufferTop = (int)conf.buffer - 1;
for (int i = 0; i < conf.buffer; i++)
{
buffer[i] = sp.ReadByte();
}
if (buffer[bufferTop] > (buffer[0] + conf.jitter))
{
// “”
}
else if (buffer[bufferTop] < (buffer[0] - conf.jitter))
{
// “”
}
विजुअल स्टूडियो के लिए एक प्रोजेक्ट, अरुडिनो और एक आरेख के लिए एक स्केच यहाँ डाउनलोड किया जा सकता है:
http://sourceforge.net/projects/keyemu/files/KeyEmu-0.1b-source.zip/downloadसंग्रह में बिन निर्देशिका शामिल है जिसमें संकलित कार्यक्रम है। इसे चलाने के लिए, आपको स्थापित .NET फ्रेमवर्क 4 की आवश्यकता होगी।
अभी के लिए बस इतना ही। एक जिज्ञासु व्यक्ति कार्यक्रम को अंतिम रूप दे सकता है - एक के बजाय कीस्ट्रोक्स की एक श्रृंखला को लागू करें, या "कुंजी" दबाएं अलग-अलग कुंजी, जिसके आधार पर आवेदन एक निश्चित समय पर सक्रिय होता है, या बस अनंत को "चमकाना" पॉलिश करता है।