Haaans 634 Жалоба Опубликовано 20 сентября Нашел ошибку в скетче. Строка 85 не указана разрешение для каждого датчика. Отсюда такой разброс по температуре. Тест будет повторен. Поделиться сообщением Ссылка на сообщение
Lx671 213 Жалоба Опубликовано 21 сентября 7 часов назад, Haaans сказал(а): Решил устроить вот такие варианты измерения: Некоторые тесты у вас неправильны. Сначала надо на жидкосном градуснике посмотреть уровень погружения и опускать в воду как написано. Проверка на воздухе возможна, но просто положил рядом, а под колпаком и долго. В воде со льдом показания будут разные, нужно перемешивание с удержанием уровня. Замер лучше делать в большом стакане подальше от стенок все сразу при +5,,+10 и 2-я точка +40,,+50 - лучше поймете погрешность. Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано 21 сентября 2 часов назад, Lx671 сказал(а): Сначала надо на жидкосном градуснике посмотреть уровень погружения и опускать в воду как написано. У жидкостного видна зона измерения же. А в гильзе нет. Логичнее гильзу полностью погружать. 2 часов назад, Lx671 сказал(а): В воде со льдом показания будут разные, нужно перемешивание с удержанием уровня. Не понятно. Лед начал таять, нужно мерить же в этот период, а не тогда как много растаяло. 2 часов назад, Lx671 сказал(а): Замер лучше делать в большом стакане подальше от стенок Так и задумано. Пробую заморозить воду так чтобы внутри была воронка 2 часов назад, Lx671 сказал(а): при +5,,+10 и 2-я точка +40,,+50 - лучше поймете погрешность. Надо посмотреть, что может термометр Поделиться сообщением Ссылка на сообщение
Lx671 213 Жалоба Опубликовано 21 сентября 1 час назад, Haaans сказал(а): Не понятно. Лед начал таять, нужно мерить же в этот период, а не тогда как много растаяло. Капните зеленку)) Увидите движуху таянья и соответственно немного разная темпер... Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано 22 сентября 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 (); } } Тестим. Сколько душе угодно. Вот что получилось у меня на выходе. Считаю проверку достаточной. Пока жду остальные блоки (подходе PWM модуль и дисплей), займусь 1. Внешним питанием, чтобы можно было скормить от 5 до 40В на плату. 2. Обновлением прошивки по Wi-Fi. Поделиться сообщением Ссылка на сообщение
Lx671 213 Жалоба Опубликовано 22 сентября 4 часов назад, Haaans сказал(а): Тут точно о разном говорим. Не суть. Ну вы все правильно поняли. Можно работать в метрологии)) Трубу (YouTube) здесь не ставьте, у нас заблокировали... RuTube, если рекламой не засирают как раньше. Прикольно, что вода холодная 19С - в такой купаться в речке за счастье)) Реально ? Бп вам такой подойдет, добавьте 7805 на маленьком радиаторе, получите 5 и 12 стабилизированные. (12 от видеокамер стабилизированы). Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано 22 сентября (изменено) 27 минут назад, Lx671 сказал(а): Трубу (YouTube) здесь не ставьте, у нас заблокировали... О_о. Там видос с канала Заметки Ардуинщика. Про подключение датчиков DS18B20 и NTC 27 минут назад, Lx671 сказал(а): Прикольно, что вода холодная 19С - в такой купаться в речке за счастье)) Реально ? Не. Холодная в смысле из крана холодного. А так качает температуру на улице, 10 градусов скачок за 12 часов. Так что из крана может и 19 быть 27 минут назад, Lx671 сказал(а): Бп вам такой подойдет, добавьте 7805 на маленьком радиаторе, получите 5 и 12 стабилизированные. (12 от видеокамер стабилизированы). Благодарю. Как раз такую схему и планировал + понижайка до 3,3В. БП только другой. 27 минут назад, Lx671 сказал(а): Ну вы все правильно поняли. Можно работать в метрологии)) Собеседование на следующей недели Изменено 22 сентября пользователем Haaans правки 1 Lx671 отреагировали на это Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано 23 сентября Получил сегодня дисплей. 0,96" SSD1306 128x32 (как по факту оказалось), а КИтай продавал как 128х64. Но то все такое. Дисплей живой. И нашел у AlexGyver пример с выводом температуры на дисплей Есть чем заняться Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано 28 сентября (изменено) В 23.09.2024 - 20:12, Haaans сказал(а): Получил сегодня дисплей. 0,96" SSD1306 128x32 (как по факту оказалось), а КИтай продавал как 128х64. Но то все такое. Дисплей живой. И нашел у AlexGyver пример с выводом температуры на дисплей Есть чем заняться Дисплей все таки как обещали. 128х64. Спустя некоторое количество экспериментов, температура выведена на экран в формате Тводы 35C. Для работы с датчиком температуры и дисплеев использовал библиотеки и примеры AlexGyver. Примеры от Dallas Temperature показались перегружены и несколько непонятно работающие. Изменено 28 сентября пользователем Haaans устаревшие данные Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано 28 сентября Хм. в общем ткнулся в то что использованная мной библиотека устарела. ТАк написано на гит хабе у Алекса. Но из примера новой библиотеки быстро вывести на экран температуру не понял как. Желания ковырять нет. Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано Wednesday в 00:26 Это, чтоб не потерять. ESP8266 ПЕРЕД НАЧАЛОМ РАБОТЫ Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано Thursday в 02:08 @VALKNUT, подтвердите пожалуйста размышления. 1. На сервере для приема температуры от esp нужно: некую БД для хранения и http сервер чтобы принимать пакеты от платы 2. вы используете ntp для поддержки реального времени на плате. И уже от него можно автоматизировать таймеры света Поделиться сообщением Ссылка на сообщение
VALKNUT 2491 Жалоба Опубликовано Thursday в 04:36 2 часов назад, Haaans сказал(а): @VALKNUT, подтвердите пожалуйста размышления. 1. На сервере для приема температуры от esp нужно: некую БД для хранения и http сервер чтобы принимать пакеты от платы 2. вы используете ntp для поддержки реального времени на плате. И уже от него можно автоматизировать таймеры света Я использую локальный сервер Blynk. Время можно синхронизировать с сервером Blynk, а можно по NTP с любым публичным сервером времени. В работе и такой и такой вариант, не заметил плюсоы/минусов... Если свет отключается, все равно всё отключается. Хоть и через некоторое время (ИБП). ЗЫ. Для попробовать, выделю ресурсы своего сервера. Если вариант устроит, расскажу как запустить собственный. Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано Thursday в 04:52 14 минут назад, VALKNUT сказал(а): ЗЫ. Для попробовать, выделю ресурсы своего сервера. Если вариант устроит, расскажу как запустить собственный. Арендное есть, не под это, но ресурсов должно хватить. VPS на минимальных ресурсах. С Debian на борту. 16 минут назад, VALKNUT сказал(а): Время можно синхронизировать с сервером Blynk, а можно по NTP с любым публичным сервером времени. Шикарно Поделиться сообщением Ссылка на сообщение
VALKNUT 2491 Жалоба Опубликовано Thursday в 04:58 4 минут назад, Haaans сказал(а): Арендное есть, не под это, но ресурсов должно хватить. VPS на минимальных ресурсах. С Debian на борту. Как правило VPSы сильно ограничены в возможностях установки всякого софта. Blynk работает на Java. Debian - отлично! Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано Thursday в 05:08 7 минут назад, VALKNUT сказал(а): Как правило VPSы сильно ограничены в возможностях установки всякого софта. Blynk работает на Java. Про ограничения ничего не было. Но я проверю и установлю если разрешит 10 минут назад, VALKNUT сказал(а): Debian - отлично! Да, мне тоже нравится. Но местами не хватает знаний Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано Thursday в 19:23 (изменено) 14 часов назад, VALKNUT сказал(а): Я использую локальный сервер Blynk. Очень легкий поиск рассказал, что официально локальный вариант серверов фирма Blynk свернули. Но на гитхаб что-то есть. Думаю того что есть на гитхаб хватит. Не совсем понятно что там с приложениями. Но не искал информацию совсем по ним. Думаю на веб морду можно будет прикрутить. Дополнение. Официально апп стор/плэй стор не поддерживает старую серверную версию. То есть без доп манипуляций не взлетит. Надо подумать/погуглить Изменено Thursday в 19:33 пользователем Haaans Дополнение Поделиться сообщением Ссылка на сообщение
VALKNUT 2491 Жалоба Опубликовано Friday в 04:46 9 часов назад, Haaans сказал(а): Надо подумать/погуглить Уже всё подумано. Всё есть. И сервер и приложения. Софта под "Огрызки" нет, под "Андроид" только. Все же предлагаю попробовать на моем сервере и решить, подходит или нет.. и потом городить сервер. Поделиться сообщением Ссылка на сообщение
Haaans 634 Жалоба Опубликовано Friday в 05:04 17 минут назад, VALKNUT сказал(а): Все же предлагаю попробовать на моем сервере и решить, подходит или нет.. и потом городить сервер. Согласен. 18 минут назад, VALKNUT сказал(а): Софта под "Огрызки" нет, под "Андроид" только Андроид есть в хозяйстве Поделиться сообщением Ссылка на сообщение