Сообщество - Arduino & Pi

Arduino & Pi

1 493 поста 20 825 подписчиков

Популярные теги в сообществе:

228

Управление шаговым двигателем с помощью Arduino

Всем привет!


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


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

Это коллекторные электродвигатели постоянного тока. Они могут напрямую подключатся к источнику питания и будут всегда вращаться с постоянной скоростью, в зависимости от подаваемого напряжения. Если необходимо изменить направление вращения, то на нашем моторе нужно просто поменять местами "+" и "-" и он сразу начнёт крутиться в другую сторону. За счёт их простой конструкции, они имеют небольшую стоимость и простоту в управлении.


Но есть ещё один из распространенных типов двигателей - это шаговые электродвигатели.

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


Вот так выглядит шаговый электродвигатель с винтовым валом из оптического привода:

Как видно - здесь уже больше, чем 2 провода и напрямую подключить такой мотор к источнику питания просто так не получиться из-за совсем другой конструкции самого двигателя. Если для нашего первого моторчика достаточно было подать "+" и "-" на соответственные клемы и он начинал вращаться, то для шагового электродвигателя нужно подавать цифровые электронные сигналы управления, которые будут сообщать двигателю на сколько и в какую сторону ему необходимо вращаться. Это возможно осуществить с помощью устройства, которое будет генерировать и отправлять эти сигналы на драйвер, а он, в свою очередь, напрямую управлять обмотками двигателя.


Мы рассмотрим пример, как подключить шаговый электродвигатель к Arduino Mega 2560 - именно оно и будет тем устройством, которое генерирует нужные электронные сигналы управления.

Я взял мотор формата Nema 17 - это гибридный шаговый двигатель, который часто встречается в 3Д принтерах, ЧПУ системах, робототехнике и т.д.


Фото двигателя в разрезе:

Драйвер на микросхеме TB6600 - это довольно неплохой контроллер, который можно использовать с двигателями до 4.5 А, 50 В. Для домашних 3Д принтеров и ЧПУ систем его полностью достаточно.


Схема драйвера:

Чтобы драйвер работал, необходим внешний источник питания с напряжением 8-50 В (рекомендуется 36 В). Именно с него наш двигатель будет получать энергию для своей работы. А логические сигналы Dir - направление вращения и Pulse - сигнал шага, драйвер будет получать от ардуино.

У данного двигателя 4 обмотки: A+, A-, B+, B-, их нужно соединить с соответствующими выходами на плате драйвера.

Для управления шаговым двигателем можно использовать различные библиотеки, которые упрощают жизнь, если необходимо как-то динамически управлять двигателем, например "AccelStepper" и тому подобные. Также есть различные программные комплексы для управления 3Д принтерами или ЧПУ станками.

Мы же рассмотрим простой пример вращения двигателя с постоянной скоростью, который не сложно будет повторить всем желающим. Также, так ещё удобно проверять общее состояние двигателя.


Воспользуемся этим несложным кодом: https://gist.github.com/anonymous/f556f387d90c6a5bbebaa4b57a...

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


Примерно так всё работает:

P.S. Сильно в теорию я не вдавался, потому что на это нужен не один пост, да и не всем она понравится :)

Показать полностью 5 1
47

E-Learning. Часть 3. Blender. Визуализируем данные с гироскопа

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


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


Но перед тем как визуализировать всю руку, хочу рассказать как сделать визуализатор данных средствами Blender 3D, а не того же Processing (с которым я так и не смог разобраться).


В этой статье я опишу один из способов визуализации данных из COM порта. Рассматривать буду на примере визуализации изменения ориентации платформы для 3х-осевого гироскопа и 3х-осевого акселерометра (далее просто гироскоп, для простоты). У меня это GY-BMI160, у Вас может быть любой другой, главное, чтобы Arduino отправляла данные в формате: “gx,gy,gz,ax,ay,az”.

Рис. 1. 3D модель платформы гироскопа. Основная цель – чтобы повороты нашей модели соответствовали поворотам физического гироскопа. В этой статье мы научим Blender принимать данные по COM порту.

В этой статье мы НЕ будем рассматривать следующие вещи:

1. Как подключить визуализацию нескольких датчиков, которые посылают информацию по одному COM порту.

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

3. Методы фильтрации данных (Фильтр Калмана, комплементарный фильтр, комплементарный фильтр второго порядка, фильтр Маджвика, получение углов из данных гироскопа, получение углов из данных акселерометра, получение углов из магнитометра и прочее).


Что будет в этой статье:

1. Как начать управлять мощной средой визуализации Blender. (Processing не столь серьезно).

2. Как настраивать Python в Blender.

3. Какие существуют подводные камни, связанные строго с Blender.


В начале хочется привести несколько причин, почему выбран именно Blender:

1. Он бесплатен.

2. Он не специфичен и используется при разработке игр, анимации, 3D моделировании как профессиональный инструмент. И как следствие по нему очень много материала и открытое сообщество.

3. Он использует Python 3. Если с Processing вы выучите язык программирования и больше нигде он не будет применим, то Python широко распространённый язык программирования. Если Вы его знаете – учить практически ничего не надо будет, если нет – то это знание гарантированно пригодится вновь.


Первое что делаем – качаем Blender с официального сайта www.blender.org. Ставим его. Откроется окно с заставкой, кликаете по свободному месту и увидите куб. Примерно как на картинке.

Первый подводный камень, Ваша видеокарта. Наводим мышкой на куб, нажимаем на колесико мыши и крутим влево-вправо. Если все хорошо, то это будет быстро. Если нет, то картинка будет менять раз в 2-5 секунд.

Как решается? Либо драйвера видеокарты слишком старые, либо слишком новые и не обкатанные. У меня оказались слишком новые на Windows 10 64x.


Заходим в диспетчер устройств – видеоадаптеры – смотрим какие у Вас стоят. Переходим на сайт производитель и у них обычно есть архивные драйвера как раз на такие случаи. Качаем-ставим.


Второй подводный камень. Внутренний Python блендера создатели посчитали самодостаточным и туда нельзя поставить новые библиотеки, например, нужную нам PySerial.

Решаем так:

Смотрим какая версия питона установлена.

Вариант 1:

Ставим в скаченный питон все что нам нужно (как это сделать я тут не буду расписывать, это стандартная процедура). Нам нужна библиотека PySerial.


Вариант 2:

Находим папку с нужной библиотекой, например, на GitHube (https://github.com/pyserial/pyserial).

Из появившейся папки в Scripts/serial или просто скаченную папку необходимо скопировать блендеру в C:\Program Files\Blender Foundation\Blender\2.78\python\lib.

Переходим в консоль Python Blender’а и проверяем. Пишем import serial.

Если не ругается – то все хорошо установлено.


Третий подводный камень:

COM порт передающий данные по проводу и по Bluetooth устройству могут иметь разное поведение после закрытия порта. Чуть подробнее далее.


Первая команда – это s = serial.Serial('COM1', 9600)

Следите за номером порта (как у меня COM1), много ошибок связано с тем, что можно забыть номер подключаемого порта или забыть его включить физически.

Следите за скоростью. Я, например, разгонял частоту работы датчика, ставил 250 000 БОД и забывал, что блендер ожидает 9600.

Чтобы последовательно считывать данные нужна команда s.readline().

На выходе мы имеем байт-строку формата “b’gx,gy,gz,ax,ay,az\n”.


Важно! Подключите библиотеку Re и разберитесь в ней. Про это мы не будем тут говорить, но пару полезных вещей коснемся. import re (к счастью стандартная библиотека).


Для начала подготовим для обработки её и переведем в строковый формат:


line = s.readline()

line2 = str(line)

Далее используем функцию sp = re.split('[^0-9.-]+', line2)


В квадратных скобках указываются символы, которые не удаляются, все остальные удаляются и служат разделителями для созданного массива sp.


Можно теперь обращаться так: sp[1]-sp[6] – наши значения, первый и последний элементы будут пустыми.


Затем для того, чтобы использовать данные в своих расчётов – просто задайте им нужный тип. float(sp[1]) – даст нужное число.


В конце обязательно закрывайте порт. s.close(). Иначе никто больше к нему не подключиться, Arduino IDE будет говорить, что порт занят уже кем-то.


Ссылка на файл с кодом https://yadi.sk/d/-Jwmt1Qw3MvqJa

В начале запустить Game Engine. Потом нажимаете на англ. раскладке "P". Затем используете клавиши: "O" - открыть порт, "R" - начать чтение данные, "C" - закрыть порт (это важно!), ESC - выйти из режима Game Engine.


Прошлые части:

0: E-Learning. Образовательная робототехника. Часть 0. Вступление

https://pikabu.ru/story/elearning_obrazovatelnaya_robototekh...

1: Часть 1. В общем о визуализации данных в Blender и Unity

https://pikabu.ru/story/chast_1_v_obshchem_o_vizualizatsii_d...

2: E-Learning. Образовательная робототехника. Часть 2. Эволюция костюмов

https://pikabu.ru/story/elearning_obrazovatelnaya_robototekh...

Показать полностью 4

Задачка для Лиги Arduino

Доброго дня!

Мысль есть по созданию велосигнализации для размещения велосипеда в подъезде.

Собственно, скорее необходимость появилась.

Я знаю примерно, что можно сделать на ардуине, но ни разу не пробовал, да и времени нет разбираться в одно лицо.

Итак, мысль V0.2:

1. Модуль на ардуине стоит в квартире и постоянно следит за подключённым сопротивлением и напряжением на собственном входе. На модуле есть динамик и генератор переменного напряжения для него с частотой (допустим) 500 Гц.

На модуле есть кнопка (или регулятор) подстройки к реальному подключённому сопротивлению.

На модуле есть кнопка временного выключения основного режима

На модуле есть светодиод, показывающий, что основной режим включён

На модуле есть кнопка, на 5 минут отключающая боевой режим

2. Из квартиры тянется двухжильный провод (по стене и под ступеньками) и приходит в разъём на велосипеде

3. На велосипеде под сиденьем стоит разъём, за которым стоит сопротивление 100 кОм.

Логика следующая.

В боевом режиме модуль знает, что на нём висит сопротивление.

Если сопротивление при включённом боевом режиме резко возрастает до бесконечности (обрыв или отключение провода) - срабатывает громкий сигнал.

Как только провод присоединяется обратно и модуль видит сопротивление, встаёт в основной режим.


Если напряжение на входе ардуины падает (батарейка садится), модуль даёт прерывистые сигналы раз в 10 секунд.


Кто готов помочь в реализации этой тупой идеи в Москве?

С меня все запчасти (можно на 2 экземпляра) и работа паяльником.

Показать полностью
309

Теплица на Ардуино-Мега. Часть 10.

Для подписчиков, интересующихся развитием  ситуации с умной теплицей. Сезон приближается к концу, уже ночью температура +4 градуса. Поэтому пора подвести предварительные итоги.

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

1. Огурцов столько для нас слишком много, поэтому садить нужно только одну грядку с одной стороны теплицы. На другой стороне посадить что-то другое, возможно снова помидоры. В связи с этим, нужно сделать автополив из одной бочки, только чтобы одну грядку поливало раз в день, а вторую, например,1- 2 раза в неделю. Для этого нужно найти какое-то решение. Клапан или кран переключающий какой-то с электроприводом, но независимый от давления. Может посоветует кто?

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

3. Передача данных с датчиков на сайт очень удобна, потому что при резком изменении погоды начинаешь беспокоиться, но всегда можно посмотреть и убедиться, что автоматика отработала правильно и температура в теплице в пределах нормы. А вот управление теплицей... Я решил для себя, что если хоть пару раз возникнет необходимость поуправлять теплицей удаленно, то задумаюсь, чтобы такую возможность реализовать. Но необходимость не возникла, поэтому не стану. Иначе для чего автоматика?)

4. Датчик влажности почвы. Этот вопрос не решен никак. С обычного китайского датчика металл исчез за 1,5 месяца. Сейчас вот возникла мысль - до следующего года изготовить такие датчики с разными видами щупов, а именно: алюминиевый, медный, графитовый, из нержавейки тоже. Ну и в течение года смотреть, как они себя поведут, что будут показывать.

5. Главный вывод: умной теплице - быть! Все, что было запланировано, получилось. Самое важное из этого, это то, что можно смело оставлять теплицу на неделю-две без присмотра, разве что огурцы сильно перерастут. А это именно то, чего я и хотел.

Теперь еще исправить и изменить за зиму, все что запланировал (об этом отпишусь) и проект можно считать завершенным.

Показать полностью
2

В Ардуину хачу!

Вот и дотянулись мои руки крюки до микроконтроллеров. Радиоэлектроники боюсь как огня, ибо не догоняю, но если где то начинает пригорать, держите семеро.

Задача - заколхозить уберагрегат для аквариума, чтобы и светом мигал и CO2 давал и УДО лил назначенными порциями.


Вчера получил заказ, Mass duino (md-328d), шилд на четыре реле, пара светодиодов на плате, сегментный индикатор, "часики" и еще по мелочи.

Я в предвкушении скачал софт и воткнул microUSB в плату.


Первые два часа убедили меня, что Mass duino не во всем Arduino, и к стандартной IDE надо таки скачать индивидуальный набор файликов.

Тип ошибки при заливке скетча сменился на "avrdude stk500_getsync() not in sync resp=XXX"

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

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

2. Проверить, что джампер питания стоит правильно (не поясняя, а как)

3. Что выбран нужный порт (тут сложно ошибиться).

4. Перепрошить контроллер.

+. Еще сто советов.

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

При этом многие писали, что раньше ошибки не было и все работало. Многие писали, что ошибка ушла сама собой.


В полночь я уже настрочил письмо на возврат Дуньки в магазин. Перед сном пошел подключить телефон сына на зарядку и увидел еще два "непопробованных" кабеля. Внезапно, с одним из них все сработало. Как же я матерился!

На следующий день я взял "годный" кабель и придя на работу все подключил, запустил и ... снова здорова. Помогло перетыкание USB в другой разъем, благо их много.

Ок, дальше по плану выставление верного времени на RTC DS1302, тут все очень просто, в setup() пишем установку времени на час X, в loop() вывод времени в строку на серийный порт, заливаем, запускаем, с дикой погрешностью, но время выставлено, 08:09:00, щелкает, супер!

Надо проверить, отключаем от USB, ждем пять минут, включаем, запускаем монитор порта, вуаля - 08:09:00, щелкает, блин... Оказалось, setup() автоматически запускается при подключении к компу. Ладно, решаема.

Теперь подключение RGB светодиода, ногу на землю, RGB по пинам, pinMode(LED_R, OUTPUT),  digitalWrite(LED_R, HIGH) и - ничего. Матьегоети, каждое движение вперед как об стенку с размаха. Через 10 минут нашел, что не все диоды одинаково полезны, и мой отличается от собратьев "общим анодом" и подрубается не на землю, а на +5V, и чем меньше на пин даешь, тем ярче светит. То есть зажечь красный не analogWrite(LED_R, 255), а analogWrite(LED_R, 0)!

О сколько нам открытий чудных...

А мне еще предстоит подключать реле на свет и газ, шилд моторов на перистальтические насосы, запись логов на microSD, объемы памяти заставляют вспомнить времена Электроники МК-61, и  асма на КР580.

В Ардуину хачу!
Показать полностью 1
149

Авиаконтроллер на Arduino перерастает в нечто большее

В продолжение постов:

1) https://pikabu.ru/story/kontroller_dlya_aviasimulyatorov_svo...

2) https://pikabu.ru/story/virtualnyiy_polet_v_warthunder_51123...


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

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

Изготовил усиленные пружины на механизм РУС, т.к. раньше ручка из крайнего отклоненного положения не возвращалась в центр, пружины были слабые.

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

В процессе.

так же сегодня притаранил пару артефактов:

катапультное кресло от Л-29

Ручка управления самолетом.

отсутствует кнопка воздушного тормоза, если не ошибаюсь, вмонтирую пока какую-нибудь вписывающуюся по размеру, красную, для эпичности =) Остальные органы на месте, будут заводиться на контроллер, всё будет действовать.

даже ручка тормоза на месте и работает курковый механизм

Что-то вырисовывается, предварительно. Нужно проектировать и варить раму для всей этой прелести. Затем обшивать сидушку, подкрашивать все детали, искать или изготавливать ремни.

Подробнее следить за проектом можно в ВК https://vk.com/vrn_arduino

Ну и на последок инструкция по катопультированию, надеюсь никому не пригодится. Всем мирного неба над головой!

Показать полностью 9
Отличная работа, все прочитано!