Этот учебник является частью: Управление 16 или 32 сервомоторами с помощью PCA9685
Эта подборка обучающих видеороликов поможет вам управлять 32 и более сервомоторами с помощью Arduino UNO, Nano, Mini или ESP32. Все коды прилагаются.
Управление 32 сервомоторами по Wi-Fi с использованием ESP32 и PCA9685 через настольный или мобильный телефон V5
В этом учебном руководстве мы узнаем, как управлять 32 сервомоторами с помощью модуля контроллера PWM PCA9685, подключенного к ESP32 по Wi-Fi. Эта конфигурация позволяет управлять каждым сервомотором индивидуально или всеми сразу через веб-интерфейс, доступный с настольного или мобильного устройства. К концу этого руководства у вас будет полностью функциональная система, способная с легкостью управлять несколькими сервомоторами.

Модуль PCA9685 предоставляет простой способ управления несколькими сервоприводами с помощью сигналов ШИМ, в то время как ESP32 обрабатывает Wi-Fi связь и функциональность веб-сервера. Вы сможете регулировать угол каждого сервомотора через удобный интерфейс, который отображает кнопки для каждого сервопривода. Для визуальной справки обязательно посмотрите видео (в видео на 00:00).
Аппаратное обеспечение объяснено
Этот проект в основном использует микроконтроллер ESP32 и контроллер ШИМ PCA9685. ESP32 — это мощный микроконтроллер с встроенными возможностями Wi-Fi, что делает его идеальным для проектов IoT. PCA9685 — это 16-канальный контроллер ШИМ, который можно каскадировать для управления до 64 сервоприводов. Он связывается с ESP32 через протокол I2C, что позволяет подключать несколько контроллеров и адресовать их индивидуально.
Каждый модуль PCA9685 имеет адрес I2C по умолчанию 0x40. При использовании нескольких модулей вы можете изменить их адреса, припаивая определенные перемычки. Например, первый модуль может быть на 0x40, второй на 0x41 и так далее. Эта каскадная возможность позволяет контролировать множество серво без необходимости использования дополнительных пинов на ESP32.
Как показано на изображении выше, для платы PCA9685 2 (слева) убедитесь, что вы спаяли этот путь, чтобы установить адрес I2C, чтобы он отличался от платы 1 (справа).
Детали спецификации
| Производитель | Аддафрут |
|---|---|
| Номер детали | PCA9685 |
| Логическое/входное напряжение | 2.3 В до 5.5 В |
| Напряжение питания | 2.3 В до 5.5 В |
| Выходной ток (на канал) | 25 мА |
| Пиковый ток (на канал) | 100 мА |
| Руководство по частоте ШИМ | 40 Гц до 1000 Гц |
| Входные логические пороги | 0.3 Vcc (низкий) / 0.7 Vcc (высокий) |
| Перепад напряжения / RДС(включено)/ насыщение | 0.5 В макс |
| Термальные пределы | 125 °C макс |
| Пакет | TSSOP-28 |
| Заметки / варианты | До 64 сервомоторов с каскадированием |
- Обеспечьте правильное питание (рекомендуется 5V, 2A).
- При необходимости используйте подтягивающие резисторы на линиях SDA и SCL.
- Тщательно проверяйте адреса I2C при использовании нескольких модулей PCA9685.
- Рассмотрите использование радиаторов для высокоэнергетических приложений.
- Проверьте сервоприводы по отдельности, чтобы убедиться в правильной работе.
Общие схемы подключения пинов I2C:SDA= GPIO 21,SCL= GPIO 22.
Инструкции по проводке

Чтобы подключить PCA9685 и ESP32, начните с подключения питания и земли. Подключите положительный вывод (V+) PCA9685 к выходу 5В вашего источника питания. Подключите землю (GND) PCA9685 к земле ESP32. Убедитесь, что оба устройства имеют общий провод заземления.
Далее, для I2C связи подключите вывод SDA PCA9685 к GPIO 21 на ESP32, а вывод SCL - к GPIO 22. Если вы используете несколько модулей PCA9685, убедитесь, что они правильно адресованы, припаивая перемычку A0, чтобы изменить адрес второго модуля на 0x41 и так далее. После этого вы можете подключить сервомоторы к выходным выводам PWM PCA9685 по мере необходимости.
Примеры кода и пошаговая инструкция
Код начинается с подключения необходимых библиотек и инициализации двух плат PCA9685. Идентификаторы, такие какmaximumServoиservoAngleопределите количество сервомашинок и текущий угол, соответственно.
Adafruit_PWMServoDriver board1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver board2 = Adafruit_PWMServoDriver(0x41);
int maximumServo = 32; // how many servos are connectedЭтот отрывок показывает инициализацию объектов PCA9685 с их соответствующими адресами. ПеременнаяmaximumServoустанавливает общее количество сервоприводов, которые можно контролировать.
В этоsetup()функция, платы инициализируются, и устанавливается соединение Wi-Fi. Начальная позиция всех сервомоторов устанавливается с помощью цикла.
void setup() {
board1.begin();
board2.begin();
board1.setPWMFreq(60); // Analog servos run at ~60 Hz updates
board2.setPWMFreq(60);
//initial position of all servos
for(int i=0; i < maximumServo; i++) {
if(i < 16) {
board1.setPWM(i, 0, angleToPulse(allServoPosition[i]));
} else {
board2.setPWM(i-15, 0, angleToPulse(allServoPosition[i]));
}
}
}Этот код настраивает платы PCA9685 и устанавливает частоту ШИМ. Он инициализирует все сервоприводы в их начальные позиции, которые определены вallServoPositionмассив.
Наконец, главный цикл обрабатывает входящие запросы клиентов для управления сервоприводами на основе пользовательского ввода.
void loop() {
server.handleClient();
if (buttonPushed && (servoNumber >= 0 && servoNumber < maximumServo)) {
if (servoNumber < 16) {
board1.setPWM(servoNumber, 0, angleToPulse(allServoPosition[servoNumber]));
} else {
board2.setPWM(servoNumber-15, 0, angleToPulse(allServoPosition[servoNumber]));
}
}
buttonPushed = 0;
}Этот цикл непрерывно обрабатывает запросы клиентов и обновляет позиции сервоприводов в зависимости от нажатой кнопки. ПеременнаяbuttonPushedсбрасывается после каждого действия, чтобы обеспечить надлежащий контроль.
Для полного кода, пожалуйста, обратитесь к разделу ниже статьи.
Демонстрация / Что ожидать
После того как всё настроено, вы должны иметь возможность управлять каждым сервоприводом по отдельности или всеми сразу через веб-интерфейс. Вы можете регулировать углы сервоприводов, нажав на кнопки, соответствующие каждому сервоприводу на вашем устройстве. Система должна реагировать быстро, но имейте в виду, что ограничения по мощности могут повлиять на производительность (в видео на 14:30).
Общие ошибки включают в себя обеспечение правильного назначения адресов I2C и достаточной мощности для сервоприводов. Если сервоприводы не реагируют, дважды проверьте свою проводку и соединения.
Временные метки видео
- 00:00 Начало
- 01:19 Введение
- 02:32 Настройка адреса I2C
- 05:07 Объяснение проводки
- 07:44 Подготовка Arduino IDE для ESP32
- 09:53 Объяснение кода Arduino
- 25:49 Демонстрация на компьютере
- 31:52 Демонстрация на мобильном телефоне
Этот учебник является частью: Управление 16 или 32 сервомоторами с помощью PCA9685
- Код Arduino и видео для сервоконтроллера PCA9685 на 16 каналов с разрешением 12 бит V1
- Управление 16 сервомоторами с помощью модуля PCA9685 и скетча Arduino V2 #1: По одному
- Управление 16 серводвигателями с помощью модуля PCA9685 и скетча Arduino V2: Управление отдельным сервоприводом
- Controlling 16 Servo Motors Using a PCA9685 Module and Arduino V2 Sketch #3: All Servos Together
- Управление 32 сервомотором с использованием модуля PCA9685 и скетча Arduino V3 #1: Все сервы вместе
- Управление 32 сервомоторами с помощью модуля PCA9685 и ESP32 V4
This code has not been parsed yet. Please return to the admin panel to parse it.
Вещи, которые могут вам понадобиться
-
АмазонкаКупите PCA9685 на Amazonamzn.to
-
АмазонкаСервомотор на Амазон.amzn.to
-
eBayКупите PCA9685 на eBayebay.us
-
АлиЭкспрессКупите PCA9685 на AliExpresss.click.aliexpress.com
-
АлиЭкспрессКупите сервомотор SG90 180 или 360 на AliExpress.s.click.aliexpress.com
-
БанггудПриобретите PCA9685 на Bangoodbanggood.com
Ресурсы и ссылки
-
ВнешнийPAC9685 Library (from GitHub)github.com
Файлы📁
Нет доступных файлов.