Сервомотор с памятью. Arduino сервомотор sg90.

Сервомотор с памятью. Arduino сервомотор sg90.

Научим сервомотор вращаться по заданной программе. Подключим к Ардуино сервомотор. Запишем значения углов поворота, на SD карту, а потом сервомотор будет следовать этим значения. Будем для примеров использовать два сервомотора sg90. Иногда их ещё называют сервоприводы. Управления сервомотором будет программно и так можно создать робота или станок с ЧПУ.

Сегодня рассмотрим пример управления двумя сервомоторами с помощью потенциометров. А потом сохраним все эти передвижения на SD карту и воспроизведём их по памяти с карты. А в конце я покажу ещё один вариант. Он намного проще и удобнее.

Посмотрим что получилось.
Как видите я ничем не управляю, а моторы делают разные движения, которые были выполнены с помощью потенциометров и записаны на карту памяти. Сервомоторов может быть больше чем два. Всё зависит от используемой платы Ардуино.

Сначала просто научимся записывать данные на карту. У меня на канале уже есть несколько видео про использование SD карт. Можете посмотреть их по этой ссылке.

Посмотрим схему подключения.

Резисторы подключены по обычной схеме. Два крайних вывода соединим с плюсом и минусом питания, а центральные контакты подключим к аналоговым входам А0, и А1, Ардуино.
Таким способом мы будем подавать различное напряжение от 0 до напряжения питания. Я специально не сказал что до 5 вольт. Так как получить 5 вольт практически не реально. Оно будет всегда чуть ниже.
Эти значения будут поступать на АЦП(Аналого-цифровой преобразователь), который преобразует их в значение от 0 до 1023. Так как АЦП в Ардуино 10 битный, то есть это значит 2 в 10 степени, то диапазон преобразования будет 1024.

Модуль МикроSD карты подключаем согласно схеме. З вывода с модуля которые подключены к плате к контактам D11, D12, D13 надо подключать именно так, а вот вывод чипселект можно подключать к любому цифровому выводу. Я подключил к D4.

Сервомоторы которые я использовать довольно слабые и их можно подключить к контакту 5 вольт платы. Если у вас будут более мощные сервоприводы, то их надо подключать к контактам VIN или к отдельному источнику питания. И не забудьте соединить земли всех источников питания. Сигнальные выводы можно подключать к любым цифровым выводам. Я подключил к D9 и D10. И в скетче прописаны именно эти контакты.

Со схемой разобрались. Теперь давайте посмотрим скетч.
Сначала просто подключим 2 резистора и вращая их запишем их значения на SD карту.

 Никакие библиотеки устанавливать не нужно. Всё есть в Ардуино IDE. Единственное, что если вы подключите вывод чипселект не к 4 выводу, то вам надо будет здесь исправить на ваше значение.
Здесь обычная проверка. И если ошибок нет, то идём дальше.
Создаём переменную для сбора данных значений.
В цикле считываем значения с двух аналоговых входов. А0 и А1 и между ними ставим разделитель, запятую, что бы можно было легко вывести в эксель и строить графики.
Этот код отвечает за открытие файла для записи. Если файл не существует, то он будет создан.
Запишем все значения в этот файл, и параллельно выведем их в последовательный порт для просмотра.
Чтобы легче было смотреть, я сделал паузу между записями в 1 секунду.

Сначала у меня переменные резисторы установлены на 0. Теперь я буду вращать резистор, тем самым подавая напряжения на вход Ардуино. И мы видим меняющиеся значения. Тоже самое я проделаю и с другим резистором. Значения в мониторе меняются и между ними стоит запятая. Это именно то чего мы и хотели. Теперь ещё немного покрутим, что бы было побольше значений.

Теперь отключим питание, вытащим карту и вставим её в компьютер. Сравним значения в мониторе порта и на SD карте.
А используя вот этот скетч, мы могли бы вообще ничего не доставать, а посмотреть всё онлайн.
Я вывел значения в Эксель, в блокнот и в монитор порта. Сравним значения. Я стрелками укажу на некоторые значения.
Мы убедились, что наши значения пишутся на карту и нет никаких пропусков. Теперь можно переходить ко второму этапу. Считывание с SD карты и управление двумя сервомоторами.


Это обновлённая версия скетча. В процессе работы. Мне пришлось изменить запись данных в файл, и я использовал функцию map для преобразования значений.
Значения от нуля до 1023 я преобразовал в угол поворота от 0 до 180 градусов.

Теперь запишем движения сервомоторов на карту. Для примера я каждую из серв покрутил 3 раза. То есть от 0 до 180 градусов и обратно. А ещё у меня не получилось делать полный оборот плавно и без рывков, поэтому при проигрывании движения будут не плавными, а с небольшими рывками.
Можно вращать и одновременно две сервы, но во время съёмки мне было не удобно, и у меня не получилось.
Теперь давайте посмотрим как вращаются сервомоторы, управляемые записанными в предыдущем видео значениями.
Я специально так установил 2 сервомотора. Так они смогут вращаться и по горизонтали, и по вертикали. К верхнему мотору можно прикрепить видеокамеру. А записав нужные значения, можно отслеживать  определённые точки.
Теперь смотрим что у нас происходит. Сначала движется нижняя серва. Она перемещается от 0 до 180 градусов по горизонтали,  и способна охватить большую площадь обзора. Как мы помним, она сработает 3 раза и передаст управление другому сервомотору, который в свою очередь тоже сделает 3 цикла вращений, но уже в вертикальном направлении. Если развивать проект с видеонаблюдением, то вертикальное вращение можно ограничить. Вряд ли вам понадобится такой большой диапазон в 180 градусов.
Про рывки я говорил раньше. Мне было неудобно вращать переменный резистор во время записи.

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

Теперь немного информации.

  • SD карта должна быть отформатирована в формате FAT16 или FAT32.
  • Файлы должны быть в формате 8.3. То есть имя файла не больше 8 символов, а расширение 3 символа.
  • Библиотека SD работает по шине SPI поэтому задействованы пины 11, 12, 13.

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

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

 

Если вам интересна эта тема, то я могу снять продолжение.
А объём вашего интереса, сразу виден по количеству лайков и комментариев. Чем их будет больше, тем быстрее выйдет новое видео.
Ну, а если вам нравятся мои уроки, то ставьте лайк и делитесь моими видео, с другими.
А ещё вы можете помочь в развитии канала став его спонсором. Все ваши вклады пойдут на закупки новых модулей. Вам же за это будут предоставлены дополнительные бонусы.
Вы видите ссылки на видео, которые, я думаю будут вам интересны. Перейдя на любое из этих видео вы узнаете что-то новое, а ещё поможете мне. Ведь любой ваш просмотр - это знак YOUTUBE, что это кому-то интересно и что его надо показывать чаще.
Спасибо.
А пока на этом всё.

Управление сервоприводом Ардуино
servo sg90 Подключение серво и управление с телефона
Сервомотор с памятью. Arduino сервомотор sg90
SG90 сервопривод Управление кнопками
Сервоприводы SG90 и Arduino: Использование, Характеристики и Примеры Применения