Сервопривод с управлением по звуку 2 Схемы

Электронный замок своими руками AlexGyver Technologies

Данный крупный проект посвящён изготовлению электронных замков своими руками, ниже вы найдёте ссылки на компоненты (Aliexpress), схемы подключения и файлы прошивок. Проект задуман как модульный, то есть руководствуясь приведёнными ниже схемами и инструкциями вы сможете сделать электронный замок любой нужной конфигурации и с удобным вариантом питания. Схемы разделены на схемы питания + подключения управляющего механизма, и отдельно показаны схемы подключения модулей. Комбинируя любые две схемы вы получите удобное для вас решение.
Кто ещё не сталкивался и не работал с Arduino, обязательно прочтите статью по подключению и настройке, ссылка выше.
Ваш AlexGyver.

Данный проект является модульным, т.е. можно подключать/отключать разные элементы и получить разную функциональность. На картинках выше показан вариант с полной функциональность, а именно:

  • Запирающий механизм. Служит для ОТКРЫТИЯ и ЗАКРЫТИЯ двери. В этом проекте рассмотрено использование трёх разных механизмов:
    • Сервопривод. Бывают большие, бывают маленькие. Очень компактный, и вкупе с тяжёлым засовом – отличный вариант
    • Электропривод замка дверей автомобиля. Большая и мощная штука, но жрёт просто безумные токи
    • Соленоидная щеколда. Хороший вариант, так как сама захлопывается

    В настройках прошивки можно выбрать любой из трёх типов (настройка lock_type)

  • Кнопка внутри. Служит для ОТКРЫТИЯ и ЗАКРЫТИЯ двери изнутри. Может быть размещена на ручке двери (со стороны ладони или со стороны пальцев), на самой двери, либо на косяке
  • Кнопка снаружи. Служит для ЗАКРЫТИЯ двери, а также для ПРОБУЖДЕНИЯ из энергосбережения. Может быть размещена на ручке двери (со стороны ладони или со стороны пальцев), на самой двери, либо на косяке
  • Концевик на закрытие двери. Служит для автоматического закрытия замка при закрывании двери. Им может быть:
    • Тактовая кнопка
    • Датчик холла + магнит на самой двери
    • Геркон + магнит на самой двери
  • Секретная кнопка сброса доступа. Служит для сброса пароля/ввода нового пароля/запоминания нового ключа/комбинации и т.д. Может быть спрятана где-то в корпусе
  • Светодиод для индикации работы. Светодиод RGB, используются красный и зелёный цвета (при смешении дают жёлтый):
    • Горит зелёный — замок ОТКРЫТ. Горит чтобы не забыть закрыть дверь
    • Горит жёлтый — система проснулась и ожидает ввод пароля
    • Мигает красный — сел аккумулятор

Любой из этих элементов можно исключить из системы:

  • Убираем концевик. В прошивке в настройках тоже его отключаем (настройка tail_button). Теперь чтобы закрыть замок, нужно нажимать кнопку
  • Убираем наружную кнопку. В прошивке в настройках тоже её отключаем (настройка wake_button). Теперь систему не нужно будить, она просыпается сама (потребление энергии чуть больше). А также у нас теперь нет кнопки закрыть на передней части двери, и нужен концевик. Либо замок – щеколда
  • Убираем внутреннюю кнопку. Этот вариант годится для шкафов и сейфов. В настройках ничего менять не нужно
  • Убираем светодиод. В настройках ничего менять не нужно
  • Кнопку сброса доступа можно отпаять после первого использования, либо переписать код под себя

ЛОГИКА РАБОТЫ СИСТЕМЫ

  • Дверь закрыта, нажато СНАРУЖИ — проснуться, ждать ввод пароля/RFID метку/электронный ключ/отпечаток пальца
  • Дверь закрыта, система проснулась, ждёт ввод пароля. Время можно настроить (настройка sleep_time)
  • Дверь закрыта, введён пароль/метка/ключ и т.д. — открыть
  • Дверь закрыта, нажато ВНУТРИ — открыть
  • Дверь открыта, нажато СНАРУЖИ — закрыть
  • Дверь открыта, нажато ВНУТРИ — закрыть
  • Дверь открыта, нажат КОНЦЕВИК — закрыть

В замке предусмотрена работа от аккумулятора в режиме пониженного энергосбережения (включить выключить: настройка sleep_enable), а именно:

  • Просыпаться каждые несколько секунд, следить за СОБЫТИЕМ (опциональный вариант, если снаружи нет кнопки. Включить можно в настройке wake_button)
  • Каждые несколько минут следить за напряжением акума (вкл/выкл настройка battery_monitor)
  • Если акум разряжен (напряжение устанавливается в настройке bat_low):
    • открыть дверь (опционально, можно настроить в прошивке open_bat_low)
    • запретить дальнейшее открытие и закрытие
    • при нажатии на кнопки мигать красным светодиодом
    • перестать следить за СОБЫТИЕМ (т.е. ввод пароля/метка и т.д.)

ЛОГИКА РАБОТЫ С КЛАВИАТУРОЙ

Когда система не спит, нажать кнопку смены пароля (скрытая кнопка). Попадаем в режим смены пароля:
Вводим пароль из цифр (МАКСИМУМ 10 ЦИФР. )

  • При нажатии * пароль записывается в память и система выходит из смены пароля
  • При нажатии # пароль сбрасывается (можно вводить заново)
  • Если ничего не нажимать 10 секунд, автоматически выйдем из режима смены пароля, пароль останется старый

Когда система не спит (проснулись по кнопки или сон отключен), нажать * для входа в режим ввода пароля
Если система спит и периодически просыпается проверять СОБЫТИЕ, то нажимаем * и удерживаем, пока не загорится красный светодиод
Режим ввода пароля:

  • Обработка пароля сделана таким образом, что правильный пароль засчитывается только при наборе правильной последовательности цифр, то есть если пароль 345, то вводить можно любые числа до тех пор, пока не появится последовательность 345, т.е. 30984570345 откроет замок, так как оканчивается на 345.
  • Если пароль введён верно, дверь откроется
  • Если ничего не нажимать, через 10 секунд система вернётся в обычный (дежурный) режим
  • Если нажать #, сразу выйдем из режима ввода пароля
  • Если нажать секретную кнопку смены пароля в режиме ввода пароля, то тоже из него выйдем

Самодельный сервопривод

Данная библиотека является “дополнением” к стандартной библиотеке Servo.h и позволяет плавно управлять сервоприводом. Суть работы кроется в методе tick() , который нужно вызывать постоянно в loop (или прерывании таймера), внутри тика находится алгоритм с собственным таймером, который по чуть чуть поворачивает серво к нужному положению. Библиотека дублирует несколько методов из Servo.h (attach имеет расширенную инициализацию):

  • write() и writeMicroseconds() – повернут вал серво с максимальной скоростью
  • attach() и detach() – подключить и отключить серво от управления

Инициализация

Объект создаётся точно так же, как в Servo.h, без параметров. Также можно передать рабочий угол серво (если не передавать, будет равен стандартному 180 град.)

По инициализации attach() есть несколько вариантов:

  • attach(pin); – подключит серво на указанный pin , угол поворота будет установлен на градусов. Длина импульса* мин-макс будет стандартная, 500-2400 мкс
  • attach(pin, target); – подключит серво на указанный pin , угол поворота** будет установлен на target градусов. Длина импульса* мин-макс будет стандартная, 500-2400 мкс
  • attach(pin, min, max); – подключит серво на указанный pin , угол поворота будет установлен на градусов. Длина импульса* будет установлена min и max соответственно.
  • attach(pin, min, max, target); – подключит серво на указанный pin , угол поворота будет установлен на target градусов. Длина импульса* будет установлена min и max соответственно.

*Длина импульса – сервопривод управляется ШИМ сигналом, в котором длина импульса прямо управляет углом поворота, то есть подавая минимальную и максимальную длину мы получаем рабочий угол 180 градусов. По умолчанию мин. и макс. длина установлены 500 и 2400 соответственно, что подходит большинству сервоприводов, но желательно посмотреть и “откалибровать” свой привод так, чтобы он работал на все 180 градусов. Мин. и макс. время импульса отличаются у разных производителей и моделей серво.

**Указание угла поворота при инициализации устанавливает серво на нужный угол сразу при подаче сигнала, а также выставляет текущую и целевую позицию равными этой.

Плавный пуск ( new! )

Сервопривод не имеет обратной связи по углу (для программы), поэтому при запуске будет “резко” повёрнут на стартовый угол (“в ноль” по умолчанию или на указанный в attach(pin, target) . Есть два варианта избежать резких рывков в механизме при запуске программы:

  • Заранее знать, на какой угол физически повёрнут привод при запуске и передать его в attach(pin, target) . Как узнать? Зависит от конкретной задачи и логики работы программы. Можно запоминать положение сервы в ЕЕПРОМ и восстанавливать при запуске, можно устанавливать серво в один и тот же угол перед выключением/перезагрузкой системы, и т.д.
  • Воспользоваться фичей smoothStart() , которая появилась в версии 3.2 данной библиотеки. Работает она очень просто: аттачит и детачит сервопривод с периодом в пару десятков миллисекунд, таким образом привод плавно движется до заданного угла из любого начального положения. Вызывать smoothStart() нужно однократно (при старте программы) сразу после attach(pin, target) в блоке setup() . Внимание! Функция блокирующая, выполнение занимает 900 миллисекунд. Период “рывка” сервопривода выбран минимальный, при котором серво начинает понимать, чего от неё хотят. Период довольно большой, поэтому движение к заданной позиции происходит рывками, но в целом гораздо плавнее, чем без smoothStart() . В массивном механизме рывки практически незаметны!

Управление

Движение серво происходит автоматически в методе tick() , нам нужно всего лишь вызывать его как можно чаще в loop() ( tick() имеет встроенный таймер на 20 миллисекунд). Также есть метод tickManual() , который поворачивает серву на следующий “шаг” при каждом вызове (тот же tick() , но не имеет своего таймера). Оба метода tick() возвращают false , пока серво движется, и true , когда серво достигла установленного угла, это можно использовать. Также серво автоматически отключается от управления при достижении заданного угла поворота (это уменьшает жужжание серво в простое). Эту функцию можно отключить, вызвав setAutoDetach(false) . Инструменты для управления движением привода:

    setTarget(длина); – устанавливает целевую позицию для серво в величине длина импульса, мкс (

500-2400)

  • setTargetDeg(угол); – устанавливает целевую позицию для серво в градусах (0-180)
  • setSpeed(скорость); – установка максимальной скорости (больше нуля) в градусах в секунду
  • setAccel(ускорение); – установка ускорения (0.01 – 1). Можно больше 1, будет ещё резче. Если установить ускорение 0 – оно будет отключено и серво будет двигаться по профилю постоянной скорости (с бесконечным ускорением)
  • start(); – автоматический attach + разрешает работу tick – серво движется к заданной позиции
  • stop(); – detach + запрещает работу tick – серво останавливается
  • Полезные вспомогательные методы для различных ситуаций:

    • setDirection(напр); – принимает NORMAL (false) или REVERSE (true), меняет направление серво
    • setCurrent(длина); – установка текущей позиции в мкс (500 – 2400). Может пригодиться в ситуации, когда мы знаем реальный угол серво и хотим сообщить о нём программе, чтобы алгоритм не дёргал привод.
    • setCurrentDeg(угол); – установка текущей позиции в градусах (0-180). Зависит от min и max.
    • getCurrent(); – получение текущей позиции в мкс (500 – 2400)
    • getCurrentDeg(); – получение текущей позиции в градусах (0-180). Зависит от min и max
    • getTarget(); – получение целевой позиции в мкс (500 – 2400)
    • getTargetDeg(); – получение целевой позиции в градусах (0-180). Зависит от min и max
    • setMaxAngle(); – установка макс. угла серво, по умолчанию 180. Позволяет удобно работать с разными сервами (на 270 и 360 град.)

    Расширитель серво PCA9685

    В версии библиотеки 3 и выше добавлена поддержка драйвера PCA9685, подключать нужно файл #include «ServoDriverSmooth.h»

    • ServoDriverSmooth servo; // по умолчанию (адрес 0x40, угол 180)
    • ServoDriverSmooth servo(0x40); // с указанием адреса драйвера
    • ServoDriverSmooth servo(0x40, 270); // с указанием адреса и макс. угла

    Метод attach(pin) принимает номер вывода на драйвере. В остальном всё работает точно так же, как с обычной сервой.

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

    Сервопривод Ардуино — устройство с мотором, которое можно повернуть на определенный угол и оставить в этом положении на определенное время.

    О сервоприводах

    Сервопривод Ардуино (англ. — arduino servo) — устройство с электрическим мотором, которое можно повернуть на определенный угол и оставить в этом положении на определенное время.

    Сервомоторы Ардуино по сути своей отличные устройства, которые могут поворачиваться в указанное положение и могут применяться в огромном количестве областей. Особенно сейчас их чаще всего применяют в робототехнике.

    Обычно у них есть выходной вал, который может поворачиваться на 180 градусов. Используя Arduino мы можем задать сервомотору определенное положение в которое он перейдет.

    Изначально сервоприводы начали использовать еще задолго до появления Ардуино, скажем так, в мире пультов дистанционного управления (RC), как правило, для управления рулевым колесом игрушечных машинок или крыльями самолетов. Со временем они нашли свое применение в робототехнике, автоматизации и, конечно же, в мире Ардуино.

    В нашем материале мы увидим как подключить сервопривод Ардуино, а затем как управлять этим полезным механизмом и поворачивать его в определенные положения.

    Как это работает

    Сервоприводы Arduino — это умные устройства. Используя только один входной пин, они получают значения для позиционирования от микроконтроллера и переходят в это положение. Как можно увидеть на рисунке в самом начале статьи внутри они имеют двигатель и цепь обратной связи, которая гарантирует, что вал/рычаг сервопривода достигнет желаемого положения.

    Но какой сигнал сервомоторы получают на входе? Это прямоугольная волна, подобная PWM (англ. — pulse-width modulation, широтно-импульсная модуляция). Каждый цикл в сигнале длится 20 миллисекунд, и большая часть времени в значении LOW. В начале каждого цикла значение сигнала становится HIGH на время от 1 до 2 миллисекунд.

    При 1 миллисекунде она составляет 0 градусов, а при 2 миллисекундах — 180 градусов, а в промежутке значение от 0 до 180. Это очень хороший и надежный метод. График выше упрощает понимание.

    Комплектующие

    Нам понадобятся следующие детали:

    1. Плата Arduino (подключенная к компьютеру через USB), подойдет Arduino Uno;
    2. Сервопривод;
    3. Перемычки.

    В мире сервомоторов мало известных брендов. Как пример, можно взять Hitec и Futaba, которые являются ведущими производителями сервоприводов для RC-моделей. Но в целом найти подходящий на АлиЭкспресс и подобных сайтах не сложно.

    Подключение сервопривода к Ардуино

    Схема подключения ниже:

    Сервомотор имеет много встроенных деталей: двигатель, цепь обратной связи и, самое главное, драйвер мотора. Ему просто нужно дополнительно питание, земля и один контрольный пин. Ниже шаги для подключения сервопривода к Arduino, но вы можете всегда свериться с изображением выше.

    1. Подключите Землю к GND Arduino.Сервомотор имеет гнездовой разъем с тремя контактами. Самый темный или даже черный — это обычно земля.
    2. Подключите кабель питания, который по всем стандартам должен быть красным к 5В на Ардуино.
    3. Подключите оставшийся контакт разъема сервопривода к цифровому выходу на Arduino.

    Также ниже приводим пример подключения двигателя и Arduino Diecimilia. Фото найдено на официальном сайте производителя микроконтроллеров.

    Для этого варианта подключение следующее:

    1. Подключите красный от сервопривода к +5 В на ардуине.
    2. Подключите черный/коричневый от сервопривода к Gnd на ардуино.
    3. Подключите белый/оранжевый от сервопривода к аналоговому 0 на arduino.

    Скетч для сервопривода Ардуино

    Скетч ниже заставит сервопривод переместиться в позицию 0 градусов, подождать 1 секунду, затем повернуться на 90 градусов, подождать еще одну секунду, после повернуться на 180 градусов и перейти в первоначальное положение.

    Также дополнительно мы используем библиотеку servo — скачайте ниже или в нашем разделе Библиотеки.

    Содержимое zip-файла размещается в папку arduino-xxxx/hardware/liraries.

    Скетч № 1

    Если сервомотор подключен к другому цифровому контакту, просто измените значение servoPin на значение используемого цифрового вывода.

    Наш код просто объявляет объект и затем инициализирует сервопривод с помощью функции servo.attach(). Мы не должны забывать подключать серво библиотеку. В цикле мы устанавливаем сервопривод на 0 градусов, ждем, а затем устанавливаем его на 90, а затем на 180 градусов.

    Скетч № 2

    Второй скетч для варианта с Arduino Diecimilia ниже.

    Нам достаточно будет скачать и подключить библиотеку из архива:

    Стандартные методы серво-библиотеки

    attach(int)

    Соединение пина и сервопривода. Вызывает pinMode. Возвращает 0 при ошибке.

    detach()

    Отсоединение пина от сервопривода.

    write(int)

    Установка угла сервопривода в градусах, от 0 до 180.

    read()

    Возвращает значение, установленное write(int).

    attached()

    Возвращает 1, если серво в настоящее время подключен.

    Дополнительные примеры скетчей

    Следующий код позволяет вам контролировать серводвигатель на пине 2 с помощью потенциометра на аналоговом 0.

    Следующий код — это поворот (пинг/понг) на выводе A0 с переменной скоростью.

    Дополнительные возможности

    Управление сервоприводами на Ардуино очень простое и мы можем использовать еще несколько интересных фишек.

    Контроль точного времени импульса

    Ардуино имеет встроенную функцию servo.write(градусы), которая упрощает управление сервомоторами. Однако не все сервоприводы соблюдают одинаковые тайминги для всех позиций. Обычно 1 миллисекунда означает 0 градусов, 1,5 миллисекунды — 90 градусов, и, конечно, 2 миллисекунды означают 180 градусов. Некоторые сервоприводы имеют меньший или больший диапазон.

    Для лучшего контроля мы можем использовать функцию servo.writeMicroseconds(микросекунды), которая в качестве параметра принимает точное количество микросекунд. Помните, 1 миллисекунда равна 1000 мкс.

    Несколько сервоприводов

    Чтобы использовать более одного сервопривода в Ардуино нам нужно объявить несколько серво-объектов, прикрепить разные контакты к каждому из них и обратиться к каждому индивидуально. Итак, нам нужно объявить объекты — столько сколько нам нужно:

    Затем нам нужно прикрепить каждый объект к сервомотору. Помните, что каждый сервопривод использует отдельный пин:

    В конце концов, мы должны обращаться к каждому объекту индивидуально:

    Подключение. Земля сервоприводов идёт на GND Arduino, питание на 5В или VIN (в зависимости от входа). И, в конце концов, каждый привод должен быть подключен к отдельному цифровому выводу.

    Вопреки распространенному мнению, сервоприводами не нужно управлять через пины PWM — любой цифровой пин подойдет и будет работать.

    Управление мышью

    Чтобы управлять серво с помощью мыши, вот простой код:

    Вам не обязательно использовать этот код, вы также можете отправлять команды на плату arduino с серийного монитора Arduino IDE. Позиция сервопривода от 0 до 180 — это команды 0 и 180 сек соответственно.

    В основном этот код берет позицию mouseX (от 0 до 720) и делит на 4, чтобы получить угол для сервопривода (0-180). Наконец, значение выводится на последовательный порт с префиксом ‘s’.

    Примечание: «s» на самом деле должен быть суффиксом, но поскольку это повторяется, это не имеет значения для результата.

    Не забудьте сначала проверить с помощью println(Serial.list ()) COM-порт, который следует использовать.

    Сервоприводы с непрерывным вращением

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

    Например, функция Servo1.write(0) заставит сервомотор вращаться против часовой стрелки на полной скорости. Функция Servo1.write(90) остановит двигатель, а Servo1.write(180) будет вращать вал по часовой стрелке на полной скорости.

    Таким сервоприводам нашли несколько применений, но нужно понимать, что они достаточно медленные. Один из вариантов — микроволновая печь, когда есть необходимость в двигателе для вращения продуктов питания. Но будьте осторожны, микроволны — опасное дело!

    Читайте также:  Как проверить катушку зажигания мультиметром
    Ссылка на основную публикацию
    Секреты правильного дизайна ВАЗ-2106 с эксклюзивным белым салоном
    Великолепная шестёрка почему ВАЗ-2106 был лучшей моделью Жигулей - – автомобильный журнал Среди всего разнообразия заднеприводных автомобилей ВАЗ у каждого...
    Свистит ремень генератора на Форд Фокус 2
    Установка ремня генератора форд фокус Как заменить ремни кондиционера и генератора на Форд Фокус 2 1.6, 1.8 и 2.0 л....
    Свистит ремень генератора почему и что делать чтобы устранить эту неисправность
    Свист ремня Паджеро Свист ремня. Симптомы. Внедорожники Митсубиси Паджеро второго третьего и четвертого поколений, славятся наличием мелких “болячек”.Одной из них...
    СЕКСУАЛЬНЫЕ ПОЗЫ — πάπυρος — LiveJournal
    Удобные позы для секса в машине, какие подойдут для любви на переднем и заднем сиденье, на капоте Как говорится, для...
    Adblock detector