Как подключить более 10 датчиков к Arduino uno r3

Как я могу подключить более 10 датчиков к Arduino Uno R3? Я рассчитал и могу подключить всего 4 пожарных датчика пламени (датчики, которые могут обнаружить огонь (свечу, например)) и, может быть, 1 ультразвуковой датчик. Мне нужно больше для моего проекта. Мне нужен ИК-датчик, датчик пламени с каждой стороны и 1 ультразвуковой датчик спереди. Кроме того, мне нужно подключить 2 двигателя постоянного тока, 1 вентилятор и 1 серводвигатель для ультразвукового датчика. Как я могу это решить? Я должен купить Arduino Mega?

, 👍5

Обсуждение

Сделать шину с протоколом и некоторыми шинными устройствами :), @Paul

И если вы не хотите делать автобус: Подсчитайте контакты/протоколы, которые вам нужно использовать. Составьте из него красивую схему. И судить о ваших требованиях, @Paul

Пожалуйста, хотите знать, как читать запись на компьютере. Я новичок., @Emmanuel

Вы знаете, как решить вышеупомянутую проблему с мультиплексором TCA9548A?, @user58617


4 ответа


1

Мега — это самый простой способ получить много значков, как вы сказали, Мега. Он имеет много других преимуществ, таких как большая сила тока, больше памяти и больше портов UART. Я настоятельно рекомендую пройти этот маршрут новичку, даже если вы получите клон вместо официальной платы. Если ничего из этого не будет для вас преимуществом, есть несколько других вещей.

  • Второй MCU. Вы можете получить другой чип, идентичный чипу Uno, для подключения. Это называется автономным ATmega. Они довольно дешевые. I2C — это самый простой способ их подключения, используя всего два вывода от каждого чипа. Настройка будет зависеть от проекта.
  • Мультиплексирование. Существует способ подключения большего количества элементов, чем имеется контактов на Arduino. Это называется мультиплексирование. Это немного влияет на производительность, но для некоторых приложений оно того стоит. Примечание: это не будет работать с библиотеками или SPI/I2C. Чип 4051 кажется приличным чипом. На игровой площадке Arduino есть хорошая вводная статья об этом чипе..
,

2

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

Другой лучший вариант — использовать N-битный регистр сдвига. Это небольшие микросхемы, которые соответствуют названию: регистры сдвига, и их гораздо проще настроить и подключить, чем тратить целый другой микроконтроллер на добавление ввода-вывода или мультиплексирование (что ограничивает ваше приложение). Вы эффективно меняете настройки ввода-вывода, которые хотите, а затем можете зафиксировать эти регистры, когда в регистр загружена правильная последовательность ввода-вывода. Другими словами, если бы я хотел иметь 8 новых контактов ввода-вывода, я мог бы подключить 8-битный сдвиговый регистр к моему микроконтроллеру, и если бы я хотел, чтобы 4 из первых контактов были ВЫСОКИМ, а последние 4 — низкими, я бы перешел на 00001111b, тогда зафиксируйте данные так, чтобы они отображались на выходе так же, как если бы это был любой обычный вывод ввода-вывода на MCU.

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

Недостаток этого заключается в том, что для N-битного регистра сдвига вам потребуется N тактов для загрузки данных. Для большинства приложений это должно быть хорошо, но это стоит отметить. Это также делает немного более сложный код (хотя я уверен, что для них есть библиотеки).

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

,

7

Вы можете легко увеличить количество контактов ввода-вывода с помощью расширителя, например PCF8574. Расширитель можно подключить с помощью контактов SCL/SDA, расположенных рядом с контактами GND/AREF. (Здесь вы можете найти подробное фото: http://forum.arduino.cc/index.php?topic=84190.0) Вы можете подключить до 8 таких расширителей, чтобы увеличить количество цифровых контактов до 64.
После того, как вы подключите его, вот фрагмент кода, как его использовать:

#include <PCF8574.h> //библиотека доступна по адресу: https://github.com/skywodd/pcf8574_arduino_library

void setup() {
  PCF8574 sensors;
  sensors.begin(0x20); //0x20 означает, что вы подключили контакты A0, A1, A2 платы PCF8574 к земле
  sensors.pinMode(0, INPUT_PULLUP);
  sensors.pinMode(1, INPUT_PULLUP);
/*...*/
}
void loop() {      

  byte sensorValue = sensors.digitalRead(0); //считывает цифровое значение 1-го датчика, подключенного к контакту 0 расширителя PCF8574
  /*...*/
}

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

,

0

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

Первое, что вам нужно сделать, это перечислить датчики, которые вы хотите, а также тип интерфейса, который каждый из них использует; Я использую электронную таблицу.

Например, датчик пламени может использовать только один цифровой выход (подходящий к цифровому входу на Arduino), а порог устанавливается с помощью потенциометра на модуле. Или он может выводить аналоговый сигнал, который поступает на аналоговый вход Arduino, позволяя коду определять интенсивность или устанавливать различные пороги без необходимости перемещать потенциометр. Каждый подход имеет разные последствия.

Помимо этих двух, существуют и другие интерфейсы датчиков и исполнительных механизмов (простой цифровой и аналоговый). Некоторые дают переменное значение (например, аналоговое), но основанное на синхронизации импульса цифрового сигнала; так работает большинство недорогих ультразвуковых дальномеров. И, конечно же, есть датчики, которые используют стандартные (I2C или SPI) или проприетарные (однопроводной протокол или датчики температуры и влажности DHT-xx).

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

Дополнительно простые цифровые входы или выходы могут быть довольно легко реализованы с помощью расширителей I2C или сдвиговых регистров. Например, проверка датчика пламени с цифровым выходом или включение света.

Дополнительные аналоговые входы могут быть выполнены с помощью аналогового мультиплексирования (например, электронного переключателя) или через внешние модули АЦП с использованием I2C или SPI.

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

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

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

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

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

Рекомендации

1) Если вы можете работать с любыми причудливыми датчиками или исполнительными механизмами с прямыми контактами и покрыть любые простые сдвиговыми регистрами или чипами-расширителями I2C, это жизнеспособный вариант. Например, если ваш код хочет время от времени проверять, было ли обнаружено пламя (цифровая версия), или хочет включить двигатель, не так сложно пройти через регистр сдвига вместо прямого доступа к контакту.

2) Если вы выходите за рамки этого и у вас закончились контакты для вещей, с которыми гораздо проще обращаться при прямом подключении, я предлагаю перейти на Mega или Mega2560. У него больше цифровых контактов, больше аналоговых входов и больше выходов ШИМ. Большинство (хотя и не все) библиотек адаптируются, просто изменив номера выводов. Это намного проще, чем переписывать библиотеки для использования внешних цифровых и аналоговых выводов.

,