Самодельный датчик влажности почвы. Часть 1 (до сентября 2014)
#281
Отправлено 30 August 2013 - 01:29
#282
Отправлено 30 August 2013 - 08:52
Николай, вполне разумно. Только надо с адресом определиться. Логично будет разместить ID датчика в самое начало EPROM, и отвести под него два байта, как для обычного регистра. Тогда его адрес будет 40001, а дальше идут все остальные регистры хранения. Причем на стороне датчика хорошо-бы предусмотреть механизм смены адреса датчика ПОСЛЕ выполнения команды записи или как-то по другому обеспечить правильный ответ на запись. Иначе управляющее приложение на запрос записи получит ответ как-бы от другого датчика. Конечно, особой роли не сыграет, но ошибку выдаст.
Еще по поводу алгоритма выполнения полива. Я сейчас планирую сценарий, когда имеется датчик, к которому на реле подключен насос, а сенсор влажности используется как датчик дождя. Причем каждому датчику в системе, в том числе и управляющему насосом, назначается номер группы (в управляющем приложении). В этом случае, управляющее приложение, обнаружив датчик для которого надо выполнить полив, находит датчик управления насосом, имеющего ту-же группу, что и датчик влажности. Если насос найден и нет дождя, то включает реле на датчике насоса и реле на датчике влажности, если не найден, то просто включает реле на датчике. Если имеется датчик управления насосом, то он будет иметь настройку (в управляющем приложении) о количестве одновременно разрешенных открытых реле датчиков влажности (например насос "тянет" только две грядки одновременно).
Как видите, алгоритм не сложно запрограммировать в приложении, которое ориентировано на определенные типы датчиков с известными набором регистров. А вот при разработке универсального приложения с управляющими скриптами, возникнут проблемы как со сложными скриптами, так и с визуальным интерфейсом (придется еще и описывать какие регистры и как отображать на графиках). Поэтому я буду потихоньку прорабатывать универсальное приложение, а в основном переключусь на приложение, ориентированное на существующие датчики.
Итак подытожим.
Датчик влажности:
- Регистр влажности 30001
- Регистр температуры первый 30002
- Регистр температуры второй 30003
- Флаг готовности 0001
- Флаг реле 0002
- Уникальный код 40001
- Регистры настройки добавляемые пользователем (40002...)
Регистры 30001..30003 имеют настройки пересчета. Регистр 30002 может быть использован как корректирующий для значений регистра 30001 (коррекция температуры). Флаг готовности говорит о достоверности данных остальных регистров и может быть сброшен управляющим приложением для переинициализации датчика (reset). Флаг реле включается для выполнения действия, предписанного датчику. Регистры настройки добавляются и изменяются пользователем по необходимости за исключением регистра 40001, содержащего уникальный код регистра.
Датчик насоса:
- Регистр влажности 30001 используется как датчик дождя (можно не использовать)
- Регистр температуры первый 30002 температура воздуха (можно не использовать)
- Регистр температуры второй 30003 температура насоса (можно не использовать)
- Флаг готовности 0001 наличие воды для полива или True если не используется
- Флаг реле 0002 включение/выключение насоса
- Уникальный код 40001
- Регистры настройки добавляемые пользователем (40002...) на усмотрение пользователя
Другие типы датчиков (движения, освещения и т.д.) запланированы, будут настраиваться более универсально для возможности использования промышленных датчиков.
Николай, как вам такая конфигурация? И подскажите по вашему алгоритму полива.
#283
Отправлено 30 August 2013 - 10:47
Николай, вполне разумно. Только надо с адресом определиться. Логично будет разместить ID датчика в самое начало EPROM, и отвести под него два байта, как для обычного регистра. Тогда его адрес будет 40001, а дальше идут все остальные регистры хранения. Причем на стороне датчика хорошо-бы предусмотреть механизм смены адреса датчика ПОСЛЕ выполнения команды записи или как-то по другому обеспечить правильный ответ на запись. Иначе управляющее приложение на запрос записи получит ответ как-бы от другого датчика. Конечно, особой роли не сыграет, но ошибку выдаст.
Игорь, я бы регистр ModBus для управления ID разместил в конец таблицы адресов, напимер, 65535 (FFFF). Так более вероятна совместимость с промышленными датчиками. В EEPROM имеет смысл отвести под ID один байт. Насчет правильного ответа согласен, надо подумать как реализовать.
Еще по поводу алгоритма выполнения полива. Я сейчас планирую сценарий, когда имеется датчик, к которому на реле подключен насос, а сенсор влажности используется как датчик дождя. Причем каждому датчику в системе, в том числе и управляющему насосом, назначается номер группы (в управляющем приложении). В этом случае, управляющее приложение, обнаружив датчик для которого надо выполнить полив, находит датчик управления насосом, имеющего ту-же группу, что и датчик влажности. Если насос найден и нет дождя, то включает реле на датчике насоса и реле на датчике влажности, если не найден, то просто включает реле на датчике. Если имеется датчик управления насосом, то он будет иметь настройку (в управляющем приложении) о количестве одновременно разрешенных открытых реле датчиков влажности (например насос "тянет" только две грядки одновременно).
При завязке с датчиком дождя полива утром и вечером не получится - будет роса мешать. Да и дождик у нас часто бывает никакой - моросит моросит, а земля сухая.
Николай, как вам такая конфигурация? И подскажите по вашему алгоритму полива.
По конфигурации замечание только одно адрес ID в ModBus не особо удачно расположен, хотя если использовать только свои датчики то и без разницы где он будет. Можно вообще пользовательскую команду создать для смены ID из диапазона (от 65 до 72 и от 100 до 110).
У меня пока на улице датчики не используются. Есть в теплице, подключенные к магистрали общего водопровода через редукционный клапан и дома на балконе - там стоит подвесной бак наливаемый руками, так как через всю квартиру трубу тащить от водопровода лень. Правда бак можно вниз опустить, чтобы проще наливать. Тогда и управление насосом пригодится.
Так что алгоритм полива у меня пока простой если достигнут порог "сухо" включаем на время полив, делаем выдержку для распределения воды по земле и опять проверяем влажность и так пока не дойдем до порога "влажно" дальше ждем порога "сухо".
#284
Отправлено 31 August 2013 - 09:14
По конфигурации замечание только одно адрес ID в ModBus не особо удачно расположен, хотя если использовать только свои датчики то и без разницы где он будет. Можно вообще пользовательскую команду создать для смены ID из диапазона (от 65 до 72 и от 100 до 110).
Николай, у меня на МК только 1KB EEPROM расположенный по адресу 8000h. Поэтому никак не смогу использовать FFFFh. Если честно, то для упрощения задачи, я все регистры настроек датчика просто замапил на начало вектора EEPROM. Т.е. весь диапазон EEPROM разбит на двухбайтовые регистры и доступен через команды modbus. Если вы сделаете так же, то отпадет необходимость обрабатывать каждую команду чтения/модификации регистров хранения персонально. Поэтому и логично разместить ID в самое начало, конец-то у всех разный будет, а в середину - то можно и запутаться.
Двухбайтовый адрес тоже не должен быть проблемой. В программе обращаем внимание только на младший байт, а старший просто игнорируем.
Для промышленных датчиков, у которых ID в другом месте, в управляющей программе добавляем к датчику регистр хранения с заданным адресом и модифицируем его.
По поводу датчика дождя. Тут надо конструкцию какую-то придумывать. Слабый дождь и роса у нас тоже часто. Нужно что-то типа воронки сделать и ограничить вытекающий поток. При обильном дожде, вода вытекать не успеет и это дело надо как-то отловить. В общем пробовать надо.
Николай, а у вас какое устройство USB-RS485?
#285
Отправлено 31 August 2013 - 16:58
Ну пусть остается 40001.Николай, у меня на МК только 1KB EEPROM расположенный по адресу 8000h. Поэтому никак не смогу использовать FFFFh. Если честно, то для упрощения задачи, я все регистры настроек датчика просто замапил на начало вектора EEPROM.
Николай, а у вас какое устройство USB-RS485?
Ага, именно такую штуку использую.
http://bolid.ru/prod.../usb-rs485.html
#286
Отправлено 02 September 2013 - 14:24
#287
Отправлено 03 September 2013 - 02:09
#288
Отправлено 03 September 2013 - 08:58
#289
Отправлено 03 September 2013 - 19:56
Да нет, в AtMege не все так просто. Там при записи в EEPROM надо манипулировать тремя регистрами ( адрес, данные, управление) да еще смотреть не пишется ли что нибудь в это время во Flash. Так что наложение там не проходит.Предлагаю простой и удобный вариант работы с регистрами хранения, это наложить их на область адресов EEPROM. Небольшой недостаток - доступ по словам, а не по байтам.
Николай, а почему вы избегаете размещения RJ45 на плате? Между прочим, очень удобно соединять датчики обычным патч-кордом. Для экономии места можно установить только один разъем основной шины на плату, а коммутацию производить через тройники.
RJ45 у меня просто в наличии нету, а RJ12 валялись - вот и попробовал. Пока остановлюсь на гребенке.
#290
Отправлено 04 September 2013 - 08:30
Да нет, в AtMege не все так просто. Там при записи в EEPROM надо манипулировать тремя регистрами ( адрес, данные, управление) да еще смотреть не пишется ли что нибудь в это время во Flash. Так что наложение там не проходит.
Николай, не в буквальном смысле наложить. Я имею в виду, что регистру 40001 соответствует адрес EEPROM[0], 40002: EEPROM[2] и т.д. Другими словами, логически разместить регистры хранения последовательно в EEPROM. У меня тоже пришлось манипулировать немного с управлением EEPROM.
Для упрощения, можно держать копию EEPROM (или его части) в оперативке и сделать процедуру, которая на холостом ходу датчика сравнивает копию с оригиналом и вносит изменения в EEPROM при необходимости. Это, кстати, позволит правильно ответить датчику на команду смены ID.
#291
Отправлено 05 September 2013 - 00:52
Ну тогда понятно. Для хранения в EEPROM пока подходит только адрес датчика. Остальные регистры при выключении хранить незачем. Сейчас у меня все хранится структурами (адрес, данные) в ОЗУ. Поэтому могу набрать набор регистров с произвольными адресами.
#292
Отправлено 05 September 2013 - 09:47
Остальные регистры при выключении хранить незачем.
А как же настройки сервы? Да еще и установки частоты накачки можно туда засунуть.
Тем не менее, управляющее приложение все-таки сделал гибридное. Можно создавать и настраивать произвольные датчики, или создать предопределенные датчики (влажность-температура, насос и т.д.). Сейчас отлаживаюсь. Пока полет нормальный
sg-1.jpg 103.51К 26 Количество загрузок:
#293
Отправлено 06 September 2013 - 08:08
Еще вот мысли по поводу конструкции сенсора. Когда-то давно, я делал бесконтактный датчик уровня воды. Он был аналоговый, представлял собой генератор ВЧ и работал по принципу срыва генерации. Вот, нашел фотку cs_photo.jpg 54.59К 8 Количество загрузок: В качестве сенсора использовал пищевую фольгу, наклеенную при помощи скотча на внешнюю сторону пластикового бака. Вот я и подумал, что можно попробовать наклеить на цветочный горшок два кольца из пищевой фольги одно над другим и подсоединить это дело к датчику, работающему на 1MHz. По идее, работать должно. Еще, для цветочных горшков (которые рядом), можно на датчик поставить демультиплексор, и соорудить несколько каналов измерения.
#294
Отправлено 06 September 2013 - 10:03
Поставил диоды 1N4148, 150 раз проверил схему, но как не странно получить диапазона в 600 ед так и не удалось, сначала грешил на датчик померил скотч, которым обклеен датчик он 45 мкм должен норм работать, использую ардуино уно с atmega328, может он отличается от нано :blink: ??
Сергей, вы для проверки, датчик закоротите. Показания должны резко упасть. Если не получится, дело в схеме, если получится - дело в сенсоре.
Спасибо за совет сегодня вечером попробую поэкспериментировать!
#295
Отправлено 06 September 2013 - 18:30
А как же настройки сервы? Да еще и установки частоты накачки можно туда засунуть.
Сервы стандартизированы и специальные настройки как бы без надобности - за глаза хватит угла поворота. Частоту запихнуть можно, вернее коеффициент предварительного делителя. В процессе отладки может и другие настройки понадобятся.Мысли интересные, но сначала надо с этим датчиком закончить.
#296
Отправлено 06 September 2013 - 18:39
Сергей, вы какое опорное напряжение на АЦП используете. Если 3,3в то больше 300 едениц дельты не получится.Поставил диоды 1N4148, 150 раз проверил схему, но как не странно получить диапазона в 600 ед так и не удалось, сначала грешил на датчик померил скотч, которым обклеен датчик он 45 мкм должен норм работать, использую ардуино уно с atmega328, может он отличается от нано :blink: ??
Потом на уно у вас какой кварц стоит 16мГц или 8?
Еще хотелось бы знать: параметры сенсора, показания в воздухе, показания полностью в воде.
#297
Отправлено 07 September 2013 - 00:38
#298
Отправлено 08 September 2013 - 06:16
#299
Отправлено 08 September 2013 - 19:21
#300
Отправлено 08 September 2013 - 19:50
Буду подбирать экранированный провод для линии до датчика.
Сергей, попробуйте телефонный провод ТРП вместо экранированного.
Мне вот все равно кажется, что 1MHz многовато будет. Лучше частоту уменьшить и изменить конструкцию сенсора. Предсказуемость поведения точно улучшится.
Темы с аналогичным тегами приборы
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 скрытых пользователей