Оглавление:

Универсальный клиент / подчиненное устройство Arduino 1-wire (датчик): 4 шага
Универсальный клиент / подчиненное устройство Arduino 1-wire (датчик): 4 шага

Видео: Универсальный клиент / подчиненное устройство Arduino 1-wire (датчик): 4 шага

Видео: Универсальный клиент / подчиненное устройство Arduino 1-wire (датчик): 4 шага
Видео: Протоколы встроенных систем Serial-UART I2C SPI Communication 2024, Ноябрь
Anonim
Универсальный клиент / подчиненное устройство Arduino 1-wire (датчик)
Универсальный клиент / подчиненное устройство Arduino 1-wire (датчик)

Пожалуйста, прочтите Введение и Шаг 2 моего руководства о том, как построить однопроводный дисплей Arduino (144 символа), чтобы получить больше информации о ситуации и доступных библиотеках. Как объясняется там, мы будем использовать библиотеку OneWire-Hub (эмулятор ведомого устройства OneWire) от orgua (обратите внимание, что есть другие вилки), чтобы создавать универсальные 1-проводные устройства (например, датчики) с использованием Arduino.

Шаг 1. Программное обеспечение

Самое главное - создать устройство, которое может простым способом возвращать практически любые значения. Это означает, что стандартное программное обеспечение может использоваться для прямого чтения всех значений (без необходимости диалога или двоичных манипуляций). Для этого нам понадобится очень простое 1-проводное устройство по умолчанию, которое может возвращать числа с плавающей запятой и широко поддерживается. Единственный известный мне выбор - это термометр DS18B20 (монитор батареи DS2438 тоже интересен и полезен, но довольно сложен и, следовательно, медленен среди других недостатков). Библиотека OneWire-Hub содержит пример под названием DS18B20_asInterface, который делает именно то, что нам нужно. Он создает группу DS18B20, каждая из которых представляет одно значение с плавающей запятой, которое мы хотим вернуть от нашего датчика (ов). Ограничения здесь заключаются в разрешении, и значения должны находиться в диапазоне -55, 0… 125, 0. Этого легко добиться - в худшем случае - изменить масштаб - и на самом деле это лучше, чем значения, которые могут быть представлены, например, значения DS2438 (от 1,5 до 10 В). В качестве альтернативы можно установить больший диапазон значений, используя:

setTemperatureRaw (static_cast (значение * 16.0f));

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

Вы должны знать, что изначально максимальное количество ведомых устройств ограничено 8, но может быть изменено в "OneWireHub_config.h" путем увеличения HUB_SLAVE_LIMIT до 32. Также вы должны убедиться, что приняли ONEWIRE_TIME_MSG_HIGH_TIMEOUT, если это необходимо вашим 1-проводная сеть (например, x10), как описано в шаге 2 1-проводного дисплея Arduino (144 символа). И использовать версию IDE> = 1.8.3 для компиляции и загрузки кода на ваш Arduino.

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

Шаг 2: Оборудование

Аппаратное обеспечение
Аппаратное обеспечение

Практически все, что вы можете подключить к Arduino, можно использовать в качестве выбранного вами датчика. Единственное ограничение состоит в том, что считывание показаний датчика должно быть как можно более быстрым, чтобы у вас было достаточно времени для установления 1-проводной связи (передайте Шаг 2 моего инструктажа об 1-проводном дисплее Arduino (144 символа) по порядку чтобы получить пример).

Примером возможного оборудования может быть метеостанция, например:

https://shop.boxtec.ch/wetter-messer-p-41289.html

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

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

Шаг 3. Протестируйте устройство

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

Шаг 4: Приложение: ATtiny85

Приложение: ATtiny85
Приложение: ATtiny85

Одиночные устройства (ограничение памяти) также могут быть выполнены на ATtiny85. Это требует нескольких шагов, поскольку мы программируем ATtiny85 с использованием Arduino Uno в качестве ISP с помощью Arduino IDE:

  • Ссылки

    • https://playground.boxtec.ch/doku.php/arduino/att…
    • https://sebastian.expert/could-not-find-usbtiny-d…
    • https://learn.sparkfun.com/tutorials/tiny-avr-pro…
    • https://forum.arduino.cc/index.php?topic=425532.0
    • https://forum.arduino.cc/index.php?topic=128963.0
  1. используйте Arduino IDE> = 1.8.3
  2. установить опцию ATtiny в IDE

    1. Файл> Настройки> URL-адреса диспетчера дополнительных плат:
    2. Инструменты> Доска: ??? > Менеджер плат…
    3. найдите: "крошечный" и установите
  3. загрузить скетч ISP в Uno

    Файл> Примеры> ArduinoISP> ArduinoISP

  4. вставьте ATtiny85 в гнездо программирования (нулевое усилие) и подключите его:

    1. Вывод MOSI D11 Arduino на вывод 5 ATtiny
    2. Вывод Arduino MISO D12 на вывод 6 ATtiny
    3. Вывод Arduino SCK D13 на вывод 7 ATtiny
    4. Сброс вывода Arduino D10 на вывод 1 ATtiny
    5. Вывод Arduino GND на вывод 4 ATtiny
    6. Вывод VCC Arduino на вывод 8 ATtiny
    7. (Может потребоваться крышка> = 10 мкФ на выводе RESET Arduino Uno)
  5. выберите ATtiny85 (см. картинку):

    • Доска: "ATtiny25 / 45/85"
    • Таймер 1 Часы: «ЦП»
    • B. O. D.: "B. O. D. Disabled"
    • LTO (только 1.6.11 +): «Отключено»
    • Чип: «ATtiny85»
    • Тактовая частота: «8 МГц (внутренняя)» (совместимость с ATtiny85 и ATtiny84)
    • Часы: «16 МГц (ФАПЧ)» (альтернативная настройка только для ATtiny85)
    • Порт: ???
  6. выберите Программист:

    Инструменты> Программист: «Arduino как ISP» (НЕ «ArduinoISP»!)

  7. установить настройки предохранителей (часы и т. д.):

    Инструменты> Записать загрузчик

  8. загрузите этот код (светодиод ошибки программатора должен быть выключен, иначе сбросьте его)
  9. Расположение выводов ATtinyX5 (ATtiny85):

    1. Контакт 1: PB5 (RST)
    2. Контакт 2: PB3 (A3) - опционально подключен через 220 Ом к 1 <-TX
    3. Контакт 3: PB4 (A2) - подключен к 1-Wire DATA
    4. Контакт 4: GND - подключен к GND
    5. Контакт 5: PB0 (PWM) - подключен к датчику I2C SDA
    6. Контакт 6: PB1 (PWM) - подключен к светодиоду с 4,7 кОм на GND
    7. Контакт 7: PB2 (A1) - подключен к датчику I2C SCL
    8. Контакт 8: VCC - подключен к 5В

Работа с ATTiny85 требует немного больше работы, поскольку вам нужно получить дополнительные библиотеки для связи I2C (adafruit / TinyWireM) и последовательного вывода (TinyDebugSerial). Кроме того, поскольку память довольно ограничена, вы можете много работать с #define, например. убрать серийную отладку. В примере вы можете увидеть все это вместе.

Для тестирования первым шагом является проверка того, мигает ли светодиод с правильной частотой, 0,5 Гц. Затем подключите его к шине 1wire и проверьте наличие нового устройства.

Рекомендуемые: