Описание
# Включают в себя <onewire. h> # определить startconvert 0 # определить читать Температура 1 конст байт num Чтение = 20;/номер образца timesbyte ecsensorpin = A1;/ec-метр с аналоговым выходом, штифта аналоговые 1 байт DS18B20_Pin = 2;/DS18B20 сигнала, закрепить цифровой 2 unsigned int analogsampleinterval = 25, printinterval = 700, tempsampleinterval = 850/аналоговый образец интервал; последовательный принт интервал; температура образец intervalunsigned int Чтение [num Чтение]; /Показания аналоговые inputbyte индекс = 0;/индекс текущего readingunsigned длинные analogvaluetotal = 0;/Бег totalunsigned int analogaverage = 0, averagevoltage = 0; /averageunsigned длинные analogsampletime, printtime, tempsampletime; поплавок Температура, eccurrent;/Температура чип i/oonewire ds (DS18B20_Pin);/цифровой pin-код 2 вакуум установка () {/инициализация с последовательным с компьютером: Серийный номер. начать (115200)/инициализации все Чтение до 0: (байт thisreading = 0; thisreading <num Чтение; thisreading + +) Чтение [thisreading] = 0; tempprocess (startconvert); /пусть DS18B20 начать преобразования analogsampletime = millis (); printtime = millis (); tempsampletime = millis ();} силы петли () {/* каждый раз в то время, образец аналоговое значение и рассчитать среднее значение. */if (millis ()-AnalogSampleTime> = AnalogSampleInterval) {Analogsampletime = millis ();/вычесть последнего чтения: analogvaluetotal = analogvaluetotal-показания [index];/чтения от датчика: показания [index] = analogread (ecsensorpin); /добавляем к прочтению общая сумма: analogvaluetotal = analogvaluetotal + показания [index];/перейти к следующему позиции в массив: индекс = индекс +-1 шт.; /Если мы в конце массива... Если (индекс; при заказе на сумму> = numreadings)/. .. Обернуть вокруг до начала: индекс = 0;/рассчитать среднее значение: analogaverage = analogvaluetotal/numreadings;} долл. сша/* каждый раз в то время, MCU узнать температуру от DS18B20, а затем пусть DS18B20 начать преобразования. Внимание: интервал между начать преобразовывать и ознакомьтесь с Температура должно быть больше, чем 750 миллисекунды или Температура не является точным! * если (millis ()-tempsampletime; при заказе на сумму> = tempsampleinterval) {tempsampletime = millis (); Температура = tempprocess (прочитайте Температура); /считывать текущее значение Температура из DS18B20 tempprocess (startconvert)/после прочтения, начните преобразование для следующего чтения} долл. сша /* Каждый раз в то время, принт информацию о серийный монитор. * если (millis ()-printtime; при заказе на сумму> = printinterval) {printtime = millis (); средняя Напряжение = analogaverage * (поплавок) 5000/1024; серийный. с принтом ("аналогового значения:»); серийный. с принтом (analogaverage)/аналоговый в среднем от 0 до 1023 серийный. печать ("напряжение:"); серийный. с принтом (в среднем Напряжение)/милливольт (в среднем от 0mv до 4995mV серийный. с принтом ("мв»); серийный. с принтом ("температура:»); серийный. с принтом (температура);/текущей температуры серийный. с принтом («^ C EC:»); поплавок температурный коэффициент = 1,0 + 0,0185 * (температура-25,0); /Температурной компенсацией формула: ffinalresult (25 ^ C) = ffinalresult (ток)/(1,0 + 0,0185 * (fTP-25.0); поплавок coefficientvolatge = (поплавок) средняя Напряжение/температурный коэффициент; если (CoefficientVolatge <150) Серийный. println («Нет решения! ");/25 ^ C 1413us/см <--> о 216mv в том случае, если Напряжение (компенсации) <150, то есть <1 ms/cm, вне диапазона еще в том случае, если (coefficientvolatge> 3300) серийный. println ("вне диапазона! ");/> 20 ms/cm, вне диапазона больше {if (coefficientvolatge <= 448) eccurrent = 6,84 * CoefficientVolatge-64.32; /1 ms/cm <EC <= 3 ms/cm еще в том случае, если (coefficientvolatge <= 1457) eccurrent = 6,98 * CoefficientVolatge-127; /3 ms/cm <EC <= 10 ms/cm еще eccurrent = 5,3 * coefficientvolatge + 2278;/10 ms/cm <EC <20 ms/cm eccurrent/= 1000; /Таблица преобразования/см до MS/см серийный. печать (eccurent, 2);/два десятичных сериала. println ("также доступна доставка службами ems см»);} долл. сша/* ch = 0, пусть DS18B20 начать преобразования; ch = 1, MCU, считайте текущий Температура из DS18B20. */поплавок tempprocess (bool ch) {/возвращает Температура от одного DS18B20 в градусах цельсия статического байт данных [12]; статический байт адрес [8]; статический поплавок Температура сумму; если (! ch) {if (! Ds. поиск (адрес) {серийный. println («no more датчики на цепочке, сбросить поиск! "); ds. reset_search (); возврата 0;} долл. сша в том случае, если (onewire: crc8 (адрес, 7)! = адрес [7]) {серийный. println ("CRC не действует! "); возврата 0;} долл. сша в том случае, если (адрес [0]! = 0x10 & addr [0]! = 0x28) {серийный. с принтом ("устройство не опознано! "); возврата 0;} ds. reset (); ds. выберите (адрес); ds. запись (0x44,1)/начать преобразования, с паразитов кнопка включения в конце} больше {байт настоящее = ds. reset (); ds. выберите (адрес); ds. запись (0xBE)/чтения блокнот для (в том числе i = 0; i <9; i + +) {/Нам нужно 9 байт данных [i] = ds. прочитал ();} ds. reset_search (); байт MSB = данные [1]; байт LSB = данные [0]; поплавок tempread = (MSB <8) | LSB); /с помощью двух-комплимент temperaturesum = tempread/16;} возврата temperaturesum;} # включают в себя <onewire. h> # определить startconvert 0 # определить readtemperature 1 конст байт numreadings = 20; /Кол-во образец timesbyte ecsensorpin = A1;/ec-метр с аналоговым выходом, штифт на аналоговые 1 байт DS18B20_Pin = 2;/DS18B20 сигнала, закрепить цифровой 2 unsigned int analogsampleinterval = 25 printinterval = 700, tempsampleinterval = 850/аналоговый образец интервал; последовательный принт интервал; температуры образца intervalunsigned int Чтение [num Чтение];/Чтение из аналоговые inputbyte индекс = 0; /Индекс текущего readingunsigned длинные analogvaluetotal = 0;/Бег totalunsigned int analogaverage = 0, averagevoltage = 0;/averageunsigned длинные analogsampletime, printtime, tempsampletime; поплавок Температура, eccurrent; /Температура чип i/oonewire ds (DS18B20_Pin);/цифровой pin-код 2 вакуум установка () {/инициализация с последовательным с компьютером: серийный. начать (115200)/инициализируете все показания до 0: для (Байт thisreading = 0; thisreading <num Чтение; thisreading + +) Чтение [thisreading] = 0; tempprocess (startconvert)/пусть DS18B20 начать преобразования analogsampletime = millis (); printtime = millis (); tempsampletime = millis ();} силы петли () {/* каждый раз в то время, образец аналоговое значение и рассчитать среднее значение. * если (millis ()-analogsampletime; при заказе на сумму> = analogsampleinterval) {analogsampletime = millis ();/вычесть последнего чтения: Analogvaluetotal = analogvaluetotal-показания [index];/чтения от датчика: показания [index] = analogread (ecsensorpin);/добавляем к прочтению общая сумма: analogvaluetotal = analogvaluetotal + показания [index];/перейти к следующему позиции в массив: индекс = индекс + 1;/в том случае, если мы находимся в конце массива... Если (индекс; при заказе на сумму> = numreadings)/. .. Обернуть вокруг до начала: индекс = 0;/рассчитать среднее значение: analogaverage = analogvaluetotal/numreadings;} долл. сша/* каждый раз в то время, MCU узнать температуру от DS18B20, а затем пусть DS18B20 начать преобразования. Внимание: интервал между начать преобразовывать и ознакомьтесь с Температура должно быть больше, чем 750 миллисекунды или Температура не является точным! * если (millis ()-tempsampletime; при заказе на сумму> = tempsampleinterval) {tempsampletime = millis (); Температура = tempprocess (прочитайте Температура); /считывать текущее значение Температура из DS18B20 tempprocess (startconvert)/после прочтения, начните преобразование для следующего чтения} долл. сша /* Каждый раз в то время, принт информацию о серийный монитор. * если (millis ()-printtime; при заказе на сумму> = printinterval) {printtime = millis (); средняя Напряжение = analogaverage * (поплавок) 5000/1024; серийный. с принтом ("аналогового значения:»); серийный. с принтом (analogaverage)/аналоговый в среднем от 0 до 1023 серийный. с принтом ("Напряжение:»); серийный. с принтом (в среднем Напряжение)/милливольт (в среднем от 0mv до 4995mV серийный. с принтом ("мв»); серийный. с принтом ("температура:»); серийный. с принтом (температура);/текущей температуры серийный. с принтом («^ C EC:»); поплавок температурный коэффициент = 1,0 + 0,0185 * (температура-25,0); /Температурной компенсацией формула: ffinalresult (25 ^ C) = ffinalresult (ток)/(1,0 + 0,0185 * (fTP-25.0); поплавок coefficientvolatge = (поплавок) средняя Напряжение/температурный коэффициент; если (CoefficientVolatge <150) Серийный. println («Нет решения! ");/25 ^ C 1413us/см <--> о 216mv в том случае, если Напряжение (компенсации) <150, то есть <1 ms/cm, вне диапазона еще в том случае, если (coefficientvolatge> 3300) серийный. println ("вне диапазона! ");/> 20 ms/cm, вне диапазона больше {if (coefficientvolatge <= 448) eccurrent = 6,84 * CoefficientVolatge-64.32; /1 ms/cm <EC <= 3 ms/cm еще в том случае, если (coefficientvolatge <= 1457) eccurrent = 6,98 * CoefficientVolatge-127; /3 ms/cm <EC <= 10 ms/cm еще eccurrent = 5,3 * coefficientvolatge + 2278;/10 ms/cm <EC <20 ms/cm eccurrent/= 1000; /Таблица преобразования/см до MS/см серийный. с принтом (eccurrent, 2)/двух отверстий, десятичная система серийный. println ("также доступна доставка службами ems см»);} долл. сша/* ch = 0, пусть DS18B20 начать преобразования; ch = 1, MCU, считайте текущий Температура из DS18B20. */поплавок tempprocess (bool ch) {/возвращает Температура от одного DS18B20 в градусах цельсия статического байт данных [12]; статический байт адрес [8]; статический поплавок Температура сумму; если (! ch) {if (! Ds. поиск (адрес) {серийный. println («no more датчики на цепочке, сбросить поиск! "); ds. reset_search (); возврата 0;} долл. сша в том случае, если (onewire: crc8 (адрес, 7)! = адрес [7]) {серийный. println ("CRC не действует! "); возврата 0;} долл. сша в том случае, если (адрес [0]! = 0x10 & addr [0]! = 0x28) {серийный. с принтом ("устройство не опознано! "); возврата 0;} ds. reset (); ds. выберите (адрес); ds. запись (0x44,1)/начать преобразования, с паразитов кнопка включения в конце} больше {байт настоящее = ds. reset (); ds. выберите (адрес); ds. запись (0xBE)/чтения блокнот для (в том числе i = 0; i <9; i + +) {/Нам нужно 9 байт данных [i] = ds. прочитал ();} ds. reset_search (); байт MSB = данные [1]; байт LSB = данные [0]; поплавок tempread = (MSB <8) | LSB); /с помощью двух-комплимент temperaturesum = tempread/16;} возврата temperaturesum;} долл. сша
Характеристики
- Применение
- +
- Индивидуальное изготовление
- Да
- Тип
- Датчик влажности
- Основы
- +
- Выход
- +
- Номер модели
- +
- Материал
- Смесь