PRJ-01Boshlangʻich15 daqiqa3 ta detalSimulyatorda bor

Blink: birinchi sketchingiz

Svetodiod moduli va Unoning oʻz L svetodiodi har yarim soniyada navbatma-navbat yonadi. Birinchi sketchingiz: simulyatorda ham, haqiqiy platada ham.

Robot nima qiladi

Ikki svetodiod navbatma-navbat yonadi: D2 dagi svetodiod moduli yonganda D13 dagi L svetodiodi oʻchiq turadi, har yarim soniyada esa ular oʻrin almashadi.

VideoYouTubeʼda

Blink klassik birinchi sketch hisoblanadi. Unda ikki svetodiod navbatma-navbat yonadi: D2 pinidagi qizil svetodiod moduli va Unoga oʻrnatilgan, D13 pinidagi kichik L svetodiodi. Biri yonib turganda ikkinchisi oʻchiq boʻladi, har yarim soniyada esa ular oʻrin almashadi. Sketch qanday tuzilishini, Uno oʻz pinlarini qanday yoqib-oʻchirishini, modulni qanday ulash va kodni qanday yuklashni oʻrganasiz. Bu boshlangʻich loyiha, u taxminan 15 daqiqa vaqt oladi.

Nima kerak

Ushbu loyiha uchun detallar

Simulyator uchun shuning oʻzi yetarli. Simulyator stolida Uno quvvatni noutbukning USB portidan oladi, xuddi kompyuterga ulangan haqiqiy Uno kabi. Haqiqiy yigʻish uchun sizga Arduino IDE oʻrnatilgan kompyuter ham kerak boʻladi, bu dasturni arduino.cc saytidan bepul olish mumkin. Marketdagi boshlangʻich toʻplamni ham koʻring.

Qanday ishlaydi

Uno pinlari: yuqorida D0–D13 raqamli pinlar, pastda quvvat (5V, GND) va A0–A5 analog pinlar, USB uyasi va D13 dagi L svetodiodi.

Unoning har bir raqamli pini sketchingiz boshqaradigan kalit kabi ishlaydi. Sketch pinni HIGH holatiga qoʻysa, pin 5 V beradi. Pinni LOW holatiga qoʻysa, pin 0 V beradi, xuddi GND kabi.

Svetodiod moduli qizil svetodiod va 220 Om li rezistor oʻrnatilgan kichik plata. D2 HIGH boʻlganda tok D2 dan rezistor va svetodiod orqali oʻtadi, modulning - pinidan chiqadi va Unoning GND piniga qaytadi. Mana shu yopiq yoʻl elektr zanjiri deyiladi. GND simi boʻlmasa, tok uchun yoʻl ham boʻlmaydi va svetodiod yonmaydi.

Rezistor tokni cheklaydi. Qizil svetodiodda taxminan 2 V tushadi, shuning uchun rezistorga taxminan 3 V qoladi. 3 V ni 220 Om ga boʻlsak, taxminan 14 mA chiqadi. Bu Uno pini xavfsiz bera oladigan 20 mA dan ancha kam.

L svetodiodi Uno platasida allaqachon bor va D13 ga ulangan, shuning uchun unga hech qanday sim kerak emas.

Bir soniya ichida ikki pin nima qilishini koʻring:

Vaqt D2: svetodiod moduli D13: L svetodiodi
0 dan 500 ms gacha HIGH: yonadi LOW: oʻchiq
500 dan 1000 ms gacha LOW: oʻchiq HIGH: yonadi
1000 ms dan keyin yana xuddi shunday yana xuddi shunday

Unoga quvvat berilib turgan ekan, bu tartib takrorlanaveradi.

Yigʻish

1. Loyihani simulyatorda yigʻing

Bu loyihaga korpus kerak emas: Uno va svetodiod moduli stol ustida yonma-yon turadi, Uno esa noutbukning USB portidan quvvat oladi.

Haqiqiy yigʻishda: Unoni ostida hech qanday metall boʻlmagan stolga qoʻying. Metall plataning pastki tomonidagi pinlarni bir-biriga ulab qoʻyishi mumkin.

2. Svetodiod modulini ulang

QayerdanQayergaNima uchun
Uno GNDSvetodiod moduli GNDYer (GND)
Uno D2Svetodiod moduli SHIGH svetodiodni yoqadi

Ikkita sim yetarli: S pini D2 ga, - pini esa GND ga ulanadi. Unoda bir nechta GND pini bor. Ularning hammasi plata ichida oʻzaro ulangan, shuning uchun istalgan biridan foydalanish mumkin.

Haqiqiy yigʻishda: koʻpchilik svetodiod modullarida pinlar, Unoda esa uyalar boʻladi. Shuning uchun bir uchida pin, ikkinchi uchida uya boʻlgan ulash simlaridan (jumper sim, male-to-female) foydalaning. Simlarni USB kabelni ulashdan oldin ulang. Quvvat berilgan platada simlarni almashtirish qisqa tutashuvga olib kelishi mumkin.

3. Sketchni tekshiring

«Kod» boʻlimini oching. U Arduino IDE kabi ishlaydi. Shu sahifadagi Blink sketchini unga qoʻying (kod ustidagi «Nusxalash» tugmasi uni nusxalab beradi) va «Tekshirish» tugmasini bosing. Sketch kompilyatsiya qilinadi, yaʼni C++ matni Unodagi ATmega328P chipi uchun mashina kodiga aylantiriladi. Simulyator haqiqiy Arduino IDE bilan bir xil kompilyatsiya vositalaridan foydalanadi. Agar xato boʻlsa, xato xabari u qaysi qatorda ekanini koʻrsatadi.

Haqiqiy yigʻishda: Arduino IDE dasturini ishga tushiring, yangi sketch yarating va unga shu sahifadagi kodni qoʻying. Kod ustidagi «Nusxalash» tugmasi uni siz uchun nusxalab beradi. «Arduino Uno» platasini tanlang va «Tekshirish» (Verify) tugmasini bosing.

4. Yuklang va kuzating

«Yuklash» tugmasini bosing. Sketch Unoga yoziladi va darhol ishga tushadi. Endi svetodiod moduli va L svetodiodi har yarim soniyada navbatma-navbat yonadi.

Haqiqiy yigʻishda: Unoni kompyuterga USB kabel bilan ulang. Uno R3 da kvadrat shaklidagi USB-B uyasi bor, printerlarda ham xuddi shunday uya boʻladi. Arduino IDE oynasida Uno paydo boʻlgan portni tanlang va «Yuklash» (Upload) tugmasini bosing. Sketch yuborilayotganda platadagi kichik TX va RX svetodiodlari lipillaydi, keyin miltillash boshlanadi. Sketch quvvat boʻlmasa ham Unoning xotirasida saqlanib qoladi. Unoga keyingi safar quvvat berilganda sketch oʻz-oʻzidan yana ishga tushadi.

5. Oʻzgartirib koʻring

Ikkala delay(500) qatorini delay(100) qilib oʻzgartiring va sketchni qayta yuklang. Endi svetodiodlar besh marta tezroq oʻrin almashadi. Soʻng S simini D2 dan D3 ga oʻtkazing va LED_MODULE qiymatini 2 dan 3 ga oʻzgartiring. Sim va sketchdagi raqam doim bir-biriga mos boʻlishi kerak. Mos kelmasa, svetodiod yonmaydi.

Kod

Blink.ino
// Blink: the LED module on D2 and the Uno's own "L" LED on D13 take turns.
// Wiring: LED module S -> D2, LED module - (GND) -> GND.

const byte LED_MODULE = 2;   // the module's S pin
const byte LED_BOARD = 13;   // the L LED soldered on the Uno

void setup() {
  pinMode(LED_MODULE, OUTPUT);  // pins start as inputs: make these two outputs
  pinMode(LED_BOARD, OUTPUT);
}

void loop() {
  digitalWrite(LED_MODULE, HIGH);  // 5 V on D2: the module's LED lights
  digitalWrite(LED_BOARD, LOW);    // 0 V on D13: the L LED goes dark
  delay(500);                      // wait half a second
  digitalWrite(LED_MODULE, LOW);
  digitalWrite(LED_BOARD, HIGH);
  delay(500);
}

Pinlar uchun nomlar

const byte LED_MODULE = 2;   // the module's S pin
const byte LED_BOARD = 13;   // the L LED soldered on the Uno

Bu ikki qator pin raqamlariga nom beradi. const sketch ishlayotganda qiymat hech qachon oʻzgarmasligini bildiradi. byte 0 dan 255 gacha boʻlgan butun son, pin raqami uchun bu yetarli. Sketchning qolgan qismi shu nomlardan foydalanadi. Shuning uchun simni boshqa pinga oʻtkazsangiz, faqat shu yerdagi bitta raqamni oʻzgartirasiz, boshqa hech narsani emas.

setup(): bir marta ishlaydi

setup() funksiyasi Uno ishga tushganda bir marta bajariladi. Boshida barcha pinlar kirish boʻladi, ular faqat «tinglay» oladi. pinMode(LED_MODULE, OUTPUT) D2 ni 5 V yoki 0 V bera oladigan chiqishga aylantiradi. Keyingi qator D13 uchun ham xuddi shuni qiladi.

loop(): toʻxtovsiz ishlaydi

setup() tugagach, Uno quvvat bor ekan, loop() funksiyasini qayta-qayta bajaradi. Mana uning birinchi yarmi:

  digitalWrite(LED_MODULE, HIGH);  // 5 V on D2: the module's LED lights
  digitalWrite(LED_BOARD, LOW);    // 0 V on D13: the L LED goes dark
  delay(500);                      // wait half a second

digitalWrite() pinni HIGH (5 V) yoki LOW (0 V) holatiga qoʻyadi. delay(500) Unoni 500 millisekund kutishga majbur qiladi. Millisekund soniyaning mingdan bir qismi. loop() funksiyasining ikkinchi yarmi buning teskarisini qiladi: D2 LOW, D13 HIGH va yana 500 ms. Keyin loop() yana boshidan boshlanadi.

delay() ning kamchiligi

delay() kutayotganda Uno boshqa hech narsa qilmaydi. Blink uchun bu muammo emas. Robot esa bir vaqtning oʻzida harakatlanishi, oʻlchashi va qaror qabul qilishi kerak, u kutib turish uchun toʻxtay olmaydi. delay() ishlatmasdan qanday miltillatish mumkinligini millis() va holatlar haqidagi dars koʻrsatadi.

Agar ishlamasa

  • Simulyatorda hech narsa miltillamayapti. Faqat «Tekshirish» emas, «Yuklash» tugmasini ham bosing. «Tekshirish» sketchni faqat kompilyatsiya qiladi. «Yuklash» esa uni plataga yuboradi.
  • Tekshirishda xato chiqyapti. Xabardagi qator raqamiga qarang. Koʻpincha sabab tushib qolgan ; yoki notoʻgʻri bosh harf boʻladi: digitalwrite bilan digitalWrite bir xil emas. Qaytadan boshlash uchun asl sketchni «Nusxalash» tugmasi bilan nusxalab oling.
  • L svetodiodi miltillayapti, lekin modul yonmayapti. S pini D2 ga, - pini GND ga ulanganini tekshiring. Ikki sim almashib qolgan boʻlsa, tok svetodiod orqali bu yoʻnalishda oqa olmaydi, shuning uchun u yonmaydi. LED_MODULE qiymati siz ishlatgan pinga mos kelishini ham tekshiring.
  • Moduldagi svetodiod juda xira yonyapti. Pin hali ham kirish boʻlib qolgan. setup() ichida pinMode(LED_MODULE, OUTPUT) borligini tekshiring.
  • Arduino IDE Unoning portini koʻrsatmayapti (haqiqiy yigʻish). Kabelni uzib, qayta ulang va qaysi port paydo boʻlishiga qarang. Boshqa USB kabelni sinab koʻring, chunki baʼzi kabellar faqat quvvat oʻtkazadi. Baʼzi Uno nusxalarida CH340 USB chipi boʻladi, baʼzi kompyuterlarda u uchun drayver oʻrnatish kerak.
  • Yuklashda dasturlovchi javob bermayotgani (programmer is not responding) haqida xabar chiqyapti (haqiqiy yigʻish). Plata sifatida Arduino Uno tanlanganini va toʻgʻri port tanlanganini tekshiring. D0 va D1 dagi barcha simlarni olib tashlang: bu pinlar orqali USB maʼlumotlari uzatiladi.

Keyingi qadamlar

Endi siz sketch orqali pinni yoqib-oʻchira olasiz. Robot ham chiroqlari va motor drayverini xuddi shunday boshqaradi.

Yanada yaxshilang

  1. Qisqa chaqnash qiling: svetodiod moduli 100 ms yonsin, keyin 900 ms oʻchiq tursin.
  2. Ikkala svetodiod navbatma-navbat emas, birga miltillasin.
  3. Morze alifbosida SOS signalini bering: uchta qisqa chaqnash, uchta uzun chaqnash, yana uchta qisqa chaqnash.