Arduino и двигатели

Драйвер шагового двигателя Ардуино

Шаговый двигатель — это бесколлекторный синхронный двигатель, как и все двигатели, он преобразует электрическую энергию в механическую. В отличие от двигателя постоянного тока в которых происходит вращение вала, вал шаговых двигателей совершает дискретные перемещения, то есть вращается не постоянно, а шагами. Каждый шаг вала (ротора) представляет собой часть полного оборота.

Вращение вала двигателя осуществляется с помощью сигнала, который управляет магнитным полем катушек в статоре драйвера. Сигнал генерирует драйвер шагового двигателя. Магнитное поле, возникающее при прохождении электрического тока в обмотках статора, заставляет вращаться вал, на котором установлены магниты. Количество шагов задаются в программе с помощью библиотеки Arduino IDE.

Схема подключения шагового двигателя 28BYJ-48 к Arduino Uno через драйвер ULN2003 изображена на рисунке ниже. Основные характеристики мотора 28BYJ-48: питание от 5 или 12 Вольт, 4-х фазный двигатель, угол шага 5,625°. Порты драйвера IN1 — IN4 подключаются к любым цифровым выводам платы Arduino Mega или Nano. Светодиоды на модуле служат для индикации включения катушек двигателя.

3 Скетч для управления коллекторным двигателем

Напишем скетч для управления коллекторным двигателем. Объявим две константы для ножек, управляющих двигателем, и одну переменную для хранения значения скорости. Будем передавать в последовательный порт значения переменной Speed и менять таким образом скорость (значением переменной) и направление вращения двигателя (знаком числа).

Загрузим скетч в память Arduino. Запустим его. Вал двигателя не вращается. Чтобы задать скорость вращения, нужно передать в последовательный порт значение от 0 до 255. Направление вращения определяется знаком числа.

Подключимся с помощью любой терминалки к порту, передадим число «100» – двигатель начнёт вращаться со средней скоростью. Если подадим «минус 100», то он начнёт вращаться с той же скоростью в противоположном направлении.

А вот так выглядит подключение подключение коллекторного двигателя к Arduino в динамике:

Коллекторный двигатель и ArduinoКоллекторный двигатель и Arduino

Исходный код программы на языке С (Си) с пояснениями

Приведенный в этом разделе код программы демонстрирует вращение шагового двигателя под управлением микроконтроллера AVR в обе стороны: по часовой стрелке и против часовой стрелки. Если вы хотите вращать шаговый двигатель только в одну сторону – просто закомментируйте ненужную часть кода.

C++

#define F_CPU 16000000UL /* Define CPU Frequency 1MHz */
#include <avr/io.h> /* подключаем стандартную библиотеку ввода/вывода */
#include <util/delay.h> /* задействуем функции задержки в программе */

int main(void)
{

DDRA = 0x0F; /* конфигурируем PORTA на выход */
int period = 6; /* устанавливаем период (задержку) между двумя шагами */

while (1)
{

/* вращаем шаговый двигатель по часовой стрелке */
for(int i=0;i<50;i++)
{
PORTA = 0x09;
_delay_ms(period);
PORTA = 0x08;
_delay_ms(period);
PORTA = 0x0C;
_delay_ms(period);
PORTA = 0x04;
_delay_ms(period);
PORTA = 0x06;
_delay_ms(period);
PORTA = 0x02;
_delay_ms(period);
PORTA = 0x03;
_delay_ms(period);
PORTA = 0x01;
_delay_ms(period);
}
PORTA = 0x09; /* последний шаг в начальную позицию */
_delay_ms(period);
_delay_ms(1000);

/* вращаем шаговый двигатель против часовой стрелки */
for(int i=0;i<50;i++)
{
PORTA = 0x01;
_delay_ms(period);
PORTA = 0x03;
_delay_ms(period);
PORTA = 0x02;
_delay_ms(period);
PORTA = 0x06;
_delay_ms(period);
PORTA = 0x04;
_delay_ms(period);
PORTA = 0x0C;
_delay_ms(period);
PORTA = 0x08;
_delay_ms(period);
PORTA = 0x09;
_delay_ms(period);

}
PORTA = 0x09;
_delay_ms(period);
_delay_ms(1000);
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

#define F_CPU 16000000UL /* Define CPU Frequency 1MHz */
#include <avr/io.h> /* подключаем стандартную библиотеку ввода/вывода */
#include <util/delay.h> /* задействуем функции задержки в программе */

intmain(void)

{

DDRA=0x0F;/* конфигурируем PORTA на выход */

intperiod=6;/* устанавливаем период (задержку) между двумя шагами */

while(1)

{

/* вращаем шаговый двигатель по часовой стрелке */

for(inti=;i<50;i++)

{

PORTA=0x09;

_delay_ms(period);

PORTA=0x08;

_delay_ms(period);

PORTA=0x0C;

_delay_ms(period);

PORTA=0x04;

_delay_ms(period);

PORTA=0x06;

_delay_ms(period);

PORTA=0x02;

_delay_ms(period);

PORTA=0x03;

_delay_ms(period);

PORTA=0x01;

_delay_ms(period);

}

PORTA=0x09;/* последний шаг в начальную позицию */

_delay_ms(period);

_delay_ms(1000);

/* вращаем шаговый двигатель против часовой стрелки */

for(inti=;i<50;i++)

{

PORTA=0x01;

_delay_ms(period);

PORTA=0x03;

_delay_ms(period);

PORTA=0x02;

_delay_ms(period);

PORTA=0x06;

_delay_ms(period);

PORTA=0x04;

_delay_ms(period);

PORTA=0x0C;

_delay_ms(period);

PORTA=0x08;

_delay_ms(period);

PORTA=0x09;

_delay_ms(period);

}

PORTA=0x09;

_delay_ms(period);

_delay_ms(1000);

}
}

AF_Stepper steppername(steps, portnumber)

Функция AF_Stepper инициализирует шаговый двигатель. Вызывается один раз в скетче для каждого шагового двигателя. Каждый шаговый двигатель должен получить уникальное имя как в примере ниже.

Параметры:

  • steps — определяет количество шагов на один оборот вашего мотора.
  • num — определяет как именно подключен шаговый двигатель к мотор шилду.

Значения для параметра ‘num’1 (каналы 1 и 2) и 2 (каналы 3 и 4).

Пример:

AF_Stepper Stepper1(48, 1); // A 48 шагов за один полный оборот ротора на каналах 1 и 2

AF_Stepper Stepper2(200, 2); // 200 шагов за один полный оборот ротора на каналах 3 и 4

step(steps, direction, style)

Шаги двигателя.

Параметры:

  • steps — количество шагов для поворота ротора
  • direction — направление вращения (FORWARD или BACKWARD)
  • style — тип шага:

Аргумент ‘style’ может принимать следующие значения:

  • SINGLE — подается питание на одну катушку.
  • DOUBLE — подается питание на две катушки для большего крутящего момента.
  • INTERLEAVE — среднее между single и double режимами, что позволяет совершить поворот на пол шага. Более плавное вращение, поворот на меньший угол, но из-за того, что совершается половина шага. Скорость тоже уменьшается в два раза.
  • MICROSTEP — на катушки подается/снимается питание, что позволяет генерировать ‘микро шаг’ между каждым шагом. В результате — меньший угол поворота ротора, более плавный ход, но уменьшение крутящего момента.

Примечание: Step — это функция, которая не вернет значение на выходе, пока не будут отработаны все заданные шаги. Для одновременного вращения двух моторов, надо выдержать паузы между шагами. Для этого используется функция «onestep()», которая рассмотрена ниже.

Stepper1.step(100, FORWARD, DOUBLE); // 100 шагов вперед с использованием шага с аргументом double

Stepper2.step(100, BACKWARD, MICROSTEP); // 100 шагов в противоположном направлении с использованием микрошага

setSpeed(RPMspeed)

Устанавливаем скорость мотора

Параметры:

Speed — скорость в RPM (рад/мин)

Пример:

Stepper1.setSpeed(10); // устанавливаем скорость мотора 1 на 10 рад/мин

Stepper2.setSpeed(30); // устанавливаем скорость мотора 2 на 30 рад/мин

onestep(direction, stepstyle)

Один шаг мотора.

Параметры:

  • direction — направление вращения (FORWARD или BACKWARD)
  • stepstyle — тип шага:

‘style’ может принимать следующие значения:

  • SINGLE — подается питание на одну катушку.
  • DOUBLE — подается питание на две катушки для большего крутящего момента.
  • INTERLEAVE — среднее между single и double режимами, что позволяет совершить поворот на пол шага. Более плавное вращение, поворот на меньший угол, но из-за того, что совершается половина шага. Скорость тоже уменьшается в два раза.
  • MICROSTEP — на катушки подается/снимается питание, что позволяет генерировать ‘микро шаг’ между каждым шагом. В результате — меньший угол поворота ротора, более плавный ход, но уменьшение крутящего момента.

Пример:

Stepper1.onestep(FORWARD, DOUBLE); // один шаг «вперед» с использованием аргумента double

release()

Убираем «держащий момент» на моторе. Благодаря этому уменьшается нагрев, но ротор шагового мотора не будет сопротивляться вращению.

Пример:

Stepper1.release(); // останавливаем вращение и снимаем «держащий момент» с ротора.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Драйвер двигателя на микросхеме HG7881

HG7881 – двухканальный драйвер, к которому можно подключить 2 двигателя или четырехпроводной двухфазный шаговый двигатель. Устройство часто используется из-за своей невысокой стоимости. Драйвер используется только для изменения направления вращения, менять скорость он не может.

Плата содержит 2 схемы L9110S, работающие как H-мост.

Характеристики драйвера HG7881:

  • 4-контактное подключение;
  • Питание для двигателей от 2,5 В до 12 В;
  • Потребляемый ток менее 800 мА;
  • Малые габариты, небольшой вес.

Распиновка:

  • GND – земля;
  • Vcc – напряжение питания 2,5В – 12В;
  • A-IA – вход A(IA) для двигателя A;
  • A-IB – вход B (IB) для двигателя A;
  • B-IA – вход A(IA) для двигателя B;
  • B-IB – вход B (IB) для двигателя B.

В зависимости от поданного сигнала на выходах IA и IB будет разное состояние для двигателей. Возможные варианты для одного из моторов приведены в таблице.

IA IB Состояние мотора
Остановка
1 Двигается вперед
1 Двигается назад
1 1 Отключение

Подключение одного двигателя к Ардуино изображено на рисунке.

Модуль L293D подает максимальный ток в 1,2А, в то время как на L298N можно добиться максимального тока в 4 А. Также L293D обладает меньшим КПД и быстро греется во время работы. При этом L293D является самой распространенной платой и стоит недорого.  Плата HG7881 отличается от L293D и L298N тем, что с ее помощью можно управлять только направлением вращения, скорость менять она не может. HG7881 – самый дешевый и самый малогабаритный модуль.

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

Мы рассмотрим вариант взаимодействия с полевым транзистором. Принципы подключения мотора будут разобраны на конкретном железе: DC-мотор, плата Arduino, N-канальный полевой транзистор, резистор на 10 кОм (R1), резистор на 220 Ом (R2).

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

  • Максимальный ток потребления мотора (ток при блокировке) не должен превышать максимальный ток стока полевого транзистора.
  • Затвор транзистора должен отпираться при напряжении 5 В.
  • Транзистор должен обладать встроенным диодом обратной цепи (flyback диод).

Установка библиотеки

Первая установка библиотеки Arduino

Перед тем как вы сможете использовать Motor shield, вам надо установить библиотеку AF_Motor Arduino library. Благодаря этой библиотеке ваш Arduino сможет «общаться» с мотор шилдом.

1. Скачайте файл библиотеки для мотор шилда с

2. Распакуйте ZIP файл, который вы скачали

3. Переименуйте распакованную папку AFMotor

4. Проверьте, чтобы внутри AFMotor были файлы AFMotor.cpp и AFMotor.h. Если их там нет, значит вы что-то некорректно сделали в предыдущих пунктах.

5. Переместите папку AFMotor в папку arduinosketchfolder/libraries. В Windows это будет что-то вроде MY Documents/Arduino/libraries, для Mac — Documents/arduino/libraries. Если вы устанавливаете библиотеки впервые, вероятно, придется создать папку под названием libraries. Название папки должно быть именно libraries. Без капса, без каких-либо других изменений!

6. Убедитесь, что в папке libraries есть папка AFMotor, а внутри нее — файлы AFMotor.cpp, AFMotor.h

7. Перезагрузите Arduino IDE. После перезагрузки в меню должен появится файл File->Examples->AFMotor->MotorParty

Дуговые ртутные лампы (ДРЛ) высокого давления

Разрядные лампы высокого давления не нуждаются в зажигающем устройстве, благодаря дополнительным резисторам и электродам в колбе. Подключаясь напрямую к напряжению в 220 Вт, они зажигается непосредственно от светового потока. Мощность – от 80 до 250 Вт. ДРЛ намного экономичнее ламп накаливания, не реагируют на изменения температуры, поэтому могут использоваться на улице. Срок службы таких ламп – до 15 000 часов.

Недостатки: процесс разгорания ДРЛ длится около 10мин, световой поток пульсирует, цветопередача — низкая. Повторно включить горячую лампу невозможно, пока та полностью не остынет.

Драйвер шагового двигателя Ардуино

Шаговый двигатель — это бесколлекторный синхронный двигатель, как и все двигатели, он преобразует электрическую энергию в механическую. В отличие от двигателя постоянного тока в которых происходит вращение вала, вал шаговых двигателей совершает дискретные перемещения, то есть вращается не постоянно, а шагами. Каждый шаг вала (ротора) представляет собой часть полного оборота.

Вращение вала двигателя осуществляется с помощью сигнала, который управляет магнитным полем катушек в статоре драйвера. Сигнал генерирует драйвер шагового двигателя. Магнитное поле, возникающее при прохождении электрического тока в обмотках статора, заставляет вращаться вал, на котором установлены магниты. Количество шагов задаются в программе с помощью библиотеки Arduino IDE.

Схема подключения шагового двигателя 28BYJ-48 к Arduino Uno через драйвер ULN2003 изображена на рисунке ниже. Основные характеристики мотора 28BYJ-48: питание от 5 или 12 Вольт, 4-х фазный двигатель, угол шага 5,625°. Порты драйвера IN1 — IN4 подключаются к любым цифровым выводам платы Arduino Mega или Nano. Светодиоды на модуле служат для индикации включения катушек двигателя.

Что такое шаговые двигатели и где их можно применить

Шаговый двигатель — это электромеханичское устройство, которое преобразует электрические импульсы в дискретные механические перемещения. Так, пожалуй, можно дать строгое определение. Наверное, каждый видел, как выглядит шаговый двигатель внешне: он практически ничем не отличается от двигателей других типов. Чаще всего это круглый корпус, вал, несколько выводов (рис. 1).

Рис. 1. Внешний вид шаговых двигателей семейства ДШИ-200.

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

Чем же хорош шаговый двигатель?

  • угол поворота ротора определяется числом импульсов, которые поданы на двигатель
  • двигатель обеспечивает полный момент в режиме остановки (если обмотки запитаны)
  • прецизионное позиционирование и повторяемость. Хорошие шаговые двигатели имеют точность 3-5% от величины шага. Эта ошибка не накапливается от шага к шагу
  • возможность быстрого старта/остановки/реверсирования
  • высокая надежность, связанная с отсутствием щеток, срок службы шагового двигателя фактически определяется сроком службы подшипников
  • однозначная зависимость положения от входных импульсов обеспечивает позиционирование без обратной связи
  • возможность получения очень низких скоростей вращения для нагрузки, присоединенной непосредственно к валу двигателя без промежуточного редуктора
  • может быть перекрыт довольно большой диапазон скоростей, скорость пропорциональна частоте входных импульсов

Но не все так хорошо.

  • шаговым двигателем присуще явление резонанса
  • возможна потеря контроля положения ввиду работы без обратной связи
  • потребление энергии не уменьшается даже без нагрузки
  • затруднена работа на высоких скоростях
  • невысокая удельная мощность
  • относительно сложная схема управления

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

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

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

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

При проектировании конкретных систем приходится делать выбор между сервомотором и шаговым двигателем. Когда требуется прецизионное позиционирование и точное управление скоростью, а требуемый момент и скорость не выходят за допустимые пределы, то шаговый двигатель является наиболее экономичным решением. Как и для обычных двигателей, для повышения момента может быть использован понижающий редуктор. Однако для шаговых двигателей редуктор не всегда подходит. В отличие от коллекторных двигателей, у котрых момент растет с увеличением скорости, шаговый двигатель имеет больший момент на низких скоростях. К тому же, шаговые двигатели имеют гораздо меньшую максимальную скорость по сравнению с коллекторными двигателями, что ограничивает максимальное передаточное число и, соответственно, увеличение момента с помощью редуктора. Готовые шаговые двигатели с редукторами хотя и существуют, однако являются экзотикой. Еще одним фактом, ограничивающим применение редуктора, является присущий ему люфт.

Источник

Пример работы для Espruino

Код программы

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

dc_motors.js
// подключаем библиотеку «motor»
var Motor = require('@amperka/motor');
// подключаем первый мотор канала M1 на Motor Shield
var motorOne = Motor.connect(Motor.MotorShield.M1);
// подключаем второй мотор канала M2 на Motor Shield
var motorTwo = Motor.connect(Motor.MotorShield.M2);
 
// Альтернативный способ подключения с указанием пинов
// var myMotor = Motor.connect({phasePin: P4, pwmPin: P5, freq: 100});
 
// интеварал времени
var time = 1000;
// счётчик
var state = ;
 
// каждую секунду меняем режим работы
setInterval(() => {
  // останавливаем моторы
  motorOne.write();
  motorTwo.write();
  state++;
  if (state === 1) {
    motorOne.write(1);
  } else if (state === 2) {
    motorOne.write(-1);
  } else if (state === 3) {
    motorTwo.write(1);
  } else if (state === 4) {
    motorTwo.write(-1);
  } else {
    state = ;
  }
}, time);

Код программы

Усложним задачу. Будем плавно увеличивать скорость первого мотора до максимальной скорости, а потом понижать до полного выключения. Аналогично проделываем со вторым мотором.

dc_motors_pwm.js
// подключаем библиотеку «motor»
var Motor = require('@amperka/motor');
// подключаем первый мотор канала M1 на Motor Shield
var motorOne = Motor.connect(Motor.MotorShield.M1);
// подключаем второй мотор канала M2 на Motor Shield
var motorTwo = Motor.connect(Motor.MotorShield.M2);
 
// создаём объект анимация
// для плавного изменения параметров вращения мотора
var animMotor = require('@amperka/animation').create({
  // начальное значение
  // при «0» мотор стоит
  from ,
  // конечное значение
  // при «1» мотор вращается с максимальной скоростью в одну сторону
  to 1,
  // продолжительность полного перехода
  // за 5 секунд мотор пройдёт диапазон значений от нуля до единицы
  duration 5,
  // шаг обновления: каждые 20 мс
  updateInterval 0.02
}).queue({
  // после завершения перехода, выполняем ещё одну операцию
  // начальное значение
  // при «-1» мотор вращается с максимальной скоростью в обратную сторону
  from -1,
  // конечное значение
  // при «0» мотор стоит
  to ,
  // продолжительность полного перехода
  // за 5 секунд мотор пройдёт диапазон значений от минус единицы до нуля
  duration 5
});
 
// номер мотора
var motorNum = motorOne;
// время вращения работы мотора
var time = 10000;
 
// обработчик анимации
animMotor.on('update', function(val) {
  motorNum.write(val);
});
 
// функция работы первого мотора
var startMotorOne = () => {
  motorNum = motorOne;
  animMotor.play();
  setTimeout(() => {
    startMotorTwo();
  }, time);
};
 
// функция работы второго мотора
var startMotorTwo = () => {
  motorNum = motorTwo;
  animMotor.play();
  setTimeout(() => {
    startMotorOne();
  }, time);
};
 
// запускаем функцию работы первого мотора
startMotorOne();

Управление двигателем на Ардуино

Коллекторный моторчик может быть рассчитан на разное напряжения питания. Если двигатель работает от 3-5 Вольт, то можно моторчик подключать напрямую к плате Ардуино. Моторы для машинки с блютуз управлением, которые идут в комплекте с редукторами и колесами рассчитаны уже на 6 Вольт и более, поэтому ими следует управлять через полевой (биполярный) транзистор или через драйвер L298N.

На схеме показано устройство моторчика постоянного тока и принцип его работы. Как видите, для того, чтобы ротор двигателя начал крутиться к нему необходимо подключить питание. При смене полярности питания, ротор начнет крутиться в обратную сторону. Драйвер двигателей L298N позволяет инвертировать направление вращения мотора fa 130, поэтому его удобнее использовать в своих проектах.

Управление двигателем на Ардуино

Коллекторный моторчик может быть рассчитан на разное напряжения питания. Если двигатель работает от 3-5 Вольт, то можно моторчик подключать напрямую к плате Ардуино. Моторы для машинки с блютуз управлением, которые идут в комплекте с редукторами и колесами рассчитаны уже на 6 Вольт и более, поэтому ими следует управлять через полевой (биполярный) транзистор или через драйвер L298N.


Принцип работы и устройство мотора постоянного тока

На схеме показано устройство моторчика постоянного тока и принцип его работы. Как видите, для того, чтобы ротор двигателя начал крутиться к нему необходимо подключить питание. При смене полярности питания, ротор начнет крутиться в обратную сторону. Драйвер двигателей L298N позволяет инвертировать направление вращения мотора fa 130, поэтому его удобнее использовать в своих проектах.

Работа схемы

Схема подключения шагового двигателя к плате Arduino представлена на следующем рисунке.

Мы использовали шаговый двигатель 28BYJ-48 и драйвер мотора ULN2003. Для подачи питания на 4 катушки шагового двигателя мы будем использовать контакты платы Arduino 8, 9, 10 и 11. Драйвер мотора запитывается от контакта 5V платы Arduino.

Но если вы будете подсоединять какую-нибудь нагрузку к шаговому двигателю, то вам потребуется внешний источник питания для драйвера мотора. Мы в нашем примере эксплуатируем шаговый двигатель без нагрузки, поэтому нам и хватило питания от платы Arduino. И не забудьте соединить землю платы Arduino с землей драйвера мотора.

Управление сервоприводом джойстиком Ардуино

Для того, чтобы сделать управление сервомотора с помощью джойстика, необходимо первым делом подключить к аналоговым входам платы Arduino модуль ky-023. Это необходимо, чтобы АЦП микроконтроллера получало данные о положении джойстика по координатам X и Y в режиме реального времени. Затем, с помощью строчек кода, эти данные мы преобразуем в соответствующее положение микро сервопривода.

Джойстик представляет собой два потенциометра, которые меняют сопротивление в электрической цепи при изменении положения ручки. Поэтому на аналоговых входах Ардуино, куда мы подключим джойстик, будут цифровые значения от 0 до 1023, т.е. АЦП микроконтроллера преобразует значения напряжения от 0 до 5 Вольт в цифровые значения. Именно эти значения мы будем использовать для управления серво.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий