Парктроник на 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);
    }
  }
}

Исходый код можно также скачать в виде файла:



Реклама