Парктронік своїми руками

Під час мого останнього візиту до батьків у мене виникли труднощі з паркуванням автомобіля (великого пікапа) у їхньому гаражі. І в мене виникла ідея зробити простенький стаціонарний парктронік для гаража. Я використовував контролер Arduino Duemilanove та ультразвуковий датчик відстані (Sonar Range Finder).

Матеріали:

Щоб зробити парктронік своїми руками, нам знадобиться:

Комплектуючі

Збірка парктроніка

1. Приклейте плату Arduino до дна ящика за допомогою клею або силікону та підведіть живлення до контролера.

Монтаж контролера в бокс

2. Підключіть живлення ультразвукового датчика 5В.

Живлення УЗ датчика

3. Підключіть вихід ультразвукового датчика "SIG" до виходу ШІМ Arduino (це потрібно, щоб ми могли надсилати імпульси в датчик, а потім зчитувати їх повернення). Я використав вихід 7 контролера.

4. Перед підключенням тривколірного світлодіода визначте, які ноги за який колір відповідають. Червоний, зелений і синій я під'єднав відповідно до 11, 12 і 13 виходу Arduino.

Підключення світлодіода

5. Тепер лишилося написати програму. Після тестування ПЗ, якщо все нормально працює, закріпіть датчик на стіні вашого гаража, а світлодіод виведіть у зручне для вас місце.

Програма

На щастя, програмне забезпечення Arduino вже містить приклад для роботи з ультразвуковим датчиком. Приклад знаходиться: File -> Examples -> Sensors -> Ping example. Відкрийте цей приклад і скопіюйте весь код у новий проект. Назвіть його якось (наприклад, Parking Example) та збережіть.

Внесемо деякі зміни в програму. Для початку ми збільшимо інтервал посилок до датчика, оскільки нам не потрібно надсилати сигнал кожні 100 мс, достатньо і 1 секунди.

delay(1000);

Далі, ми повинні встановити номери виходів для світлодіода. Для цього перед рядком

const int pingPin = 7;

додайте:

pinMode(13, OUTPUT); // синій
pinMode(12, OUTPUT); // зелений
pinMode(11, OUTPUT); // червоний

Тепер ми повинні визначити, на якій відстані, які кольори світлодіода будуть показуватися. Наприклад, я зробив так: далі ніж 60 см від стіни горить зелений колір, коли залишається менше 60 см, загорається синій колір, а коли до стіни залишається менше 15 см - загорається червоний колір.

Наш код з урахуванням вищевказаних обчислень буде таким:

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); 
  }

Вищевказаний код управляє виходами Arduino для індикації певного кольору світлодіода, залежно від дистанції до перешкоди (в даному випадку автомобіль), яку визначив ультразвуковий датчик. Наш кінцевий код виглядатиме наступним чином:

/* Ping))) Sensor 

   Схема: 
    * +V вихід датчика підключається до +5V 
    * GND вихід датчика підключається до землі 
    * SIG вихід датчика підключається до цифрового виходу 7 
  
http://www.arduino.cc/en/Tutorial/Ping 
  
   створено 3 листопада 2008 
   Давидом А. Меллісом 
   змінено 30 червня 2009 
   Томом Ігое 
  
   Цей приклад коду є у публічному домені. 
  
 */
  
pinMode(13, OUTPUT); // синій 
pinMode(12, OUTPUT); // зелений 
pinMode(11, OUTPUT); // червоний 
const int pingPin = 7; 
  
void setup() { 
  Serial.begin(9600); 
}  
  
void loop() 
{ 
  long duration, cm; 
  
  // ПИНГ))) активується високим імпульсом тривалістю 2 або більше мікросекунд. 
  // Дайте короткий низький імпульс перед цим, щоб забезпечити чистий високий імпульс: 
  pinMode(pingPin, OUTPUT); 
digitalWrite(pingPin, LOW); 
delayMicroseconds(2); 
digitalWrite(pingPin, HIGH); 
delayMicroseconds(5); 
digitalWrite(pingPin, LOW); 
  
  // Той же пін використовується для зчитування сигналу з ПИНГУ))) : високий 
  // імпульс, тривалість якого є часом (в мікросекундах) від відправлення 
  // пінгу до отримання його еха від об'єкта. 
  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("см"); 
  Serial.println(); 
  
delay(1000); 
} 
  
long microsecondsToCentimeters(long microseconds) 
{ 
  // Швидкість звуку 340 м/с або 29 мкс на сантиметр.
  // Під час вимірювання відстані хвиля проходить туди і назад, 
  // тому потрібно ще поділити отримане значення від датчика на два
  return microseconds / 29 / 2; 
} 

Фото готового парктроніка

Оригінал статті

Top