Главная » Arduino
Призовой фонд
на январь 2017 г.
1. 5000 руб.
Академия Благородных Металлов
2. 1000 руб.
Radio-Sale
3. Регулируемый паяльник 60 Вт
Паяльник
4. 600 руб.
От пользователей
5. Тестер компонентов LCR-T4
Паяльник

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

Во время моего последнего визита к родителям, у меня возникли трудности парковки автомобиля (большой пикап) в их гараже. И у меня возникла идея сделать простенький стационарный парктроник для гаража. Я использовал контроллер 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

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
iMAX B6 - зарядное для Lion, LiPo, LiFe, Pb, NiCd и NiMH аккумуляторов UNI-T UT-61A
вверх