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-ს პინები:
- USB — პროგრამას ტვირთავს, 5 V-ს იძლევა და სერიულ მონიტორს ატარებს;
- კვების ბუდე — 7–12 V ბატარეიდან;
- ციფრული პინები 0–13;
- PWM პინები, ~ ნიშნით (3, 5, 6, 9, 10, 11);
- პინები 0 და 1 (RX/TX) — USB-სთან საერთოა: ატვირთვისას თავისუფალი დატოვეთ;
- კვების პინები — 5V, 3.3V, GND და VIN (ბატარეის ძაბვა);
- ანალოგური შესასვლელები A0–A5;
- მიკროკონტროლერი ATmega328P;
- ჩაშენებული შუქდიოდი „L“ მე-13 პინზე;
- გადატვირთვის ღილაკი — პროგრამას თავიდან უშვებს.
პინი უსაფრთხოდ დაახლოებით 20 mA-ს იძლევა: შუქდიოდისთვის საკმარისია, მოტორისთვის — არასოდეს.
Arduino IDE და პირველი სკეჩი: setup() და loop()
- დააინსტალირეთ უფასო Arduino IDE და დაფა მონაცემების გადამცემი USB კაბელით შეაერთეთ — ზოგი კაბელი მხოლოდ ტენის.
- IDE-ში აირჩიეთ დაფა და პორტი. CH340 USB მიკროსქემიან ასლ-დაფას (clone) შეიძლება ჯერ დრაივერი დასჭირდეს.
- გახსენით 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 პინებზე მუშაობს. მეორე დიაგრამაზე:
- 64 — დროის 25 % ჩართულია, საშუალოდ დაახლოებით 1,25 V;
- 128 — 50 %, დაახლოებით 2,5 V;
- 191 — 75 %, დაახლოებით 3,75 V;
- ერთი პერიოდი — დაახლოებით 2 ms, Uno-ს ჩვეულებრივ 490 Hz-ზე (მე-5 და მე-6 პინებზე — 980 Hz).
წითელი წყვეტილი ხაზები საშუალო ძაბვაა: შუქდიოდი უფრო მკრთალად ანათებს, მოტორი კი — დრაივერის გავლით — ნელა ბრუნავს.
სენსორის წაკითხვა და სერიული მონიტორი
სენსორები „უხილავია“, სანამ მათ ჩვენებებს ეკრანზე არ გამოიტანთ. სერიული მონიტორი (serial monitor) აჩვენებს ტექსტს, რომელსაც დაფა USB-ით აგზავნის:
- setup()-ში: Serial.begin(115200);
- loop()-ში: Serial.println(analogRead(A0));
- გახსენით Tools → Serial Monitor იმავე სიჩქარით, 115200 baud — არასწორი სიჩქარე „ნაგავს“ აჩვენებს.
რობოტის ორი ტიპური სენსორი:
- ხაზის ინფრაწითელი სენსორი ანალოგურ პინზე: ჯერ თეთრზე დაიჭირეთ, მერე შავზე და ორივე რიცხვი ჩაიწერეთ — ზღვარი მათ შორისაა. შეჯიბრის დარბაზში გაიმეორეთ: განათება რიცხვებს ცვლის.
- ულტრაბგერითი სენსორი (HC-SR04-ის ტიპის): TRIG პინზე 10 µs-იანი იმპულსი, შემდეგ pulseIn(echoPin, HIGH, 30000) ექოს მიკროწამებში ზომავს; მანძილი სანტიმეტრებში ≈ დრო ÷ 58. ეს ვადა (timeout) ყოველთვის მიუთითეთ — მის გარეშე დაკარგული ექო რობოტს მთელი წამით „აყინავს“.
ჯერ ჩვენებები გამოიტანეთ, მერე გადაწყვიტეთ: „კოდი არ მუშაობს“ ხშირად ნიშნავს, რომ სენსორი სხვა რამეს კითხულობს, ვიდრე ფიქრობდით.
მოტორის მართვა დრაივერით
პინი 20 mA-ს იძლევა; რედუქტორიან მოტორს ასობით მილიამპერი სჭირდება, მისმა ელექტრულმა ხმაურმა კი დაფა შეიძლება გადატვირთოს. ამიტომ Arduino მხოლოდ ბრძანებებს აგზავნის, ბატარეის დენს კი მოტორის დრაივერი (TB6612FNG-ის, DRV8833-ის ან L298N-ის ტიპის H-ხიდი) რთავს. მესამე დიაგრამაზე:
- სენსორები → Arduino-ს შესასვლელები;
- Arduino — კითხულობს, წყვეტს, ბრძანებს;
- მოტორის დრაივერი;
- მარცხენა და მარჯვენა მოტორი;
- სტარტის ღილაკი და სტატუსის შუქდიოდი;
- ბატარეა;
- კვების ჩამრთველი;
- სტაბილიზატორი (ან დაფის VIN), რომელიც ლოგიკისთვის 5 V-ს აკეთებს;
- ერთი საერთო მიწა (GND) — მის გარეშე არაფერი მუშაობს.
შავი ისრები სიგნალებია, წითელი — კვება. TB6612FNG-ისა და L298N-ის ტიპის დრაივერს თითო მოტორზე ორი მიმართულების პინი და ერთი PWM პინი აქვს: IN1 HIGH + IN2 LOW — წინ, პირიქით — უკან, ორივე LOW — გაჩერება; PWM სიჩქარეს ადგენს. დაწერეთ ერთი ფუნქცია — მაგალითად, drive(left, right), თითო მხარეს −255…255 — და პროგრამის დანარჩენი ნაწილი პინებს აღარ შეეხება.
პირველი ცდა ბორბლებით ჰაერში ჩაატარეთ. ბორბალი უკუღმა ბრუნავს? მოტორის ორ სადენს ადგილი შეუცვალეთ ან drive()-ში ნიშანი შეცვალეთ.
millis() delay()-ის ნაცვლად და პატარა მდგომარეობების მანქანა
delay(1000) მთელ დაფას ერთი წამით „ყინავს“: არც სენსორი იკითხება, არც ღილაკი. გამოიყენეთ millis() — ჩართვიდან გასული მილიწამები — და ლოდინის ნაცვლად დრო შეამოწმეთ:
- ბოლო მოქმედების დრო unsigned long ტიპის ცვლადში, last-ში შეინახეთ;
- loop()-ში: თუ millis() − last >= 500, შეასრულეთ მოქმედება და last = millis();
- loop()-ის დანარჩენი ნაწილი შუალედშიც მუშაობს.
შემდეგ რობოტის ქცევა მდგომარეობებად (states) დაყავით: ერთი ცვლადი, state, და loop()-ში — switch (state). პატარა რობოტისთვის სტარტის ღილაკით:
- WAIT (ლოდინი) — მოტორები გამორთულია, შუქდიოდი ციმციმებს; ღილაკი → GO.
- GO (სვლა) — მოძრაობს ან ხაზს მიჰყვება; დაბრკოლება 15 სმ-ზე ახლოს → AVOID.
- AVOID (არიდება) — 300 ms უკუსვლა, 400 ms მოხვევა (millis()-ით), მერე ისევ GO.
- STOP (გაჩერება) — ღილაკზე ხელახლა დაჭერა ან ფინიში: მოტორები გამორთულია.
თითო მდგომარეობა ერთ საქმეს აკეთებს და იცის, როდის უნდა გავიდეს. იგივე სტრუქტურას GRA-ს 2026 წლის SUMO-ს წესები თვითნაკეთი სტარტ-მოდულისთვის ითხოვს. ბრძოლა მდგომარეობებად აღწერილია გზამკვლევში როგორ ავაწყოთ სუმო რობოტი, მდორე მართვა (PID) კი — ხაზის მიმდევარი რობოტის აწყობაში.
ხშირი შეცდომები და რა შემდეგ
შეცდომები, რომლებსაც თითქმის ყველა დამწყები ერთხელ მაინც უშვებს:
- არასწორი დაფა ან პორტი, ან მხოლოდ დასატენი კაბელი;
- დაფებს საერთო GND არ აქვს;
- მოტორი ან სერვო 5V პინიდან იკვებება — დაფა გადაიტვირთება;
- ატვირთვისას 0 და 1 პინებზე რაღაც არის მიერთებული;
- if-ში ==-ის ნაცვლად =;
- int-ის გადავსება 32 767-ზე — დრო unsigned long-ში შეინახეთ;
- 5 V ESP32-ის 3,3 V-იან პინზე.
რა შემდეგ:
- ააწყვეთ ორბორბლიანი რობოტი „ჩემი პირველი რობოტიდან“ და ზემოთ აღწერილი მდგომარეობები მიეცით.
- აირჩიეთ მიზანი — ხაზის მიმდევარი, ლაბირინთის რობოტი ან სუმო რობოტი — და წაიკითხეთ ხაზის მიმდევარი რობოტის წესები.
- შეუერთდით გუნდს ან შექმენით ახალი: რობოტიკის წრე სკოლაში და GRA-ს სასკოლო შეჯიბრება 2026.
- შემდეგი ღონისძიება შეჯიბრების გვერდზე იპოვეთ — ყოველი ჩემპიონატი მიმდინარე წესებს საკუთარ გვერდზე აქვეყნებს — სხვა გზამკვლევები კი „გზამკვლევების“ თეგით.




