Somo la 17/31: Jinsi ya kukatiza ucheleweshaji katika Arduino na Kipinga Kinachotegemea Mwanga LDR | Robojax
Katika mwongozo huu, tutachunguza dhana mbili muhimu za Arduino: interrupts na resistors zinazotegemea mwanga (LDRs). Utajifunza jinsi ya kukatiza ucheleweshaji katika msimbo wako ili Arduino yako iweze kujibu mara moja kwa kubonyeza kitufe, na kisha tutaunda mzunguko wa kuhisi mwanga ambao unaweza kuwasha buzzer au taa kiotomatiki usiku. Mradi huu ni bora kwa mtu yeyote anayetaka kuendelea zaidi ya miradi ya msingi ya kupepesa LED na kuanza kuunda miradi ya kiotomatiki inayojibu na ya ulimwengu halisi. Unaweza kutumia ujuzi huu kuunda taa ya usiku yenye akili kwa barabara yako ya ndani, kengele rahisi ya usalama inayolia mlango unapofunguliwa, taa ya bustani inayotumia nishati ya jua inayowashwa jioni, au pazia la kiotomatiki linalofungwa jua linapozama. Somo hili linatokana na kit cha SunFounder 3-in-1 Arduino, lakini dhana hizo zinatumika kwa bodi yoyote ya kawaida ya Arduino.

Vifaa & Vipengele
Ili kufuata mradi huu, utahitaji vipengele vifuatavyo. Arduino Uno au Nano ya kawaida ni bora kwa ujenzi huu.
- Arduino Uno au Nano
- Resistor inayotegemea mwanga (LDR), kama vile Kweeds KM601
- Resistor ya 10k Ohm
- Kitufe cha Kushinikiza
- Buzzer
- Breadboard na Waya za Jumper
Kuelewa Arduino Interrupts
Katika msimbo wa kawaida wa Arduino, kazi ya loop() inaendesha mfululizo, ikitekeleza kazi kwa mstari. Unapotumia delay(), Arduino inaacha kufanya kitu kingine chochote kwa muda huo. Hili ni tatizo ikiwa unahitaji kujibu tukio muhimu, kama kubonyeza kitufe, wakati kazi nyingine inaendelea. Kwa mfano, ikiwa una ucheleweshaji wa sekunde moja kupepesa LED, kubonyeza kitufe kunaweza kutosajiliwa hadi sekunde moja, ambayo inahisi kutojibu (katika video saa 08:13).
Arduino interrupts hutatua tatizo hili. Interrupt ni kipengele cha maunzi kinachoruhusu pini maalum "kukatiza" programu kuu, kusimamisha chochote kinachofanyika, na kuendesha kazi maalum inayoitwa Interrupt Service Routine (ISR). Hii inaruhusu Arduino yako kujibu matukio ya kipaumbele cha juu mara moja, bila kujali kitu kingine kinachotokea. Ni muhimu kutambua kwamba si pini zote zinazounga mkono interrupts. Kwenye Arduino Uno na Nano, ni pini 2 na 3 pekee zinazoweza kutumika kwa kusudi hili (katika video saa 02:37). Bodi nyingine kama Mega zina chaguo zaidi, lakini kwa mradi huu, tutashikamana na pini 2.
Interrupts zinaweza kusababishwa na mabadiliko tofauti ya hali kwenye pini: LOW, CHANGE, RISING, na FALLING. Hali ya CHANGE inasababisha interrupt wakati wowote hali ya pini inabadilika kutoka HIGH hadi LOW au LOW hadi HIGH, ambayo ni bora kwa kubadilisha hali ya kitufe.
Mwongozo wa Uunganishaji
Tutaunda mizunguko miwili katika somo hili. Ya kwanza inaonyesha interrupts na kitufe na buzzer, na ya pili inatumia LDR kuhisi viwango vya mwanga. Hebu tuanze na mzunguko wa interrupt.
Mzunguko wa 1: Kitufe na Buzzer kwa Onyesho la Interrupt
Mzunguko huu ni rahisi. Kitufe kimeunganishwa kwenye pini 2, ambayo ni pini yetu ya interrupt. Resistor ya 10k Ohm ya kuvuta chini inahakikisha pini inasoma LOW wakati kitufe hakijashinikizwa, na HIGH wakati kimeshinikizwa. Buzzer imeunganishwa kwenye pini 8.
Kwa onyesho la interrupt, unganisha vipengele kama ifuatavyo:
- Kitufe cha Kushinikiza: Unganisha mguu mmoja kwa 5V na mguu mwingine kwa pini ya digital 2. Unganisha resistor ya 10k Ohm kutoka pini 2 hadi GND.
- Buzzer: Unganisha waya hasi kwa GND na waya chanya kwa pini ya digital 8.
Mzunguko wa 2: LDR na Buzzer kwa Kuhisi Mwanga
Kwa mzunguko wa LDR, tunatumia muundo wa kugawanya voltage. Upinzani wa LDR hubadilika na mwanga, ambao hubadilisha voltage kwenye pini ya analog. Wakati kuna giza, LDR ina upinzani wa juu (karibu 10k Ohms), na wakati kuna mwanga mkali, upinzani hupungua sana (katika video saa 16:25). Mabadiliko haya ya upinzani ndiyo tunayopima.
Kigawanya voltage ni muhimu kwa sababu Arduino inaweza kusoma voltage tu, si upinzani. Kwa kuweka LDR katika mfululizo na resistor isiyobadilika ya 10k Ohm, voltage kwenye hatua kati yao inabadilika sawia na upinzani wa LDR. Voltage hii inasomwa na kibadilishaji cha analog hadi digital (ADC) cha Arduino.
Kwa onyesho la LDR, unganisha vipengele kama ifuatavyo:
- LDR: Unganisha mguu mmoja kwa 5V na mguu mwingine kwa pini ya analog A0.
- Resistor ya 10k Ohm: Unganisha kutoka mguu wa LDR unaoenda kwa A0 chini hadi GND. Hii inaunda kigawanya voltage.
- Buzzer: Unganisha waya hasi kwa GND na waya chanya kwa pini ya digital 8.
Kumbuka: Ugawaji halisi wa pini umefafanuliwa kwenye msimbo na unaweza kubadilishwa kulingana na usanidi wako.
Maelezo ya Msimbo
Tutazingatia sehemu zinazoweza kusanidiwa na mtumiaji za msimbo uliotolewa unaodhibiti tabia ya mradi. Programu kamili inapatikana kwa kupakuliwa chini ya makala.
Msimbo umeundwa ili ubadilishwe kwa urahisi. Juu ya msimbo, utapata vigezo muhimu unavyoweza kurekebisha.
const byte buzzerPin = 8;
const byte interruptPin = 2;
volatile byte state = LOW;
int count=0;
Hapa, buzzerPin imewekwa kwenye pin 8, ambapo unaunganisha buzzer. interruptPin imewekwa kwenye pin 2, ambayo ni pin itakayosikiliza kubonyeza kitufe. Kigezo cha state ni byte ya volatile inayoshikilia hali ya sasa ya buzzer (HIGH au LOW). Imewekwa alama ya volatile kwa sababu inabadilishwa ndani ya huduma ya kukatiza (ISR), na neno hili la msingi linahakikisha Arduino inasoma thamani ya hivi karibuni kila wakati. Kigezo cha count ni kihesabu rahisi kinachoongezeka kwenye kitanzi kikuu kuonyesha kwamba kitanzi bado kinafanya kazi wakati kukatiza kunafanya kazi.
Katika kazi ya setup(), pin ya buzzer imewekwa kama OUTPUT, na pin ya kukatiza imewekwa kama INPUT. Mstari muhimu ni attachInterrupt(), ambapo unasanidi kukatiza. Kazi hii inamwambia Arduino ni pin gani ya kuangalia, ni kazi gani ya kuita wakati kukatiza kunatokea, na hali gani ya kichochezi ya kutumia.
attachInterrupt(digitalPinToInterrupt(interruptPin), noisy, CHANGE);
Mstari huu unaambatanisha kukatiza kwenye pin maalum. Kazi ya digitalPinToInterrupt() inabadilisha namba ya pin kuwa namba sahihi ya kukatiza. noisy ni jina la kazi itakayoitwa wakati kukatiza kunapotokea. Hatimaye, CHANGE ni hali, ambayo inachochea kukatiza kwenye mabadiliko yoyote ya hali ya pin. Unaweza kubadilisha hii kuwa RISING, FALLING, au LOW kulingana na mahitaji yako.
Kazi ya noisy() ni ISR. Ni kazi rahisi ya kubadilisha hali inayogeuza hali ya buzzer. Wakati kitufe kinapobonyezwa, kukatiza kunachochea kazi hii, ambayo inabadilisha kigezo cha state na kukiandika kwenye pin ya buzzer. Hii inakuruhusu kuwasha na kuzima buzzer kwa kila kubonyeza kitufe, hata wakati kitanzi kikuu kinafanya kazi ya kuhesabu na kuchelewesha.
Ili kubadilisha tabia ya mradi huu kuamsha buzzer usiku badala ya mchana, ungebadilisha mantiki ya masharti kwenye kitanzi kikuu, ukibadilisha amri za digitalWrite() kwa hali za HIGH na LOW.
Mradi wa Moja kwa Moja na Maonyesho
Katika maonyesho, utaona majaribio mawili muhimu. Kwanza, mzunguko wa kukatiza unaonyeshwa ukifanya kazi bila msimbo wa kukatiza, ambapo kuchelewesha kwenye kitanzi kunafanya majibu ya kitufe kuwa dhaifu. Hii inaangazia tatizo ambalo kukatiza kunasuluhisha.
Kisha, kwa msimbo wa kukatiza uliopakiwa, mfuatiliaji wa serial unaonyesha kihesabu kikiongezeka kila sekunde. Wakati kitufe kinapobonyezwa, buzzer inawasha au kuzima mara moja, bila kujali kuchelewesha kwenye kitanzi kikuu. Hii inathibitisha kwamba kukatiza kunapita wakati wa kusubiri na kutekeleza kazi yake mara moja (katika video saa 14:07).
Kwa sehemu ya LDR, mfuatiliaji wa serial unachapisha thamani ghafi ya analog. Unaweza kuona thamani iko juu (karibu 960) kwenye mwanga mkali na inashuka sana (hadi karibu 400 au chini) wakati sensor inafunikwa. Hii inaonyesha jinsi upinzani wa LDR unavyobadilika na kiwango cha mwanga. Msimbo kisha unatumia thamani ya kikomo kuamua kama ni "mchana" au "usiku" na kudhibiti buzzer ipasavyo. Kwa kufunika sensor kuiga usiku, unaweza kuchochea buzzer, na kwa kuifunua kwenye mwanga, unaweza kuizima.
Sura
- [00:00] Utangulizi wa Kukatiza kwa Arduino na LDR
- [01:43] Tatizo la Kuchelewesha kwenye Msimbo wa Arduino
- [03:37] Kuelewa Pini za Kukatiza na Hali
- [04:20] Kuunganisha Kitufe na Mzunguko wa Buzzer
- [06:22] Maelezo ya Msimbo kwa Maonyesho ya Kuchelewesha
- [07:48] Maonyesho ya Tatizo la Kuchelewesha
- [09:26] Kutekeleza na Kuandika Msimbo wa Kukatiza
- [11:50] Jinsi Kazi ya Kukatiza Inavyofanya Kazi
- [14:26] Utangulizi wa Vipinga Vinavyotegemea Mwanga (LDR)
- [15:44] Kupima Upinzani wa LDR kwa Multimita
- [17:22] Kuunganisha Mzunguko wa LDR na Buzzer
- [19:55] Msimbo wa Kusoma Thamani za LDR
- [20:49] Maonyesho ya Mabadiliko ya Thamani za LDR
- [22:08] Kuweka Vikomo vya Mchana na Usiku
- [23:40] Msimbo wa Kudhibiti Buzzer na LDR
- [25:21] Maonyesho ya Taa ya Usiku ya Kiotomatiki
/*
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
Tänker att du kanske behöver
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Resurser och referenser
-
DokumentationDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
Extern.Purchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Filer📁
Arduino-bibliotek (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB