Робот на основе Arduino. Часть IV – ультразвуковой датчик HC-SR04

Что такое робот?

Есть много различных определений для слова робот. Одно из них предполагает, что машина, которая будет рассматриваться как робот, должна ощущать динамично изменяемую среду и реагировать на эти изменения практически без вмешательства человека. Исходя из этого определения, наш робот – еще машина, но сейчас мы превратим её в робота, добавив «орган чувств».

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/124-robot-na-osnove-arduino-chast-iv-ultrazvukovoy-datchik-hc-sr04/images/robot-na-osnove-arduino-chast-iv-ultrazvukovoy-datchik-hc-sr04-1.jpg

Ультразвуковые датчики

Одним из популярных УЗ датчиков является HC-SR04. Функционально он напоминает датчик Parallax PING. Эти датчики излучают импульс с частотой 40 КГц при подаче сигнала на вход синхронизации. Датчик измеряет время, за которое звуковой импульс вернется обратно, после чего на выходе формирует пропорциональный этому времени широтно-модулированный сигнал. В случае Parallax PING линия для подачи сигнала и для приема является одной и той же, в HC-SR04 эти линии разделены. Заявленная дальность действия HC-SR04 составляет 450 см, а у PING – 300 см, хотя PING дороже.

Использование датчика HC-SR04

После установки соответствующей библиотеки для Arduino IDE использование HC-SR04 покажется довольно простым. Сама библиотека доступна здесь. А здесь можно найти инструкцию по установке библиотеки (англ.).

Ниже приведен простой код для проверки датчика. Выходные данные будут поступать на монитор последовательной передачи данных в Arduino IDE. Но для начала нужно выполнить некоторые соединения:

- с вывода 5V платы Arduino на вывод VCC датчика

- с цифрового вывода 12 платы Arduino на вывод TRIG датчика

- с цифрового вывода 13 платы Arduino на вывод ECHO датчика

- с вывода GND платы Arduino на вывод GND датчика

Теперь загрузите в Arduino следующий код:

#include<Ultrasonic.h>  /*включить установленную пользователем библиотеку*/
Ultrasonic ultrasonic(12,13);  /*создать экземпляр УЗ датчика и определить выводы*/
void setup() {
Serial.begin(9600);  /*начать передачу данных на скорости 9600 bps */
}
void loop()
{
  Serial.print(ultrasonic.Ranging(INC));  /* INC для дюймов, CM для сантиметров */
  Serial.println("in");
  delay(100);
}

После загрузки кода можете открыть монитор последовательной передачи данных в Arduino IDE, после этого можно будет видеть измеряемое датчиком расстояние, обновляемое 10 раз в секунду.

Соединяем HC-SR04 с нашим роботом

Теперь мы добавим роботу датчик. Также для большей функциональности присоединим к нему светодиод и динамик:

- с вывода 5V платы Arduino на вывод VCC датчика

- с цифрового вывода 10 платы Arduino на вывод TRIG датчика

- с цифрового вывода 11 платы Arduino на вывод ECHO датчика

- с вывода GND платы Arduino на вывод GND датчика

- с вывода 7 платы Arduino на светодиод

- с вывода 9 платы Arduino на динамик

Код

#include<Ultrasonic.h>
Ultrasonic ultrasonic( 10, 11);

#define PWMA 3
#define AIN1 0
#define AIN2 1
#define PWMB 5
#define BIN1 2
#define BIN2 4
#define STBY 6
#define LED 7
#define SPEAKER 9
#define FREQ 1000

void setup() {
pinMode(PWMA,OUTPUT);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(PWMB,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(STBY,OUTPUT);
pinMode(LED,OUTPUT);
}

void loop() {
  startUp();
  while(ultrasonic.Ranging(INC) < 9) {
    rotateLeft();
    digitalWrite(LED,HIGH);
    tone(SPEAKER,FREQ);
    delay(20);
    digitalWrite(LED,LOW);
    noTone(SPEAKER);
    delay(20);
  }
  goForward();
  digitalWrite(LED,HIGH);
}

void goForward ()
{
  digitalWrite (AIN1,HIGH);
  digitalWrite (AIN2,LOW);
  analogWrite(PWMA,233);
  digitalWrite (BIN1,HIGH);
  digitalWrite (BIN2,LOW);
  analogWrite(PWMB,255);
}

void rotateLeft ()
{
  digitalWrite (AIN1,LOW);
  digitalWrite (AIN2,HIGH);
  analogWrite(PWMA,255);
  digitalWrite (BIN1,HIGH);
  digitalWrite (BIN2,LOW);
  analogWrite(PWMB,255);
}

void startUp ()
{
  digitalWrite(STBY,HIGH);
}

Запуск

Вот как функционирует робот с ультразвуковым датчиком:

Таким образом, с помощью Arduino можно построить достаточно интересного робота. Конечно, он пока может не многое, но при желании разработчик может добавить ему больше датчиков и манипуляторов и запрограммировать его на что-нибудь более полезное.

Робот на основе Arduino. Часть I – управление двигателями

Робот на основе Arduino. Часть II – шасси, средства передвижения и питание

Робот на основе Arduino. Часть III – подключение, программирование и пробный пуск