Суббота, 23 Январь 2016 14:16

Ёмкостный датчик влажности почвы своими руками

Автор
Оцените материал
(4 голосов)

Есть у меня на даче самодельная система автоматического полива на базе Arduino Leonardo. Работает вполне прилично - но всегда ведь хочется что-то усовершенствовать. Вот я и подумал - а зачем она будет работать, если земля и так мокрая - после дождя, к примеру? И решил приделать к системе автополива ещё и датчик влажности почвы.

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

Резистивный датчик влажности почвы

 Я тоже купил один такой датчик , но у него есть несколько недостатков:

  •  Маленький размер. Для цветочного горшка, может, и подойдёт, но для измерения влажности в открытом грунте – вряд ли. Ведь он позволит оценить влажность только нескольких сантиметров грунта. Что, если после засухи прошёл кратковременный сильный дождь? Почва вверху (там, где датчик) будет влажная, а внизу – сухая.
  •  Электроды, помещённые в мокрый грунт, при постоянном напряжении на них, должны подвергаться коррозии. Это со временем приведёт к неисправности датчика.

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

Рабочий элемент ёмкостного датчика влажности почвы
Рабочий элемент ёмкостного датчика влажности почвы

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

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

Формула ёмкости плоского конденсатора
Формула ёмкости плоского конденсатора

 У всех веществ разная диэлектрическая проницаемость.  У воздуха она равна почти единице, а у воды – аж 81!  И ёмкость датчика, теоретически, может меняться в 80 раз при помещении его из воздуха в воду.

Но измерять ёмкость – задача неблагодарная. Для микроконтроллера (на базе которого я и сделал ранее свою систему автополива) проще измерить частоту. Поэтому была сварганена простейшая схема генератора частоты (осциллятора) на основе микросхемы SN74HC00. Это – 4 логических элемента «2И-НЕ», или NAND. Кроме микросхемы, для генератора частоты нужен только два резистора, и один конденсатор – в роли которого и выступает датчик влажности.

Осциллятор на SN74HC00

Я не был уверен в том, что эта схема будет работать идеально, поэтому сделал ещё один осциллятор - на базе стандартного таймера NE555. Он тоже не отличается особой сложностью.

Осциллятор на NE555

 Выход осциллятора (или одного, или другого) соединяется с 2-м пином Arduino (digital pin 2). Это, конечно, если для измерения частоты использовать ту программу, что я написал. Потому как там используется внешнее прерывание (interrupt 0), которое привязано именно к pin 2.

Чтобы как-то видеть полученные результаты, присоединил к Ардуино экранчик от Nokia 3110. В программе в комментариях написано, какие пины Ардуино соединять с какими портами LCD.

Вот, собственно, сама программа:

#include <Adafruit_GFX.h>

#include <Adafruit_PCD8544.h>

#define  buffer 20

// pin 7 - Serial clock out (SCLK)

// pin 6 - Serial data out (DIN)

// pin 5 - Data/Command select (D/C)

// pin 4 - LCD chip select (CS)

// pin 3 - LCD reset (RST)

//Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

Adafruit_PCD8544 display = Adafruit_PCD8544(12, 11, 10, 9, 8);

volatile float freq=0.0;

volatile float frqarr[buffer];

volatile uint8_t farrptr=0;

volatile float avgfreq;

volatile unsigned long pulseDuration;

volatile unsigned long lastpulse;

float tmp;

const int analogInPin = A0;

int  AnalogSensorValue = 0;

  

void setup()   {

  pinMode(2, INPUT);

  display.begin();

  display.setContrast(50);

  display.setTextSize(2);

  display.setTextColor(BLACK);

  attachInterrupt(0, _spdint, RISING);

  pulseDuration=0;

}

  

void loop() {

 tmp=0;

  for(uint16_t i=0; i<buffer-1; i++){

    tmp+=frqarr[i];

  }

  avgfreq=tmp/buffer;

  

  if((micros() - lastpulse)>1000000) pulseDuration=0;

freq =  1000000.0/pulseDuration;

AnalogSensorValue=analogRead(analogInPin);

display.clearDisplay();   

  display.setCursor(0,0);  

  display.setTextSize(2);

  if(pulseDuration>0){

  display.print((int)freq);

  display.print(" Hz");}

  else display.print("No signal");

  display.setCursor(0,20);

  display.print((int)avgfreq); //average frequency of last 20 cycles

  display.print(" Hz");

  display.setCursor(0,40);

  display.setTextSize(1);

  display.print("Analog: ");

  display.print(AnalogSensorValue);

  display.display();

  delay(200);

}

void _spdint()

{

  unsigned long time = micros();

  pulseDuration = time - lastpulse;

  lastpulse=time;

  frqarr[farrptr]=1000000.0/pulseDuration;

  farrptr++;

  if(farrptr>=buffer) farrptr=0;

}

Насыпал в горшок сухой земли, взвесил, закопал в неё датчик влажности и начал мелкими порциями (по 2% от веса земли) добавлять воду, после каждого раза замеряя частоту. То же проделал для купленного аналогового датчика (он был подключен к 0-му аналоговому входу Ардуино).

Процесс можно посмотреть на видео:

 

Результаты порадовали!

 Для более простого их восприятия - сделал в Экселе график:

Результаты испытаний емкостного датчика влажности почвы
Результаты испытаний емкостного датчика влажности почвы

 Хорошо видно, что после того, как в землю было влито 12% воды, показания резистивного датчика  уже не менялись. А вот ёмкостный датчик менял частоту генерации практически до конца!

Чтобы это получше разглядеть - вот график с 12% до полного насыщения почвы водой:

Да, не зря Эксель выбрал для резистивного датчика коричневый цвет, не зря...

Теперь осталось только развести плату осциллятора, впаять 3 детали, засунуть её в герметичную коробку - и можно подключать датчик к системе автополива. Но об этом - в другой раз!

Прочитано 7949 раз Последнее изменение Воскресенье, 24 Январь 2016 11:10
Авторизуйтесь, чтобы получить возможность оставлять комментарии