Go Down

Topic: Ajuda com sensor de tensão ZMPT101B (Read 175 times) previous topic - next topic

rocborges

Boa tarde.

Pode me dar uma ajuda com relação ao uso do sensor ZMPT101B?

Declarei duas instâncias de medição:

Code: [Select]

#include <EmonLib.h>

EnergyMonitor emon1, emon2;

void setup() {

   lcd.begin(16, 2);
   emon1.voltage(2, volt_cal_entrada1, 1.7);
   emon2.voltage(3, volt_cal_entrada2, 1.7);

void loop() {

  supplyVoltage_entrada1 = medidor_tensao_entrada1();
  supplyVoltage_entrada2 = medidor_tensao_entrada2();


float medidor_tensao_entrada1(){
 
  emon1.calcVI(20,2000);     
   
  float supplyVoltage_entrada1 = emon1.Vrms;
 
  return supplyVoltage_entrada1;
 
}

float medidor_tensao_entrada2(){
 
  emon2.calcVI(20,2000);   
 
  float supplyVoltage_entrada2 = emon2.Vrms;
 
  return supplyVoltage_entrada2;
 
}

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(supplyVoltage_entrada1, tensao_casa_dec);
  lcd.println("V");
  lcd.setCursor(5, 0);
  lcd.print(supplyVoltage_entrada2, tensao_casa_dec);
  lcd.println("V");


Ocorre que com a chamada da função "supplyVoltage_entrada2 = medidor_tensao_entrada2()" comentada o código funciona perfeito com a instância emon1 fazendo a medida certinho.

Quando descomento a instância emon2 as duas leituras são feitas mas o código fica dando umas travadas, como se tivesse com alguma função delay atravancando o processador.

Agradeço quem puder ajudar.
Rodrigo Borges
Vitória-ES-Brasil

bubulindo

Leste a documentação acerca do método calcVI?

O 2000 que passas para dentro desse método são milisegundos e é o máximo tempo que o processador espera para ver a passagem por zero da tensão.

Code: [Select]
  //-------------------------------------------------------------------------------------------------------------------------
  // 1) Waits for the waveform to be close to 'zero' (mid-scale adc) part in sin curve.
  //-------------------------------------------------------------------------------------------------------------------------
  unsigned long start = millis();    //millis()-start makes sure it doesnt get stuck in the loop if there is an error.

  while(1)                                   //the while loop...
  {
    startV = analogRead(inPinV);                    //using the voltage waveform
    if ((startV < (ADC_COUNTS*0.55)) && (startV > (ADC_COUNTS*0.45))) break;  //check its within range
    if ((millis()-start)>timeout) break;
}


Que tens ligado nesse pino? é uma tensão AC?
This... is a hobby.

rocborges

É um valor de tensão ac vinda do sensor ZMPT101B.

Por que será que com uma instância apenas o código não trava?
Rodrigo Borges
Vitória-ES-Brasil

bubulindo

Já experimentaste comentar a primeira instância em vez da segunda como disseste?
This... is a hobby.

Go Up