У многих автолюбителей иногда возникают трудности во время парковки в тесном гараже. Это происходит по разным причинам. К примеру, из-за недостатка мастерства, отсутствия видимости препятствий (особенно при парковке задним ходом) или больших габаритов автомобиля. Чтобы избежать проблем, стоит установить в гараже простой неперемещаемый парктроник. Его можно изготовить на основе платформы ArduinoDuemilanove и двух сенсоров SonarRangeFinder, измеряющих дистанцию с помощью ультразвука.
Для сборки понадобятся следующие компоненты:
- Платформа Arduino Duemilanove;
- Ультразвуковые датчики SonarRangeFinder;
- Пластиковая коробка;
- Источник питания 9В;
- Макетная плата;
- Светодиод с тремя цветами;
- Клей или силиконовый герметик;
- Провода.
Сборка устройства:
- Наклеить плату на дно бокса, используя клей или силиконовый герметик. Запитать платформу Arduino любым из возможных способов.
- Запитать ультразвуковой сенсор (5В).
- Чтобы посылать импульсы на сенсор и считывать их, нужно подсоединить вывод датчика с обозначением SIG к выводу 7 контроллера Arduino.
- Далее необходимо выяснить, за какой цвет отвечают ножки трехцветного светодиода. Присоединить их к выводам 11 (красный цвет), 12 (зеленый) и 13 (синий) контроллера.
- После требуется протестировать программу, описанную ниже. Убедившись, что она работает правильно, можно прикрепить сенсор к стене гаража или к препятствию, которое может повредить автомобиль, а светодиод разместить таким образом, чтобы его было видно во время парковки.
Описание программы
В программном обеспечении для контроллеров Arduino уже имеется пример для настройки ультразвуковых сенсоров. Сперва необходимо его открыть (File ->Examples ->Sensors ->Pingexample). Затем нужно нажать File ->NewProject (создание нового проекта), скопировать в него содержание примера, переименовать и сохранить.
Далее, надо приступить к изменению кода программы.
Сначала требуется установить значение интервала импульсов, посылаемых на датчик равным 1 секунде. Ставить меньшую задержку нет необходимости.
delay(1000);
Далее, мы должны установить номера выводов для светодиода. Для этого перед строкой
const int pingPin = 7;
добавляется
pinMode(13, OUTPUT); // синий
pinMode(12, OUTPUT); // зеленый
pinMode(11, OUTPUT); // красный
Теперь определяются расстояния, при которых загорается свет соответствующего цвета. Необходимо задать следующие значения:
- Свыше 60 см от препятствия светодиод будет гореть зеленым;
- Менее 60 см от препятствия светодиод будет гореть синим;
- Менее 15 см от препятствия светодиод будет гореть красным.
Код будет выглядеть таким образом:
cm = microsecondsToCentimeters(duration);
// show LED colors
if(cm > 0 && cm <= 15) {
// горит красный цвет
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
} else if(cm <= 60 && cm > 15) {
// горит голубой
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(13, HIGH);
} else {
// горит зеленый цвет
digitalWrite(13, LOW);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
}
Код, приведенный выше, контролирует выходы платформы, которые отвечают за свечение светодиода определенным цветом в зависимости от расстояния до автомобиля. Эта дистанция определяется ультразвуковым датчиком.
Окончательно код выглядит так:
* +V выход датчика подсоединяется к +5V
* GND выход датчика подсоединяется к земле
* SIG выход датчика подсоединяется к цифровому выводу 7
*/
pinMode(13, OUTPUT); // синий
pinMode(12, OUTPUT); // зеленый
pinMode(11, OUTPUT); // красный
const int pingPin = 7;
void setup() {
Serial.begin(9600);
}
void loop()
{
long duration, cm;
// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
// конвертируем время в расстояние
cm = microsecondsToCentimeters(duration);
// показ определенного цвета, в зависимости от расстояния
if(cm > 0 && cm <= 15) {
// горит красный цвет
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
} else if(cm <= 60 && cm > 15) {
// горит голубой
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(13, HIGH);
} else {
// горит зеленый цвет
digitalWrite(13, LOW);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(1000);
}
long microsecondsToCentimeters(long microseconds)
{
// Скорость звука 340 м/с или 29 мкс на сантиметр.
// Во время измерения расстояния волна проходит туда и обратно,
// поэтому нужно еще поделить пополам полученное значение от датчика
return microseconds / 29 / 2;
}
Прикрепленные файлы: КОД ПРОГРАММЫ
Автор: David A. Mellis