Как стать автором
Обновить

Комментарии 26

Arduino Nano — 1900 руб;
5 термодатчиков DS18B20 — 1950 руб;
Это жесть. 160 и 670 руб. с али.
Согласен, но сроки были очень сжатые, ждать доставки не было возможности. Термокоса изначально делалась для экспедиции, так что на всё про всё была одна неделя :)
Ну ведь в таком случае, ваша термокоса на порядок, т.е. практически в 10 дешевле. А это здорово.
Да даже при ОЧЕНЬ сжатых сроках 1900руб за nano!!!??? у меня в голове такое не укладывается. Открываем Авито, вводим arduino nano и получаем предложения по 300-400руб…
Не стал бы я их брать. Ибо качество там реально плохое. На китайские атмеги, купленные по дешевке на али, я нарывался уже. То ли отбраковка, то ли подделка — но глючили и портилась программа во флеше.
А вы думаете у Автора оригинал? Вглядитесь в фото ;)
Самый что ни есть оригинальный оригинал, Arduino Nano ревизии 3.1 :) Если Вас смущает отсутствие штырьковых контактов ICSP, то я их просто убрал для уменьшения габаритов платки (а то в термоусадку с трудом лезла).
5 термодатчиков DS18B20 — 1950 руб;

Вы что?.. Где вы такие цены видели? 80
Ну так я же не спорю что можно купить дешевле.
Вариантов где купить это же и за дорого — полно :)
Покупал в Амперке по 390 за штуку. Честно, пошёл по первой ссылке и дальше искать не стал, минус мне, мог бы порядком сэкономить.
А LabVIEW умеет читать данные с COM порта?
Может быть было проще сделать реализацию когда ардуинка сама читает данные с датчиков и отсылает данные в порт?
LabVIEW умеет читать данные с COM порта?

Да, умеет. Собственно, всё его общение с ардуиной и происходит через COM-порт.
Я не совсем понял, Вы имеете в виду, что стоило сделать, чтобы Arduino самостоятельно опрашивала датчики и отсылала показания в порт, а LabVIEW просто время от времени их читал? Что-то интересное в этой идее есть, но тогда возникли бы лишние сложности с выбором датчика для чтения и с заданием интервала опроса. К тому же, в буфере вывода умещается не так много байт, если я хочу проводить очень длительные измерения, информация может потеряться :)
Ардуино хранит в памяти показания всех датчиков.
LabVIEW пишет в порт, например, GetAll.
Получив эту строку ардуинка отправляет все значения, разделив их чем-нибудь. Например запятой. А как уже дальше парсят эту строку — ардуинке не важно.
Хотите запрашивать один датчик — Get1. Ну и т.д.
Вот тут готовый пример — playground.arduino.cc/Learning/OneWire
Даже с выводом в COM порт (Serial.print). Подправить чтобы лишнее не слал.
Резанул восприятие пассаж о том, что при использовании паразитного питания данные могут быть искажены. Они и при обычном питании могут быть искажены, похлопайте пускателем первой величины возле вашей конструкции — увидите. Для защиты от этого есть в протоколе контрольная сумма, которую всегда надо сверять.

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

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

Код после автогенератора линчевать смысла нет, но копипаст там дичайший.
Про искажения при паразитном питании — взято из того самого даташита :)

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

А за подсказку о коррекции — спасибо! Покопаюсь в этом направлении.
В вашей ситуации допускается отключать прерывания на время обмена с датчиками.
Еще лучше — использовать свободный USART для реализации обмена www.maximintegrated.com/en/app-notes/index.mvp/id/214
Не совсем понял как получилась такая маленькая погрешность 0,08 градуса цельсия в среднем, если сам датчик DS18B20 имеет точность 0,5 градуса в диапазоне -10..+85?
Калибровка датчиков дала коррекцию на смещение, но имеет ли этот датчик достаточную повторяемость измерений с разбросом менее 0,1? у меня такой датчик выдает измерения с разбросом около 0,2 градуса, потому и интересно стало, откуда такая точность.
На выборке из ~30 измерений отклонение от «эталона» — ртутного термометра — составило в среднем эти самые 0,08 градуса. Да, эта цифра несколько с потолка, но лидарные измерения дают точность порядка 1 градуса, так что даже если принять, что погрешность термокосы определяется точностью датчиков (0,5 градуса), это уже неплохо.
Раз уж пользуетесь LabView, могли бы нормальные термодатчики купить, у которых хотя бы 0.3°C точность, а не это барахло!
Мне в этом всем активно не нравится процесс калибровки. Особенно если писать о погрешности 0,08 °С. При такой точности уже надо очень тщательно обеспечивать однородность температуры в объеме, где находятся калибруемый и эталонный термометры. В частности, нужно теплоизолировать термостат, организовать перемешивание. И еще — объем воды в стакане слишком мал, внесение в нее термометров может приводить к заметному изменению температуры.
По-хорошему вам еше надо мерить загрязненность воды — ставить infrared sensor и скорость воды если есть поток.
Неужели в 2014м году такие конские цены были? Нынче ардуину нанао можно за 200р взять, а далласовский датчик за 120р. за штуку. Выйдет вообще смешная сумма.
Получается 200 + (120 * 5) + 150 +200 = 1150р.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории