குறியீட்டை தேடு

பாடம் 17/31: Arduino-இல் தாமதத்தை குறுக்கிடுவது எப்படி மற்றும் ஒளி சார்ந்த மின்தடையம் LDR | Robojax

பாடம் 17/31: Arduino-இல் தாமதத்தை குறுக்கிடுவது எப்படி மற்றும் ஒளி சார்ந்த மின்தடையம் LDR | Robojax

இந்த வழிகாட்டியில், Arduino-வின் இரண்டு அத்தியாவசிய கருத்துகளை ஆராய்வோம்: இடையீடுகள் (interrupts) மற்றும் ஒளி-சார்ந்த மின்தடையங்கள் (LDRகள்). உங்கள் குறியீட்டில் உள்ள தாமதங்களை எவ்வாறு குறுக்கிடுவது என்பதை நீங்கள் கற்றுக்கொள்வீர்கள், இதனால் உங்கள் Arduino பொத்தான் அழுத்தங்களுக்கு உடனடியாக பதிலளிக்க முடியும், பின்னர் இரவில் ஒரு பஸர் அல்லது விளக்கை தானாக இயக்கக்கூடிய ஒளி-உணர்திறன் சுற்றை உருவாக்குவோம். அடிப்படை LED ஒளிரும் ஸ்கெட்ச்களுக்கு அப்பால் சென்று பதிலளிக்கக்கூடிய, நிஜ-உலக தானியங்கி திட்டங்களை உருவாக்கத் தொடங்க விரும்பும் எவருக்கும் இந்த திட்டம் சரியானது. உங்கள் நடைபாதைக்கு ஒரு ஸ்மார்ட் இரவு விளக்கை உருவாக்க, கதவு திறக்கும்போது ஒலிக்கும் எளிய பாதுகாப்பு அலாரம், அந்தி நேரத்தில் செயல்படும் சூரிய-சக்தி தோட்ட விளக்கு, அல்லது சூரியன் மறையும்போது மூடப்படும் தானியங்கி திரைச்சீலை போன்றவற்றை உருவாக்க இந்த திறன்களைப் பயன்படுத்தலாம். இந்த பாடம் SunFounder 3-in-1 Arduino கிட்டை அடிப்படையாகக் கொண்டது, ஆனால் கருத்துகள் எந்த நிலையான Arduino போர்டுக்கும் பொருந்தும்.

LDR_12708_orig
LDR Illustration and symbol

வன்பொருள் & கூறுகள்

இந்த திட்டத்துடன் தொடர, உங்களுக்கு பின்வரும் கூறுகள் தேவைப்படும். ஒரு நிலையான Arduino Uno அல்லது Nano இந்த கட்டுமானத்திற்கு சரியானது.

  • Arduino Uno அல்லது Nano
  • ஒளி சார்ந்த மின்தடையம் (LDR), எ.கா., Kweeds KM601
  • 10k ஓம் மின்தடையம்
  • புஷ் பொத்தான்
  • பஸர்
  • பிரெட்போர்டு மற்றும் ஜம்பர் கம்பிகள்

Arduino இடையீடுகளைப் புரிந்துகொள்வது

ஒரு நிலையான Arduino ஸ்கெட்ச்சில், loop() செயல்பாடு தொடர்ச்சியாக இயங்கி, பணிகளை வரிசையாக செயல்படுத்துகிறது. நீங்கள் ஒரு delay() ஐப் பயன்படுத்தும்போது, Arduino அந்த காலத்திற்கு வேறு எதையும் செய்வதை நிறுத்துகிறது. மற்றொரு பணி இயங்கும்போது ஒரு முக்கியமான நிகழ்வுக்கு, ஒரு பொத்தான் அழுத்தம் போன்றவற்றுக்கு பதிலளிக்க வேண்டியிருந்தால் இது ஒரு பிரச்சனை. எடுத்துக்காட்டாக, ஒரு LED ஒளிர ஒரு வினாடி தாமதம் இருந்தால், ஒரு பொத்தான் அழுத்தம் ஒரு வினாடி வரை பதிவு செய்யப்படாமல் போகலாம், இது பதிலளிக்காதது போல் உணரப்படும் (வீடியோவில் 08:13).

Arduino இடையீடுகள் இந்த பிரச்சனையை தீர்க்கின்றன. ஒரு இடையீடு என்பது ஒரு வன்பொருள் அம்சமாகும், இது ஒரு குறிப்பிட்ட பின்னை முக்கிய நிரலை "குறுக்கிட" அனுமதிக்கிறது, அது செய்வதை இடைநிறுத்தி, இடையீட்டு சேவை வழக்கம் (ISR) எனப்படும் சிறப்பு செயல்பாட்டை இயக்குகிறது. இது உங்கள் Arduino மற்ற எதுவாக இருந்தாலும், உயர்-முன்னுரிமை நிகழ்வுகளுக்கு உடனடியாக பதிலளிக்க அனுமதிக்கிறது. அனைத்து பின்களும் இடையீடுகளை ஆதரிக்காது என்பதை கவனத்தில் கொள்ள வேண்டும். Arduino Uno மற்றும் Nano இல், பின்கள் 2 மற்றும் 3 மட்டுமே இந்த நோக்கத்திற்காக பயன்படுத்தப்படலாம் (வீடியோவில் 02:37). Mega போன்ற மற்ற போர்டுகளில் அதிக விருப்பங்கள் உள்ளன, ஆனால் இந்த திட்டத்திற்கு, நாம் பின் 2 ஐப் பயன்படுத்துவோம்.

பின்னின் வெவ்வேறு நிலை மாற்றங்களால் இடையீடுகள் தூண்டப்படலாம்: LOW, CHANGE, RISING, மற்றும் FALLING. CHANGE முறை பின்னின் நிலை HIGH இலிருந்து LOW அல்லது LOW இலிருந்து HIGH ஆக மாறும்போதெல்லாம் இடையீட்டை தூண்டுகிறது, இது ஒரு பொத்தான் அழுத்த மாற்றத்திற்கு சரியானது.

வயரிங் வழிகாட்டி

buzzer_push_button_schematic
lcd1602_I2C_wiring_sunfounder

இந்த பாடத்தில் இரண்டு சுற்றுகளை உருவாக்குவோம். முதலாவது ஒரு பொத்தான் மற்றும் பஸருடன் இடையீடுகளை நிரூபிக்கிறது, இரண்டாவது ஒளி அளவுகளை உணர LDR ஐப் பயன்படுத்துகிறது. இடையீட்டு சுற்றுடன் தொடங்குவோம்.

சுற்று 1: இடையீடு டெமோவிற்கான பொத்தான் மற்றும் பஸர்

இந்த சுற்று நேரடியானது. பொத்தான் பின் 2 உடன் இணைக்கப்பட்டுள்ளது, இது நமது இடையீட்டு பின் ஆகும். ஒரு 10k ஓம் புல்-டவுன் மின்தடையம் பொத்தான் அழுத்தப்படாதபோது பின் LOW ஆகவும், அழுத்தப்படும்போது HIGH ஆகவும் இருப்பதை உறுதி செய்கிறது. பஸர் பின் 8 உடன் இணைக்கப்பட்டுள்ளது.

இடையீடு டெமோவிற்கு, கூறுகளை பின்வருமாறு இணைக்கவும்:

  • புஷ் பொத்தான்: ஒரு காலை 5V உடனும் மற்ற காலை டிஜிட்டல் பின் 2 உடனும் இணைக்கவும். பின் 2 இலிருந்து GND க்கு ஒரு 10k ஓம் மின்தடையத்தை இணைக்கவும்.
  • பஸர்: எதிர்மறை முனையை GND உடனும் நேர்மறை முனையை டிஜிட்டல் பின் 8 உடனும் இணைக்கவும்.

சுற்று 2: ஒளி உணர்திறனுக்கான LDR மற்றும் பஸர்

LDR சுற்றுக்கு, நாம் ஒரு மின்னழுத்த பிரிப்பான் அமைப்பைப் பயன்படுத்துகிறோம். LDR இன் மின்தடை ஒளியுடன் மாறுகிறது, இது அனலாக் பின்னில் உள்ள மின்னழுத்தத்தை மாற்றுகிறது. இருட்டாக இருக்கும்போது, LDR க்கு அதிக மின்தடை (சுமார் 10k ஓம்ஸ்) இருக்கும், மேலும் பிரகாசமாக இருக்கும்போது, மின்தடை கணிசமாக குறைகிறது (வீடியோவில் 16:25). இந்த மின்தடை மாற்றமே நாம் அளவிடுவது.

ஒரு மின்னழுத்த பிரிப்பான் அவசியம், ஏனெனில் Arduino மின்னழுத்தத்தை மட்டுமே படிக்க முடியும், மின்தடையை அல்ல. LDR ஐ ஒரு நிலையான 10k ஓம் மின்தடையத்துடன் தொடரில் வைப்பதன் மூலம், அவற்றுக்கிடையேயான புள்ளியில் உள்ள மின்னழுத்தம் LDR இன் மின்தடைக்கு விகிதாசாரமாக மாறுகிறது. இந்த மின்னழுத்தம் பின்னர் Arduino இன் அனலாக்-டு-டிஜிட்டல் மாற்றி (ADC) மூலம் படிக்கப்படுகிறது.

LDR டெமோவிற்கு, கூறுகளை பின்வருமாறு இணைக்கவும்:

  • LDR: ஒரு காலை 5V உடனும் மற்ற காலை அனலாக் பின் A0 உடனும் இணைக்கவும்.
  • 10k ஓம் மின்தடையம்: A0 க்கு செல்லும் LDR காலில் இருந்து GND க்கு இணைக்கவும். இது மின்னழுத்த பிரிப்பானை உருவாக்குகிறது.
  • பஸர்: எதிர்மறை முனையை GND உடனும் நேர்மறை முனையை டிஜிட்டல் பின் 8 உடனும் இணைக்கவும்.

குறிப்பு: சரியான பின் ஒதுக்கீடுகள் குறியீட்டில் வரையறுக்கப்பட்டுள்ளன மற்றும் உங்கள் அமைப்பிற்கு ஏற்ப மாற்றலாம்.

குறியீடு விளக்கம்

திட்டத்தின் நடத்தையை கட்டுப்படுத்தும் வழங்கப்பட்ட குறியீட்டின் பயனர்-கட்டமைக்கக்கூடிய பகுதிகளில் நாம் கவனம் செலுத்துவோம். முழு நிரல் கட்டுரைக்கு கீழே பதிவிறக்கத்திற்கு கிடைக்கிறது.

குறியீடு எளிதாக மாற்றியமைக்கக்கூடிய வகையில் வடிவமைக்கப்பட்டுள்ளது. ஸ்கெட்ச்சின் மேலே, நீங்கள் சரிசெய்யக்கூடிய முக்கிய மாறிகளைக் காண்பீர்கள்.

const byte buzzerPin = 8;
const byte interruptPin = 2;
volatile byte state = LOW;
int count=0;

இங்கே, buzzerPin என்பது பின் 8 ஆக அமைக்கப்பட்டுள்ளது, அங்குதான் நீங்கள் பஸரை இணைக்கிறீர்கள். interruptPin என்பது பின் 2 ஆக அமைக்கப்பட்டுள்ளது, இது பொத்தானை அழுத்துவதைக் கேட்கும் பின் ஆகும். state மாறி என்பது ஒரு volatile பைட் ஆகும், இது பஸரின் தற்போதைய நிலையை (HIGH அல்லது LOW) வைத்திருக்கிறது. இது volatile எனக் குறிக்கப்பட்டுள்ளது, ஏனெனில் இது இடையீட்டு சேவை வழக்கத்தில் (ISR) மாற்றப்படுகிறது, மேலும் இந்த முக்கிய சொல் Arduino எப்போதும் சமீபத்திய மதிப்பைப் படிப்பதை உறுதி செய்கிறது. count மாறி என்பது ஒரு எளிய எண்ணிக்கையாகும், இது முக்கிய லூப்பில் அதிகரிக்கிறது, இடையீடு செயலில் இருக்கும்போது லூப் இன்னும் இயங்குகிறது என்பதை நிரூபிக்க.

setup() செயல்பாட்டில், பஸர் பின் ஒரு OUTPUT ஆக அமைக்கப்படுகிறது, மற்றும் இடையீட்டு பின் ஒரு INPUT ஆக அமைக்கப்படுகிறது. முக்கியமான வரி attachInterrupt() ஆகும், அங்குதான் நீங்கள் இடையீட்டை உள்ளமைக்கிறீர்கள். இந்த செயல்பாடு Arduino-விடம் எந்த பின்னை கவனிக்க வேண்டும், இடையீடு ஏற்படும்போது எந்த செயல்பாட்டை அழைக்க வேண்டும், மற்றும் எந்த தூண்டுதல் நிபந்தனையைப் பயன்படுத்த வேண்டும் என்பதைச் சொல்கிறது.

attachInterrupt(digitalPinToInterrupt(interruptPin), noisy, CHANGE);

இந்த வரி குறிப்பிட்ட பின்னுக்கு ஒரு இடையீட்டை இணைக்கிறது. digitalPinToInterrupt() செயல்பாடு பின் எண்ணை சரியான இடையீட்டு எண்ணாக மாற்றுகிறது. noisy என்பது இடையீடு தூண்டப்படும்போது அழைக்கப்படும் செயல்பாட்டின் பெயர். இறுதியாக, CHANGE என்பது முறை ஆகும், இது பின்னின் எந்த நிலை மாற்றத்திலும் இடையீட்டைத் தூண்டுகிறது. உங்கள் தேவைகளைப் பொறுத்து இதை RISING, FALLING, அல்லது LOW என மாற்றலாம்.

noisy() செயல்பாடு ISR ஆகும். இது ஒரு எளிய மாற்று செயல்பாடாகும், இது பஸரின் நிலையை மாற்றுகிறது. பொத்தானை அழுத்தும்போது, இடையீடு இந்த செயல்பாட்டைத் தூண்டுகிறது, இது state மாறியை தலைகீழாக்கி பஸர் பின்னுக்கு எழுதுகிறது. இது ஒவ்வொரு பொத்தான் அழுத்தத்திலும் பஸரை இயக்கவும் நிறுத்தவும் உங்களை அனுமதிக்கிறது, முக்கிய லூப் எண்ணிக்கை மற்றும் தாமதத்தில் பிஸியாக இருந்தாலும் கூட.

திட்டத்தின் நடத்தையை பகலுக்குப் பதிலாக இரவில் பஸரை இயக்க மாற்ற, நீங்கள் முக்கிய லூப்பில் உள்ள நிபந்தனை தர்க்கத்தை மாற்ற வேண்டும், HIGH மற்றும் LOW நிலைகளுக்கான digitalWrite() கட்டளைகளை மாற்றுவதன் மூலம்.

நேரடி திட்டம் & ஆர்ப்பாட்டம்

ஆர்ப்பாட்டத்தில், நீங்கள் இரண்டு முக்கிய சோதனைகளைக் காண்பீர்கள். முதலில், இடையீட்டு குறியீடு இல்லாமல் இடையீட்டு சுற்று இயங்குவதைக் காட்டுகிறது, அங்கு லூப்பில் உள்ள தாமதம் பொத்தான் பதிலை மந்தமாக்குகிறது. இது இடையீடுகள் தீர்க்கும் சிக்கலை எடுத்துக்காட்டுகிறது.

பின்னர், இடையீட்டு குறியீடு ஏற்றப்பட்ட நிலையில், சீரியல் மானிட்டர் ஒவ்வொரு வினாடியும் எண்ணிக்கை அதிகரிப்பதைக் காட்டுகிறது. பொத்தானை அழுத்தும்போது, பஸர் உடனடியாக இயங்க அல்லது நிறுத்த மாறுகிறது, முக்கிய லூப்பில் உள்ள தாமதத்தைப் பொருட்படுத்தாமல். இது இடையீடு காத்திருக்கும் நேரத்தை வெற்றிகரமாகத் தவிர்த்து அதன் பணியை உடனடியாகச் செய்கிறது என்பதை நிரூபிக்கிறது (வீடியோவில் 14:07 இல்).

LDR பகுதிக்கு, சீரியல் மானிட்டர் மூல analog மதிப்பை அச்சிடுகிறது. பிரகாசமான ஒளியில் மதிப்பு அதிகமாக (சுமார் 960) இருப்பதையும், சென்சார் மூடப்படும்போது கணிசமாகக் குறைவதையும் (சுமார் 400 அல்லது குறைவாக) நீங்கள் காணலாம். இது LDR-இன் எதிர்ப்பு ஒளி தீவிரத்துடன் எவ்வாறு மாறுகிறது என்பதை நிரூபிக்கிறது. குறியீடு பின்னர் "பகல்" அல்லது "இரவு" என்பதை தீர்மானிக்க ஒரு வரம்பு மதிப்பைப் பயன்படுத்தி பஸரை அதற்கேற்ப கட்டுப்படுத்துகிறது. இரவை உருவகப்படுத்த சென்சாரை மூடுவதன் மூலம், நீங்கள் பஸரைத் தூண்டலாம், மேலும் ஒளிக்கு வெளிப்படுத்துவதன் மூலம் அதை அணைக்கலாம்.

அத்தியாயங்கள்

  • [00:00] Arduino இடையீடுகள் மற்றும் LDR அறிமுகம்
  • [01:43] Arduino குறியீட்டில் தாமதங்களின் சிக்கல்
  • [03:37] இடையீட்டு பின்கள் மற்றும் முறைகளைப் புரிந்துகொள்வது
  • [04:20] பொத்தான் மற்றும் பஸர் சுற்றை இணைத்தல்
  • [06:22] தாமத ஆர்ப்பாட்டத்திற்கான குறியீடு விளக்கம்
  • [07:48] தாமத சிக்கலின் ஆர்ப்பாட்டம்
  • [09:26] இடையீட்டை செயல்படுத்துதல் மற்றும் குறியீடு எழுதுதல்
  • [11:50] இடையீட்டு செயல்பாடு எவ்வாறு செயல்படுகிறது
  • [14:26] ஒளி சார்ந்த மின்தடையங்கள் (LDR) அறிமுகம்
  • [15:44] மல்டிமீட்டருடன் LDR எதிர்ப்பை அளவிடுதல்
  • [17:22] LDR மற்றும் பஸர் சுற்றை இணைத்தல்
  • [19:55] LDR மதிப்புகளைப் படிக்கும் குறியீடு
  • [20:49] LDR மதிப்பு மாற்றங்களின் ஆர்ப்பாட்டம்
  • [22:08] பகல் மற்றும் இரவு வரம்புகளை அமைத்தல்
  • [23:40] LDR உடன் பஸரை கட்டுப்படுத்தும் குறியீடு
  • [25:21] தானியங்கி இரவு விளக்கின் ஆர்ப்பாட்டம்

படங்கள்

An LDR
An LDR
LDR Illustration and symbol
LDR Illustration and symbol
lcd1602_I2C_wiring_sunfounder
lcd1602_I2C_wiring_sunfounder
buzzer_push_button_schematic
buzzer_push_button_schematic
buzzer_push_button_wiring
buzzer_push_button_wiring
ldr
ldr
LDR_12708_orig
LDR_12708_orig
913-Lesson 17/31: interrupt a delay in Arduino and Light Dependent Resistor LDR
மொழி: C++
/*
Lesson 20/31: interrupt a delay in Arduino and Light Dependent Resistor LDR
Get this code and watch video Download and resource page https://robojax.com/RJT600
YouTube video https://www.youtube.com/watch?v=N_L11m1v_yk
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
const byte buzzerPin = 8;
const byte interruptPin = 2;
volatile byte state = LOW;
int count=0;

void setup() {
  pinMode(buzzerPin, OUTPUT);
  pinMode(interruptPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(interruptPin), noisy, CHANGE);
  Serial.begin(9600);
  digitalWrite(buzzerPin, state);
}

void loop() {
  count++;
  Serial.println(count);
  delay(1000);
}

void noisy() {
  state = !state;
  digitalWrite(buzzerPin, state);
}

நீங்கள் தேவைப்படும் எண்ணங்கள்

வளங்கள் மற்றும் மேற்கோள்கள்

கோப்புகள்📁

ஆர்டினோ நூலகங்கள் (ஜிப்)