Выставка · проект 1
Ультразвуковой радар
Сервопривод SG90 медленно качает «голову» с датчиком HC-SR04. На Serial и (по желанию) на LCD видно расстояние; при близкой руке пищит зуммер — как радар с тревогой.
Оглавление
1. Цель
На столе крутится «голова» радара. Поднесли ладонь — расстояние падает, зуммер пищит. На Serial Monitor (и на LCD, если подключите) видно сантиметры.
2. Подготовка
Программы на ноутбуке
- Сначала один раз пройдите Подготовка Arduino IDE (плата Uno, COM-порт, Blink).
- Встроенная библиотека Servo уже есть в IDE — отдельно ставить не нужно.
- LCD по I2C (по желанию): Library Manager → LiquidCrystal_I2C (автор Frank de Brabander или похожая).
- Bambu Studio + setup-bambu-p2s.html — корпус радара на P2S.
Инструменты
- Макетная плата MB-102 и провода «папа–папа» / «мама–папа»
- USB-кабель A↔B к Uno
- По желанию: мультиметр (общий GND и 5 V)
Компоненты из каталога
| Что | Каталог | Сколько |
|---|---|---|
| Arduino Uno R3 (или клон) | arduino-uno-r3 | 1 |
| HC-SR04 ультразвук | hc-sr04 | 1 |
| Серво SG90 | servo-sg90 | 1 |
| Зуммер (активный или пассивный TMB) | buzzer-tmb12a05 | 1 |
| LCD 1602 + I2C-адаптер (опционально) | lcd-1602, i2c-lcd-adapter | 1 |
| Светодиод 5 мм (опционально) | leds-5mm | 1 |
| Макетная плата, провода, USB | breadboard-mb102, jumper-mm, jumper-mf, usb-ab-cable | — |
3. Распиновка (Uno → модуль)
Все модули и Uno должны иметь общий минус (GND). Питание логики — 5 V с Uno (для первой проверки с USB).
| Пин Uno | Куда | Пояснение |
|---|---|---|
| 5 V | VCC серво, VCC HC-SR04, «+» зуммера* | Общая линия +5 V на макетке |
| GND | GND серво, GND HC-SR04, «−» зуммера | Общий минус обязателен |
| D9 | оранжевый/жёлтый сигнал серво (SIG) | Управление углом |
| D7 | Trig HC-SR04 | Импульс «измерь» |
| D6 | Echo HC-SR04 | Ответ датчика (pulseIn) |
| D8 | сигнал зуммера | tone() в скетче |
| D13 | анод светодиода (+ резистор ~220 Ω к земле) | Опционально: мигает при тревоге |
| A4 (SDA), A5 (SCL) | SDA / SCL адаптера LCD I2C | Только если ставите экран |
| 5 V / GND | VCC / GND LCD I2C | Только если ставите экран |
* У активного зуммера часто два вывода: один на сигнал (D8), другой на GND; у пассивного — то же + tone. Смотрите маркировку модуля.
4. Сборка по шагам
Макетка и питание
Вставьте Uno рядом с макеткой. Протяните с Uno 5 V и GND на силовые линии макетки. Проверьте глазами: плюс и минус не перепутаны.
Подключите HC-SR04
VCC→5 V, GND→GND, Trig→D7, Echo→D6. Датчик «смотрит» вперёд, не в стол.
Подключите серво SG90
Коричневый/чёрный → GND, красный → 5 V, оранжевый/жёлтый → D9. Рожок серво пока без тяжёлой «головы» — сначала лёгкий держатель или просто рожок.
Зуммер
Сигнал → D8, минус → GND (как в таблице). Пока без корпуса — слышно со стола.
Скомпилируйте скетч (без заливки)
Скопируйте код из раздела 5 в IDE. Board: Arduino Uno. Нажмите Verify (галочка). Ошибок быть не должно.
Заливка — только после согласия
Подключите USB. Port → ваш COMx. Upload — только если вы явно согласны залить прошивку на эту плату (правило лаборатории).
LCD I2C (по желанию)
Подключите SDA/SCL и питание. В скетче раскомментируйте блок USE_LCD и адрес (часто 0x27 или 0x3F). Если экран пустой — сначала оставьте 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
Какие детали печатаем
- Основание / кронштейн под серво SG90 (отверстия под винты корпуса серво).
- Лёгкий держатель HC-SR04 на рожок (два «глаза» датчика наружу).
- По желанию: кожух «тарелка радара» и подставка под LCD.
Модель: скачать или нарисовать простое
Путь A. Ищите: HC-SR04 bracket, servo mount SG90, ultrasonic radar mount, SG90 horn adapter.
Путь C (Tinkercad). Плоская плита-основание с отверстиями под винты серво; отдельный «карман» под HC-SR04 (два цилиндра-глаза). Посадка на рожок — отверстие с зазором +0,3…0,5 mm к замеру рожка.
Проект в Bambu Studio
Импорт STL → основание плашмя → PLA, 0.2 mm, заполнение 15–20%. Поддержки — только если есть нависания. Отправка — setup-bambu-p2s.html.
Проверка качества
- Рожок серво входит в держатель без молотка
- HC-SR04 сидит в кармане, «глаза» не закрыты пластиком
- Основание не качается на столе
Примерка без клея
Поставьте серво в основание, наденьте держатель с датчиком на рожок. Прогоните сектор 15°…165° руками или со скетчем.
7. Скрипт демо на выставке
- «Это ультразвуковой радар: серво качает датчик, как антенну.»
- «HC-SR04 шлёт звук выше нашего слуха и слушает эхо — по времени считает сантиметры.»
- «Поднесите ладонь — услышите тревогу. На экране/в мониторе видно угол и дистанцию.»
- «Дальше тот же датчик поставим на шлагбаум — зоны „далеко / близко / стоп“.»
8. Неисправности
| Симптом | Что проверить |
|---|---|
| Серво дёргается / Uno перезагружается | Тяжёлая голова; слабый USB; нужен отдельный 5 V и общий GND |
| cm всегда −1 / 0 | Trig/Echo перепутаны; GND не общий; слишком далеко (>~3 м) |
| Нет писка | Пин D8, полярность зуммера, порог ALARM_CM |
| LCD пустой | Адрес 0x27/0x3F; I2C A4/A5; контраст потенциометром на адаптере |
| Не заливается | COM занят монитором; плата Uno; кабель data, не «только зарядка» |
9. Безопасность питания
- Общий GND у Uno, серво, датчика и внешнего БП (если появится) — обязателен.
- Моторы и серво лучше не кормить «с сигнального пина» — только с 5 V / внешнего источника по согласованию.
- Upload на подключённую плату — только после вашего явного согласия.
- Первая подача отдельного БП на сборку — стоп и согласование напряжения.
10. Что дальше
Следующий выставочный проект: Парковочный шлагбаум — те же сантиметры, но зоны и стрела на MG90S.