A
ARDUINO LABGUIDE

Выставка · проект 1

Ультразвуковой радар

Сервопривод SG90 медленно качает «голову» с датчиком HC-SR04. На Serial и (по желанию) на LCD видно расстояние; при близкой руке пищит зуммер — как радар с тревогой.

старт серво ультразвук ~2–3 часа + печать

Оглавление

1. Цель

На столе крутится «голова» радара. Поднесли ладонь — расстояние падает, зуммер пищит. На Serial Monitor (и на LCD, если подключите) видно сантиметры.

Критерий готовности: серво ходит в секторе ~15°…165° без рывков; при руке ближе ~20 см стабильно пищит зуммер; в Serial каждые ~0,2 с печатается угол и расстояние.

2. Подготовка

Программы на ноутбуке

Инструменты

Компоненты из каталога

ЧтоКаталогСколько
Arduino Uno R3 (или клон)arduino-uno-r31
HC-SR04 ультразвукhc-sr041
Серво SG90servo-sg901
Зуммер (активный или пассивный TMB)buzzer-tmb12a051
LCD 1602 + I2C-адаптер (опционально)lcd-1602, i2c-lcd-adapter1
Светодиод 5 мм (опционально)leds-5mm1
Макетная плата, провода, USBbreadboard-mb102, jumper-mm, jumper-mf, usb-ab-cable—
Модуль HC-SR04 Сервопривод SG90

3. Распиновка (Uno → модуль)

Все модули и Uno должны иметь общий минус (GND). Питание логики — 5 V с Uno (для первой проверки с USB).

Пин UnoКудаПояснение
5 VVCC серво, VCC HC-SR04, «+» зуммера*Общая линия +5 V на макетке
GNDGND серво, GND HC-SR04, «−» зуммераОбщий минус обязателен
D9оранжевый/жёлтый сигнал серво (SIG)Управление углом
D7Trig HC-SR04Импульс «измерь»
D6Echo HC-SR04Ответ датчика (pulseIn)
D8сигнал зуммераtone() в скетче
D13анод светодиода (+ резистор ~220 Ω к земле)Опционально: мигает при тревоге
A4 (SDA), A5 (SCL)SDA / SCL адаптера LCD I2CТолько если ставите экран
5 V / GNDVCC / GND LCD I2CТолько если ставите экран

* У активного зуммера часто два вывода: один на сигнал (D8), другой на GND; у пассивного — то же + tone. Смотрите маркировку модуля.

Не крутите серво «в упор» руками при включённом питании. Долгое питание мощного LCD + серво только с USB может «проседать» — если Uno перезагружается, спросите про отдельный 5 V и общий GND.

4. Сборка по шагам

Шаг 4.1

Макетка и питание

Вставьте Uno рядом с макеткой. Протяните с Uno 5 V и GND на силовые линии макетки. Проверьте глазами: плюс и минус не перепутаны.

✓ На макетке есть две шины: +5 V и GND
Шаг 4.2

Подключите HC-SR04

VCC→5 V, GND→GND, Trig→D7, Echo→D6. Датчик «смотрит» вперёд, не в стол.

✓ Четыре провода сидят плотно, цвета подписаны стикером или на бумажке
Шаг 4.3

Подключите серво SG90

Коричневый/чёрный → GND, красный → 5 V, оранжевый/жёлтый → D9. Рожок серво пока без тяжёлой «головы» — сначала лёгкий держатель или просто рожок.

✓ Три провода серво на своих местах
Шаг 4.4

Зуммер

Сигнал → D8, минус → GND (как в таблице). Пока без корпуса — слышно со стола.

✓ Зуммер не болтается на одном проводе
Шаг 4.5

Скомпилируйте скетч (без заливки)

Скопируйте код из раздела 5 в IDE. Board: Arduino Uno. Нажмите Verify (галочка). Ошибок быть не должно.

✓ «Done compiling» без красных ошибок
Шаг 4.6

Заливка — только после согласия

Подключите USB. Port → ваш COMx. Upload — только если вы явно согласны залить прошивку на эту плату (правило лаборатории).

✓ После заливки серво качается, в Serial Monitor (115200) идут числа; рука близко — писк
Шаг 4.7

LCD I2C (по желанию)

Подключите SDA/SCL и питание. В скетче раскомментируйте блок USE_LCD и адрес (часто 0x27 или 0x3F). Если экран пустой — сначала оставьте Serial.

✓ Либо LCD показывает см, либо вы сознательно работаете только с Serial

5. Скетч (полный рабочий)

Библиотека Servo + измерение через pulseIn. Порог тревоги — 20 см (меняйте константу).

#include <Servo.h>
// #define USE_LCD   // раскомментируйте, если подключили LCD I2C
#ifdef USE_LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#endif

const int PIN_SERVO = 9;
const int PIN_TRIG  = 7;
const int PIN_ECHO  = 6;
const int PIN_BUZZ  = 8;
const int PIN_LED   = 13;

const int ANGLE_MIN = 15;
const int ANGLE_MAX = 165;
const int STEP_DEG  = 2;
const int ALARM_CM  = 20;

Servo radar;
int angle = ANGLE_MIN;
int dir = 1;

long readDistanceCm() {
  digitalWrite(PIN_TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);
  unsigned long us = pulseIn(PIN_ECHO, HIGH, 30000UL);
  if (us == 0) return -1;
  return (long)(us * 0.0343 / 2.0);
}

void setup() {
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
  pinMode(PIN_BUZZ, OUTPUT);
  pinMode(PIN_LED, OUTPUT);
  radar.attach(PIN_SERVO);
  radar.write(angle);
  Serial.begin(115200);
#ifdef USE_LCD
  lcd.init();
  lcd.backlight();
  lcd.print("Radar ready");
#endif
}

void loop() {
  radar.write(angle);
  delay(20);
  long cm = readDistanceCm();

  Serial.print("angle=");
  Serial.print(angle);
  Serial.print(" cm=");
  Serial.println(cm);

#ifdef USE_LCD
  lcd.setCursor(0, 0);
  lcd.print("A:");
  lcd.print(angle);
  lcd.print("   ");
  lcd.setCursor(0, 1);
  if (cm < 0) lcd.print("out of range ");
  else {
    lcd.print("D:");
    lcd.print(cm);
    lcd.print(" cm   ");
  }
#endif

  if (cm > 0 && cm < ALARM_CM) {
    tone(PIN_BUZZ, 1200, 40);
    digitalWrite(PIN_LED, HIGH);
  } else {
    noTone(PIN_BUZZ);
    digitalWrite(PIN_LED, LOW);
  }

  angle += dir * STEP_DEG;
  if (angle >= ANGLE_MAX) { angle = ANGLE_MAX; dir = -1; }
  if (angle <= ANGLE_MIN) { angle = ANGLE_MIN; dir = 1; }
}

6. Печать на Bambu Lab P2S

Общий курс «с нуля» (Studio, отправка, качество): setup-bambu-p2s.html. Ниже — только детали ЭТОГО проекта.
Печатайте корпус после того, как схема на макетке уже работает.
Шаг 6.1

Какие детали печатаем

  • Основание / кронштейн под серво SG90 (отверстия под винты корпуса серво).
  • Лёгкий держатель HC-SR04 на рожок (два «глаза» датчика наружу).
  • По желанию: кожух «тарелка радара» и подставка под LCD.
Держатель на рожке делайте тонким — серво слабое, тяжёлая «голова» рывками сажает питание.
Шаг 6.2

Модель: скачать или нарисовать простое

Путь A. Ищите: HC-SR04 bracket, servo mount SG90, ultrasonic radar mount, SG90 horn adapter.

Путь C (Tinkercad). Плоская плита-основание с отверстиями под винты серво; отдельный «карман» под HC-SR04 (два цилиндра-глаза). Посадка на рожок — отверстие с зазором +0,3…0,5 mm к замеру рожка.

Шаг 6.3

Проект в Bambu Studio

Импорт STL → основание плашмя → PLA, 0.2 mm, заполнение 15–20%. Поддержки — только если есть нависания. Отправка — setup-bambu-p2s.html.

Шаг 6.4

Проверка качества

  • Рожок серво входит в держатель без молотка
  • HC-SR04 сидит в кармане, «глаза» не закрыты пластиком
  • Основание не качается на столе
Шаг 6.5

Примерка без клея

Поставьте серво в основание, наденьте держатель с датчиком на рожок. Прогоните сектор 15°…165° руками или со скетчем.

✓ Серво стоит ровно; датчик не задевает основание на 15° и 165°

7. Скрипт демо на выставке

  1. «Это ультразвуковой радар: серво качает датчик, как антенну.»
  2. «HC-SR04 шлёт звук выше нашего слуха и слушает эхо — по времени считает сантиметры.»
  3. «Поднесите ладонь — услышите тревогу. На экране/в мониторе видно угол и дистанцию.»
  4. «Дальше тот же датчик поставим на шлагбаум — зоны „далеко / близко / стоп“.»

8. Неисправности

СимптомЧто проверить
Серво дёргается / Uno перезагружаетсяТяжёлая голова; слабый USB; нужен отдельный 5 V и общий GND
cm всегда −1 / 0Trig/Echo перепутаны; GND не общий; слишком далеко (>~3 м)
Нет пискаПин D8, полярность зуммера, порог ALARM_CM
LCD пустойАдрес 0x27/0x3F; I2C A4/A5; контраст потенциометром на адаптере
Не заливаетсяCOM занят монитором; плата Uno; кабель data, не «только зарядка»

9. Безопасность питания

10. Что дальше

Следующий выставочный проект: Парковочный шлагбаум — те же сантиметры, но зоны и стрела на MG90S.

← К списку проектов