Перейти к содержанию

Рекомендуемые сообщения

Нашел ошибку в скетче. Строка 85 не указана разрешение для каждого датчика. Отсюда такой разброс по температуре. Тест будет повторен.

Поделиться сообщением


Ссылка на сообщение
7 часов назад, Haaans сказал(а):

Решил устроить вот такие варианты измерения:

Некоторые тесты у вас неправильны.

Сначала надо на жидкосном градуснике посмотреть уровень погружения и опускать в воду как написано.

Проверка на воздухе возможна, но просто положил рядом, а под колпаком и долго.

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

Замер лучше делать в большом стакане подальше от стенок все сразу при +5,,+10 и 2-я точка +40,,+50 - лучше поймете погрешность.

Поделиться сообщением


Ссылка на сообщение
2 часов назад, Lx671 сказал(а):

Сначала надо на жидкосном градуснике посмотреть уровень погружения и опускать в воду как написано.

У жидкостного видна зона измерения же. А в гильзе нет.

Логичнее гильзу полностью погружать.

2 часов назад, Lx671 сказал(а):

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

Не понятно. Лед начал таять, нужно мерить же в этот период, а не тогда как много растаяло.

2 часов назад, Lx671 сказал(а):

Замер лучше делать в большом стакане подальше от стенок

Так и задумано. Пробую заморозить воду так чтобы внутри была воронка

2 часов назад, Lx671 сказал(а):

при +5,,+10 и 2-я точка +40,,+50 - лучше поймете погрешность.

Надо посмотреть, что может термометр

Поделиться сообщением


Ссылка на сообщение
1 час назад, Haaans сказал(а):

Не понятно. Лед начал таять, нужно мерить же в этот период, а не тогда как много растаяло.

Капните зеленку)) Увидите движуху таянья и соответственно немного разная темпер...

Поделиться сообщением


Ссылка на сообщение
15 часов назад, Lx671 сказал(а):

Капните зеленку)) Увидите движуху таянья и соответственно немного разная темпер...

Тут точно о разном говорим. Не суть.

Так. Вот тут видео о датчике.

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

Беру широкую чашку из стекла. Заливаю в нее половину воды. Ставлю в нее пластиковый стаканчик с гладкими стенками и дном. Заливаю в него воду так чтобы он стоял внутри чашки с водой. Закидываю в морозильник.

Пока ждем затвердевания воды. Все датчики связанные резинкой так чтобы был бортик толстый. К ним так же прикручена шпажка деревянная для шашлыка. Таким образом чтобы один ее край выступал ниже датчиков на 5 мм. Кладем их все вместе в банку стеклянную, так чтобы они не касались стекла. Вот для чего нужен бортик. Записываем данные после ребута платы. Оставляем до момента затвердевания воды в морозилке. Как только обнаружил, что вода затвердела записываю температуру с монитора.
А в морозильнике, кидаю туда же пластиковую бутылку с самой холодной водой из под крана на 30 минут. Через пол часа достаем бутылку с водой и стакан со льдом. Через пару минут вытаскиваем пластиковый стакан из льда. Получаем воронку внутри. Заливаю воду из бутылки. Погружаем датчики в воду и контрольный термометр. Так чтобы он не касался дна. Снимаем показания.

Скетч с исправленной ошибкой про расширение. При ребуте платы видим что плата нашла 4 прибора (отсчет с нуля идет). И что у них у всех одинаковое разрешение измерения.

Спойлер

// Include the libraries we need
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 0
#define TEMPERATURE_PRECISION 12

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// массив для хранения адресов устройств
DeviceAddress insideThermometer_index1, outsideThermometer_index2, index3, index4, index5;

// Assign address manually. The addresses below will need to be changed
// to valid device addresses on your bus. Device address can be retrieved
// by using either oneWire.search(deviceAddress) or individually via
// sensors.getAddress(deviceAddress, index)
// DeviceAddress insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
// DeviceAddress outsideThermometer   = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };

//============						// Данные для счетчика времени для опросов
unsigned long previousMillis = 0;   // Нулевое значение для начала отсчета
const long interval = 3000;         // Длительность паузы между опросами
//============

void setup(void)
{
  // start serial port
  Serial.begin(115200);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();

  // locate devices on the bus
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");

  // report parasite power requirements
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");

  // Search for devices on the bus and assign based on an index. Ideally,
  // you would do this to initially discover addresses on the bus and then
  // use those addresses and manually assign them (see above) once you know
  // the devices on your bus (and assuming they don't change).
  //
  // method 1: by index
  if (!sensors.getAddress(insideThermometer_index1, 0)) Serial.println("Unable to find address for Device 0");
  if (!sensors.getAddress(outsideThermometer_index2, 1)) Serial.println("Unable to find address for Device 1");
  if (!sensors.getAddress(index3, 2)) Serial.println("Unable to find address for Device 2");
  if (!sensors.getAddress(index4, 3)) Serial.println("Unable to find address for Device 3");
  if (!sensors.getAddress(index5, 4)) Serial.println("Unable to find address for Device 4");

  // method 2: search()
  // search() looks for the next device. Returns 1 if a new address has been
  // returned. A zero might mean that the bus is shorted, there are no devices,
  // or you have already retrieved all of them. It might be a good idea to
  // check the CRC to make sure you didn't get garbage. The order is
  // deterministic. You will always get the same devices in the same order
  //
  // Must be called before search()
  //oneWire.reset_search();
  // assigns the first address found to insideThermometer
  //if (!oneWire.search(insideThermometer)) Serial.println("Unable to find address for insideThermometer");
  // assigns the seconds address found to outsideThermometer
  //if (!oneWire.search(outsideThermometer)) Serial.println("Unable to find address for outsideThermometer");

  // show the addresses we found on the bus
  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer_index1);
  Serial.println();

  Serial.print("Device 1 Address: ");
  printAddress(outsideThermometer_index2);
  Serial.println();

  // set the resolution to 9 bit per device
  sensors.setResolution(insideThermometer_index1, TEMPERATURE_PRECISION);
  sensors.setResolution(outsideThermometer_index2, TEMPERATURE_PRECISION);
  //======== HANS Я ПОХОЖЕ ЗАБЫЛ ВОТ ТУТ ЗАДАТЬ РАЗРЕШЕНИЕ ДЛЯ ВСЕХ ДАТЧИКОВ
  sensors.setResolution(index3, TEMPERATURE_PRECISION);
  sensors.setResolution(index4, TEMPERATURE_PRECISION);
  sensors.setResolution(index5, TEMPERATURE_PRECISION);
  //========

  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(insideThermometer_index1), DEC);
  Serial.println();

  Serial.print("Device 1 Resolution: ");
  Serial.print(sensors.getResolution(outsideThermometer_index2), DEC);
  Serial.println();

  Serial.print("Device 2 Resolution: ");
  Serial.print(sensors.getResolution(index3), DEC);
  Serial.println();

  Serial.print("Device 3 Resolution: ");
  Serial.print(sensors.getResolution(index4), DEC);
  Serial.println();

  Serial.print("Device 4 Resolution: ");
  Serial.print(sensors.getResolution(index5), DEC);
  Serial.println();

  //=============
  void opros();      //Функция перезапуска счетчика врмеени
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    // zero pad the address if necessary
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  if(tempC == DEVICE_DISCONNECTED_C) 
  {
    Serial.println("Error: Could not read temperature data");
    return;
  }
  Serial.print("Temp C: ");
  Serial.print(tempC);
  //Serial.print(" Temp F: ");
  //Serial.print(DallasTemperature::toFahrenheit(tempC));
}

// function to print a device's resolution
void printResolution(DeviceAddress deviceAddress)
{
  Serial.print("Resolution: ");
  Serial.print(sensors.getResolution(deviceAddress));
  Serial.println();
}

// main function to print information about a device
void printData(DeviceAddress deviceAddress)
{
  Serial.print("Device Address: ");
  printAddress(deviceAddress);
  Serial.print(" ");
  printTemperature(deviceAddress);
  Serial.println();
}

/*
   Main function, calls the temperatures in a loop.
*/
void opros()
{
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures();
  Serial.println("DONE");

  // print the device information
  printData(insideThermometer_index1);
  printData(outsideThermometer_index2);
  printData(index3);
  printData(index4);
  printData(index5);
}

void loop (void) {
  //счетчик на Millis для повторения опроса через заданый промежуток в interval
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    opros ();
  }
}

 

Тестим. Сколько душе угодно.

66ef7aa394e7d_31820.jpg.b165425c36cb8c00391b62ecd696bc39.jpg

Вот что получилось у меня на выходе. Считаю проверку достаточной.

Пока жду остальные блоки (подходе PWM модуль и дисплей), займусь

1. Внешним питанием, чтобы можно было скормить от 5 до 40В на плату.

2. Обновлением прошивки по Wi-Fi.

 

Поделиться сообщением


Ссылка на сообщение
4 часов назад, Haaans сказал(а):

Тут точно о разном говорим. Не суть.

Ну вы все правильно поняли. Можно работать в метрологии))

Трубу (YouTube) здесь не ставьте, у нас заблокировали...  RuTube, если рекламой не засирают как раньше.

Прикольно, что вода холодная 19С - в такой купаться в речке за счастье)) Реально ?

Бп вам такой подойдет, добавьте 7805 на маленьком радиаторе, получите 5 и 12 стабилизированные.  (12 от видеокамер стабилизированы).

DSC_0001.JPG

Поделиться сообщением


Ссылка на сообщение
27 минут назад, Lx671 сказал(а):

Трубу (YouTube) здесь не ставьте, у нас заблокировали... 

О_о. Там видос с канала Заметки Ардуинщика. Про подключение датчиков DS18B20 и NTC

27 минут назад, Lx671 сказал(а):

Прикольно, что вода холодная 19С - в такой купаться в речке за счастье)) Реально ?

Не. Холодная в смысле из крана холодного. А так качает температуру на улице, 10 градусов скачок за 12 часов. Так что из крана может и 19 быть

27 минут назад, Lx671 сказал(а):

Бп вам такой подойдет, добавьте 7805 на маленьком радиаторе, получите 5 и 12 стабилизированные.  (12 от видеокамер стабилизированы).

Благодарю. Как раз такую схему и планировал + понижайка до 3,3В. БП только другой.

27 минут назад, Lx671 сказал(а):

Ну вы все правильно поняли. Можно работать в метрологии))

Собеседование на следующей недели

Изменено пользователем Haaans
правки

Поделиться сообщением


Ссылка на сообщение

Получил сегодня дисплей. 0,96" SSD1306 128x32 (как по факту оказалось), а КИтай продавал как 128х64. Но то все такое. Дисплей живой. И нашел у AlexGyver пример с выводом температуры на дисплей :) Есть чем заняться

 

Поделиться сообщением


Ссылка на сообщение
В 23.09.2024 - 20:12, Haaans сказал(а):

Получил сегодня дисплей. 0,96" SSD1306 128x32 (как по факту оказалось), а КИтай продавал как 128х64. Но то все такое. Дисплей живой. И нашел у AlexGyver пример с выводом температуры на дисплей :) Есть чем заняться

Дисплей все таки как обещали. 128х64. Спустя некоторое количество экспериментов, температура выведена на экран в формате Тводы 35C.

Для работы с датчиком температуры и дисплеев использовал библиотеки и примеры AlexGyver. Примеры от Dallas Temperature показались перегружены и несколько непонятно работающие.

Изменено пользователем Haaans
устаревшие данные

Поделиться сообщением


Ссылка на сообщение

Хм. в общем ткнулся в то что использованная мной библиотека устарела. ТАк написано на гит хабе у Алекса. Но из примера новой библиотеки быстро вывести на экран температуру не понял как. Желания ковырять нет.

Поделиться сообщением


Ссылка на сообщение

@VALKNUT, подтвердите пожалуйста размышления. 
1. На сервере для приема температуры от esp нужно: некую БД для хранения и http сервер чтобы принимать пакеты от платы 

2. вы используете ntp для поддержки реального времени на плате. И уже от него можно автоматизировать таймеры света

Поделиться сообщением


Ссылка на сообщение
2 часов назад, Haaans сказал(а):

@VALKNUT, подтвердите пожалуйста размышления. 
1. На сервере для приема температуры от esp нужно: некую БД для хранения и http сервер чтобы принимать пакеты от платы 

2. вы используете ntp для поддержки реального времени на плате. И уже от него можно автоматизировать таймеры света

Я использую локальный сервер Blynk.

Время можно синхронизировать с сервером Blynk, а можно по NTP с любым публичным сервером времени.
В работе и такой и такой вариант, не заметил плюсоы/минусов...
Если свет отключается, все равно всё отключается. Хоть и через некоторое время (ИБП).

ЗЫ. Для попробовать, выделю ресурсы своего сервера. Если вариант устроит, расскажу как запустить собственный.

Поделиться сообщением


Ссылка на сообщение
14 минут назад, VALKNUT сказал(а):

ЗЫ. Для попробовать, выделю ресурсы своего сервера. Если вариант устроит, расскажу как запустить собственный.

Арендное есть, не под это, но ресурсов должно хватить. VPS на минимальных ресурсах. С Debian на борту.

16 минут назад, VALKNUT сказал(а):

Время можно синхронизировать с сервером Blynk, а можно по NTP с любым публичным сервером времени.

Шикарно

Поделиться сообщением


Ссылка на сообщение
4 минут назад, Haaans сказал(а):

Арендное есть, не под это, но ресурсов должно хватить. VPS на минимальных ресурсах. С Debian на борту.

Как правило VPSы сильно ограничены в возможностях установки всякого софта.
Blynk работает на Java.

Debian - отлично!

 

Поделиться сообщением


Ссылка на сообщение
7 минут назад, VALKNUT сказал(а):

Как правило VPSы сильно ограничены в возможностях установки всякого софта.

Blynk работает на Java.

Про ограничения ничего не было. Но я проверю и установлю если разрешит

10 минут назад, VALKNUT сказал(а):

Debian - отлично!

Да, мне тоже нравится. Но местами не хватает знаний :)

Поделиться сообщением


Ссылка на сообщение
14 часов назад, VALKNUT сказал(а):

Я использую локальный сервер Blynk.

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

Дополнение. Официально апп стор/плэй стор не поддерживает старую серверную версию. То есть без доп манипуляций не взлетит. Надо подумать/погуглить

Изменено пользователем Haaans
Дополнение

Поделиться сообщением


Ссылка на сообщение
9 часов назад, Haaans сказал(а):

Надо подумать/погуглить

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

Поделиться сообщением


Ссылка на сообщение
17 минут назад, VALKNUT сказал(а):

Все же предлагаю попробовать на моем сервере и решить, подходит или нет.. и потом городить сервер.

Согласен.

18 минут назад, VALKNUT сказал(а):

Софта под "Огрызки" нет, под "Андроид" только

Андроид есть в хозяйстве 

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×