Система автополива

Всем привет!

Хочу поделиться своей самоделкой, которая служит мне уже больше года.
Начав осваивать Arduino, думал над тем, какой бы проект реализовать. Вспомнил, что у меня много комнатных растений, которые периодически забывают поливать, да и вопрос полива во время отпусков и командировок имеет место быть. 

Система состоит из следующих компонентов:

Блок управления – сердце системы. Здесь находится Аккумуляторы, Arduino, модуль времени DS3231, дисплей, преобразователи напряжения и органы управления.

Могут понадобиться

Беспроводной радио модуль Arduino NRF24L01
Драйвер двигателей на L293
Контроллер Arduino UNO
TM1637 7-сегментный светодиодный модуль-дисплей
Беспроводная система управления на 433 Мгц

Рядом с растениями расположена канистра с водой. В канистре находятся погружные помпы, которые перекачивают воду по трубкам в растения. 

Распределение воды между растениями можно дополнительно отрегулировать с помощью гребенки с кранами

Все технические элементы системы можно спрятать за шторы и горшки, чтобы сильно не бросались в глаза

Основные параметры системы:

1. Автономная работа от аккумуляторов около 5 месяцев
2. Система поддерживает управление 3-мя помпами. К каждой помпе можно подключить гребенку с 2-4 кранами и дополнительно регулировать потоки воды. Итого получаем возможность подключить до 12 растений 
3. Время снимается с отдельного независимого модуля часов DS3231. Помпа срабатывает при наступлении часа, указанного в настройке (например 8:00) . 
4. На дисплей выводится информация
5. Настройки полива указываются в коде программы, их можно поменять, перепрошив Arduino

Пояснения по отображаемой на дисплее информации:
Первая строка – шапка таблицы. Каждая строка показывает информацию по соответствующей помпе. Первый столбец – показывает период работы (ПР) . Например при значении «5» — помпа будет срабатывать каждые 5 дней. Второй столбец – час работы (ЧР) – час в начале которого включится помпа. Третий столбец – время работы (ВР) – продолжительность работы помпы в секундах. Четвертый столбец – дней осталось (ДО) – показывает сколько осталось дней до ближайшего срабатывания. Дата и время также выводятся на дисплей.

Система не имеет обратной связи, поэтому настройки нужно подбирать опытным путем. Лучше всего группировать растения близкие по требованиям к поливу (какие-то хорошо переносят засуху, другие наоборот любят обильный полив) и размерам горшков.
Настройки задаются примерно следующим образом: каждые 5 дней включать помпу в 8:00 на 30 секунд.
Ниже будет указано, в какой части кода эти настройки находятся.

В коде программы можно отключить 2-ю и 3-ю помпы. В этом случае на экран будет выводиться информация только по включенным помпам. 

Автономность обеспечивается благодаря:
• Питанию от аккумуляторов формата 18650
• Ардуино и уходит в глубокий сон (Powerdown) и просыпается по Watсhdog
• У стабилизатора напряжения Arduino откушена левая нога 
• Дисплей во время работы находится в выключенном состоянии. Для активации дисплея нужно удерживать кнопку выхода из сна около 10 секунд.
• С модулей выпаяны все индикаторные светодиоды

Система потребляет около 3мА, 1 помпа потребляет около 350 мА в режиме работы.

Основные Детали:

• Пищевой контейнер для корпуса
• Китайский клон Arduino nano
•  DS3231 Модуль реального времени
• Аккумуляторы формата 18650 
• Повышающий модуль до 5В (ток около 1 А)
• Понижающий модуль до 3,3В для питания дисплея
• Дисплей Nokia 5110
• TP4056 модуль для зарядки (+защита) аккумулятора 
• Индикатор зарядки аккумулятора
• Различная «рассыпуха»: полевые транзисторы, резисторы, конденсаторы (электролитические и керамические) 
•  Выключатели и кнопки 

Монтажная «схема» устройства:

Пояснения по схеме:

1. 4 аккумулятора формата 18650 соединены параллельно. Общая емкость – около 13000 мА/ч.
2. Аккумулятор подключен к зарядно — защитному модулю TP4056. Зарядка осуществляется через разъем micro USB от телефонной зарядки. Зарядка нужна с током не менее 1А. Примерное время полной зарядки – 13 -14 часов. Индикаторные светодиоды можно выпаять и вывести на корпус.
3. Далее через выключатель подключен повышающий преобразователь до 5В. Он будет питать большую часть компонентов схемы, включая помпы. С падением уровня заряда аккумуляторов напряжение снизится с 4,2В до 2,7В, что для работы схемы не достаточно. Модуль обеспечит стабильное напряжение. На выход модуля ставится фильтр из электролитического и керамического конденсаторов. Электролитический конденсатор выполняет сглаживающую, стабилизирующую роль. Керамический конденсатор служит для борьбы с высокочастотными помехами. Если у модуля «пищит» дроссель во время работы, для устранения этого явления можно поставить ещё дополнительный электролитический конденсатор на вход модуля. Электролитические конденсаторы емкостью 1000 мкФ на 6,3В. Керамические конденсаторы подойдут от 1-2 мкФ. В схеме использованы на 10 мкФ, потому, что у меня было много лишних.
4. Для питания дисплея нужно напряжение 3,3В, поэтому добавляется понижающий преобразователь с аналогичными фильтрами из конденсаторов.
5. Модуль часов DS3231, нужен для более точного отсчета времени. Светодиод Power (1) отпаян у модуля DS3231. Сделано это для целей энергосбережения. Если вы используете обычные батарейки (не аккумуляторные), то нужно отпаять резистор (2). Модуль рассчитан на аккумуляторные батарейке в том числе заряжает их. Если батарея обычная, зарядный ток быстро приведет ее в негодность.

6. Основной мозг системы – платформа Arduino nano. Для целей энергосбережения нужно отпаять все светодиоды (или хотя бы только Power), а также откусить левую ногу стабилизатора напряжения. \

7. Управление помпы осуществляется через полевые транзисторы. Подойдут любые, которые открываются 5В напряжением и способны коммутировать ток от 1А. Сначала я использовал готовые. Я спаял батарею из полевых транзисторов + резисторы (100 Ом для защиты Arduino, 10к Ом для подтягивания затвора транзистора к земле, чтобы мосфет закрывался)+ также припаял разъемы KF 301-2P для фиксации проводов

8. На дисплей выводится вся информация. Для пробуждения дисплея, нужно удерживать кнопку до 10 секунд. При смене минуты в часах система уйдет в сон, а дисплей отключится.

Дополнительные моменты по сборке:
• Емкость с водой, должна обязательно располагаться ниже горшков, иначе есть риск, что после отключения помп вода продолжит литься.
• Расстояние от дна емкости до конца трубки не должно превышать 70см. На большую высоту помпе будет сложнее поднять воду.
• На мини помпу с Али отлично подходят прозрачные шланги 6х1,5 мм
• Важно чтобы отверстие помпы для забора воды не упиралась в стенку емкости с водой, иначе нормального напора не будет.
• Для крепления шланга на помпу нельзя использовать железные детали (хомуты, проволоку и т.д.) Всё ржавеет очень быстро.
• У помпы короткие провода. Их скорее всего придется наращивать. Для герметизации проводов лучше всего использовать термоклей, а сверху термоусадку. 

Логика работы программы:

• Arduino выходит из сна
• Показания модуля DS3231 (дата и время) присваиваются переменным
• При изменении даты меняется значение счетчика прошедших дней
• Если период работы (настройка) совпадает с числом прошедших дней, проверяется час
• При совпадении часа (настройка) и часа из модуля времени включаем помпу на время указанное в настройках
• Arduino уходит в сон
• Если удерживать кнопку выхода из сна подается питание на дисплей и Arduino пробуждается

Настройки полива указываются вот в этой части кода:


Отличие аналоговых пиров от цифровых

На этом занятии мы рассмотрим, цифровые и аналоговые выходы Arduino, разберем чем отличается цифровой сигнал от аналогового. Соберем с помощью макетной платы схему из двух светодиодов и будем плавно регулировать их яркость. Рассмотрим тип данных int, условный оператор if и команду analogWrite для управления аналоговыми портами в языке программирования Ардуино.

Чем отличается аналоговый сигнал от цифрового

Аналоговый сигнал непрерывно изменяется во времени. Вся информация в природе аналоговая — волны на воде, колебание струны и т.д. Изначально человек записывал информацию (звуки, изображения, видео) с помощью аналоговых устройств. Но аналоговые сигналы чувствительны к воздействию шумов и помех.

Цифровой сигнал передается в виде единиц и нулей, для компьютеров и цифровой техники это проще реализовать (есть сигнал или нет сигнала). Для оперативной памяти в компьютерах используют конденсаторы, один заряженный конденсатор — 1 бит. На флеш-памяти используют транзисторы с плавающим затвором.

С появлением компьютеров аналоговые сигналы стали переводить в цифру, поскольку аналоговый сигнал подвержен искажениям и затуханию при передаче или записи. Наглядно продемонстрировать разницу между аналоговым и цифровым сигналом поможет картинка, где изображен процесс квантования — разбиение непрерывной величины на конечное число интервалов (перевод аналогового сигнала в цифру).

Квантование — разбиение диапазона непрерывной величины на конечное число интервалов

Квантование — разбиение непрерывной величины на интервалы

Аналоговые и цифровые выходы на Ардуино

Если вы хотите регулировать выходное напряжение на порте, то следует использовать пины, помеченные символом «~». Для Arduino Uno — это 3, 5, 6, 9, 10, 11. С помощью аналоговых портов на Arduino можно выдавать любое напряжение 0 до 5 Вольт. Цифровые выходы Arduino можно только включать (5 Вольт) и выключать (0 Вольт). Аналоговые порты используют ШИМ (широтно-импульсную модуляцию), по английски PWM (pulse-width modulation), с помощью которой имитируется аналоговый сигнал.

гнал.

Аналоговые выходы на Ардуино имеют, отметку тильда

Аналоговые выходы на плате Ардуино имеют, отметку тильда «~»

Чтобы понять разницу между цифровым и аналоговым сигналом, соберите на макетной плате схему из светодиода и резистора, как на первом занятии — Подключение светодиода. Но в этот раз подключите светодиод к аналоговому выходу ~9. Откройте скетч для мигания светодиодом из первого занятия и измените в нем порт выхода с Pin13 на Pin9. Загрузите скетч в плату Arduino NANO или UNO.

На Arduino аналоговый выход будет работать, как цифровой

На Arduino аналоговый выход будет работать, как цифровой

9 порт может работать, как цифровой выход. Но если функцию digitalWrite изменить на analogWrite, то вместо значения HIGH (1) и LOW (0) можно поставить любое значение от 0 до 255. Именно в этом интервале можно менять напряжение на аналоговых выходах. Загрузите программу для плавного включения и затухания светодиода. Скачать готовый скетч можно можно по ссылке здесь с Google Дис

Скетч. Аналоговый сигнал Ардуино

int svet = 0; // начальная яркость свечения светодиодаint fade = 5; // шаг изменения яркости свечения светодиода

void setup() {
  pinMode(9, OUTPUT); // используем Pin9 для операции вывода
}

void loop() {
 // устанавливаем яркость светодиода на Pin9analogWrite(9, svet);

// изменяем яркость, прибавляя заданную величину fade в каждом цикле
  svet = svet + fade;

// меняем порядок затухания при минимальной и максимальной яркостиif (svet == 0 || svet == 255) {
    fade = -fade;
  }

  delay(20); // устанавливаем паузу для эффекта
}

Ультразвуковой датчик HC-SR04

Добрый день, уважаемые схемотехники и программисты. Сегодня мы переходим к третьему уроку.Мы научимся подключать ультразвуковой дальномер HC-SR04 к Arduino. Разберем принцип работы дальномера и программирование этого устройства.
Урок подойдет начинающим, но будет интересен и более опытным инженерам.

Читать далее

Введение в ардуино

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

Читать далее