8 (800) 350-30-16

Подключение ультразвукового дальномер HC-SR04

Дата: / Категория: Arduino / Автор: DOC_tr

Сегодня мы поговорим о том, как подключить ультразвуковой дальномер HC-SR04 к Arduino UNO и снабдить все это экраном LCD1602.

На фотографии не видно, но выходы Trig и Echo подключены ко 2 и 3 выходу Arduino соответственно. Ну а VCC и GND - 5v и земля.

После успешного подключения можно быстро набросать код, который будет высчитывать расстояние в сантиметрах. Код прокомментирован, так что вопросов быть не должно.

// задаем пины
int echoPin = 2;
int trigPin = 3;
 
void setup() {
 Serial.begin(9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 // отключаем подачу импульса
 digitalWrite(trigPin, LOW);
}
 
void loop() {
 int duration, cm;
 // подаем импульс
 digitalWrite(trigPin, HIGH);
 // ждем 10 микросекунд
 delayMicroseconds(10);
 // отключаем подачу импульса
 digitalWrite(trigPin, LOW);
 // считываем длину сигнала
 duration = pulseIn(echoPin, HIGH);
 // пересчитываем в сантиметры
 Serial.print(duration / 58);
 Serial.println(" cm");
 // ждем пол секунды до следующего измерения
 delay(500);
}

 Подключается по данной схеме

Если запустить его и периодически подносить к нему руку, то в консоли можно увидеть следующие измерения:

Если вам вдруг понадобятся миллиметры или дюймы, то это можно легко исправить, переписав в коде пару строк примерно на следующие:

cm = duration / 58; 
inch = duration / 148;
mm = duration / 5.8;

Но у нас получается слишком много кода, а если нам потребуется подключить 2 таких дальномера? А если 10? В таком случае разработка превратится в рутину, а в случае какой-то ошибки придется менять все сразу.

Именно здесь нам на помощь приходит библиотека Ultrasonic.

Используя ее, весь прошлый код можно написать следующим образом:

#include <Ultrasonic.h> 
Ultrasonic ultrasonic(3,2);
void setup() {
 Serial.begin(9600);
}

void loop() {
 Serial.print(ultrasonic.Ranging(CM));
 Serial.println(" cm"); 
  
delay(500);
}

И вывод мы получаем точно такой же, как и в предыдущем случае.

Что ж, теперь усложним задачу. Есть у нас экран - LCD1602. Попробуем подключить его к дальномеру и пусть отображает его данные на своем маленьком экранчике ;)

На самом деле это не так просто, как кажется на первый взгляд.

Вначале тяжкое подключение:

 в этой схеме черт ногу может сломать, но глаза боятся, а руки делают.

А теперь разберем подробнее. У экрана 16 пинов. У моего экрана, по неизвестным мне причинам, пины идут в следующем порядке слева на право - 15, 16, 1, 2 и так до 14. То есть крайний правый 14 порт, а крайний левый 15. Учитывайте это при подключении своего экрана.

А подключаются они следующим образом

  • 1 - земля (-)
  • 2 - питание (+)
  • 3 - земля (-)
  • 4 - 13 порт Arduino
  • 5 - земля (-)
  • 6 - 12 порт Arduino
  • 11 - 11 порт Arduino 
  • 12 - 10 порт Arduino
  • 13 - 9 порт Arduino
  • 14 - 8 порт Arduino
  • 15 - питание (+)
  • 16 - земля (-)

Как видите - не особо сложно.

И небольшой код (выведу название магазина и подпись):

#include <LiquidCrystal.h>
LiquidCrystal lcd(13,12,11,10,9,8);

void setup() {
 Serial.begin(9600);
 lcd.begin(16,2);
 lcd.print("https://ROBOM.RU");
 lcd.setCursor(5,1);
 lcd.print("DOC_tr");
}
void loop(){}

Ну а теперь, когда у нас работает дальномер и экран, осталось только соединить код вместе . . .

#include <LiquidCrystal.h>
#include <Ultrasonic.h>

LiquidCrystal lcd(13,12,11,10,9,8);
Ultrasonic ultrasonic(3,2);

void setup() {
 Serial.begin(9600);
 lcd.begin(16,2);
}
void loop() {
 int cm = ultrasonic.Ranging(CM);
 // очищаем экран
 lcd.clear();
 // устанавливаем курсор в начало
 lcd.setCursor(0,0);
 lcd.print(cm); 
 lcd.print(" cm"); 
 // теперь мы не засоряем консоль, и задержку можно поставить поменьше
 delay(200);
}

Извиняюсь за то, что вверх тормашками, просто экран слишком маленькая для того, чтобы подключить дисплей нормально ;)

А теперь подставим что-либо под наш дальномер - с вредной привычкой я так и не расстался, но заменил ее на менее вредную - электронную сигарету, которая и послужила препятствием.

Ну вот на этом, пожалуй, и все. Все используемые в данном уроке компоненты вы можете купить на нашем сайте по привлекательным ценам (ссылки ниже).

Видео версия данной статьи

Теги: #Arduino UNO, #LCD1602, #HC-SR04

Ваша оценка:

Рейтинг: 10.0 (Оценок: 3)

Комментарии (5):

diy
2016-02-06 12:07
не помогло я поискал в интернете  и нашел Pinglibrary можете подсказать код
DOC_tr
2016-02-06 14:11
@diy:Ну с учетом того что я нашел в примерах и подключения из данной статьи код будет примерно следующим

#include <NewPing.h>
#include <Ultrasonic.h>

NewPing sonar(2, 3, 200);
LiquidCrystal lcd(13,12,11,10,9,8);

void setup() {
  lcd.begin(16,2);
}

void loop() {  
  unsigned int cm = sonar.ping();
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(cm);
  lcd.print(" cm");
  delay(200);
}


Данный код писал на коленке, так что если не будет работать, отпишитесь. Проверю все более тщательно и выложу результаты.
diy
2016-02-05 12:48
может знаете другую библиотеку
DOC_tr
2016-02-05 13:08
@diy:Попробуйте вот эту - https://robom.ru/blog/content/uploadfile/201602/95fa1454663262.zip
Она подключается немного по другому, но в ней есть примеры кода.
diy
2016-02-05 12:47
есть проблема когда пытаюсь загрузить код на ардуино в ошибках пишется что ultrasonic.Ranging(CM) не найден

Комментарий:

Copyright © RobOM.ru 2016 г. Все права защищены