Компьютерная грамотность

Четвероногий робот на базе Arduino. Бейктал Дж

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

Сигвей от англ. Segway – двухколесное средство передвижения стоя, оснащенное электроприводом. Еще их называют гироскутерами или электрическими самокатами.

Вы когда-нибудь задумывались, как работает Сигвей? В этом уроке мы постараемся показать вам, как сделать робота Ардуино, который уравновешивает себя точно так же, как Segway.

Чтобы сбалансировать робота, двигатели должны противодействовать падению робота. Это действие требует обратной связи и корректирующих элементов. Элемент обратной связи - , который обеспечивает как ускорение, так и вращение во всех трех осях (). Ардуино использует это, чтобы знать текущую ориентацию робота. Корректирующим элементом является комбинация двигателя и колеса.

В итоге должен получиться примерно такой друг:

Схема робота

Модуль драйвера двигателя L298N:

Мотор редуктора постоянного тока с колесом:

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

Завершенный вариант самостоятельно балансирующего робота можно посмотреть на рисунке выше. В верхней части находятся шесть Ni-Cd-батарей для питания печатной платы. В промежутках между моторами используется 9-вольтовая батарея для драйвера двигателя.

Теория

В теории управления, удерживая некоторую переменную (в данном случае позицию робота), требуется специальный контроллер, называемый ПИД (пропорциональная интегральная производная). Каждый из этих параметров имеет «прирост», обычно называемый Kp, Ki и Kd. PID обеспечивает коррекцию между желаемым значением (или входом) и фактическим значением (или выходом). Разница между входом и выходом называется «ошибкой».

ПИД-регулятор уменьшает погрешность до наименьшего возможного значения, постоянно регулируя выход. В нашем самобалансирующем роботе Arduino вход (который является желаемым наклоном в градусах) устанавливается программным обеспечением. MPU6050 считывает текущий наклон робота и подает его на алгоритм PID, который выполняет вычисления для управления двигателем и удерживает робота в вертикальном положении.

PID требует, чтобы значения Kp, Ki и Kd были настроены на оптимальные значения. Инженеры используют программное обеспечение, такое как MATLAB, для автоматического вычисления этих значений. К сожалению, мы не можем использовать MATLAB в нашем случае, потому что это еще больше усложнит проект. Вместо этого мы будем настраивать значения PID. Вот как это сделать:

  1. Сделайте Kp, Ki и Kd равными нулю.
  2. Отрегулируйте Kp. Слишком маленький Kp заставит робота упасть, потому что исправления недостаточно. Слишком много Kp заставляет робота идти дико вперед и назад. Хороший Kp сделает так, что робот будет совсем немного отклоняться назад и вперед (или немного осциллирует).
  3. Как только Kp установлен, отрегулируйте Kd. Хорошее значение Kd уменьшит колебания, пока робот не станет почти устойчивым. Кроме того, правильное Kd будет удерживать робота, даже если его толькать.
  4. Наконец, установите Ki. При включении робот будет колебаться, даже если Kp и Kd установлены, но будет стабилизироваться во времени. Правильное значение Ki сократит время, необходимое для стабилизации робота.

Поведение робота можно посмотреть ниже на видео:

Код Ардуино самобалансирующего робота

Нам понадобилось четыре внешних библиотеки, для создания нашего робота. Библиотека PID упрощает вычисление значений P, I и D. Библиотека LMotorController используется для управления двумя двигателями с модулем L298N. Библиотека I2Cdev и библиотека MPU6050_6_Axis_MotionApps20 предназначены для чтения данных с MPU6050. Вы можете загрузить код, включая библиотеки в этом репозитории .

#include #include #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #define MIN_ABS_SPEED 20 MPU6050 mpu; // MPU control/status vars bool dmpReady = false; // set true if DMP init was successful uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU uint8_t devStatus; // return status after each device operation (0 = success, !0 = error) uint16_t packetSize; // expected DMP packet size (default is 42 bytes) uint16_t fifoCount; // count of all bytes currently in FIFO uint8_t fifoBuffer; // FIFO storage buffer // orientation/motion vars Quaternion q; // quaternion container VectorFloat gravity; // gravity vector float ypr; // yaw/pitch/roll container and gravity vector //PID double originalSetpoint = 173; double setpoint = originalSetpoint; double movingAngleOffset = 0.1; double input, output; //adjust these values to fit your own design double Kp = 50; double Kd = 1.4; double Ki = 60; PID pid(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT); double motorSpeedFactorLeft = 0.6; double motorSpeedFactorRight = 0.5; //MOTOR CONTROLLER int ENA = 5; int IN1 = 6; int IN2 = 7; int IN3 = 8; int IN4 = 9; int ENB = 10; LMotorController motorController(ENA, IN1, IN2, ENB, IN3, IN4, motorSpeedFactorLeft, motorSpeedFactorRight); volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high void dmpDataReady() { mpuInterrupt = true; } void setup() { // join I2C bus (I2Cdev library doesn"t do this automatically) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz) #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif mpu.initialize(); devStatus = mpu.dmpInitialize(); // supply your own gyro offsets here, scaled for min sensitivity mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); // 1688 factory default for my test chip // make sure it worked (returns 0 if so) if (devStatus == 0) { // turn on the DMP, now that it"s ready mpu.setDMPEnabled(true); // enable Arduino interrupt detection attachInterrupt(0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // set our DMP Ready flag so the main loop() function knows it"s okay to use it dmpReady = true; // get expected DMP packet size for later comparison packetSize = mpu.dmpGetFIFOPacketSize(); //setup PID pid.SetMode(AUTOMATIC); pid.SetSampleTime(10); pid.SetOutputLimits(-255, 255); } else { // ERROR! // 1 = initial memory load failed // 2 = DMP configuration updates failed // (if it"s going to break, usually the code will be 1) Serial.print(F("DMP Initialization failed (code ")); Serial.print(devStatus); Serial.println(F(")")); } } void loop() { // if programming failed, don"t try to do anything if (!dmpReady) return; // wait for MPU interrupt or extra packet(s) available while (!mpuInterrupt && fifoCount < packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); motorController.move(output, MIN_ABS_SPEED); } // reset interrupt flag and get INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is > 1 packet available // (this lets us immediately read more without waiting for an interrupt) fifoCount -= packetSize; mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); input = ypr * 180/M_PI + 180; } }

Значения Kp, Ki, Kd могут работать или не работать. Если они этого не делают, выполните шаги, описанные выше. Обратите внимание, что наклона в коде установлен на 173 градуса. Вы можете изменить это значение, если хотите, но обратите внимание, что это угол наклона, которым должен поддерживаться роботом. Кроме того, если ваши двигатели слишком быстры, вы можете отрегулировать значения motorSpeedFactorLeft и motorSpeedFactorRight.

На этом пока всё. До встречи.

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

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

Мы предлагаем небольшой обзор готовых роботов на плате Arduino.

Машинка на Arduino, управляемая через Bluetooth

Машинка, управляемая через Bluetooth , стоимостью чуть менее $100. Поставляется в разобранном виде. Помимо корпуса, мотора, колес, литиевой батарейки и зарядного устройства, получаем плату Arduino UNO328, контроллер мотора, Bluetooth адаптер, пульт дистанционного управления и прочее.

Видео с участием этого и еще одного робота:

Более подробное описание игрушки и возможность купить на сайте интернет-магазина DealExtreme .

Робот-черепаха Arduino

Комплект для сборки робота-черепахи стоимостью около $90. Не хватает только панциря, все остальное, необходимое для жизни этого героя, в комплекте: плата Arduino Uno, сервоприводы, датчики, модули слежения, ИК-приемник и пульт, батарея.

Черепаху можно купить на сайте DealExtreme , аналогичный более дешевый робот на Aliexpress .

Гусеничная машина на Arduino, управляемая с сотового телефона

Гусеничная машина, управляемая по Bluetooth с сотового телефона , стоимостью $94. Помимо гусеничной базы получаем плату Arduino Uno и плату расширения, Bluetooth плату, аккумулятор и зарядное устройство.

Гусеничную машину также можно купить на сайте DealExtreme , там же подробное описание. Может быть, более интересный железный Arduino-танк на Aliexpress .

Arduino-автомобиль, проезжающий лабиринты

Автомобиль, проезжающий лабиринты , стоимостью $83. Помимо моторов, платы Arduino Uno и прочего необходимого cодержит модули слежения и модули обхода препятствий.

Готовый робот или каркас для робота

Помимо рассмотренного в обзоре варианта использования готовых комплектов для создания роботов Arduino, можно купить отдельно каркас (корпус) робота — это может быть платформа на колесиках или гусенице, гуманоид, паук и другие модели. В этом случае начинку робота придется делать самостоятельно. Обзор таких корпусов приведен в нашей .

Где еще купить готовых роботов

В обзоре мы выбрали наиболее дешевых и интересных на наш взгляд готовых Arduino-роботов из китайских интернет-магазинов. Если нет времени ждать посылку из Китая — большой выбор готовых роботов в интернет-магазинах Амперка и DESSY . Низкие цены и быструю доставку предлагает интернет-магазин ROBstore . Список рекомендованных магазинов .

Возможно вас также заинтересуют наши обзоры проектов на Arduino:


Обучение Arduino

Не знаете, с чего начать изучение Arduino? Подумайте, что вам ближе — сборка собственных простых моделей и постепенное их усложнение или знакомство с более сложными, но готовыми решениями?

Всем привет. Эта статья небольшой рассказ о том, как сделать робота своими руками . Почему именно рассказ, спросите вы? Всё из-за того, что для изготовления подобной поделки необходимо использовать значительный багаж знаний, который очень трудно изложить в одной статье. Мы пройдёмся по процессу сборки, заглянем одним глазом в программный код и в конечном счете оживим детище «силиконовой долины». Советую посмотреть видео, чтобы иметь представление о том, что в итоге должно получится.

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

Шаг 1: Как это работает?

Робот имеет 4 ноги, с 3 сервоприводами на каждой из них, что позволяют ему перемещать конечности в 3-х степенях свободы. Он передвигается «ползучей походкой». Пусть она медленная, зато одна из самых плавных.

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

Шаг 2: Необходимые детали

Скелет изготавливается из оргстекла толщиной 2 мм.

Электронная часть самоделки будет состоять из:

  • 12 сервоприводов;
  • arduino nano (можно заменить любой другой платой arduino);

  • Шилда для управления сервоприводами;
  • блока питания (в проекте использовался БП 5В 4А);

  • ультразвукового датчика;
  • hc 05 bluetooth модуля;

Для того, чтобы изготовить шилд понадобится:

  • монтажная плата (предпочтительно с общими линиями (шинами) питания и земли);
  • межплатные штыревые соединители — 30 шт;
  • гнезда на плату – 36 шт;

  • провода.

Инструменты :

  • Лазерный резак (или умелые руки);
  • Суперклей;
  • Термоклей.

Шаг 3: Скелет

Воспользуемся графической программой, чтобы начертить составные части скелета.

После этого в любой доступный способ вырезаем 30 деталей будущего робота.

Шаг 4: Сборка

После резки снимаем защитное бумажное покрытие с оргстекла.

Далее приступаем к сборке ног. Крепежные элементы встроенные в части скелета. Всё, что остаётся сделать — это соединить детали воедино. Соединение довольно плотное, но для большей надежности можно нанести по капле суперклея на элементы крепежа.

Затем нужно доработать сервоприводы (приклеить по винту напротив валов сервоприводов).

Этой доработкой мы сделаем робота более устойчивым. Доработку нужно выполнить только для 8 сервоприводов, остальные 4 будут крепиться непосредственно на тело.

Прикрепляем ноги к связующему элементу (изогнутая деталь), а его в свою очередь к сервоприводу на теле.

Шаг 5: Изготавливаем шилд

Изготовление платы довольно простое, если следовать представленным в шаге фотографиям.

Шаг 6: Электроника

Закрепим выводы сервоприводов на плате arduino. Выводы следует соединять в правильной последовательности, иначе ничего не будет работать!

Шаг 7: Программирование

Пришло время оживить Франкенштейна. Сначала загрузим программу legs_init и убедимся в том, что робот находится в таком положении, как на картинке. Далее загрузим quattro_test, чтобы проверить реагирует ли робот на базовые движения, такие как движение вперед, назад, влево и вправо.

ВАЖНО: Вам необходимо добавить дополнительную библиотеку в программную среду arduino IDE. Ссылка на библиотеку представлена ниже:

Робот должен сделать 5 шагов вперед, 5 шагов назад, повернутся влево на 90 градусов, повернутся вправо на 90 градусов. Если Франкенштейн делает всё правильно, мы двигаемся в верном направлении.

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

Шаг 8: Инверсная кинематика

Инверсная (обратная) кинематика – именно она в действительности и управляет роботом (если вам не интересна математическая сторона этого проекта и вы торопитесь закончить проект можете пропустить данный шаг, но знание того, что движет роботом всегда будут полезны).

Простыми словами инверсная кинематика или сокращенно ик – «часть» тригонометрических уравнений, что определяют положение острого конца ноги, угла каждого сервоприводи и т.д., что в итоге определяют пару предварительных установочных параметров. Для примера, длина каждого шага робота или высота на которой будет располагаться тело во время движения/покоя. Используя эти предопределенные параметры, система будет извлекать величину, на которую следует сдвинуть каждый сервопривод, для того чтобы управлять роботом при помощи задаваемых команд.

В этой статье мы займемся постройкой своего робота с нуля. То, что у нас получится, смотрите на фото ниже. Робот будет ездить как самостоятельно, так и под управлением смартфона. А еще мы рассмотрим постройку своего мобильного робота с нуля.

3 D принтер

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

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

3D принтер? Всем, наверное, знаком обычный офисный принтер, который может распечатать на А4 нужный нам текст. Так вот, 3D принтер – это принтер, который может распечатать нужную деталь. Есть разные 3d принтеры. У меня принтер с технологией FDM (послойное наплавление). Какие еще есть технологии 3d печати, можно узнать в интернете.

Многие 3D принтеры работают на Arduino. При желании, можно собрать свой 3D принтер. Главная идея 3D принтера в том, что можно печатать абсолютно любую вещь, мы же напечатаем корпус для робота.

Для начала определимся с описанием платформы. Я хочу, чтобы платформа была двухколесной и в нее должны помещаться Arduino, питание, моторы и несколько датчиков.

Теперь нужно нарисовать макет платформы на бумаге и разместить на ней нужные компоненты. Например, вот так.

Когда макет будет готов, нужно будет сделать 3D модель платформы. Для этого существует множество программ. Я, обычно, пользуюсь . Я не буду учить работать с Компасом, но если вам интересно, можете посмотреть в интернете или попросить в комментариях сделать урок по Компасу.

Вот такая платформа получилась у меня.

После этого нужно преобразовать 3D модель в G-код, понятный 3d принтеру. Для этого существуют специальные программы - слайсеры. Я использую программу Repetier-Host со слайсером Sli3er. Вот как выглядит деталь, готовая к распечатке.

А вот распечатанная модель.

Только недавно у нас была идея, а готовая деталь уже перед нами. С помощью 3D принтера можно создавать уникальные вещи в единичных экземплярах. 3D принтер – классная штука. Советую всем!

Моторы

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

Если кто помнит, мы уже пробовали подключать мотор к Arduino. Кто не помнит, не знает или не читал – смотрим . В подключении мотора с помощью MOSFET есть существенные недостатки – невозможно оперативно менять скорость и направление вращения. Пришло время научить Arduino управлять моторчиками по-настоящему!

Для этого можно использовать микросхему L293D. L293D позволяет управлять сразу двумя моторами, с током 600 мА на канал и пиковым до 1000 мА, а если объединить каналы – то до 1200 мА и 2000 мА пикового тока. Про объединение расскажу ниже.

Для начала, как всегда, следует посмотреть на Datasheet, чтобы разобраться, куда и что подключать. Если вы не знаете о микросхемах, то стоит прочитать статью.

Приступим. Соберем простенькую схему с одним мотором и порулим им. Внимание на схему сборки.

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

  • Пин 1 – Отвечает за скорость вращения мотора. Аналогичный - на пине 9. Принимает значения от 0 до 255, что без проблем можно организовать с помощью PWM.Я подсоединил EN к пятому пину Arduino, который поддерживает PWM.
  • Пины 2 и 7 – Отвечают за направление движения мотора. Аналогичные - на пинах 10 и 15. Подача логической единицы на один из этих пинов заставит мотор крутиться в одну сторону (зависит от подключения мотора), подача логической единицы на другой – заставит мотор крутиться в обратную сторону.
  • Пины 3 и 6 – К ним нужно подключать мотор. Полярность не важна, от подключения будет зависеть только направление вращения. Аналогичные - на пинах 11 и 14.
  • Пины 4 и 5 – Это земля. Думаю, не нуждается в пояснении. Аналогичные – 12 и 13.
  • Пин 8 – Питание для моторов. На него нужно подать питание в диапазоне от 4.5 до 36 Вольт
  • Пин 16 – на него подается логическая единица с Arduino. 5 Вольт, если что.

Отлично! Мотор подключили. Теперь можно и покодить.

#define FRW_BUT 7 //Кнопка "вперед" #define BCW_BUT 6 //Кнопка "назад" #define SPD 5 //Управление скоростью вращения... #define FRW 4 //...направлением вращения(вперед)... #define BCW 3 //...направлением вращения(назад) #define SPD_POT A5 int xspeed = 0; //Переменная для определения скорости вращения мотора int frw_move = 0; //Переменная для команды "вперед" int bcw_move = 0; //Переменная для команды "назад" void setup() { //Обозначаем пины pinMode(SPD, OUTPUT); pinMode(FRW, OUTPUT); pinMode(BCW, OUTPUT); pinMode(SPD_POT, INPUT); pinMode(FRW_BUT, INPUT_PULLUP); pinMode(BCW_BUT, INPUT_PULLUP); } void loop() { //Считываем показания с потенциометра //и приводим их в нужный диапазон - от 0 до 255 //После - передаем на пин регулировки скорости xspeed = analogRead(SPD_POT); constrain(xspeed, 0, 1023); xspeed = map(xspeed, 0, 1023, 0, 255); //Определяем нажатие кнопки "вперед" if(!digitalRead(FRW_BUT)) { frw_move = 1; } else { frw_move = 0; } //Определяем нажатие кнопки "назад" if(!digitalRead(BCW_BUT)) { bcw_move = 1; } else { bcw_move = 0; } //Вызываем функцию по отправке данных на L293D motor(); } void motor() { //Отправляем данные на L293D analogWrite(SPD, xspeed); digitalWrite(FRW, frw_move); digitalWrite(BCW,bcw_move); }

Как работает? Работает просто. При нажатии на левую кнопку колесо крутится в одну сторону, а при нажатии на правую – в другую. Поворотом ручки потенциометра можно регулировать скорость вращения моторчика. Действие нашей испытательной установки для моторчиков показано на видео.

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

Теперь про соединение каналов L293. Если хочется подключить более мощный моторчик, то можно объединить каналы.

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

Второй способ – сверху на L293 напаять другую L293. Берем и напаиваем пин 1 к пину 1, пин 2 к пину 2 и так далее. Этот способ так же дает прибавку к силе тока в два раза, но, в отличие от первого – оставляет возможность управлять сразу двумя моторчиками. У вас может возникнуть идея – а не напаять ли мне еще парочку L293? К сожалению, последующая напайка микросхем не приведет к увеличению силы тока еще на 600 мА. Прибавка будет незначительна.

“Э-эх, придется убирать мой 12-Вольтовый мотор… “ Не спешите расстраиваться. Для более мощных моторов подойдет старший брат L293 - L298, но сейчас мы не будем его рассматривать. Это мы сделаем чуть позже.

Motor Shield

Согласитесь, что с таким пучком проводов выглядит это все не очень. Чтобы избавиться от него можно спаять схему с L293 на печатной или макетной плате для пайки, но что делать, если паять не хочется или не умеется? Для этого существуют готовые решения в виде шилдов для Arduino, например. Я расскажу про один из них – Motor Shield V1 от DK Electronics.

Вот, собственно, фото шилд.

На этом шилде установлены две L293D, что позволяет управлять сразу четырьмя моторами. Еще там есть два контакта для сервомоторов. Питание подается либо на клемник, либо, при установленной перемычке, с питания Arduino. Перемычка так же позволяет брать питание для Arduino с шилда. Для работы с этим шилдом существует специальная библиотека. Скачать ее можно .

К минусам платы. Для работы с шилдом используются почти все цифровые пины, кроме 0, 1, 2, 13. Как мы знаем, пины 0 и 1 используются Arduino для прошивки, поэтому их лучше не использовать.

Есть тут и хорошая сторона. Если не подключать сервы, например, освобождаются пины 9 и 10, а если не использовать какой-либо из моторов, то освободятся пины 3, 5, 6, 11, в зависимости от неиспользуемого мотора. И еще. Нам остаются доступны шесть аналоговых выходов, которые при желании можно использовать как цифровые.

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

Нам понадобятся

  • Arduino UNO – Можно использовать любую другую форм фактора Arduino UNO. Leonardo или Iskra, например.
  • Motor Shield – Подойдут и другие версии этого шилда.
  • Моторчики на 6В – Можно взять любые, подходящие по характеристикам к Motor Shield.
  • Колеса диаметром 42мм – Колеса подходящие к моторчикам и платформе
  • Крепления для моторчиков – Моторчики нужно прикрепить к платформе. Возьмите подходящие к вашей.
  • Питание – Я взял блок аккумуляторов и получил на выходе около 5 Вольт, что недостаточно для питания моторов и Arduino, поэтому я подключил DC/DC преобразователь и поднял напряжение до 9В. Если нет преобразователя, то можно воспользоваться обычной кроной, подключив ее к питанию Arduino.

Пришло время собрать нашего робота.

Шаг 1

Соединяем Arduino и Motor Shield.

Шаг 2

Собираем моторы и прикручиваем их на платформу.

Шаг 3

Собираем питание через повышающий преобразователь.

Для тех, у кого Крона. Не забудьте перемычку!

Шаг 4

Прикручиваем моторы к Motor шилду с Arduino.

Шаг 5

Добавляем питание.

Шаг 6 (Опционально)

Прикрепим крышку – для эстетики.

У нас есть готовый робот. Теперь пришло время его запрограммировать. Смотрим на код.

//Подключаем библиотеку для работы с Motor Shield #include //Определяем левый мотор на клеммник номер 2 AF_DCMotor l_motor(2); //Определяем правый мотор на клеммник номер 3 AF_DCMotor r_motor(3); //Переменные для определения скорости //и времени движения int spd = 50; int time(1000); void setup() { //Задаем начальную скорость и выключаем моторы l_motor.setSpeed(spd); l_motor.run(RELEASE); r_motor.setSpeed(100); r_motor. run(RELEASE); } void loop() { // Едем вперед l_motor.run(FORWARD); r_motor.run(FORWARD); l_motor.setSpeed(spd); r_motor.setSpeed(spd); delay(time); // Едем назад l_motor.run(BACKWARD); r_motor.run(BACKWARD); l_motor.setSpeed(spd); r_motor.setSpeed(spd); delay(time); // Крутимся против часовой стрелки l_motor.run(FORWARD); r_motor.run(BACKWARD); l_motor.setSpeed(spd); r_motor.setSpeed(spd); delay(time); // Крутимся по часовой стрелке r_motor.run(FORWARD); l_motor.run(BACKWARD); l_motor.setSpeed(spd); r_motor.setSpeed(spd); delay(time); }

Отлично! Время проверять. Вот видео с моей проверки. А у вас как?

“Ты что-то говорил про робототехнические платы?” – могут сказать те, кто читал вводный урок 2 части курcа. Да, такие платы есть. Рассмотрим робототехническую платформу Strela.

Мечта робототехника. (Почти). Преимущества платы я описывал . Сразу к делу.

На ней- то и установлен старший брат L293 – L298. А еще пины выведены тройками, что как раз подходит для подключения многих датчиков.

Эту плату можно подключить вместо Arduino UNO и Motor Shield. Кроме того, ребята из Амперки написали библиотеку для работы со Стрелой, что делает управление моторами достаточно тривиальной задачей.

Для тех, кто не знал, рассказываю. К каждой нормальной библиотеке существуют примеры по ее использованию и библиотека для Стрелы не исключение. Для того чтобы их найти, заходим во вкладку Файл -> Примеры -> Strela. Там выбираем пример StrelaMotors, где выполняется скетч, похожий на скетч с использованием Motor Shield. Кстати, к Motor Shield тоже есть примеры. Если интересно – смотрите.

Что еще можно сделать со Стрелой – смотрите ниже.А мы переходим к беспроводной связи по Bluetooth.

Bluetooth

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

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

Это модуль HC-06. Я не буду особо вдаваться в подробности, но кому интересно, переходим . Наша цель – порулить роботом со смартфона. Начнем, пожалуй.

Для начала нужно подключить HC-06 к Arduino. Подключение будем осуществлять при помощи Software Serial. Эта библиотека позволяет эмулировать Serial Port на нужных нам пинах. Ради эксперимента попробуем сделать это на пинах A0(RX) и A1(TX). Зачем? Помним, что я рассказывал про Motor Shield.

Подключаем так:

  • Vcc – к 5V
  • GND – к GND
  • RX – к TX
  • TX – к RX

Я подключу HC-06 к роботу, которого мы собирали выше. Для этого воспользуемся тремя полосами на Motor Shield.

Робот готов. Осталось его запрограммировать.

Прежде чем читать код, вы должны кое-что узнать. Моторы не идеальны, как и все в этом мире. Даже два мотора из одной партии, идущие друг за другом, будут немного отличаться, что скажется на разнице в количестве оборотов при одном и том же напряжении. Если моторы просто подключить к motor Shield и подать на них одинаковую скорость, а это и есть одинаковое напряжение, то робот поедет не прямо, а немного, или много, в сторону. Это можно увидеть в видео выше.

Для того чтобы этого избежать, мы будем применять корректировочные коэффициенты. У меня левое колесо крутится намного быстрее, чем правое, поэтому я поставил коэффициент 0.62 для компенсации. Значение коэффициента подбирается экспериментальным путем.

// Подключаем библиотеки для работы с Motor Shield и Software Serial #include #include //Определяем пины для эмуляции SoftwareSerial mySerial(A0, A1); // RX, TX //Определяем левый мотор на клеммник номер 2 AF_DCMotor l_motor(2); //Определяем правый мотор на клеммник номер 3 AF_DCMotor r_motor(3); //Переменные для определения скорости //и корректировки вращения float spd = 70.0; float corr_l = 0.62; float corr_r = 1; float rot = 50.0; void setup() { //Задаем начальную скорость и выключаем моторы l_motor.setSpeed(spd); l_motor.run(RELEASE); r_motor.setSpeed(spd); r_motor. run(RELEASE); //Устанавливаем соединение с HC-06 mySerial.begin(9600); } void loop() { //Если появились данные, //вызываем функцию управления if (mySerial.available()) { drive(); } } void drive() { //Переменная для пришедших данных char control = mySerial.read(); //Для начала установим скорость if (((control - "0") >= 0) && ((control - "0") <= 9)) { spd = (control - "0") * 25.0; //сохраняем новое значение скорости } else if (control == "q") { spd = 255.0; } //Сравниваем команды, пришедшие со смартфона else if (control == "S") //Если пришла команда "S", стоим { l_motor.run(RELEASE); r_motor. run(RELEASE); } else if (control == "F") //Если пришла команда "F", едем вперед { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); r_motor.run(FORWARD); l_motor.run(FORWARD); } else if (control == "B") //Если пришла команда "B", едем назад { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); r_motor.run(BACKWARD); l_motor.run(BACKWARD); } else if (control == "I") //Если пришла команда "I", едем вперёд и направо { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r + rot); r_motor.run(FORWARD); l_motor.run(FORWARD); } else if (control == "J")//Если пришла команда "J", едем назад и направо { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r + rot); r_motor.run(BACKWARD); l_motor.run(BACKWARD); } else if (control == "G") //Если пришла команда "G", едем вперёд и налево { l_motor.setSpeed(spd * corr_l + rot); r_motor.setSpeed(spd * corr_r); r_motor.run(FORWARD); l_motor.run(FORWARD); } else if (control == "H") //Если пришла команда "H", едем назад и налево { l_motor.setSpeed(spd * corr_l + rot); r_motor.setSpeed(spd * corr_r); r_motor.run(BACKWARD); l_motor.run(BACKWARD); } else if (control == "R") //Если пришла команда "R", крутимся вправо { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); r_motor.run(FORWARD); l_motor.run(BACKWARD); } else if (control = "L") //Если пришла команда "L", крутимся влево { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); l_motor.run(FORWARD); r_motor.run(BACKWARD); } }

Робота прошили. Теперь займемся смартфоном.

RC controller

Для связи Arduino и смартфона через Bluetooth есть множество различных приложений. В поиске ключевыми словами будут: Arduino, Bluetooth, RC.

Я выбрал приложение под названием Bluetooth RC Controller. Оно идеально подойдет для нашей цели. При нажатии на кнопку приложение отправляет значение типа char на HC-06, который, в свою очередь, передает пришедшее значение Arduino. Значение, отправляемое при нажатии кнопки, устанавливается самостоятельно.

Чтобы установить соединение с роботом, нужно нажать на шестерню и выбрать пункт “Settings” В “Settings” нужно убедиться, что кнопки соответствуют этим отсылаемым символам, либо изменяем код Arduino.

После настройки символов можно устанавливать соединение с HC-06. Жмем на шестерню и заходим в “Connect to car” Открывается окно с сопряженными устройствами. В нем выбираем HC-06. Если его нет, то ищем с помощью “Scan for devices”. Если устройство найдено, но не хочет сопрягаться, то заходим в Bluetooth на смартфоне и сопрягаем, как обычно. Пароль стандартный – 1234. После этого заходим в “Scan for devices” и соединяемся.

Когда соединение установится, загорится зеленый огонек сверху, а HC-06 перестанет моргать. Можно начинать рулить. Полоска сверху отвечает за скорость движения.

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

Для этого нужно подключить XBee к Стреле, прошить ее скетчем из примеров под названием “ArduinoBluetoothRCCarOnStrela” и подключиться к XBee через RC controller.

Советы

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

Колеса крутятся не в те стороны, в какие хотелось бы – эта проблема легко устраняется путем перестановки проводов в клемниках или программно.

Bluetooth модуль не работает – нужно проверить наличие горящего красного светодиода на модуле. Если он не горит, то проверить правильность подключения Bluetooth модуля. Если светодиод горит, но соединение ну устанавливается, нужно убедиться в том, что RX модуля соединен с TX платы и наоборот, а так же попробовать способ с сопряжением модуля с Arduino через стандартный Bluetooth интерфейс.

Робот не едет прямо – я описывал эту проблему чуть выше, когда рассказывал про Bluetooth и Motor Shield.

При езде робот неожиданно останавливается и теряется соединение с HC-06 – проблема в источнике питания. Мы знаем, что Arduino нужно не менее 7В для стабильной работы, а еще мы знаем, что моторчики очень хорошо кушают. Если поднести щупы мультиметра к клеммникам подачи напряжения и измерить напряжение при выключенных моторах, а потом их включить, то можно увидеть, что напряжение на мультиметре упадет. Причем упасть напряжение может по-разному.

Если подключен источник питания, который не может обеспечить достаточный ток для моторов, то напряжение может упасть сильно, с 9 до 5 Вольт, например, а 5В уже не будет хватать для Arduino и она перезапустится. Решение – подключить более мощное питание. Как рассчитать, я расскажу ниже.

Если подключить источник питания мощнее, то просадка напряжения может быть только в течение нескольких миллисекунд, но и их может оказаться достаточно для перезапуска контроллера. Решение – параллельно проводам питания установить конденсатор не менее чем на 1000мкФ, емкость можно определить экспериментально. Я ставил конденсатор на 3300 мкФ и на 16В. Не забываем смотреть на максимальное напряжение конденсатора.

Когда источник питания достаточно мощный, просадки напряжения не более 0.2В.

Несколько советов для начинающих робототехников

Начиная планировку робота, первым делом желательно позаботиться о расчёте мощности силовой части и подборе соответствующего источника питания. Будет обидно, если 4 батарейки ААА не потянут твои 4 6-вольтовых мотора, а места для более источника питания не останется.

Для расчета мощности ищем характеристики моторов, плат, датчиков. Из курса физики знаем, что мощность можно рассчитать по формуле P = IU, где I – сила тока, U – напряжение. С помощью этой формулы и характеристик легко рассчитать потребляемую мощность готового устройства, а зная потребляемую мощность и рабочее напряжение питания, можно узнать оптимальную силу тока, необходимую для работы устройства, зная силу тока, можно определиться с необходимой емкостью аккумулятора и время работы устройства от выбранного аккумулятора.

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

Если есть цель сделать “пароль” из трех символов, то не стоит программировать все три сразу. Лучше сделать пароль из одного символа, проверить его, потом из двух, а после проверки – из трех. Мне помогает.

Робот создается методом проб и ошибок. Не получится один раз запрограммировать, чтобы действие выполнялось идеально. Те же подстроечные коэффициенты на колесах, поэтому не стоит опускать руки если что-то не получается, а если совсем-совсем не получается, то можно обратиться к добрым людям на форумы или написать мне, обязательно поможем!

Заключение

Робототехника – классная штука! В скором времени, я думаю, роботы займут, а то и уже заняли место в жизни людей. Мы сделали простейшего робота-машинку с управлением со смартфона, позже займемся более серьезными проектами, ну а пока – до скорого!

Робот – машинка на Ардуино становятся одним из самым популярных инженерных проектов в школьной робототехнике. Именно с таких устройств, автономных или управляемых со смартфона и bluetooth, начинается путь в робототехнику “после Lego”. К счастью, сегодня можно без труда купить все необходимые компоненты и достаточно быстро создать своего первого робота для езды по линии или объезда препятствий. В этой статье вы найдете подробную видео инструкцию как сделать продвинутый автомобиль Arduino Car своими руками, с питанием, датчиками линии, расстояния и управлении через bluetooth.

В отличие от других проектов, создание робота – автомобиля (Arduino Car) требует понимания и навыков работы сразу с несколькими важными компонентами, поэтому не стоит приступать к созданию машинок без получения базовых навыков работы с платформой Arduino. В любом случае, вам нужно будет но только подключить готовые модули, но и собрать конструкцию, шасси с двигателями, обеспечить правильное питание и управление. Все это потребует определенного терпения.

Вот список ключевых компонентов, которые обязательно встретятся в проекте.

Контроллер Ардуино

Куда уж без него, если мы говорим о проектах на этой платформе. Как правило, роботы машины делают на базе плат Arduino Uno и Nano. Mega будут слишком большие, Pro Mini сложнее подключать к компьютеру и соединять с остальными компонентами, а Leonardo требуют дополнительных навыков в программировании, они дороже и их основное преимущество (тесная интеграция с компьютером в качестве периферийного устройства) в данном случае не слишком востребована.

Есть еще вариант использования плат ESP8266 или ESP32, тогда в проекте появляется возможность управления машиной через WiFi. Но и сами платы и их программирование требует определенных навыков, в этой статье мы будем говорить преимущественно об Uno или Nano.

Конструкция, шасси и двигатели робота на Ардуино

Для того, чтобы что-то поехало или стало перемещаться, надо снабдить “это” колесами, гусеницами или манипуляторами-ногами. Вот тут выбор совершенно не ограничен, можно использовать совершенно любые комбинации и сочетания платформ. Как правило, в качестве начального варианта берутся уже готовые наборы платформ с Алиэкспресс.


Двигатель, шасси и колеса машинки на ардуино

Если работать со стандартными наборами вам не интересно, можно создать платформу своими руками. Например, разобрать игрушечные радиоуправляемые машинки или любые двигатели на 5-12 вольт, с редукторами или без. Колеса можно создать и самим, что тоже является интересной задачей.

Драйвер двигателей


Ардуино – достаточно ранимое устройство, не терпящее больших нагрузок по току. Соединяя его с “брутальными” мощными двигателями, не избежать беды. Поэтому для нормальной совместной работы нам нужно будет включить в схему робота компонент, отвечающий за управление двигателями – подающий и отключающий ток на их обмотки. Речь идет о микросхеме или готовом модуле, которые называют драйвером двигателя. На нашем сайте есть статьи, посвященные . Если вы покупаете готовые шасси, то обязательно предусмотрите возможность размещения на них подходящего драйвера.

Красивый корпус

Как правило, вся конструкция автомобиля строится вокруг его шасси. Если посмотреть примеры готовых проектов, то они часто выглядят как “провода на колесиках” – внешний вид их изобилует пучками соединительных проводов, ведущих от восседающего на троне контроллера Ардуино к драйверам, моторам и датчикам. Между тем, красивый и функциональный корпус не только вызывает правильные эстетические чувства и помогает выделить вашу модель от остальных. Хороший корпус может превратить игрушку в реальное устройство, помогает привить навыки конструирования и промышленного дизайна, что важно для инженеров любого возраста.

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


Питание робота на Ардуино

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

  • Обычные батарейки AA. Тут нужно понимать, что платы Arduino Uno, Nano и большинство двигателей, используемых в Ардуино-робототехнике, требуют напряжения в диапазоне 6-9 вольт. Поэтому придется собрать вместе последовательно не менее 4 батареек на 1,5 В, причем сами батарейки должны быть хорошего качества и обеспечивать работу с достаточно большим током. Например, большинство солевых батареек этим критериям не удовлетворяют. Батарейки AAA при создании ардуино-машинок практически не используются из-за своей пониженной емкости (хотя могут использоваться в миниатюрных моделях, где размер имеет первостепенное значение).
  • Аккумулятор AA. Здесь возникает еще большее ограничение по напряжению и току. Большинство аккумуляторов выдают напряжение 1,2 вольт, поэтому их требуется больше для “собирания” нужных нам 6-9 вольт. Несомненным плюсом является возможность перезарядки.
  • Литиевые аккумуляторы 18650. Это уже “серьезная артиллерия”, позволяющая получить большое время автономной работы, возможность подзарядки и приемлемые характеристики по току и напряжению. Рабочее напряжение для таких элементов питания – 3,7 В, что позволяет собирать готовую схему питания всего из двух элементов.
  • Другие источники питания. Сюда можно включить как более мощные и габаритные никель-металлгидридные, кадмиевые аккумуляторы, так и многочисленные литий-ионные “плоские” варианты, используемые в дронах, смартфонах или другой портативной цифровой технике.

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

Где купить платформу и запчасти

Все, о чем говорится в этой статье, можно без проблем купить на всем известном сайте. К сожалению, подавляющее большинство предложений основываются на стандартной платформе 4WD автомобиля с двумя несущими планками, не очень надежными двигателями и колесами, любящими ездить в “развалочку”. Но эти варианты относительно не дороги и вполне подойдут для начала работы.

Инструкция по сборке робота-автомобиля

В этой статье расскажем вам о том, как по шагам собрать универсального робота на колесной или гусеничной платформе. Управлять им будет микроконтроллер Ардуино нано. Если вам не нравится долго читать, посмотрите в конце статьи на видео, подготовленное нашими партнерами – каналом ArduMast Club.

Пример платформы робота-машины на Ардуино

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


Для реализации проекта нам понадобится:

  • Контроллер Ардуино (в нашем случае, Arduino Nano).
  • Двигатели с редукторами.
  • Корпус и шасси для крепления колес и оборудования
  • Корпус для аккумуляторов 18650 с выключателем.
  • Коммутационные провода.

Дополнительное оборудование, которое потребуется для создания полноценного проекта:

  • Датчик расстояния и серво-мотор, на который он установлен.
  • Инфракрасные датчики линии.
  • Светодиоды для индикации и “красоты”.
  • Пьезодинамик – пищалка.
  • Bluetooth модуль (если собираетесь управлять машинкой дистанционно).
  • Sensor shield (упрощает коммутацию).
  • Модуль контроля заряда и подзарядки аккумуляторов.
  • Сами аккумуляторы.

Общая схема машинки на Ардуино

Схема электропитания робота автомобиля

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

Давайте разберем самый простой вариант схемы питания электромоторов. Перед началом сборки лучше заранее припаять провода к моторам.


Схема питания и подключения двигателей в ардуино автомобиле

Все достаточно стандартно и вы найдете в интернете десятки подобных примеров. Но в этой схеме есть большой минус – в случае полного разряда аккумуляторы придут в негодность.


Для добавления контроллера разряда придется внести следующие изменения в схему:


Схема питания с контролем разряда аккумулятора

Теперь аккумуляторы будут защищены, но здесь нет возможности заряжать их.


Для зарядки можно использовать модуль повышения напряжения с 5v до необходимого уровня зарядки, который зависит от количества серий используемых аккумуляторов. Он имеет гнездо типа микро USB и при частом использовании оно может сломаться, поэтому мы рекомендуем установить дополнительное гнездо для последующей подзарядки пяти вольтовым блоком питания. Для зарядки двух литий-ионных аккумуляторов необходимо настроить выходное напряжение на 8,4 Вольта.


Схема питания с модулем зарядки для ардуино робота машинки

Подключаем двигатели и плату

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

Монтируем драйвер двигателей на платформу так, чтобы его радиатор был спереди. ЭТО ВАЖНО! В противном случае, вам придется переписывать программу для микроконтроллера.


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

Затем размещаем холдер и плату БМС. Не забываем оставлять место спереди для последующего монтажа каких-либо сенсоров. Ардуиио нужно разместить так, чтобы была в дальнейшем возможность подключить его к ПК для прошивки. Это же правило относится и к модулю для зарядки аккумуляторов.

Питание для ардуино и других электронных компонентов мы возьмем от драйвера двигателей.

Подключаем Bluetooth к машинке

Мы собираемся использовать модуль Bluetooth через SoftwareSerial (библиотеку SoftwareSerial.h), поэтому подключаем модуль блютуз к 3 и 4 цифровым пинам ардуино. RX к D3, TX к D4


Схема подключения Bluetooth к ардуино машинке
Схема подключения драйвера двигателя к роботу
Схема подключения компонентов к Arduino
Датчик расстояния машины

Программирование робота на Ардуино

Так как мы делаем инструкцию по сборке универсального робота, то неплохо бы предусмотреть все необходимое для разных вариантов ее использования. Весь код вы можете найти в архиве: https://yadi.sk/d/jIYZQDI-GuytMw

Для езды по черной линии мы задействовали 3 пина под датчики линии и три пина для подключения светодиодов, чтобы иметь возможность визуального контроля наличия линии. Другими словами, если под левым сенсором есть черная линия, то загорится левый светодиод и так далее. Кроме того, мы разработали и протестировали схему, в которой будут одновременно использоваться и управление скоростью моторов по ШИМ, и серводвигатель.

Видео инструкция по сборке робота на Ардуино

Предлагаем вашему вниманию подробную видео-инструкцию по сборке робота автомобиля на Ардуино от нашего партнера – канала ArduMast Club .

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

Лучшие статьи по теме