Рубрики
Проекты на Raspberry Pi

Система управления библиотечными книгами на Raspberry Pi с использованием Python Flask

В настоящее время во многих колледжах и школах книги выдаются студентам вручную с помощью сканеров штрихкодов и электронных таблиц. Все книги и студенческие читательские билеты имеют штрихкоды. Чтобы получить книгу, студент должен передать её библиотекарю вместе со своим читательским билетом, и библиотекарь выдаёт книгу, сканируя штрихкод на книге и читательском билете. Данную систему можно улучшить с помощью решений представленных в настоящей статье.

В рамках этого проекта студенты могут легко выдавать/возвращать книги: им достаточно провести рукой по правой/левой стороне устройства (с ИК-датчиками), приложить книгу и читательский билет, после чего книга будет выдана/возвращена. Каждая книга и читательский билет снабжены штрихкодом. Вместо считывателя штрихкодов в этом проекте я использую камеру и OpenCV для определения значения штрихкода. Данные о книгах и читательских билетах хранятся в удаленной базе данных MySQL. Я также создал приложение и веб-сайт на Python-Flask и разместил их онлайн на Heroku бесплатно. Студенты могут просмотреть свои данные на веб-сайте, введя свой университетский регистрационный номер или номер штрихкода читательского билета. Преимущество веб-сайта в худшем случае, если оборудование по какой-либо причине выйдет из строя, заключается в том, что преподаватель может вручную выдать/вернуть книгу студенту. Приложение создано с помощью MIT App Inventor, и доступ к нему имеет только сотрудник библиотеки в целях безопасности, чтобы никто не мог украсть книгу из библиотеки. Подробнее об этом расскажу ниже.

Что вам следует знать о проекте:

  • Каждую книгу можно выдать студентам на 14 дней. Если студент пропустит срок возврата, с него будет взиматься определенная плата каждый день (это значение можно изменить в коде).
  • Студенту могут выдать только 5 книг. Если попытаться выдать больше 5 книг, система отобразит сообщение «Вы не можете выдать более 5 книг». Мы можем увеличить количество выдаваемых книг, но это сделает код слишком длинным, поскольку я создал код с простой логикой, которая более эффективна и менее подвержена ошибкам.
  • Студенты могут вернуть/переоформить бронирование только через 7 дней, до этого момента сделать это невозможно.

Поскольку это прототип, я сделал его из картона, но в практическом мире можно изготовить коробку, напечатанную на 3D-принтере, или коробку из листового металла. 

Если вы новичок в OpenCV, вы можете ознакомиться с нашим руководством «Начало работы с OpenCV».

Необходимые компоненты для проекта

Использованное оборудование для проекта

  • модель платы Raspberry Pi 3 B+,
  • ИК-датчики,
  • TFT-дисплей для Raspberry Pi. 
  • USB веб-камера, 
  • USB звуковая карта,
  • трансформатор,
  • конденсатор,
  • диод,
  • резистор,
  • выпрямитель напряжения 7805,
  • светодиод, адаптер питания, 
  • перемычка, 
  • печатная плата,
  • коробка,
  • USB-динамик.

В проекте использовалось программное обеспечение:

  • Python, 
  • Open-cv, 
  • библиотека Pyzbar, 
  • библиотека gtts,
  • Python-Flask, 
  • MySQL,
  • MIT App Inventor (приложение),
  • PHP, 
  • pysimplegui.

Выбор аппаратного и программного обеспечения для проекта

В этом проекте я использовал Raspberry Pi 3 B+ с процессором 1,4 ГГц, встроенным Wi-Fi и Bluetooth. Я выбрал Raspberry Pi из-за необходимости высокой вычислительной мощности, а также потому, что он проще в использовании, дешевле и поддерживает USB-веб-камеру. Raspberry Pi также предоставляет контакты GPIO, благодаря чему я смог легко подключить ИК-датчик. Для создания графического интерфейса пользователя (GUI) я использовал библиотеку pysimplegui, с помощью которой смог отображать текст (инструкции) на TFT-дисплее. Вместо обычного ЖК-дисплея я использовал TFT-дисплей (3,5 дюйма), чтобы сделать проект более удобным для пользователя. Источник питания — я создал преобразователь переменного тока в постоянный с полным мостовым выпрямителем, который выдает 12 В и 5 В. Это обеспечивает питание как ИК-датчика, так и светодиода (12 В). Для питания Raspberry Pi я использовал адаптер 5 В, 3 А, а для динамика — ещё один USB-адаптер. Всё питание подключил к одному кабелю.

Для считывания (обнаружения) штрихкодов книг или студенческих удостоверений есть два варианта: обычный USB-считыватель штрихкодов или USB-веб-камера. Здесь я использовал USB-веб-камеру для обнаружения штрихкодов вместо обычного считывателя, потому что это дешевле. Веб-сайт, который вы видите здесь (https://librarybookmanager.herokuapp.com/), создан с использованием Python-Flask, поскольку с его помощью я смог использовать библиотеку MySQL Connector, которая позволяет мне подключаться к моей базе данных, а также вручную выдавать/возвращать/повторно выдавать книги или вносить изменения в базу данных. Приложение будет играть важную роль, предотвращая кражу книг. Поскольку система автоматизирована, есть вероятность, что некоторые студенты попытаются забрать книги без проблем. Чтобы предотвратить это, сотрудник библиотеки будет сидеть у выхода из библиотеки с мобильным приложением и, сканируя студентов, сможет увидеть все данные о студентах, например, сколько книг им выдано, какие именно книги им выданы и какова общая сумма штрафа.

Схема проекта

Схема автоматизированной системы управления библиотечными книгами на основе платы Raspberry Pi показана на следующем рисунке.

В аппаратной части установлены два ИК-датчика, подключенных к GPIO Raspberry Pi. Выходной контакт правого датчика подключен к контакту 20 GPIO Raspberry Pi, а выходной контакт левого датчика — к контакту 21 GPIO Raspberry Pi. VCC обоих датчиков подключен к выходу 5 В источника питания, а земля — к земле источника питания. Контакт GND Raspberry Pi также подключен к земле источника питания. Я подал на Raspberry Pi отдельное питание с помощью адаптера 5 В 3 А, а динамик подключен к отдельному USB-адаптеру, но все входы питания подключены к одному кабелю (вилке). Динамики подключены к Raspberry Pi через звуковую карту, чтобы мы могли слышать громкие звуки — это позволяет увеличить громкость динамиков. USB-веб-камера подключена к USB-порту Raspberry Pi. Светодиодная подсветка используется для лучшего освещения USB-веб-камеры, чтобы камера могла четко видеть штрихкод. Положительная сторона светодиода подключается к выходу 12 В источника питания, а заземление — к заземлению источника питания.

Исходный код проекта

Видео, демонстрирующее работу проекта

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

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