Главная » Arduino
Призовой фонд
на сентябрь 2017 г.
1. 1000 руб
PCBWay
2. Осциллограф DSO138
Паяльник
3. Тестер компонентов MG328
Паяльник
4. 100 руб.
От пользователей

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

Во время моего последнего визита к родителям, у меня возникли трудности парковки автомобиля (большой пикап) в их гараже. И у меня возникла идея сделать простенький стационарный парктроник для гаража. Я использовал контроллер Arduino Duemilanove и ультразвуковой датчик расстояния (Sonar Range Finder).

Материал:

Для того, чтобы сделать парктроник своими руками нам понадобится:

  • Контроллер Arduino (я использовал Duemilanove)
  • Ultrasonic Range Finder
  • Провода
  • Пластиковый бокс
  • 9В источник питания
  • Трехцветный светодиод
  • Клей
  • Макетная плата

Комплектующие

Сборка парктроника

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

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

/* Ping))) Sensor 
  

   Схема: 
    * +V выход датчика подсоединяется к +5V 
    * GND выход датчика подсоединяется к земле 
    * SIG выход датчика подсоединяется к цифровому выводу 7 
  
http://www.arduino.cc/en/Tutorial/Ping 
  
   created 3 Nov 2008 
   by David A. Mellis 
   modified 30 Jun 2009 
   by Tom Igoe 
  
   This example code is in the public domain. 
  
 */
  
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; 
} 

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

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

Теги:

Колтыков А.В. Опубликована: 2011 г. 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (9) | Я собрал (0) | Подписаться

0
Станислав #
А ещё можно не переводить миллисекунды в сантиметры. Программе, как и пользователю, всё-равно, при каких условиях зажигается определённый цвет. Можно сразу задать условия для срабатывания светодиода при определённой задержке пинга. Это, конечно, сократит код всего на пару строк, да и время высчитывать придётся, так что у обоих вариантов есть свои минусы. Я лишь предложил альтернативу
Ответить
+1
Slava #
Строки
pinMode(13, OUTPUT); // синий
pinMode(12, OUTPUT); // зеленый
pinMode(11, OUTPUT); // красный
необходимо внести в блок void setup()
и на 66 строке закрыть проверку условия, т.е. поставить }
Ответить
0
Юрий #
А на каком языке этот код? Вместо светодиодидов можно заставить пищать?
Ответить
0
vstrulev #
Привет. Это упрощенный вариант языка С для Ардуино плат. Не сложно изучить и огромное удовольствие еспользовать. Можно заставить запищать пьезо динамик, но из работающей машины проще увидить светодиод, чем услышать писк.
Ответить
0
Павел Орлов #
У нас не работает программа, почему? Кто сделал по этой программе?
Ответить
0
Владимир #
Дорогой автор. Через некоторое время как я начал баловаться с ардуино, я придумал точно такой же приборчик. Я сначала сделал дальномер на том же УЗ датчике, а потом мне пришла идея создания подобного прибора ибо и я и жена устали биться об железный столб, который защищает бойлер в нашем гараже. Когда увидел ваш проект, просто не повереил своим глазам. Код почти идентичен. Единственное схемка в моем проборчика самопальная и сделанна на attiny85 ибо у нее как раз 6 ножек програмируеммых, из 8 существующих. Не мог пройти мимо не оставив коментарий. Рад что встретил человека с таким же ходом мыслей. Удачи в дальнейшем изучении ардуино.
Ответить
0
vstrulev #
Только что до меня дошло что это перевод статьи другого автора и он не увидит мой коментарий. Ну да ладно.
Ответить
0
vitalij #
А на сколько эстетично это выглядит на авто? Давно хотел сделать, но смущает HC-SR04, с двумя выступами
Ответить
0
KblCb #
Очень эстетично. Авто вообще не трогается.
Об этом 2 раза в статье написано.
Это гаражный парктроник, в нем авто - препятствие.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Arduino UNO
Arduino UNO
UNI-T UT-61A LC-измеритель LC100-A
вверх