Arduino MEGA, časté spadnutie a resetovanie

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
byfo
Příspěvky: 25
Registrován: 13 srp 2020, 11:25
Reputation: 0

Arduino MEGA, časté spadnutie a resetovanie

Příspěvek od byfo » 18 zář 2022, 20:14

Ahojte, môžem poprosiť o radu? Aktuálne pracujem na projekte pre solar. Funguje to relativne OK. Mám však teraz trošku problém, arduino padá. Respektíve seká, a ja netuším prečo. Neviem teraz či je to problém toho, že mám zlé kód napísaný, alebo nejak prúd nestíha. Alebo nie je arduino izolované, atď. Senzor prúdu aj rele je napájane z arduina 5V.

Mám rele, jeden half senzor na meranie prúdu a následne mám merač voltov na baterií. Všetko funguje, krásne merá. Akonáhle mi zapne rele, neviem, arduino mi akoby stvrdne v a ďalej nerobí nič, ani nemerá ani nič. Rovnako volty mi ukazuje menšie keď nemám zapnuté relé, ako keĎ relé zapnem. V podstate zamŕza.

Kód: Vybrat vše

#include <AnalogSmooth.h>
int currentAnalogInputPin = A1; 
int calibrationPin = A2;
int analogPin = 6; //analog. pin A6

void loop(){
volty_meranie ();
ampere_meranie();

if (vIN > volty_minimum){ //if podmienka pre zapnutie rele, alebo  vypnutie
  digitalWrite (relay, LOW); // zapni rele, ak je napatie vacisie ako 3,2
} 

}

void volty_meranie (){
float analog = analogRead(analogPin); //číta hodnoty z PINU A8
value = analog; //premenná
vOUT = (value * 5) / 1024.0;

// HODNOTA VOLTOV //
vIN = vOUT / ( R2 / (R1 + R2) );

//Vypísanie v Serial.printe
Serial.print("Voltage: ");
Serial.print(vIN,2);
Serial.println("V");
Serial.println(""); //nový riadok
}

void ampere_meranie(){
  
  while (true){ // [b]while som dal preto, aby mi najskor nameralo, a az ked namerá, aby vypadlo prec[/b]
    if(micros() >= currentLastSample + 200){  /* every 0.2 milli second taking 1 reading */ 
    currentSampleRead = analogRead(currentAnalogInputPin)-analogRead(calibrationPin);                  /* read the sample value including offset value*/
    currentSampleSum = currentSampleSum + sq(currentSampleRead) ;                                      /* accumulate total analog values for each sample readings*/
    currentSampleCount = currentSampleCount + 1;                                                       /* to count and move on to the next following count */  
    currentLastSample = micros();                                                                      /* to reset the time again so that next cycle can start again*/ 
    }
    
    if(currentSampleCount == 4000){  /* after 4000 count or 800 milli seconds (0.8 second), do this following codes*/ 
    currentMean = currentSampleSum/currentSampleCount;                                                /* average accumulated analog values*/
    RMSCurrentMean = sqrt(currentMean);                                                               /* square root of the average value*/
    FinalRMSCurrent = (((RMSCurrentMean /1023) *supplyVoltage) /mVperAmpValue)- manualOffset;         /* calculate the final RMS current*/
    
    if(FinalRMSCurrent <= (625/mVperAmpValue/100)) {FinalRMSCurrent =0;} /* if the current detected is less than or up to 1%, set current value to 0A*/
    
    Serial.print(" The Current RMS value is: ");
    Serial.print(FinalRMSCurrent,decimalPrecision);
    Serial.println(" A ");
    if(currentSampleCount == 4000){
    currentSampleSum =0;                                                                             
    currentSampleCount=0; //anulovanie hodnot cyklu pre dalsie pouzitie
      break;
      }                                
    }
  }
}

Rozmýšlam, nebije sa nejak to arduino pri meraní? Keď mi najskôr meria volty, cez if, a potom meria ampere cez while.. keď napíšem while, tak by mi malo iba danú vec vykonávať nie? nič iné alebo? Používam A1, A2 a A6 PINY. Potom na základe toho zapnem cez digit. pin rele. A vtedy to robí bordel. Delay nepoužívam. Iba milis. Kód som zjednodušil, ide o princíp.


Ak s tým ma niekto väčšie skúsenosti, budem rád, ak ma prosím nasmerujete, či nerobím niečo zle, poprípade ako upravím program tak, aby mal čo najmenej chýb a nesekal, a následne mu pomôže len reset. Snažím sa tomu pochopiť, nesmejte sa mi prosím.

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Arduino MEGA, časté spadnutie a resetovanie

Příspěvek od kiRRow » 18 zář 2022, 20:39

Jdeš po tom docela správně ... arduino samo o sobě nezvládne napájet v praxi nic ... umí to jen tak na stole, hodí se to tak na nějaký to testování něčeho malého. Cokoliv co si veme více proudu jak 50mA tak napájej samostatným zdrojem.
Jestli to chceš řešit i programově, tak mrkni co je to a co umí watchdog. Jsou i hardwarový watchdogy.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Arduino MEGA, časté spadnutie a resetovanie

Příspěvek od ondraN » 19 zář 2022, 09:19

Relé, nebo jiná indukční zátěž, je nejčastější příčina sekání a padání. Buď si aktivuj watchdog, jak navrhoval kiRRow, nebo dej indukční zátěže na oddělený zdroj a spínej přes optočlen.

byfo
Příspěvky: 25
Registrován: 13 srp 2020, 11:25
Reputation: 0

Re: Arduino MEGA, časté spadnutie a resetovanie

Příspěvek od byfo » 19 zář 2022, 17:46

ahojte, dakujem, pomohlo, ano, aj samostatné napajanie aj pes :) dik za ochotu

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 14 hostů