Приемная сторона ультразвукового датчика

Я работаю над проектом, связанным с ультразвуковым датчиком 40 кГц, который будет использоваться для точного измерения расстояния. У меня есть отдельный передатчик и приемник. Я хочу получить время между моментом, когда мой передатчик передает волны, и моментом, когда мой приемник их получает. Однако я не смог заставить это работать. Может ли кто-нибудь из вас дать мне код, который поможет мне передавать и принимать волны 40 кГц и получать время между ними, чтобы я мог использовать его для вычисления расстояния? Заранее спасибо. Я был бы очень признателен!

, 👍1

Обсуждение

Какое именно у вас оборудование? Большинство известных мне коммерческих американских датчиков имеют собственные встроенные измерительные системы., @mystery

@mystery что насчет [HC-SR04](https://www.sparkfun.com/products/13959)?, @Joe Iddon

Я это знаю довольно хорошо. Должно подойти автору проекта, например, код https://github.com/sparkfun/HC-SR04_UltrasonicSensor/blob/master/Firmware/HC-SR04_UltrasonicSensorExample/HC-SR04_UltrasonicSensorExample.ino, @mystery

Я использую Arduino Uno и отдельные ультразвуковой передатчик и приёмник. Я не использую какие-либо коммерчески доступные ультразвуковые датчики., @Jenifer Ricalde


2 ответа


0

У меня нет «кода», но вы можете использовать таймер, установленный на 40 кГц, и посылать нужные вам импульсы. .

Если больше ничего делать не нужно (и в будущем это не потребуется), можно использовать функцию задержки.

Также проверьте функцию pulseIn из Arduino, вы можете использовать эту удобную функцию для проверки результата.

,

1

Это самый простой ультразвуковой импульс и код приема. Я написал его для работы с модулями HC-SR04; надеюсь, он будет работать и для вас, поскольку они тоже звучат на 40 кГц.

Основная функциональность исходит от функции pulseIn().

#define TRIGPIN 9
#define ECHOPIN 10

void setup() {
  Serial.begin(9600);
  pinMode(TRIGPIN, OUTPUT);
  pinMode(ECHOPIN, INPUT);
}

void loop() {
  digitalWrite(TRIGPIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGPIN, LOW);

  uint16_t duration = pulseIn(ECHOPIN, HIGH, 4000);
  int distance = (duration*.0343)/2;
  Serial.println(distance);
}

Обратите внимание, что вам нужно будет настроить 4000 (мкс) на любое желаемое вами время ожидания (или полностью выдать, если оно вам не нужно).

,

Здравствуйте, сэр! К сожалению, я не использую коммерчески доступные ультразвуковые датчики, такие как HC-SR04. У меня есть отдельные передатчик и приёмник, сэр., @Jenifer Ricalde

@JeniferRicalde Хорошо, можете дать ссылку на них? Код будет работать, если предположить, что передатчик и приёмник — это просто цифровые выходы (т.е. для передачи звука на передатчик подается сигнал HIGH, а приёмник выдаёт сигнал HIGH при приёме)., @Joe Iddon

Сэр, ничего, если я спрошу ваш адрес электронной почты? Я хочу отправить код. Я не могу прикрепить его здесь., @Jenifer Ricalde

Почему бы и нет? Просто вставьте в вопрос, как я в своём ответе, файл .ino. Или создайте ссылку на https://pastebin.com/, @Joe Iddon

Я посылаю 8 импульсов волн частотой 40 кГц, а затем приемник измеряет пик напряжения принятой волны, чтобы определить временной интервал. Однако я не совсем уверен, что мой код верный., @Jenifer Ricalde

вот ссылка: https://pastebin.com/4chsLQ6R, @Jenifer Ricalde

Я использовал код мистера Керри Вонга., @Jenifer Ricalde

@JeniferRicalde Извините, но поскольку вы только что скопировали [чей-то код] (http://www.kerrywong.com/2011/01/22/a-sensitive-diy-ultrasonic-range-sensor/), отладка без возможности проверить всё на практике (у меня нет такой настройки) особенно сложна. Однако есть два момента: вы можете использовать функцию delay() для задержки в миллисекундах и delayMicroseconds() для микросекунд — нет необходимости писать собственную функцию delayMilliseconds(), поскольку delay() уже работает. Во-вторых, я рекомендую использовать библиотеку Serial для вывода показаний с приёмника, что облегчит отладку., @Joe Iddon