● 4.3. Подключаем датчик влажности почвы
Опубликовано: 23.01.2018
#define INTERVAL_GET_DATA 2000 // интервала измерений, мс
#define SOILMOISTUREPIN A8 // пин подключения контакта A0
// значение полного полива
#define MINVALUESOILMOISTURE 220
// значение критической сухости
#define MAXVALUESOILMOISTURE 900
// переменная для интервала измерений
unsigned long millis_int1=0;
void setup(void) {
// запуск последовательного порта
Serial.begin(9600);
}
void loop(void) {
if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
// получение данных c датчика SoilMoisture
float moisture= get_data_soilmoisture();
// вывод в монитор последовательного порта
Serial.print("soilmoisture =");Serial.println(moisture);
Serial.println(" %");
// старт интервала отсчета
millis_int1=millis();
}
}
// получение данных с датчика SoilMoisture
float get_data_soilmoisture() {
// получение значения с аналогового вывода датчика
int avalue=analogRead(SOILMOISTUREPIN);
// масштабируем значение в проценты
avalue=constrain(avalue, MINVALUESOILMOISTURE,MAXVALUESOILMOISTURE);
int moisture=map(avalue, MINVALUESOILMOISTURE,
MAXVALUESOILMOISTURE,100,0);
return (float)moisture;
}
// список пинов для подключения к s0, s1, s2 мультиплексора
// D5, D7, D8 (GPIO 14, 13, 15)
int pins[]={14, 13, 15};
// Массив двоичных числ определяющих номер выбранного входа/выхода
// микросхемы 4051, с 1 по 8.
int bin [] = { B000, B001, B010, B011, B100, B101, B110, B111 } ;
// служебные переменные
int row;
int r0 = 0;
int r1 = 0;
int r2 = 0;
int avalue =0;
void setup(void) {
// входы подключения к мультиплексору как OUTPUT
for(int i=0;i<3;i++) {
pinMode(pins[i],OUTPUT);
}
// запуск последовательного порта
Serial.begin(9600);
}
void loop(void) {
for(int i=0;i<8;i++) {
// выбор входа мультиплексора
row = bin [i] ;
r0 = row & 0x01 ;
r1 = (row >> 1) & 0x01 ; //
r2 = (row >> 2) & 0x01 ; //
digitalWrite (pins[i], r0) ;
digitalWrite (pins[i], r1) ;
digitalWrite (pins[i], r2) ;
// получение данных c A0
avalue= analogRead(A0);
// вывод в монитор последовательного порта
Serial.print("analog input =");Serial.print(i);
Serial.println(" = "); Serial.println(avalue);
}
// пауза
delay(2000);
}
#define INTERVAL_GET_DATA 2000 // интервала измерений, мс
#define SOILMOISTUREPIN A0 // аналоговый вход
// значение полного полива
#define MINVALUESOILMOISTURE 220
// значение критической сухости
#define MAXVALUESOILMOISTURE 900
// переменная для интервала измерений
unsigned long millis_int1=0;
void setup(void) {
// входы подключения к мультиплексору D5, D7, D8 (GPIO 14, 13, 15)
// как OUTPUT
pinMode(14,OUTPUT);
pinMode(13,OUTPUT);
pinMode(15,OUTPUT);
// запуск последовательного порта
Serial.begin(9600);
}
void loop(void) {
if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
// получение данных c датчика SoilMoisture
float moisture= get_data_soilmoisture();
// вывод в монитор последовательного порта
Serial.print("soilmoisture =");Serial.print(moisture);
Serial.println(" %");
// старт интервала отсчета
millis_int1=millis();
}
}
// получение данных с датчика SoilMoisture
float get_data_soilmoisture() {
// выбор входа мультиплексора CD4051 – y0 (000)
digitalWrite(14,LOW);
digitalWrite(13,LOW);
digitalWrite(15,LOW);
// получение значения с аналогового вывода датчика
int avalue=analogRead(SOILMOISTUREPIN);
Serial.print("avalue =");Serial.println(avalue);
// масштабируем значение в проценты
avalue=constrain(avalue, MINVALUESOILMOISTURE,MAXVALUESOILMOISTURE);
int moisture=map(avalue, MINVALUESOILMOISTURE,
MAXVALUESOILMOISTURE,100,0);
return (float)moisture;
}