Парктроник на Arduino
Arduino — универсальная аппаратно-программная платформа, на которой можно создавать много интересных и полезных вещей. В данной статье показано изготовление парктроника на Arduino, отличительной особенностью которого является изменение интенсивности индикации, по мере приближения к препятствию.
Для протитипирования парктроника на макетной плате используются следующие компоненты:
- 1 х Arduino Uno (или аналогичная);
- 1 х Ультразвуковой дальномер HC-SR04;
- 1 х Пьезоэлемент (пьезодинамик, «пищалка»);
- 2 х Светодиод (желательно разного цвета);
- 2 х Резистор (приблизительно 220 Ом);
- 12 х Провод папа-папа;
- 1 х Макетная плата.
Схема подключения
Схема подключения показана на картинке:
Открыть в новом окне
Скетч
Исходный код программы представлен ниже:
#define N 2
int echoPin = 11;
int trigPin = 12;
int buzzerPin = 4;
// Количество светодиодов можно поставить любое, достаточно дописать их пины в массив и записать их количество в константу N
int ledPin[N] = {2, 3};
int led = 0;
int cm = 0;
int ms = 0;
int pause = 0;
// Интервал высчитывает частоту индикации с помощью уравнения прямой. Здесь интервал частоты индикации задан так: 250 мс на расстоянии 0 см, 600 мс на расстоянии 50 см).
float inteval[2][2] = { {0, 250}, {50, 600} };
void setup() {
for (int i = 0; i < N; i++) {
pinMode(ledPin[i], OUTPUT);
}
pinMode(buzzerPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
int duration;
ms++;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
cm = duration / 58;
if (cm > inteval[1][0]){
digitalWrite(buzzerPin, LOW);
for (int i = 0; i < N; i++) {
digitalWrite(ledPin[i], LOW);
}
} else {
pause = ((cm - inteval[0][0]) / (inteval[1][0] - inteval[0][0]) * (inteval[1][1] - inteval[0][1]) + inteval[0][1]);
if (ms >= pause){
ms = 0;
digitalWrite(buzzerPin, HIGH);
digitalWrite(ledPin[led], LOW);
(led + 1 >= N) ? led = 0 : led++;
digitalWrite(ledPin[led], HIGH);
digitalWrite(buzzerPin, LOW);
}
}
}
Исходый код можно также скачать в виде файла: