ARDUINO Контроллер теплицы. Обсуждение проекта

Владимир Сан

✩✩✩✩✩✩✩
20 Ноя 2020
2
0
Добрый день, подскажите пожалуйста, как подключить два датчика влажности, что бы они работали одновременно, а не один вместо другого и выводили данные отдельно например датчик поключённый к SENS2 показывал данные(влажность) в ячейке sens2 на экране? В этой ветке не нашёл такого вопроса, может кто-то себе такое делал, в документации такого тоже не нашёл, пробовал менять код - безрезультатно, так как я не очень в этом разбираюсь((
Буду признателен за любую информацию!
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
Если датчики подключены по i2c, а так оно обычно и бывает, то без шаманства с бубнами их не подключить - они имеют один и тот же адрес на шине, будут коллизии. Можно порыть инет и найти как поменять адрес на одном из датчиков, это возможно, требует твердой руки и крепкой памяти. И еще зоркого глаза
 

Владимир Сан

✩✩✩✩✩✩✩
20 Ноя 2020
2
0
Ещё заметил, что канал в режиме PID продолжает работать, даже если переключить его значение на Off, при это на экране DEBAG показано что он отключен, то есть показывается "--"
Это у всех так или только у меня, так должно быть или это баг?
 

4yk

✩✩✩✩✩✩✩
23 Май 2020
1
0
Оформи код соответствующим тэгом
Здравствуйте.
Друзья, помогите новичку. Какой-то глюк. Не работает привод. на контакты 10 и 12 должны, как я понимаю, подаваться + и - при нажатии кнопки. Кнопка нажимается, на RX0 идёт 0, но на 10/12 ничего. Не понял до конца код. Можете вкратце пояснить первую половину?

#if (USE_DRIVE == 1)
void driveTick() {
channelsStruct temp = loadChannel(9);
if (temp.state || serviceFlag || manualControl) {
if (driveState == 1) {
driveState = 2;
driveTimer = millis();
boolean thisDirection;
if (temp.mode != 4) {
thisDirection = channelStates[9];
} else {
if (pwmVal[6] > 0) {
thisDirection = temp.direction;
} else {
thisDirection = !temp.direction;
}
}
if (serviceFlag) thisDirection = channelStatesServ[9];
if (manualControl) thisDirection = manualPos;
else manualPos = thisDirection;

lastDriveState = thisDirection;
manualControl = false;

if (thisDirection) {
digitalWrite(DRV_SIGNAL1, !DRIVER_LEVEL);
digitalWrite(DRV_SIGNAL2, DRIVER_LEVEL);
} else {
digitalWrite(DRV_SIGNAL1, DRIVER_LEVEL);
digitalWrite(DRV_SIGNAL2, !DRIVER_LEVEL);
}
}

long thisTimeout;
if (temp.mode == 4) thisTimeout = abs(pwmVal[6]);
else thisTimeout = settings.driveTimeout * 100L;
if (driveState == 2 && millis() - driveTimer >= thisTimeout) {
driveState = 0;
digitalWrite(DRV_SIGNAL1, DRIVER_LEVEL);
digitalWrite(DRV_SIGNAL2, DRIVER_LEVEL);
}
}
}
#endif
 

y4ycb

✩✩✩✩✩✩✩
7 Дек 2020
4
1
Всем добра ! ! !
у меня проблема с датчиком СО2
он с различной периодичностью выдаёт ложные значения
(среднее значение колеблется в районе 1000 ppm, ложные показания могут быть 40-60 ppm или 2000-2500 ppm = рандом полнейший)
что-то в коде его вынуждает так себя вести...
само по себе измерение работает без этих глюков (брал кусок кода из версии 1.6.2 и заливал отдельно с выводом значения на дисплей)
подумал,что это конфликт с DHT21 (прикрутил его к этому кусочку = работают оба без глюков)
датчик питаю от ЛБП, землю соединил, автокалибровка отключена (пробовал и с ней = результат такой же)

вот этот скетч вырезан из прошивки 1.6.2 и с ним всё работает... могу видосик записать или как ещё показать те глюки???

C++:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);

#include <DHT.h>
DHT dht(A3, DHT21);
float sensorVals[2];

#define CO2_PIN_NAME A2
#define CO2_MAX 5000
uint32_t settingsTimer;
int CO2ppm = 0;
bool CO2_flag = false;
bool CO2_rst = false;

void setup(){
    lcd.init();
    lcd.backlight();

    dht.begin();
}

void loop(){
  static uint32_t tmr;
  if (millis() - settingsTimer > 1000) {
    if (digitalRead(CO2_PIN_NAME)) {
      if (!CO2_flag) {
        tmr = millis();
        CO2_flag = true;
      }
    } else {
      if (CO2_flag) {
        // защита от измерения после вывода на дисплей
        if (!CO2_rst) {
          tmr = millis() - tmr;
          CO2ppm = (CO2_MAX / 1000) * (tmr - 2);
        }
        CO2_flag = false;
        CO2_rst = false;
       
        sensorVals[0] = dht.readTemperature();
        sensorVals[1] = dht.readHumidity();
       
        lcd.setCursor(0, 0);
        lcd.print("Temperature = " + String(sensorVals[0]));
        lcd.setCursor(0, 1);
        lcd.print("Humidity = " + String(sensorVals[1]));
        lcd.setCursor(0, 3);
        lcd.print("CO2 ppm = " + String(CO2ppm));
      }
    }
  }
}
вся забава в том,что если отключить в оригинальной прошивке 1.6.2 поддержку DHT, тогда эти глюки практически не заметны...
бывают периодически резкие скачки или просадки показаний примерно в 200 ppm (готов списать это на погрешность измерений или на сквозняк который привносит такие изменения состава воздуха)
но как только включаю " #define DHT_SENS2 1 " (даже если физически датчик не подсоединяю) то отклонения проскакивают в 1000 ppm и более......
 
Изменено:
  • Лойс +1
Реакции: Gyro

-=Zordak_Raider=-

✩✩✩✩✩✩✩
17 Дек 2020
1
0
Добрый день! У кого есть опыт эксплуатации контроллера на удалении от теплицы. Другими словами: какой максимальной длины могут быть провода до датчиков? Т.е. хотелось бы контроллер установить в закрывающемся доме, а датчики и исполнительные механизмы соответственно - в уличной теплице. Каким проводом лучше соединять контроллер с датчиками?
Спасибо.
 

Bass

✩✩✩✩✩✩✩
29 Ноя 2020
6
0
подскажите пожалуйста, подключил датчик DTH 22 через кабель витая пара. Длинной порядка 25 метров. Ардуина его не видет :(
Когда датчик подключён короткими проводами, всё в порядке. Неужели эти 25 метров так влияют? Что можно сделать, чтобы что бы датчик заработал. Я думал для I2C это рабочее расстояние :(
 

y4ycb

✩✩✩✩✩✩✩
7 Дек 2020
4
1
подскажите пожалуйста, подключил датчик DTH 22 через кабель витая пара. Длинной порядка 25 метров. Ардуина его не видет :(
Когда датчик подключён короткими проводами, всё в порядке. Неужели эти 25 метров так влияют? Что можно сделать, чтобы что бы датчик заработал. Я думал для I2C это рабочее расстояние :(
попробуй увеличить сечение проводника... (витая пара = 4 канала по 2 провода в каждом)

а ты ни чего не перепутал??? то ты "BME" подключаешь,то "DHT"...
 

Bass

✩✩✩✩✩✩✩
29 Ноя 2020
6
0
Да нет не перепутал купил ещё DTH подключил ко 2 разъёму. Прописал в скече. над контролером заработало.
Думаю не в проводах дело, как пишут дело в ёмкости кабеля.
Скорее всего придётся мутить либо с вай фаем или изернетом. сейчас читаю как это всё "скрутить" в одну кучу. :(
 

Efisher

✩✩✩✩✩✩✩
20 Дек 2019
2
0
Может кто поможет с такой бедой. Надо на две платы контроллера поставить одни часы и один датчик BME 280 То есть соединить их по I2c.Говорят что может быть конфликт при одновременном обращении в часам или датчику.Для этого есть протокол.Вот его надо дописать.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
@Efisher,
Почему бред ? Платам надо тоже назначить адрес i2c . Например одна плата хочет прочитать что то из bme, она посылает второй плате команду на бронь, вторая ничего не может делать по i2c , пока стоит бронь.
Но это потребует конкретной переделки кода, учитывая наполненность проекта это сложно. а все что сложно, то либо дорого, либо очень долго, т.к. делать будет тот, кто лично в этом заинтересован. Ну еще можно проверять ошибки чтения i2c, и повторять операцию, пока не будет без ошибки. Не пробовал, это теория, направление в котором бы я сам двигался.
Может проще сделать 2 полностью независимых контроллера ?
 

Efisher

✩✩✩✩✩✩✩
20 Дек 2019
2
0
Я сейчас понимаю, что зря повелся на это контроллер. Сразу не разобрался и сделал платы, тем более будет вай-фай. Чуть начинаешь, загружать и нет памяти, пошли глюки. Вот для этого и хотел поставить второй Он у меня работает в ферментаторе. Поддерживает температуру, влажность и вентилятор с ШИМом. Вот это его потолок. протокол I2c с такой функцией есть, его надо интегрировать в прошивку
 

Arutyun

✩✩✩✩✩✩✩
14 Май 2020
6
0
Здраствуйте! Такая проблема, может кто сталкивался.
Суть проблемы в том что повороты энкодер передает, а нажатие (клик) нет. Два разных попробовал ноль эмоций, поворот есть, кнопки нажатия нет.
Не могу с загрузочного меню уйти дальше.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
Проверить кнопку любой другой прошивкой, хоть демкой кнопок гайвера. Проверить кнопку энкодера на другом пине
 

poty

★★★★★★✩
19 Фев 2020
2,988
895
А кнопка у энкодера есть? Она подключена хоть куда-то к Ардуино? В скетче правильно указан пин, куда подключена кнопка?
 

Arutyun

✩✩✩✩✩✩✩
14 Май 2020
6
0
Проверял другой программой от Алекса, показывает движения влево и вправо, "клика" нет
Проверить кнопку любой другой прошивкой, хоть демкой кнопок гайвера. Проверить кнопку энкодера на другом пине
Кнопка есть, все комплектующие заказывал в соответствии с комплектацией проекта, и все подключалось на готовой плате, промахнутся трудно). В скетче ничего не правил, только менял адрес монитора(т.к. не отображался)
А кнопка у энкодера есть? Она подключена хоть куда-то к Ардуино? В скетче правильно указан пин, куда подключена кнопка?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,281
Москва
Взять энкодер. мультиметр в режиме омметра. одну ногу мультиметра на кнопку, вторую на землю. посмотреть что показывает. нажать. что показывает. потом вторую на +5в. что показывает. нажать . что показывет.
 

S2000godd

✩✩✩✩✩✩✩
7 Янв 2021
1
1
Здравствуйте! Собрал контроллер на плате версии 1.1. Установил обновления 1.6. Все работает кроме линейного привода. Он пищит и никого движения. В чем может быть причина?
 
  • Лойс +1
Реакции: alxsad

Александр 1111

✩✩✩✩✩✩✩
9 Янв 2021
1
0
Добрый день. Собрал контроллер на макетной плате. Под руками был датчик температуры и влажности AM2320. Попытался наладить работу с этим датчиком. В программировании я не шибко силён, попробовал разные библиотеки под этот датчик в итоге нашёл подходящую. Файл прикладываю. Может пригодится кому-то.
 

Вложения

ua0coo

✩✩✩✩✩✩✩
30 Май 2020
12
8
1610272224923.png
1610272284491.png
1610272322646.png
1610272371206.png
1610272413216.png
1610272483557.png
1610272568584.png
1610272661943.png

вроде все пока работает... на улице до -28......редиска не хочет завязываться, идет вся дружно в стрелку...огурцы несутся уже месяц...
 

andrey_box

✩✩✩✩✩✩✩
15 Июл 2020
3
0
Добрый день.
Собрал схему. загрузил прошивку, отлично работает с большими белыми реле подключил 5 штук и нагрузку 220 вольт, через режим серво их тыкал 1 включено 0 выключено, настроил программы все отлично. Подключил релейный блок на 4 реле черный твердотелый и столкнулся с проблемой что теперь при загрузке контролера он сразу переходит весь в состояние включено, а в режиме сервера для него 0 это включено 1 выключено. Кто может подсказать в чем дело?
Спасибо.
 

andrey_box

✩✩✩✩✩✩✩
15 Июл 2020
3
0
Добрый день.
Собрал схему. загрузил прошивку, отлично работает с большими белыми реле подключил 5 штук и нагрузку 220 вольт, через режим серво их тыкал 1 включено 0 выключено, настроил программы все отлично. Подключил релейный блок на 4 реле черный твердотелый и столкнулся с проблемой что теперь при загрузке контролера он сразу переходит весь в состояние включено, а в режиме сервера для него 0 это включено 1 выключено. Кто может подсказать в чем дело?
Спасибо.
 

Bass

✩✩✩✩✩✩✩
29 Ноя 2020
6
0
Неужели эти 25 метров так влияют
Сегодня взял осциллограф, решил посмотреть напряжение на I2C. Подключил датчик, заработало!
Был плохой контакт на проводах в плате. пачки импульсов проходят примерно каждые 5 сек. уровень в районе 2 вольт.
 

Garik908

✩✩✩✩✩✩✩
19 Окт 2019
3
0
Всем поивет! перед тем как залить прошивку в контроллер есть выбор, выхода на сервопривод оставить как серво или включить как реле. Так вот. Если оставить как серво оба выхода всë компилируется. Если первый выход оставить как реле а второй на серво то выходит ошибка (на фото) Но ели первый выход серво сделать а второй реле то всë хорошо) . Сменил в коде servo1.write на servo2.write. Стал код загружаться при раздельной настройке сервовыходов.IMG_20210115_102054.jpg
Я в код теплицы добавил отправку данных по проводу с пина 9 на другую ардуино используя GBUSmini. h Всë работает хорошо, данные уходят, но если только второй выход серво включëн как реле, первый как серво или все выхода как реле. Вообщем если серво2 не включать на серво а оставить как реле данные уходят. Если только второй выход выставить в коде как сервопривод то данные не приходят. Что может мешать? Может где каналы пересекаются ошибочно с рле 7 (пин9)? Ну как то так

Пробовал с 8 пина отправлять, одно.... Т. е. если серво 2 включить механизм перредачи данных ломается((
 
Изменено:

sonettta

✩✩✩✩✩✩✩
16 Дек 2020
10
2
Всем доброго времени суток. Прокурил весь форум не нашел ответ на вопрос. Не работает поворот энкодера. Проверял прошивки 1,4,2 1,6,1 1,6,2 1,6,3 при касании контактов энкодера пальцами или отверткой иногда может перескочить в другое меню, (как будто я повернул энкодер). Контроллер собран на плате JLC, все компоненты пропаяны. Заливал в Ардуино чисто одну библиотеку GyverEncoder и проверял через сом порт, всё работает, кнопка и повороты. Заливал в Ардуино чисто одну библиотеку encMinim и проверял через сом порт, работает только кнопка. Я не программист и в таком коде вообще ни чего не понял. Может знает кто-нибудь, нельзя ли подправить что-то в библиотеке encMinim что-бы заработало. Или я чо-то не так делаю, ПОМОГИТЕ ПОЖАЛУЙСТА.