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

Автоматические ворота на Raspberry Pi, датчике веса и модуле усиления HX711

В данной статье мы рассмотрим подключение датчика веса/нагрузки (Load cell) с модулем усиления HX711 к плате Raspberry Pi и создадим на их основе автоматические ворота. Наверняка вы уже видели во многих местах (торговые центры и т.д.) ворота (двери) с подсоединённым к ним датчиком веса, которые автоматически открываются когда кто-нибудь подойдет/станет рядом с ними и закрываются, когда человек пройдет ворота/дверь. В данном проекте мы рассмотрим создание подобных автоматических ворот на основе платы Raspberry Pi, которые будут «чувствовать» давление и открываться автоматически, при этом они будут оставаться открытыми до тех пор, пока давление (вес) будет действовать на датчик веса. Как только вес с датчика будет убираться ворота будут автоматически закрываться. Вместо датчика веса в подобных автоматических воротах можно использовать PIR датчик.

В демонстрационных целях в данном проекте в качестве ворот мы использовали электродвигатель постоянного тока, измеряемый вес мы будем класть на картонное основание. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи. Также мы рассматривали работу с датчиком веса и модулем усиления HX711 в статье про их подключение к плате Arduino. Также на эту тематику можете посмотреть проект автоматических весов на основе платы Arduino.

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. Датчик веса (Load cell) (купить на AliExpress).
  3. Модуль усиления датчика веса HX711 (Load cell Amplifier Module) (купить на AliExpress).
  4. Микросхема драйвера двигателей L293D (купить на AliExpress).
  5. Электродвигатель постоянного тока или DVD привод.
  6. ЖК дисплей 16×2 (купить на AliExpress).
  7. Источник питания.
  8. Макетная плата.
  9. Соединительные провода.

Датчик веса и модуль усиления HX711

Датчик веса представляет собой полупроводник, который преобразует приложенные силу или давление в электрическое напряжение. Величина этого напряжения прямо пропорциональна приложенной к датчику силе. Датчик веса имеет измеритель деформации (strain gauge), который деформируется под действием приложенной силы (давления). Измеритель деформации генерирует электрический сигнал когда в результате деформации изменяется его эффективное сопротивление. Обычно датчик нагрузки состоит из 4-х измерителей деформации, объединенных по принципу моста Уитстона (моста для измерения сопротивления). Мы в нашем проекте будем использовать датчик нагрузки, способный измерять вес тел до 40 кг, однако производятся датчики нагрузки и с другим диапазоном измеряемых весов – до 5 кг, до 10 кг, до 100 кг и более.

Но электрические сигналы, генерируемые датчиком веса, весьма слабы – всего несколько милливольт. Поэтому перед их обработкой в плате Arduino они нуждаются в усилении – и для этой цели подходит модуль усиления датчика нагрузки HX711, показанный на нижеприведенном рисунке. Этот модуль содержит чип HX711, представляющий собой высокоточный 24-разрядный аналогово-цифровой преобразователь (АЦП). HX711 имеет два аналоговых входных канала, коэффициент усиления для которых можно программировать. Таким образом, модуль HX711 усиливает слабые электрические сигналы от датчика нагрузки и затем эти усиленные и оцифрованные сигналы подает на плату Arduino для их дальнейшей обработки (извлечения информации о весе).

Датчик нагрузки соединяется с модулем усиления HX711 с помощью 4 проводов: красного, черного, белого и зеленого/синего цвета. Возможны некоторые изменения цветовой гаммы этих проводов в зависимости от производителя модуля. Для соединения этих двух компонентов нашего устройства необходимо будет сделать следующие подключения как показано на ниже приведенном рисунке:
• красный провод — к E+;
• черный провод — к E-;
• белый провод — к A-;
• зеленый провод — к A+.

Фиксация датчика веса на основании

Этот этап вы можете пропустить и не использовать никакой платформы/основания, но лучше все таки его сделать для более удобной работы с датчиком веса. В «идеальных» автоматических воротах датчик веса должен располагаться прямо перед воротами чтобы он срабатывал когда человек подойдет к воротам (двери). Но в данном проекте в демонстрационных целях мы разместили датчик веса под жесткой картонной пластиной, которая служит в качестве платформы. Также датчик веса прикреплен к деревянному основанию с помощью болтов и гаек чтобы он оставался в неподвижном состоянии. На следующих рисунках представлен рассмотренный пример фиксации датчика веса.

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

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

В представленной схеме контакты ЖК дисплея 16×2 RS, EN, d4, d5, d6 и d7 подключены к контактам 18, 23, 24, 25, 8 и 7 платы Raspberry Pi соответственно. Контакты DT и SCK модуля HX711 непосредственно подключены к контактам 27 и 17 платы Raspberry Pi, а драйвер двигателя L293D подключен к контактам 12 и 16 платы.

Объяснение работы проекта

В нашем проекте плата Raspberry Pi управляет всеми процессами в схеме. Датчик веса обнаруживает приложенное к нему усилие и передает электрический сигнал, пропорциональный измеренному весу, на модуль усиления датчика веса HX711. Модуль HX711 представляет собой 24-битный АЦП (аналого-цифровой преобразователь), который усиливает сигнал с выхода датчика веса и преобразует его в цифровую форму. Затем это цифровое значение подается на плату Raspberry Pi, которая сравнивает его с заранее установленным (опорным) значением веса и на основании результата этого сравнения управляет открытием/закрытием ворот с помощью микросхемы драйвера двигателя L293D. В качестве ворот мы использовали электродвигатель постоянного тока. Если же вы для этой цели используете DVD привод, то можете посмотреть следующий аналогичный проект – автоматическое открывание двери с помощью Arduino.

Структурная схема работы проекта показана на следующем рисунке.

В этом проекте в качестве опорного значения веса мы использовали вес равный 100 грамм, то есть если мы будем помещать на платформу вес больший 100 грамм, то ворота будут автоматически открываться. После удаления этого веса с платформы ворота будут автоматически закрываться. На экране ЖК дисплея будет отображаться состояние ворот – открыты/закрыты.

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В этом проекте мы не использовали никаких библиотек для подключения датчика веса и модуля усиления HX711 к плате Raspberry Pi, мы полагались только на даташит на эти устройства. Но библиотеки для работы с датчиком веса для Raspberry Pi есть и если вы их будете использовать, то вам удастся уменьшить объем кода программы по сравнению с нашим вариантом.

Первым делом в программе мы должны подключить необходимые библиотеки, инициализировать необходимые переменные и контакты (к которым подключается ЖК дисплей, модуль HX711 и электродвигатель постоянного тока).

После этого мы запрограммируем функцию для считывания данных с модуля HX711.

Далее в основной функции (бесконечном цикле) нашей программы мы будем считывать данные о весе с модуля HX711 и сравнивать их с опорным значением веса, и в зависимости от результата сравнения принимать решение от открытии или закрытии ворот.

Также мы запрограммируем ряд функций для работы с ЖК дисплеем:

  • def begin() – для инициализации ЖК дисплея;
  • def lcdcmd(ch) – для передачи команд на ЖК дисплей;
  • def lcdwrite(ch) – для вывода символа на экран ЖК дисплея;
  • def lcdclear() – для очистки экрана ЖК дисплея;
  • def lcdprint(Str) – для вывода строки на экран ЖК дисплея.

Коды всех этих функций приведены в полном тексте программы.

Исходный код программы на Python

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

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

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