В этом крафте покажу как сделать парктроник на Arduino при помощи ультразвукового дальномера HC-SR04. Дешевый и простой в использовании дальномер подойдет также для создания навигации в робототехнике, чтобы объезжать препятствия. Его также можно использовать при создании сигнализации или управлении освещением.
Ультразвуковой шилд HC-SR04 для Arduino или Ultrasonic sensor, работает по принципу эхо-локации излучает звуковую волну и принимает отраженный эхо-сигнал. Время между отправленным и принятым сигналом можно преобразовать в расстояние.
Видео ультразвуковой парктроник на Arduino
Чтобы сделать парктроник своими руками понадобится
- Arduino
- Ультразвуковой дальномер HC-SR04
- Светодиоды — 6шт.
- Резисторы 220Ом — 6шт.
- Провода папа-папа
- Пьезодинамик — 1шт.
- Макетная плата
Делаем парктроник при помощи Arduino и датчика HC-SR04
На макетной плате размещаем 6 светодиодов. У светодиодов минус будет общим. Катод ( короткая ножка) подсоединяем к минусовой шине на макетной плате.
К длинным ножкам светодиодов (анод) подключаем резистор 220Ом, без него светодиод сгорит.
По центру устанавливаем ультразвуковой датчик.
Дальномер HC-SR04 имеет 4 ножки:
- Vcc — питание 5В
- Echo — выход
- Trig — вход
- GND — земля 0В
К ножкам датчика парктроника подключаем провода. Echo будет соединен с 12-м контактом, а Trig с 13-м. GND к земле на плате микроконтроллера, а Vcc соответственно к выводу 5В на Arduino.
Также подключаем провода к ножкам резисторов. И последовательно к пинам Arduino от 2 до 7.
Пьезопищалка имеет два контакта плюс и минус. Отрицательный контакт можно объединить с минусом от ультразвукового дальномера. А положительный соединить с 11 пином на плате Arduino UNO.
Код программы для парктроника на Arduino
Чтобы схема парктроника на Arduino заработала, необходимо написать и загрузить скетч (код программы).
При приближении на указанную в скетче дистанцию будут загораться последовательно светодиоды и звучать сигнал разной тональности, который предупредит об опасном сближении.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#define trigPin 12 // объявление
#define echoPin 13 // переменных
#define led 2
#define led2 3
#define led3 4
#define led4 5
#define led5 6
#define led6 7
#define buzzer 11
int sound = 250;
void setup() {
Serial.begin (9600); // настройка
pinMode(trigPin, OUTPUT); // портов
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(buzzer, OUTPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // чтобы начать измерения,
delayMicroseconds(10); // необходимо на вход trigPin подать высокий сигнал 5В на 10мкс
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // с выхода echoPin считывается как долго был открыт порт
distance = (duration/2) / 29.1; // преобразование полученного параметра в дистанцию
if (distance <= 30) { // первое условие, если расстояние меньше либо равно 30,
digitalWrite(led, HIGH); // тогда включить первый светодиод
sound = 250;
}
else {
digitalWrite(led,LOW); // если условие не выполняется, выключить светодиод
}
if (distance < 25) {
digitalWrite(led2, HIGH);
sound = 260;
}
else {
digitalWrite(led2, LOW);
}
if (distance < 20) {
digitalWrite(led3, HIGH);
sound = 270;
}
else {
digitalWrite(led3, LOW);
}
if (distance < 15) {
digitalWrite(led4, HIGH);
sound = 280;
}
else {
digitalWrite(led4,LOW);
}
if (distance < 10) {
digitalWrite(led5, HIGH);
sound = 290;
}
else {
digitalWrite(led5,LOW);
}
if (distance < 5) {
digitalWrite(led6, HIGH);
sound = 300;
}
else {
digitalWrite(led6,LOW);
}
if (distance > 30 || distance <= 0){
Serial.println("***");
noTone(buzzer);
}
else {
Serial.print(distance); // выводит расстояние в сантиметрах
Serial.println(" cm"); // в мониторе последовательного порта
tone(buzzer, sound); // задает соответствующий тон пьезодинамика
}
delay(500); // задержка пол сикунды
}
|
Заключение
На основе Ультразвуковых датчиков можно сделать много полезных Arduino проектов. Один из них ультразвуковй дальномер с индикацией или проще говоря парктроник на Arduino. Вместо светодиодной индикации есть возможность использовать LCD, OLED дисплеи или семисегментный индикатор.
Крутой проект! Видел похожий для гаража с точечным дисплеем здесь http://ngin.pro/arduino/215-parktronik-dlya-garazha-na-arduino.html