Робот на ардуино, который передвигается по линии

Содержание:

Drawbot

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

Drawbot состоит из нескольких частей:
— DC Boarduino (Arduino клон)
— 2х сервопривода непрерывного вращения.
— 2х серво колеса.
— Небольшая макетная плата.
— Разъем для батареи 9В с выключателем и штекером 2,1 мм.

— Провода с BLS штырьками.

Вместо Boarduino можно использовать любую плату Arduino. Я использовал Boarduino из-за маленьких размеров.

Также вам понадобится несколько маркеров (Я рекомендую брать набор маркеров разных цветов), батарея 9В и основа.

Сборка Drawbot довольно проста. Сначала я соединил два сервопривода с колесами скотчем и измерил расстояние между колесами. Ширина основы должна быть немного меньше расстояния между колесами.

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

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

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

Как и везде в этом проекте, я использовал провода с BLS штырьками для подключения сервоприводов к макетной плате.

Когда я закончил сбору, я захотел проверить его работу. Я хотел найти или написать код для непрерывного вращения сервопривода. Поискав, я нашел статью Управление сервоприводом непрерывного вращения Parallax (Futaba) при помощи Arduino. Я максимально упростил свой код. Сейчас Drawbot просто ездит по кругу. Да, это примитивно, но это хороший старт и основа для дальнейшего развития.

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

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

Полученный рисунок был довольно неуклюжими, потому, что лист лежал на полу, а он не идеально ровный, вероятно, сервоприводы вращаются не совсем синхронно. У нас один круг может быть ниже, другой выше, следующий ещё немного ниже или выше. Вероятно, в идеальном мире все окружности были-бы выровнены по одной линии. Я думаю, это выглядело бы красивей.

Мы подумали, что два маркера будет лучше, чем один, и прикрепили его. Результат был хорошим. Круги начали пересекаться. Интересно будет попробовать запустить робота на большем листе бумаги, чтобы посмотреть, как он ведет себя дальше.

Код:

int servoPinL = 9;
int servoPinR = 10;

void setup() {
pinMode(servoPinL,OUTPUT);
pinMode(servoPinR,OUTPUT);
}

void loop() {
digitalWrite(servoPinL,HIGH);
digitalWrite(servoPinR,HIGH);
delayMicroseconds(1500);
digitalWrite(servoPinL,LOW);
digitalWrite(servoPinR,LOW);
delay(50);
}

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

Оригинал статьи

Шаг 5: комбинирование и фильтрация данных

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

currentAngle = 0.9934 * (previousAngle + gyroAngle) + 0.0066 * (accAngle)

0.9934 и 0.0066 являются коэффициентами фильтра для интервала времени 0.75с. Фильтр нижних частот пропускает через него любой сигнал, длительность которого превышает эту длительность, а фильтр верхних частот пропускает любой сигнал, длина которого меньше этой длительности. Отклик фильтра можно настроить, выбрав правильную постоянную времени. Понижение постоянной времени позволит увеличить горизонтальное ускорение.

Устранение ошибок смещения акселерометра и гироскопа

Загрузите в Arduino скетч MPU6050_calibration.ino для калибровки смещений MPU6050. В скетче FullCode.ino в функции setup() есть следующие строчки:

mpu.setYAccelOffset(1593);

mpu.setZAccelOffset(963);

mpu.setXGyroOffset(40);

В этих строчках замените числа на полученные при калибровке.

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

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

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

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

Как работает балансировка?

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

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

Корректирующим элементом является комбинация двигателя и колеса.

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

Сначала подключите MPU6050 к Ардуино и проверьте соединение, используя коды в этом учебном руководстве по интерфейсу IMU. Если данные теперь отображаются на последовательном мониторе, вы молодец!

Продолжайте подключать остальные компоненты, как показано выше. Модуль L298N может обеспечить +5В, необходимый для Ардуино, если его входное напряжение составляет +7В или выше. Тем не менее, мы выбрали отдельные источники питания для двигателя и схемы.

Обратите внимание, что если вы планируете использовать напряжение питания более 12 В для модуля L298N, вам необходимо удалить перемычку чуть выше входа +12 В.
Корпус робота изготовлен в основном из акрилового пластика с двумя редукторными двигателями постоянного тока:
Основная печатная плата, состоящая из Arduino Nano и MPU6050:
Модуль драйвера двигателя L298N:

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

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

Robot library

The Robot library is included with Arduino IDE 1.0.5 and later.

The Robot has a number of built in sensors and actuators. The library is designed to easily access the robot’s functionality.

The robot has two boards, a motor board and control board. Each board has a separate programmable processor.

The library allows you to interface with the various sensors and peripherals on the control board :

  • potentiometer
  • 5 momentary switches
  • 160×120 pixel color screen
  • 512Kbit EEPROM
  • speaker
  • compass
  • 3 I2C connectors
  • 8 TinkerKit input connectors

The library also enables you to do a number of things with the motor board :

  • control motor speed and direction
  • sense the current used by each motor
  • read the state of the 5 floor sensors (also known as line detection sensors)
  • access I/O pins on the board
  • control an I2C port
  • read the state of 4 TinkerKit inputs

For more information about the Robot, visit the getting started guide and the hardware page.

Library structure

It is possible to program both the Control and the Motor boards. However, it is recommended that novice programmers begin with programming the control board, leaving the motor board for later. The library exposes the sensors on both boards through a single object.

There are two main classes that command the robot:

  • RobotControl: commands the Control Board as well as the I/Os and motors on the Motor Board, when running the default firmware.

  • RobotMotor: commands the Motor Board. Use it to make your own custom version of the Motor Board firmware
  • Logo — tell your robot where to go through the on-board keyboard
  • Line Following — draw a racing track and get your robot to run on it
  • Disco Bot — turn your robot into an 8-bit jukebox and dance to the beat
  • Compass — plan a treasure hunt with this digital compass
  • Inputs — learn how to control the knob and the keyboard
  • Wheel Calibration — tune the wheels to perform even better
  • Runaway Robot — play tag with your robot using a distance sensor
  • Remote control — reuse that old tv-remote to command the bot on distance
  • Picture browser — want to use your own images? This is how
  • Rescue — train your robot to look for hidden pearls in a maze
  • Hello User — hack the robot’s welcome demo and make your own

RobotControl class

This class commands the Control Board as well as all the I/Os and motors on the Motor Board when it has the stock firmware installed.

  • RobotControl Constructor

  • begin()

  • setMode()
  • pauseMode()
  • isActionDone()

  • lineFollowConfig()

  • digitalRead()
  • digitalWrite()
  • analogRead()
  • analogWrite()
  • updateIR()
  • knobRead()
  • compassRead()
  • keyboardRead()
  • waitContinue()

  • motorsWrite()
  • motorsStop()
  • turn()
  • pointTo()

  • beginSpeaker()
  • playMelody()
  • beep()
  • playFile()
  • tuneWrite()
  • tempoWrite()

  • beginTFT()
  • text()
  • drawBMP()
  • debugPrint()
  • clearScreen()
  • displayLogos()
  • drawCompass()

  • beginSD()

  • userNameRead()
  • userNameWrite()
  • robotNameRead()
  • robotNameWrite()
  • cityNameRead()
  • cityNameWrite()
  • countryNameRead()
  • countryNameWrite()

RobotMotor class

Use this to make your own firmware for the Motor Board.

  • RobotMotor Constructor

  • begin()
  • process()
  • parseCommand()

  • motorsWrite()
  • IRread()

Read this document to learn about making your own firmware for the motor board using the RobotMotor class.

Основные способности робоплатформы:

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

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

Датчик цвета принимает свет, отраженный от объекта. Робот идентифицирует цвет расположенного перед ним предмета и изменяет цвет RGB светодиода на цвет объекта, который мы рассматриваем.

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

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

Видеообзоры:

Выбор електроники для вашего бота

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

  • Arduino UNO
  • Двигатели постоянного тока с редуктором – 2Nos
  • L298N Motor Driver Module
  • MPU6050
  • Пара колес
  • 7.4V Li-ion Battery
  • Купа проводов
  • Каркас напечатанный на 3D принтере

Контроллер:
Контроллер, который я использовал здесь, это Arduino UNO, почему, потому что он просто прост в использовании. Вы также можете использовать Arduino Nano или Arduino mini, но я бы рекомендовал вам придерживаться UNO, так как мы можем запрограммировать его напрямую без какого-либо внешнего оборудования.

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

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

Колеса:
не недооценивайте этих парней; Мне было трудно понять, что проблема была в моих колесах. Поэтому убедитесь, что ваши колеса хорошо сцеплены с полом, который вы используете.

Акселерометр и гироскоп:
лучшим выбором акселерометра и гироскопа для вашего робота будет MPU6050
. Поэтому не пытайтесь построить его с обычным акселерометром, например ADXL345
, или что-то в этом роде, он просто не сработает. Вы узнаете, почему в конце этой статьи. Вы также можете использовать эту статью для изучения MPU6050 и его подключения к Arduino.

Battery:
Нам нужна батарея как можно более легкая, а рабочее напряжение должно быть больше 5 В, чтобы мы могли напрямую управлять нашим Arduino без модуля повышения. Таким образом, идеальным выбором будет литий-полимерный аккумулятор 7.4V. Поскольку у меня была литий-ионная аккумуляторная батарея 7,4 В, я ее использовал. Но помните, что Li-po лучше, чем Li-ion.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *