Измеряем уровень воды. Проекты. Ардуино

Измерение уровня воды
Датчик влажности почвы и уровня воды
Датчик влажности почвы и уровня воды

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

Так же сделаем визуализацию в processing программе. И сигнальную лампочку для обозначения опасного уровня воды.

Сегодня будем использовать датчик влажности YL-38. Урок по нему уже есть на сайте. Посмотрите его, если уже забыли или пропустили.

датчик влажности YL-38

Для того, чтобы выполнить этот урок нам понадобиться.

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • Датчик влажности почвы
  • Светодиод
  • Резистор 220 Ом
  • Кабель USB
  • Стакан воды

Программа и схема

Соберем схему на макетной плате. Она будет почти такой же, как в прошлый раз. Но используем только один светодиод.

Принципиальная схема подключения датчика влажности почвы
Принципиальная схема подключения датчика влажности почвы

Датчик хорошо реагирует на погружение в воду и изменяет сигнал на контакте AO от 1023 до 0. Соответственно, если значение будет больше 1000, значит датчик не находится в воде. А при приближении к 0 мы будем считать, что стакан заполняется водой.

В программе ардуино будем считывать данные от датчика. Отправлять их в последовательный порт. А программе на processing принимать эти данные и схематично изображать уровень воды в емкости.

Processing программа

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

import processing.serial.*;
Serial port;
float dataFloat = 0;

В функции setup() Создадим окно программы и инициализируем последовательный порт. Не забудьте посмотреть на каком порту подключилась плата Ардуино. В моем случае, это COM7.

void setup(){
  size(600, 600);
  background(255);
  port = new Serial(this, "COM7", 9600); // порт ардуино
  port.bufferUntil('\n');
}

В функции draw() будем рисовать один прямоугольник серого цвета. Он будет обозначать пустой стакан. Он всегда должен быть одного размера и начинаться в одних и тех же координатах. А второй прямоугольник будет отвечать за уровень воды. Его координаты зависят от данных принятых от датчика.

void draw(){
  fill(192);
  rect(200, 100, 200, 400);
  
  fill(#30ACED);
  rect(200, 100+dataFloat, 200, 400-dataFloat);
  delay(50);
}

Когда на последовательном порту появляются данные, программа их считывает и передает в функцию draw() для перерисовки прямоугольника.

void serialEvent(Serial port) {
  dataFloat = float(port.readStringUntil('\n'));
  println( dataFloat );
}
Processing программа
Processing программа

Полный текст программы

import processing.serial.*;
Serial port;
float dataFloat = 0;

void setup(){
  size(600, 600);
  background(255);
  
  port = new Serial(this, "COM7", 9600);
  port.bufferUntil('\n');
}
void draw(){
  float r = random(400);
  fill(192);
  rect(200, 100, 200, 400);
  
  fill(#30ACED);
  rect(200, 100+dataFloat, 200, 400-dataFloat);
  delay(50);
}

void serialEvent(Serial port) {
  dataFloat = float(port.readStringUntil('\n'));
  println( dataFloat );
}

Ардуино программа

В программе для Ардуино все еще проще. Мы считываем данные на контакте А0 и записываем их в последовательный порт с переводом строки. Если уровень воды приближается к 0, включаем сигнальный светодиод. Пороговое значение можно подобрать вручную.

int RED = 2;
int val;

void setup(){
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(RED, OUTPUT);
  digitalWrite(RED,LOW);
}

void loop(){
  val = map(analogRead(A0), 0, 1023, 0, 400);
  Serial.println(val);

  if( val <= 400 ){
    digitalWrite(RED,HIGH);
  } else {
    digitalWrite(RED,LOW);
  }
  delay(50);
}

Не забудем сделать небольшую паузу, чтобы processing программа успела считать данные корректно.

Теперь все готово для эксперимента.

Датчик реагирует на уровень воды
Датчик реагирует на уровень воды
Программа реагирует на уровень воды
Программа реагирует на уровень воды

Заключение

Сегодня мы собрали простой проект для слежения за уровнем воды. И простую программу на языке processing для визуализации показаний датчика.

Где купить

Добавить комментарий

Ваш адрес email не будет опубликован.