Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Ультразвуковой датчик расстояния HC-SR04 x 1 шт.
Подключение:
В данном примере с помощью HC SR04 будем замерять расстояние до объектов и полученные данные отобразим в окне «мониторинг порта» в среде разработки IDE Arduino. Сборка проекта несложная, нам надо четыре провода, вывод 11 (Arduino UNO) подключаем к выводу Trig (HC SR04), вывод 12 (Arduino UNO) подключаем к выводу Echo (HC SR04), осталось подключить питание VCC к +5V и GND к GND, да наглядности выложу схему таблицу подключения.
Собираем схему на макетной плате с механическими контактами.
Программа для работы с датчиком:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Config Portc.5 = Output
Trig Alias Portc.5
Config Portc.4 = Input
Dim S As Word
Dim R As Single
Do
Trig = 1
Waitus 15
Trig = 0
Waitus 10
Pulsein S , Pinc , 4 , 1
R = S * 0.1725
Print R
Waitms 50
Loop
End
|
В трёх первых строках программы мы назначаем микроконтроллер и его тактовую частоту, а также скорость работы UART (в данном случае 9600 бод). Далее мы конфигурируем порт PORTC.5 микроконтроллера на выход, так как сюда у нас подключен пин Trig датчика расстояния. Порту PORTC.5 мы назначили имя Trig чтобы нам было легче писать\читать код, при обращении к этому имени мы обращаемся к PORTC.5. Также мы сконфигурировали PORTC.4 на вход, поскольку сюда мы подключили Echo датчика. Потом мы задаём переменные в которых будем хранить данные для расчёта и отображения. И тут начинается самое интересное, открываем операторные скобки бесконечного цикла (Do, Loop) и видим следующий код:
1
2
3
4
|
Trig = 1
Waitus 15
Trig = 0
Waitus 10
|
Здесь мы подаём кратковременный импульс длительностью 15 микросекунд на Trig и ждём 10 микросекунд.
Командой Pulsein S , Pinc , 4 , 1 мы замеряем длительность импульса на PINC.4 и заносим эту длительность в переменную S. Дальше вычисляем длину и записываем её в переменную R (R = S * 0.1725). 0.1725 - коэффициент для расчёта расстояния из длинны импульса. Командой Print R выводим в UART расстояние до препятствия.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
/*
Тестирование производилось на Arduino IDE 1.6.12
Дата тестирования
*/
int trigPin = 11; // Номер вывод Trig
int echoPin = 12; // Номер вывод Echo
long duration, cm, inches; // Указываем тип данных для переменных duration, cm и inches
void setup() {
Serial.begin (9600); // Задаем скорость передачи данных
pinMode(trigPin, OUTPUT); // Вывод trigPin установим как выход
pinMode(echoPin, INPUT); // вывод echoPin установим как вход
}
void loop()
{
digitalWrite(trigPin, LOW); // Устанавливаем на выходе trigPin 0
delayMicroseconds(5); // Ожидаем 5 микросекунд
digitalWrite(trigPin, HIGH); // Устанавливаем на выходе trigPin 1
delayMicroseconds(10); // Ожидаем 10 микросекунд
digitalWrite(trigPin, LOW); // Устанавливаем на выходе trigPin 0
duration = pulseIn(echoPin, HIGH); // Если на echoPin - HIGH, включаем таймер до появления LOW, данные записать в duration
cm = (duration/2) / 29.1; // Высчитываем значение
Serial.print(cm); // Выводим значение переменной cm
Serial.print("cm"); // Выводим символ cm
Serial.println(); // Новая строка
delay(250); // Ждем 250 мкс
}
|
Do'stlaringiz bilan baham: |