Bincika Lambar

Darasi na 17/31: Yadda ake katse jinkiri a cikin Arduino da Resistor mai Dogaro da Haske LDR | Robojax

Darasi na 17/31: Yadda ake katse jinkiri a cikin Arduino da Resistor mai Dogaro da Haske LDR | Robojax

A cikin wannan jagorar, za mu bincika muhimman ra'ayoyi biyu na Arduino: interrupts da resistors masu dogaro da haske (LDRs). Za ku koyi yadda ake katse jinkiri a cikin lambar ku don Arduino ɗinku ya amsa nan take ga latsa maɓalli, sannan za mu gina da'irar gano haske wacce za ta iya kunna buzzer ko haske da daddare ta atomatik. Wannan aikin ya dace da duk wanda ke son wuce gaba da ƙananan shirye-shiryen LED masu walƙiya kuma ya fara gina ayyukan sarrafa kai na gaske. Kuna iya amfani da waɗannan ƙwarewar don ƙirƙirar fitilar dare mai wayo don falon ku, ƙararrawar tsaro mai sauƙi da ke yin sauti lokacin da ƙofa ta buɗe, fitilar lambun mai amfani da hasken rana da ke kunna da yamma, ko labule na atomatik da ke rufewa lokacin da rana ta faɗi. Darasin ya dogara ne akan kayan aikin SunFounder 3-in-1 Arduino, amma ra'ayoyin sun shafi kowane kwamfutar Arduino na yau da kullun.

LDR_12708_orig
LDR Illustration and symbol

Kayan aiki & Abubuwan haɗi

Don bin wannan aikin, kuna buƙatar waɗannan abubuwan haɗi. Arduino Uno ko Nano na yau da kullun ya dace da wannan ginin.

  • Arduino Uno ko Nano
  • Resistor mai dogaro da haske (LDR), kamar Kweeds KM601
  • Resistor na 10k Ohm
  • Maɓallin turawa
  • Buzzer
  • Breadboard da Wayoyin Jumper

Fahimtar Arduino Interrupts

A cikin shirin Arduino na yau da kullun, aikin loop() yana gudana akai-akai, yana aiwatar da ayyuka layi-layi. Lokacin da kuka yi amfani da delay(), Arduino yana dakatar da yin wani abu don wannan lokacin. Wannan matsala ce idan kuna buƙatar amsa ga wani muhimmin abu, kamar latsa maɓalli, yayin da wani aiki ke gudana. Misali, idan kuna da jinkiri na daƙiƙa ɗaya don walƙiya LED, latsa maɓalli bazai iya yin rijista ba har daƙiƙa ɗaya, wanda ke jin rashin amsa (a cikin bidiyo a 08:13).

Arduino interrupts suna magance wannan matsalar. Interrupt fasalin kayan aiki ne wanda ke ba da damar takamaiman pin ya "katse" babban shirin, ya dakatar da duk abin da yake yi, kuma ya gudanar da wani aiki na musamman da ake kira Interrupt Service Routine (ISR). Wannan yana ba da damar Arduino ɗinku ya amsa ga abubuwan da suka fi muhimmanci nan take, ba tare da la'akari da abin da ke faruwa ba. Yana da muhimmanci a lura cewa ba duk pins ne ke tallafawa interrupts ba. A kan Arduino Uno da Nano, pins 2 da 3 ne kawai za a iya amfani da su don wannan dalili (a cikin bidiyo a 02:37). Sauran alluna kamar Mega suna da ƙarin zaɓuɓɓuka, amma don wannan aikin, za mu tsaya da pin 2.

Ana iya kunna interrupts ta canje-canjen jihohi daban-daban akan pin: LOW, CHANGE, RISING, da FALLING. Yanayin CHANGE yana kunna interrupt a duk lokacin da yanayin pin ya canza daga HIGH zuwa LOW ko LOW zuwa HIGH, wanda ya dace da juyar da latsa maɓalli.

Jagorar Haɗin Waya

buzzer_push_button_schematic
lcd1602_I2C_wiring_sunfounder

Za mu gina da'irori biyu a wannan darasin. Na farko yana nuna interrupts tare da maɓalli da buzzer, kuma na biyu yana amfani da LDR don gano matakan haske. Bari mu fara da da'irar interrupt.

Da'ira 1: Maɓalli da Buzzer don Nunin Interrupt

Wannan da'irar tana da sauƙi. Maɓallin an haɗa shi da pin 2, wanda shine pin ɗin interrupt ɗinmu. Resistor na 10k Ohm mai ja da ƙasa yana tabbatar da cewa pin ɗin yana karanta LOW lokacin da ba a latsa maɓallin ba, kuma HIGH lokacin da aka latsa. Buzzer an haɗa shi da pin 8.

Don nunin interrupt, haɗa abubuwan kamar haka:

  • Maɓallin Turawa: Haɗa ƙafa ɗaya zuwa 5V da ɗayan ƙafa zuwa dijital pin 2. Haɗa resistor na 10k Ohm daga pin 2 zuwa GND.
  • Buzzer: Haɗa ƙafar mara kyau zuwa GND da ƙafar mai kyau zuwa dijital pin 8.

Da'ira 2: LDR da Buzzer don Gano Haske

Don da'irar LDR, muna amfani da tsarin raba wutar lantarki. Juriya na LDR yana canzawa da haske, wanda ke canza wutar lantarki a pin ɗin analog. Lokacin da duhu ya yi, LDR yana da juriya mai girma (kusan 10k Ohms), kuma lokacin da haske ya yi, juriya yana raguwa sosai (a cikin bidiyo a 16:25). Wannan canjin juriya shine abin da muke aunawa.

Raba wutar lantarki ya zama dole saboda Arduino na iya karanta wutar lantarki kawai, ba juriya ba. Ta hanyar sanya LDR a jeri tare da resistor na 10k Ohm, wutar lantarki a wurin da ke tsakanin su yana canzawa daidai da juriya na LDR. Wannan wutar lantarki ana karanta ta ta hanyar analog-zuwa-dijital converter (ADC) na Arduino.

Don nunin LDR, haɗa abubuwan kamar haka:

  • LDR: Haɗa ƙafa ɗaya zuwa 5V da ɗayan ƙafa zuwa analog pin A0.
  • Resistor na 10k Ohm: Haɗa daga ƙafar LDR da ke zuwa A0 ƙasa zuwa GND. Wannan yana ƙirƙirar raba wutar lantarki.
  • Buzzer: Haɗa ƙafar mara kyau zuwa GND da ƙafar mai kyau zuwa dijital pin 8.

Lura: Ainihin sanya pins an bayyana su a cikin lambar kuma ana iya canza su don dacewa da saitinku.

Bayanin Lambar

Za mu mayar da hankali kan sassan lambar da mai amfani zai iya daidaitawa waɗanda ke sarrafa halayen aikin. Cikakken shirin yana samuwa don saukewa a ƙasan labarin.

An tsara lambar don sauƙin gyarawa. A saman shirin, za ku sami mahimman masu canji waɗanda kuke iya daidaitawa.

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

Anan, buzzerPin an saita zuwa pin 8, wanda shine inda kake haɗa buzzer. interruptPin an saita shi zuwa pin 2, wanda shine pin da zai saurari danna maɓallin. state mai canzawa shine volatile byte wanda ke riƙe halin yanzu na buzzer (HIGH ko LOW). An yi masa alama volatile saboda ana canza shi a cikin aikin sabis na katsewa (ISR), kuma wannan kalmar tana tabbatar da cewa Arduino koyaushe yana karanta sabon ƙimar. count mai canzawa shine ƙidaya mai sauƙi wanda ke ƙaruwa a cikin babban madauki don nuna cewa madauki yana ci gaba da gudana yayin da katsewar ke aiki.

A cikin aikin setup(), an saita pin na buzzer azaman OUTPUT, kuma an saita pin na katsewa azaman INPUT. Layin mahimmanci shine attachInterrupt(), wanda shine inda kake tsara katsewar. Wannan aikin yana gaya wa Arduino wane pin zai kalla, wane aiki zai kira lokacin da katsewar ta faru, da kuma wane yanayin faɗakarwa zai yi amfani da shi.

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

Wannan layin yana haɗa katsewa zuwa pin ɗin da aka ƙayyade. Aikin digitalPinToInterrupt() yana canza lambar pin zuwa lambar katsewa daidai. noisy shine sunan aikin da za a kira lokacin da aka faɗakar da katsewar. A ƙarshe, CHANGE shine yanayin, wanda ke faɗakar da katsewa akan kowane canji na yanayin pin. Kana iya canza wannan zuwa RISING, FALLING, ko LOW dangane da bukatunka.

Aikin noisy() shine ISR. Aiki ne mai sauƙi na juyawa wanda ke juya yanayin buzzer. Lokacin da aka danna maɓallin, katsewar tana faɗakar da wannan aikin, wanda ke juyar da state mai canzawa kuma ya rubuta shi zuwa pin na buzzer. Wannan yana ba ka damar kunna da kashe buzzer tare da kowane danna maɓallin, ko da yayin da babban madauki yake aiki da ƙidaya da jinkiri.

Don canza halayen aikin don kunna buzzer da dare maimakon da rana, za ka canza yanayin tunani a cikin babban madauki, musanya umarnin digitalWrite() don yanayin HIGH da LOW.

Aikin Kai Tsaye & Nunawa

A cikin nunin, za ka ga gwaje-gwaje biyu masu mahimmanci. Na farko, an nuna da'irar katsewa tana gudana ba tare da lambar katsewa ba, inda jinkirin a cikin madauki ke sa amsawar maɓallin ta zama marar sauri. Wannan yana nuna matsalar da katsewa ke warwarewa.

Sannan, tare da lambar katsewa da aka ɗora, serial monitor yana nuna ƙidaya tana ƙaruwa kowane daƙiƙa. Lokacin da aka danna maɓallin, buzzer yana kunna ko kashe nan take, ba tare da la'akari da jinkirin a cikin babban madauki ba. Wannan yana tabbatar da cewa katsewar ta tsallake lokacin jira cikin nasara kuma ta aiwatar da aikinta nan take (a bidiyo a 14:07).

Ga ɓangaren LDR, serial monitor yana buga ƙimar analog ɗin da ba a sarrafa ba. Kana iya ganin ƙimar tana da girma (kusan 960) a cikin haske mai ƙarfi kuma tana raguwa sosai (zuwa kusan 400 ko ƙasa) lokacin da aka rufe firikwensin. Wannan yana nuna yadda juriyar LDR ke canzawa tare da ƙarfin haske. Lambar sannan tana amfani da ƙimar iyaka don tantance ko "rana" ne ko "dare" kuma tana sarrafa buzzer daidai. Ta hanyar rufe firikwensin don kwaikwayon dare, kana iya faɗakar da buzzer, kuma ta hanyar fallasa shi ga haske, kana iya kashe shi.

Babuka

  • [00:00] Gabatarwa ga Arduino Interrupts da LDR
  • [01:43] Matsalar Jinkiri a Lambar Arduino
  • [03:37] Fahimtar Interrupt Pins da Yanayin
  • [04:20] Haɗa Maɓallin da Da'irar Buzzer
  • [06:22] Bayanin Lamba don Nunin Jinkiri
  • [07:48] Nunin Matsalar Jinkiri
  • [09:26] Aiwa da Lambar Interrupt
  • [11:50] Yadda Aikin Interrupt ke Aiki
  • [14:26] Gabatarwa ga Light Dependent Resistors (LDR)
  • [15:44] Auna Juriyar LDR da Multimeter
  • [17:22] Haɗa Da'irar LDR da Buzzer
  • [19:55] Lamba don Karanta Ƙimar LDR
  • [20:49] Nunin Canjin Ƙimar LDR
  • [22:08] Saita Matsakaicin Rana da Dare
  • [23:40] Lamba don Sarrafa Buzzer da LDR
  • [25:21] Nunin Hasken Dare na Atomatik

Hotuna

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
Harshe: 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);
}

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Littattafan Arduino (zip)