Уроки

Детектор скорости на основе Arduino

2 комментария

Небольшой проект с использованием Arduino Uno для определения скорости различных движущихся объектов с помощью двух ИК-датчиков.

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

Для создания детектора скорости нам понадобятся всего несколько деталей наряду с платой Arduino Uno.

  • Arduino UNO × 1
  • Светодиод (использовать с резистором) × 1
  • Резистор 100 Ом
  • ИК-датчик приближения × 2
  • Провода-перемычки
  • Кабель USB-A - Mini-USB

Для проекта я использовал сенсоры, купленные на Амазоне - OLatus OL-IR-SENSOR-READYMADE (ссылка):

Из программного обеспечения для работы нам понадобится Arduino IDE.

Схема соединения

Ниже приведена принципиальная схема нашего детектора скорости.

Прошу простить, схема общая, без резистора и в ней я поздно заметил, что провода немного перепутаны. Я использовал ИК-датчики, которые указаны в разделе компонентов.

Я бы однозначно предложил подключить к общему катоду светодиода резистор на 100 Ом. Но интересно, можно ли в теории подключить общий катод напрямую к GND вместо того, чтобы подключать его к контакту 11 и понижать его? Пишите в комментариях.

Итоговое устройство не в боксе выглядело так:

Код детектора

Код для нашего детектора скорости ниже. Загрузите его в Arduino после того, как вы собрали схему. sen1 - это первый датчик. sen2 - второй. ledPin - контакт к светодиоду RGB. Расстояние между моими датчиками составляло 7,5 см, но вы можете настроить под себя переменную speedconst.

int sen1=A0;
int sen2=A3;
int ledPin=9;
unsigned long t1=0;
unsigned long t2=0; 
float velocity;
float velocity_real;
float timeFirst;
float timeScnd;
float diff;
float speedConst=7.5;  //in cm.
void setup()
{
  Serial.begin(9600);
  pinMode(sen1,INPUT);
  pinMode(sen2,INPUT);
  analogWrite(11,LOW);
  analogWrite(10,HIGH);
}
  void loop()
  {
    if (analogRead(sen1)<500 && analogRead(sen2)>500)
    {
      timeFirst = millis();
      digitalWrite(ledPin, LOW);
      delay(30);
    }
 
  if (analogRead(sen2)>500 && analogRead(sen1)<500)
  {
    timeScnd = millis();
    diff = timeScnd - timeFirst; 
    velocity = speedConst / diff;
    velocity_real = (velocity*360)/100;     //milliseconds to hours and centimetres to kilometeres.
    delay(30);
    digitalWrite(ledPin, HIGH);
  Serial.print("\n the velocity is : ");
  Serial.println(velocity_real);
  Serial.print(" km/hr. ");
  delay(500);
  digitalWrite(ledPin,LOW);
  delay(500);
  }
  /*else if(analogRead(sen2)<500 && analogRead(sen1)<500)       //uncomment if you want to write it
  {
      Serial.print("\n Error:404/ the object is tooo big.");
  }*/
 /* else{Serial.print("\n error:404/no object detected ");}     //uncomment if you want to write it
  }

Итоговое видео

Это довольно простой, но интересный проект по измерению скорости, а также получению данных о скорости на последовательном мониторе ПК небольших объектов, таких как игрушечные машинки и т.п., скорость которых трудно измерить.

Оригинал

Поделиться
21 сентября 2020 в 14:09
Опубликовано:
Уроки, ,

2 комментария

  1. Владимир
    27 декабря 2020 в 10:46

    Ничего я не увидел кроме рекламы. И нафига приводить неправильную схему?

    Ответить
    1. Владимир Смирнов
      27 декабря 2020 в 15:32

      1. Ругаться плохо, много болезней от этого.
      2. Скажите, пожалуйста, если мы уберем рекламу вы готовы оплачивать работу людей — авторов, переводчиков, редакторов и т.д.?
      3. В чем «неправильность» схемы?

      Ответить

Добавить комментарий

Ваш E-mail не будет никому виден. Обязательные поля отмечены *