Создадим устройство, которое отслеживает, сколько людей входит и выходит из комнаты, и предупреждает если людей слишком много.
Компоненты
Для создания счетчика посетителей или посещений комнаты или помещения нам понадобится следующий набор компонентов:
- Arduino Nano Every × 1
- Макет (универсальный) × 1
- Ультразвуковой датчик HC-SR04 × 2
- TM1637 4-значный дисплей × 1
- Зуммер × 1
- Перемычки × 1
- Кабель USB-A к Micro-USB × 1
- Гайка и болтик диаметром 5 мм × 2
Чтобы сэкономить место, можно отсоединить шину питания и использовать только её вместо всего макета.
Программные приложения и онлайн-сервисы:
Ручные инструменты:
- Горячий клеевой пистолет
- 3D-принтер
Вы можете создать корпус из легко доступных материалов, таких как, например, картон. Это не принципиально.
Описание
В условиях, когда пандемия коронавируса все еще остается большой проблемой, особенно важно практиковать социальное дистанцирование и держаться подальше от других. Однако это трудно сделать в закрытых и переполненных помещениях.
Здесь может помочь счетчик занятости помещения. Он отслеживает количество людей в помещении или здании, увеличивая счетчик, когда люди входят, и уменьшая счетчик, когда люди выходят.
Как только количество людей в помещении превысит максимальное разрешенное количество (которое может быть установлено пользователем), сигнал тревоги будет срабатывать до тех пор, пока количество людей снова не окажется в пределах нормы.
Это может предотвратить переполненность зданий и комнат, что может помочь ограничить распространение вируса, упростив практику социального дистанцирования.
Схема соединения
Все наши комплектующие и компоненты для нашего устройства отслеживания количества посетителей соединяем согласно схеме ниже:
Код проекта
С помощью IDE Arduino мы загружаем наш код ниже на плату:
int maxPeople = 5; // максимальное количество людей, разрешенных до срабатывания сигнализации
int sensitivity = 5; // более низкие значения сделают его более чувствительным, а более высокие - менее чувствительным.
//---------------------------------------------------
#include <TM1637.h>
int currentPeople = 0;
int buzzer = 8;
TM1637 tm(2,3);
int sensor1[] = {4,5};
int sensor2[] = {6,7};
int sensor1Initial;
int sensor2Initial;
String sequence = "";
int timeoutCounter = 0;
void setup() {
// настройки
Serial.begin(9600);
pinMode(buzzer, OUTPUT);
tm.init();
tm.set(2);
delay(500);
sensor1Initial = measureDistance(sensor1);
sensor2Initial = measureDistance(sensor2);
}
void loop() {
// Считывание ультразвуковых датчиков
int sensor1Val = measureDistance(sensor1);
int sensor2Val = measureDistance(sensor2);
// Обработка данных
if(sensor1Val < sensor1Initial - 30 && sequence.charAt(0) != '1'){
sequence += "1";
}else if(sensor2Val < sensor2Initial - 30 && sequence.charAt(0) != '2'){
sequence += "2";
}
if(sequence.equals("12")){
currentPeople++;
sequence="";
delay(550);
}else if(sequence.equals("21") && currentPeople > 0){
currentPeople--;
sequence="";
delay(550);
}
// Сбрасываем последовательность, если она недействительна или таймауты
if(sequence.length() > 2 || sequence.equals("11") || sequence.equals("22") || timeoutCounter > 200){
sequence="";
}
if(sequence.length() == 1){ //
timeoutCounter++;
}else{
timeoutCounter=0;
}
// Вывести значения на последовательный монитор
Serial.print("Seq: ");
Serial.print(sequence);
Serial.print(" S1: ");
Serial.print(sensor1Val);
Serial.print(" S2: ");
Serial.println(sensor2Val);
// Отображение текущего количества людей на 4-значном дисплее
tm.display(3, currentPeople % 10);
int pos2 = currentPeople / 10;
tm.display(2, pos2 % 10);
int pos1 = pos2 / 10;
tm.display(1, pos1 % 10);
int pos0 = pos1 / 10;
tm.display(0, pos0 % 10);
// Если количество людей слишком велико, включить зуммер
if(currentPeople > maxPeople){
tone(buzzer, 1700);
}else{
noTone(buzzer);
}
}
// Возвращает расстояние ультразвукового датчика, которое передается
//a[0] = echo, a[1] = trig
int measureDistance(int a[]) {
pinMode(a[1], OUTPUT);
digitalWrite(a[1], LOW);
delayMicroseconds(2);
digitalWrite(a[1], HIGH);
delayMicroseconds(10);
digitalWrite(a[1], LOW);
pinMode(a[0], INPUT);
long duration = pulseIn(a[0], HIGH, 100000);
return duration / 29 / 2;
}
Собираем устройство
1. Соберите устройство на основе схемы выше. Чтобы сэкономить место, отсоедините шину питания от макетной платы и используйте ее вместо всей макетной платы. Также подключите USB-кабель на данном этапе.
2. Распечатайте на 3D-принтере файлы корпуса, которые можно скачать ниже:
В качестве альтернативы можно сделать аналогичный корпус из легкодоступных материалов, например, из картона.
3. Горячим способом приклейте ультразвуковые датчики к той части корпуса, которая выходит наружу. Между датчиками должно быть расстояние примерно 40 мм.
4. Горячим способом приклейте дисплей и зуммер к крышке. Затем поместите оставшуюся часть устройства в корпус и закрутите крышку.
Чтобы помочь сэкономить место, поместите макетную плату под Arduino и между пинами:
Программное обеспечение
1. Скопируйте код, представленный выше в Arduino IDE.
2. В Arduino IDE измените переменную maxPeople
в строке 1 на максимальное количество людей, которым вы хотите разрешить находиться в помещении одновременно, прежде чем сработает сигнал о переполнении.
2. Установите библиотеку TM1637 в Arduino IDE.
Вы можете её скачать с нашего сайта по этой ссылке. Либо перейдите в раздел "Эскиз/Скетч -> Включить библиотеку -> Управление библиотеками" (англ. - Sketch -> Include Library -> Manage Libraries).
Введите "TM1637" в строке поиска, затем установите первый появившийся результат.
4. Загрузите код на устройство.
Видео
На этом всё. Будьте здоровы и оптимистичны.
27 января 2021 в 19:36
Добрый день,
нам очень нужно решение по подсчету количества людей в комнате с сигналом о превышении лимита. Подскажите сколько стоит такое решение?