Vidutinių reikšmių matavimas ir perdavimas į DB

Nerandant metodo, kaip momentines analogines reikšmes versti į apibendrintas (Užduotis: tris sinusoidės absoliučius taškus su X ir Y koordinatėmis transformuoti į sinusoidės amplitudę ir kampinį greitį), supaprastiname užduoties sprendimą ieškodami minimalios ir maksimalios sinusoidės taškų laike ir čia išskaičiuojame jos amplitudę. Matavimo laikas preliminariai imamas lygus vienai sekundei. Ši prielaida siejama su visos sistemos inertiškumu. Nesant jo įvertinimo, laikoma, kad vienos sekundės intervale esminių pokyčių nevyksta. taigi matavimo principas:

Avid ir yra norima žinoti reikšmė. Tai nėra efektyvioji srovės ar įtampos reikšmė, o tik signalo amplitudė. Efektyvioji reikšmė turėtų būti išskaičiuojama pagal formulę:

Aef=Avid/SQRT2

Tai tas pats kaip apskritimo ir tos pačios kraštinės kvadrato plotų santykis. Efektyvioji reikšmė bus perskaičiuojama toliai, neužkraunant Arduino procesoriui matematinių veiksmų su kableliu. Taigi į Arduino kodą įterpiame:

const int MatSkaicius=20;
...
unsigned int A0mom, A1mom, A2mom, A3mom, A4mom, A5mom;
unsigned int A0min, A1min, A2min, A3min, A4min, A5min;
unsigned int A0max, A1max, A2max, A3max, A4max, A5max;
unsigned int A0vid, A1vid, A2vid, A3vid, A4vid, A5vid;
.....
A0max=0; A1max=1; A2max=0, A3max=0; A4max=0, A5max=0;
A0min=1023; A1min=1023; A2min=1023, A3min=1023; A4min=1023, A5min=1023;
for (i=0; i<MatSkaicius; i++) {
  A0mom=analogRead(A0);if (A0mon>A0max) {A0max=A0mom;}; if (A0mon<A0min) {A0min=A0mom;};
  A1mom=analogRead(A1);if (A1mon>A1max) {A1max=A1mom;}; if (A1mon<A1min) {A1min=A1mom;};
  A2mom=analogRead(A2);if (A2mon>A2max) {A2max=A2mom;}; if (A2mon<A2min) {A2min=A2mom;};
  A3mom=analogRead(A3);if (A3mon>A3max) {A3max=A3mom;}; if (A3mon<A3min) {A3min=A3mom;};
  A4mom=analogRead(A4);if (A4mon>A4max) {A4max=A4mom;}; if (A4mon<A4min) {A4min=A4mom;};
  A5mom=analogRead(A5);if (A5mon>A5max) {A5max=A5mom;}; if (A5mon<A5min) {A5min=A5mom;};
}
A0vid=(A0max-A0min)/2;
A1vid=(A1max-A1min)/2;
A2vid=(A2max-A2min)/2;
A3vid=(A3max-A3min)/2;
A4vid=(A4max-A4min)/2;
A5vid=(A5max-A5min)/2;

dat[3]=lowByte(A0vid); dat[4]=highByte(A0vid);
dat[5]=lowByte(A1vid); dat[6]=highByte(A1vid);
dat[7]=lowByte(A2vid); dat[8]=highByte(A2vid);
dat[9]=lowByte(A3vid); dat[10]=highByte(A3vid);
dat[11]=lowByte(A4vid); dat[12]=highByte(A4vid);
dat[13]=lowByte(A5vid); dat[14]=highByte(A5vid);

Taip pat vidurkinami vėjo greičio ir generatoriaus apsisukimo greičio parametrai:

...
unsigned int A0vid, A1vid, A2vid, A3vid, A4vid, A5vid;
unsigned long VGRus, GDAus, VGRusvid, GDAusvid;
...
VGRusvid=0; GDAusvid=0;
...
for (i=0; i<MatSkaicius; i++) {
...
VGRus=VejoGreitis_us/MatSkaicius; VGRusvid=VGRusvid+VGRus;
GDAus=GenDaznis_us/MatSkaicius; GDAusvid=GDAusvid+GDAus;
...
}
...
CH=VGRusvid>>16; CL=VGRusvid;
...
GH=GDAusvid>>16; GL=GDAusvid;
...

Koreguotas visas failas saugomas pavadinimu VejasPociunai.ino
Jį galima rasti ir čia.

Parašykite komentarą