ARDUINO Простой автополив. Обсуждение проекта

EandV

★★★✩✩✩✩
4 Авг 2018
288
167
Можно ль посмотреть скетч. Можно ли менять колличество дней через которые поливает не перепрошивая (например перестановкой перемычек)? Как с экономией батареек? До этого у меня стояла покупная аквадуся, там 8 АА хватало на всё лето. Вместе с работай 2 помп.
Вот тут статья:
https://community.alexgyver.ru/threads/avtonomnyj-avtopoliv-na-1-12-komnatnyx-rastenij.189/
Там схемы и скетчи есть. Работает на аккумуляторах - 4 банки 18650, хватает где-то на пол года примерно без зарядки. Настройки менять без перепрошивки нельзя.
Я сделал другую версию системы, там есть кнопки для изменения настроек безе перепрошивки.
Система2.JPG
Все руки не доходят нарисовать схему и оформить статью.
 

Constantine

✩✩✩✩✩✩✩
5 Окт 2019
2
0
Всем привет!
А у меня работает вот так-
рывками и всего 8-10 секунд, не 30. Скеч я не правил, загрузил как есть.
Кто-нибудь сталкивался с такой проблемой?
 

Constantine

✩✩✩✩✩✩✩
5 Окт 2019
2
0
разобрался на 50%))
это у меня такой старт системы почему-то) Т.е. включаю питание, идут такие вот рывки и потом по таймеру все работает, как и должно))
 

В.Т.

✩✩✩✩✩✩✩
3 Фев 2019
6
6
Такой вопрос, я взял чуть другую плату, и у меня возникли проблемы с прошивкой, она по подскажет кто в чем может быть дело?
Да, и в этой плате надо тоже удалить стабилизатор и все остальное (стабилитроны - по вкусу. После них у многих перестает перепрошиваться. С ними - живет 2 месяца вместо года.
 

amdgod

✩✩✩✩✩✩✩
2 Авг 2019
3
0
Здравствуйте, подскажите пожалуйста, можно ли управлять двумя помпами, что бы у каждой был свое время срабатывания с одной платы Digispark ?
 

EandV

★★★✩✩✩✩
4 Авг 2018
288
167
Здравствуйте, подскажите пожалуйста, можно ли управлять двумя помпами, что бы у каждой был свое время срабатывания с одной платы Digispark ?
Можно, но прошивку придется переписать + добавить дополнительный мосфет.
 
  • Лойс +1
Реакции: amdgod

EandV

★★★✩✩✩✩
4 Авг 2018
288
167
@В.Т., Решение интересное, я бы только ещё всё это какой-то крышкой накрыл. По моему опыту в открытые емкости с большой площадью постепенно пыль налетает и начинает вода тухнуть.
 

amdgod

✩✩✩✩✩✩✩
2 Авг 2019
3
0
Можно, но прошивку придется переписать + добавить дополнительный мосфет.
Достаточно ли будет добавить в соответствующие места код:
C++:
#define PERIOD2 43200
#define WORK2 43200
#define MOS2 2

if (!state) {                           // если помпа не включена
    if ((long)mainTimer - myTimer > PERIOD2) {   // таймер периода
      myTimer = mainTimer;                // сброс таймера
      state = true;                       // флаг на запуск
      pinMode(MOS2, OUTPUT);               // пин как выход
      digitalWrite(MOS2, HIGH);            // врубить
    }
  } else {                                // если помпа включена
    if ((long)mainTimer - myTimer > WORK2) {     // таймер времени работы
      myTimer = mainTimer;                // сброс
      state = false;                      // флаг на выкл
      digitalWrite(MOS2, LOW);             // вырубить
      pinMode(MOS2, INPUT);                // пин как вход (экономия энергии)
    }
  }
C++:
/*
    Данный код превратит вашу Digispark в спящий таймер. Через каждые PERIOD
    секунд система подаёт 5 вольт на протяжении WORK секунд. Всё время,
    кроме переключения пина, система спит и потребляет 28 микроампер
    на плате Digispark с отрезанным светодиодом, стабилизатором
    и двумя диодами на шину USB. На голом камне будет работать ещё лучше!
*/

#define PERIOD 43200   // период работы в секундах (пример: 60*60*24*3 = 259200 - три дня!)
#define WORK 43200         // время работы в секундах
#define MOS 1           // пин мосфета

uint32_t mainTimer, myTimer;
boolean state = false;

#include <avr/wdt.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off)
#define adc_enable()  (ADCSRA |=  (1<<ADEN)) // re-enable ADC
// http://alexgyver.ru/arduino/DigiDrivers.rar

void setup() {
  // все пины как входы, экономия энергии
  for (byte i = 0; i < 6; i++) {
    pinMode(i, INPUT);
  }
  adc_disable();          // отключить АЦП (экономия энергии)

  wdt_reset();            // инициализация ватчдога
  wdt_enable(WDTO_1S);    // разрешаем ватчдог
  // 15MS, 30MS, 60MS, 120MS, 250MS, 500MS, 1S, 2S, 4S, 8S

  WDTCR |= _BV(WDIE);     // разрешаем прерывания по ватчдогу. Иначе будет резет.
  sei();                  // разрешаем прерывания
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // максимальный сон
}

void loop() {
  mainTimer++;

  if (!state) {                           // если помпа не включена
    if ((long)mainTimer - myTimer > PERIOD) {   // таймер периода
      myTimer = mainTimer;                // сброс таймера
      state = true;                       // флаг на запуск
      pinMode(MOS, OUTPUT);               // пин как выход
      digitalWrite(MOS, HIGH);            // врубить
    }
  } else {                                // если помпа включена
    if ((long)mainTimer - myTimer > WORK) {     // таймер времени работы
      myTimer = mainTimer;                // сброс
      state = false;                      // флаг на выкл
      digitalWrite(MOS, LOW);             // вырубить
      pinMode(MOS, INPUT);                // пин как вход (экономия энергии)
    }
  }

if (!state) {                           // если помпа не включена
    if ((long)mainTimer - myTimer > PERIOD2) {   // таймер периода
      myTimer = mainTimer;                // сброс таймера
      state = true;                       // флаг на запуск
      pinMode(MOS2, OUTPUT);               // пин как выход
      digitalWrite(MOS2, HIGH);            // врубить
    }
  } else {                                // если помпа включена
    if ((long)mainTimer - myTimer > WORK2) {     // таймер времени работы
      myTimer = mainTimer;                // сброс
      state = false;                      // флаг на выкл
      digitalWrite(MOS2, LOW);             // вырубить
      pinMode(MOS2, INPUT);                // пин как вход (экономия энергии)
    }
  }

 

  sleep_enable();   // разрешаем сон
  sleep_cpu();      // спать!
}

ISR (WDT_vect) {
  WDTCR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет реcет.
}

Или такой подход в "лоб" не заработает ?
 

EandV

★★★✩✩✩✩
4 Авг 2018
288
167
@amdgod, Так похоже на правду, только наверно переменная для второго таймера нужна тоже отдельная. А вообще есть только 1 способ узнать наверняка заработает или нет: перепрошить и попробовать.
 
Изменено:

EandV

★★★✩✩✩✩
4 Авг 2018
288
167
А вообще, если нужно что-то посложнее, делай лучше на Ардуино Нано и DS3231. Намучался я с этими Дигиспарками и кривым таймером.

Вот мой проект по последней системе автополива. В описании есть скетч, схема, паяй - нехочу. Есть даже плата для изготовления методом ЛУТ. Не хочешь плату делать, можно и навесным монтажом
 
Изменено:
  • Лойс +1
Реакции: Alexeyp и Dmitry__

Dmitry__

✩✩✩✩✩✩✩
14 Ноя 2019
12
1
Здравствуйте, такой вопрос, я ничего не откусывал как автор показывал в видео, питание происходит через зарядку от телефона.Собственно такой вопрос, если я не подключаю нагрузку (помпу) то все хорошо работает, но стоит только подключить нагрузку и сразу при включении помпы она отключается (помпа), может ли это быть из-за того что я не откусил те элементы которые указал автор в ролике?
 

EandV

★★★✩✩✩✩
4 Авг 2018
288
167
Здравствуйте, такой вопрос, я ничего не откусывал как автор показывал в видео, питание происходит через зарядку от телефона.Собственно такой вопрос, если я не подключаю нагрузку (помпу) то все хорошо работает, но стоит только подключить нагрузку и сразу при включении помпы она отключается (помпа), может ли это быть из-за того что я не откусил те элементы которые указал автор в ролике?
Нет. Это никак не связано. Элементы он откусывает для экономии электроэнергии в режиме сна. Если ничего не откусывать, все равно всё должно работать, только энергии кушать больше будет.
 

Dmitry__

✩✩✩✩✩✩✩
14 Ноя 2019
12
1
Всем снова ку, такой вопрос, почему при нагрузке все перезагружается, питаю все от телефонной зарядки 5v 2A, мосфет уже менял, при этом если помпу достать с воды (чтобы на нее не было нагрузки) то все ок.
 

Dmitry__

✩✩✩✩✩✩✩
14 Ноя 2019
12
1
Я бы помпу поменял, похоже коза
С помпой все хорошо, у меня их две (в наличии). Проблема в том что когда включается помпа она вызывает проседание напряжения тех самых 5v и в один момент ну или же сразу она перегружается (плата), проблема решилась благодаря HellRaider и его схеме с кондерами на питания платы и помпы.
Вот и она
 

Вложения

  • Лойс +1
Реакции: EandV

Dmitry__

✩✩✩✩✩✩✩
14 Ноя 2019
12
1
В очередной раз всех приветствую, такой вопросик у меня вся эта система питается от зарядки от телефона, возможно ли сделать так чтоб когда выключали свет система переходила на питание от батареек?