Stránka 2 z 3

Re: Elektromer z arduina

Napsal: 03 zář 2020, 11:55
od Kony

Kód: Vybrat vše

#include <ESP8266WiFi.h>
#include <SPI.h>
#define BUFF_DELKA 255

const char* ssid = "Kony";
const char* password = "heslo";
char server[] = "server.eu"; //URL adresa serveru
char buffer[BUFF_DELKA]; //zásobník na příchozí řetězec
const int analogIn = A0;
int konstanta = 50;

WiFiClient client;

// Promenna s HTTP pozadavkem z prohlizece
String request;

void setup() {
 // Nastartuj seriovou linku, do ktere budu vypisovat provozni informace
 Serial.begin(9600);
  pinMode(D1, OUTPUT);
  pinMode(analogIn, INPUT);

 // Pripojeni k Wi-Fi
 Serial.println();
 Serial.print("Pripojuji k ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);

 // Dokud nejsem pripojeny k Wi-Fi,zapisuj do seriove linky tecky progressbaru
 while (WiFi.status() != WL_CONNECTED) {
 delay(100);
 Serial.print(".");
 }

 // Jsem pripojeny k Wi-Fi a mohu pokracovat
 Serial.println();
 Serial.println("WiFi pripojena!");
}

// Smycka loop se opakuje stale dokola
void loop() {
    // proměnné pro výpočty proudu
     double napeti = 0;
     double napetiRMS = 0;
     double proudRMS = 0;
      napeti = zmerVpp();
      // přepočet napětí na proud
      napetiRMS = (napeti/2.0) *0.707; 
      proudRMS = (napetiRMS * 1000)/konstanta;
      // výpis výsledku na 3 desetinná místa
      Serial.print("Proud: ");
      Serial.print(proudRMS,3);
      Serial.println(" A");
      Serial.print("Odber: ");
      Serial.print((proudRMS*235)-7);
      Serial.println(" W");
     if(client.connect(server, 80)){
        delay(1000);
        client.print("GET http://server/logger_3D.php?spotreba=");
        client.println((proudRMS*235)-7);
        client.println("Host: server.eu");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        delay(1000);
     client.stop();
     }
    if(client.connect(server, 80)){
        delay(1000);
        client.println("GET http://server/3Dzasuvka.php");
        client.println("Host: server.eu");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        delay(1000);

        int inBuffer = 0;

        for(int i = 0; i < BUFF_DELKA; i++){ //vyprázdní buffer
            buffer[i] = '\\0'; //nastaví všechny prvky buffer na znak konce řetězce
        }
        
        while(client.available()){
            buffer[inBuffer] = client.read();    
            inBuffer++;
        }
        
        if(inBuffer == 12){
            if(buffer[0] == '3' && buffer[1] == 'D' && buffer[2] == 'z' && buffer[3] == 'a' && buffer[4] == 's' && buffer[5] == 'u' && buffer[6] == 'v' && buffer[7] == 'k' && buffer[8] == 'a'){
                if(buffer[10] == '1'){
                    digitalWrite(D1, HIGH);
                }
                else{
                    digitalWrite(D1, LOW);
                }
            }
        }
        client.stop();
    
    }
    Serial.println(buffer[10]);
    delay(120000);
}
float zmerVpp()
{
  // proměnné pro měření
  float vysl;
  int napAng;
  int maximum = 0;
  int minimum = 1023;

  unsigned long mezicas = millis();
  // opakování měření po dobu 1 vteřiny
  while((millis()-mezicas) < 1000)
  {
    // načtení hodnoty analogového vstupu
    napAng = analogRead(analogIn);
    // hledání maxima
    if (napAng > maximum) 
    {
      maximum = napAng;
    }
    // hledání minima
    if (napAng < minimum) 
    {
      minimum = napAng;
    }
  }
  // přepočet hodnoty analogového vstupu na napětí
  vysl = ((maximum - minimum) * 20.0)/1023.0;
  return vysl;
 }

Re: Elektromer z arduina

Napsal: 03 zář 2020, 13:02
od ondraN
A máš ten výstup ze senzoru usměrněný? Měl by na něm být signál úměrný procházejícímu proudu, tj. střídavý cca 50Hz.

Re: Elektromer z arduina

Napsal: 03 zář 2020, 13:05
od Kony
aha tak to nevím... :)))) to poznám jak ? nebo spíš jak to udělám ?

Re: Elektromer z arduina

Napsal: 03 zář 2020, 13:11
od ondraN
Stana 12, obrázek Application 4.
A ještě při výpočtu nezapomeň, že pro proud 0A je výstupní napětí rovno polovině napájecího.

Re: Elektromer z arduina

Napsal: 03 zář 2020, 13:28
od Kony
aha, tak to vubec nechapu :))))
vubec nemam tuseni co mam udelat

Re: Elektromer z arduina

Napsal: 03 zář 2020, 13:45
od ondraN
Výstup z toho snímače zapojíš přes diodu v propustném směru. Výstup z diody (katoda) jde na analog. vstup arduina. Mezi ten vstup a zem zapoj kondenzátor 1M (jeden mikrofarad), plus k diodě. Paralelně s kondenzátorem dej rezistor cca 100k.
Pro nastavení, nech si vypsat hodnotu z AD převodníku, když neprochází žádný proud, tu potom musíš od změřéné hodnoty (přímo z převodníku) odečíst. než s ní začneš pracovat.

Re: Elektromer z arduina

Napsal: 03 zář 2020, 13:51
od Kony
hodiš mi to do nakresu zapojeni ? Tak jak to popisujes si to nedokazu predstavit

Re: Elektromer z arduina

Napsal: 03 zář 2020, 13:55
od ondraN
Večer.

Re: Elektromer z arduina

Napsal: 03 zář 2020, 20:25
od ondraN
díval jsem se detailněji na ten kód, a tam je to řešeno vzorkovánim a odečtem maxima a minima, takže usměrnění není třeba. Ale dost se mi nepozdávají ty výpočty

Kód: Vybrat vše

vysl = ((maximum - minimum) * 20.0)/1023.0;
  return vysl;
tady by mělo být správně (pokud je jako reference použito 5V

Kód: Vybrat vše

vysl = ((maximum - minimum) * 5.0)/1023.0;
  return vysl;
tohle je OK

Kód: Vybrat vše

      napetiRMS = (napeti/2.0) *0.707; 
tohle je nějaká kravina

Kód: Vybrat vše

proudRMS = (napetiRMS * 1000)/konstanta;
protože koeficient snímače (20A) je 0,1V/A
mělo by být

Kód: Vybrat vše

proudRMS = napetiRMS * 10.0;
a tady předpokládám, že tu 7 odečítáš, aby ti to bez zátěže ukazovalo 0

Kód: Vybrat vše

Serial.print((proudRMS*235)-7);

Re: Elektromer z arduina

Napsal: 03 zář 2020, 20:45
od Kony
vysl = ((maximum - minimum) * 20.0)/1023.0;
return vysl;

Tu hodnotu 20 jsem upravil ja, aby se to priblizilo k aktualni zatezi...

proudRMS = (napetiRMS * 1000)/konstanta;
Kdyz se podivas na zacatek tak konstanta je 100c takze je to samy jak pises

Tech 7 odecitam abych se prave dostal na 0W bez zateze