02-darsBoshlangʻich25 daqiqaOʻZ · РУ · ENSimulyatorda bor

Arduino Uno: pinlar va birinchi dasturingiz

Arduino Uno pinlari va quvvati, HIGH va LOW, svetodiodga nega rezistor kerakligi va birinchi sketchingiz: navbatma-navbat yonadigan ikki svetodiod, setup() va loop() dan «Yuklash»gacha.

VideoYouTubeʼda

Asosiysi

  • D0-D13 raqamli pinlari chiqish yoki kirish boʻlib ishlaydi; HIGH — taxminan 5 V, LOW — 0 V.
  • PWM pinlarida ~ belgisi bor (D3, D5, D6, D9, D10, D11); A0-A5 — analog kirishlar.
  • Pin xavfsiz holatda 20 mA, koʻpi bilan 40 mA beradi, shuning uchun svetodiodga doim rezistor kerak.
  • setup() bir marta ishlaydi, keyin loop() qayta-qayta ishlayveradi.
  • «Tekshirish» sketchni kompilyatsiya qilib tekshiradi; «Yuklash» esa uni plataga ham yozadi.

Arduino Uno — bitta chip, yaʼni ATmega328P mikrokontrolleri atrofida qurilgan kichik plata. Plataning qolgan qismi shu chipga xizmat qiladi. U chipga quvvat yetkazadi, chipni kompyuteringiz bilan bogʻlaydi va chip pinlarini plata chetlaridagi uyalar qatoriga olib chiqadi. Simlar aynan shu uyalarga ulanadi.

Plataga umumiy nazar

Uno pinlari: yuqorida D0–D13 raqamli pinlar, pastda quvvat (5V, GND) va A0–A5 analog pinlar, USB uyasi va D13 dagi L svetodiodi.
Plataning qismi Nima uchun kerak
USB uyasi Platani kompyuterga ulaydi. Plataga taxminan 5 V (500 mA gacha) beradi. Sketchlar shu orqali yuklanadi, Serial xabarlari ham shu orqali oʻtadi.
Dumaloq quvvat uyasi Batareya yoki adapterdan 7–12 V qabul qiladi. Plataning stabilizatori uni 5 V ga aylantiradi.
ATmega328P Mikrokontroller: 16 MHz, sketch uchun 32 KB flesh xotira, 2 KB RAM, 1 KB EEPROM.
D0-D13 raqamli pinlari Yoqish-oʻchirish signallari uchun chiqish yoki kirish boʻlib ishlaydi. D0 va D1 USB orqali ketma-ket aloqani ham taʼminlaydi.
~ belgili PWM (impuls kengligi modulyatsiyasi) pinlari D3, D5, D6, D9, D10 va D11 tezlik yoki yorqinlikni sozlash uchun juda tez yoqilib-oʻchib ham tura oladi.
A0-A5 analog kirishlari 0 dan 5 V gacha boʻlgan kuchlanishni oʻlchab, uni 0 dan 1023 gacha son sifatida beradi.
Quvvat pinlari 5V, 3.3V, GND va VIN (quyida qarang).
L svetodiodi D13 ga ulangan kichik svetodiod. Birinchi sketchingiz undan foydalanadi.
ON svetodiodi Plataga quvvat berilganda yonadi.
TX va RX svetodiodlari Kompyuterga maʼlumot ketayotganda yoki undan kelayotganda lipillaydi.
Reset (qayta ishga tushirish) tugmasi Sketchingizni yana boshidan ishga tushiradi.

Quvvat pinlari

  • 5V datchik va modullarga 5 V beradi. Robot-mashinada esa quvvat aksincha, shu pin orqali kiradi: L298N motor drayveri Unoni shu yerdan taʼminlaydi. 5V pinida himoya yoʻq, shuning uchun unga hech qachon 5 V dan yuqori kuchlanish bermang.
  • 3.3V shunday kuchlanish kerak boʻlgan kichik detallarga 3,3 V beradi, taxminan 50 mA gacha. Robot-mashinada u ishlatilmaydi.
  • GND — yer, yaʼni 0 V. Platadagi har qanday kuchlanish GND ga nisbatan oʻlchanadi. Unoda uchta GND pini bor, ular plataning oʻzida oʻzaro ulangan.
  • VIN dumaloq quvvat uyasi kabi 7–12 V qabul qiladi. Plataning oʻz stabilizatori undan 5 V hosil qiladi.

HIGH va LOW

Chiqish sifatida ishlatilayotgan raqamli pinning ikkita holati bor. HIGH pinni plata taʼminotiga ulaydi: Uno USB orqali ishlayotganda bu taxminan 5 V. LOW pinni GND ga ulaydi: 0 V. Oraliq holat yoʻq. digitalWrite(2, HIGH) D2 ga taxminan 5 V beradi, digitalWrite(2, LOW) esa 0 V beradi.

Kirish sifatida ishlatilayotgan pin teskari ishni bajaradi. digitalRead(pin) pindagi kuchlanish yuqori yoki past ekanini sketchingizga aytadi. Plata qayta ishga tushgandan (reset) keyin barcha pinlar kirish boʻladi. Pin biror narsani boshqara olishi uchun sketch avval uni pinMode(pin, OUTPUT) bilan chiqishga aylantirishi kerak.

PWM va analog pinlar haqida qisqacha

~ belgili pinlar HIGH va LOW orasida juda tez almashib tura oladi: D5 va D6 da soniyasiga taxminan 980 marta, qolganlarida esa soniyasiga taxminan 490 marta. analogWrite(pin, value) pin HIGH holatida turadigan vaqt ulushini belgilaydi. Qiymat 0 dan 255 gacha boʻladi: 0 — doim LOW, 255 — doim HIGH, 128 esa vaqtning taxminan yarmida HIGH degani. Motorlar va L298N drayveri darsida bu usul motor tezligini sozlash uchun ishlatiladi.

A0-A5 analog kirishlari kuchlanishni oʻlchaydi. analogRead(A0) 0 V da 0 ni, 5 V da 1023 ni, oraliqdagi kuchlanishlarda esa ular orasidagi qiymatlarni qaytaradi.

Pin qancha tok bera oladi

Pin xavfsiz holatda taxminan 20 mA tok beradi. Mutlaq chegara — 40 mA. Undan oshsa, pin butunlay ishdan chiqishi mumkin. 20 mA svetodiod uchun yetarli. Motor uchun esa bu juda kam, chunki motorga 1 A gacha tok kerak. Shuning uchun motorlarga drayver kerak.

Svetodiodga nega rezistor kerak

Svetodiod oʻzidan oʻtadigan tokni oʻzi cheklamaydi. Qizil svetodiod yonishi uchun taxminan 2 V kerak. Bundan yuqorida kuchlanish ozgina oshsa ham, tok juda keskin oshib ketadi va oxir-oqibat svetodiod yoki pin kuyadi. Svetodiodga ketma-ket ulangan rezistor bunga yoʻl qoʻymaydi.

Bu saytda ishlatiladigan svetodiod modulida oʻzining 220 Om (Ω) li rezistori bor. U oʻtkazadigan tok quyidagicha hisoblanadi:

  • Pin 5 V beradi, qizil svetodiodda esa taxminan 2 V tushadi.
  • Rezistorga taxminan 3 V qoladi.
  • Tok = 3 V / 220 Om ≈ 0,014 A = 14 mA.

14 mA da svetodiod yorqin yonadi, bu esa pin uchun belgilangan 20 mA dan xavfsiz darajada kam.

Svetodiod modulini ulash

Svetodiod modulining S i D2 ga, − i GND ga. Modul va D13 dagi L svetodiodi har 500 ms da navbatma-navbat yonadi.

Svetodiod modulining ikkita pini bor: S (signal) va - (minus, yer). S pinini D2 ga, - pinini esa Unoning GND pinlaridan biriga ulang. D13 dagi L svetodiodi plataning bir qismi, shuning uchun unga sim kerak emas.

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

Sketch

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; D2 piniga nom beradi. byte — 0 dan 255 gacha boʻlgan butun son, const esa qiymat hech qachon oʻzgarmasligini bildiradi. Nomlar sketchni oʻqishni osonlashtiradi. Simni boshqa pinga oʻtkazsangiz, sketch boshidagi bitta raqamni oʻzgartirasiz, sketchning qolgan qismi esa oʻzgarmay qoladi.

setup() bir marta ishlaydi

Plata ishga tushganda, yaʼni quvvat berilganda, qayta ishga tushirilganda (reset) yoki sketch yuklanganda, u setup() funksiyasini bir marta bajaradi. Bu sketchda setup() D2 va D13 ni chiqishga aylantiradi.

loop() toʻxtovsiz ishlaydi

setup() dan keyin plata loop() funksiyasini bajaradi. loop() oxiriga yetgach, yana boshidan boshlanadi va plataga quvvat berilib turgan ekan, shunday davom etaveradi. Bu loop() ning bir aylanishi ikki yarimdan iborat:

  1. D2 HIGH, D13 LOW: modulning svetodiodi yonadi, L svetodiodi esa oʻchadi. Keyin sketch 500 ms kutadi.
  2. D2 LOW, D13 HIGH: modul oʻchadi, L svetodiodi esa yonadi. Keyin sketch yana 500 ms kutadi.

Bir aylanish bir soniya davom etadi. Demak, har bir svetodiod soniyasiga bir marta yonadi va ikkalasi doim navbatma-navbat yonadi.

Uchta funksiya

Funksiya Nima qiladi Sketchdan misol
pinMode(pin, mode) Pinni chiqish (OUTPUT) yoki kirish (INPUT) qiladi pinMode(LED_MODULE, OUTPUT);
digitalWrite(pin, value) Chiqish piniga HIGH (taxminan 5 V) yoki LOW (0 V) beradi digitalWrite(LED_MODULE, HIGH);
delay(ms) Koʻrsatilgan millisekundlar davomida kutadi delay(500);

delay() davomida Uno sketchingizning boshqa hech bir qatorini bajarmaydi. Blink uchun bu muammo emas. Datchigini doim kuzatib turishi kerak boʻlgan robotga esa vaqtni hisoblashning boshqa usuli kerak: Hech qachon kutmaydigan dasturlar darsiga qarang.

«Tekshirish» va «Yuklash»

Arduino IDE da ikkita asosiy tugma bor:

  • «Tekshirish» (Verify, galochka belgisi, Ctrl+R) sketchni kompilyatsiya qiladi. U C++ kodingizni mashina kodiga aylantiradi va tekshiradi. Xato boʻlsa, masalan, nuqtali vergul tushib qolgan boʻlsa, qator raqami bilan birga xato xabarini koʻrsatadi.
  • «Yuklash» (Upload, oʻq belgisi, Ctrl+U) sketchni kompilyatsiya qiladi va plataning flesh xotirasiga yozadi. Shundan soʻng plata qayta ishga tushadi va yangi sketchni bajaradi.

Simulyatorning ichidagi Arduino IDE da ham tugmalar, ham tezkor tugmalar xuddi shunday.

Yangi Uno odatda ichida Blink sketchi bilan sotiladi, shuning uchun uni birinchi marta ulaganingizda L svetodiodi miltillaydi. Simulyatorda ham sketch yuklanmagan plata xuddi shu, zavodda yozilgan Blink sketchini bajaradi.

Simulyatorda sinab koʻring

Bu yerda butun robot Garajdagi stol ustida turgan Uno va svetodiod modulidan iborat. Uno noutbukning USB portidan quvvat oladi, shuning uchun unga batareya kerak emas. Sketchni yuklaganingizdan keyin qizil svetodiod moduli va L svetodiodi navbatma-navbat yonadi: biri yonib turganda ikkinchisi oʻchiq boʻladi, har yarim soniyada esa ular oʻrin almashadi. Endi ikkala delay(500) qatorini delay(100) ga oʻzgartiring va sketchni qayta yuklang. Svetodiodlar besh marta tezroq oʻrin almashadi.

Serial orqali xabarlar

Uno USB kabel orqali kompyuterga matn ham yubora oladi. Bu sketchingiz nima qilayotganini koʻrishning oddiy usuli. Mana Blink sketchining ikki qator qoʻshilgan setup() funksiyasi:

void setup() {
  pinMode(LED_MODULE, OUTPUT);
  pinMode(LED_BOARD, OUTPUT);
  Serial.begin(9600);              // open the link at 9600 baud
  Serial.println("Blink started"); // send one line of text
}

Serial.begin(9600) ketma-ket aloqani 9600 bod tezlikda ishga tushiradi (bod — soniyasiga uzatiladigan bitlar soni). Serial.println() matnni yuboradi va qatorni tugatadi. Serial.print() esa matnni qatorni tugatmasdan yuboradi. Haqiqiy platada xabarlarni oʻqish uchun Arduino IDE da Tools > Serial Monitor menyusini oching va 9600 bod tezlikni tanlang. Serial yoqilgan paytda xabarlar D0 va D1 orqali oʻtadi, shuning uchun bu ikki pinga boshqa simlarni ulamang.

Simulyatorda Serial Monitor (port monitori) arenaning bir qismi: u yerda robot oʻz batareyasidan ishlaydi. HC-SR04 bilan masofani oʻlchash darsida undan masofalarni chiqarish uchun foydalaniladi.

Keyingi qadamlar

Oʻzingizni tekshiring

1setup() bilan loop() ning farqi nimada?

setup() plata ishga tushganda bir marta ishlaydi. Keyin loop() plataga quvvat berilib turgan ekan, qayta-qayta ishlayveradi.

2Nega svetodiod modulida oʻzining 220 Om li rezistori bor?

Svetodiod oʻzidan oʻtadigan tokni oʻzi cheklamaydi. Rezistor tokni taxminan 14 mA da ushlab turadi: bu svetodiod uchun xavfsiz va pinning 20 mA lik chegarasidan past.

3Unoning qaysi pinlari analogWrite() yordamida PWM hosil qila oladi?

~ belgisi bor pinlar: D3, D5, D6, D9, D10 va D11.

Topshiriq

Simulyatorda svetodiod modulining S simini D2 dan D8 ga oʻtkazing. Keyin modul yana miltillaydigan qilib sketchni oʻzgartiring, uni yuklang va natijani stolda tekshiring.

Maslahat

Modulning pin raqami sketchda faqat bitta joyda yozilgan.