// AC-stromen meten met stroommodule // Zie: http://forum.arduino.cc/index.php?topic=179541.0 const int currentPin = 5; const unsigned long sampleTime = 100000UL; // sample over 100ms, it is an exact number of cycles for both 50Hz and 60Hz mains const unsigned long numSamples = 250UL; // choose the number of samples to divide sampleTime exactly, but low enough for the ADC to keep up const unsigned long sampleInterval = sampleTime/numSamples; // the sampling interval, must be longer than then ADC conversion time const int adc_zero = 515; // relative digital zero of the arudino input from ACS712 (could make this a variable and auto-adjust it) void setup() { Serial.begin(9600); } void loop() { unsigned long currentAcc = 0; unsigned int count = 0; unsigned long prevMicros = micros() - sampleInterval ; boolean allZero = true; while (count < numSamples) { if (micros() - prevMicros >= sampleInterval) { int adc_raw = analogRead(currentPin) - adc_zero; if(abs(adc_raw) > 2) allZero = false; //anders binnen de ruis marge currentAcc += (unsigned long)(adc_raw * adc_raw); ++count; prevMicros += sampleInterval; } } float rms = allZero ? 0 : sqrt((float)currentAcc/(float)numSamples) * (75.7576 / 1024.0); //ampere Serial.println(rms * 230); //ampere -> watt }