Arduino დამწყებთათვის: რობოტის დაპროგრამება პირველი ნაბიჯებიდან
ყველა სტატია

Arduino დამწყებთათვის: რობოტის დაპროგრამება პირველი ნაბიჯებიდან

Arduino დამწყებთათვის: როგორ ვისწავლოთ Arduino და დავაპროგრამოთ რობოტი — პინები და PWM, სენსორი, მოტორის დრაივერი, სერიული მონიტორი, millis() და მდგომარეობები.

Arduino დამწყებთათვის: რა არის მიკროკონტროლერი

მიკროკონტროლერი ერთ მიკროსქემაზე მოთავსებული მთელი პატარა კომპიუტერია: პროცესორი, ფლეშ-მეხსიერება პროგრამისთვის, ცოტა ოპერატიული მეხსიერება (RAM) და პინები, რომლებიც სენსორებს კითხულობს და მოწყობილობებს რთავს-თიშავს. არც ოპერაციული სისტემა აქვს, არც ეკრანი: ჩართვისთანავე ერთ პროგრამას ასრულებს — დაუსრულებლად. ესაა რობოტის ბუნებრივი „ტვინი“.

Arduino ასეთ მიკროსქემებზე აგებული ღია (open-source) პლატფორმაა: დაფები USB პორტით, უფასო რედაქტორი (Arduino IDE) და ათასობით მაგალითი და ბიბლიოთეკა. კოდს C++-ზე წერთ, მაგრამ Arduino რთულ დეტალებს მალავს.

თუ ფიქრობთ, როგორ ვისწავლოთ Arduino რობოტისთვის, რობოტის დაპროგრამებას სულ რამდენიმე იდეა სჭირდება — ყველა ქვემოთაა. ძაბვა და დენი თქვენთვის ახალია? ჯერ ელექტრონიკის საფუძვლები რობოტიკისთვის წაიკითხეთ. მიკროკონტროლერს GRA-ს შეჯიბრებებიც ითვალისწინებს: 2026 წლის SUMO-ს წესებში მსაჯის სტარტ-მოდულს Arduino-ზე ან სხვა მიკროკონტროლერზე მხოლოდ ერთი შემავალი პინი სჭირდება.

რომელი დაფა ავირჩიოთ: Uno, Nano, Mega და ESP32

  • Uno — კლასიკური პირველი დაფა, პირველ დიაგრამაზეც ისაა: 5 V-იანი ATmega328P, 16 MHz, 32 KB პროგრამისთვის, 14 ციფრული პინი და 6 ანალოგური შესასვლელი.
  • Nano — იგივე მიკროსქემა პატარა დაფაზე, რომელიც სამონტაჟო დაფაში ჯდება: პატარა რობოტის ჩვეულებრივი არჩევანი.
  • Mega 2560 — 54 ციფრული პინი და 16 ანალოგური შესასვლელი, ბევრსენსორიანი რობოტებისთვის.
  • ESP32 — ორი სიტყვით: გაცილებით სწრაფია, Wi-Fi და Bluetooth აქვს, მაგრამ 3,3 V-ზე მუშაობს — 5 V-იანმა სიგნალმა შეიძლება მისი პინები დააზიანოს. GRA-ს 2026 წლის SUMO-ს წესები მოედანზე რობოტის Bluetooth-ით ან სხვა უსადენო მართვას არ უშვებს.

Uno-ს პინები:

  1. USB — პროგრამას ტვირთავს, 5 V-ს იძლევა და სერიულ მონიტორს ატარებს;
  2. კვების ბუდე — 7–12 V ბატარეიდან;
  3. ციფრული პინები 0–13;
  4. PWM პინები, ~ ნიშნით (3, 5, 6, 9, 10, 11);
  5. პინები 0 და 1 (RX/TX) — USB-სთან საერთოა: ატვირთვისას თავისუფალი დატოვეთ;
  6. კვების პინები — 5V, 3.3V, GND და VIN (ბატარეის ძაბვა);
  7. ანალოგური შესასვლელები A0–A5;
  8. მიკროკონტროლერი ATmega328P;
  9. ჩაშენებული შუქდიოდი „L“ მე-13 პინზე;
  10. გადატვირთვის ღილაკი — პროგრამას თავიდან უშვებს.

პინი უსაფრთხოდ დაახლოებით 20 mA-ს იძლევა: შუქდიოდისთვის საკმარისია, მოტორისთვის — არასოდეს.

Arduino IDE და პირველი სკეჩი: setup() და loop()

  1. დააინსტალირეთ უფასო Arduino IDE და დაფა მონაცემების გადამცემი USB კაბელით შეაერთეთ — ზოგი კაბელი მხოლოდ ტენის.
  2. IDE-ში აირჩიეთ დაფა და პორტი. CH340 USB მიკროსქემიან ასლ-დაფას (clone) შეიძლება ჯერ დრაივერი დასჭირდეს.
  3. გახსენით File → Examples → 01.Basics → Blink, დააჭირეთ Verify-ს (✓), შემდეგ Upload-ს (→).

Arduino-ს პროგრამა სკეჩია (sketch) ორი ფუნქციით:

  • setup() ერთხელ სრულდება — ჩართვისას ან გადატვირთვისას; აქ პინებს აწყობთ: pinMode(13, OUTPUT);
  • loop() დაუსრულებლად მეორდება — ეს რობოტის ნამდვილი სამუშაოა: digitalWrite(13, HIGH) შუქდიოდს ანთებს, delay(500) ნახევარ წამს ელოდება, digitalWrite(13, LOW) კი აქრობს.

500 შეცვალეთ 100-ით და ხელახლა ატვირთეთ: ესაა პროგრამირება რობოტიკაში — შეცვალე, ატვირთე, დააკვირდი.

ბიბლიოთეკები (libraries) სენსორების, სერვოებისა და ეკრანებისთვის მზა კოდს ამატებს: მათ IDE-ის ბიბლიოთეკების მენეჯერიდან (Library Manager) აყენებთ და #include-ით რთავთ. რეალური მაგალითი: GRA-ს 2026 წლის SUMO-ს წესებში თვითნაკეთი სტარტ-მოდულის Arduino-ს კოდი სამ ბიბლიოთეკას იყენებს — IRLib-ს მსაჯის ინფრაწითელი პულტის სიგნალის გასაშიფრად, EEPROM-ს მდგომარეობის დასამახსოვრებლად გადატვირთვის შემდეგაც და FiniteStateMachine-ს.

ციფრული და ანალოგური პინები, PWM

ციფრულ სიგნალს ორი მდგომარეობა აქვს: HIGH (Uno-ზე 5 V) ან LOW (0 V). digitalRead(pin) ღილაკს კითხულობს. დააყენეთ pinMode(pin, INPUT_PULLUP) და ღილაკი პინსა და GND-ს შორის შეაერთეთ: პინი HIGH-ს აჩვენებს, დაჭერისას კი — LOW-ს. მიუერთებელი პინი „ტივტივებს“ (floating) და შემთხვევით მნიშვნელობებს კითხულობს.

სწორედ ამას ითხოვს GRA-ს 2026 წლის სასკოლო შეჯიბრება: რობოტს „start“ ღილაკი უნდა ჰქონდეს და დაჭერიდან 5 წამში უნდა დაიძრას.

ანალოგური შესასვლელები ძაბვას ზომავს: analogRead(A0) 0–5 V-ისთვის 0–1023-ს აბრუნებს, ერთი ბიჯი დაახლოებით 4,9 mV-ია — ასე იკითხება ხაზის ინფრაწითელი სენსორები, პოტენციომეტრები, ბატარეის ძაბვის გამყოფი.

პინს „ნახევარი ძაბვის“ მიცემა არ შეუძლია; ის მას PWM-ით (pulse-width modulation, იმპულსის სიგანის მოდულაცია) ბაძავს — ძალიან სწრაფად ირთვება და ითიშება და ჩართულობის ხანგრძლივობას ცვლის. analogWrite(pin, 0–255) PWM პინებზე მუშაობს. მეორე დიაგრამაზე:

  1. 64 — დროის 25 % ჩართულია, საშუალოდ დაახლოებით 1,25 V;
  2. 128 — 50 %, დაახლოებით 2,5 V;
  3. 191 — 75 %, დაახლოებით 3,75 V;
  4. ერთი პერიოდი — დაახლოებით 2 ms, Uno-ს ჩვეულებრივ 490 Hz-ზე (მე-5 და მე-6 პინებზე — 980 Hz).

წითელი წყვეტილი ხაზები საშუალო ძაბვაა: შუქდიოდი უფრო მკრთალად ანათებს, მოტორი კი — დრაივერის გავლით — ნელა ბრუნავს.

სენსორის წაკითხვა და სერიული მონიტორი

სენსორები „უხილავია“, სანამ მათ ჩვენებებს ეკრანზე არ გამოიტანთ. სერიული მონიტორი (serial monitor) აჩვენებს ტექსტს, რომელსაც დაფა USB-ით აგზავნის:

  1. setup()-ში: Serial.begin(115200);
  2. loop()-ში: Serial.println(analogRead(A0));
  3. გახსენით Tools → Serial Monitor იმავე სიჩქარით, 115200 baud — არასწორი სიჩქარე „ნაგავს“ აჩვენებს.

რობოტის ორი ტიპური სენსორი:

  • ხაზის ინფრაწითელი სენსორი ანალოგურ პინზე: ჯერ თეთრზე დაიჭირეთ, მერე შავზე და ორივე რიცხვი ჩაიწერეთ — ზღვარი მათ შორისაა. შეჯიბრის დარბაზში გაიმეორეთ: განათება რიცხვებს ცვლის.
  • ულტრაბგერითი სენსორი (HC-SR04-ის ტიპის): TRIG პინზე 10 µs-იანი იმპულსი, შემდეგ pulseIn(echoPin, HIGH, 30000) ექოს მიკროწამებში ზომავს; მანძილი სანტიმეტრებში ≈ დრო ÷ 58. ეს ვადა (timeout) ყოველთვის მიუთითეთ — მის გარეშე დაკარგული ექო რობოტს მთელი წამით „აყინავს“.

ჯერ ჩვენებები გამოიტანეთ, მერე გადაწყვიტეთ: „კოდი არ მუშაობს“ ხშირად ნიშნავს, რომ სენსორი სხვა რამეს კითხულობს, ვიდრე ფიქრობდით.

მოტორის მართვა დრაივერით

პინი 20 mA-ს იძლევა; რედუქტორიან მოტორს ასობით მილიამპერი სჭირდება, მისმა ელექტრულმა ხმაურმა კი დაფა შეიძლება გადატვირთოს. ამიტომ Arduino მხოლოდ ბრძანებებს აგზავნის, ბატარეის დენს კი მოტორის დრაივერი (TB6612FNG-ის, DRV8833-ის ან L298N-ის ტიპის H-ხიდი) რთავს. მესამე დიაგრამაზე:

  1. სენსორები → Arduino-ს შესასვლელები;
  2. Arduino — კითხულობს, წყვეტს, ბრძანებს;
  3. მოტორის დრაივერი;
  4. მარცხენა და მარჯვენა მოტორი;
  5. სტარტის ღილაკი და სტატუსის შუქდიოდი;
  6. ბატარეა;
  7. კვების ჩამრთველი;
  8. სტაბილიზატორი (ან დაფის VIN), რომელიც ლოგიკისთვის 5 V-ს აკეთებს;
  9. ერთი საერთო მიწა (GND) — მის გარეშე არაფერი მუშაობს.

შავი ისრები სიგნალებია, წითელი — კვება. TB6612FNG-ისა და L298N-ის ტიპის დრაივერს თითო მოტორზე ორი მიმართულების პინი და ერთი PWM პინი აქვს: IN1 HIGH + IN2 LOW — წინ, პირიქით — უკან, ორივე LOW — გაჩერება; PWM სიჩქარეს ადგენს. დაწერეთ ერთი ფუნქცია — მაგალითად, drive(left, right), თითო მხარეს −255…255 — და პროგრამის დანარჩენი ნაწილი პინებს აღარ შეეხება.

პირველი ცდა ბორბლებით ჰაერში ჩაატარეთ. ბორბალი უკუღმა ბრუნავს? მოტორის ორ სადენს ადგილი შეუცვალეთ ან drive()-ში ნიშანი შეცვალეთ.

millis() delay()-ის ნაცვლად და პატარა მდგომარეობების მანქანა

delay(1000) მთელ დაფას ერთი წამით „ყინავს“: არც სენსორი იკითხება, არც ღილაკი. გამოიყენეთ millis() — ჩართვიდან გასული მილიწამები — და ლოდინის ნაცვლად დრო შეამოწმეთ:

  1. ბოლო მოქმედების დრო unsigned long ტიპის ცვლადში, last-ში შეინახეთ;
  2. loop()-ში: თუ millis() − last >= 500, შეასრულეთ მოქმედება და last = millis();
  3. loop()-ის დანარჩენი ნაწილი შუალედშიც მუშაობს.

შემდეგ რობოტის ქცევა მდგომარეობებად (states) დაყავით: ერთი ცვლადი, state, და loop()-ში — switch (state). პატარა რობოტისთვის სტარტის ღილაკით:

  1. WAIT (ლოდინი) — მოტორები გამორთულია, შუქდიოდი ციმციმებს; ღილაკი → GO.
  2. GO (სვლა) — მოძრაობს ან ხაზს მიჰყვება; დაბრკოლება 15 სმ-ზე ახლოს → AVOID.
  3. AVOID (არიდება) — 300 ms უკუსვლა, 400 ms მოხვევა (millis()-ით), მერე ისევ GO.
  4. STOP (გაჩერება) — ღილაკზე ხელახლა დაჭერა ან ფინიში: მოტორები გამორთულია.

თითო მდგომარეობა ერთ საქმეს აკეთებს და იცის, როდის უნდა გავიდეს. იგივე სტრუქტურას GRA-ს 2026 წლის SUMO-ს წესები თვითნაკეთი სტარტ-მოდულისთვის ითხოვს. ბრძოლა მდგომარეობებად აღწერილია გზამკვლევში როგორ ავაწყოთ სუმო რობოტი, მდორე მართვა (PID) კი — ხაზის მიმდევარი რობოტის აწყობაში.

ხშირი შეცდომები და რა შემდეგ

შეცდომები, რომლებსაც თითქმის ყველა დამწყები ერთხელ მაინც უშვებს:

  • არასწორი დაფა ან პორტი, ან მხოლოდ დასატენი კაბელი;
  • დაფებს საერთო GND არ აქვს;
  • მოტორი ან სერვო 5V პინიდან იკვებება — დაფა გადაიტვირთება;
  • ატვირთვისას 0 და 1 პინებზე რაღაც არის მიერთებული;
  • if-ში ==-ის ნაცვლად =;
  • int-ის გადავსება 32 767-ზე — დრო unsigned long-ში შეინახეთ;
  • 5 V ESP32-ის 3,3 V-იან პინზე.

რა შემდეგ:

  1. ააწყვეთ ორბორბლიანი რობოტი „ჩემი პირველი რობოტიდან“ და ზემოთ აღწერილი მდგომარეობები მიეცით.
  2. აირჩიეთ მიზანი — ხაზის მიმდევარი, ლაბირინთის რობოტი ან სუმო რობოტი — და წაიკითხეთ ხაზის მიმდევარი რობოტის წესები.
  3. შეუერთდით გუნდს ან შექმენით ახალი: რობოტიკის წრე სკოლაში და GRA-ს სასკოლო შეჯიბრება 2026.
  4. შემდეგი ღონისძიება შეჯიბრების გვერდზე იპოვეთ — ყოველი ჩემპიონატი მიმდინარე წესებს საკუთარ გვერდზე აქვეყნებს — სხვა გზამკვლევები კი „გზამკვლევების“ თეგით.
ბლოგი

სხვა სტატიები

ყველა სტატია