Оглавление
- Работа схемы
- Добавляем леску
- Шаг 5: комбинирование и фильтрация данных
- Обзор роботов на Arduino для начинающих
- Шаг 11 Настройка Arduino IDE
- Шаг 2: Сборка робота.
- Устанавливаем сенсоры на перчатке
- Об этом курсе
- Инфракрасный датчик для обнаружения лестниц
- Необходимые компоненты
- Исходный код программы
- Принцип работы робота движущегося вдоль линии
- Тестирование работы роботизированной руки
- Подключаем датчики изгиба к Arduino
- Программирование Android приложения с помощью Processing
Работа схемы
Проектируемый нами робот, управляемый с помощью жестов рук и акселерометра, функционально разделен на две части:
- Передающая часть.
- Приемная часть.
Передающая часть робота состоит из радиочастотного передатчика и акселерометра. Как мы уже отмечали, акселерометр имеет аналоговые выходы – нам будет необходимо конвертировать аналоговые значения с этих выходов в цифровые данные. Для этой цели мы в схеме устройства будем использовать 4-х канальный компаратор вместо использования аналого-цифрового преобразования (АЦП). При помощи установки опорного напряжения компаратора мы получаем на его выходе цифровой сигнал, затем этот сигнал мы подаем на кодер (кодирующее устройство) HT12E чтобы закодировать данные или преобразовать их в последовательную форму и затем передать их с помощью высокочастотного передатчика в окружающую среду.
На приемном конце мы будем использовать радиочастотный приемник для приема этих данных, которые затем мы будем подавать на декодер HT12D. Этот декодер конвертирует полученные данные в последовательной форме в параллельную форму которые потом считываются платой Arduino. В соответствии с принятыми данными мы будем управлять движением робота с помощью двух электромоторов: двигаться вперед, назад, поворачивать вправо и влево, останавливаться.
Робот, управляемый с помощью жестов рук, будет двигаться в соответствии с положением передатчика в наших руках. Когда мы будем наклонять руку вперед робот будет двигаться прямо и будет продолжать двигаться прямо до тех пор пока не получит очередную команду.
Когда мы будем отклонять руку в обратную сторону (назад), робот изменит направление своего движения на противоположное (назад) и будет двигаться в этом направлении пока не получит следующую команду.
Когда мы будем наклонять руку вправо робот тоже будет поворачиваться вправо до получения очередной команды.
Когда мы будем наклонять руку влево робот тоже будет поворачиваться влево до получения очередной команды.
Для остановки робота необходимо удерживать руку в неизменном положении.
Схема передающей части робота и ее внешний вид представлены на следующих рисунках.
Схема приемной части робота представлена на следующем рисунке.
Пара радиочастотных модулей (передатчик и приемник) используются для передачи и приема команд управления роботом. Приемник через декодер подсоединен к Arduino. Управление двумя двигателями постоянного тока производится с помощью драйвера мотора L293D, подсоединенного к Arduino. Соответственно контакты драйвера мотора 2, 7, 10 и 15 подсоединены к цифровым контактам Arduino 6, 5, 4 и 3. Один из двигателей постоянного тока подключен к выходным контактам 3 и 6 драйвера мотора, а другой двигатель – к контактам 11 и 14 драйвера мотора. Для питания драйвера мотора используется батарейка 9 В.
Добавляем леску
Добавить леску — это, наверное, самая сложная и ответсвенная часть проекта робо-руки. На сайте InMoov есть инструкция на этот счет. Концепция простая, но реализовать ее практически не так то просто
Обратите внимание, что эта часть проекта требует сосредоточения и терпения. Единственное отличие моего варианта от конструкции на InMoov — использование клея
Благодаря этому мы можем получить возможность более губкой настройки при калибровке серв. Для этого достаточно расплавить клей и подтянуть нужные нам болты. Хотя, конечно же, надежность конструкции падает. В конце-концов, после окончательной настройки и калибровки, мы в любой момент можем использовать другой вариант фиксации.
Для калибровки сервомоторов, проверните роторы так, чтобы пальцы робо-руки лежали на столе. Подключите ваш Arduino и источник питания. Выставьте качалки приводов таким образом, чтобы в полностью «лежащем» состоянии руки натяжение было максимальным.
Объяснить процесс калибровки достаточно сложно. Кроме того, инструкция с InMoov мне, например, не подошла. То есть, при крепеже вам надо проявить фантазию и подстроиться под ваши реалии — как то: тип качалок, тип лески или ниток, погрешности конструкции и сборки, расстояние установки сервомоторов относительно суставов робо-руки.
К счастью — это последний этап проекта!
Шаг 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);
В этих строчках замените числа на полученные при калибровке.
Обзор роботов на Arduino для начинающих
Комплекты роботов на Arduino — это универсальное решение для новичков, любителей и инженеров, знакомых с робототехникой и Arduino. Это отличная техническая платформа для запуска и создания мобильных роботов с большим творческим потенциалом.
Для выполнения таких задач вы должны получить некоторую информацию из разных источников, что немного сложно. Решением этой проблемы является покупка комплекта роботов Arduino и постройка их с меньшими усилиями для получения классных результатов. Хороший набор роботов поставляется с четкими инструкциями, поддержкой и экономит ваше время и деньги.
Сегодня на рынке представлено множество роботов работающих на базе Arduino; у каждого свои уникальные аппаратные устройства и технические характеристики. Так как очень трудно выбрать правильный, мы постарались подобрать вам лучшие наборы роботов Arduino, которые предлагают различные компоненты, стоимость, детали проекта, исходный код и многое другое.
Шаг 11 Настройка Arduino IDE
Теперь, когда оборудование готово, пришло время поработать над кодом Arduino.
- Скачайте и установите новую версию Arduino IDE
Вы можете найти последнюю версию для Windows, Linux или MAC OSX на веб-сайте Arduino: https://www.arduino.cc/en/main/software
- Добавление библиотек
Для этого проекта я использовал потрясающую библиотеку Nunchuk Arduino Роберта Эйзеля! Подробнее Вы можете узнать на его сайте:
Скачайте библиотеку — https://github.com/robotoss/Nunchuk
Перейдите в Sketch-> Include Library -> Manage Libraries… на вашей Arduino IDE для добавления библиотеки.
Перейдите в Скетч-> Подключить Библиотеку -> Добавить Библиотеку… на вашей Arduino IDE для добавления библиотеки.
Как работает библиотека?
В библиотеке Nunchuk имеется набор функций для считывания датчиков контроллера:
nunchuk_buttonZ (): возвращает 1, если нажата кнопка Z, или 0, если это не так;
nunchuk_buttonC (): возвращает 1, если нажата кнопка C, или 0, если это не так;
nunchuk_joystickX (): возвращает значение x джойстика (от -127 до 127);
nunchuk_joystickY (): возвращает значение y джойстика (от -127 до 127);
nunchuk_pitch (): возвращает угол контроллера в радианах (от -180º до 180º);
nunchuk_roll (): возвращает угол наклона контроллера в радианах (от -180º до 180º).
Углы возвращаются в радианах. Мы преобразовали эти значения в градусы в коде Arduino.
Шаг 2: Сборка робота.
Я построил своего робота используя дополнительные части распечатанные на 3D-принтере, которые у меня были, но Вы можете использовать запчасти от DVD или любой другой маленький плоский кусок пластика. Я использовал шасси с Aliexpress, Вы можете использовать другое шасси для своего проекта, но код Arduino будет немного отличаться. У меня все моторы, стояли в направлении передней части. В предварительно собранном шасси расположение направления двигателей расположено друг к другу, поэтому просто имейте это в виду.
В любом случае, используйте горячий клей или какой-либо другой клей, чтобы прикрепить ваши двигатели и детали Arduino к шасси.
Приклейте отсек для батареек к нижней части робота. Колеса будут защелкиваться к редукторам двигателя постоянного тока.
У меня есть вторая батарея под моим роботом. Я приклеил горячим клеем usb power bank на нижнею сторону в дополнение к 9-вольтовой батарее для того, чтобы подключить MCU Node отдельно для более продолжительного времени автономной работы во время разработки, но вы можете просто использовать 9-вольтовую батарею, если хотите.
Чтобы удержать телефон на месте, я использовал пластмассовую Г-образную пластину и пластиковый хомут. Я уверен, что есть другие (лучшие) варианты исполнения.
Устанавливаем сенсоры на перчатке
Можем приступать к установке датчиков и нашей монтажной платы на саму перчатку. Сначала просверлите небольшое отверстие в пластике датчиков. Отверстия сверлятся в местах, где чувствительный элемент закончился
ВАЖНО! Ни в коем случае не сверлите отверстие в чувствительном материале. После этого оденьте перчатку
Сделайте отметки карандашом или ручкой на вершине каждого сустава. Эти места вы будете использовать для крепежа сенсоров. Датчики изгиба крепятся обычной ниткой. Пришейте сенсоры к перчатке. Используйте отверстие, которые вы сделали на концах датчика. В местах, где отмечены суставы сенсоры «прихватываются» нитью поверх. Более детально все это показано на фото ниже. Монтажная плата пришивается к перчатке аналогично сенсорам. Учтите, что для движения пальцев надо оставить определенный запас длины проводников. Это надо учесть при установке нашей монтажной платы и выборе длины коннекторов от нее к датчикам.
Об этом курсе
Недавно просмотрено: 11 546
На протяжении тысячелетий люди усовершенствовали орудия труда, изучали силы природы и подчиняли их себе, использовали их энергию для работы машин, а в прошлом веке создали машины, которые могут управлять другими машинами. Теперь создание устройств, которые взаимодействуют с физическим миром, доступно даже школьнику.
Наш курс состоит из серии практических задач про создание вещей, которые работают сами: изучают мир, принимают решения и действуют – двигаются, обмениваются данными друг с другом и с человеком, управляют другими устройствами. Мы покажем, как собирать эти устройства и программировать их, используя в качестве основы платформу Arduino.
Пройдя этот курс, вы сможете создавать устройства, которые считывают данные о внешнем мире с разнообразных датчиков, обрабатывают информацию, получают и отправляют данные на ПК, в Интернет, на мобильные устройства, управляют индикацией и движением. Создание устройств будет включать проектирование, изучение компонентов, сборку схем, написание программ, диагностику. Попутно с созданием самих устройств вы сделаете визуализацию на ПК, создадите веб-страницу, которую будет демонстрировать одно из ваших устройств, а также разберетесь с устройством и работой FDM 3D-принтера.
Помимо тех, кто увлекается робототехникой или стремится расширить кругозор и свои навыки, курс будет полезен всем, кто сталкивается с задачами бытовой и производственной автоматизации, а также занимается промышленным дизайном, рекламой и искусством.
Курс не требует специальных знаний у слушателей, доступен даже ученикам старших классов средней школы. Плюсом будут навыки программирования и владение английским языком на уровне чтения технической документации, однако обязательным это не является.
Весь курс посвящен практике и самым лучшим решением для вас будет раздобыть электронику, повторять показанные примеры и экспериментировать самостоятельно.
Список используемого оборудования и где его купить: https://docs.google.com/spreadsheets/d/1ut6bwLQNr5DentiBPGZRtnWl1Fyj6i92OCoyqw4ks7o/edit?usp=sharing
Гибкие сроки
Гибкие сроки
Назначьте сроки сдачи в соответствии со своим графиком.
Сертификат, ссылками на который можно делиться с другими людьми
Сертификат, ссылками на который можно делиться с другими людьми
Получите сертификат по завершении
100% онлайн
100% онлайн
Начните сейчас и учитесь по собственному графику.
Часов на завершение
Прибл. 18 часов на выполнение
Доступные языки
Русский
Субтитры: Русский
Инфракрасный датчик для обнаружения лестниц
Для того, чтобы наш робот-пылесос мог обнаруживать лестницы и не падать с них, мы будем использовать инфракрасный датчик (IR Sensor). Принцип его действия достаточно прост – он содержит в своем составе излучающий инфракрасный диод (IR LED) и фотодиод. Излучающий инфракрасный диод излучает инфракрасный свет и если на его пути встречается препятствие, то он отражается от него и улавливается (принимается) фотодиодом. Но напряжение на выходе фотодиода достаточно мало, поэтому для его усиления до необходимого уровня в составе датчика содержится компаратор на основе операционного усилителя.
Инфракрасный датчик содержит 3 контакта – Vcc (питающее напряжение), ground (общий провод, земля) и output (выход). Когда вблизи датчика есть препятствие, то на его выходе формируется напряжение низкого уровня (low). Поэтому данный датчик мы можем использовать для обнаружения пола комнаты. Если он передвигается по полу, то на выходе датчика будет low. Если же на выходе датчика мы неожиданно обнаружим напряжение высокого уровня, то мы должны либо остановить робота, либо двигать его в обратном направлении, либо сделать что-либо другое чтобы предотвратить его падение с лестницы.
Необходимые компоненты
- Приводной двигатель постоянного тока желтого цвета (Geared DC motor (Yellow coloured) ) – 2 шт.
- Два колеса.
- Соединительные провода.
- Напечатанный на 3D принтере скелет (остов) робота.
Микроконтроллер: в качестве управляющего микроконтроллера в данном проекте мы выбрали плату Arduino UNO потому что с ней просто работать. Вы можете также использовать платы Arduino Nano или Arduino mini, но мы все таки рекомендовали использовать бы Arduino UNO потому что ее можно программировать без использования внешнего аппаратного обеспечения.
Двигатели: конечно, лучшим выбором для построения самобалансирующегося робота были бы шаговые двигатели, но в целях упрощения проекта мы использовали приводные двигатели (gear motor) постоянного тока желтого цвета – они значительно проще и дешевле чем шаговые.
Колеса: не стоит недооценивать эти элементы конструкции робота. У нас достаточно долго не получалось настроить баланс робота пока мы не поняли что проблема состоит в колесах. Колеса для построения самобалансирующегося робота должны иметь очень хорошее сцепление с полом и ни в коем случае они не должны проскальзывать при движении по полу.
Батарея: для проекта необходима батарея, которая по возможности будет максимально легкой и ее напряжение должно быть больше 5V чтобы мы могли запитать от нее плату Arduino непосредственно, без использования повышающего напряжения модуля. Идеальным выбором в данном случае будет 7.4V Li-polymer (литий-полимерная) батарея. Но в нашем распоряжении была только 7.4V литий-ионная батарея, поэтому мы ее и использовали при создании робота. Но помните о том, что литий-полимерная батарея в данном случае будет все таки лучше чем литий-ионная.
Шасси робота: еще один элемент робота, при создании которого неуместны компромиссы. Для изготовления шасси робота вы можете использовать листы картона, дерево, пластик и т.п. Но помните о том, что шасси должно быть достаточно прочным и не изгибаться когда робот пытается балансировать. Мы для изготовления шасси робота использовали 3D принтер, ссылки на необходимые файлы для него будут приведены далее в статье.
Исходный код программы
В программе мы первым делом инициализируем используемые контакты.
Далее мы устанавливаем режим работы этих контактов (на вывод данных) и инициализируем последовательный порт для работы на скорости 9600 бод/с.
Далее мы считываем информацию из буфера последовательного порта с помощью функции “serial.read()” и сохраняем ее значение во временной переменной. А затем сравниваем значение этой переменной с используемыми инструкциями роботу с помощью оператора “if” и даем соответствующие команды роботу.
Далее представлен полный текст программы.
Arduino
#define m11 3
#define m12 4
#define m21 5
#define m22 6
void setup()
{
// конфигурируем контакты на вывод данных
pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
pinMode(m21, OUTPUT);
pinMode(m22, OUTPUT);
Serial.begin(9600); // инициализация последовательного порта
}
void loop()
{
while(Serial.available())
{
char In=Serial.read(); // считываем значение из буфера последовательного порта и сохраняем его в переменной In
if(In==’f’ || In==’F’) // Forward (движение вперед)
{
digitalWrite(m11, HIGH);
digitalWrite(m12, LOW);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
else if(In==’b’ || In==’B’) //backward (движение назад)
{
digitalWrite(m11, LOW);
digitalWrite(m12, HIGH);
digitalWrite(m21, LOW);
digitalWrite(m22, HIGH);
}
else if(In==’l’ || In==’L’) // Left (влево)
{
digitalWrite(m11, HIGH);
digitalWrite(m12, LOW);
digitalWrite(m21, LOW);
digitalWrite(m22, LOW);
}
else if(In==’r’ || In==’R’) // Right (вправо)
{
digitalWrite(m11, LOW);
digitalWrite(m12, LOW);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
else if(In==’s’ || In==’S’) // stop (остановка)
{
digitalWrite(m11, LOW);
digitalWrite(m12, LOW);
digitalWrite(m21, LOW);
digitalWrite(m22, LOW);
}
else
{
}
}
}
1 |
#define m11 3 voidsetup() { // конфигурируем контакты на вывод данных pinMode(m11,OUTPUT); pinMode(m12,OUTPUT); pinMode(m21,OUTPUT); pinMode(m22,OUTPUT); Serial.begin(9600);// инициализация последовательного порта } voidloop() { while(Serial.available()) { charIn=Serial.read();// считываем значение из буфера последовательного порта и сохраняем его в переменной In if(In==’f’||In==’F’)// Forward (движение вперед) { digitalWrite(m11,HIGH); digitalWrite(m12,LOW); digitalWrite(m21,HIGH); digitalWrite(m22,LOW); } elseif(In==’b’||In==’B’)//backward (движение назад) { digitalWrite(m11,LOW); digitalWrite(m12,HIGH); digitalWrite(m21,LOW); digitalWrite(m22,HIGH); } elseif(In==’l’||In==’L’)// Left (влево) { digitalWrite(m11,HIGH); digitalWrite(m12,LOW); digitalWrite(m21,LOW); digitalWrite(m22,LOW); } elseif(In==’r’||In==’R’)// Right (вправо) { digitalWrite(m11,LOW); digitalWrite(m12,LOW); digitalWrite(m21,HIGH); digitalWrite(m22,LOW); } elseif(In==’s’||In==’S’)// stop (остановка) { digitalWrite(m11,LOW); digitalWrite(m12,LOW); digitalWrite(m21,LOW); digitalWrite(m22,LOW); } else { } } } |
Принцип работы робота движущегося вдоль линии
Механизм действия робота, движущегося вдоль линии, основан на физических принципах распространения и отражения света (световых волн). Дело в том, что свет практически полностью отражается от белой поверхности и практически полностью поглощается черной поверхностью, что показано на следующих рисунках.
В нашем роботе на Arduino, следующем вдоль линии, мы будем использовать инфракрасные передатчики и приемники, которые также называются фотодиодами. Они будут использоваться для передачи и приема света. Допустим, инфракрасный передатчик передал (излучил) свет. Когда эти инфракрасные лучи падают на белую поверхность, они отражаются от нее и улавливаются фотодиодами, которые в результате этого формируют на своем выходе определенное напряжение. А когда инфракрасные лучи падают на черную поверхность, то они поглощаются ею и в результате фотодиоды не улавливают отраженный от поверхности свет (как в предыдущем случае).
В нашем проекте мы будем использовать робота, который при обнаружении белой поверхности подает на вход платы Arduino 1, а при обнаружении черной поверхности – 0.
Тестирование работы роботизированной руки
Сделайте все соединения, которые показаны на выше приведенной схеме, и загрузите программу в плату Arduino. Подайте питание на плату Arduino Nano через порт USB с вашего компьютера и откройте окно монитора последовательной связи – в нем вы увидите приветственное сообщение.
Теперь введите R в окне монитора последовательной связи и нажмите ввод. Внизу монитора последовательной связи должна быть установлена опция Newline. Пример работы программы в этом режиме показан на следующем рисунке:
Информация, показанная на этом рисунке, может быть использована для отладки. Цифры, начинающиеся с 69, это текущая позиция сервомоторов с 0-го до 5-го. Значения индекса – это размер массива. Помните, что максимальный размер массива ограничен 700 числами, поэтому старайтесь не превышать этот размер. После того как вы завершите запись нажмите P и ввод в окне монитора последовательной связи и программа переключится в режим воспроизведения и на экране тогда появится примерно следующая картина:
Во время режима воспроизведения роботизированная рука будет повторять те же самые движения, которые она совершала в режиме записи. Эти движения она будет выполнять снова и снова до тех пор пока вы не прервете ее работу из окна монитора последовательной связи.
Подключаем датчики изгиба к Arduino
Для подключения датчиков изгиба к Arduino нам в схему надо включить делитель напряжения. Датчики изгиба по сути являются переменным резистором. При использовании в паре с постоянным резистором, можно отслеживать разницу в напряжении двух резисторов. Отследить разницу можно с помощью аналоговых контактов Arduino. Схема подключения приведена ниже (красный коннектор — это напряжение, черный — земля, голубой — коннектор самого сигнала, который подключается к аналоговому входу Arduino).
Резисторы на фото имеют номинал 22 кОм. Цвета проводов соответствуют цветам, приведенным на схеме подключения.
Все контакты GND от датчиков соединены в общую Землю. Земля идет к пину GND на Arduino. +5V на Arduino подключается к общему контакту питания от всех датчиков. Каждый голубой коннектор сигнала подключается к отдельному аналоговому входу на микроконтроллере.
Я собрал схему на небольшой монтажной плате. Размеры платы желательно выбрать поменьше, чтобы в дальнейшем закрепить на перчатку. Закрепить на перчатке нашу собранную схему можно с помощью элементарной нити и иголки. Кроме того, не поленитесь и сразу же используйте изоленту на оголенных контактах.
Программирование Android приложения с помощью Processing
Android приложение для управления этим роботом было написано с помощью бесплатной программной среды Processing. Если вы хотите внести какие-нибудь свои изменения в его код, то исходный код данного приложения вы можете скачать по данной ссылке.
Если же вы просто хотите скачать его и использовать в качестве приложения то, скачайте его APK файл и установите его на свой мобильный телефон (в настройках телефона следует включить опцию разрешения установки приложений из непроверенных источников).
Примечание: ваш Bluetooth модуль должен иметь имя “HC-06”, иначе приложение не сможет с ним соединиться.
После установки приложения на мобильный телефон вы можете соединить ваш телефон по Bluetooth с Bluetooth модулем (подключенным к Arduino) и после этого запустить приложение. Это будет выглядеть примерно следующим образом:
Если же вы хотите сделать приложение более привлекательным или соединить его с другим Bluetooth-устройством (названным не “HC-06”), то вам в этом случае будет необходимо внести изменения в исходный код приложения.