Automatické zavlažovanie: Rozdiel medzi revíziami
Zo stránky SensorWiki
| (15 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
| Riadok 4: | Riadok 4: | ||
== Zadanie == | == Zadanie == | ||
Cieľom môjho projektu bolo zostrojiť systém automatického zavlažovania rastlín pomocou snímača vlhkosti pôdy a pumpičky. Systém pomocou kapacitného senzora priebežne meria vlhkosť pôdy. Keď vlhkosť klesne pod nastavenú hranicu, mikrokontrolér ATmega328P automaticky zapne pumpičku cez relé, | Cieľom môjho projektu bolo zostrojiť systém automatického zavlažovania rastlín pomocou snímača vlhkosti pôdy a pumpičky. Systém pomocou kapacitného senzora priebežne meria vlhkosť pôdy. Keď vlhkosť klesne pod nastavenú hranicu, mikrokontrolér ATmega328P automaticky zapne pumpičku cez relé, ktorá začne čerpať vodu do kvetináča. Po dosiahnutí požadovanej vlhkosti sa pumpička automaticky vypne. | ||
[[Obrázok:KlonUnoC.png|400px|thumb|center|Vývojová doska Arduino UNO.]] | [[Obrázok:KlonUnoC.png|400px|thumb|center|Vývojová doska Arduino UNO.]] | ||
| Riadok 17: | Riadok 17: | ||
Arduino UNO (klon s ATmega328P) — hlavná riadiaca jednotka | Arduino UNO (klon s ATmega328P) — hlavná riadiaca jednotka | ||
Kapacitný senzor vlhkosti pôdy v1.2 — meria vlhkosť pôdy, analógový výstup (AOUT) pripojený na pin A0 | Kapacitný senzor vlhkosti pôdy v1.2 — meria vlhkosť pôdy, analógový výstup (AOUT) pripojený na pin A0 | ||
Relé 1 kanál 5V — spína napájanie pumpičky, ovládaný digitálnym pinom D7 | Relé 1 kanál 5V — spína napájanie pumpičky, ovládaný digitálnym pinom D7 | ||
Minipumpa 5V DC — čerpá vodu z nádoby do kvetináča | Minipumpa 5V DC — čerpá vodu z nádoby do kvetináča | ||
Breadboard — prepojenie komponentov bez spájkovania | Breadboard — prepojenie komponentov bez spájkovania | ||
Jumper káble — prepojenie pinov | Jumper káble — prepojenie pinov | ||
Zapojenie je realizované na breadboarde. Kapacitný senzor vlhkosti pôdy je napájaný z 5V pinu Arduina a jeho analógový výstup (AOUT) je pripojený na pin A0 mikrokontroléra. | Zapojenie je realizované na breadboarde. Kapacitný senzor vlhkosti pôdy je napájaný z 5V pinu Arduina a jeho analógový výstup (AOUT) je pripojený na pin A0 mikrokontroléra. Relé je napájané taktiež z 5V a jeho ovládací pin IN je pripojený na digitálny pin D7. Pumpička je zapojená cez spínacie kontakty relátka (COM a NO). Celý systém je napájaný cez USB kábel z počítača. | ||
[[Súbor:NahladNaZavlazovanie.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]] | [[Súbor:NahladNaZavlazovanie.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]] | ||
[[Súbor: | [[Súbor:KiCadShcemaZavlaz2.png|400px|thumb|center|Schéma zapojenia.]] | ||
=== Algoritmus a program === | === Algoritmus a program === | ||
Na začiatku sa inicializuje ADC a nastaví sa pin D7 ako výstup pre ovládanie relé modulu. Pumpička sa hneď na začiatku vypne aby sa predišlo náhodnému spusteniu pri štarte systému. | |||
Program potom vstúpi do nekonečnej slučky kde pravidelne každých 500 ms meria vlhkosť pôdy pomocou kapacitného senzora pripojeného na pin A0. Senzor posiela analógový signál ktorý ADC prevedie na digitálnu hodnotu v rozsahu 0 až 1023, čím je pôda suchšia, tým je táto hodnota vyššia. | |||
Ak nameraná hodnota prekročí hodnotu prahu 350, systém vyhodnotí že pôda potrebuje zavlažiť. Program zapne pumpičku cez relé a nechá ju bežať 500ms. Po vypnutí pumpičky systém počká 5 sekúnd aby sa voda stihla vsiaknuť do pôdy a vlhkosť sa ustálila. Potom sa meranie opakuje odznova. | |||
| Riadok 80: | Riadok 86: | ||
{ | { | ||
PUMPA_ON(); /* zapni pumpu */ | PUMPA_ON(); /* zapni pumpu */ | ||
_delay_ms(CAS_PUMPY_MS); /* pumpa beží | _delay_ms(CAS_PUMPY_MS); /* pumpa beží 0.5 sekundy */ | ||
PUMPA_OFF(); /* vypni pumpu */ | PUMPA_OFF(); /* vypni pumpu */ | ||
_delay_ms(5000); /* počkaj 5 sekúnd kým sa vlhkosť ustáli */ | _delay_ms(5000); /* počkaj 5 sekúnd kým sa vlhkosť ustáli */ | ||
| Riadok 93: | Riadok 99: | ||
</tabs> | </tabs> | ||
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip| | Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|VričanDávidZavlazovanie.zip]] | ||
=== Overenie === | === Overenie === | ||
Funkciu som overil zapichnutím kapictného senzora vlhkostti do pôdy kaktusa. Systém správne vyhodnotil že pôda je suchá a automaticky zapol pumpičku ktorá začala čerpať vodu z nádoby do kvetináča cez hadičku. Po navlhnutí pôdy senzor zaznamenal zmenu vlhkosti, hodnota ADC klesla pod prah a pumpička sa automaticky vypla. | |||
[[Súbor:NahladNaZavlazovanie.jpg|400px|thumb|center|Aplikácia.]] | [[Súbor:NahladNaZavlazovanie.jpg|400px|thumb|center|Aplikácia.]] | ||
'''Video:''' | '''Video:''' | ||
<center><youtube> | <center><youtube>ugyRLG0ZjRo</youtube></center> | ||
== Čo by som urobil inak == | == Čo by som urobil inak == | ||
Keby som projekt robil znova, použil by som displej ktorý by zobrazoval aktuálnu hodnotu vlhkosti pôdy v reálnom čase. | |||
[[Category:AVR]] [[Category:MIPS]] | [[Category:AVR]] [[Category:MIPS]] | ||
Aktuálna revízia z 15:52, 7. jún 2026
Záverečný projekt predmetu MIPS / LS2026 - Dávid Vričan
Zadanie
Cieľom môjho projektu bolo zostrojiť systém automatického zavlažovania rastlín pomocou snímača vlhkosti pôdy a pumpičky. Systém pomocou kapacitného senzora priebežne meria vlhkosť pôdy. Keď vlhkosť klesne pod nastavenú hranicu, mikrokontrolér ATmega328P automaticky zapne pumpičku cez relé, ktorá začne čerpať vodu do kvetináča. Po dosiahnutí požadovanej vlhkosti sa pumpička automaticky vypne.

Literatúra:
Analýza a opis riešenia
Arduino UNO (klon s ATmega328P) — hlavná riadiaca jednotka
Kapacitný senzor vlhkosti pôdy v1.2 — meria vlhkosť pôdy, analógový výstup (AOUT) pripojený na pin A0
Relé 1 kanál 5V — spína napájanie pumpičky, ovládaný digitálnym pinom D7
Minipumpa 5V DC — čerpá vodu z nádoby do kvetináča
Breadboard — prepojenie komponentov bez spájkovania
Jumper káble — prepojenie pinov
Zapojenie je realizované na breadboarde. Kapacitný senzor vlhkosti pôdy je napájaný z 5V pinu Arduina a jeho analógový výstup (AOUT) je pripojený na pin A0 mikrokontroléra. Relé je napájané taktiež z 5V a jeho ovládací pin IN je pripojený na digitálny pin D7. Pumpička je zapojená cez spínacie kontakty relátka (COM a NO). Celý systém je napájaný cez USB kábel z počítača.


Algoritmus a program
Na začiatku sa inicializuje ADC a nastaví sa pin D7 ako výstup pre ovládanie relé modulu. Pumpička sa hneď na začiatku vypne aby sa predišlo náhodnému spusteniu pri štarte systému. Program potom vstúpi do nekonečnej slučky kde pravidelne každých 500 ms meria vlhkosť pôdy pomocou kapacitného senzora pripojeného na pin A0. Senzor posiela analógový signál ktorý ADC prevedie na digitálnu hodnotu v rozsahu 0 až 1023, čím je pôda suchšia, tým je táto hodnota vyššia. Ak nameraná hodnota prekročí hodnotu prahu 350, systém vyhodnotí že pôda potrebuje zavlažiť. Program zapne pumpičku cez relé a nechá ju bežať 500ms. Po vypnutí pumpičky systém počká 5 sekúnd aby sa voda stihla vsiaknuť do pôdy a vlhkosť sa ustálila. Potom sa meranie opakuje odznova.
#include <avr/io.h>
#include <util/delay.h>
#define RELAY_PIN PD7 /* relé pripojené na digitálny pin D7 */
#define PRAH_SUCHO 350 /* ADC hodnota nad ktorou je pôda suchá */
#define PRAH_VLHKO 250 /* ADC hodnota pod ktorou je pôda vlhká */
#define CAS_PUMPY_MS 500 /* čas behu pumpy v milisekundách (0.5s) */
/* Relé modul je LOW-active: LOW = pumpa zapnutá, HIGH = pumpa vypnutá */
#define PUMPA_ON() PORTD &= ~(1 << RELAY_PIN)
#define PUMPA_OFF() PORTD |= (1 << RELAY_PIN)
/* Inicializácia ADC */
void adc_init(void)
{
ADMUX = (1 << REFS0); /* referenčné napätie = VCC (5V) */
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); /* zapni ADC, prescaler = 64 */
}
/* Čítanie hodnoty ADC z vybraného kanála (0 = A0) */
uint16_t adc_citaj(uint8_t kanal)
{
ADMUX = (ADMUX & 0xF0) | (kanal & 0x0F); /* vyber kanál */
ADCSRA |= (1 << ADSC); /* spusti konverziu */
while (ADCSRA & (1 << ADSC)); /* čakaj kým sa dokončí */
return ADC; /* vráť výsledok (0-1023) */
}
int main(void)
{
DDRD |= (1 << RELAY_PIN); /* nastav D7 ako výstup */
PUMPA_OFF(); /* pumpa vypnutá na začiatku */
adc_init(); /* inicializuj ADC */
while (1)
{
uint16_t vlhkost = adc_citaj(0); /* čítaj vlhkosť z A0 */
if (vlhkost > PRAH_SUCHO) /* ak je pôda suchá */
{
PUMPA_ON(); /* zapni pumpu */
_delay_ms(CAS_PUMPY_MS); /* pumpa beží 0.5 sekundy */
PUMPA_OFF(); /* vypni pumpu */
_delay_ms(5000); /* počkaj 5 sekúnd kým sa vlhkosť ustáli */
}
_delay_ms(500); /* meranie každých 500ms */
}
return 0;
}
Zdrojový kód: VričanDávidZavlazovanie.zip
Overenie
Funkciu som overil zapichnutím kapictného senzora vlhkostti do pôdy kaktusa. Systém správne vyhodnotil že pôda je suchá a automaticky zapol pumpičku ktorá začala čerpať vodu z nádoby do kvetináča cez hadičku. Po navlhnutí pôdy senzor zaznamenal zmenu vlhkosti, hodnota ADC klesla pod prah a pumpička sa automaticky vypla.

Video:
Čo by som urobil inak
Keby som projekt robil znova, použil by som displej ktorý by zobrazoval aktuálnu hodnotu vlhkosti pôdy v reálnom čase.