Projekt: Pěstevní systém-řízení vlhkosti, teploty podle času

Zdravim,
zacal jsem buduvat automatycky pestevni system ale uz si nevim rady, je to prace do skoly, mel jsem jistou predstavu ale nevim jak dal.
Problem je takovej ze jsem sestrojil cast moji pestirny, ktera dokaze merit teplotu a vlhkost, jesnze se mi nedari dokoncit aby to samo svitilo bud 8 a 16 hodin nebo 12 a 12 hodin protoze nevim jak udelat aby beh programu nebyl prerusenej. Potom aby to kazdych napr. 10 min zmerilo teplotu a pokud bude vyssi nez teplota zadana uzivatelem aby to seplo odvetravani a kazdych napriklad 8 hodin to trosku zalilo. Pomoci cerpadla pres relatko na vystupu MCU. V prilozenych souborem davam k dispozici jak program v bascomu tak i v multisimu. Za kazdou radu i pomoc budu velice rad. Kazdemu kdo by mi pomohl se rad jakkoliv odmenim.

:arrow_right: administrator: přejmenováno z "Pomoc s dokoncenim pestevniho systemu"

Tady jsou prilohy…
ulozto.cz/xPgt5JDx/prace-zip

:arrow_right: administrator: přiloženy externí soubory
prace.zip (122 KB)

Zajistit nepřerušitelnost programu není zase tak velký problém. Stačí, aby byl MCU zálohovaný a uměl detekovat výpadek napájení, aby při běhu z baterie zbytečně nesvítil LEDkama, podsvícením displeje apod. Některé MCU umí s hodinkovým krystalem fungovat jako RTC obvody. Stačí na to 3V knoflíková baterie nebo 3 NiMH aku. Samozřejmě s detekcí výpadku napájení a v případě aku, aby uměl měřit napětí na aku a uměl aku i dobít po obnovení dodávky proudu. Použít by šel i superkapacitor, ale ten nebude mít takovou výdrž jako aku nebo baterka. Použil jsi ATmega64 - tam máš místa, že se tam program ještě dlouho bude cítit ztracený, takže se můžeš klidně rozepsat. Kromě toho ATmega64 umí s hodinkovým krystalem provozovat interní RTC.

Ano presne jak jste popsal i klidne bez toho zalozniho zdroje by mi to stacilo prave pro me je nejvetsi problem ten kod napsat nejsem zadny zbehly programator kdyby jste mi pomohl stim programem nemam problem se Vam financne obmenit…

Myslim ze velkou cast programu a tu nejtezsi jsem dal dohromady ted to akorat zkompletovat pro ten cas a jak jsem psal vse v prilohach…

Tady bude trošku problém Bascom. Ne, že bych Basicem nevládl, ale už je to hóóóóóóódně dlouho, co jsem s ním dělal. Kromě toho se mi fakt nechce instalovat daší soft do PC. MCU dělám v ASM, nouzově v C-čku. Musel bych to přeložit z Bascomu nebo programovat od nuly.

Můžeš si vytvořit několik vlastních časovačů a pomocí nich řídit program.
Tady je příklad takových časovačů.
(Ty $stacky nastavuj větší, můžou zabrat klidně čtvrtinu RAM.)

[code]’ Timer1 v módu 4 (CTC) nepočítá do 65535, ale jenom do hodnoty
’ zapsané v registru OCR1A (OCR1AH:OCR1AL). Pak se vynuluje (a počítá ovšem dál).
’ Tak můžeme cyklus čítače libovolně zkrátit.

’ V okamžiku kdy čítač dosáhne hodnoty registru OCR1A, nastaví se
’ příznak přerušení “Compare1a”. Toto přerušení povolíme a použijeme
’ pro vytvoření vlastních časovačů.
’ Pro snadné počítání nastavíme interval mezi přerušeními na 1 vteřinu.

'$sim
$regfile = “m64def.dat”
$crystal = 1000000
$hwstack = 128
$swstack = 64
$framesize = 64
$baud = 9600

Dim 10min_timer As Word, 8h_timer As Word
Dim 16h_timer As Word,
Dim 10_min_flag As Byte , 8h_flag As Byte
Dim 16h_flag As Byte

'timer1 in CTC mode 4, top=OCR1A
Config Timer1 = Timer , Prescale = 64 , Clear Timer = 1
Enable Compare1a 'povol přerušení Compare1a
On Compare1a Timer1_isr 'při přerušení jdi na Timer1_isr

'OCR1A = ($crystal / (požadovaný kmitočet * předdělič)) - 1
Ocr1a = 15624 '1 Hz (= přerušení každou vteřinu)

Enable Interrupts 'povol všechna přerušení

'------------------------------------------------------------

Do

  If 10_min_flag = 1 Then
     'proveď co se má udělat každých 10 minut
     10_min_flag = 0      'a vynuluj flag
  End If

  If 8h_flag = 1 Then
     'proveď co se má udělat každých 8 hodin
     8h_flag = 0          'a vynuluj flag
  End If

  'atd...

Loop
End

'------------------------------------------------------------

Timer1_isr:
Toggle Portb.4
Incr 10min_timer
Incr 8h_timer
Incr 16h_timer

If 10min_timer >= 600 Then '600 sec
10min_timer = 0
10_min_flag = 1
End If

If 8h_timer >= 28800 Then
8h_timer = 0
8h_flag = 1
End If

If 16h_timer >= 57600 Then
16h_timer = 0
16h_flag = 1
End If
Return

[/code]


Dim Vstup1 As Word Dim Vstup2 As Word Dim Vstup3 As Word Dim Vstup4 As Word Dim Vstup5 As Word Dim Vstup6 As Word Dim Vstup7 As Word Dim Vstup8 As Word Takové řady proměnných stejného typu přímo volají po použití pole.
Tím se nejen zjednoduší deklarace, ale umožní se také použití ve smyčkách (např. FOR).

Dim Vstup(8) as word

Pak místo “x = Vstup1” bude “x = Vstup(1)” atd.

Zdravim,
tak jsem zkousel vse pomoci tech casovacu tak jak to zde bylo popsane ale stale mi to nic neukazuje a vubec mi to nefunguje :frowning: Prosim jestli by to slo udelat vice konkretne pro muj priklad :slight_smile:

Pardon, v kódu pro “Timer1_isr:” jsem zapomněl nulovat timery.
Opravil jsem kód výše.
Funguje v reálu na mojí desce.

Zdravim te uzivateli AB,
rad bych te poprosil timto o pomoc s danou ulohou vidim ze se v teto oblasti dobre orientujes. Rad bych se ti jakkoliv odmenil za pomoc je to pro me dost dulezite jelikoz to mam jako praci do skoly :slight_smile: tady mas muj mail vernyrek.stepan@gmail.com nebo muj tel. 731 307 802 Jeste jednou moc dekuji.

Hm, díval jsem se na to schéma, a je to jenom měření teplot pomocí KTY81-xxx.

Jak je provedeno měření vlhkosti?

Co jsem našel, tak při stejnosměrném měření odporu zeminy, dochází k problémům s elektrodami(elektrochemická koroze). Většinou se používá princip změny kapacity.

Jak je provedeno odvětrávání?

zdravim,
mereni vlkosti se provedeno stejne jako mereni teploty cidlo ma stejny rozsah jen tam bude mala uprava kodu :slight_smile: ano na mereni vlhkosti zeminy budou pouzity 2 elektrody a vyrobce udava stabilitu az na 5 let provozu :slight_smile:
odvetrani bude reseno pomoci dvojici ventilatoru zapojenych pres relatka :slight_smile:

Ahoj Stando33,
myslis ze by jsi mi stim dokazal pomoci to co jsem psal uzivateli AB urcite plati i pro tebe za jakoukoliv pomoc budu hrozne rad a rad se za ni jakkoliv i financne odmenim. Telefon i email na me mas kontaktuj me a urcite se domluvime :slight_smile: