Arduino:Примеры/Ping

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

Перевод: Максим Кузьмин (Cubewriter) Перевел 364226 статей для сайта.</br>Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Ультразвуковой дальномер 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

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