l += pow(adc_raw - adc_zero, 2);
You don't want to use pow() here, it uses float, double and is far too slow (it does logarithms, antilogarithms).
long val = adc_raw - adc_zero ;
l += val * val ;
You need to be sampling the waveform at 1000Hz or more for good accuracy so its important
the maths isn't too slow. Lose the delays - if you want to control the timing you should use millis() or
micros() so you can synchronize to a multiple of 50 or 60Hz.
First look at a set of raw values from the sensor to check they are what you'd expect (sample a
bunch into an array, then print out the array, printing out is too slow also). You should see a
clear sinusoidal pattern with the correct amplitude.
Then test your calculation code with known correct raw values to see if the arithmetic is correct.