Подключение HC-SR04
Схема подключения ультразвукового датчика HC-SR04 к Arduino
Пример кода для подключения ультразвукового датчика HC-SR04 к Arduino
int trigPin = 11; // Trigger int echoPin = 12; // Echo long duration, cm, inches; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { // Датчик срабатывает ВЫСОКИМ импульсом длительностью 10 или более микросекунд. // Заранее подайте короткий НИЗКИЙ импульс, чтобы обеспечить чистый ВЫСОКИЙ импульс: digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Считываем сигнал с датчика: ВЫСОКИЙ импульс, // продолжительность - это время (в микросекундах) с момента отправки пинга до приема его эха от объекта. pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH); // Преобразуем время в расстояние cm = (duration/2) / 29.1; inches = (duration/2) / 74; Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(250); }
Как работает код
Сначала вы создаете переменные для триггера и вывода эхо, называемых trigPin и echoPin соответственно. Триггерный контакт подключен к pin11, а контакты эха подключены к pin12
int trigPin = 11; int echoPin = 12;
Вы также создаете три переменные типа long: duration, cm, inches. В duration переменная хранит время между передачей и приемом сигнала. В cm переменная сохранит расстояние в сантиметрах, а inches переменная сохранит расстояние в дюймах.
long duration, cm, inches;
в setup(), инициализируйте последовательный порт со скоростью 9600 бод и установите контакт триггера как выход, а контакт эхо как вход.
Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);
в loop(), активируйте датчик, отправив ВЫСОКИЙ импульс длительностью 10 микросекунд. Но перед этим подайте короткий НИЗКИЙ импульс, чтобы убедиться, что вы получите чистый ВЫСОКИЙ импульс:
digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
Затем вы можете прочитать сигнал с датчика - ВЫСОКИЙ импульс, длительность которого представляет собой время в микросекундах от момента отправки сигнала до приема его эха от объекта.
duration = pulseIn(echoPin, HIGH);
Наконец, вам просто нужно преобразовать продолжительность в расстояние. Мы можем рассчитать расстояние, используя следующую формулу:
расстояние = (время прохождения / 2) * скорость звука Скорость звука: 343 м/с = 0,0343 см/мкс = 1 / 29,1 см/мкс. Или в дюймах: 13503,9 дюйма/с = 0,0135 дюйма/мкс = 1/74 дюйма/мкс
Нам нужно разделить duration на 2, потому что мы должны учитывать, что волна была отправлена, попала в объект, а затем вернулась обратно к датчику.
cm = (duration/2) / 29.1; inches = (duration/2) / 74;
Наконец, мы распечатываем результаты в Serial Monitor:
Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println();