Arduino - Akvārija vadības kontrolieris (dators)

briedis
Reģistrētie lietotāji
Atbildes: 493
Pievienojies: Cet Jan 15, 2009 12:18 pm
Atrašanās vieta: Riga, centrs
Vecums: 38

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt briedis » Tr Jūn 16, 2010 1:52 am

"Mega Logging" :D  :applause:
nbinc
Reģistrētie lietotāji
Atbildes: 1647
Pievienojies: Otr Feb 12, 2008 2:45 pm
Atrašanās vieta: Rīga
Contact:

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt nbinc » Tr Jūn 16, 2010 9:22 am

Nu man ir tur vairāki veidi :)
Tāds kā bija iepriekšējā variantā (uz 128x64pix), tur sanāca 25 mērījumi uz ekrāna (teiksim par katru stundu, varētu diennakts mērījumus rādīt), un šis jaunais variants, kur katrs mērījums vienu līniju aizņem, sanāk uz ekrāna 192 mērījumus parādīt. Man logojas dati katru otro sekundi.... protams reālā darbībā tik bieži nav vajadzības tos mērījumus skatīties bet testēšanai tā ir parocīgāk.. vismaz redzi ka kaut kas notiek. Tur kur ir "kalns" uz grafika es termosensoru rokās paņēmu.

Tā svītrlīnija pie grafika atzīmē apakšējo temperatūras robežu, pie kura ieslēgsies sildītājs, tas man projektā ir domāts, iespējams ka tur pat uz grafika parādīšu kad tieši sildītājs ieslēdzās...
briedis
Reģistrētie lietotāji
Atbildes: 493
Pievienojies: Cet Jan 15, 2009 12:18 pm
Atrašanās vieta: Riga, centrs
Vecums: 38

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt briedis » Tr Jūn 16, 2010 2:29 pm

Kā tu glabā mērījumus, raksti masīvā, EEPROM atmiņā vai SD kartē?
nbinc
Reģistrētie lietotāji
Atbildes: 1647
Pievienojies: Otr Feb 12, 2008 2:45 pm
Atrašanās vieta: Rīga
Contact:

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt nbinc » Tr Jūn 16, 2010 3:11 pm

Pagaidām glabāju atmiņā. Bet taisos datus īlglaicīgi logot SD kartē.
Respektīvi tekošo stundu glabāju operatīvajā atmiņā, kad stunda pagāja ierakstu datus EEPROM, kad pagāja diennakts tad ierakstu to SD kartē.

Starp citu par tavu ieceri izmantoto I2C visas perifērijas vadīšanai..... tikko Akvalogo forumā man pabrīdināja (jeb atgādināja par tādu varbūtību):
- traucējumi kad uz maģistrāles daudz kas ir sakarināts
- ja viens no pievienotiem devaisiem/sensoriem nosprāgst (aiziet uz īso) tad visa I2C magistrāle ir beigta, respektīvi neko nevarēs iesēgt un arī ar to tavu mikreni I2C paplašinātāju arī atslēgt..... ja teiksim tu ieslēgsi sildītāju un kaut kas ar I2C notiek tas sildītāju tu vairs neizslēgsi :(

Tāpēc ar es labāk izmantošu lielas slodzes ieslēgšānai/atslēgšānai (gaisma, sūkņi, sildītājs/chilleris) ciparu izejas pa tiešo no Arduino....
briedis
Reģistrētie lietotāji
Atbildes: 493
Pievienojies: Cet Jan 15, 2009 12:18 pm
Atrašanās vieta: Riga, centrs
Vecums: 38

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt briedis » Tr Jūn 16, 2010 3:23 pm

Tas gan slikti :(

Tad laikam jāizmanto parastās digitālās I/O un uz I2C var karināt keypadu, datu logošanu u.c. lietas, kuras nav kritiskas atslēgšanās gadījumā.

Un ko darīt ar pulksteni, izmantot ārējo piemēram DS1307 vai skaitīt laiku uz paša arduino un ārējo pulsteni izmantot tikai sinhronizēšanai vai restarta gadījumā?
nbinc
Reģistrētie lietotāji
Atbildes: 1647
Pievienojies: Otr Feb 12, 2008 2:45 pm
Atrašanās vieta: Rīga
Contact:

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt nbinc » Tr Jūn 16, 2010 3:50 pm

Nu par to DS1307 būs vēl jāpadomā kā to labāk realizēt..... bija arī kautkādas bibliotēkas kuras bez tā laiku skaitīja (kamēr neizslēdz kontrolieri).

Bet nu par tādu I2C sliktumu es sākumā pat neiedomājos.

Viens no problēmas atrisināšanas variantiem ir izveidot vēl vienu I2C maģistrāli, to man šķiet var ērti uztaisīt izveidojot Wire.h bibliotēkas kopiju (Wire2.h vai WireBackup.h) un pamainot ciparu ieeju PIN'us. Standarta variantā tur tik un tā tiek iesaistīti ciparu Pin'i.
Tad teiksim pulksteni varētu karināt uz rezerves maģistrāles (nu kā vienu no galveniem sistēma komponentiem) un pārējo (klaviatūrum, displeju, sensorus) uz galvenās maģistrāles.
Bet nu gaismas un sūkņus man šķiet drošāk būtu slēgt pa tiešo no Pin'iem nevis caur maģistrāli. Nav jau problēmu palielināt tos šteķerus uz kastītes, galvenais lai tas viss drošāk strādātu. Es plānoju izmantot RJ45, tur iekšā var 8 vadus iebāzt, tas sanāk 0V (zeme), 5V, un 6 Pin'i releju vadībai, ja liekam divus RJ45 tad jau sanāk 12 vadāmās rozetes. Pie kam sākumam var palaist tikai vienu "BAR'u" ar 6 rozetēm un viena RJ45 un pie vajadzības pielikt vēl vienu.
Man šķiet ka rūpnieciskiem akvakontrolieriem arī pa 6 rozetēm BAR's bija. Un iespējams ka pēc līdzīgas shēmas tos signālus tie nodod..... :) ja jau tas I2C tik salīdzinoši nedrošs ir...
nbinc
Reģistrētie lietotāji
Atbildes: 1647
Pievienojies: Otr Feb 12, 2008 2:45 pm
Atrašanās vieta: Rīga
Contact:

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt nbinc » Tr Jūn 16, 2010 3:57 pm

Bibliotēka "Software Date Time library" - http://www.arduino.cc/playground/Code/DateTime
briedis
Reģistrētie lietotāji
Atbildes: 493
Pievienojies: Cet Jan 15, 2009 12:18 pm
Atrašanās vieta: Riga, centrs
Vecums: 38

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt briedis » Tr Jūn 16, 2010 3:58 pm

Teorētiski jau no diviem PWM vadiem var I2C maģistrāli uztaisīt. Bet tas, ka nosbrūkot vienai no releju kastē ieslēgtām iekārtām pastāv varbūtība, ka nevar darbināt pārējās komponentes galīgi neder.

Īstenībā jābūt risinājumam, lai noņemtu traucējumus.
nbinc
Reģistrētie lietotāji
Atbildes: 1647
Pievienojies: Otr Feb 12, 2008 2:45 pm
Atrašanās vieta: Rīga
Contact:

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt nbinc » Tr Jūn 16, 2010 4:02 pm

Traucējumus jau noņemt var (ekranēt labāk, kādu kondieri pielikt....), grūtāk būs ar īssavienojumu..... ja maģistrāle ir 2 vadi tad "īsais" visu salaidīs grīstē un es pat nevaru iedomāties kā ar to cīnīties. Tad jau katrai pieslēgtai ierīcei jāliek kādas aizsardzības shēmas un detektori, kas manuprāt to visu I2C labumu padara par sliktumu.
briedis
Reģistrētie lietotāji
Atbildes: 493
Pievienojies: Cet Jan 15, 2009 12:18 pm
Atrašanās vieta: Riga, centrs
Vecums: 38

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt briedis » Tr Jūn 16, 2010 4:07 pm

es šito lieto mājās papētīšu, pie I2c savienojuma pa tieši neviens devains/zonde netiks slēgts. Ja nu vienīgi čips nomirst, kas ir tik pat maza varbūtība kā pats Arduino vai jebkurš cits kontrolieris.
nbinc
Reģistrētie lietotāji
Atbildes: 1647
Pievienojies: Otr Feb 12, 2008 2:45 pm
Atrašanās vieta: Rīga
Contact:

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt nbinc » Tr Jūn 16, 2010 4:13 pm

Nu par to īso kā reiz gāja runa ka tos vadus otrā galā (pie sensora mikrenes) no sāls salaidīs uz īso.....

Bet vispār man jau ieteica dažus risinājumus
Питание на каждый выносной датчик через 500ом-1к (чтобы не закоротило все, когда соль замкнет провод). Это тебе поможет в увеличении помехоустойчивости.

Просто закоротки, ты так не устранишь. Надо между контроллером и датчиками ставить любой аналоговый мультиплексер, и управление им, на GPIO контроллера. Тогда закоротка одного датчика не повлияет на другие.
Bet tas otrais variants ar multipleksoriem šķiet jau pārāk sarežģīs to visu padarīšanu... tad jau neredzu īpaši lielus labumus no tās I2C.
bet būs vēl viss kārtīgi jaizštuko un jāpapēta komponentu izmaksas un savienošanas sarežģītību.
briedis
Reģistrētie lietotāji
Atbildes: 493
Pievienojies: Cet Jan 15, 2009 12:18 pm
Atrašanās vieta: Riga, centrs
Vecums: 38

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt briedis » Otr Jūl 27, 2010 3:49 pm

Beidzot ir atrasts mazliet brīvs laiks, lai paturpinātu Arduino kontroliera projektu. Izdomāju, ka jāuztaisa taimeris. Pamatā tiks izmantots gaismām, bet var arī pieslēgt jebkuru citu iekārtu, jo dators tikai ieslēdz/izslēdz strāvu ligzdā.

Vēl nepieciešams salodēt releju kasti ar rozetēm. Arduino padod 5v strāvu brīvi izvēlēta digitālajā I/O ligzdā.


Vispirms iedodam pamat vērtības, 42 - digitālās ligzdas numurus; time_on_aqua_light_1 = iekārtas x ieslēgšanās laiks, Timer_time = pašreizējais laiks (stundas * 100 + minūtes). Piemēram, ja tagad ir 15:24 tad timer_time būs 1524.

const int aqua_light_1 = 42;   
int time_on_aqua_light_1 = 1511;
int time_off_aqua_light_1 = 1510;
int timer_time = 0;

Tālāk iestatījumu sadaļa. Nodefinējam, ka ligzda "aqua_light_1" ir izeja (jebkuru ligzdu var izmantot gan kā ieeju, gan izeju un to var mainīt arī programmas laikā). Tālāk seko laika sinhroizēšana, lai dators zin atskaites punktu.

void setup()
{
  pinMode(aqua_light_1, OUTPUT);
  setSyncProvider(RTC.get);  // the function to get the time from the RTC
  if(timeStatus()!= timeSet)
    GLCD.Puts("Unable to sync Time");
  else
    GLCD.Puts("Time set");     
  delay(1500);
  GLCD.ClearScreen();
}


Izveidota atsevišķa funkcija, kas ieslēdz vai izslēdz strāvu ligzdā. Pirms tam pārbaudot vai ligzdas stāvoklis nav tāds pats kā programma vēlas uzstādīt. Šo funkciju var aizstāt ar jau iebūvētu "fīču" digitalwrite, bet man ir paredzēts ka pie ligzdas statusa maiņas informācija tiks nodota arī uz LCD un iespējams arī ierakstīta logā. Kā arī, lai izķertu kļūdas, ja programmas kods būs pareizi uzrakstīts, tad sistēma nekad negribēs uzstādīt ligzdas statusu tādu kā jau ir, un tad var uztaisīt kādu "alertu", vai ierakstīt kļūdu log failā.

void do_stuff(int part_name, int on_off){
  if (digitalRead(part_name) == on_off){
  }
  digitalWrite(part_name, on_off);
}


Tālāk seko Funkcija, kas pārbauda vai nav nepieciešams mainīt laiku, kādam no taimeriem. Funkcijai tiek nodotas trīs vērtības. Ieslēgšanas laiks, izslegšanās laiks un iekārtas nosaukums, lai zinātu kurā ligzdā jāieslēdz/jāizslēdz strāva.

void timer_check(int on_time, int off_time, int part_name){
  timer_time = hour() *100 + minute();
  if (on_time on_time && timer_time = off_time || timer_time = on_time){
        do_stuff(aqua_light_1, HIGH);
      }
    }
    if (digitalRead(part_name)== HIGH){
      if (timer_time >= off_time && timer_time < on_time ){
        do_stuff(part_name, LOW);
      }
    }
  }
}


Nākamās divas rindas ir galvenā programma, kura izpildās reizi sekundē.

void loop() {
  timer_check(time_on_aqua_light_1, time_off_aqua_light_1, aqua_light_1);
  delay(1000);
}



* jebkurā brīdī ieslēdzoties datoram uzreiz notiks pārbaude vai iekārtu ir jāieslēdz vai jāizslēdz un nepieciešamības gadījumā arī mainīs statusu. Parastie timeri statusu spēj mainīt tikai tanī brīdī, kad ir pienācis ieslēgšanas vai izslēgšanas laiks.

* programmas kodu stipri sarežģīja tas, ka gribēju, lai varu timeri uzstādīt arī pēc 24:00. Piemēram, lai var lampu ieslēgt no 9:00 līdz 23:00 un arī no 23:50 līdz 7:00.


p.s. Es neesu programmētājs un mans risinājums noteikti nav pareizākais, ērtākais, bet darbojas :) Ja kādam ir kādi ieteikumi, labojumi, papildinājumi, labprāt dzirdētu Jūsu viedokli.

Ja ir interese varu detalizētāk aprakstīt timer_check funkcijas shēmu.
nbinc
Reģistrētie lietotāji
Atbildes: 1647
Pievienojies: Otr Feb 12, 2008 2:45 pm
Atrašanās vieta: Rīga
Contact:

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt nbinc » Otr Jūl 27, 2010 9:24 pm

Māri, tavā variantā ir izslēgta iespēja manuāli ieslēgt/izslēgt gaismu :(
A kapēc tu tā interesanti to laiku veido (stundas *100 + minūtes), varbūt vienkāršāk minūtes diennaktī skaitīt (stundas *60 + minūtes)? Man liekas kaut kādi saprotamāk, pie tam tad var izmantot standarta funcijas laika apstrādei....

Par savām aktualitātēm varu tik pastāstīt ka tagad strādāju pie vadības ar distances vadības pulti.... šajā gadījumā var iztikt bez reālām pogām uz kontroliera :) ņemam distances vadības pulti un vadām visu ko vajag... kaut vai guļot dīvānā gaismu un sūkņus slēgalējam :) atliek tik IR diodi pieslēgt un atbilstošu bibliotēku (ir jau pieejamas vairākas).
briedis
Reģistrētie lietotāji
Atbildes: 493
Pievienojies: Cet Jan 15, 2009 12:18 pm
Atrašanās vieta: Riga, centrs
Vecums: 38

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt briedis » Otr Jūl 27, 2010 10:47 pm

Godīgi sakot es kaut kā aizmirsu apskatīt iebūtās funkcijas :)
Laiku es reizinu ar 100 tādēl, lai skatoties uz skaitli uzreiz var redzēt cik ir pulkstens. 22:42 ir 2242 nevis 22*60+42 = 1362 un tad ir jāreķina cik tas būs.
Manuālā un automatiskā ieslēgšanās būs.
nbinc
Reģistrētie lietotāji
Atbildes: 1647
Pievienojies: Otr Feb 12, 2008 2:45 pm
Atrašanās vieta: Rīga
Contact:

Re: Arduino - Akvārija vadības kontrolieris (dators)

Atbildēt nbinc » Tr Jūl 28, 2010 12:06 am

Paskaties kādu no laika bibliotēkām, kur jau viss ir sarakstīts, atliek tik izmantot vajadzīgas funkcijas, kaut vai šo te Arduino Time library. Tur jau visi mainīgo tipi ir sarakstīti, atliek tos tik pareizi izmantot/pārveidot datus un skaitīt..... tad arī uz displeja varēs attēlot pareizu laiku.

Vēl viens moments - labāk neizmanto delay(); funkciju, jo tā aptur kontroliera darbību (programmas darbību) uz noteiktu laiku. Tas ir ja tev skaitās taimeris un tu uztaisi delay(1000) tad šo laiku nedarbosies klaviatūra, pieslēgtie sensori, un citi aprēķini. Tad arī ja tu starp tiem delay(); un teimeru aprēķiniem tomēr kaut ko vēl apstrādāsi tad protams ka tev ar laiku tā sekunžu skaitīšana nojuks un ar laiku kāda sekunde tiks izlaista un kāds teimera notikums var tikt izlaists (nu kā piemērs).

Es void loop(); lieku klaviatūras/IR sensora apstrādi un RTC sekošanu, kuri darbojas bez pārtraukumiem un reakcija uz pogu piespiežšanu ir ātrāka.

Kods: Izvēlēties visus

void  loop(){
  ScreenTimer();
  kbhit();
  Sensors();
}
Laiku uz ekrānu izvedu kad no RTC, nolasot datus, mainās sekundes rādītājs (respektivi reizi sekundē atjaunoju pulkseni), vēl pēc citiem skaitītājiem sekoju pēc citiem sensoriem un atjaunoju attiecīgo informāciju uz ekrāna. Teiksim temperatūru reizi 5 sekundēs nolasu un attēloju grafikā, citus sensorus var retāk nolasīt, reizi minūtē, stundā u.t.t.

Par pultīm runājot tad izdevās piedabūt pie normālas "dzīvības" Pioneer pulti, to IR bibliotēkā (šo te izmantoju priekš TSOP1838 IR sensora) atpazīst kā 32 bitu NEC IR komandas, Samsung'a un Lattelekoma TV pultis īsti neatpazīst, bet izdot kaut kādus RAW dampu, kuru pēc idejas varētu atšfrēt un arī detektēt komandas..... pagaidām palikšu pie Pioneer pults, tā man tik un tā 8 devaisus var vadīt, uzkabināšu kontrolieri kā CD atskaņotāju vai videomagnetafonu :). Ar kursoru varēšu pa menu staigāt a ar + vai - iestādīt kādus parametrus.

Ja vajag to TSOP1838 IR sensoru tad varu iedot, es eBay'ā 5 gabalas nopirku.

Kas ir Pieslēdzies

Lietotāji, kuri atrodas šajā forumā: Nav reģistrētu lietotāju un 1 viesis

cron