Sunday, December 4, 2016

Akvavalvur

Proloog

Möödunud aastal (2015 sügisel) murdsid TTÜ magistrandid Sardsüsteemide aines päid aruka maja lahendustega. Kellel sõrmejäljega ukseavamine, kellel patareitoitega ilmajaam, kellel valgustuse juhtimine, ja oli üks tiim ka akvaariumivalve ülesandega. Tegijad said oma projektid kaitstud ja arvestatud, aga lahendused jäid lõpetamata ning kurnatud tiimidel ei jätkunud särtsu jätkata probleemi lahendamist pärast kursuse lõppu.
Aga juhtumisi karjus ka oma akvaarium "valvuri" järele. Kurva kogemusena riknes aasta tagasi veesoojendana (jäi pidevalt tööle) ning 35 kraadises vees hukkus mitu iludust, sealhulgas oma 15-aastane igati ponks tontsäga.
Olin juba varem teinud ja edukalt rakendanud karusellprintsiibil automaatsöötjat, mille käivitas elektromehaaniline kell koos valgustusega. Lihtne ja tõhus. Aga mitte terviklahendus kõigi avaariumiga seotud seadmete jaoks. Olukord oli selline nagu Gary Oldmanil kultusfilmis "Viies element", et kui sa tahad midagi tehtud saada, pead ikka ise ära tegema.

Akvavalvur


Akvavalvuri põhimoodul on paigutatud kompaktsesse (isegi liiga kompaktsesse) akrüülplastist kokku kleebitud karpi. Ülapaneelil vasakul on menüü-joystick, paremal valgustuse ja pumpade töö käsitsilülitid. Esipaneelil vasakult paremale: RGB-LED, LCD-ekraan ja PIR sensor. Helesinine värvus tähendab muuhulgas, et läheduses on tuvastatud inimene (ka fotograaf on inimene), mis tähendab lülitusrežiimides mõneti teistsuguseid käitumisi.
Akvaariumisse uputatav veekindel termoandur on seadme ees juhtme otsas.
Tagapaneelil on pistikupesad veesoojendi, valgustuse, filtri pumba ning õhustaja jaoks, paremal küljel USB pesa toitekarusselli ühendamiseks.

Disain

Sisendid

  1. Reaalaeg (pole midagi parata, kalade käitumine peab käima samas rütmis inimese elurütmidega)
  2. Vee temperatuur (üks ääretult oluline näitaja, mille mõõtmine on samas kõige lihtsam)
  3. Fototakisti ümbritseva valguse intensiivsuse mõõtmiseks (seade peaks suutma eristada pimedat ja valget aega)
  4. Inimese lähedus (PIR andur inimese läheduse tuvastamiseks ning mis koos ümbritseva valguse intensiivsuse indikaatoriga aitab akvaariumi valgustust intelligentselt juhtida)
  5. Liides juhtnuppudega (valgust, pumpi peaks saama ka käsitsi juhtida, kasvõi hoolduse ajal)
  6. Joystick-mikrolüliti menüüs ringiliikumiseks ja tegevuste valikuks

Väljundid

  1. LCD displei 
  2. Toitmine, seatav kuni 2 aega ööpäevas, 15 min täpsusega
  3. Valgus, seatav kuni 2 sõltumatut intervalli 15 min täpsusega
  4. Veesoojendi (tegelikult autonoomse termorelee põhise veesoojendi järelkontroll), seatav max ja minimaalne temperatuur
  5. Õhustaja, seatav 2 režiimi (eraldi päeva- ja öörežiim), töö- ja puhketsükli kestvused seatavad sõltumatult 15 minutilise sammuga (15, 30, 45, 60, 75 ja 90 minutit)
  6. Filtripump, seatav 2 režiimi (eraldi päeva- ja öörežiim), töö- ja puhketsükli kestvused seatavad sõltumatult 15 minutilise sammuga (15, 30, 45, 60, 75 ja 90 minutit)
  7. Hooldusajad (vesi, filter) - tsükli pikkus, järelejäänud aeg järgmise hoolduseni 
  8. Helisignaal andmaks märku häiretest või hooldusvajadusest

Platvorm

Siin oli asi lihtne. Kuna õppeaines, millega on järgmisel õppeaastal jälle tegemist, oli kasutusel TI MSP430 ühe-plaadi mikrokontrollerid, siis paistis, et oma isiklike oskuste tudengitega pariteetsel tasemel hoidmiseks tuleb samalaadset platvormi kasutada. Konkreetselt sai valitud alumisest otsast pisut võimekam MSP430F5529LP koos Sharp96 LCD tütarplaadiga. See Sharp inspireeris kohe algusest peale kuna tema ekraani resolutsioon on 96x96 pikselit. Juhtumisi 96 = 24 x 4. Capish? Ehk siis võiks veerand tunni täpsusega animeerida ööpäevas toimuvat!

Sharp96 LCD moodulil on ka paar mahtuvustundlikku ala, mis võimaldaks lihtsa menüü juhtimist realiseerida. Paraku MSP430F5529LP emaplaadi korral polnud kõik alad kasutatavad (ülekate I2C-ga, mis on aga vajalik reaalaja kella jaoks), mitõttu tuli menüüjuhtimine eraldi realiseerida, milleks sai eraldatud 4 sisendit joystik tüüpi lülitile. Ahjaa - joystick omab viit kontakti - aga kuna teatud kombinatsioonid on mehaaniliselt välistatud (ei saa korraga nt paremal ja vasakule vajutada), siis sai üks võimatu kombinatsioon paari dioodiga viienda nupu alla pandud. Edasine on juba tarkvara ülesanne.

Üldiselt on seadmel 2 töörežiimi - autonoomne töö ja häälestamine. Autonoomse töö ajal huvitab kasutajat vaid primaarne info (kellaaeg, vee temperatuur, täiturite sees/väljasolek, alarmid). Siin tuligi mängu 96 pikseliline rida, milles on esitatav ühel lineaarsel real nii ööpäeva töörežiimid kui ka jooksev hetk:


Niisiis siin on esmalt 2 numbrit - jooksev aeg ja temperatuur. Nende all on neli aegrida 00:00-st kuni 23:59-ni, kusjuures üks piksel (pikseli laiune kriips) vastab 15 minutile.
Pikem aktiivsus on esitatud jämedama kriipsu või jutiga ning jooksvat hetke esitab valge katkestustriip ajajoonel. Näiteks valgust jagatakse ööpäevas kaks korda, esimene umbes tunnine tsükkel on hommikupoole, teine algab hilisõhtul ja kestab üle südaöö kuni 00:15-ni.
Loomulikult peab olema võimalik kõiki parameetreid sättida, milleks on ammendav menüü:
Edasine on suurelt juba programmeerimise tehnika.
Seade salvestab erijuhtumid (tuvastatud häireolukorrad, taaskäivitamised, sensoritõrked jne) välisesse EEPROM-i."LOGI"-režiimis saab neid lehitseda ja logi kustutada.

Hooldusrežiim

 Aegajalt vajab akvaarium hooldust - veevahetus, põhja- ja seinte puhastamine, taimede korrastamine, filtrikäsnade läbipesemine jms. Hooldusintervalli soovitusi leiab nii käsiraamatutest, kalapoodide veebilehtedelt kui ka foorumitest. Oma väljakujunenud graafik on veevahetuseks 2 nädalat ja filtripesu 3 kuu järel, millega kalad näivad hästi leppivat. Neid parameetreid saab akvavalvuri menüüvalikus "HOOLDUS" sättida. Akvavalvur peab meeles hooldusintervalle ja annab märku kui üks või teine loendur on nulli jõudnud.
Hoolduse peale kulub praktikas vähemalt pool tundi ja selle ajal ei oleks pumpade-valgustuse automaattöö kuidagi teretulnud. Tõsiseks ohuallikaks on veesoojendi, mis teoreetiliselt võib rikneda või hoolduse käigus puruneda nii, et võrgupinge vette lekib ja hoidku jumal kui sel ajal käsipidi akvaariumis sobrad. Õpetlikke "fööni- ja vanninalju" on filmides juba piisavalt nähtud.
Seepärast sai realiseeritud spetsiaalne hooldusrežiim, mille ajal on küttekeha välja lülitatud ning pumbad-valgus hooldajal käsitsi sättida. Hooldusrežiimi inditseerib LED-i roheline valgus ning selle vaikimisi kestuseks sai pandud 45 minutit. Loomulikult võib hooldusrežiimi varem lõpetada, mille järel taastub automaatrežiim.

 Toitekarussell

Kaladega peab suhtlema ning toitmise käigus tuleb see kõige paremini välja. Kui aga on puhkus või pikem lähetus, siis peab automaatika inimest asendama. Nendeks puhkudeks saigi "treitud" toitekarussell.
Karusell kujutab enesest 12-sektorilist 8mm paksusest akrüülklaasist ketast, mis on paigutatud kahe plaadi vahele, milles on vaid üks toitesektori mõõtudes ava. Ketast pöörab aeglustiga samm-mootor, mille juhtimiseks on omaette mikrokontroller. Kontrolleri karbikesel on nupud ketta  käsitsi pööramiseks (algasendi sättimiseks), ülejäänu on matemaatika.
Akvavalvur on liidestatud toetekaruselliga praegu vaid ühe juhtsignaaliga ega anna tagasisidet toidu olemasolu ning toitmise õnnestumise kohta sektorites. Signaali saabumisel (akvavalvur omistab "1"-e 15-ks minutiks) pöörab mikrokontroller ketast aeglaselt ühe segmendi võrra ning läheb seejärel ooterežiimi ootamaks uut käivitussignaali.
Pole raske ära tabada, et karusell on võimeline vaid 11-t portsu keerama. Aga tagasiside puudumine - no kes keelab lihtsat veebikaamerat kasutamast, mille vaatevälja jäävad nii kalad kui ka toitekarussell, sest oma silm on kuningas ja ega massinat saa uske.

 

EMI

EMI - Electromagnetic Inference. See oli paras pähkel. Moodul, mis ilma induktiivseid koormusi lülitavate releedeta toimis laitmatult, kukkus esimestel katsetel kokku pea iga kord kui pump või luminofoorlamp sisse või välja lülitus. Süüdi oli ka kompaktne disain, mis asetas liinipinge komponendid vaid mõne cm kaugusele juhtplaadist ning selle komponentidest. Kohe algul tulnuks mõelda korraliku Faradi puuri stiilis varjestusele ja ahelate paremale lahutamisele. Lahendused, mis kõik nõksukese aitasid ning kokkuvõttes "päeva päästsid":
  1. Valitum toitemuundur (elementaarse sisendfiltriga)
  2. Toiteahelate ülekontroll (üks maanduspunkt)
  3. Ohtralt silukondensaatoreid kõigile toiteahelatele trükkplaadil
  4. Valvekoer e WDT protsessori resettimiseks kui protsessor jääb "rippuma", oodates lõputus tsüklis vastust sensorilt
  5. Kõikide oluliste olekuandmete hoidmine reaalaja kella mälus (selleks on seal ruumi oma 56 baiti), et neid reset-järgselt automaatselt taastada
  6. Analoogmõõtmiste tulemuste keskmistamine üle mitme sämpli, üksikute äärmuslike andmenäitude ignoreerimine (tõenäoliselt EMI häirest põhjustatud andmebiti muutus)

Followers