3DLoyiha qo‘llanmalari
To‘siqdan qochuvchi robot
Servoga o‘rnatilgan ultratovush «ko‘z» oldindagi masofani o‘lchaydi; to‘siq yaqinlashsa, robot to‘xtaydi, chap va o‘ngga qaraydi va bo‘sh tomonga buriladi.
- Murakkablik
- O‘rtacha
- Vaqt
- ~150 min
- Detallar
- 12 ta detal
- Qadamma-qadam
- 4 qadam
- HC-SR04 bilan masofani o‘lchash
- Servo bilan aylantirish
- Sensor ma’lumotiga qarab qaror qabul qilish
Detallar
- 1 × Arduino UNO R3 (ATmega328P, SMD)45 000 so‘m
- 1 × 2WD robot shassisi (plastik platforma)30 000 so‘m
- 1 × HC-SR04 ultratovush masofa sensori15 000 so‘m
- 1 × SG90 mikro servo (9 g)20 000 so‘m
- 1 × L298N ikki kanalli motor drayveri (H-ko‘prik)20 000 so‘m
- 2 × TT reduktorli motor va g‘ildirak (sariq, 3–6V)30 000 so‘m
- 1 × 360° g‘ildirak: sharli tayanch / Mecanum12 000 so‘m
- 2 × Litiy batareya (18650 / LiPo)30 000 so‘m
- 1 × 18650 batareyalari uchun ushlagich6 000 so‘m
- 1 × Jumper simlar 20 sm, Male-Female (40 dona)12 000 so‘m
Yana kerak bo‘ladi
- — Kompyuter va Arduino IDE (arduino.cc dan bepul)
- — UNO uchun USB kabel (UNO SMD ning «+ USB kabel» varianti)
- — Kichik krestli otvertka
Qadamma-qadam
- 01
Mashinani yig‘ing
Shassi, motorlar, L298N va quvvatni «Robot-mashina» qo‘llanmasidagi kabi yig‘ing va ulang — pinlar bir xil.
- 02
Servo va sensorni o‘rnating
SG90 ni old qismga mahkamlang. Kodni yuklashdan oldin servoni 90° ga qo‘ying (kod buni boshida qiladi), so‘ng HC-SR04 ni kronshteyn bilan to‘g‘ri oldinga qaratib o‘rnating.
- 03
Sensor va servoni ulang
Jadvaldagi qo‘shimcha qatorlar: TRIG → D12, ECHO → D11, servo signali (to‘q sariq) → D3, ikkalasining VCC si 5V ga, GND si GND ga.
- 04
Kodni yuklang va sinang
Kod «Servo» kutubxonasidan foydalanadi — u Arduino IDE bilan birga keladi. Yuklang, batareyalarni qo‘ying va robotni xonaga qo‘ying. Serial Monitor (9600) da masofani ko‘rishingiz mumkin.
Ulanish
- Quvvat (+)
- Yer (−)
- Signal pini
- I²C / SPI shinasi
- L298NENA→UNOD5 ENA ustidagi jumperni olib tashlang
- L298NIN1→UNOD7
- L298NIN2→UNOD8
- L298NIN3→UNOD2
- L298NIN4→UNOD4
- L298NENB→UNOD6 ENB jumperini ham olib tashlang
- L298NGND→UNOGND umumiy yer — majburiy
- L298N5V→UNO5V UNO ni drayver orqali quvvatlaydi
- L298NOUT1OUT2→Chap motor
- L298NOUT3OUT4→O‘ng motor
- Batareya+(2×18650)→L298N12V
- Batareya−→L298NGND
- HC-SR04VCC→UNO5V
- HC-SR04GND→UNOGND
- HC-SR04TRIG→UNOD12
- HC-SR04ECHO→UNOD11
- SG90signal(to‘q sariq)→UNOD3
- SG90qizil→UNO5V
- SG90jigarrang→UNOGND
Kod
#include <Servo.h>
// motorlar (L298N)
const int ENA = 5, IN1 = 7, IN2 = 8; // chap
const int ENB = 6, IN3 = 2, IN4 = 4; // o‘ng
void motors(int left, int right) { // -255 … 255
digitalWrite(IN1, left >= 0); digitalWrite(IN2, left < 0);
digitalWrite(IN3, right >= 0); digitalWrite(IN4, right < 0);
analogWrite(ENA, abs(left)); analogWrite(ENB, abs(right));
}
void setupMotors() {
int pins[] = {ENA, IN1, IN2, ENB, IN3, IN4};
for (int p : pins) pinMode(p, OUTPUT);
motors(0, 0);
}
const int TRIG = 12, ECHO = 11;
Servo neck;
long distanceCm() {
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long us = pulseIn(ECHO, HIGH, 25000); // eng ko‘pi ~4 m
return us ? us / 58 : 400; // aks-sado yo‘q = uzoqda
}
long look(int angle) {
neck.write(angle); delay(350);
return distanceCm();
}
void setup() {
Serial.begin(9600);
setupMotors();
pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT);
neck.attach(3);
neck.write(90);
delay(1500);
}
void loop() {
long ahead = distanceCm();
Serial.println(ahead);
if (ahead > 25) {
motors(170, 170);
delay(40);
return;
}
motors(0, 0);
motors(-150, -150); delay(250); // biroz orqaga
motors(0, 0);
long left = look(160), right = look(20);
neck.write(90); delay(200);
if (left > right) motors(-170, 170); else motors(170, -170);
delay(380); // taxminan chorak burilish
motors(0, 0);
}Agar biror narsa ishlamasa
- Masofa doim 0 yoki 400: TRIG va ECHO simlari almashgan bo‘lishi mumkin.
- Motorlar tezligi boshqarilmaydi: ENA/ENB D9 yoki D10 ga ulanmaganini tekshiring — Servo kutubxonasi ularni egallaydi.
- Servo titraydi va UNO o‘chadi: batareyalar zaif — yangi zaryadlangan 18650 qo‘ying.
- Robot devorni ko‘rmaydi: yumshoq yuzalar (parda, divan) ultratovushni yutadi — bu normal.
Keyingi qadamlar
- Ikkinchi sensor bilan yon tomonlarni ham kuzating
- Masofaga qarab tezlikni silliq o‘zgartiring

