Те, що у вас вже є, ви можете видалити в кошику.
В інтернеті можна знайти безліч схем для іригації садових ділянок і домашніх рослин. Є схеми індикації прості схеми управління поливом, і навіть автоматичні комплекси, прив'язані до часу, температурі навколишнього середовища, вологості грунту і фазі місяця.
Ми також хочемо внести свою лепту в автоматизацію дачних ділянок і домашніх квітників. Сьогодні зберемо просту, недорогу і дуже ефектну схему індикації вологості грунту. За допомогою цього індикатора можна дистанційно, що не тикаючи пальцем в землю, оцінити вологість грунту на невеликій глибині і прийняти вірне рішення про полив.
Особливості цього датчика вологості в тому, що він зібраний на мікроконтролері ATTINY. А особливості КОДА дозволили завантажити його в мізерну пам'ять ATTINY. Наш датчик працює так: три світлодіода червоний, жовтий і зелений индицируют вологість грунту. Ви самі можете налаштувати пороги спрацьовування. (Див. Коментарі в коді).
А ще один висновок (3) мікроконтролера може бути використаний для управління клапаном поливу. Він спрацьовує (активна одиниця) коли рівень вологості грунту піднімається вище «Зеленого» і повертається в нуль при вологості трохи нижче зеленого рівня.
Як датчик вологості використовуємо Troyka-Soi Moisture Sensor від Амперкі, як світлодіодів три модуля з яскравих світлодіодів Troyka-Green Led, Troyka-Yellow Led, Troyka-Red Led. А виконавчим пристроєм можна буде керувати за допомогою модуля Troyka-Mosfet.
Технічні характеристики
Напруга живлення, В 3 ... 5 Струм, мА 30
Електрична схема
Монтажна схема
У цьому проекті немає.
Друкована плата
У цьому проекті немає.
#define GREEN_LED 0 #define YELLOW_LED 1 #define RED_LED 2 #define WATER_CTRL 4 #define GREEN_LINE 140 // вище цього норма, зелений #define YELLOW_LINE 80 // вище цього попередження, жедтий; нижче - червоний #define GREEN_NORMAL (GREEN_LINE + 40) // поливаємо до цієї позначки #define THRESHOLD 20 void setup () {// ATtiny13a DDRB = 0b00010111; PORTB & = ~ ((1 << GREEN_LED) | (1 << YELLOW_LED) | (1 << RED_LED) | (1 << WATER_CTRL)); ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); ADMUX = (1 << MUX0) | (1 << MUX1) | (1 << ADLAR); ACSR = (1 << ACD); DIDR0 | = (1 << ADC3D); // SREG | = 0x80; } // ----------------------------------------------- ------- void loop () {static byte PrvADCVal = 0; byte ADCValDif; ADCSRA | = (1 << ADSC); while (ADCSRA & (1 << ADSC)); if (PrvADCVal> = ADCH) ADCValDif = PrvADCVal - ADCH; else ADCValDif = ADCH - PrvADCVal; if (ADCValDif> = THRESHOLD) {PORTB & = ~ ((1 << GREEN_LED) | (1 << YELLOW_LED) | (1 << RED_LED)); if (ADCH <GREEN_LINE) {PORTB | = 1 << WATER_CTRL; while ((PINB & (1 << GREEN_LED)) == 0) {ADCSRA | = (1 << ADSC); while (ADCSRA & (1 << ADSC)); if (ADCH <YELLOW_LINE) PORTB | = (1 << RED_LED); else if (ADCH <GREEN_NORMAL) PORTB | = (1 << YELLOW_LED); else PORTB | = (1 << GREEN_LED); }} Else PORTB | = (1 << GREEN_LED); PrvADCVal = ADCH; }}