Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Микроконтроллер ATmega328P (или Arduino UNO для прототипирования) | 1 |
| Кварцевый резонатор 16 МГц | 1 |
| Керамические конденсаторы 20 пФ | 2 |
| Линейный стабилизатор 7805 (5В) | 1 |
| Светодиоды (любые цвета) | 2 |
| Резистор 10 кОм | 1 |
| Резистор 220 Ом | 1 |
| Резистор 470 Ом | 1 |
| Колодка переключателей (Slide Switch) | 1 |
| Тактильная кнопка C&K PTS 645 | 1 |
| Пьезоизлучатель (Buzzer) | 1 |
| Крона 9В + клемма для неё | 1 |
| Датчик влажности почвы SparkFun (с винтовыми клеммами) | 1 |
| 3D-печатаемый корпус (файл на Thingiverse) | 1 |
Необходимые инструменты
- Паяльник и свинец-free припой
- 3D-принтер (или заказ печати онлайн)
- Компьютер с Arduino IDE
ПО и онлайн-сервисы
- Patchr PCB Editor — проектирование платы (промокод GoPatchr = 15% скидка на первый заказ)
- Patchr PCB Manufacturing — производство печатной платы
- Arduino IDE
- Onshape (CAD) — для проектирования корпуса
История проекта
Признаюсь: я ужасный «родитель» для растений. Не могу понять — переливаю или недоливаю. Но люблю зелень в интерьере. Поэтому создал Thirsty Plant Detector — устройство, которое «говорит» за растения, пискнув как сверчок, когда почва высохла.
В основе — Explorer Uno (ATmega328P), датчик влажности почвы и пьезо-зуммер. Интересный факт: пьезоэлемент может не только издавать звук, но и детектировать вибрации (например, стук). Датчик влажности работает как переменный резистор: два штыря в почве меняют сопротивление (0–1023) в зависимости от влажности. Чем больше воды — тем ниже сопротивление.
Этап 1: Сборка на макетной плате
Сначала собираем на breadboard для проверки кода. Используем Arduino Uno, затем переносим ATmega328P на свою плату. Схема подключения:
Можно использовать готовый датчик SparkFun или сделать свой: два металлических штыря (латунные стержни из хобби-магазина), провода и резистор 47 кОм.
Загрузите тестовый скетч: Thirst_Alert.ino. При касании штырей писк должен прекращаться.
Этап 2: Проектирование печатной платы в Patchr
- Регистрируемся на Patchr.io (есть 4-минутное видео-руководство).
- Используем шаблон Explorer Uno — это готовый Arduino-ядро, не нужно рисовать его заново.
- Расширяем контур платы под датчик и зуммер.
- Размещаем резистор: один конец — 5В, второй — А0. Добавляем два черезхоловых отверстия под штыри датчика (один к резистору, второй — к GND).
- Размещаем зуммер: контакты на GND и Digital Pin 5.
- Проверяем схему с макетной платы → Экспорт Gerber → Заказ в Patchr Manufacturing (промокод GoPatchr).
Этап 3: Проектирование корпуса
Пока плата едет, проектируем корпус в Onshape (или TinkerCAD). Размеры платы смотрим во вкладке BRD. Готовый корпус можно скачать с Thingiverse. Если нет 3D-принтера — закажите печать онлайн или соберите корпус из подручных материалов.
Этап 4: Сборка и пайка
Платы пришли — время паять! Используйте проект Patchr и схемы как референс. Зуммер можно припаять прямо на плату (если заложили место) или вывести на проводах к верхней части корпуса.
Всё готово! Теперь ваши растения никогда не умолчат о жажде.
Код (Arduino)
/* Thirst Alert Plant Alarm for Patchr.io
* Tutorial: www.hackster.io/patchr
* PCB Design: www.patchr.io
* November 2019 */
#include "Volume.h" // Библиотека Connor Nishijima (2016)
int sensorPin = A0;
int sensorValue;
int limit = 300; // Порог сухости (настраивается экспериментально)
Volume vol;
void setup() {
Serial.begin(9600);
vol.begin();
vol.setMasterVolume(1.00); // Громкость 0.00–1.00
vol.delay(500);
}
void loop() {
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
if (sensorValue > limit) { // Почва сухая
Serial.println("*cricket*");
chirp(); // Играем «сверчок»
vol.delay(random(1000, 30000)); // Случайная пауза 1–30 сек
} else {
vol.noTone();
}
}
void chirp() {
int freq = random(3700, 4000);
float volume = random(10, 101) / 100.00;
int chirpType = 1;
if (chirpType == 1) {
int chirpCount = random(1, 3);
chirp(chirpCount, freq, volume);
}
}
void chirp(byte times, int freq, float volume) {
float fadeOut = 1.00;
while (times > 0) {
float mv = 0;
while (mv < 1.00) {
for (int v = 0; v < 255; v += 4) vol.tone(freq, v * volume * mv * fadeOut);
for (int v = 255; v > 0; v -= 4) vol.tone(freq, v * volume * mv * fadeOut);
vol.delay(20); mv += 0.2;
}
mv = 1.00;
while (mv > 0.00) {
for (int v = 0; v < 255; v += 4) vol.tone(freq, v * volume * mv * fadeOut);
for (int v = 255; v > 0; v -= 4) vol.tone(freq, v * volume * mv * fadeOut);
vol.delay(20); mv -= 0.2;
}
vol.noTone(); fadeOut -= 0.75; times--;
}
}
Файлы проекта
- Корпус: Thingiverse — Thirst Alert Enclosure
- Гербер-файл платы:
thirstalertpcb_5kbOAcFilw.zip - Схема: см. раздел Schematics
Производственный процесс
- Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
- Экономия пинов Arduino: подключение 4×3 клавиатуры по трём аналоговым входам
- Умная система автополива растений на Arduino Nano
- Надежный счетчик кВт·ч на Sigfox с Arduino MKR Fox 1200
- Bluetooth-монитор температуры на Arduino Nano с NTC-термистором
- DIY Автоматический измеритель емкости (10 пФ – 10 мкФ) на Arduino Nano
- Бесконтактный жестовый замок: APDS-9960 + Arduino для безопасного доступа
- Набор-компаньон для Arduino Nano — необходимые компоненты и инструменты для DIY-электроники
- Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
- Точный тест времени реакции на Arduino UNO