цифровая электроника
вычислительная техника
встраиваемые системы

 

Простейший парктроник на Arduino своими руками

Автор: Mike(admin) от 14-02-2018, 17:35

Мы предпочитаем быть настороже в процессе ответственного дела, нежели сталкиваться с последствиями в результате нашей неаккуратности. Это относится и к парковке автомобиля, когда нужно аккуратно припарковаться в довольно узкой области, не задев при этом рядом стоящие объекты, включая другие автомобили. И в таких случаях «профилактика лучше, чем лечение».


Простейший парктроник на Arduino своими руками

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


Данный парктроник спроектирован таким образом, что подает звуковой сигнал и условно сообщает о дистанции до объекта с помощью светодиодного индикатора, состоящего из восьми светодиодов. В кочестве датчика расстояния здесь используется ультразвуковой модуль HC-SR04. Схема подключения элементов самодельного парктроника показана ниже.


Простейший парктроник на Arduino своими руками

Модуль ультразвукового приемопередатчика HC-SR04 используется для определения расстояния от препятствия до автомобиля. Модуль выдает точное значение расстояния в диапазоне от 2 см до 400 см. Тот факт, что он обеспечивает точные и стабильные показания, делает его более подходящим элементом для использования в данном случае. Когда линия 2 (TRI) модуля получает «высокий» импульс в течение периода более 10 мкс, только тогда можно вычислить расстояние. Далее происходит проверка наличия препятствия путем запуска модуля для отправки восьми циклов ультразвуковых импульсов на частоте 40 кГц, после чего устройство ждет, пока не будет получен отраженный ультразвуковой сигнал. Как только это произойдет, эхо-сигнал (контакт 3) модуля устанавливается в высокий логический уровень. Период ожидания отраженного импульса полностью зависит от расстояния, на котором находится препятствие. Когда время ожидания определено, можно рассчитать расстояние, используя следующую формулу: расстояние (в сантиметрах) = T / 58. Здесь T = ширина импульса на эхо-сигнале в микросекундах.


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


#define LEDPin 13
#define LED0 2 
#define LED1 3 
#define LED2 4 
#define LED3 5 
#define LED4 6 
#define LED5 7
#define LED6 8 
#define LED7 9


int maximumRange = 200; // Максимальное расстояние
int minimumRange = 0; // Минимальное расстояние

#define triggerpin 10 // Линия для подключения триггерного сигнала датчика
#define echopin 11  // Линия для подключения эхо-сигнала датчика
#define tonePin 12    // Линия для подключения динамика 

long duration; 
long distanceCm, distance;

void setup()  
{

  pinMode(triggerpin, OUTPUT);
  pinMode(echopin, INPUT);
  pinMode(tonePin, OUTPUT); 
  pinMode(LED0, OUTPUT);
  pinMode(LED1, OUTPUT); 
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT);
  pinMode(LEDPin, OUTPUT);
  Serial.begin (9600);
}
void loop()
{
  Serial.println("Program Start");
  distanceCm=0;
  for(int i=0;i<10;i++)
  {
    digitalWrite(triggerpin,LOW);
    delayMicroseconds(2);

    digitalWrite(triggerpin, HIGH);
    delayMicroseconds(10);

    digitalWrite(triggerpin,LOW);
    delayMicroseconds(2);

    duration = pulseIn(echopin, HIGH);
    distance = microsecondsToCentimeters(duration);
    distanceCm=distanceCm+distance;
  }
  distanceCm=distanceCm/10;
 if (distance >= maximumRange || distance <= minimumRange){

    Serial.println("Out of range");
    digitalWrite(LEDPin, HIGH);
    
      digitalWrite(LED0,LOW);
      digitalWrite(LED1,LOW); 
      digitalWrite(LED2,LOW);
      digitalWrite(LED3,LOW);
      digitalWrite(LED4,LOW);
      digitalWrite(LED5,LOW);
      digitalWrite(LED6,LOW);
      digitalWrite(LED7,LOW);
      digitalWrite(tonePin,LOW);
  }
  else {
    Serial.print(distanceCm);
    Serial.println(" cm");



    if(distanceCm<=200.00 && distanceCm>175.00)  

    {
      Serial.println("if1start");
      digitalWrite(LED0,HIGH);
      digitalWrite(LED1,LOW); 
      digitalWrite(LED2,LOW);
      digitalWrite(LED3,LOW);
      digitalWrite(LED4,LOW);
      digitalWrite(LED5,LOW);
      digitalWrite(LED6,LOW);
      digitalWrite(LED7,LOW);
      digitalWrite(tonePin,LOW); 
      delay(100);     
    }

    else if (distanceCm<=175.00 && distanceCm>150.00) 
    { 
      Serial.println("if2start");
      digitalWrite(LED0,HIGH);
      digitalWrite(LED1,HIGH); 
      digitalWrite(LED2,LOW);
      digitalWrite(LED3,LOW);
      digitalWrite(LED4,LOW);
      digitalWrite(LED5,LOW); 
      digitalWrite(LED6,LOW);
      digitalWrite(LED7,LOW);
      digitalWrite(tonePin,LOW);
      delay(100);
    }

    else if (distanceCm<=150.00 && distanceCm>125.00) 
    {
      Serial.println("if3start");
      digitalWrite(LED0,HIGH);
      digitalWrite(LED1,HIGH);
      digitalWrite(LED2,HIGH);
      digitalWrite(LED3,LOW);
      digitalWrite(LED4,LOW);
      digitalWrite(LED5,LOW); 
      digitalWrite(LED6,LOW);
      digitalWrite(LED7,LOW);
      digitalWrite(tonePin,LOW);
      delay(100);
    }

    else if(distanceCm<=125.00 && distanceCm>100.00) 
    {
      Serial.println("if4start");
      digitalWrite(LED0,HIGH);
      digitalWrite(LED1,HIGH); 
      digitalWrite(LED2,HIGH);
      digitalWrite(LED3,HIGH);
      digitalWrite(LED4,LOW);
      digitalWrite(LED5,LOW); 
      digitalWrite(LED6,LOW);
      digitalWrite(LED7,LOW);
      digitalWrite(tonePin,LOW);
      delay(100);
    }

    else if(distanceCm<=100.00 && distanceCm>75.00) 
    {
      Serial.println("if5start");
      digitalWrite(LED0,HIGH);
      digitalWrite(LED1,HIGH); 
      digitalWrite(LED2,HIGH);
      digitalWrite(LED3,HIGH);
      digitalWrite(LED4,HIGH);
      digitalWrite(LED5,LOW); 
      digitalWrite(LED6,LOW);
      digitalWrite(LED7,LOW);
      digitalWrite(tonePin,LOW);
      delay(100);
    }

    else if(distanceCm<=75.00 && distanceCm>50.00) 
    {
      Serial.println("if6start");
      digitalWrite(LED0,HIGH);
      digitalWrite(LED1,HIGH); 
      digitalWrite(LED2,HIGH);
      digitalWrite(LED3,HIGH);
      digitalWrite(LED4,HIGH);
      digitalWrite(LED5,HIGH);
      digitalWrite(LED6,LOW);
      digitalWrite(LED7,LOW);
      digitalWrite(tonePin,LOW);
      delay(100);
    }

    else if(distanceCm<=50.00 && distanceCm>25.00) 
    {
      Serial.println("if7start");
      digitalWrite(LED0,HIGH);
      digitalWrite(LED1,HIGH); 
      digitalWrite(LED2,HIGH);
      digitalWrite(LED3,HIGH);
      digitalWrite(LED4,HIGH);
      digitalWrite(LED5,HIGH); 
      digitalWrite(LED6,HIGH);
      digitalWrite(LED7,LOW);
      digitalWrite(tonePin,LOW);
      delay(100);
    }

    else if(distanceCm<=25.00 && distanceCm>0.00) 
    {
      Serial.println("if8start");
      digitalWrite(LED0,HIGH);
      digitalWrite(LED1,HIGH); 
      digitalWrite(LED2,HIGH);
      digitalWrite(LED3,HIGH);
      digitalWrite(LED4,HIGH);
      digitalWrite(LED5,HIGH); 
      digitalWrite(LED6,HIGH);
      digitalWrite(LED7,HIGH);
      digitalWrite(tonePin,HIGH);
      delay(500);
      
    }

    
  }
  //delay(10);
}

long microsecondsToCentimeters(long microseconds)
{
  // Скорость звука равна 340 м/с или 29 микросекунд в сантиметр.
  // Поскольку волна идет туда и обратно, то нужно будет поделить на 2
  return microseconds / 29 / 2; 
}

Простой парктроник можно сделать и без Arduino, как это описано здесь.


Теги: Arduino, авто, парктроник




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий