ትምህርት 17/31፡ በአርዱኖ ውስጥ መዘግየትን እንዴት ማቋረጥ እንደሚቻል እና በብርሃን ላይ የተመረኮዘ ተከላካይ LDR | ሮቦጃክስ
በዚህ መመሪያ ውስጥ፣ ሁለት አስፈላጊ የአርዱኢኖ ጽንሰ-ሐሳቦችን እንመረምራለን፦ ማቋረጫዎች (interrupts) እና በብርሃን ላይ ጥገኛ የሆኑ ተከላካዮች (LDRs)። በኮድዎ ውስጥ መዘግየቶችን እንዴት ማቋረጥ እንደሚችሉ ይማራሉ፣ ይህም አርዱኢኖዎ ለአዝራር መጫን ወዲያውኑ ምላሽ እንዲሰጥ ያስችላል፣ ከዚያም በሌሊት በራስ-ሰር ባዘር ወይም መብራት ማብራት የሚችል የብርሃን ዳሳሽ ዑደት እንገነባለን። ይህ ፕሮጀክት ከመሠረታዊ የLED ብልጭታ ስኬቾች ባሻገር መሄድ እና ምላሽ ሰጪ፣ ተግባራዊ የአውቶሜሽን ፕሮጀክቶችን መገንባት ለሚፈልግ ለማንኛውም ሰው ፍጹም ነው። እነዚህን ክህሎቶች ለኮሪዶርዎ ብልህ የምሽት መብራት፣ በር ሲከፈት የሚደወል ቀላል የደህንነት ማንቂያ፣ በመሸ ጊዜ የሚበራ በፀሐይ ኃይል የሚሰራ የአትክልት መብራት፣ ወይም ፀሐይ ስትጠልቅ የሚዘጋ አውቶማቲክ መጋረጃ ለመፍጠር መጠቀም ይችላሉ። ትምህርቱ በSunFounder 3-in-1 አርዱኢኖ ኪት ላይ የተመሠረተ ነው፣ ነገር ግን ጽንሰ-ሐሳቦቹ ለማንኛውም መደበኛ አርዱኢኖ ቦርድ ይሠራሉ።

ሃርድዌር እና ክፍሎች
ከዚህ ፕሮጀክት ጋር ለመከታተል፣ የሚከተሉትን ክፍሎች ያስፈልግዎታል። መደበኛ አርዱኢኖ ዩኖ ወይም ናኖ ለዚህ ግንባታ ፍጹም ነው።
- አርዱኢኖ ዩኖ ወይም ናኖ
- በብርሃን ላይ ጥገኛ ተከላካይ (LDR)፣ እንደ Kweeds KM601
- 10k ኦም ተከላካይ
- ገፊ አዝራር
- ባዘር
- ብሬድቦርድ እና መዝለያ ሽቦዎች
የአርዱኢኖ ማቋረጫዎችን መረዳት
በመደበኛ የአርዱኢኖ ስኬች ውስጥ፣ የloop() ተግባር ያለማቋረጥ ይሰራል፣ ተግባራትን በመስመር በመፈጸም። delay() ሲጠቀሙ፣ አርዱኢኖው ለዚያ ጊዜ ሌላ ምንም ነገር ማድረግ ያቆማል። ሌላ ተግባር በሚሰራበት ጊዜ ለአስፈላጊ ክስተት፣ እንደ አዝራር መጫን፣ ምላሽ መስጠት ካስፈለገዎት ይህ ችግር ነው። ለምሳሌ፣ LED ለማብራት የአንድ ሰከንድ መዘግየት ካለዎት፣ የአዝራር መጫን እስከ አንድ ሰከንድ ድረስ ላይመዘገብ ይችላል፣ ይህም ምላሽ የማይሰጥ ያስመስላል (በቪዲዮ 08:13)።
የአርዱኢኖ ማቋረጫዎች ይህንን ችግር ይፈታሉ። ማቋረጫ አንድ የተወሰነ ፒን ዋናውን ፕሮግራም "ሊያቋርጥ"፣ የሚሰራውን ሁሉ ሊያቆም እና የማቋረጫ አገልግሎት አሰራር (ISR) የሚባል ልዩ ተግባር እንዲያሄድ የሚፈቅድ የሃርድዌር ባህሪ ነው። ይህ አርዱኢኖዎ ሌላ ምንም ቢከሰት፣ ለከፍተኛ ቅድሚያ ለተሰጣቸው ክስተቶች ወዲያውኑ ምላሽ እንዲሰጥ ያስችላል። ሁሉም ፒኖች ማቋረጫዎችን እንደማይደግፉ ልብ ማለት ያስፈልጋል። በአርዱኢኖ ዩኖ እና ናኖ ላይ፣ ፒን 2 እና 3 ብቻ ለዚህ ዓላማ መጠቀም ይቻላል (በቪዲዮ 02:37)። እንደ ሜጋ ያሉ ሌሎች ቦርዶች ተጨማሪ አማራጮች አሏቸው፣ ነገር ግን ለዚህ ፕሮጀክት፣ በፒን 2 እንጠቀማለን።
ማቋረጫዎች በፒኑ ላይ በተለያዩ የሁኔታ ለውጦች ሊቀሰቀሱ ይችላሉ፦ LOW፣ CHANGE፣ RISING እና FALLING። የCHANGE ሁነታ የፒኑ ሁኔታ ከHIGH ወደ LOW ወይም ከLOW ወደ HIGH በሚቀየርበት ጊዜ ሁሉ ማቋረጫውን ያስነሳል፣ ይህም ለአዝራር መጫን መቀያየር ፍጹም ነው።
የሽቦ አገናኝ መመሪያ
በዚህ ትምህርት ውስጥ ሁለት ዑደቶችን እንገነባለን። የመጀመሪያው ማቋረጫዎችን በአዝራር እና ባዘር ያሳያል፣ ሁለተኛው ደግሞ የብርሃን መጠንን ለመዳሰስ LDR ይጠቀማል። በማቋረጫ ዑደት እንጀምር።
ዑደት 1፡ አዝራር እና ባዘር ለማቋረጫ ማሳያ
ይህ ዑደት ቀጥተኛ ነው። አዝራሩ ከፒን 2 ጋር ተገናኝቷል፣ ይህም የእኛ ማቋረጫ ፒን ነው። የ10k ኦም የመጎተት-ወደታች ተከላካይ አዝራሩ በማይጫንበት ጊዜ ፒኑ LOW እንዲያነብ፣ ሲጫን ደግሞ HIGH እንዲያነብ ያረጋግጣል። ባዘሩ ከፒን 8 ጋር ተገናኝቷል።
ለማቋረጫ ማሳያው፣ ክፍሎቹን እንደሚከተለው ያገናኙ፦
- ገፊ አዝራር፡ አንዱን እግር ከ5V እና ሌላኛውን እግር ከዲጂታል ፒን 2 ጋር ያገናኙ። ከፒን 2 ወደ GND የ10k ኦም ተከላካይ ያገናኙ።
- ባዘር፡ አሉታዊውን እግር ከGND እና አወንታዊውን እግር ከዲጂታል ፒን 8 ጋር ያገናኙ።
ዑደት 2፡ LDR እና ባዘር ለብርሃን ዳሰሳ
ለLDR ዑደት፣ የቮልቴጅ መከፋፈያ ውቅር እንጠቀማለን። የLDR ተከላካይነት በብርሃን ይለወጣል፣ ይህም በአናሎግ ፒኑ ላይ ያለውን ቮልቴጅ ይለውጣል። ጨለማ በሚሆንበት ጊዜ፣ LDR ከፍተኛ ተከላካይነት አለው (በ10k ኦም አካባቢ)፣ ብሩህ በሚሆንበት ጊዜ ደግሞ ተከላካይነቱ በከፍተኛ ሁኔታ ይቀንሳል (በቪዲዮ 16:25)። ይህ የተከላካይነት ለውጥ የምንለካው ነው።
የቮልቴጅ መከፋፈያ አስፈላጊ ነው ምክንያቱም አርዱኢኖ ቮልቴጅን ብቻ ማንበብ ይችላል፣ ተከላካይነትን አይደለም። LDRን ከቋሚ የ10k ኦም ተከላካይ ጋር በተከታታይ በማስቀመጥ፣ በመካከላቸው ያለው ቮልቴጅ ከLDR ተከላካይነት ጋር በተመጣጣኝ ሁኔታ ይለወጣል። ይህ ቮልቴጅ በአርዱኢኖው የአናሎግ-ወደ-ዲጂታል መቀየሪያ (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) ውስጥ ስለሚሻሻል ነው፣ እና ይህ ቁልፍ ቃል አርዱኢኖ ሁልጊዜ የቅርብ ጊዜውን እሴት እንዲያነብ ያረጋግጣል። count ተለዋዋጭ በዋናው ሉፕ ውስጥ የሚጨምር ቀላል ቆጣሪ ሲሆን፣ ማቋረጡ ንቁ በሆነበት ጊዜ ሉፑ አሁንም እየሰራ መሆኑን ለማሳየት ነው።
በsetup() ተግባር ውስጥ፣ የባዘሩ ፒን እንደ OUTPUT ተዋቅሯል፣ እና የማቋረጥ ፒን እንደ INPUT ተዋቅሯል። ወሳኙ መስመር attachInterrupt() ነው፣ ይህም ማቋረጡን የሚያዋቅሩበት ቦታ ነው። ይህ ተግባር አርዱኢኖውን የትኛውን ፒን እንደሚመለከት፣ ማቋረጡ ሲከሰት የትኛውን ተግባር እንደሚጠራ፣ እና የትኛውን ቀስቅሴ ሁኔታ እንደሚጠቀም ይነግረዋል።
attachInterrupt(digitalPinToInterrupt(interruptPin), noisy, CHANGE);
ይህ መስመር ማቋረጥን ከተጠቀሰው ፒን ጋር ያያይዛል። digitalPinToInterrupt() ተግባር የፒን ቁጥሩን ወደ ትክክለኛው የማቋረጥ ቁጥር ይቀይረዋል። noisy ማቋረጡ በሚቀሰቀስበት ጊዜ የሚጠራው ተግባር ስም ነው። በመጨረሻም፣ CHANGE ሁነታው ነው፣ ይህም ማቋረጡን በማንኛውም የፒን ሁኔታ ለውጥ ላይ ያስነሳል። እንደ ፍላጎትዎ ይህንን ወደ RISING፣ FALLING፣ ወይም LOW መቀየር ይችላሉ።
noisy() ተግባር ISR ነው። የባዘሩን ሁኔታ የሚቀይር ቀላል የመቀያየር ተግባር ነው። አዝራሩ ሲጫን፣ ማቋረጡ ይህንን ተግባር ያስነሳል፣ እሱም state ተለዋዋጭን ይቀይረዋል እና ወደ ባዘሩ ፒን ይጽፈዋል። ይህ ዋናው ሉፕ በመቁጠር እና በማዘግየት ላይ ቢሆንም እንኳ፣ ባዘሩን በእ প্রতিটি አዝራር መጫን ማብራት እና ማጥፋት ያስችልዎታል።
የፕሮጀክቱን ባህሪ በቀን ሳይሆን በሌሊት ባዘሩን ለማግበር ለመቀየር፣ በዋናው ሉፕ ውስጥ ያለውን ሁኔታዊ አመክንዮ ያሻሽሉ፣ የdigitalWrite() ትዕዛዞችን ለHIGH እና LOW ሁኔታዎች በመለዋወጥ።
የቀጥታ ፕሮጀክት እና ማሳያ
በማሳያው ውስጥ፣ ሁለት ቁልፍ ሙከራዎችን ያያሉ። በመጀመሪያ፣ የማቋረጥ ሰርክዩት ያለ ማቋረጥ ኮድ ሲሰራ ይታያል፣ በሉፑ ውስጥ ያለው መዘግየት የአዝራሩን ምላሽ ደብዛዛ ያደርገዋል። ይህ ማቋረጦች የሚፈቱትን ችግር ያጎላል።
ከዚያም፣ የማቋረጥ ኮድ ሲጫን፣ የሴሪያል መቆጣጠሪያው ቆጣሪው በየሰከንዱ ሲጨምር ያሳያል። አዝራሩ ሲጫን፣ ባዘሩ በዋናው ሉፕ ውስጥ ያለው መዘግየት ምንም ይሁን ምን፣ ወዲያውኑ ይበራል ወይም ይጠፋል። ይህ ማቋረጡ የመጠበቂያ ጊዜውን በተሳካ ሁኔታ እንደሚያልፍ እና ተግባሩን ወዲያውኑ እንደሚፈጽም ያረጋግጣል (በቪዲዮው 14:07 ላይ)።
ለLDR ክፍል፣ የሴሪያል መቆጣጠሪያው ጥሬውን የአናሎግ እሴት ያትማል። እሴቱ በደማቅ ብርሃን ውስጥ ከፍተኛ (ወደ 960 አካባቢ) ሲሆን፣ ዳሳሹ ሲሸፈን በከፍተኛ ሁኔታ እንደሚወርድ (ወደ 400 ወይም ከዚያ በታች) ያያሉ። ይህ የLDR ተከላካይነት ከብርሃን ጥንካሬ ጋር እንዴት እንደሚለወጥ ያሳያል። ኮዱ ከዚያም "ቀን" ወይም "ሌሊት" መሆኑን ለመወሰን የመግቢያ ደረጃ እሴት ይጠቀማል እና ባዘሩን በዚሁ መሰረት ይቆጣጠራል። ሌሊትን ለማስመሰል ዳሳሹን በመሸፈን ባዘሩን ማስነሳት ይችላሉ፣ እና ለብርሃን በማጋለጥ ማጥፋት ይችላሉ።
ምዕራፎች
- [00:00] የአርዱኢኖ ማቋረጦች እና LDR መግቢያ
- [01:43] በአርዱኢኖ ኮድ ውስጥ የመዘግየት ችግር
- [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] አውቶማቲክ የሌሊት መብራት ማሳያ
/*
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);
}
Common Course Links
Common Course Files
እንደሚያስፈልግዎት ይችላል
-
አማዞንSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
አማዞን
-
አማዞን
-
አማዞን
ምንጮች እና ምንጮች
-
ሰነዶችDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ውስጥPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
ፋይሎች📁
Arduino ቤተ መዝገቦች (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB