Помогите выбрать сенсор воды.

Dima85
Offline
Зарегистрирован: 07.01.2013

Необходимо в цифрах выводить информацию влажности почвы.

Нашел на Ebay такой сенсор: http://www.ebay.com/itm/Soil-Hygrometer-Humidity-Detection-Module-Soil-M...

Но меня смущает тот квадратный голубой регулятор. Насколько я понимаю его настраиваешь до какой-то нужной влажности, достигнув которую он посылает сигнал на включение. Тоесть он способен вывести только 1 или 0.

Мне же необходимо выводить влажность в %. Способен ли это сделать этот сенсор?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Dual output mode,analog output more accurate.

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Там стоит сдвоенный компаратор на lm339, "синий кубик" - это переменный резистор для его подстройки и его сигнал выходит на "цифровой" вывод. На фото у этого модуля, судя по четырем ножкам, кроме питания и земли - два вывода: аналоговый и цифровой (есть очень похожие комплекты, но с тремя ножками!)...

Не хотите пользоваться пороговым срабатыванием компаратора - берите сигнал с аналогового вывода.

 

Dima85
Offline
Зарегистрирован: 07.01.2013

Ясно. Спасибо.

Dima85
Offline
Зарегистрирован: 07.01.2013

В ожидание когда придет модуль появилось еще несколько вопросов. В комплекте идет что-то наподобие вилки, которую необходимо поместить в почку. К сожалению она короткая. Насколько мне кажется эту вилку можно заменить простыми гвоздями. Но мне интересно на каком расстояние их стоит размещать друг от друга и будут ли различия в данных от расстояния гвоздей друг от друга?

Клапауций
Offline
Зарегистрирован: 10.02.2013

Dima85 пишет:

В ожидание когда придет модуль появилось еще несколько вопросов. В комплекте идет что-то наподобие вилки, которую необходимо поместить в почку. К сожалению она короткая. Насколько мне кажется эту вилку можно заменить простыми гвоздями. Но мне интересно на каком расстояние их стоит размещать друг от друга и будут ли различия в данных от расстояния гвоздей друг от друга?

Берёте два отрезка нержавеющей проволоки, вставляете в отрезанные 2 пина клеммной колодки, закручиваете, одеваете ещё два пина колодки на получившуюся вилку, прикручиваете двужильный провод, подключаете к аналоговому пину дуины, заказ отменяете.

*расстояние между отрезками провода любое, длина отрезков любая.

**смысл покупать халабуду, если не будет она у вас влажность в процентах показывать?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Dima85 пишет:

В комплекте идет что-то наподобие вилки, которую необходимо поместить в почку. 

ну да, эт прям какакой то учебник гопника, вилку в почку... О.о и сразу 4 дырки..

Dima85
Offline
Зарегистрирован: 07.01.2013

Клапауций, какие-то резисторы нужны? Я в интернете находил модули, но все они с резисторами, для чего тогда они в них?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Dima85 пишет:

Клапауций, какие-то резисторы нужны? Я в интернете находил модули, но все они с резисторами, для чего тогда они в них?

Вы еще пошарьте "в интернете" - найдете ссылки на то, что если давать большой постоянный ток на электроды, то начинается электролиз. Обойти это можно либо переходом на переменку, либо уменьшением тока... Найти схему этой "вилки" - достаточно просто. :)

Dima85
Offline
Зарегистрирован: 07.01.2013

Уже нашел. 1-ая схема. 1-ый гвоздь подключаем к 5v другой к Analog выходу Arduino и далее его к 10кО и на GND. Поправьте меня пожалуйста если я не прав. Завтра буду пробовать.

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Dima85 пишет:

Уже нашел. 1-ая схема. 1-ый гвоздь подключаем к 5v другой к Analog выходу Arduino и далее его к 10кО и на GND. Поправьте меня пожалуйста если я не прав. Завтра буду пробовать.

 

Схема отличная, так же попробую. Но возник вопрос как отколибровать сигнал по реалии влажности.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

ну вообще народ меряет на воздухе и в воде. это две крайности.. и на точность аналогового пина 1024

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

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Puhlyaviy пишет:

ну вообще народ меряет на воздухе и в воде. это две крайности.. и на точность аналогового пина 1024

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

 

т.е. Вы считаете, что зависимость будет линейна, а скажем не гипербола?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

я не считаю :)
я просто подсмотрел в буржуйском форуме и отжал вам всю суть их 2 страничной дискусии на английком :)

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Puhlyaviy пишет:

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

хм. интересно. собрать надо. Гвозди то стальные? Или все же нерду лучше искать или никель/латунь/медь/алюминий?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

Dima85
Offline
Зарегистрирован: 07.01.2013

Puhlyaviy пишет:

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

 

Не смог найти такую схему, покажите пожалуйста ее. Так же хочется спросить как растения реагируют на то что постоянно через почву им подают напряжение? Могут ли они от этого погинбуть, или им это безразлично?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

растениям безралично, вы же не через растение подаете ток, а с краю.. и напряжение атм не постоянно а только в момент теста..

нате вам даже код, схема в коде нарисована :)

/*  Soil Moisture measurement v0.1 20091017
 Simple circuit
 Not calibrated at this moment
 
 Started by Mike Rice, October 14, 2009
 Modified by M.A. de Pablo, October 17, 2009
 
 Circuit:
 To connect two nails and a 10 KOhms resistor as shown:
 
        digital 2---*
                  |
                  \
                  /
                  \ R1
                  /
                  |
                  |
        analog 0----*
                  |
                  |
                  *----> nail 1
                 
                  *----> nail 2
                  |
                  |
                  |
        digital 3---*
 */


#define moisture_input 0
#define divider_top 2
#define divider_bottom 3

int moisture; // analogical value obtained from the experiment

int SoilMoisture(){
  int reading;
  // set driver pins to outputs
  pinMode(divider_top,OUTPUT);
  pinMode(divider_bottom,OUTPUT);

  // drive a current through the divider in one direction
  digitalWrite(divider_top,LOW);
  digitalWrite(divider_bottom,HIGH);

  // wait a moment for capacitance effects to settle
  delay(1000);

  // take a reading
  reading=analogRead(moisture_input);

  // reverse the current
  digitalWrite(divider_top,HIGH);
  digitalWrite(divider_bottom,LOW);

  // give as much time in 'reverse' as in 'forward'
  delay(1000);

  // stop the current
  digitalWrite(divider_bottom,LOW);

  return reading;
}


void setup () {
  Serial.begin(9600);

}

void loop (void) {
  moisture=SoilMoisture(); // assign the result of SoilMoisture() to the global variable 'moisture'
  Serial.print("Soil moisture: ");
  Serial.print(moisture); // print the analogical measurement of the experiment
  // later i will improve here a calculation for derive Soil Moisture in %
  Serial.println();
  delay(1000);
}


 

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

del...

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Dima85 пишет:
что-то наподобие вилки, которую необходимо поместить в почку.

Очепятка, но веселенькая )

ingener.solovyev пишет:
Гвозди то стальные? Или все же нерду лучше искать или никель/латунь/медь/алюминий?

Гвозди должны быть одинаковые! иначе получится гальваническая пара, и будем мерять не влажность а скорее pH почвы - или  "кислотность" ...

самые идеальные "гвозди" для втыкивания в почву медно-графитовые можно даже грифели от карандаша или щелочных батареек(не знаю есть ли они в современных конструкциях) графит не диссоциирует и не разлагается как металлы.

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

ingener.solovyev пишет:

Схема отличная, так же попробую. Но возник вопрос как отколибровать сигнал по реалии влажности.

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

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

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

Вот, кстати, вариации на тему: http://gardenbot.org/howTo/soilMoisture/ - там и скетчи есть...

http://gardenbot.org/howTo/soilMoisture

chk
Offline
Зарегистрирован: 14.04.2013

Тоже делаю поливалку. если заказывать будете все же эти модули - берите без вилок, так дешевле немного, и они все равно оч быстро окисляются. В качестве электродов использую графитовые стержни. Если выведите показания датчика влажности на дисплей в реальном времени, увидите, что показания быстро меняются с течением времени. Но через несколько минут выходят на условное плато. То чуть выше, то чуть ниже показывает. Для измерения относительно достоверного необходимо дождаться прихода системы почва+датчик к выдаче нормальных данных. Также повторное измерение можно делать лишь спустя не менее часа, судя по моим наблюдениям, когда почва успокоится. Если мерять без модуля а напрямую через пины - может все сразу норм будет, не проверял пока что. Но через контакты модуля ток идет немалый - за 2 недели в оч влажной земле, накрытой пакетом, были мои стержни. Тонкая многожилка медная за это время вся посинела и оборвалась. Но если влажность воздуха в норме, такого не должно произойти. Хотя может воздух влажный тут и ни при чем. Надо и это проверить.

Клапауций
Offline
Зарегистрирован: 10.02.2013

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

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

Dima85
Offline
Зарегистрирован: 07.01.2013

Клапауций, поделитесь ссылочкой на жемчужину.

--

А вот интересно, в самом начале темы, я хотел на eBay преобрести модуль влажности почвы, какая там используется схема, эти 2 щупа постоянно под напряжением или нет, так же какие там транзисторы использованы, может кто-то знает?

chk
Offline
Зарегистрирован: 14.04.2013

Насколько я понял, напряжение постоянное там, ток идет все время через землю. Так что надо через транзистор или реле (щелкает, шумно!) включать. Кроме компаратора lm393, резисторов, и возможно конденсаторов +светодиодов - там ничего нет. Скорее всего, можно обойтись и без этой платы, если мерять через аналоговый все.

Клапауций
Offline
Зарегистрирован: 10.02.2013

Dima85 пишет:
Клапауций, поделитесь ссылочкой на жемчужину.

Какую ссылочку?

Идёте в магазин, покупаете: карандаш столярный(2шт.), гипс(0,5кг), герметик силиконовый, провод двужильный в изоляции(5м), стаканчик пластиковый(1шт.).

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

*убил рынок датчиков для идиотов.

leshak
Offline
Зарегистрирован: 29.09.2011

Какое постоянное? Если дать постоянное, конечно будет все быстро окислятся. И зависит это не от щупа, а от вас. Что вы туда подаете. Электролиз еще никто не отменял.

Puhlyaviy в кои веки изменил себе и выдал что-то кроме сарказма. Кто-нибудь его код смотрел? Там же все есть. И как подключать, и ток гоняем туда/сюда. Меняем электроды ролями анод/катод. (разве что импульсы в целую секунду IMHO перебор, можно поменьше). Неужели никому не любопытно было зачем там используются два цифровых пина, а не один и земля?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

leshak пишет:

Puhlyaviy в кои веки изменил себе и выдал что-то кроме сарказма. Кто-нибудь его код смотрел? Там же все есть. И как подключать, и ток гоняем туда/сюда. Меняем электроды ролями анод/катод. (разве что импульсы в целую секунду IMHO перебор, можно поменьше). Неужели никому не любопытно было зачем там используются два цифровых пина, а не один и земля?

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

leshak
Offline
Зарегистрирован: 29.09.2011

Puhlyaviy пишет:

leshak пишет:

Puhlyaviy в кои веки изменил себе и выдал что-то кроме сарказма. Кто-нибудь его код смотрел? Там же все есть. И как подключать, и ток гоняем туда/сюда. Меняем электроды ролями анод/катод. (разве что импульсы в целую секунду IMHO перебор, можно поменьше). Неужели никому не любопытно было зачем там используются два цифровых пина, а не один и земля?

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

Просите :) Но я в самом деле последнее время от вас  (и еще одного ника) вижу много сарказма так где действительно можно было-бы и помочь человеку (или промолчать, может кто другой поможет). Даже там где вроде нормально спросили (без ожидания телепатов, без 10-того раза за неделю и т.п.).

Конечно, это сугубо мое видиние. Можете воспринимать это как "взгляд со стороны". Можете слушать меня, а можете и нет :)  Просто вот высказался "как это выглядит с моей колокольни". Вполне возможно, что с вашей - мое поведение выглядит не лучше.

Вообщем не берите к сердцу. Это "просто комментарий" и не более. Тем более что в данном случае, вы оказали помощь "в самом полном виде". И мне показалось, что остальные невнимательно отнестись к тому что вы дали. Так что, в данном случае, это был скорее комплимент в ваш адрес. Просто свой характер - подвел. Тоже к сарказму склонный :)

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

leshak пишет:

Кто-нибудь его код смотрел?

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

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

leshak пишет:

Просите :) Но я в самом деле последнее время от вас  (и еще одного ника) вижу много сарказма так где действительно можно было-бы и помочь человеку (или промолчать, может кто другой поможет). Даже там где вроде нормально спросили (без ожидания телепатов, без 10-того раза за неделю и т.п.).

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

Dima85
Offline
Зарегистрирован: 07.01.2013

Не хотелось создавать новую тему, пускай уже будит все в одном.

Помогите разобраться в коде, комментарии в самом коде:

#define voltageFlipPin1 6
#define voltageFlipPin2 7
#define sensorPin 0

void setup(){
  Serial.begin(9600);
  pinMode(voltageFlipPin1, OUTPUT);
  pinMode(voltageFlipPin2, OUTPUT);
  pinMode(sensorPin, INPUT);
}

void setSensorPolarity(boolean flip){ // Здесь мы чередуем: 6 включаем 7 выключаем, 7 включаем 6 выключаем. Зачем? Почему не подходит просто допустим 6 включать выключать, зачем их два?
  if(flip){
    digitalWrite(voltageFlipPin1, HIGH);
    digitalWrite(voltageFlipPin2, LOW);
  }else{
    digitalWrite(voltageFlipPin1, LOW);
    digitalWrite(voltageFlipPin2, HIGH);
  }
}

void loop(){
  setSensorPolarity(true);
  delay(1000);
  int val1 = analogRead(sensorPin);
  delay(1000);  
  setSensorPolarity(false);
  delay(1000);
  // invert the reading
  int val2 = 1023 - analogRead(sensorPin); // Что это делает и зачем?
  reportLevels(val1,val2);  // Что это делает и зачем?
}

void reportLevels(int val1,int val2){
  int avg = (val1 + val2) / 2;
  String msg = "avg: ";
  msg += avg;
  Serial.println(msg);
}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Dima85 пишет:

 

Помогите разобраться в коде, комментарии в самом коде:

могу только порекомендовать читать букварь с азами програмирования...

ибо в коде нет ничего сложно... вы спрашиваете, то что по идее любой школьник знает

leshak
Offline
Зарегистрирован: 29.09.2011

>Зачем? Почему не подходит просто допустим 6 включать выключать, зачем их два?

Причины две - первая описана в комментариях в скетче из сообщения #18 (нужно только их перевести), вторая - в сообщении #27

>1023 - analogRead(sensorPin); // Что это делает и зачем?

Если мы знаем что у на все питается от батарейки 5-ть вольт, мы тыкнули тестером в какое-то место схемы и намеряли, скажем 4.3 вольта. Вопрос: на сколько упало напряжение пока дошло от батарейки до того места куда мы тыкнули тестером?

> reportLevels(val1,val2);  // Что это делает и зачем?

Тут есть два способа. Взять словарь и перевести значение слов report и Levels. Или опустить глаза на четыре строчки ниже и посмотреть как реализована функция reportLevels(), посмотртеть что в ней "происходит".

Что делает строка 35?
Что делает строка 36?
Что делает строка 37?
Что делает строка 38?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Dima85 пишет:

// invert the reading

int val2 = 1023 - analogRead(sensorPin); // Что это делает и зачем?

Из-за леса - деревьев не видно? :)

Мы же "сменили" полярность... Для того, чтобы усреднять значения - видимо надо перевернуть результат...

ourlive
Offline
Зарегистрирован: 26.05.2012

хм, смена полярности при измерении, а оно действительно что то даёт, или оно игра интеллекта? Мерить врятли нужно чаще чем раз в 5 минут и не дольше чем пол секунды, какой уж там электролиз. Я б зажидил лишний пин на это, куда важнее перекалибровка оперативная, когда полили не просто водой, а какой нибудь подкормкой. А поливалку надо бы собрать, а то оставили на меня помидорку в кадке на окне, вечно то недополито, то перелито..

Dima85
Offline
Зарегистрирован: 07.01.2013

А может кто-то сталкивался с такими сенсорами: http://www.ebay.com/itm/LUSTER-LEAF-1820-RAPIDTEST-Soil-Plant-Garden-Moisture-Sensor-Meter-Tester-TESTER-/161091055622?pt=LH_DefaultDomain_0&hash=item2581c67006

Интересно там только 1 щюп. Какой у него принцип работы?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Dima85 пишет:

Интересно там только 1 щуп. Какой у него принцип работы?

Емкостной, скорее всего.

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Andrey_Y_Ostanovsky пишет:

Dima85 пишет:
Интересно там только 1 щуп. Какой у него принцип работы?

Емкостной, скорее всего.

Щуп один, а электродов то в нем два! Неужто не видно белый пластиковый изолятор между двумя частями щупа?

Клапауций
Offline
Зарегистрирован: 10.02.2013

Probelzaelo пишет:

Щуп один, а электродов то в нем два! Неужто не видно белый пластиковый изолятор между двумя частями щупа?

Ничего ты не понимаешь в ёмкостных датчиках... "ёмкостной" значит "телепатический" - меряем параметры среды на растоянии или одним электродом.

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Клапауций пишет:

Probelzaelo пишет:

Щуп один, а электродов то в нем два! Неужто не видно белый пластиковый изолятор между двумя частями щупа?

Ничего ты не понимаешь в ёмкостных датчиках... "ёмкостной" значит "телепатический" - меряем параметры среды на растоянии или одним электродом.

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

Клапауций
Offline
Зарегистрирован: 10.02.2013

Probelzaelo пишет:

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

и между чем и чем измеряемая среда находится? - по любому получается "два", а не "один".

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Клапауций пишет:

и между чем и чем измеряемая среда находится? - по любому получается "два", а не "один".

Сникерсни. ;) я вообще то не про электрическую емкость вел шутки, а про посуду ))

Клапауций пишет:

Probelzaelo пишет:

Щуп один, а электродов то в нем два! Неужто не видно белый пластиковый изолятор между двумя частями щупа?

Ничего ты не понимаешь в ёмкостных датчиках... "ёмкостной" значит "телепатический" - меряем параметры среды на растоянии или одним электродом.

таки электродом на расстоянии не меряют параметров, разве что оценить обьемы и/ли приближения )

chk
Offline
Зарегистрирован: 14.04.2013

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

Резисторы брал на 100кОм и 100 Ом, в довольно влажной почве начиналось где-то с 200, когда в воздухе 1023. Расстояние между центрами электродов 12мм, диаметр их 4мм. графит, урвать успел такой в приличном количестве оч вовремя, он точно не окислится)

Cyoko
Offline
Зарегистрирован: 22.08.2014

Возник вопрос по такому датчику . Нужен совет в програмировании.

Купил я такой датчик как в 1 посте. Подключил по схеме с зарубежного сайта. +,- подключил к цифровым пинам . Аналог выход к аналоговому пину на ардуине. Ну и взял за основу их скетч . В свой скетч добавил , в последовательный порт значение выводит. А вот чтоб выводить значение на экран не получилось . При компеляции выдает ошибки.

Знаний в програмировании мало , прошу подсказать :)

Мне надо чтоб при нажатии на BUTTON_DOWN на экран выводилось последнее значение с датчика влажности почтвы. Но если в loop прописываю вывод msg , то ошибка типа не знаю что за msg . А если выввожу в reportLevels то соответственно ошибка не знаю что за BUTTON_DOWN . 

Если вставлять в reportLevels полностью 

button = getPressedButton();
switch (button)
{
case BUTTON_DOWN: 
lcd.setCursor(0, 0); 
lcd.print(" "); 
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Humidity: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(h);
lcd.print(" %");
break;
}

то кнопки работают не стабильно , но скетч компилится и загружается и при многократном нажатии всетаки показывает информацию на экране.

Вообщем помогите плиз :)

вот рабочий скетч , который выводит на экран инфу о температуре и влажности и в порт выводит и влажность почвы.


/* Программа для вывода информации о влажности 
              и температуре на экран                           */

//Датчик DHT11-------------------------------------------------------------------------------------------
#include "DHT.h" //подключаем библиотеку для работы с датчиком DHT11
#define DHTPIN 52 // указываем № контакта к которому подключен датчик

// Выбираем модель датчика , в нашем примере DHT11
#define DHTTYPE DHT11 // DHT 11 
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
//----------------------------------------------------------------------------------------------------------------


//LCD экран----------------------------------------------------------------
#include <Wire.h> // добавляем две библиотеки
#include <LiquidCrystal.h> //для работы с экраном
LiquidCrystal lcd(8, 9, 4, 5, 6, 7 ); // подключаем экран
//-------------------------------------------------------------------------------


// Наши кнопки---------------------------------------------------------------------------------------------------
int button;
const int BUTTON_NONE = 0;
const int BUTTON_RIGHT = 1;
const int BUTTON_UP = 2;
const int BUTTON_DOWN = 3;
const int BUTTON_LEFT = 4;
const int BUTTON_SELECT = 5;

int getPressedButton()
{
int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0) 
if (buttonValue < 100) {
return BUTTON_RIGHT; 
}
else if (buttonValue < 200) {
return BUTTON_UP;
}
// для других кнопок на плате LCD 1602 Keypad Shield
else if (buttonValue < 400){
 return BUTTON_DOWN;
}
// else if (buttonValue < 600){
// return BUTTON_LEFT;
// }
// else if (buttonValue < 800){
// return BUTTON_SELECT;
// } 
return BUTTON_NONE;
}
//--------------------------------------------------------------------------------------------------------------------------



// датчик влажности почвы-------------------------------------------------------
#define voltageFlipPin1 50 //цифровые пины для питания датчика
#define voltageFlipPin2 51 //цифровые пины для питания датчика
#define sensorPin 7        // аналоговый пин для снятия показаний

int flipTimer = 1000;      //время опроса датчика

//------------------------------------------------------------------------------
void setup() {
lcd.begin(16, 2); //наш экран 
lcd.print("Meteo"); // начальная
lcd.setCursor(0, 1); //
lcd.print(" Station"); // заставка
Serial.begin(9600); // последовательнй порт
Serial.println("DHT11 test!"); // выводим сообщение в последовательный порт
dht.begin(); //запускаем датчик DHT11
//------------------датчик влажности почвы-----------------
  pinMode(voltageFlipPin1, OUTPUT); //два цифровых пина
  pinMode(voltageFlipPin2, OUTPUT); //это питание , тоесть out
  pinMode(sensorPin, INPUT); //аналоговый пин считывает данные , то есть in
//---------------------------------------------------------  
}

//------------------------------------устанавливаем где + а где -  ------------------------------
void setSensorPolarity(boolean flip){
  if(flip){
    digitalWrite(voltageFlipPin1, HIGH);
    digitalWrite(voltageFlipPin2, LOW);
  }else{
    digitalWrite(voltageFlipPin1, LOW);
    digitalWrite(voltageFlipPin2, HIGH);
  }
}
//-----------------------------------------------------------------------


void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();

// Если значения получены , то выводим их в последовательный порт--------------------------
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
delay(2000);
} else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
//--------------------------------------------------- ---------------------------------------------------------------------------

//-----------------------датчик влажности почвы-----------------------------------------------
  setSensorPolarity(true);
  delay(flipTimer);
  int val1 = analogRead(sensorPin);
  delay(flipTimer);  
  setSensorPolarity(false);
  delay(flipTimer);
  // invert the reading
  int val2 = 1023 - analogRead(sensorPin);
  //
  reportLevels(val1,val2);
  
//---------------------------------------------------------------------------------------


// при нажатии кнопки выводим нужную информацию на экран-----------------
button = getPressedButton();
switch (button)
{
case BUTTON_RIGHT: 
lcd.setCursor(0, 0); 
lcd.print(" "); 
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Humidity: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(h);
lcd.print(" %");
break;
case BUTTON_UP:
lcd.setCursor(0, 0); 
lcd.print(" "); 
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Temperature: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(t);
lcd.print(" *C");
break;
}
//--------------------------------------------------------------------------------- --------------------------

}
void reportLevels(int val1,int val2){
  
  int avg = (val1 + val2) / 2;
  
  String msg = "avg: ";
  msg += avg;
  Serial.println(msg);

}

пишу програму первый раз , так что вроде все комментирую подробно.

И еще int flipTimer = 1000 это время подачи питания или интервал опроса дачтика ? Прочитал про всякие гидролизы :) думаю что необязательно считывать значение с датчика так часто , раз в час например нормально имхо. Это можно настроить ?

Cyoko
Offline
Зарегистрирован: 22.08.2014

update 

при приведенном мной выше скетче , кнопки плохо работают . Без кода для датчика влажности почвы - хорошо.

 

Может быть дело все в том что есть задержки(delay) и поэтому ардуино не может засечь когда я нажимаю кнопку ?

Можно реализовать так ? в одном цикле без задержки кнопки контролятся . в другом датчик температуры со своей задержкой . в третьем датчик влажности почвы со своей задержкой . а при нажатии на кнопку берутся последние значения . Правда тогда возникает вопрос как будет обновлятся информация выводимая на экран .

Cyoko
Offline
Зарегистрирован: 22.08.2014

юморно отвечаете :) повеселили .

В вузе учился давно.

взял 3 кода : подключение датчика DHT11 , при нажатии кнопки вывод на экран символов , подключение датчика влажности почвы.

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

вы почти все правильно поняли , только у меня шилд экрана с 6-тью кнопками.

Что хотел реализовать : 2 датчика следять за показаниями . на экране горит приветствие . нажал на кнопку1 - получил на экране значение температуры. нажал на кнопку2 - влажность . кнопка3 - влажность почвы.

На данном примере как раз надеялся понять как програмировать :)

Ах да , в последовательный порт тоже данные надо отправлять , так как думаю потом их передавать на сервер по wifi .

Cyoko
Offline
Зарегистрирован: 22.08.2014

art100 пишет:

//art100 to write 201408222 173000 кнопарик фонарик стилистически разумно с ифами потому как логика просматривается LOW в землицу и все тут
#define LED13 13 // фонарик уже распаян на платках
#define BUT1   2 // кнопарик коротим на землицу простым проводочком
void setup(){
 pinMode(BUT1,INPUT_PULLUP);//кнопарик
 pinMode(LED13,OUTPUT);
 digitalWrite(LED13,LOW);//фонарик
}
void(){
 if(digitalRead(BUT1)==LOW){ digitalWrite(LED13,HIGH);delay(100);digitalWrite(LED13,LOW); }//lдержим кнопарик горит фонарик и гавнецо за собой не оставляем в коде
}

 

int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0)

я бы расписал
#define POT1 A0// некий аналогвоый входец
...соответсвенно  разок инициализируем ножку
pinMode(POT1,INPUT);
...ну и пошел опрос
var1=analogRead(POT1);
...
когда хамес логики пошел пишем как я выше писал
if(var1<=200){ пошла рубка топорами }

я бы от такого ассемблерного стиля в микропроцессорах не отходил

 

то есть вот эту часть надо в loop положить ? 

if (buttonValue < 100) {
return BUTTON_RIGHT; 
}
else if (buttonValue < 200) {
return BUTTON_UP;
}
// для других кнопок на плате LCD 1602 Keypad Shield
else if (buttonValue < 400){
return BUTTON_DOWN;
}
// else if (buttonValue < 600){
// return BUTTON_LEFT;
// }
// else if (buttonValue < 800){
// return BUTTON_SELECT;
// } 
return BUTTON_NONE;
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

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

а что бы загадочней было :)