Что делать, если на Ардуино заняты все порты?

Natrizim
Offline
Зарегистрирован: 18.01.2020

Добрый день, уважаемые знатоки! Нужен ваш совет!

Признаюсь, я не смог правильно "спросить у Гугла", по этому обращаюсь к вам.

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

На этом форуме я нашел упоминание о камушке PCF8574 и на его основе I2C расширитель портов

 

 

 

 

 

 

Также, я нашел Модуль PCA9685 16-канальный с I2C интерфейсом 12-bit PWM/Servo для ШИМ сигнала.

 

Собственно, вопрос: есть ли еще какие-то способы увеличить число подключенных устройств? Если дадите ссылку, буду очень признателен!)

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Самый простой, быстрый и стандартный способ - сдвиговые регистры 74hc165/74hc595.

sadman41
Offline
Зарегистрирован: 19.10.2016

Каких устройств?

Natrizim
Offline
Зарегистрирован: 18.01.2020

Спасибо, погуглю!

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Где софтина и схема? Скорее всего можно всё упростить или на софтверном или на железочном уровне. Тока их не видно.

Natrizim
Offline
Зарегистрирован: 18.01.2020

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

У меня сейчас свободны пины 9 (шим), 4, 2, 1, 0. 

Я пытался использовать Сервопривод, но при использовании библиотеки Servo отключается ШИМ на 9 и 10 портах. Не подходит.

Подключил шаговый двигатель. Но при использовании библиотеки AccelStepper и команды runToNewPosition все блокируется. Это не подходит. Если управлять пошагово двигатель очень долго поворачивается и очень сильно греется. stepper.setMaxSpeed();stepper.setAcceleration(); Мне никак не помогли это исправить. 

По логике (ну, по моей) осталось попробовать только подключить обычный DC двигатель через драйвер типа этого. Но желательно, что б можно было поворачивать плавно, т.е. использовать ШИМ.

Вот такие пироги

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Natrizim пишет:

Если не грузить лишними подробностями

Если не грузить лишними подробностями, то представьте схему и программу. Если да - будем думать; иначе - идите нахер;

Natrizim
Offline
Зарегистрирован: 18.01.2020

Извините, пока еще в схемы не умею. Но научусь!)

К Ардуино подключен:

1. Драйвер двигателя L298N на пины 3,5,6 и 10 (постоянно переставлял, оставил как есть).

2. bluetooth модуль nrf24l01 на пины 13, 12, 11 и 7.

3. Осталось 0,1,2,4,9.

На аналоговой части свободны А1-А5.

Natrizim
Offline
Зарегистрирован: 18.01.2020

mykaida пишет:

Natrizim пишет:

Если не грузить лишними подробностями

Если не грузить лишними подробностями, то представьте схему и программу. Если да - будем думать; иначе - идите нахер;

Не могу идти нахер - я уже там!)

Программу, это код имеется ввиду?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Natrizim пишет:

Программу, это код имеется ввиду?

Код - это когда пишете в программном коде или на ассемблере (и то не совсем). Остальное - это программы. Не надо увеличивать свою значимость.

А схему надо нарисовать. Поставьте себе любую cad программу и рисуйте. Иначе очень трудно понимать друг друга.

Natrizim
Offline
Зарегистрирован: 18.01.2020

Хорошо, спасибо,  буду разбираться!

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Natrizim пишет:
Извините, пока еще в схемы не умею.

1. "... в схемы не умею ..." ...ля. :)) Не умеете читать схемы (не понимаете схем) или понимаете, но пока не можете рисовать схемы в каком-либо редакторе? Я совершенно без сарказма спрашиваю. Надо понимать, как общаться. Если Вы заморочались Ардуино серьёзно, то и то, и другое придётся осваивать.

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

3. В крайнем случае схему можно аккуратно(!) нарисовать от руки, отсканировать и разместить здесь. Если схема велика, нарисовать по частям и показать все части, только чтобы присутствовали все компоненты, все соединения, нормально читались все обозначения и номиналы элементов.

Natrizim пишет:
Но научусь!)

Обнадёживает. :))

Natrizim
Offline
Зарегистрирован: 18.01.2020

Ну, слукавил немного)). Не подумал, что в данном вопросе это важно. Но в cad-ы не умею, тут точно. 

Но, если доктор сказал в морг - значит в морг!)) (С)

Сделаю как можно быстрее.

 

Natrizim
Offline
Зарегистрирован: 18.01.2020

 

Получается так.

Кстати, удобнее чем на бумаге! Спасибо! Вопрос уже принес положительный результат!)

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Natrizim пишет:
Получается так.

Вторая ревизия схемы читается гораздо легче первой. :)) Можно еще "подрихтовать" линии, идущие по азимуту.

Теперь вопрос полноты. Схему следует дополнить:

1. Вы писали о двигателях. На схеме их нет. Их следует привести обязательно со схемой их питания.

2. Как и от чего получает питание каждый из модулей? Как подключена линия GND ("общий", "земля"). Это важно.

Natrizim пишет:
Кстати, удобнее чем на бумаге! Спасибо!

Ещё удобнее - сигаретой в воздухе. Заказчики очень любят. :)) Во "фрицинге" всё меньше от "фрица" (нем.) и всё больше от "инга" (ам. англ.). Увы. Оно, конечно, очень быстро, особенно для новичков. Иллюстративно и удобно для простых монтажных схем. А вот чтобы из "фрицинг-иллюстрации" сделать рабочую схему, понятную специалисту, бывает всю голову свернёшь. Так что не рекомендую привыкать. Пристраститесь - тяжело потом будет отвыкать. Для рисования схем CAD не нужен. Достаточно нормального векторного графического редактора. Даже простого. Тут главное - понимать, что делаешь. На практике весьма удобен SPlan. И библиотеки отечественных УГО есть, и ничего лишнего.

Natrizim пишет:
Вопрос уже принес положительный результат!)

Хорошо, коли так. Но не обольщайтесь. Положительного пока весьма скромно. :))

 

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

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

-NMi-
Offline
Зарегистрирован: 20.08.2018

ип@ть-капать, да Eagle какойнить поставил, там дилов на абученийе пять минут и в дамки)))

утя-ж аналоговый порт пачти весь свабоден, чо кукушку мнёшь? цельных 7 портов!

SPI можно мультиплексировать, ты нЭзнал? rx-tx тож свабодны... чё муму дрюкать???

Natrizim
Offline
Зарегистрирован: 18.01.2020

Спасибо, займусь сейчас!

Единственное, займет немного больше времени.

И разрешите сделать эту схему в фрицинге, а потом уже буду осваивать SPlan!

Duino A.R. пишет:

2. Как и от чего получает питание каждый из модулей? Как подключена линия GND ("общий", "земля"). Это важно.

С землей не совсем понял. Как мне определить какая у меня GND? Или какая правильнее. 

Natrizim
Offline
Зарегистрирован: 18.01.2020

Duino A.R. пишет:

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

По Блютузу через  nrf24l01. Или это тоже нужно в схеме отобразить?

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Natrizim пишет:
С землей не совсем понял. Как мне определить какая у меня GND? Или какая правильнее.

У Вас каждый модуль получает питание. Нарисуйте для каждого модуля, куда и как подключены линии питания Vcc и GND. С какого пина какого модуля провода идут на какой пин другого модуля или блока питания или куда еще.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Natrizim пишет:

Duino A.R. пишет:

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

По Блютузу через  nrf24l01. Или это тоже нужно в схеме отобразить?

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

sadman41
Offline
Зарегистрирован: 19.10.2016

NRF не блюпуп вроде.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:
NRF не блюпуп вроде.

Ой, ну пусть сейчас пока побудет блюпупом. :)) Тут для начала хоть какую-нибудь схемку получить, чтобы было, что предметно обсуждать. За схемой - программа. А там, думаю, много чего ещё выясниться. :))

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

5 часов жру попкорн и жду схемы устройства. Похоже сегодня не дождусь...

-NMi-
Offline
Зарегистрирован: 20.08.2018

С кем поспорим, шо данный проЭкт НИкогда не будет ТС воплощён в жизнь?

Natrizim
Offline
Зарегистрирован: 18.01.2020

-NMi- пишет:

С кем поспорим, шо данный проЭкт НИкогда не будет ТС воплощён в жизнь?

Можно со мной, т.к. то, что описано в теме уже собрано на макете. Но обязательно ли мерятся гениталиями?)

Natrizim
Offline
Зарегистрирован: 18.01.2020

sadman41 пишет:
NRF не блюпуп вроде.

Извиняюсь, радиомодуль 2.4 ГГц

-NMi-
Offline
Зарегистрирован: 20.08.2018

ехх макэт макэт, этт как бискалёс виласипэт)))

начо спорим?

Natrizim
Offline
Зарегистрирован: 18.01.2020

Получилось так. 

Радиомодуль подключен через адаптер.
Питает все это безобразие 3шт 18650. Почему 3? DC двигателям можно и 4, но я не стал ставить больше. Я еще не обкатывал машину в поле, только на холостом ходу проверял. Если не будет хватать - буду ставить 4й. По ТТХ драйвера и моторов позволяет.
Ардуино и радиомодуль питаю от 2х 18650, как на схеме. Что б не использовать понижающий преобразователь.

Собственно, хочу сказать что все это уже собрано и работает так, как я и задумал. Вопрос был в другом. Мне нужен еще 1 DC двигатель с ШИМ, но ШИМ порт остался только один - 9й. 

Natrizim
Offline
Зарегистрирован: 18.01.2020

А на что мы можем в интернете поспорить и куда потом доказательства кидать?)

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

-NMi-
Offline
Зарегистрирован: 20.08.2018

начохошь. доказательства в ютуб.

Natrizim
Offline
Зарегистрирован: 18.01.2020

Ок, договорились!)

А по сути вопроса есть что?

-NMi-
Offline
Зарегистрирован: 20.08.2018

У меня? Канэшно есть. Изложи протокол, как ты его видишь, каким образом будет производится ПЛАВНАЯ регулировка оборотов "моторчиков" от джойстика, если DC PWM управление нелинейно и зависит от нагрузки на ось электродвигателя. Интересует только протокол обмена, код вааЩе неинтересен.

Natrizim
Offline
Зарегистрирован: 18.01.2020

Я не совсем понял суть вопроса, каюсь!) Но у меня есть драйвер двигателя l298n к которому подключены 2 двигателя. И у них все получается с PWM. 

По такому же принципу, только на драйвер двигателя один только двигатель. Думалось мне взять МХ1508, он просто меньше. К тому же взял у китайца маленькие, на 3 В моторы с редуктором, на 30 и 15 оборотов в минуту. По сути подходят. 

Но для вращения с ШИМ в обе стороны мне ж нужно 2 ШИМ пина, верно? Или я путаю что-то?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Наконец понял суть вопроса.

Отвечаю - ШИМ бывает не только аппаратный, но и программный. Тут все зависит от уровня лени. Или от количества денег - возьмите мегу и проблем с аппаратным ШИМом не будет.

Natrizim
Offline
Зарегистрирован: 18.01.2020

mykaida пишет:

Наконец понял суть вопроса.

Отвечаю - ШИМ бывает не только аппаратный, но и программный. Тут все зависит от уровня лени. Или от количества денег - возьмите мегу и проблем с аппаратным ШИМом не будет.

Я смотрел библиотеку от Гайвера, но не вникал. Может подскажите еще варианты?

Мега слишком большая, увы. Не влазит. 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Natrizim пишет:

Я смотрел библиотеку от Гайвера, но не вникал. Может подскажите еще варианты?

Мега слишком большая, увы. Не влазит. 

Про Гайвера не поминайте к ночи. Уж очень косячно у него. А направление задам. Почитайте на этом форуме blink без delay(). Там расскажут как с помощью millis() организовать временные переключения (что и есть ШИМ). И если Ваша программа правильно написана (т.е. там нет delay() и блокирующих функций), то ШИМ 10-30кГц можно программно организовать на 2-3 пинах без ущерба программе.

Natrizim
Offline
Зарегистрирован: 18.01.2020

Хорошо, спасибо!) Будем изучать!)

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

А насчет "не влезает" тоже возражу - на али видел мегу в мини варианте (не помню как называется). Опять-же есть стм32 - но там думать надо... серьезная система.

-NMi-
Offline
Зарегистрирован: 20.08.2018

mykaida пишет:

ШИМ 10-30кГц можно программно организовать на 2-3 пинах без ущерба программе.

Вероятность "победы" ТСа с "ШИМой на милсах" уменьшилась как минимум раза в четыре. Продолжай.

-NMi-
Offline
Зарегистрирован: 20.08.2018

mykaida пишет:

Опять-же есть стм32 - но там думать надо... серьезная система.

Ну это совсем ступорный вариант. Перебор.

Natrizim
Offline
Зарегистрирован: 18.01.2020

-NMi- пишет:

Вероятность "победы" ТСа с "ШИМой на милсах" уменьшилась как минимум раза в четыре. Продолжай.

А какая есть альтернатива? Или у нас принципиальный спор без подсказок?)

 

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Natrizim пишет:
Собственно, хочу сказать что все это уже собрано и работает так, как я и задумал. Вопрос был в другом. Мне нужен еще 1 DC двигатель с ШИМ, но ШИМ порт остался только один - 9й.

А сколько каналов ШИМ нужно для управления скоростью 1-го DC-двигателя? По моим понятиям - 1. Чтобы проверить свои понятия, обратился к https://3d-diy.ru/wiki/arduino-moduli/drayver-dvigatelya-l298n/ Там также. На один двигатель постоянного тока с драйвером L298N требуется 1 ШИМ канал для управления скоростью и 2 дискретных канала для управления направлением.

Maka
Offline
Зарегистрирован: 24.10.2015

На али Мега 2560 PRO называется.

Natrizim
Offline
Зарегистрирован: 18.01.2020

При подключении к этому драйверу я не использовал ENA и ENB с целью экономии пинов. ШИМ я подавал на IN1-4. Так можно и оно работает также. Но теперь, выходит, нужно переделать подключение и освободятся 2 ШИМ пина. 

 analogWrite(PIN_ENA, power); // Устанавливаем скорость 1-го мотора
 analogWrite(PIN_ENB, power); // Устанавливаем скорость 2-го мотора

.. и разобраться с кодом.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Natrizim пишет:

При подключении к этому драйверу я не использовал ENA и ENB с целью экономии пинов. ШИМ я подавал на IN1-4. Так можно и оно работает также. Но теперь, выходит, нужно переделать подключение и освободятся 2 ШИМ пина.

Можно еще подъэкономить пины. В скетче примера не используют торможение двигателем, когда обмотка разогнанного двигателя замыкается через верхние транзисторы (IN1=IN2=0) или через нижние (IN1=IN2=1). Т.е. если двигателем активно не тормозить, а аккуратно управлять только скоростью, то направление можно задавать только одним сигналом, тогда всегда IN1!=IN2. Это можно сделать аппаратным инвертором.

Natrizim
Offline
Зарегистрирован: 18.01.2020

Duino A.R. пишет:

Можно еще подъэкономить пины. В скетче примера не используют торможение двигателем, когда обмотка разогнанного двигателя замыкается через верхние транзисторы (IN1=IN2=0) или через нижние (IN1=IN2=1). Т.е. если двигателем активно не тормозить, а аккуратно управлять только скоростью, то направление можно задавать только одним сигналом, тогда всегда IN1!=IN2. Это можно сделать аппаратным инвертором.

\

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

Но в целом, все равно, огромное спасибо! Думаю, вопрос можно считать решенным!)

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Natrizim пишет:

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

А кто не даёт управлять каждым отдельно? На каждый двигатель своя скорость и своё направление. Для двигателя №1 скорость - ШИМ на ENA, направление - IN1!=IN2 (аппаратный инвертор). Для двигателя №2 скорость - ШИМ на ENB, направление - IN3!=IN4 (аппаратный инвертор). Итого на 2 двигателя 2 ШИМа и 2 дискретных выхода. Независимо один от другого.

Natrizim пишет:
Но в целом, все равно, огромное спасибо!

Огромное пожалуйста. :))

Natrizim пишет:
Думаю, вопрос можно считать решенным!)

Хозяин-барин. Хорошо, коли так. :))

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

mykaida пишет:
Где софтина и схема? Скорее всего можно всё упростить или на софтверном или на железочном уровне. Тока их не видно.

Так оно и получилось, как только схемка обнаружилась. :))

Natrizim
Offline
Зарегистрирован: 18.01.2020

В следующий раз буду сразу приходить с схемой!)