Diskusijos

Zir.lt :: Diskusijos :: Elektronikos technologijos :: Mikrokontroleriai
 
<< Prieš tai buvusi tema | Sekanti tema >>
Fotovoltinės sistemos mppt valdiklis vandens šildymui
Eiti į puslapį  1 2 3 4 5 6 7 8
Moderatoriai: Admin, Adas, Windpower, dziugas, xaker
Autorius Pranešimas
satigis
An Lie 02 2019, 07:14
Užsiregistravęs dalyvis #2272
Prisijungta: Kt Sau 24 2013, 02:17

Vieta: vilnius
Pranešimų: 570
53 psl praktiskai nieko nesiskiria nuo to ka nurodziau/parasiau auksciau

visi tie deltaI deltaV netenka prasmes jei atsiranda nenuspejama matavimo paklaida.
metodai paremti zenklo keitimo + ir - Jei plius didinam PWM jei minus mazinam (ar atvirksciai)
sakysim salygos nepakito visai, bet del matavimo paklaidos deltaI sumazejo 1 vienetu (0.0O.. %). Pasikeicia sakysim deltaI/deltaV zenklas ir programa keliauja kita atsaka ty didina ar mazina PWM uzduotu zingsniu. Nors tam nera jokio reikalo
Visi tie "deltos" reikalingi galutiniam rezultate nustatyti ar jau yra MPPT taskas.
Kas yra tas MPPT ?
Tai toks SB apkrovimas kai I * U = maksimum.
Tai kam spelioti ar jau pikas ar ar ne, zenklu pagalba
"Ukyskas" metodas
Pasikartosiu:
jei padidinus PWM galia P padidejo, keliaujama teisinga kryptim
.....
jei padidinus PWM galia sumazejo, klaidingas kelias, mazinam PWM
jei sumazinus PWM galia padidejo, keliaujam teisinga kriptym
.....
ir tt
toks algoritnas labiau atsparus trugdziam, ir sekamas galutinis rezultatas, o ne burimas is 2 deltu daugybu/dalybu.

P=I*U
deltaP = P - senasP
yra 2 daugykliai I ir U, lyginama galutine verte, kuri, Sakysim I = 10 A (1000 matavimo vienetu), V=100V (1000 matavimo vienetu), I*U = 1 000 000 = P (milionas matavimo vienetu, kontroleris nepavargs operuoti dideliais skaiciais), Ir nesuku numatyti programoje:
jei deltaP, sakysim -1000 < deltaP > 1000 tai primti kaip uz matavimo paklaida/klaida, ignuoruoti, nekeiciant "senasP"

LCD isvedimas, termo davykliu nuskaitymas, mygtuku nuskaitymas ir t t
paprasciausiai organizuojamas per skaidyma programos i lygegrecius procesus,
priklausomai nuo reikalingos operacijos uzimamo laiko.

sakysim, lcd isvedama 1 eilute
nuskaitom mygtukus
Isvedama 2 eilute
nuskaitom I
isvedama 3 eilute
nuskaitom U
ir t t
(cia tik pvz)
LCD turi atminti jei ka

ps
jei tai buvo zinoma, tai patvirtinu tai kas tiesa

pss
pirma parasiau poto perskaiciau:

raimispe rašė ...

Viskas linksta link to kad PWM variklį su MPPT algoritmu reikia daryti ant atskiro PLC , su 100 U,I paėmimo pvz pavyko pasiekti 12ms greitį. Prie to paties ištestavau 16bit UNO taimeri, veikia pwmHR ant 3 DI pino (65K+ stepu gaunasi). Laisvai pasiklysti galima tarp 65K
Visus pribumbasus (manitoringas,distancinis valdymas,T matavimai, RTC reikalai,etc)planuoju palikti Atmega 2560. 700mS+ suryja MQTT bibliotekos , spėtina kad dėl subscribe galimybės.

Kas dėl cilindrų apsaugų ,realizacija dviguba pirmiausia: OneWire termometras , po to termostatas per PLC DI atjungia jėgos kontaktorius. Tie patys kontaktoriai naudojami ir cilindrų perjungimui , aišku PWMengine prieš tai sustabdomas.

Dėl cypimo ant 1000Hz. Cilindrai sklepe, cypimas girdimas priėjus tik kai PWM mažas 10-20proc ribose, pritrauktas nuo 230VAC GE CL00 kontaktorius garsiau burzgia. Neįžvelgiu reikalo ant didesnio dažnio IGBT kaitinti ir tarnavimo resursą ėsti.

Pasikartosiu kad demo versija čia:
informacijos nuoroda
Veikia nuo 2019-03 atsisakius Verinuko klapsiuko (ala analoginio MPPT valdiklio)

...



veltui "vaziuoji" ant pasiulyto verinuko metodo. Vienintelis didelis trukumas, tai temperaturinis koeficientas SB. kitas mazesnis, tai reik pasinaudot viena karta kalkuliatoriumi ir susivesti reiksmes, pasiskaiciuoti MPPT voltaza. Labai nesukiai relizuojamas mikro kontrolerio pagalba.

2 ar 55 kontroleriu naudojimas nepades, Geriau jau 1 galingesni. Jei jau neuztenka to ka turi.

apsaugos
Kontroleryje PWM organizuotas hardvare, pakybus paciai programai PWM gali veikti su 98,75 % tikimybe, ir tie visi onevire ir penkiavire kurie aptarnauja davyklius kabes kaip ..... Galiausia pats davyklis gali iskristi ir nukrysti. Nes jam vat taip uzsinorejo papildoma apsauga labai jau pageidaujama nepriklausoma nuo "aukstu technologiju"

kai PWM mazas 1-5 ar 95-99 % nuo PWM tai tranzas ne speja atsidaryti uzsidaryti ir .... galima ji sekmingai kysti i boileri, sildys geriau nei pats tenas, nuo perkaitimu resursas mazeja o ne nuo kiek kartu on/off padarys.

IGBT dirba simtais kiloherzais ir jam .... O stai pririkti kibira kokybisku elektrolitu iejimui, kai t = RC; kurkas sunkiau nei pakelti dazni iki

void setup() {

// 64 kHz 8 bit
// TCCR1A = TCCR1A & 0xe0 | 1;
// TCCR1B = TCCR1B & 0xe0 | 0x09;

// 31.25 kHz 9 bit
// TCCR1A = TCCR1A & 0xe0 | 2;
// TCCR1B = TCCR1B & 0xe0 | 0x09;

}

arba per time1

[ Redaguota An Lie 02 2019, 10:31 ]
Į viršų
satigis
An Lie 02 2019, 10:21
Užsiregistravęs dalyvis #2272
Prisijungta: Kt Sau 24 2013, 02:17

Vieta: vilnius
Pranešimų: 570
Analog red fonineme rezime A1 - A4, turetu veikti
jei ne veiks .... pabandyk isigilynt kodel

volatile uint32_t sol_volts_tmp; // tarpinis rezultatas
volatile uint32_t sol_amps_tmp;
volatile uint32_t volts_tmp;
volatile uint32_t amps_tmp;

uint16_t sol_volts; // nuo A1 iki A4 analog red
uint16_t sol_amps;
uint16_t volts;
uint16_t amps;

uint8_t analog_ref;

bool trueValue = true; // perjungus analog iejima pirmas matavimas false

byte analogPin;

uint16_t skaitliukas = 1;

uint16_t skaicius = 100; // kiek matavimu padaryti Dabar 100


void setup() {
Serial.begin(57600);
//...............
}


void ADC_init() // registru nustatymas, atramines itampos nustatymas, greitis ir tt Aprasymas ATMEGA datachet
{
ADMUX |= (0 << REFS1);
ADMUX |= (1 << REFS0);

// ADMUX |= (1 << ADLAR);

analog_ref = ADMUX;
ADMUX = analog_ref | (1 & 0x07);

ADCSRA |= (1 << ADPS2);
ADCSRA |= (1 << ADPS1);
ADCSRA |= (1 << ADPS0); // 64

ADCSRA |= (1 << ADATE);
ADCSRA |= (1 << ADIE);
ADCSRA |= (1 << ADEN);
// ADCSRA |= (1 << ADIF);
ADCSRA |= (1 << ADSC);
}

void loop() {

if (skaitliukas >= skaicius) {
read_adc3();
Serial.print("sol_volts = "); Serial.println (sol_volts);
Serial.print(" volts = "); Serial.println (volts);
Serial.print(" sol_amps = "); Serial.println (sol_amps);
Serial.print(" amps = "); Serial.println (amps);
}

//.........
}

void read_adc3() {

sol_volts = sol_volts_tmp / skaicius;
sol_amps = sol_amps_tmp / skaicius;
amps = amps_tmp / skaicius;
volts = volts_tmp / skaicius;

sol_volts_tmp = 0;
sol_amps_tmp = 0;
volts_tmp = 0;
amps_tmp = 0;

skaitliukas = 1;
}



ISR(ADC_vect) {
if (skaitliukas < skaicius && trueValue == true) {

// PORTB |= (1 << 5); // HIGH
// PORTB &= ~(1 << 5); // LOW

trueValue = false;

uint16_t result = ADCL | (ADCH << 8);

if (analogPin == 1) sol_volts_tmp += result;
else if (analogPin == 2) sol_amps_tmp += result;
else if (analogPin == 3) volts_tmp += result;
else if (analogPin == 4) amps_tmp += result;

analogPin += 1;
skaitliukas += 1;

if (analogPin == 5) analogPin = 1;

ADMUX = analog_ref | (analogPin & 0x07); // byte pin = analogPin;

// PORTB |= (1 << 5); // HIGH
// PORTB &= ~(1 << 5); // LOW
}

else {
trueValue = true;
}
}

[ Redaguota An Lie 02 2019, 10:25 ]
Į viršų
raimispe
Tr Lie 03 2019, 10:13
Užsiregistravęs dalyvis #2978
Prisijungta: Kt Bir 27 2019, 09:21

Vieta: Pasvalys
Pranešimų: 25
Joo, matosi kad mano iš vienas tikslų išmokti C+ konstruojant savadarbį MPPT toli gražu nepasiektas.
Tamsus miškas su registrais be to neįsikertu kaip kodas gali veikti LYGEGREČIAI (čia tipo 2 darbus gali daryti vienu metu ?).

Kas dėl dvejopų cilindrų T apsaugų realizacijos valdymo laidai irgi 2. 1-PWM 2-Star/Stop. Jei ką dar cilindro apsaugos termostatą galima i kontaktoriaus ritės grandinę ikalti. Bus trys viso

Dėl dažnio mažinimo problem nera, viskas sumontuota ant suėsto DK bazės 5*240mF 600VDC originalūs konderiai. IGBT ant DK radiatoriaus prisuktas.Ventiliatoriaus net nereikia jungti.

VERINUKO neikiek neapkeliu, palikau visą jėgos dalį iš jo, tik patobulinau IGBT valdymą su optodraiveriu A3150. I šviesdiodžio viršu pasiduoda PWM, i apačia per NPN tranzą 5VDC Start/Stop.

Jei dar yra užsilikusi MPPT bylutė iš senų eksperimentų, prašau idėti čia, bo DARIAUS neina atsisiuti iš 1psl.
Domina PWMengine ir P&O dalys.

SIGIO kaip C+ beveik profo paklausiu gal eina MEGAI padaryti Aref= 2,5 VDC srovės matavimams su ACS712. Vienžo kad nereiktų atiminėti 512 iš 10bit ADC rezultato. Ten prie Isolar=0 A 2,5 VDC tupi išėjime


[ Redaguota Tr Lie 03 2019, 10:28 ]
Į viršų
satigis
Tr Lie 03 2019, 12:17
Užsiregistravęs dalyvis #2272
Prisijungta: Kt Sau 24 2013, 02:17

Vieta: vilnius
Pranešimų: 570
" be to neįsikertu kaip kodas gali veikti LYGEGREČIAI (čia tipo 2 darbus gali daryti vienu metu ?). "

taip
principe taip
kol skaiciuoja ACP, kodas dirba sau, poto pertraukimas, nuskaito reiksme ir gryzta prie programos, ACP vel skaiciuoja nauja reiksme jei taip uzduota. 90-99 % laiko foniniam rezime.
PWM dirba net pakybus programiniam kodui. Paskutine reiksme
DS18B20 (termo) tai aplamai naudoti stadartines bibliotekas "gryna nesamone", vieno daviklio nuskaitimas apie 0.7 s (nepamenu) ir visa ta laika kontroleris tinginiauja.
informacijos nuoroda cia rusu kalba

prisiminiau kodel paklaidos dideles
tai 1 priezasciu pats kontroleris. Kita jau svarbesne, atramine itampa. Reikia statyti VoltConstant isorini. Rezultatas pagereja iskart. ADS1115 turi savo.

As ne profas, pries pora metu atradau, kad yra toks daiktas arduino Labai patiko, o programavimas patinka jau nuo senai. Tai kiek issedejau tiek ir ismokau. Jau supratau kad profisionalus programuotojai tai daro 1000 kartu geriau.

ACS712 - gali iskart ismest - jei kyla abejoniu tai pasijung pazaist ir prinesk prie korpuso koki metalini daikta ar magneta. O apie nulio nustatyma tai ....
Jei naudoji dabar matuoti srove ACS712 tai .... apie kazkoki tiksluma pamirsk.
"Paklaida +/- 0.5 A ir gerai jei puse ampero".
informacijos nuoroda teisingas ivertinimas



Su Mega tai kaip nieko ir nedariau, is principo tas pats arduino tik su daug isejimu, turejau, bet ... pardaviau. Uzteko ir 328P

Sia savaite as neturiu laiko kapstyt archivu, atsiralas laikas - imesiu. Naudokis

[ Redaguota Tr Lie 03 2019, 12:24 ]
Į viršų
satigis
Tr Lie 03 2019, 06:21
Užsiregistravęs dalyvis #2272
Prisijungta: Kt Sau 24 2013, 02:17

Vieta: vilnius
Pranešimų: 570
nuderinau jei susigaudysi gal ir padarysi ka nors
su arduinke veikia, su mega nzn ar veiks

// analogWrite (9, PWMas);
// analogWrite (10, PWMas);

// sol_volts; dabar nuo A1 iki A4 analogRead, foninis
// sol_amps;
// volts;
// amps;

uint16_t maksimumPVM = 511; // 255 arba 511 arba 1023 maksimumPVM // dabar paleista 31.25 kHz 9 bit

uint16_t skaicius = 100; // kiek matavimu padaryti apskaiciuoti vydurkiui

uint8_t zingsnis = 1; // PWM zingsnis 1-255


volatile uint32_t sol_volts_tmp;
volatile uint32_t sol_amps_tmp;
volatile uint32_t volts_tmp;
volatile uint32_t amps_tmp;

uint16_t sol_volts;
uint16_t sol_amps;
uint16_t volts;
uint16_t amps;

uint16_t PWMas;
char plius_minus = 1;

uint8_t analog_ref;

bool trueValue = true; // perjungus analog iejima pirmas matavimas false

byte analogPin;

uint16_t skaitliukas = 1;



void setup() {
Serial.begin(57600);
ADC_init();

// 64 kHz 8 bit
// TCCR1A = TCCR1A & 0xe0 | 1;
// TCCR1B = TCCR1B & 0xe0 | 0x09;


// dabar paleista 31.25 kHz 9 bit

// 31.25 kHz 9 bit
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;

// 1 5625 Hz 10 bit
// TCCR1A = TCCR1A & 0xe0 | 3;
// TCCR1B = TCCR1B & 0xe0 | 0x09;

//...............
}


void loop() {

if (skaitliukas >= skaicius) {

// PORTB |= (1 << 5); // HIGH // tiesioginis portu valdymas dabar 13 koja // galima uzlausti kontroleri pakeitus DX/TX nustatymus
// PORTB &= ~(1 << 5); // LOW

read_adc3();

mppt_test();

Serial.print("PWMas = "); Serial.println (PWMas);
Serial.print("mat.Sk.= "); Serial.println (skaicius);
Serial.print("sol_volts = "); Serial.println (sol_volts);
Serial.print(" volts = "); Serial.println (volts);
Serial.print(" sol_amps = "); Serial.println (sol_amps);
Serial.print(" amps = "); Serial.println (amps);
Serial.println ( );
}
// PORTB |= (1 << 5); // HIGH // tiesioginis portu valdymas dabar 13 koja // galima uzlausti kontroleri pakeitus DX/TX nustatymus
// PORTB &= ~(1 << 5); // LOW
}


void read_adc3() {
sol_volts = sol_volts_tmp / skaicius;
sol_amps = sol_amps_tmp / skaicius;
amps = amps_tmp / skaicius;
volts = volts_tmp / skaicius;

sol_volts_tmp = 0;
sol_amps_tmp = 0;
volts_tmp = 0;
amps_tmp = 0;

skaitliukas = 1;
}


void mppt_test() {
if ((PWMas + zingsnis * plius_minus) <= maksimumPVM) {
PWMas = PWMas + zingsnis * plius_minus;
}
else if ((PWMas + zingsnis * plius_minus) > 10000) { // tikrinama ar ne neigiamas skaicius (perpildytas uint16_t PWMas;)
PWMas = 0;
plius_minus = 1;
}
else if ((PWMas + zingsnis * plius_minus) > maksimumPVM) {
PWMas = maksimumPVM;
plius_minus = -1;
}
set_pwm();
}

void set_pwm() {
analogWrite (9, PWMas);
analogWrite (10, PWMas);
}



void ADC_init() // registru nustatymas, atramines itampos nustatymas, greitis ir tt Aprasymas ATMEGA328 datachet
{
ADCSRA = 0;
ADCSRB = 0;

ADMUX |= (0 << REFS1); // AREF nustatymas
ADMUX |= (1 << REFS0); // AREF

// ADMUX |= (1 << ADLAR); // 8 bit rezultato jei reik

analog_ref = ADMUX;
ADMUX = analog_ref | (1 & 0x07);

ADCSRA |= (1 << ADPS2); // tikslumas/greitis
ADCSRA |= (1 << ADPS1); // tikslumas/greitis
ADCSRA |= (1 << ADPS0); // tikslumas/greitis

ADCSRA |= (1 << ADATE);
ADCSRA |= (1 << ADIE);
ADCSRA |= (1 << ADEN);
// ADCSRA |= (1 << ADIF); // komparatorius
ADCSRA |= (1 << ADSC);
}

ISR(ADC_vect) {
if (skaitliukas < skaicius && trueValue == true) {

trueValue = false;

uint16_t result = ADCL | (ADCH << 8);

if (analogPin == 1) sol_volts_tmp += result;
else if (analogPin == 2) sol_amps_tmp += result;
else if (analogPin == 3) volts_tmp += result;
else if (analogPin == 4) amps_tmp += result;

analogPin += 1;

if (analogPin == 5) {
analogPin = 1;
skaitliukas += 1;
}
ADMUX = analog_ref | (analogPin & 0x07); // byte pin = analogPin;
}

else if (trueValue == false) {
trueValue = true;
}
}
Į viršų
raimispe
Kt Lie 04 2019, 06:50
Užsiregistravęs dalyvis #2978
Prisijungta: Kt Bir 27 2019, 09:21

Vieta: Pasvalys
Pranešimų: 25
Dėkui už kodo fragmentą, jei kas bus neaišku paklausti mokėsiu, ADC registro komandas jau pažiurėjau, nieko blatna nėra ten.

ACS712 visai geras CVM atveju, naudojamas tik galios ir energijos atvaizdavimui.
Net pavyko sukalibruoti nuli 0.1A tikslumu

Atsiprašau už durną klausimą, ką reiškia FONINIS AnalogRead (). Mano kode paimama 50 pvz, sudedama ,padalinama iš 50 taip suskaičiuojamas vdurkis. Ar tokia standartinė procedūra skaitosi foninis?

Dar kartą ačiu už pradžiamokslį

[ Redaguota Kt Lie 04 2019, 06:57 ]
Į viršų
raimispe
Kt Lie 04 2019, 10:36
Užsiregistravęs dalyvis #2978
Prisijungta: Kt Bir 27 2019, 09:21

Vieta: Pasvalys
Pranešimų: 25
Priverčiau UNO biškį greičiau judintis , 200 pvz ciklas gaunasi 5ms. Manau dėl CVM pats tas bus.

ADC prescaleris 16 (77kHz)

void read_data() { // function for reading analog inputs
ADCSRA = 0; // clear ADCSRA register
ADCSRB = 0; // clear ADCSRB register

// sampling rate is [ADC clock] / [prescaler] / [conversion clock cycles]
// for Arduino Uno ADC clock is 16 MHz and a conversion takes 13 clock cycles
//ADCSRA |= (1 << ADPS2) | (1 << ADPS0); // 32 prescaler for 38.5 KHz
ADCSRA |= (1 << ADPS2); // 16 prescaler for 76.9 KHz
//ADCSRA |= (1 << ADPS1) | (1 << ADPS0); // 8 prescaler for 153.8 KHz
ADCSRA |= (1 << ADEN); // enable ADC
ADCSRA |= (1 << ADSC); // start ADC measurements

panelVolts = 0;
for(int i=0;i<100;i++){
panelVolts += analogRead(panelMeter); // read the panel voltage 100 times and add the values together
}
panelAmps = 0;
for(int i=0;i<100;i++){
panelAmps += analogRead(panelAMeter); // read the panel amperage 100 times and add the values together
}

panelVolts = panelVolts/100; // Divide by 100 to get the average value
panelAmps = panelAmps/100; // Divide by 100 to get the average value

[ Redaguota Kt Lie 04 2019, 10:39 ]
Į viršų
satigis
Kt Lie 04 2019, 10:38
Užsiregistravęs dalyvis #2272
Prisijungta: Kt Sau 24 2013, 02:17

Vieta: vilnius
Pranešimų: 570
"foninis" - cia taip as sugalvojau pavadint, greiciau tiktu pav lygegretus

sakysim: (nuoseklus)
vykdoma programa
nuskaitomas AnalogRead () (laukia rezultatu)
vykdoma programa
.....

sakysim: (foninis)
vykdoma programa
komanda nuskaityti AnalogRead()
vykdoma programa
pertraukimas, nuskaito rezultata, komanda nuskaityti AnalogRead()
vykdoma programa
.......

2 atveju viskas vyksta greiciau, jei nereik iskarto naudoti AnalogRead()rezultato
cia taip supaprastintai


ps
for(int i=0;i<100;i++)

kai vyksta for ciklas, vartotojui paspaudus mygtuka, nieko neivyks
"O kodel ? gal paspaust stypriau ?"
Nes pries tai kai dar nebuvo programa cikle.
Mygtukas suregavo ir rezultatas buvo iskarto.


taip ir lauzomi mygtukai

[ Redaguota Kt Lie 04 2019, 10:48 ]
Į viršų
raimispe
Kt Lie 04 2019, 10:45
Užsiregistravęs dalyvis #2978
Prisijungta: Kt Bir 27 2019, 09:21

Vieta: Pasvalys
Pranešimų: 25
Aišku, kad dvieju darbų vienu metu nepadarys.

Viskas suorganizuota paprogramėmis pas mane yra. Bėda kad reikia nuolat palaikyti MQTT klientą kas stabdo visa kitą. Klientas baisingai kaprizingas, nesinori judinti veikiančio kodo.

Bus paprasčiau UNO papildomai uždėti.

Jau biški pramokau su vidinio ADC registrais . Su pertraukimais teks pastudijuoti, nei vieno nera kode.

[ Redaguota Kt Lie 04 2019, 10:58 ]
Į viršų
raimispe
Kt Lie 04 2019, 12:01
Užsiregistravęs dalyvis #2978
Prisijungta: Kt Bir 27 2019, 09:21

Vieta: Pasvalys
Pranešimų: 25
MQTT.h bibliotekoje 500ms timeoutai idėti, reiks pabandyti nagus prikišt, galgi nereiks UNO papildomai.

#define CONNECT_TIMEOUT_MS 6000
#define PUBLISH_TIMEOUT_MS 500
#define PING_TIMEOUT_MS 500
#define SUBACK_TIMEOUT_MS 500

informacijos nuoroda

Klientas pasileidžia skyrelyje void setup() t.y visą laiką online, duomenų perdavimas paprogramėje void publishdata() kas 24sek

[ Redaguota Kt Lie 04 2019, 12:07 ]
Į viršų
raimispe
Pn Lie 05 2019, 08:56
Užsiregistravęs dalyvis #2978
Prisijungta: Kt Bir 27 2019, 09:21

Vieta: Pasvalys
Pranešimų: 25
Gal eitu kaip tai šituos MQTT burtus pertvarkyti, kad greičiau viskas suktusi?

/*************************** Sketch Code ************************************/

void setup() {
Serial.begin(115200);

Serial.println(F("Adafruit MQTT demo"));

// Initialise the Client
Serial.print(F("\nInit the Client..."));
Ethernet.begin(mac);
delay(1000); //give the ethernet a second to initialize


mqtt.subscribe(&onoffbutton);
}

uint32_t x=0;

void loop() {
// Ensure the connection to the MQTT server is alive (this will make the first
// connection and automatically reconnect when disconnected). See the MQTT_connect
// function definition further below.
MQTT_connect();

// this is our 'wait for incoming subscription packets' busy subloop
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(1000))) {
if (subscription == &onoffbutton) {
Serial.print(F("Got: "));
Serial.println((char *)onoffbutton.lastread);
}
}

analogmetering(); ///////////////////vartotojo paprogramės
CVM();
LCDupdating();

MQTTpublishing(){
/////////////////////////////////////////////////////////////Čia yra duomenų siuntimo gabaliukas
// Now we can publish stuff!
Serial.print(F("\nSending photocell val ")); /// Realiai yra idėta 10 tokiu gabaliuku kiekvienam kintamajam, X-sas pakeistas pavadinimu
Serial.print(x);
Serial.print("...");
if (! photocell.publish(x++)) {
Serial.println(F("Failed"));
} else {
Serial.println(F("OK!"));
}
}
//////////////////////////////////////////////////////////// Iki šitos vietos
// ping the server to keep the mqtt connection alive
if(! mqtt.ping()) {;
mqtt.disconnect();
}

}

// Function to connect and reconnect as necessary to the MQTT server
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
int8_t ret;

// Stop if already connected.
if (mqtt.connected()) { // čia ištisai tikrinėja ar connected ir grąžina i pradžią (return)
return;
}

Serial.print("Connecting to MQTT... ");

while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
}
Serial.println("MQTT Connected!");
}
Į viršų
raimispe
Pn Lie 05 2019, 09:04
Užsiregistravęs dalyvis #2978
Prisijungta: Kt Bir 27 2019, 09:21

Vieta: Pasvalys
Pranešimų: 25
Visas MQTT kliento per Ethernet pvz čia:
informacijos nuoroda
Į viršų
satigis
Pn Lie 05 2019, 02:34
Užsiregistravęs dalyvis #2272
Prisijungta: Kt Sau 24 2013, 02:17

Vieta: vilnius
Pranešimų: 570
tiesa sakant as cia nieko nesuprantu, nieko tai svelniai pasakyta
is patirties, gal verta siusti kas 3 ar 10 porcija duomenu ar mazynt siunciamu duomenu kieki
Į viršų
raimispe
Sk Lie 07 2019, 02:54
Užsiregistravęs dalyvis #2978
Prisijungta: Kt Bir 27 2019, 09:21

Vieta: Pasvalys
Pranešimų: 25
Tam ir diskutuojame kad sužinoti ką nors naujo.

Ištyriau Megos kodo ciklą gabalais kas tarmozina, ir vualia , jau 45 ms gavosi, iš jo 40 yra analogų 200pvz matavimas.

Abejoju ar bereikia dar turbinti nes poto teks delay() ivedineti prieš PWMvariklį tipo Ki didinti PID žingsniniame reguliatoriuje.

Šiuo metu PWM step didinime yra 1/254, mažinime step= (Usolar-Uref)/2

Mažinime jautrumas Kp šiek tiek per didelis, pastebima autogeneracija prie mažų galiu, reiks pašlifuot dar

Hemarojus buvo čia:

// ping the server to keep the mqtt connection alive
if(! mqtt.ping()) {;
mqtt.disconnect();

T.y MEGA užsiėmė serverio PINGinimu o ne MPPT, nors #define CONNECT_TIMEOUT_MS 6000. Greičiausia čia yra 6000ms o ne sekundės pagal bibliotekos . Duomenys siunčiami kas 24sek, tai maksimumas for free

[ Redaguota Sk Lie 07 2019, 03:09 ]
Į viršų
Eiti į puslapį  1 2 3 4 5 6 7 8  

Persikelti:     Į viršų

Nario spalvos kodas:
Pagrindinis Administratorius, Administratorius, Forumo Moderatorius, Nariai

Sindikuoti šią temą: rss 0.92 Sindikuoti šią temą: rss 2.0 Sindikuoti šią temą: RDF
Powered by e107 Forum System