Съдържание:

Arduino 1-жично генерично клиентско/подчинено устройство (сензор): 4 стъпки
Arduino 1-жично генерично клиентско/подчинено устройство (сензор): 4 стъпки

Видео: Arduino 1-жично генерично клиентско/подчинено устройство (сензор): 4 стъпки

Видео: Arduino 1-жично генерично клиентско/подчинено устройство (сензор): 4 стъпки
Видео: Control Speed of Stepper Motor using L298N with Push Button Switches STLPB-01 2024, Ноември
Anonim
Arduino 1-жично генерично клиентско/подчинено устройство (сензор)
Arduino 1-жично генерично клиентско/подчинено устройство (сензор)

Моля, прочетете Въведение и Стъпка 2 на моите инструкции за това как да изградите 1-жичен дисплей на Arduino (144 знака), за да получите повече информация за ситуацията и наличните библиотеки. Както е обяснено там, ще използваме библиотеката OneWire-Hub (емулатор на подчинено устройство на OneWire) от orgua (обърнете внимание, че наоколо има други вилици), за да изграждаме универсални едножични устройства (например сензори) с помощта на Arduino.

Стъпка 1: Софтуер

Най -важното нещо е да се направи устройство, което да може да върне основно всякакъв вид стойност по прост начин. Това означава, че стандартният софтуер може да се използва за директно четене на всички стойности (не е необходим разговор или двоична манипулация). За това се нуждаем от много просто 1-проводно устройство по подразбиране, което може да връща поплавъци и е широко поддържано. Единственият избор, за който знам, е термометърът DS18B20 (мониторът на батерията DS2438 също е интересен и полезен, но доста сложен и по този начин бавен сред другите недостатъци). Библиотеката на OneWire-Hub съдържа пример, наречен DS18B20_asInterface, който прави точно това, от което се нуждаем. Той създава куп DS18B20, всеки от които представлява една стойност с плаващ знак, която искаме да върнем от нашите сензори. Ограниченията тук са разделителната способност и стойностите трябва да са в диапазона -55, 0 … 125, 0. Това може лесно да се постигне - в най -лошия случай да се преоразмери - и всъщност е по -добро от стойностите, които могат да бъдат представени с напр. стойностите на DS2438 (1.5 до 10V). Като алтернатива можете да зададете по -голям диапазон от стойности, като използвате:

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. Arduino Pin MOSI D11 към ATtiny Pin 5
    2. Arduino Pin MISO D12 към ATtiny Pin 6
    3. Arduino Pin SCK D13 към ATtiny Pin 7
    4. Arduino Pin Reset D10 към ATtiny Pin 1
    5. Arduino Pin GND към ATtiny Pin 4
    6. Arduino Pin VCC към ATtiny Pin 8
    7. (> = Може да е необходима капачка от 10uF на щифта за RESET на Arduino Uno)
  5. изберете ATtiny85 (вижте снимката):

    • Табло: "ATtiny25/45/85"
    • Таймер 1 Часовник: "CPU"
    • B. O. D.: "B. O. D. Инвалид"
    • LTO (само 1.6.11 +): „Забранено“
    • Чип: "ATtiny85"
    • Тактова честота: "8 MHz (вътрешна)" (съвместими с ATtiny85 и ATtiny84)
    • Тактова честота: "16 MHz (PLL)" (алтернативна настройка само за ATtiny85)
    • Порт: ???
  6. изберете програмист:

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

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

    Инструменти> Burn Bootloader

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

    1. ПИН 1: PB5 (RST)
    2. Пин 2: PB3 (A3) - по избор свързан чрез 220ohm към 1 <-TX
    3. Пин 3: PB4 (A2) - свързан към 1 -проводни DATA
    4. Пин 4: GND - свързан към GND
    5. Pin 5: PB0 (PWM) - свързан към сензор I2C SDA
    6. Pin 6: PB1 (PWM) - свързан към LED с 4.7k към GND
    7. Пин 7: PB2 (A1) - свързан към сензор I2C SCL
    8. Pin 8: VCC - свързан към 5V

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

За тестване първата стъпка е да проверите дали светодиодът мига с правилната честота, 0,5Hz. След това го свържете към шината 1wire и проверете за новото устройство.

Препоръчано: