Arduino रोटेशन सेंसर। टैकोमीटर। Arduino पर एक photoresistor और HD44780 LCD डिस्प्ले के साथ काम करने का एक उदाहरण। आईआर बीम ब्रेक सर्किट

इंजन स्पीड सेंसर मॉड्यूल को मुख्य रूप से मोटर शाफ्ट की रोटेशन स्पीड का पता लगाने के लिए डिज़ाइन किया गया है। यह मॉड्यूल, माइक्रोकंट्रोलर के साथ, गति के अलावा, दालों की संख्या और शाफ्ट की स्थिति को निर्धारित कर सकता है।



आमतौर पर, सेंसर कुछ घटनाओं को दर्ज करके परिमाण को मापते हैं, फिर घटनाओं की संख्या उस समय अवधि के साथ सहसंबद्ध होती है, जिस पर वे घटित हुई थीं।

वह खंड जो दालों को इनपुट के रूप में बताता है, वह इलेक्ट्रोमैकेनिकल या एकीकृत या माइक्रोप्रोसेसर इलेक्ट्रॉनिक्स हो सकता है। घर की रोशनी के लिए एक स्विच के रूप में आपके घर में एक निश्चित मात्रा में इलेक्ट्रोमैकेनिकल आवेग पाए जा सकते हैं। अतीत में, चूहों ने प्राप्त आवेगों के आधार पर आंदोलनों की गणना करने के लिए ऑप्टिकल एन्कोडर का उपयोग किया था।

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


तो इस मामले में, गति को मापा जाता है - यहां की घटनाओं को स्लॉट के साथ डिस्क के रोटेशन के दौरान ऑप्टिकल सेंसर के संचालन के परिणामस्वरूप प्राप्त आवेगों के रूप में समझा जाता है। सेंसर में एक एलईडी और एक फोटोट्रांसिस्टर होता है जो एलईडी विकिरण की उपस्थिति या अनुपस्थिति को महसूस करता है।


योजना


प्रस्तुत सर्किट का उपयोग पंजीकृत दालों को माइक्रोकंट्रोलर को भेजने के लिए किया जा सकता है। योजना का आधार है प्रकाशीय संवेदक OS25B10 (OC1) एलईडी और फोटोट्रांसिस्टर आउटपुट के साथ।

इस तरह से हल्की स्पंदें बनती हैं, जो प्रॉक्सिमिटी सेंसर के जरिए इलेक्ट्रिकल पल्स बन जाती हैं। यदि आप आवेगों को गिनते हैं तो आप गणना कर सकते हैं कोणीय स्थितिडिस्क और इसलिए रोटर। किया हुआ व्यावहारिक उदाहरण, हम मान सकते हैं कि डिस्क में 36 काले और 36 पारदर्शी टुकड़े हैं। इसका मतलब है कि मोटर शाफ्ट के प्रत्येक पूर्ण अक्ष के लिए, फोटोकेल 36 विद्युत दालों को उत्पन्न करता है। यदि 360 पल्स के 1 सेकंड के अंतराल के दौरान मोटर एक सेकंड में प्रति मिनट 10 चक्कर लगाता है।

ऐसा करने से हम गति जानते हैं लेकिन मोटर किस दिशा में चल रही है यह नहीं जानते। यह जानने के लिए, हमारे पास दो अलग-अलग स्थितियों में स्थित दो फोटोकल्स होने चाहिए। जब एन्कोडर पिन घुमाया जाता है, तो दो चतुर्भुज विद्युत संकेत उत्पन्न होते हैं, यही कारण है कि उन्हें परिभाषित किया जाता है क्योंकि वे विद्युत रूप से 90 डिग्री से ऑफसेट होते हैं। ये दो दालें पिन की घूर्णन गति के साथ-साथ गणना की गई दिशा को "देखकर" प्रदान करती हैं कि दोनों में से कौन सा दाल दूसरे से पहले आता है।


इसके बाद LM393 डुअल तुलनित्र IC (IC1) आता है जिसे एक साधारण श्मिट ट्रिगर के रूप में कॉन्फ़िगर किया गया है। हरी एलईडी(LED1) सर्किट पर लागू वोल्टेज की उपस्थिति को इंगित करता है, और लाल LED (LED2) मोटर स्पीड सेंसर मॉड्यूल के आउटपुट की निगरानी करता है। अनुशंसित प्रचालन वोल्टेजमॉड्यूल 4.5 और 5.5 वी के बीच है।



कुछ मामलों में गति की गणना करना आवश्यक नहीं है, लेकिन केवल एन्कोडर पिन के घूर्णन की मात्रा है। एन्कोडर द्वारा उत्पन्न दालों की संख्या निर्धारित करने के लिए कम से कम दो तरीके हैं। एक राज्य को डीकोड करें जो समय के साथ बदलता है और जानकारी निकालता है। . यदि आपके पास विकल्प है, तो डी-बाउंस सर्किट का उपयोग करना सबसे अच्छा है जो झूठे पिन को समाप्त करता है जो एन्कोडर दालों को गलत तरीके से गिनने का कारण बन सकता है। निम्न छवि स्कीमा में दो अस्वीकरण संस्करण हैं।

केवल कैपेसिटर का उपयोग किया जाता है। हर बार जब एनकोडर घूमता है, तो विद्युत संकेत घूर्णन की दिशा के अनुसार बदलते हैं। तीर संकेत परिवर्तन का संकेत देते हैं। प्रोग्राम एनकोडर क्लिक की गणना के लिए पिन 2 और 4 का उपयोग करता है और बटन सक्रियण का पता लगाने के लिए पिन 3 का उपयोग करता है। जब भी एनकोडर घूमता है, प्रोग्राम सीरियल पोर्ट पर किए गए क्लिकों का एक सामान्य अपडेट भेजता है। हर बार जब कोई बटन दबाया जाता है, तो यह "दबाए गए बटन" सीरियल पोर्ट पर लिखा जाता है और शॉट्स की कुल संख्या रीसेट हो जाती है।


ध्यान दें कि ऑप्टिकल सेंसर OS25B10 (OC1) के अंदर एलईडी के ऑपरेटिंग करंट को सीमित करने के लिए यहां रेसिस्टर R1 (180 ओम) का उपयोग किया जाता है। यदि आवश्यक हो, तो आप अपने प्रोटोटाइप के लिए इसका मान बदल सकते हैं। आप अपने सर्किट के लिए आवश्यक वोल्टेज प्राप्त करने के लिए रोकनेवाला R2 (10 kΩ) के मान को भी समायोजित कर सकते हैं। रोकनेवाला R7 (10 kΩ) एक वैकल्पिक पुल-अप रोकनेवाला है।

एक पिन के नाम और उसके स्थान के बीच संबंध के साथ रोटरी एन्कोडर का शीर्ष दृश्य। एन्कोडर का साइड व्यू। और कौन Arduino का उपयोग नहीं करना चाहता जैसे वह करता है? एकीकृत सर्किट हैं जो पल्स काउंटर के रूप में कार्य करते हैं। आप देख सकते हैं विद्युत सर्किट, जिसका उपयोग क्वाडरेचर एन्कोडर के साथ भी किया जा सकता है।

रोटरी एनकोडर विद्युत संकेत

रोटरी एन्कोडर धीमी गति से दक्षिणावर्त घूमता है। सभी संकेत सकारात्मक तर्क में हैं। रोटरी एनकोडर तेज गति के साथ दक्षिणावर्त घूमता है। उसी समय, पिछले मामले की तरह, 15 सिग्नल भिन्नताएं हैं, जो वास्तविक एन्कोडर के फ़्रेमों की संख्या के अनुरूप हैं।


एनकोडर डिस्क


सेंसर स्लॉट में रखा गया एक एन्कोडर डिस्क ऑप्टिकल सेंसर को अलग करता है ताकि डिस्क के एक तरफ एक एलईडी और दूसरी तरफ एक फोटोट्रांसिस्टर हो। यदि एलईडी से प्रकाश किरण का पथ डिस्क द्वारा अवरुद्ध नहीं है, तो फोटोट्रांसिस्टर करंट पास करेगा, अन्यथा यह बंद हो जाएगा।

इस लेख में मैं दिखाऊंगा कि कैसे आप एक पारंपरिक एलईडी और एक फोटोरेसिस्टर - एक मोटर स्पीड मीटर का उपयोग करके टैकोमीटर बना सकते हैं। और इसे और अधिक रोचक बनाने के लिए, प्राप्त डेटा एलसीडी डिस्प्ले पर प्रदर्शित किया जाएगा, मेरे पास बस एचडी 44780 मॉड्यूल पड़ा हुआ था, यह 16 कॉलम की दो पंक्तियों में डेटा प्रदर्शित कर सकता है।

एक फोटोरेसिस्टर कैसे काम करता है?

एक फोटोरेसिस्टर एक अर्धचालक है जो प्रकाश की मात्रा के आधार पर इसके प्रतिरोध को बदलता है जो इसे हिट करता है। जितना अधिक प्रकाश, उतना कम प्रतिरोध। यह क्षमता हमें टैकोमीटर के कार्यान्वयन में मदद करेगी। हम थोड़ी दूरी से एक फोटोरेसिस्टर पर एक एलईडी की मदद से चमकेंगे - 1.5-2 सेंटीमीटर। और arduino की मदद से हम निगरानी करेंगे कि कौन सा वोल्टेज फोटोरेसिस्टर से होकर गुजरता है, अगर वोल्टेज गिरता है, तो कुछ प्रकाश को अवरुद्ध कर रहा है। यदि आप मोटर शाफ्ट पर एक ब्लेड लगाते हैं और इसे एलईडी और फोटोरेसिस्टर के बीच घुमाते हैं, तो आप यह पता लगा सकते हैं कि ब्लेड कितनी बार प्रकाश को अवरुद्ध करता है। और फिर यह तकनीक की बात है - दो दर्जन माप करने के लिए, अधिक सटीक माप के लिए अंकगणितीय माध्य की गणना करें और इन आंकड़ों को प्रति मिनट क्रांतियों की संख्या में परिवर्तित करें।
पहले परीक्षण में, यह पता चला कि जिस मोटर पर मैंने परीक्षण किया वह लगभग 12 हजार क्रांति प्रति मिनट की गति से घूमती है। यह विचार तुरंत दिमाग में आया कि कहीं न कहीं गणना में त्रुटि थी या आर्डिनो फोटोरेसिस्टर से डेटा को सही ढंग से संसाधित नहीं कर रहा था। मुझे एक पोटेंशियोमीटर से मोटर को धीमा करना पड़ा, और डेटा भी धीमा होने लगा। टर्नओवर दो तक गिर गया, और फिर एक हजार प्रति मिनट हो गया। सब कुछ काम किया और सही ढंग से गणना की। लेकिन गति में अधिकतम वृद्धि के साथ, सभी समान 12 हजार प्राप्त हुए। मुझे मोटर के लिए एक डेटाशीट की तलाश करनी पड़ी और यह पता चला कि इसकी सामान्य रोटेशन गति 11.5 -12.5 हजार क्रांति है। यानी सब कुछ सही ढंग से काम करता है। मैंने कभी नहीं सोचा होगा कि इतनी छोटी मोटर इतनी गति से घूम सकती है।
नीचे दो तस्वीरें हैं, एक दिखाता है कि एलईडी और फोटोरेसिस्टर कैसे स्थित हैं, और दूसरे ने पहले ही उनमें एक मोटर जोड़ दी है, जिसकी रोटेशन गति को मापा जाएगा।


Arduino का उपयोग करके HD44780 LCD डिस्प्ले पर डेटा आउटपुट

HD44780 डिस्प्ले के साथ काम करने के लिए I2C इंटरफ़ेस मॉड्यूल का उपयोग करना बहुत सुविधाजनक है। मॉड्यूल और एलसीडी डिस्प्ले अलग से बेचे जाते हैं, लेकिन अक्सर एक सेट के रूप में मिलाप किया जाता है। मैं पहले से ही इकट्ठे लोगों का उपयोग करने की सलाह देता हूं, क्योंकि यदि आप I2C के बिना कनेक्ट करते हैं, तो आपको 16 तारों का उपयोग करके डिस्प्ले को कनेक्ट करना होगा, जब उनकी संख्या I2C के माध्यम से 4 हो जाती है, जिनमें से दो पावर हैं। और अन्य दो तार arduino pins A4 और A5 से जुड़े हैं।
डिस्प्ले पर डेटा आउटपुट के नियंत्रण को अधिक सुविधाजनक और आरामदायक बनाने के लिए, आप लिक्विड क्रिस्टल_आई2सी लाइब्रेरी का उपयोग कर सकते हैं।
नीचे एक डिस्प्ले को जोड़ने के लिए एक आरेख है, साथ ही एक एलईडी के साथ एक फोटोरेसिस्टर के साथ आर्डिनो।


परियोजना में क्या उपयोग किया गया था:

  • Arduino (मैंने इस्तेमाल किया arduino uno, लेकिन आप किसी अन्य का उपयोग कर सकते हैं)। यहाँ खरीदा: आर्डिनो उनो
  • 300 ओम के प्रतिरोध के साथ 1 प्रतिरोधक। यहां खरीदा:
  • 10 kOhm के प्रतिरोध के साथ 1 प्रतिरोधक। मैंने यहां खरीदा: प्रतिरोधों का एक सेट 700 पीसी। 10 ओम से 1 मेगाहम
  • 1 एलईडी। यहां खरीदा: 100 एलईडी, 10 अलग-अलग रंग
  • I2C मॉड्यूल के साथ LCD डिस्प्ले HD44780। यहाँ खरीदा: I2C मॉड्यूल के साथ एलसीडी डिस्प्ले HD44780
  • फोटोरेसिस्टर। यहां खरीदा: फोटोरेसिस्टर्स, 20 पीसी

Arduino पर टैकोमीटर स्केच

नीचे विस्तृत टिप्पणियों के साथ एक स्केच है, और आप इसे अपने कंप्यूटर पर भी डाउनलोड कर सकते हैं: डाउनलोड करें।

// पुस्तकालयों के साथ काम करने के लिए आयसीडी प्रदर्शन I2C द्वारा #शामिल करें #शामिल // इनिशियलाइज़ेशन प्रदर्शित करें। // जीएनडी - ग्राउंड // वीवीसी - 5+ वोल्ट // एसडीए - पिन ए 4 // एससीएल - पिन ए 5 // 16 कॉलम और 2 रो लिक्विड क्रिस्टल_आई 2 सी एलसीडी (0x27,16,2); कॉन्स्ट इंट पिनफोटो = ए0; // photoresistor int light = 0 से डेटा पढ़ने के लिए पोर्ट; // photoresistor से डेटा संग्रहीत करने के लिए चर int numTurn = 0; // क्रांतियों की जाँच के लिए पुनरावृत्ति की संख्या int valArray; // फोटोरेसिस्टर से डेटा संग्रहीत करने के लिए सरणी, प्रारंभिक सेटअप int maxLight = 1024 के लिए आवश्यक; // दहलीज जिस पर हम विचार करेंगे कि एलईडी बंद है int sum = -1; // क्रांतियों की संख्या का योग int count_zamer = 20; // पुनरावृत्तियों की संख्या जिसके बाद औसत गति मान की गणना अहस्ताक्षरित लंबी lastMillis = 0; // पिछले एलईडी ओवरलैप बूल वर्क के समय को स्टोर करने के लिए चर = सच; // झंडा जो एलईडी के शून्य सेटअप () ( Serial.begin (9600); पिनमोड (पिनफोटो, INPUT) को खोलने के बाद उठाया जाता है; // एलईडी के गर्म होने की प्रतीक्षा करें देरी (1000); // हर 10 मिलीसेकंड, पढ़ें photoresistor से मान, के लिए 100 गुना (int i = 0; i< 100; i++){ valArray[i] = analogRead(pinPhoto); delay(10); } // выбераем минимальное значение с фоторезистора for(int i = 0; i< 100; i++){ if(maxLight >वैलअरे [i]) मैक्सलाइट = वैलअरे [i]; ) // थ्रेशोल्ड मैक्सलाइट को थोड़ा कम करें - = 10; सीरियल.प्रिंट्लन (मैक्सलाइट); देरी (500); Serial.println ("स्टार्ट!"); लास्टमिलिस = मिली (); // प्रारंभ प्रदर्शन LCD.init (); // बैकलाइट एलसीडी चालू करें। बैकलाइट (); // बाकी सब कुछ एलसीडी साफ़ करें। साफ़ करें (); // टेक्स्ट एलसीडी प्रदर्शित करें। सेट कर्सर (0, 0); एलसीडी.प्रिंट ("एस"); LCD.setCursor(1, 0); एलसीडी.प्रिंट ("टी"); LCD.setCursor(2, 0); एलसीडी.प्रिंट ("ए"); LCD.setCursor(3, 0); एलसीडी.प्रिंट ("आर"); LCD.setCursor(4, 0); एलसीडी.प्रिंट ("टी"); LCD.setCursor(5, 0); एलसीडी.प्रिंट ("!"); ) शून्य लूप () (// फोटोरेसिस्टर लाइट से रीडिंग पढ़ें = एनालॉगरेड (पिनफोटो); // यदि मान दहलीज से नीचे है, तो एलईडी अवरुद्ध है अगर (प्रकाश)< maxLight && work){ // опускаем флаг, чтобы не считать, пока светодиод перекрыт work = false; // если первая итерация, то не считаем ее, чтобы начать отсчет времени if(sum == -1){ // записываем время старта lastMillis = millis(); sum = 0; }else{ unsigned long currentMillis = millis(); // записываем в sum количество миллисекунд между оборотами sum += (currentMillis - lastMillis); numTurn++; // считаем 20 раз, для большей точности if(numTurn == count_zamer){ float sredSpeed = 0; numTurn = 0; // берем среднее и высчитываем количество оборотов для минуты sredSpeed = 60000 / ((float)sum / (float)count_zamer); // оборотов в минуту Serial.print("speed: "); Serial.println(sredSpeed); sum = -1; // вывод данных на LCD дисплей lcd.clear(); lcd.setCursor(0, 0); lcd.print("S"); lcd.setCursor(1, 0); lcd.print("P"); lcd.setCursor(2, 0); lcd.print("E"); lcd.setCursor(3, 0); lcd.print("E"); lcd.setCursor(4, 0); lcd.print("D"); lcd.setCursor(5, 0); lcd.print(":"); // преобразовываем числовое значение в строку // и по одному символу выводим не дисплей char string_turn = ""; sprintf(string_turn,"%d", (int)sredSpeed); char *current = string_turn; int count_numbers = 0; while (*current != "\0") { lcd.setCursor(6+count_numbers, 0); lcd.print(*current); count_numbers++; current++; } lcd.setCursor(count_numbers+7, 0); lcd.print("r"); lcd.setCursor(count_numbers+8, 0); lcd.print("/"); lcd.setCursor(count_numbers+9, 0); lcd.print("m"); lcd.setCursor(count_numbers+10, 0); lcd.print("i"); lcd.setCursor(count_numbers+11, 0); lcd.print("n"); } lastMillis = currentMillis; } } // если светодиод не загорожен if(light >= मैक्सलाइट) (काम = सच;))

अंतभाषण

आप वीडियो में काम करने वाले उपकरण को देख सकते हैं, जहां मैंने कुछ माप लिए।