форумы для свободного общения
Технический форум => Arduino => Робототехника => Проекты на Arduino => Тема начата: Мельников Тимур от Июля 27, 2017, 11:17:12
-
Итак сегодня в проекте у нас используется:
- Ультразвуковой датчик HC-SR04 (http://msevm.ru/forum/index.php?topic=6830)
- Arduino nano v3 (http://www.e-kit.ru/2017/111/)
- Беспаечная макетная плата на 400 контактов (http://msevm.ru/forum/index.php?topic=6829)
- Соединительные провода
- LCD индикатор
Перед тем как использовать данный датчик не плохо было бы разобраться как он работает. А работает он довольно таки просто, при помощи эхолокации. Тоесть наш датчик посылает ультрозвуковой сигнал, затем принимает его. При этом зная время за которое сигнал отразился от объекта и скорость звука в пространстве(340м/с) он расчитывает расстояние до объекта.
Теперь разберемся как им управлять. Тоже ничего сложного, на вход „Trig“ подаем на пару микросекунд отрицательный импульс, а затем положительный длительностью в 10 микросекунд, одновременно с этим импульсом на выходе „Echo“ появляется логическая единица, а когда датчик принимает сигнал, то появляется логический ноль. По длительности единицы на ноге „Echo“ определяется время за которое ультразвуковой импульс отразился от объекта.
Теперь можем приступать к работе с дальномером.
Итак я буду выводить показания датчика на lcd индикатор.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 7, 8, 9, 10); // RS - 12, E - 11, D4 - 7, D5 - 8, D6 - 9, D7 - 10
int echoPin = 5;
int trigPin = 6;
void setup() {
lcd.begin(16, 2);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
int duration, cm;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
cm = duration / 58;
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(cm);
delay(100);
}
По мимо этого есть еще один вариант скетча, с использованием библиотеки. Например „Ultrasonic”. Папку из архива надо поместить в папку „libraries“, которая находится в папке с программой „Arduino IDE“. Теперь можно пользоваться библиотекой.
Кстати вот и код:
#include <Ultrasonic.h> // подключаем библиотеку
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 7, 8, 9, 10); // RS - 12, E - 11, D4 - 7, D5 - 8, D6 - 9, D7 - 10
Ultrasonic ultrasonic(6, 5); // Trig - 6, Echo - 5
void setup() {
lcd.begin(16, 2);
}
void loop() {
float dist_cm = ultrasonic.Ranging(CM); // дистанция в см
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(dist_cm);
delay(100);
}
-
Также вывод показаний через com порт:
int echoPin = 5;
int trigPin = 6;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
int duration, cm;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
cm = duration / 58;
Serial.println(cm)
delay(100);
}
И с использованием библиотеки:
#include <Ultrasonic.h>
Ultrasonic ultrasonic(12, 11); // Trig - 12, Echo - 11
void setup() {
Serial.begin(9600);
}
void loop() {
float dist_cm = ultrasonic.Ranging(CM);
Serial.println(dist_cm);
delay(100);
}