Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Ping

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ультразвуковой дальномер PING))) [1]

PING))) – это ультразвуковой дальномер от компании Parallax. Он определяет дистанцию до ближайшего объекта, который находится перед ним (поисковой диапазон варьируется от 2 см до 3 м). Принцип его работы заключается в следующем – он отсылает пучок ультразвуковых волн, а затем ждет эха, создаваемого «отпружиниванием» этого сигнала от находящегося впереди объекта. Arduino отсылает дальномеру короткий импульс, чтобы запустить процесс обнаружения, а затем через тот же контакт ждет импульса при помощи функции pulseIn(). Продолжительность ответного импульса эквивалентна времени, которое уходит на то, чтобы ультразвук дошел до объекта и вернулся к датчику. При помощи скорости звука это время можно конвертировать в дистанцию.

Необходимое оборудование

  • Плата Arduino;
  • Ультразвуковой дальномер PING)));
  • Провода-перемычки;

Цепь

5-вольтовый контакт PING))) подключен к 5-вольтовому контакту на Arduino, и аналогично контакт с «землей» на PING))) соединен с «землей» на Arduino. Контакт SIG (т.е. сигнал) на PING))) подсоединен к 7-ому цифровому контакту на Arduino.

Ping bb.png

Схема

PING schem.png

Код

  1. /* Датчик PING)))
  2.  
  3.    Этот скетч считывает данные ультразвукового дальномера PING))),
  4.  а затем возвращает данные о дистанции до ближайшего объекта.
  5.    Для этого он отсылает датчику импульс (чтобы начать обнаружение), а
  6.  а затем слушает в ожидании ответного импульса.
  7.    Длина ответного импульса пропорциональна дистанции от объекта до датчика.
  8.      
  9.    Цепь:
  10.     * Контакт +5V на PING))) подключен к +5V на Arduino
  11.     * Контакт «земля» (GND) на PING))) подключен к «земле» на Arduino
  12.     * Контакт SIG на PING))) подключен к 7-ому цифровому контакту
  13.  
  14.    http://www.arduino.cc/en/Tutorial/Ping
  15.    
  16.    Создан 3 ноября 2008 Дэвидом Меллисом (David A. Mellis),
  17.    модифицирован 30 августа 2011 Томом Иго (Tom Igoe).
  18.  
  19.    Этот код не защищен авторским правом.
  20.  
  21.  */
  22.  
  23. // Это константы, т.е. значения, которые не изменятся.
  24. // Зададим контакт для датчика:
  25. const int pingPin = 7;
  26.  
  27. void setup() {
  28.   // Инициализируем последовательную передачу данных:
  29.   Serial.begin(9600);
  30. }
  31.  
  32. void loop()
  33. {
  34.   // Задаем переменные для продолжительности импульса,
  35.   // а также итоговую дистанцию – в дюймах и сантиметрах:
  36.   long duration, inches, cm;
  37.  
  38.   // PING))) активируется импульсом HIGH продолжительностью 2 или более микросекунды.
  39.   // Перед этим дадим короткий импульс LOW, чтобы «смыть» импульс HIGH (если тот вдруг остался с прошлого раза):
  40.   pinMode(pingPin, OUTPUT);
  41.   digitalWrite(pingPin, LOW);
  42.   delayMicroseconds(2);
  43.   digitalWrite(pingPin, HIGH);
  44.   delayMicroseconds(5);
  45.   digitalWrite(pingPin, LOW);
  46.  
  47.   // Воспользуемся тем же контактом для считывания сигнала от PING))).
  48.   // Продолжительность сигнала HIGH – это и есть время (в микросекундах)
  49.   // от отправки ультразвуковых волн до получения эха от объекта.
  50.   pinMode(pingPin, INPUT);
  51.   duration = pulseIn(pingPin, HIGH);
  52.  
  53.   // Конвертируем время в дистанцию:
  54.   inches = microsecondsToInches(duration);
  55.   cm = microsecondsToCentimeters(duration);
  56.  
  57.   Serial.print(inches);
  58.   Serial.print("in, ");
  59.   Serial.print(cm);
  60.   Serial.print("cm");
  61.   Serial.println();
  62.  
  63.   delay(100);
  64. }
  65.  
  66. long microsecondsToInches(long microseconds)
  67. {
  68.   // Согласно паспортным данным к PING))),
  69.   // ультразвуку на преодоление одного дюйма требуется 73,746 микросекунды
  70.   // (т.е. ультразвук движется со скоростью 1130 футов в секунду).
  71.   // Это позволяет нам определить дистанцию,
  72.   // пройденную сигналом (туда и обратно).
  73.   // Поэтому мы делим ее на два, чтобы получить реальную дистанцию до объекта.
  74.   // Характеристики PING))) можно посмотреть здесь:
  75.   // http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  76.   return microseconds / 74 / 2;
  77. }
  78.  
  79. long microsecondsToCentimeters(long microseconds)
  80. {
  81.   // Сила звука – это 340 м/с или 29 микросекунд на сантиметр.
  82.   // Импульс движется туда и обратно, поэтому для определения реальной дистанции
  83.   // нам нужно поделить полученное значение надвое.
  84.   return microseconds / 29 / 2;
  85. }

См.также

  1. pinMode()
  2. delayMicroseconds()
  3. pulseIn()
  4. digitalWrite()
  5. return
  6. serial.begin()
  7. serial.print()
  8. ADXL3xx
  9. Memsic2125
  10. Knock

Внешние ссылки

  1. Arduino - Ping Ultrasonic Range Finder