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


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

Система управления библиотечными книгами на 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 показана на следующем рисунке.

Схема автоматизированной системы управления библиотечными книгами на основе платы 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 В источника питания, а заземление — к заземлению источника питания.

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

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

(Проголосуй первым!)
Загрузка...
1 просмотров

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

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