Hii all in my project i have two sensors one is temperature and another current sensor. When i am measuring both values through A0 and A1. Current sensor giving correct value but temperature sensor value fluctuating. With out current sensor it is giving correct values. My lcd also fluctuating when current sensor. Here is my sketch.
#include<LiquidCrystal.h>
#include <SoftwareSerial.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
SoftwareSerial modem(9, 10);
#define pulse 7
#define pulse1 6
float current=0;
const int currentPin = A0;
const int sensor = A1;
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 = 510;
int i,Pulse,d=0,m=0,T=0;
float one_pulse=0.3125;
void setup()
{
lcd.begin(16,2);
pinMode(pulse, INPUT_PULLUP);
pinMode(pulse1, INPUT_PULLUP);
Serial.begin(9600);
pinMode(13,OUTPUT);
digitalWrite(13, HIGH);
Serial.println("Ultra Fast Acting Electronic Circuit Breaker for Overload Protection Smart Energy Meter"); //select text mode
modem.begin(9600);
lcd.setCursor(0,0);
lcd.print("Ultra Fast Acting");
lcd.setCursor(0,1);
lcd.print("Switch With Meter");
delay(10000);
}
void loop()
{
int Pulse=0;
float Rupee=0,Unit=0;
while(1)
{
CurrentSense();
T= (5.0 * analogRead(sensor) * 100.0) / 1024;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("T: Units:");
lcd.setCursor(0,1);
lcd.print("Load: ");
// Serial.println(T);
lcd.setCursor(2,0);
lcd.print(T);
lcd.setCursor(12,0);
lcd.print(Unit);
lcd.setCursor(5,1);
lcd.print(current);
d++;
if(!digitalRead(pulse))
{
i++;
Unit=one_pulse*i/1000;
Rupee=Unit*7;
Serial.print("Rupee: ");
Serial.println(Rupee);
Serial.print("pulse ");
Serial.println(Unit);
// while(!digitalRead(pulse));
}
if(d== 24)
{
m++;
d=0;
if(m==1) // sending Msg after every 3 pulse
{
Serial.print("Rupee: ");
Serial.println(Rupee);
Serial.print("Unit: ");
Serial.println(Unit);
modem.println("AT+CMGF=1\r");
delay(10);
modem.println("AT+CMGS=\"\"");
modem.println();
modem.print("Bill Generated for your home");
modem.println();
modem.print("Unit: ");
modem.print(Unit);
modem.print(" Rupee: ");
modem.println(Rupee);
modem.print("\r");
delay(100);//enter longitude value in msg
modem.println((char)26);
Serial.println("MESSAGE SENT");
}
}
if(m==30)
{
m=0;
}
if (current > 0.3)
{
lcd.setCursor(0,1);
lcd.print("High Load Tripped");
digitalWrite(13, LOW);
while(1);
}
if(T>100)
{
lcd.setCursor(0,1);
lcd.print("High Temperature");
digitalWrite(13, LOW);
modem.println("AT+CMGF=1\r");
delay(10);
modem.println("AT+CMGS=\"\"");
modem.println();
modem.println();
modem.print("High Temperature Detected");
modem.print("\r");
delay(100);//enter longitude value in msg
modem.println((char)26);
Serial.println("MESSAGE SENT");
//while(1);
} else {digitalWrite(13, HIGH);}
// delay(1000);
}
}
void CurrentSense()
{
unsigned long currentAcc = 0;
unsigned int count = 0;
unsigned long prevMicros = micros() - sampleInterval ;
while (count < numSamples)
{
if (micros() - prevMicros >= sampleInterval)
{
int adc_raw = analogRead(currentPin) - adc_zero;
currentAcc += (unsigned long)(adc_raw * adc_raw);
++count;
prevMicros += sampleInterval;
}
}
float rms = sqrt((float)currentAcc/(float)numSamples) * (50 / 1024.0);
rms=rms-0.10;
if (rms<0.20)
{
rms=0;
}
current=rms;
}