В этом уроке мы собираемся разработать схему с использованием датчика FLEX, Arduino Uno и серводвигателя. Этот проект представляет собой систему сервоуправления, в которой положение вала сервопривода определяется изгибом, изгибом или отклонением датчика FLEX.
Давайте сначала поговорим о серводвигателях. Сервомоторы используются там, где требуется точное перемещение или положение вала. Они не предлагаются для высокоскоростных приложений. Они предлагаются для работы с низкой скоростью, средним крутящим моментом и точным позиционированием. Эти двигатели используются в роботизированных манипуляторах, системах управления полетом и системах управления. Серводвигатели используются во встроенных системах, таких как торговые автоматы и т. Д.
Серводвигатели доступны в различных формах и размерах. У серводвигателя в основном есть провода: один для положительного напряжения, другой - для заземления, а последний - для установки положения. КРАСНЫЙ провод подключается к источнику питания, черный провод подключается к земле, а ЖЕЛТЫЙ провод подключается к сигналу.
Серводвигатель - это комбинация двигателя постоянного тока, системы управления положением, шестерен. Положение вала двигателя постоянного тока регулируется управляющей электроникой в сервоприводе в зависимости от продолжительности включения сигнала ШИМ на выводе SIGNAL.
Проще говоря, управляющая электроника регулирует положение вала, управляя двигателем постоянного тока. Эти данные о положении вала передаются через СИГНАЛЬНЫЙ штифт. Данные о положении в систему управления должны быть отправлены в виде сигнала ШИМ через сигнальный контакт серводвигателя.
Частота сигнала ШИМ (широтно-импульсная модуляция) может варьироваться в зависимости от типа серводвигателя. Важным моментом здесь является ДОПОЛНИТЕЛЬНОСТЬ ШИМ-сигнала. На основании этого ОБЯЗАННОСТИ управляющая электроника регулирует вал. Для того, чтобы вал переместился на 9o часов, РАСХОД ВКЛЮЧЕНИЯ должен составлять 1/18. 1 миллисекунда «времени включения» и 17 миллисекунд «времени выключения» в сигнале 18 мс.
Чтобы вал был перемещен на 12o часов, время включения сигнала должно быть 1,5 мс, а время выключения - 16,5 мс. Это соотношение декодируется системой управления в сервоприводе, и она регулирует положение на основе этого.
Этот ШИМ здесь генерируется с помощью ARDUINO UNO. Итак, на данный момент мы знаем, что мы можем управлять валом серводвигателя, изменяя коэффициент заполнения сигнала ШИМ, генерируемого Arduino Uno. UNO имеет специальную функцию, которая позволяет нам определять положение SERVO, не нарушая сигнал PWM. Однако важно знать соотношение продолжительности включения ШИМ и положения сервопривода. Подробнее об этом мы поговорим в описании.
Теперь поговорим о FLEX SENSOR. Чтобы подключить датчик FLEX к ARDUINO UNO, мы собираемся использовать 8-битный АЦП (аналого-цифровое преобразование). Датчик FLEX - это преобразователь, который меняет свое сопротивление при изменении формы. Датчик FLEX имеет длину 2,2 дюйма или длину пальца. Это показано на рисунке.
Датчик Flex - это преобразователь, который изменяет свое сопротивление при изгибе линейной поверхности. Отсюда и название «датчик гибкости». Проще говоря, сопротивление клеммы датчика увеличивается при ее изгибе. Это показано на рисунке ниже.
Это изменение сопротивления не принесет никакой пользы, если мы не сможем их прочитать. Контроллер под рукой может только считывать шансы напряжения и не меньше, для этого мы собираемся использовать схему делителя напряжения, с помощью которой мы можем получить изменение сопротивления при изменении напряжения.
Делитель напряжения представляет собой резистивную схему и показан на рисунке. В этой резистивной сети мы имеем одно постоянное сопротивление и другое переменное сопротивление. Как показано на рисунке, R1 здесь - постоянное сопротивление, а R2 - датчик FLEX, который действует как сопротивление.
Измеряется середина ветви. С изменением R2 у нас есть изменения в Vout. Таким образом, у нас есть напряжение, которое изменяется с весом.
Теперь важно отметить, что входной сигнал, принимаемый контроллером для преобразования АЦП, составляет всего 50 мкА. Этот эффект нагрузки резистивного делителя напряжения важен, так как ток, потребляемый из Vout делителя напряжения, увеличивает процент ошибки, а пока нам не нужно беспокоиться об эффекте нагрузки.
ГИБКИЙ ДАТЧИК при изгибе его сопротивление изменяется. Когда этот преобразователь подключен к схеме делителя напряжения, мы будем иметь изменяющееся напряжение с помощью FLEX на преобразователе. Это переменное напряжение подается на один из каналов АЦП, у нас будет цифровое значение, относящееся к FLEX.
Мы сопоставим это цифровое значение с положением сервопривода, с этим у нас будет сервоуправление по гибкости.
Составные части
Аппаратное обеспечение: Arduino Uno , источник питания (5 В), конденсатор 1000 мкФ, конденсатор 100 нФ (3 штуки), резистор 100 кОм, сервомотор (SG 90), резистор 220 Ом, датчик FLEX.
Программное обеспечение: Atmel studio 6.2 или Aurdino nightly.
Принципиальная схема и объяснение
Схема для следящего управления двигателем с помощью датчика FLEX показано на рисунке ниже.
Напряжение на датчике не является полностью линейным; это будет шумно. Чтобы отфильтровать шум, конденсаторы помещаются на каждом резисторе в схеме делителя, как показано на рисунке.
Здесь мы собираемся взять напряжение, обеспечиваемое делителем (напряжение, которое линейно представляет вес), и подать его в один из каналов АЦП Arduino UNO. Мы собираемся использовать для этого A0. После инициализации АЦП у нас будет цифровое значение, представляющее изогнутый датчик. Мы возьмем это значение и сопоставим его с положением сервопривода.
Для этого нам нужно установить в программе несколько инструкций, о которых мы подробно поговорим ниже.
ARDUINO имеет шесть каналов АЦП, как показано на рисунке. В них любой из них или все они могут использоваться как входы для аналогового напряжения. АЦП UNO имеет разрешение 10 бит (целочисленные значения от (0- (2 ^ 10) 1023)). Это означает, что он будет отображать входные напряжения от 0 до 5 вольт в целые значения от 0 до 1023. Таким образом, для каждого (5/1024 = 4,9 мВ) на единицу.
Здесь мы собираемся использовать A0 из UNO.
Нам нужно знать несколько вещей.
|
В первую очередь каналы UNO АЦП имеет опорное значение по умолчанию 5V. Это означает, что мы можем дать максимальное входное напряжение 5 В для преобразования АЦП на любом входном канале. Поскольку некоторые датчики обеспечивают напряжение от 0-2.5V, со ссылкой 5V мы получаем меньшую точность, поэтому у нас есть инструкция, которая позволяет нам изменить это значение ссылки. Итак, для изменения ссылочного значения у нас есть («analogReference ();»). А пока мы оставим его как.
По умолчанию мы получаем максимальное разрешение АЦП платы, равное 10 битам, это разрешение можно изменить с помощью инструкции («analogReadResolution (бит);»). В некоторых случаях это изменение разрешения может пригодиться. А пока оставим это как.
Теперь, если вышеуказанные условия установлены по умолчанию, мы можем прочитать значение из АЦП канала «0», напрямую вызвав функцию «analogRead (pin);», здесь «pin» представляет контакт, к которому мы подключили аналоговый сигнал, в данном случае это будет «A0».
Значение от ADC можно принять в виде целого числа как «int SENSORVALUE = analogRead (A0); », По этой инструкции значение после АЦП сохраняется в целочисленном« SENSORVALUE ».
Теперь давайте поговорим о сервоприводе. У UNO есть функция, которая позволяет нам контролировать положение сервопривода, просто задавая значение в градусах. Скажем, если мы хотим, чтобы сервопривод был на 30, мы можем напрямую представить значение в программе. Заголовочный файл SERVO выполняет все внутренние вычисления коэффициента заполнения.
#включают
Серво сервопривод; сервопривод (3); servo.write (градусы); |
Первый оператор представляет собой файл заголовка для управления СЕРВО-ДВИГАТЕЛЕМ.
Второй оператор называет сервопривод; мы оставляем это как сам сервопривод.
Третье утверждение указывает, где подключен вывод сервосигнала; это должен быть вывод ШИМ. Здесь мы используем PIN3.
Четвертая инструкция дает команды для позиционирования серводвигателя и выражается в градусах. Если задано 30, серводвигатель вращается на 30 градусов.
Теперь sg90 может двигаться от 0 до 180 градусов, у нас есть результат АЦП 0-1024
Таким образом, ADC примерно в шесть раз больше ПОЛОЖЕНИЯ СЕРВОПРИВОДА. Таким образом, разделив результат АЦП на 6, мы получим приблизительное положение руки сервопривода.
При этом на серводвигатель будет поступать значение положения сервопривода, которое пропорционально изгибу или изгибу. Когда этот датчик изгиба установлен на перчатке, мы можем контролировать положение сервопривода движением руки.