Система слежения за состоянием водителя

26 июня 2017
Наша редакция хочет познакомить вас с интересным проектом: «Современные системы содействия водителю (Advanced Driver Assistance Systems). ADAS в области безопасности транспортных средств. Система слежения за состоянием водителя».

Данный проект выполнил девятиклассник из города Борисоглебска Воронежской области Дмитрий Шамин под руководством учителя информатики Ольги Владимировны Степаненко.

Давайте сразу перейдем к практической части, а в конце материала будет ссылка и на теоретическую часть.

Инструкция по разработке проекта

При разработке данного устройства были использованы Arduino IDE (1.6.11) и программа электронного прототипирования Fritzing (0.9.3b).

Загрузить Arduino IDE можно по ссылке

Загрузить Fritzing можно по ссылке

Что необходимо:

  • 10 проводов «папа-папа».
  • 1 ультразвуковой дальномер (в нашем случае использовался HC-SR04).
  • 1 доска для прототипирования.
  • 1 микроконтроллер Arduino/Genuino (в нашем случае Arduino Uno).

Процесс сборки

Шаг 1


Рисунок 1. Начало работы.

Перед началом работы следует отключить микроконтроллер от всех источников питания.

Один ряд контактов на доске прототипирования следует подключить к выходу GND микроконтроллера, другой ряд к выходу 5V, как показано на рисунке 1. Для упрощения, в дальнейшем эти ряды будут обозначаться как ряд 5V и ряд GND.

Шаг 2

Теперь следует подключить ультразвуковой дальномер, изображение которого и обозначения контактов приведены на рисунке 2. Обозначения слева - направо: Gnd, Echo, Trig, Vcc(VCC).


Рисунок 2. Ультразвуковой дальномер HC-SR04.

Для начала следует вставить контакты дальномера в доску для прототипирования. Затем для подключения питания следует соединить контакт GND с рядом GND, а контакт Vcc(VCC) с рядом V. Подключенный к питанию дальномер изображен на рисунке 3.


Рисунок 3. Подключение дальномера к питанию.

Для завершения подключения следует соединить Echo с ~3, а Trig с 2, у дальномера и микроплаты соответственно. Результат соединения приведён на рисунке 4.


Рисунок 4. Подключение дальномера к микроплате.

Шаг 3

Теперь следует подключить диод, изображение которого и обозначения контактов приведены на рисунке 5. Контакты слева - направо: Vcc(VCC), Gnd.


Рисунок 5. Диод.

Для начала следует вставить контакты диода в доску для прототипирования. Затем для подключения питания следует соединить контакт GND с рядом GND, а другой контакт с портом ~9. Подключенный к питанию диод изображен на рисунке 6.


Рисунок 6. Подключенный диод.

Затем следует подключить пьезоэлемент (динамик). Соединять его с платой следует следующим образом: контакт GND с рядом GND, а другой контакт с портом ~5. Результат соединения приведён на рисунке 7.


Рисунок 7. Подключенный пьезоэлемент.

Итоговым результатом всех шагов является полностью собранный макет секундомера, который изображен на рисунке 8.


Рисунок 8. Итоговый результат.

Листинг скетча

  const int trigPin = 2;
const int echoPin = 3;
const int ledPin = 9;
const int soundPin = 5;

unsigned int commonDistance = 0;//в этой переменной хранится средняя дистанция до объекта
unsigned int timeMS = 0;//переменная, которая будет использована для расчета расстояния до объекта
unsigned int distanceCM = 0;//переменная, которая будет использована для расчета расстояния до объекта

int delta = 15;//переменная, которая показывает допустимое отклонение нахождения объекта от среднего расстояния до него

void setup()
{
//инициализируем входы и выходы
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(soundPin, OUTPUT);
//задаем скорость обмена информацией с компьютером равную 9600 бод
Serial.begin(9600);


//производим первичный замер расстояния от прибора до тела/головы человека
int i = 0, count = 10;
while (i {
digitalWrite(trigPin, HIGH);//подаем сигнал на порт trigPin
delayMicroseconds(10); //который подается 10 микросекунд
digitalWrite(trigPin, LOW); //прекращаем подачу сигнала на порт trigPin
timeMS = pulseIn(echoPin, HIGH); //замеряем время сигнала
commonDistance += timeMS / 58; //рассчитываем расстояние до объекта
i++;
delay(100);
}
commonDistance /= count;//вычисляем среднее расстояние до объекта
}

void loop()
{
digitalWrite(trigPin, HIGH);//подаем сигнал на порт trigPin
delayMicroseconds(10); //который подается 10 микросекунд
digitalWrite(trigPin, LOW); //прекращаем подачу сигнала на порт trigPin
timeMS = pulseIn(echoPin, HIGH); //замеряем время сигнала
distanceCM = timeMS / 58; //рассчитываем расстояние до объекта

if ((distanceCM commonDistance - delta) && (distanceCM > 5)) // смотрим на то, насколько отклонилось значение расстояния до объекта и ничего не перекрывает обзор дальномеру
{
//если расстояния до объекта в пределах нормы
noTone(soundPin); //пьезопищалка не издает звук
digitalWrite(ledPin, LOW); //диод не горит
}
else
{
//если расстояния до объекта не в пределах нормы
tone(soundPin, 1000);//пьезопищалка издает звук издает звук равный 1кГц
digitalWrite(ledPin, HIGH); //диод горит
}
delay(100);

}

В результате работы над проектом нами было создано устройство слежения за состоянием водителя, которое звуковым и световым сигналом предупреждает водителя о том, что он засыпает за рулём (см. фото).

Теоретическая часть

Комментарии

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