टाइमर माइक्रोकंट्रोलर्स की एक आवश्यक विशेषता है, जिससे आप देरी पर भरोसा किए बिना सटीक अंतराल पर कार्य करने की अनुमति देते हैं। Arduino UNO में तीन अंतर्निहित हार्डवेयर टाइमर (Timer0, Timer1, और Timer2) हैं, जिन्हें PWM सिग्नल, टाइमिंग इवेंट या शेड्यूलिंग कार्यों जैसे विभिन्न कार्यों के लिए कॉन्फ़िगर किया जा सकता है। यह ट्यूटोरियल आपको Arduino टाइमर को समझने और उपयोग करने के माध्यम से मार्गदर्शन करेगा।
आपको क्या चाहिए
- Arduino Uno (या एक संगत बोर्ड)
- एलईडी और 220-ओम रोकनेवाला (समय-आधारित उदाहरणों के लिए)
- ब्रेडबोर्ड और जम्पर तार
- Arduino ide आपके कंप्यूटर पर स्थापित है
चरण 1: Arduino टाइमर को समझना
Arduino UNO के Atmega328p माइक्रोकंट्रोलर में तीन हार्डवेयर टाइमर हैं:
घड़ी | बिट रिज़ॉल्यूशन | प्राथमिक उपयोग |
---|---|---|
Timer0 | 8 बिट | मिलिस (), माइक्रोस (), पीडब्लूएम ऑन पिन 5, 6 |
Timer1 | 16-बिट | सर्वो लाइब्रेरी, PWM ऑन पिन 9, 10 |
Timer2 | 8 बिट | टोन () फ़ंक्शन, PWM ऑन पिन 3, 11 |
टाइमर की प्रमुख विशेषताएं
- टाइमर PWM सिग्नल उत्पन्न कर सकते हैं।
- टाइमर ट्रिगर इंटरप्ट कर सकते हैं।
- टाइमर का उपयोग आंतरिक रूप से Arduino कार्यों द्वारा किया जाता है जैसे
delay()
औरmillis()
.
चरण 2: एक साधारण पीडब्लूएम सिग्नल उत्पन्न करना
पीडब्लूएम (पल्स चौड़ाई मॉड्यूलेशन) संकेतों का उपयोग आमतौर पर एलईडी चमक या मोटर गति को नियंत्रित करने के लिए किया जाता है। PWM सिग्नल बनाने के लिए Timer0 का उपयोग करें।
उदाहरण कोड: पीडब्लूएम के साथ एलईडी चमक नियंत्रण
#define ledPin 6 // Pin 6 uses Timer0 for PWM
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(ledPin, brightness); // Increase brightness
delay(10);
}
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(ledPin, brightness); // Decrease brightness
delay(10);
}
}
चरण 3: इंटरप्ट के साथ टाइमर का उपयोग करना
आप नियमित अंतराल पर रुकावट को ट्रिगर करने के लिए टाइमर को कॉन्फ़िगर कर सकते हैं। उदाहरण के लिए, टाइमर 1 को हर सेकंड एक एलईडी को टॉगल करने के लिए सेट किया जा सकता है।
उदाहरण कोड: टाइमर 1 रुकावट
#define ledPin 13 // Built-in LED
void setup() {
pinMode(ledPin, OUTPUT);
// Configure Timer1
noInterrupts(); // Disable interrupts during setup
TCCR1A = 0; // Clear Timer1 control registers
TCCR1B = 0;
TCNT1 = 0; // Initialize counter value to 0
OCR1A = 15624; // Compare match register (1Hz at 16MHz with 1024 prescaler)
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS12) | (1 << CS10); // 1024 prescaler
TIMSK1 |= (1 << OCIE1A); // Enable Timer1 compare interrupt
interrupts(); // Enable interrupts
}
ISR(TIMER1_COMPA_vect) {
digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle LED
}
void loop() {
// Main loop does nothing; timer handles the LED
}
चरण 4: टाइमर के साथ समय को मापना
आप सटीक अवधि को मापने के लिए टाइमर का उपयोग कर सकते हैं। टाइमर 2 छोटे अंतराल के लिए उपयुक्त है क्योंकि यह 8-बिट टाइमर है।
उदाहरण कोड: समय माप के लिए टाइमर 2
volatile unsigned long overflowCount = 0;
void setup() {
Serial.begin(9600);
// Configure Timer2
noInterrupts();
TCCR2A = 0;
TCCR2B = 0;
TCNT2 = 0;
TCCR2B |= (1 << CS22); // Prescaler 64
TIMSK2 |= (1 << TOIE2); // Enable Timer2 overflow interrupt
interrupts();
}
ISR(TIMER2_OVF_vect) {
overflowCount++;
}
void loop() {
unsigned long timeElapsed = overflowCount * 16.384; // Each overflow = 16.384ms
Serial.print("Time elapsed: ");
Serial.print(timeElapsed);
Serial.println(" ms");
delay(1000);
}
चरण 5: टाइमर लाइब्रेरी का उपयोग करना
टाइमर के साथ काम करने के लिए, आप लाइब्रेरी का उपयोग कर सकते हैं जैसे टिमरोन या टिमरथ्री.
टाइमरोन लाइब्रेरी का उपयोग करना
- Arduino IDE में Timerone लाइब्रेरी स्थापित करें।
- कार्यों को आसानी से शेड्यूल करने के लिए इसका उपयोग करें:
#include <TimerOne.h>
#define ledPin 13
void toggleLED() {
digitalWrite(ledPin, !digitalRead(ledPin));
}
void setup() {
pinMode(ledPin, OUTPUT);
Timer1.initialize(1000000); // Set timer to 1 second (1,000,000 microseconds)
Timer1.attachInterrupt(toggleLED); // Attach the interrupt function
}
void loop() {
// Main loop does nothing; Timer1 handles the LED
}
टाइमर के अनुप्रयोग
- मोटर नियंत्रण के लिए सटीक पीडब्लूएम सिग्नल उत्पन्न करना
- कोड को अवरुद्ध करने के बिना शेड्यूलिंग कार्य (जैसे, मल्टीटास्किंग)
- घटनाओं के लिए समय अंतराल को मापना
- उपयोग किए बिना सटीक देरी पैदा करना
delay()
- एलईडी को ब्लिंकिंग या डेटा भेजने जैसे आवधिक क्रियाओं का प्रबंधन करना
समस्या निवारण
- टाइमर संघर्ष: सुनिश्चित करें कि आप कई कार्यों (जैसे, सर्वो लाइब्रेरी और पीडब्लूएम) के लिए एक ही टाइमर का उपयोग नहीं करते हैं।
-
काम नहीं कर रहा है: जाँच करें कि व्यवधान के साथ सक्षम हैं
interrupts()
. - अप्रत्याशित व्यवहार: डबल-चेक प्रेस्कलर और सही समय के लिए मैच मानों की तुलना करें।
निष्कर्ष
आपने सीखा है कि पीडब्लूएम सिग्नल उत्पन्न करने, इंटरप्ट को संभालने और समय को मापने के लिए Arduino टाइमर का उपयोग कैसे करें। कुशल और सटीक Arduino परियोजनाओं को बनाने के लिए माहिर टाइमर शक्तिशाली सुविधाओं को अनलॉक करता है। विभिन्न कॉन्फ़िगरेशन के साथ प्रयोग करें और अपनी अगली परियोजना को अनुकूलित करने के लिए टाइमर लागू करें!