Давно хотел попробовать подобные сенсоры, но начитался, что они подвергаются коррозии и даже что данные у них чуть лучше, чем от фонаря. А потом попал на вот этот датчик — Gravity: Analog Capacitive Soil Moisture Sensor — Corrosion Resistant.
Если быть точным, то я попал не на него, а на его клона от TZT. Чтобы подключить его к Малинке, нужно какой-то АЦП (аналого-цифровой преобразователь), например такой. Я подключал через более «крутую» версию, выполненную в виде готового модуля.
Кейс для Raspberry Pi Zero W у меня вот такой, в итоге подключение выглядит так:
На самом коннекторе я переставил пины, чтобы VCC, GND и A0 были на соответствующих позициях. Обратите на это внимание при подключении.
В крышке пришлось сделать небольшой паз и удалить одну стойку, чтобы можно было закрыть корпус.
Получилось не супер идеально, но корпус можно закрыть. Сам корпус один из самых удачных, Малинку в таком корпусе можно повесить на шурупе или даже наклеить на двухсторонний скотч (нижняя часть корпуса без ножек, ровная поверхность). А можно наклеить магнитную полосу, вроде этой, тогда Малинку можно примагничивать к любой металлической поверхности.
Корпус в сборе:
Когда корпус собран, можно переходить к подключению. Не торопитесь втыкать датчик в грунт, для начала нужно снять показания датчика на воздухе и в воде. Это будут две границы, между которыми и будете измерять относительную влажность грунта.
Вот здесь есть инструкция и пример кода для Ардуино. Для Малинки есть другая инструкция, но, скорее всего, вам придется устанавливать так же, как мне:
sudo apt-get update
sudo apt-get install git build-essential python-dev python3-setuptools python3-pip
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
cd Adafruit_Python_ADS1x15
sudo python setup.py install
cd ~/Adafruit_Python_ADS1x15/examples
Можно сразу запустить код из примера:
sudo python simpletest.py
Или использовать такой код:
# Plant Humidity
import time
import Adafruit_ADS1x15
adc = Adafruit_ADS1x15.ADS1115()
GAIN = 1
value = adc.read_adc(0, gain=GAIN)
print( value )
perc = (19040 - value) / 100
print( perc )
Данный пример выведет сначала числовое значение влажности, затем влажность в %. Я сначала запускал simpletest.py и измерил показания: 19040 — это значение, которое датчик выдает в сухом виде, 8075 — это значение, когда датчик погружен в воду почти до ограничительной линии. В грунте датчик вряд ли сможет достичь таких крайний показателей, поэтому разброс в ~10000 значений почти идеально подойдет для перевода в %. Но можно сделать и как в примере для Ардуино, где показания делятся на группы «сухо» (19040-15385), «влажно» (15385-11730) и «очень влажно» (11730-8075).