Главная страница

ккк. программы полив. Измените эти значения, основываясь на своих значениях калибровки


Скачать 155.93 Kb.
Название Измените эти значения, основываясь на своих значениях калибровки
Дата18.03.2023
Размер155.93 Kb.
Формат файлаdocx
Имя файлапрограммы полив.docx
ТипДокументы
#998439

/* Измените эти значения, основываясь на своих значениях калибровки */

#define soilWet 500 // Определяет максимальное значение, при котором, мы решили, что почва 'влажная'

#define soilDry 750 // Определяет минимальное значение, при котором, мы решили, что почва 'сухая'
// Выводы, подключенные к датчику

#define sensorPower 7

#define sensorPin A0
void setup()

{

pinMode(sensorPower, OUTPUT);
// Изначально оставляем датчику выключенным

digitalWrite(sensorPower, LOW);



Serial.begin(9600);

}
void loop()

{

// получить показание из функции ниже и напечатать его

int moisture = readSensor();

Serial.print("Analog Output: ");

Serial.println(moisture);
// определить состояние нашей почвы

if (moisture < soilWet)

{ // слишком влажная

Serial.println("Status: Soil is too wet");

}

else if (moisture >= soilWet && moisture < soilDry)

{ // идеальное состояние

Serial.println("Status: Soil moisture is perfect");

}

else

{ // слишком сухая - пора поливать

Serial.println("Status: Soil is too dry - time to water!");

}
delay(1000); // Для проверки берем показания раз в секунду

// Обычно вам необходимо проверять показания, возможно, раз или два в день

Serial.println();

}
// Данная функция возвращает аналоговый результат измерений датчика влажности почвы

int readSensor()

{

digitalWrite(sensorPower, HIGH); // Включить датчик

delay(10); // Дать время питанию установиться

int val = analogRead(sensorPin); // Прочитать аналоговое значение от датчика

digitalWrite(sensorPower, LOW); // Выключить датчик

return val; // Вернуть аналоговое значение влажности

}

int soilMoistureValue = 0;

int percentage=0;

void setup() {

  pinMode(3,OUTPUT);

  Serial.begin(9600);

}

void loop() {

soilMoistureValue = analogRead(A0);

Serial.println(percentage);

percentage = map(soilMoistureValue, 490, 1023, 100, 0);

if(percentage < 10)  

{

  Serial.println(" pump on");

  digitalWrite(3,LOW);

}

if(percentage >80)

{

  Serial.println("pump off");

  digitalWrite(3,HIGH);

}

}

int GLED= 13; // мокрая почва D13

int RLED= 12; // сухая почва D12

int SENSE= 0; // аналоговый сигнал датчика влажности почвы A0

int value= 0;

void setup() {

Serial.begin(9600);

pinMode(GLED, OUTPUT);

pinMode(RLED, OUTPUT);

Serial.println("SOIL MOISTURE SENSOR");

Serial.println("-----------------------------");

}

void loop() {

value= analogRead(SENSE);

value= value/10;

Serial.println(value);

if(value<50)

{

digitalWrite(GLED, HIGH);

}

else

{

digitalWrite(RLED,HIGH);

}

delay(1000);

digitalWrite(GLED,LOW);

digitalWrite(RLED, LOW);

}

const int sensor_pin = A1; /* Датчик подключен на пин А1 */

void setup() {

Serial.begin(9600); /* Скорость порта 9600 */

}

void loop() {

float moisture_percentage;

int sensor_analog;

sensor_analog = analogRead(sensor_pin);

moisture_percentage = ( 100 - ( (sensor_analog/1023.00) * 100 ) );

Serial.print("Moisture Percentage = ");

Serial.print(moisture_percentage);

Serial.print("%\n\n");

delay(1000);

}

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



Пример кода для снятия показаний:

int moisture = 0; // показания датчика влажности
unsigned long moisture_time = 0; // таймер датчика влажности
unsigned long time_abs = 0; // Разница во времени


void setup() {
  pinMode (8, OUTPUT); // Датчик влажности - питание
  digitalWrite (8, LOW);
}


void loop() {
  time_abs = millis() - moisture_time; // Сколько времени прошло
  time_abs = abs(time_abs);
  if (time_abs > 3600000) { // Раз в час
    get_moisture(); // Снимаем показания датчика влажности
    moisture_time = millis();
  }
}


void get_moisture() {
  digitalWrite (8, HIGH); // Включаем датчик влажности
  delay (3000);
  moisture = analogRead(A0); // получение значения влажности с аналогового вывода датчика
  digitalWrite (8, LOW);
}

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



Постоянно заказывать датчики лень, поэтому можно сделать датчик самому - для этого нужно два гвоздя и клеммная колодка, можно обойтись без пайки:


написать администратору сайта