Подключаем к arduino четыре сонара HC-SR04

Сонар или ультразвуковой датчик позволяет получать данные о расстоянии до препятствия. Принцип работы много где описан и расчитывается исходя из дельты по времени за которое отраженный пучок звука отразится от ближайшей поверхности. В данной статье подробно опишу как подключить несколько таких датчиков с помощью Arduino UNO и получить результат на компьютере с помощью языка python для дальнейшей обработки на более высоком уровне. Объединение нескольких датчиков расстояния может понадобится для случая, когда необходимо отслеживать наличие препятствий одновременно в разных областях. Согласно спецификации эффективный угол составляет +-15 градусов. Поэтому располагать несколько сонаров имеет смысл под углом в 30 градусов относительно друг друга. Однако для тестового запуска мы их направим в одну сторону, ибо так легче разместить на макетной плате.

Итак, на первом этапе необходимо собрать схему. У меня получилось так, где красный провод — 5 вольт, черный — земля:

схема с четырьмя сонарами

Arduino UNO и четыре ультразвуковых датчика

На втором этапе напишем код для Arduino. Нам понадобится библиотека для ультразвукового датчика. Подключается библиотека через меню Sketch->Import library…->Add library. Взять библиотеку для HC-SR04 можно здесь. Не забываем указать тип платы и верный порт — в нашем случае «COM3″

#include "Ultrasonic.h"

Ultrasonic us_4(8, 9); // Trig - first, Echo - second
Ultrasonic us_3(6, 7);
Ultrasonic us_2(4, 5);
Ultrasonic us_1(2, 3);

void setup()
{
  Serial.begin(9600); 			// start the serial port
}

void loop()
{
  float d_1 = us_1.Ranging(CM); 	// get distance
  float d_2 = us_2.Ranging(CM); 	// get distance
  float d_3 = us_3.Ranging(CM); 	// get distance
  float d_4 = us_4.Ranging(CM); 	// get distance
  Serial.print(d_1);
  Serial.print("cm, ");
  Serial.print(d_2);
  Serial.print("cm, ");
  Serial.print(d_3);
  Serial.print("cm, ");
  Serial.print(d_4);
  Serial.println("cm."); 		// print the distance
  
  delay(500); 								// arbitrary wait time.
}

Уже на данном этапе можно открыть просмотр «сериал порта» в Arduino среде и посмотреть какие расстояния показывают наши датчики. Однако теперь мы попробуем использовать данные с сонаров для дальнейшей обработки на python. Для этого напишем следующий код:

import serial

ser = serial.Serial('COM3')
print ( "connected to: " + ser.portstr )                   

while True:
    print ser.readline()

ser.close()

Порт следует указать тот же, что и в ардуино. Теперь данные с нескольких сонаров можно использовать например для навигации робота — каждые 500 миллисекунд бортовой компьютер будет получать данные об окружающем пространстве. Но об этом напишу в одном из следующих постов.