</> Задания по ArduinoПрактические работы для Tinkercad Circuits · Школа № 2094

← все задания

05Ультразвуковой дальномер

Подключите ультразвуковой датчик к пину 2 и напишите программу, которая измеряет расстояние и печатает его в «Монитор порта».

Средний

Задание

  1. Подключите датчик: сигнальный вывод — к пину 2, питание — к 5V и GND.
  2. Напишите программу, которая отправляет ультразвуковой импульс и измеряет время его возврата.
  3. Переведите время в сантиметры и выведите результат в «Монитор порта» (скорость 9600 бод).
  4. Проверьте: поднесите руку на 10, 20 и 50 см — числа должны меняться.
  5. Дополнительно: добавьте светодиод, который загорается, если расстояние меньше 15 см (сигнализация).

Что понадобится

  • Arduino Uno
  • Ультразвуковой датчик Parallax PING))) или HC-SR04
  • Провода

Схема

Схема: Ультразвуковой дальномер

Соберите схему в Tinkercad Circuits так же, как на картинке.

Код

Скопировать нельзя специально — наберите код руками и подумайте над каждой строкой.

1void setup()
2{
3 Serial.begin(9600);
4}
5 
6void loop()
7{
8 pinMode(2, OUTPUT);
9 digitalWrite(2, HIGH);
10 delay(1);
11 digitalWrite(2, LOW);
12 pinMode(2, INPUT);
13 
14 Serial.print(pulseIn(2, HIGH) / 58);
15 Serial.println(" cm");
16 
17 delay(500);
18}

Что делает каждая строка

СтрокаЧто делает
1–4setup(): Serial.begin(9600) включает обмен с компьютером на скорости 9600 бод — чтобы в «Мониторе порта» появились числа.
6–7Начало бесконечного цикла loop().
8Пин 2 настраиваем как выход — сейчас мы сами будем отправлять импульс датчику.
9–11Подаём HIGH на 1 мс (delay(1)) и снова LOW: это короткий зондирующий импульс, который заставляет датчик издать ультразвук.
12Сразу переключаем пин 2 в режим входа (INPUT) — теперь тот же провод будет принимать ответный сигнал.
14pulseIn(2, HIGH) ждёт прихода сигнала и возвращает его длительность в микросекундах. Делим на 58 — получаем расстояние в сантиметрах (звук проходит 1 см туда-обратно примерно за 58 мкс).
15Serial.println(" cm") выводит результат и переводит строку, чтобы каждое измерение было с новой строки.
17delay(500) — новое измерение два раза в секунду, чтобы не засыпать монитор числами.
18Конец loop(); измерения повторяются постоянно.