Arduino Polska Forum
Czujnik SCT013 - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Czujniki (https://forum.arduinopolska.pl/dzial-czujniki)
+--- Wątek: Czujnik SCT013 (/watek-czujnik-sct013)



Czujnik SCT013 - xuwawe - 13-12-2018

Witam,
Ostatnio zakupiłem czujnik natężenia prądu SCT013 . Udało mi się ogarnąć kod na zczytywanie wartości natężenia lecz chciałbym aby mikrokontroler  zaświecił diodą wówczas gdy pobór prądu osiągnie daną wartość i utknąłem w miejscu :/ Dodam, że nie jestem lotny w tych sprawach Tongue

Oto co napisałem:
Kod:
#include <EmonLib.h>

EnergyMonitor emon1;                   // Create an instance
 
void setup()
{  
  pinMode(8, OUTPUT);
  Serial.begin(9600);
  emon1.current(1, 30);             // Current: input pin, calibration.

}
 
void loop()
{
  
double Irms = emon1.calcIrms(1480);  // Calculate Irms only

  if (emon1.calcIrms(1480) == 0.01){
    digitalWrite(8,HIGH);
   }
  else if (emon1.calcIrms(1480) == 0.04){
  digitalWrite(8,LOW);
}
  
  
  Serial.println(emon1.calcIrms(1480));           // Irms
}



RE: Czujnik SCT013 - Robson Kerman - 13-12-2018

Być może zmienna Irms osiąga założoną wartość, ale moment w którym ją osiąga nie jest współbieżny czasowo z momentem, w którym program sprawdza ifa. Tak to można obrazowo przedstawić.
Lepiej jest zastosować widełki, (nie znam założeń programu więc improwizuję) coś w stylu:


Kod:
if (emon1.calcIrms(1480) >= 0.01) digitalWrite(8,HIGH);
else if (emon1.calcIrms(1480) >= 0.04) digitalWrite(8,LOW);



RE: Czujnik SCT013 - kaczakat - 14-12-2018

Przy ułamkach nigdy nie stosuj porównania (==), wartość liczby zmiennej takiej jak float i double jest w pewnym stopniu losowa, w szczególności jeśli wykonasz wielokrotnie nawet proste obliczenia użyciem float, to coś co powinno być zgodnie z wiedzą matematyczną 1.25 może być 1.25002 i już równość nie będzie spełniona nigdy. Dodatkowo dla takiego programu jak Twój dobrze jest dobrać histerezę, tak by na granicy działania ledy nie robiły stroboskopu.


RE: Czujnik SCT013 - es2 - 14-12-2018

Widzę, że Arduino libs, ponownie, NIEPOTRZEBNIE używa liczb zmiennoprzecinkowych. To jakaś choroba? Całe to Arduino to chory organizm. Delay, float, String pożerający RAM.
Wywal tą chora bibliotekę EmonLib.h i te kilka linijek napisz porządnie bez użycia float.


RE: Czujnik SCT013 - Smaczek - 14-12-2018

Witam,
Nigdy, przenigdy nie stosuj porównania dla licz innych od całkowitych.