В этом проекте мы сделаем двунаправленный счетчик посетителей с автоматической системой управления освещением с использованием платы Arduino. Этот проект основан на паре инфракрасных датчиков, которые обнаруживают прерывание при обнаружении препятствия. Пара ИК-датчиков может определять посетителей с обоих направлений, т. е. количество вошедших посетителей и количество вышедших посетителей.
Этот проект двунаправленного счетчика посетителей Arduino можно использовать для подсчета количества людей, входящих в зал, торговый центр, офис, а также для работы на входных воротах. Его также можно использовать на воротах парковок и других общественных местах. Устройство подсчитывает общее количество людей, входящих через ворота, а также общее количество людей, выходящих через те же ворота. И, наконец, оно подсчитывает общее количество людей, находящихся в данный момент в помещении. Когда в помещении нет людей, т. е. общее количество людей равно нулю, свет в помещении выключается . Когда в помещении обнаруживается хотя бы один человек, свет включается. Система управления освещением работает автоматически в зависимости от присутствия посетителей.
Мы можем сделать весь проект, используя одну плату Arduino Nano. Мы можем использовать ЖК-дисплей 16×2, чтобы показать количество посетителей. Но вы можете предпочесть 0,96-дюймовый OLED-дисплей для проекта. Одноканальное реле 5 В активируется, когда внутри помещения обнаруживается человек. Свет включается автоматически, и он подключен к реле.
Ранее на нашем сайте мы уже рассматривали аналогичный проект автоматического счетчика посетителей и контроля света в комнате на Arduino, но, возможно, рассматриваемый в этой статье проект покажется вам более интересным - он более презентабельный и для него есть файл для изготовления печатной платы, что позволит собрать вам его в компактном виде.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- Инфракрасный датчик – 2 шт. (купить на AliExpress).
- Модуль OLED дисплея SSD1306 128×64 с интерфейсом I2C (купить на AliExpress).
- Модуль реле на 5 В (купить на AliExpress).
- Источник питания постоянного тока 5 В.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
ИК-датчик как детектор посетителей
Основным элементом этого проекта является ИК-датчик , который работает как детектор человека. Всякий раз, когда ИК-датчик обнаруживает прерывание, он подсчитывает человека и добавляет его к предыдущему значению. Инфракрасные датчики широко применяются в таких проектах как движущиеся вдоль линии роботы, роботы-пылесосы, спидометры, тахометры и т.п.
Модуль ИК-датчика обладает большой адаптивной способностью к окружающему освещению. Он имеет инфракрасный передатчик и приемник. Инфракрасный излучающий диод излучает определенную частоту, которая при столкновении с препятствием отражается обратно. Отраженный сигнал затем принимается приемным фотодиодом. Помимо ИК-передатчика и приемника схема также состоит из операционного усилителя, переменного резистора (подстроечного резистора) и выходного светодиода .
Датчик состоит из следующих частей.
1. ИК-светодиодный передатчик
ИК-светодиод излучает свет в диапазоне инфракрасных частот с длиной волны 700 нм - 1 мм. ИК-светодиоды имеют угол излучения света приблизительно 20-60 градусов и имеют дальность действия до 5-10 см. ИК-светодиод белого или прозрачного цвета, поэтому он может излучать максимальное количество света.
2. Фотодиодный приемник
Фотодиод действует как ИК-приемник , поскольку проводит свет, когда на него падает свет. Фотодиод выглядит как светодиод с черным покрытием на внешней стороне. Черный цвет поглощает наибольшее количество света.
3. Операционный усилитель LM358
LM358 — это операционный усилитель (Op-Amp), который используется в качестве компаратора напряжения в ИК-датчике. Схема компаратора сравнивает пороговое напряжение, установленное с помощью предустановки, и напряжение последовательного резистора фотодиода. Когда падение напряжения последовательного резистора фотодиода больше порогового напряжения, выходной сигнал операционного усилителя высокий. Аналогично, когда падение напряжения последовательного резистора фотодиода меньше порогового напряжения, выходной сигнал операционного усилителя низкий.
Когда выход операционного усилителя высокий, светодиод на выходной клемме включается. Это указывает на обнаружение объекта или препятствия.
4. Переменный резистор
Переменный резистор, используемый в этом датчике, имеет предустановленную настройку. Он используется для калибровки диапазона расстояний, на котором должен быть обнаружен объект.
Схема проекта
Аппаратная часть проекта очень проста в сборке. Нам просто нужно подключить пару ИК-датчиков , OLED-дисплей и 5-вольтовый модуль реле к плате Arduino. Схема двунаправленного счетчика посетителей с автоматическим управлением освещением на основе платы Arduino приведена на следующем рисунке.
Вы можете собрать вышеуказанную схему на макетной плате. Подключите контакты I2C OLED-дисплея, т. е. SDA и SCL, к контактам A4 и A5 платы Arduino соответственно. Для OLED-дисплея требуется 3,3 В VCC. Аналогично подключите цифровой выходной вывод пары ИК-датчиков к контактам 2 и 3 платы Arduino. Вы можете включить ИК-датчик либо через 3,3 В, либо через 5 В. Модуль реле должен управляться через цифровой контакт Arduino. Поэтому подключите его входной контакт к цифровому контакту 5 платы Arduino. Реле также требуется питание 5 В.
Проектирование печатной платы
Если вы не хотите собирать схему на макетной плате, то вот схема для вас. Вы можете использовать схему ниже, чтобы спроектировать собственную печатную плату. Я использовал EasyEDA, онлайн-инструмент для проектирования схем и печатных плат, чтобы нарисовать схему.
После разработки схемы для двунаправленного счетчика посетителей на Arduino, вы можете преобразовать схему в печатную плату. Печатная плата выглядит примерно так, как показано на рисунке ниже.
Скачать файл для изготовления печатной платы вы можете по ссылке ниже.
Загрузить файл Gerber: Печатная плата счетчика посетителей
После изготовления качество печатной платы оказалось превосходное, ее финишная обработка была очень высокого качества.
Затем я собрал все компоненты на печатной плате. Печатная плата вместе с установленным компонентом составляет окончательное оборудование, которое необходимо протестировать вместе с кодом. Конструкция проекта в сборе показана на следующем рисунке.
Исходный код программы Arduino
Исходный код Arduino для двунаправленного счетчика посетителей с автоматической системой управления освещением приведен ниже. Для компиляции кода требуются библиотеки SSD1306 и GFX OLED. Сначала загрузите следующие библиотеки и добавьте их в Arduino IDE.
1. Загрузите библиотеку SSD1306: https://github.com/adafruit/Adafruit_SSD1306
2. Загрузите библиотеку Adafruit GFX: https://github.com/adafruit/Adafruit-GFX-Library
Теперь вы можете скопировать код и загрузить его на плату Arduino.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #define inSensor 2 #define outSensor 3 int inStatus; int outStatus; int countin = 0; int countout = 0; int in; int out; int now; #define relay 5 void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64) delay(2000); pinMode(inSensor, INPUT); pinMode(outSensor, INPUT); pinMode(relay, OUTPUT); digitalWrite(relay, HIGH); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(20, 20); display.print("Visitor"); display.setCursor(20, 40); display.print("Counter"); display.display(); delay(3000); } void loop() { inStatus = digitalRead(inSensor); outStatus = digitalRead(outSensor); if (inStatus == 0) { in = countin++; } if (outStatus == 0) { out = countout++; } now = in - out; if (now <= 0) { digitalWrite(relay, HIGH); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0, 15); display.print("No Visitor"); display.setCursor(5, 40); display.print("Light Off"); display.display(); delay(500); } else { digitalWrite(relay, LOW); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(15, 0); display.print("Current Visitor"); display.setTextSize(2); display.setCursor(50, 15); display.print(now); display.setTextSize(1); display.setCursor(0, 40); display.print("IN: "); display.print(in); display.setTextSize(1); display.setCursor(70, 40); display.print("OUT: "); display.print(out); display.display(); delay(500); } } |
Тестирование и результаты
После загрузки кода счетчика посетителей на плату Arduino устройство готово к установке. Для питания устройства можно использовать адаптер постоянного тока 5 В.
Устройство имеет пару модулей ИК-датчиков. Один из ИК-датчиков необходимо разместить на входе, а другой на выходе, т.е. внутри двери комнаты и снаружи двери комнаты.
Когда в помещении нет посетителей, свет выключается, а на OLED-дисплее отображается информация об отсутствии посетителей в помещении.
Когда кто-то входит в комнату, посетитель добавляется и OLED-дисплей отображает количество входящих посетителей. В этот момент свет автоматически включается.
Когда человек покидает комнату или выходит, посетитель вычитается. Таким образом, общее количество текущих посетителей отображается на OLED-дисплее. OLED-дисплей также отображает количество посетителей, посетивших комнату, и количество посетителей, которые вышли.