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;
}
}
}
}
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.