SunFounder Zeus Car Kit представляет собой образовательный набор на базе Arduino UNO и ESP32 Cam для детей (и взрослых), предназначенный для изучения электроники, робототехники и программирования. Это автомобиль с четырьмя меканум-колесами диаметром 6 см для всестороннего движения и различными сенсорами, управляемый через Android-приложение с поддержкой обзора от первого лица (FPV) благодаря встроенной камере.
Компания предоставила набор Zeus Car Kit для тестирования и оценки. После сборки он будет использоваться в «Игровом режиме» — готовой к работе игрушкой — перед изучением «Режима программирования» и связанных руководств по Arduino для оценки образовательного потенциала.
Распаковка Zeus Car Kit
Набор поставляется в красочной розничной упаковке, демонстрирующей возможности: FPV, всестороннее движение, компьютерное зрение, компас, ИК-управление, управление через приложение и RGB-подсветку.
Внутри упаковки находятся четыре коробки со всеми компонентами, показанными ниже.
Полный перечень:
- Конструкционные пластины (четыре металлические детали)
- 4x меканум-колеса
- 4x мотора
- Плата SunFounder (Arduino UNO) R3
- Плата расширения SunFounder Zeus Car Shield для подключения всех сенсоров и моторов к Arduino UNO
- Модуль ESP32 CAM и плата-адаптер камеры
- 2x модуля ИК-избегания препятствий
- Ультразвуковой модуль
- Модуль всенаправленного определения оттенков серого SunFounder Omni Grayscale для следования по линии и обнаружения границ
- 2x RGB LED-ленты
- Аккумулятор 2,220 mAh из двух соединенных батарей 18650
- ИК-пульт дистанционного управления
- Шайбы, гайки, винты, стойки и заклепки разных размеров в индивидуальных zip-пакетах с маркировкой
- Инструменты: шестигранные ключи, отвертки,
- Различные кабели
Включенное руководство по сборке упрощает сборку и содержит ссылку на более подробное онлайн-руководство пользователя .
Сборка Zeus Car Kit
Напечатанное руководство по сборке особенно удобно для тех, кто предпочитает не включать компьютер рано утром. Первый этап — крепление четырех моторов к металлическому шасси.
Процесс прост, главное — направить провода внутрь.
Далее следует сборка ультразвукового сенсора с использованием металлической пластины и заклепок.
Затем устанавливается модуль ESP32-CAM через адаптер с помощью еще одной металлической пластины, два модуля ИК-избегания препятствий с соответствующими кабелями и несколько стоек.
После этого плата Arduino UNO R3 (клон) фиксируется стойками и винтами, при этом кабели камеры и сенсоров пропускаются снизу.
На этом этапе плата расширения Zeus Car Kit Shield устанавливается на плату Arduino и подключается, как показано ниже.
Далее выполняется прокладка кабелей: провода моторов стягиваются хомутом, а одна часть липучки крепится на днище автомобиля.
Вторая часть липучки крепится к аккумулятору, который затем фиксируется на днище.
Аккумулятор подключается к разъему PWR на плате Zeus Car Shield, как и две RGB LED-ленты.
После снятия синей защитной пленки RGB LED-ленты крепятся спереди и сзади автомобиля. Модуль Omni Grayscale устанавливается под днищем, а меканум-колеса фиксируются винтами. Этот этап оказался сложнее ожидаемого — потребовалось приложить усилие для посадки колес на оси моторов.
Финальный шаг — подключение кабеля модуля Omni Grayscale к разъему GS на плате Zeus Car Shield.
Результат — собранный стильный роботизированный автомобиль.
Zeus Car Kit обладает расширенным функционалом (меканум-колеса, модуль ESP32 камеры) и ощутимо прочнее бюджетного набора CrowBot BOLT от Elecrow , протестированного ранее. Для долговечности и сложных задач Zeus предпочтительнее, тогда как CrowBot BOLT подойдет для кратковременного использования, позволяя сэкономить.

Игровой режим с приложением SunFounder Controller для Android
Перед использованием робота необходимо зарядить аккумулятор. Для этого используется USB-C адаптер — индикатор заряда горит до завершения процесса. Также следует убедиться, что выключатель питания выключен, а переключатель режима установлен в положение Run (а не Upload), как на фото ниже.
Доступно два «Игровых режима»: с ИК-пультом или через приложение SunFounder Controller для iOS или Android . Управление ИК-пультом позволяет быстрее начать работу со встроенными функциями, но мобильное приложение интереснее благодаря доступу к камере ESP32. Для теста приложение установлено на смартфон Huawei Y9 Prime 2019.
Первым шагом необходимо нажать иконку «Плюс» и выбрать Zeus Car.
Приложение загрузит стандартный пульт управления с возможностью добавления функций, после чего следует подтвердить выбор галочкой в правом верхнем углу.
После включения Zeus Car RGB LED-лента под днищем загорается голубым. Если цвет желтый, проверьте положение переключателя режима. Далее нажимается иконка соединения для подключения к Wi-Fi…
… выбирается сеть Zeus_Car на телефоне…
… и в приложении вместо иконки соединения отображается «Zeus_Car».
Нажатие кнопки воспроизведения рядом с надписью «Zeus_Car» выводит изображение с камеры поверх элементов управления…
… позволяя вручную управлять автомобилем с помощью джойстиков.
- Левый джойстик (K) управляет движением автомобиля во всех направлениях.
- Джойстик Q (справа) управляет направлением передних колес.
Остальные функции:
- Калибровка (E) – Активирует калибровку компаса. Робот будет вращаться до завершения калибровки (менее минуты, в нашем случае около 10 секунд).
- Стоп (F) – Останавливает все движения машины.
- Голос (I) – Управление голосовыми командами. Не работает на Android до подключения робота через режим точки доступа. На iOS работает с офлайн-распознаванием речи.
- Дрифт (J) – Активирует функцию дрифта.
- Линия (N) – Переключает в режим следования по линии.
- Следование (O) – Переключает в режим преследования.
- Обход (P) – Переключает в режим избегания препятствий.
Режим Follow требует калибровки путем регулировки потенциометров каждого модуля избегания препятствий на расстояние ~15 см (включение светодиода Sled), тогда как ультразвуковой датчик обнаруживает объекты на расстоянии ~20 см.
Для режима Line following потребуется создать трек из прилагаемой изоленты. Потребовалось несколько попыток, так как трек должен быть шириной не менее 3 см по всей длине для надежной работы. Лента имеет свойство отклеиваться и скручиваться, что неидеально. Лучше бы приложили напечатанный трек на бумаге или картоне для складывания в упаковку.
Рекомендуется калибровка, но этап был пропущен: пробный тест подтвердил корректное распознавание «белого» и черного, несмотря на неидеально белый пол.
Лучше всего посмотреть видео ниже, демонстрирующее все предустановленные режимы.
Программирование Zeus Car в Arduino IDE
Хотя использование Zeus Car в игровом режиме интересно, было бы неверно не задействовать его программируемость для изучения электроники и Arduino. На сайте документации доступны 18 «учебных проектов» с кодом на GitHub , включая прошивку «Play Mode», которая перезаписывается при загрузке пользовательских программ на плату Arduino UNO R3.
Рассмотрим первый урок «Basic Movements» для управления направлением движения Zeus Car. Первый шаг – скачать и установить Arduino IDE (предпочтительно версию 2.x) и необходимые библиотеки: SoftPWM и IRLremote.
Код можно скачать/клонировать с GitHub:
$ git clone https://github.com/sunfounder/zeus-car/
Подключите Zeus Car к ПК через прилагаемый USB-кабель (синий), убедившись, что переключатель Upload установлен правильно.
В ОС появится новое USB-устройство. Пример вывода ядра в Linux (Ubuntu 22.04):
[24617.705382] usb 1-1: new full-speed USB device number 4 using xhci_hcd
[24617.892262] usb 1-1: New USB device found, idVendor=2341, idProduct=0043, bcdDevice= 0.01
[24617.892270] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[24617.892273] usb 1-1: Manufacturer: Arduino (www.arduino.cc)
[24617.892276] usb 1-1: SerialNumber: 24238313435351C08281
[24618.041524] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
[24618.041586] usbcore: registered new interface driver cdc_acm
[24618.041589] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
Загрузим пример «Basic Movements» в Arduino IDE, выбрав плату «Arduino UNO» (подключенную к /dev/ttyACM0 или COMXX в зависимости от ОС).
Полный скетч для справки:
/*******************************************************************
* basic_move
Control the direction and speed of motors rotation by pwm,
to make the car go forward, backward, left turn, right turn and stop.
******************************************************************/
#include <Arduino.h>
#include <SoftPWM.h>
/*
* [0]--|||--[1]
* | |
* | |
* | |
* | |
* [3]-------[2]
*/
/** Set the pins for the motors */
#define MOTOR_PINS \
(uint8_t[8]) { \
3, 4, 5, 6, A3, A2, A1, A0 \
}
/** Set the positive and negative directions for the motors */
#define MOTOR_DIRECTIONS \
(uint8_t[4]) { \
1, 0, 0, 1 \
}
#define MOTOR_POWER_MIN 28 // 28/255
int8_t power = 80;
void setup() {
Serial.begin(115200);
Serial.println("Zeus Car basic move");
SoftPWMBegin(); //init softpwm, before the motors initialization
carBegin(); // init motors
}
void loop() {
carForward(power);
delay(1000);
carBackward(power);
delay(1000);
carLeft(power);
delay(1000);
carRight(power);
delay(1000);
carLeftForward(power);
delay(1000);
carLeftBackward(power);
delay(1000);
carRightForward(power);
delay(1000);
carRightBackward(power);
delay(1000);
carTurnLeft(power);
delay(1000);
carTurnRight(power);
delay(1000);
carStop();
delay(2000);
}
void carBegin() {
for (uint8_t i = 0; i < 8; i++) {
SoftPWMSet(MOTOR_PINS[i], 0);
SoftPWMSetFadeTime(MOTOR_PINS[i], 100, 100);
}
}
void carSetMotors(int8_t power0, int8_t power1, int8_t power2, int8_t power3) {
bool dir[4];
int8_t power[4] = { power0, power1, power2, power3 };
int8_t newPower[4];
for (uint8_t i = 0; i < 4; i++) {
dir[i] = power[i] > 0;
if (MOTOR_DIRECTIONS[i]) dir[i] = !dir[i];
if (power[i] == 0) {
newPower[i] = 0;
} else {
newPower[i] = map(abs(power[i]), 0, 100, MOTOR_POWER_MIN, 255);
}
SoftPWMSet(MOTOR_PINS[i * 2], dir[i] * newPower[i]);
SoftPWMSet(MOTOR_PINS[i * 2 + 1], !dir[i] * newPower[i]);
}
}
void carForward(int8_t power) {
carSetMotors(power, power, power, power);
}
void carBackward(int8_t power) {
carSetMotors(-power, -power, -power, -power);
}
void carLeft(int8_t power) {
carSetMotors(-power, power, -power, power);
}
void carRight(int8_t power) {
carSetMotors(power, -power, power, -power);
}
void carLeftForward(int8_t power) {
carSetMotors(0, power, 0, power);
}
void carLeftBackward(int8_t power) {
carSetMotors(-power, 0, -power, 0);
}
void carRightForward(int8_t power) {
carSetMotors(power, 0, power, 0);
}
void carRightBackward(int8_t power) {
carSetMotors(0, -power, 0, -power);
}
void carTurnLeft(int8_t power) {
carSetMotors(-power, power, power, -power);
}
void carTurnRight(int8_t power) {
carSetMotors(power, -power, -power, power);
}
void carStop() {
carSetMotors(0, 0, 0, 0);
}
Комментариев мало, но код понятен: Zeus Car будет двигаться в разных направлениях по секунде на каждом этапе, останавливаться на 2 секунды и повторять цикл. В уроке также объясняется принцип работы колес Меканума.
Попробуем загрузить код на плату. Возникла ошибка:
Sketch uses 3438 bytes (10%) of program storage space. Maximum is 32256 bytes.
Global variables use 401 bytes (19%) of dynamic memory, leaving 1647 bytes for local variables. Maximum is 2048 bytes.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
Failed uploading: uploading error: exit status 1
Это моя ошибка: перед загрузкой необходимо снять плату ESP32-CAM, так как она использует тот же последовательный порт. Переключатель Upload не решает эту проблему – ESP32-CAM нужно физически отсоединить от адаптера SunFounder. После этого код загружается без ошибок:
Если нет большого стола, лучше переместите робота на пол для тестирования программы «Basic Movements».
Полный список учебных проектов:
- Базовые движения
- Омни-перемещение
- Движение и вращение
- Дрифт
- Пульт ДУ
- Фары
- Компас
- Движение с привязкой к полю
- ИК-препятствия
- Ультразвук
- Обход препятствий
- Следование
- Градации серого
- Следование по линии
- Следование по линии с привязкой к полю
- AI-детекция в приложении (распознавание лиц/поз)
- Управление через приложение
- Управление через приложение Plus (аналог прошивки «Play Mode»)
Комплект предоставляет обширные возможности для обучения.
Заключение
SunFounder Zeus Car Kit – отличный робот как для игр после сборки, так и для изучения программирования и основ робототехники благодаря Arduino-примерам и урокам. Конструкция надежна и долговечна, что особенно подходит для учебных заведений.
Несмотря на удовольствие от тестирования, создание трека изолентой оказалось неудобным: через несколько часов лента перестала держаться на полу (возможно, из-за жаркого климата Таиланда). Напечатанный трек был бы предпочтительнее. Мобильное приложение, судя по всему, закрытое – упущена возможность изучения мобильной разработки.
Тем не менее, Zeus Car Kit рекомендуется к покупке, особенно учитывая стоимость $99 с доставкой и 10% скидку для новых покупателей. Также доступен на Amazon .
Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.