Asosiy mazmunga o‘tish
Constell Shop
To‘siqdan qochuvchi robot 3D

Loyiha 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

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

  1. 01

    Mashinani yig‘ing

    Shassi, motorlar, L298N va quvvatni «Robot-mashina» qo‘llanmasidagi kabi yig‘ing va ulang — pinlar bir xil.

  2. 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.

  3. 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.

  4. 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
L298N ⟷ UNO8 ta sim
  1. L298NENA→UNOD5 ENA ustidagi jumperni olib tashlang
  2. L298NIN1→UNOD7
  3. L298NIN2→UNOD8
  4. L298NIN3→UNOD2
  5. L298NIN4→UNOD4
  6. L298NENB→UNOD6 ENB jumperini ham olib tashlang
  7. L298NGND→UNOGND umumiy yer — majburiy
  8. L298N5V→UNO5V UNO ni drayver orqali quvvatlaydi
L298N ⟷ Chap motor1 ta sim
  1. L298NOUT1OUT2→Chap motor
L298N ⟷ O‘ng motor1 ta sim
  1. L298NOUT3OUT4→O‘ng motor
Batareya ⟷ L298N2 ta sim
  1. Batareya+(2×18650)→L298N12V
  2. Batareya−→L298NGND
HC-SR04 ⟷ UNO4 ta sim
  1. HC-SR04VCC→UNO5V
  2. HC-SR04GND→UNOGND
  3. HC-SR04TRIG→UNOD12
  4. HC-SR04ECHO→UNOD11
SG90 ⟷ UNO3 ta sim
  1. SG90signal(to‘q sariq)→UNOD3
  2. SG90qizil→UNO5V
  3. SG90jigarrang→UNOGND

Kod

sketch.ino
#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