Show Posts
Pages: 1 ... 4 5 [6] 7 8 ... 18
76  International / Deutsch / Re: Mit ACS 712 Wechselstrom messen on: October 01, 2013, 12:18:02 pm
Ich kenne mich ja nicht aus mit den ganzen formeln, aber mir ist grad die berechnungsformel aufgefallen:

Code:
void einMesswert() {
  long newValue=analogRead(ACS712PIN)-MEDIAN;
  sumMesswerteRMS += newValue*newValue;
  countMesswerte++;
}
Code:
messwert= sqrt(sumMesswerteRMS/countMesswerte); // Effektivwert =  quadratischer Mittelwert

Ist diese formel nicht zur berechneung des Effektivwertes bei sinuswellen?

Der Kemo ist ja ein phasenanschnittregler, wie sich herrausgestellt hat.

Kann man mit dieser formel auch den Effektivwert von angeschnittenen Sinuswellen errechnen?

Ich habe irgendwo mal etwas von einem Anschnittwinkel bei Phasenanschnittreglung gelesen.
77  International / Deutsch / Re: SSR relais mit pwm steuern on: September 29, 2013, 01:21:42 pm
Auf jeden Fall ein großes DANKE für deine mühe. Und vielen dank das du das so gründlich kommentiert hast.
Ich habe natürlich versucht mich damit auseinanderzusetzen wie du das ganze programiert hast, dabei bin ich auf viel befehle gestoßen bin, die ich googeln musste.
Einige habe ich aber habe ich nicht gefunden. Könntest du mir bitte ihre funktion erklären:

Code:
volatile long long sumMesswerteRMS;

Bringt das doppelte long die dopelte speicherkapazität also 64 bits?

Code:
char buffer[45];

Was ist das? was macht es?

Code:
snprintf(buffer,sizeof(buffer),"%d - %ld mV - %ld mA - %ld W",(int)messwert,spannungMV,stromMA, leistungW);
    Serial.println(buffer);

da sind einige sachen drin die ich nicht verstehe wie snprintf.

Code:
+=

Was macht dieser operator?

Code:
lround()

was bewirkt dieser befehl?

Code:
void initTimer2()
{ // Timer-Interrupt für eine Rate von 980 Interrupts pro Sekunde initialisieren
  TCCR2B = (1<<WGM22) | (1<<CS22);
  OCR2A = 254;
  // enable Timer 2 interrupts
  TIMSK2 = (1<<OCIE2A);
}
Code:
ISR(TIMER2_COMPA_vect)

Davon verstehe ich garnichts. Ich weiß ja das ich unerfahren bin mit dem Arduino und mit C++ aber sowas habe ich noch garnicht gesehen. Soweit ich verstanden habe sind diese Interrupts dafür da um aufgaben im hintergrund zu erledigen.

Code:
while (1); // Und eine Endlosschleife bis zum nächsten Reset ausführen

Meinst du mit reset den ganzen arduino reseten, also das ich den heizen() befehl erst nach einem kompleten arduino reset verwenden kann ?

Hab ich das richtig verstanden das dieser sketch auch abweichungen von Sollwert korrigiert?
Also zieht er automatisch bei abweichungen automatisch prozente ab oder fügt welche hinzu.
Also wenn der vom poti eingestelter sollwert 1500W ist der Istwert aber 1600 ist so werden -2,7333333333333333333333333333333% abgezogen richtig?
Oder habe ich da was falsch verstanden mit der regelung?

Nochmal danke das dir für irgendjemanden Zeit nimmst und mit deinem programmierwissen hilfst.
78  International / Deutsch / Re: SSR relais mit pwm steuern on: September 28, 2013, 12:00:13 pm
Wenn es hilft hier ist ein programm wie ich es mit dem kemo umsetzen wollte, aber da ist ja das problem mit dem falschen messungen:
Code:
void programm3() {
 if (sensors.getTempC(Sensor[0]) <= 25.0 && status ==30){  
  digitalWrite(k[0], HIGH);
  
  status = 31;
 }
 else if (sensors.getTempC(Sensor[0]) >= 70 && status == 31) {
   digitalWrite(k[0], LOW);
   status = 32;
   nextMillis = millis() + 5000L;
 }
 else if( (status == 32 && millis() > nextMillis) || (sensors.getTempC(Sensor[0]) >= 25.0 && status ==30) ) {
   digitalWrite(k[1], HIGH);
   digitalWrite(k[2], HIGH);
   digitalWrite(k[3], HIGH);
  
   status = 33;
 }
 else if (mb >= 60 && status == 33) {
   Watt = 950;
   int A = 0;
  if(A==0){  // damit man in der nähe des sollwertes ist, da es mit ++ zu lange dauert
   fade = 100;
   analogWrite(ledPin, fade);
   A++;
  }
    if(W > Watt){ //hier ein der versuch den sollwert zu halten oder an ihn ranzukommen
      fade--;
      analogWrite(ledPin, fade);
    }
    if(W < Watt){ //W ist der gemessene istwert
      fade++;
      analogWrite(ledPin, fade);
    }
  status = 34;
 }
else if ((900 <=W < 1000) && status == 34 ) {
   mbar = 50;
   if (mb > mbar){ // mb ist der gemessene istwert
     fade--;
     analogWrite(ledPin, fade);
   }
   if (mb < mbar){
     fade++;
     analogWrite(ledPin, fade);  
   }
   status = 35;
 }
 else if (sensors.getTempC(Sensor[0]) >= 93 && status == 35) {
  alarmbuzzer();
   status = 36;
 }
 else if (sensors.getTempC(Sensor[0]) >= 97 && status == 36) {
   digitalWrite(k[1], LOW);
   status = 37;
   nextMillis = millis() + 300000L;
 }
 else if( status == 37 && millis() > nextMillis) {
  digitalWrite(k[2], LOW);
    digitalWrite(k[3], LOW);
    analogWrite(ledPin, 0);
    nextMillis = 0;
    fade = 0;
    status = 10; //aus
    lcd.setCursor(10, 3);
    lcd.print("Pr: AUS");
  
 }
}
79  International / Deutsch / Re: SSR relais mit pwm steuern on: September 28, 2013, 11:54:49 am
Mir ist die aufgabe gegeben, das die Heizung eine bestimmte Leistung halten soll nicht Temperatur, ich kann auch nicht sagen wofür.
Das hat alles seine Richtigkeit und ist so gewollt, zerbrecht euch nicht den Kopf darum.

Quote
OK, also hast Du irgendwo eine Manuell-Automatik Umschaltung (z.B. einen Kippschalter mit den zwei Schaltstellungen "Manuell" und "Automatik") und je nach Schaltstellung gibst Du die Soll-Leistung manuell vor, oder sie wird von einem Sensor vorgegeben. In beiden Fällen bekommt also der Arduino einen "Sollwert in Watt" vorgegeben und er soll die Heizung so regeln - trotz gravierender Spannungsschwankungen im 230V-Netz - dass der "Istwert in Watt" möglichst gut mit der Sollwert-Vorgabe übereinstimmt.

Genau im gesamten sketch habe ich nacher 3 programme(algorythmen die einmal ablaufen) die ich per knopfdruck an und ausschalten kann. Dabei wird automatisch die Leistung geregelt zB für 1h 1000W, dabei möchte ich schnellstmöglich den sollwert erreichen, da es mit dem befehl ++ zu lange dauert, und danach soll anhand von den messungen vom ACS712, die durch Netzschwankungen sich verändern können, der Istwert möglichst nah an den Sollwert korigiert werden. Der sollwert kann aber auch eine messung von einem anderen sensor sein, sodass zum beispiel bei einem Drucksensor ein bestimmter druck gehalten wird.

Wenn keins der programme läuft möchte ich die heizleistung trozdem mit einem poti regulieren können. Und mit dem ACS712 den Istwert messen können.
Also soll eigentlich immer gemessen werden. Und bei Netzschwankungen kann ich selbst anhand der messung, am poti die leistung korrigieren.

Quote
Wenn Du eine Regelung möchtest, dann gibst Du die Zielgröße vor (Heizleistung in Watt) und die Stellgröße (Reglerstellung in Prozent) wird von der Regelung festgelegt. Und zwar in einem Feedback-Kreislauf aus der Messung der Regelabweichung (Differenz zwischen vorgegebener Soll-Heizleistung und gemessener Ist-Heizleistung) wird ständig eine neue Reglerstellung ermittelt und eingestellt.

genau sowas will ich, wenn eins der automatischen programme läuft.

bei der manuellen steuerung ist es denk ich mal einfacher wenn ich per hand den gewollten wert korrigiere.
Aber wenn es auch hier möglich ist mit dem poti einen sollwert vorzugeben, das zb solange der poti an einer bestimmten stelle steht auch die leistung entsprechend dem sollwert gehalten wird, dann ist mir natürlich diese variante lieber.
Aber das ist schwieriger zu programmieren zumindest weiß ich nicht wie das gehen soll.

Und ich danke dir jurs natürlich das du so geduldig mir hilfst, und bitte um Verzeihung falls ich mich dumm anstelle.
80  International / Deutsch / Re: SSR relais mit pwm steuern on: September 28, 2013, 04:31:32 am
Quote
Also soll das eine Leistungsregelung werden, bei der Du die einzuhaltende Leistung in Watt vorgibst?

Du hast also am Ende irgendwelche Einstellelemente (von denen Du bisher noch gar nichts geschrieben hast) und gibst damit eine einzuhaltende Leistung manuell vor?

Genau es soll eine Wattzahl gehalten werden.  zB. für 1h  1000W.

Quote
Sagen wir mal Du hast einen "Drehgeber", den drehst Du rechts und ein Sollwert für die Leistung steigt. Und Du drehst den Drehgeber links und der Sollwert sinkt.

der sollwert ist entweder die wattzahl die manuell gegeben wird oder der sollwert hängt von einem anderen sensor ab, denn gebe ich einen ungefähren leistungswert, also heizen(50); und der sollwert hängt den von einer anderen sensormesseung ab die durch die heizung beeinflusst wird.

Quote
Ein LCD-Display zeigt die eingestellte "Soll-Heizleistung" und die aktuell gemessene "Ist-Heizleistung".

Ich würde gerne wenn die wattzahl manuell steueren( also wenn gerade kein algorythmus läuft) mit einem poti der die der in % auf dem LCD angezeigt wird.
Und der gemessene ist-wert soll angezeigt werden.
Deswegen könnte ich ja eine variable mit dem poti skalieren und das dann bei heizen() einsetzen habe ich mir gedacht.
So ungefähr habe ich mir das gedacht:
Code:
int fade = analogRead (poti2);
    fade = map(fade, 0, 1023, 0, 100);
    heizen(fade);
    lcd.print(fade);


81  International / Deutsch / Re: SSR relais mit pwm steuern on: September 28, 2013, 03:55:08 am
Quote
Du möchtest nun kombinieren:
a) eine Funktion zum Einstellen eines Prozentwerts für das Heizen
b) eine Funktion zum Messen der Heizleistung

Genau das möchte ich. Wobei ja eigentlich der Strom gemessen wird und denn in Leistung umgerechnet wird.

Wie verbinde ich denn die beiden sketche wenn nicht so?
Ich möchte den gesamtstrom, wenn der befehl heizen() läuft messen und ihn denn mit den prozenten verrechnen. Wenn der befehl aus ist soll aber trotzdem gemessen werden, also eig. nichts 0,00A oder 0,05A.

Ich will es ertmal mit dem 10sek intervall versuchen, aber ich muss irgendwie die sketche kombiniert bekommen.


Quote
Soll irgendwas "automatisch geregelt" werden?

Ja. zB will ich die prozentzahl in einer if bedingung mit ++ erhöhen können. Da ist mir eingefallen ich könnte ja ne variable deklarieren zB. int P; P=34; und die könnte ich ja denn bei heizen einfügen: heizen(P); so muss ich immer P ändern.

Die Heizung is nicht sofort aufgeheizt aber auch nicht so lange so ca. 3sek oder mehr. Es ist keine Ifrarotheizung oder ein Heizlüfter.



82  International / Deutsch / Re: SSR relais mit pwm steuern on: September 27, 2013, 02:10:10 pm
Das ganze hier ist eine alternative zum kemo, ich hab den nur gelassen weil hier keine  antworter kamen.

Hab versucht das mal jetzt umzusetzen, meinst du das so?:
Code:
#include <LiquidCrystal.h>

// Zum Testen einfach die Board-LED schalten
#define HEIZPIN 13

#define MEDIAN   512
#define MEAS_INT 1000  // 1sec
#define ACS_ADC  A0
#define K_ACS    0.103 //0.0946   //für 20A version


LiquidCrystal lcd(39, 41, 43, 45, 47, 49, 51);
int backLight = 53;
float I;
uint32_t sum2=0;
  uint16_t n=0;
  uint32_t StartTime, StopTime;
  int16_t adc;
  uint32_t avrg=0xFFFF;

void setup() {
  Serial.begin(9600);
  pinMode(HEIZPIN, OUTPUT);
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);
  lcd.begin(20, 4);
  lcd.setCursor(0, 0);
  lcd.print("I=");
  analogReference(DEFAULT);
}

boolean heizen(byte prozent)
// Parameter Prozent der Heizleistung 0 bis 100 (für 0% bis 100% Heizleistung)
// wobei <10 die Heizung komplett aus- und >90 komplett eingeschaltet ist
{
  static unsigned long letztesIntervallStart;
  unsigned long jetztMillis=millis();
  if (jetztMillis-letztesIntervallStart>10000) // alle 10s ein neues Intervall
    letztesIntervallStart=jetztMillis;
   
    I=(float)avrg*5.14/(K_ACS*1024);
    I=(I*prozent)/100; //I wird mit prozent verrechnet
  if (prozent<10) // unter 10% Heizanforderung Heizung abschalten
  {
    digitalWrite(HEIZPIN, LOW);
    return LOW;
  }
  else if (prozent>90) // über 90% Heizanforderung Heizung voll einschalten
  {
    digitalWrite(HEIZPIN, HIGH);
    return HIGH;
  }
  else if (jetztMillis-letztesIntervallStart<100*prozent) // zwischen 10% und 90% des Intervalls heizen
  {
    digitalWrite(HEIZPIN, HIGH);
    return HIGH;
  } 
  else  // Rest des Intervalls Heizung aus
  {
    digitalWrite(HEIZPIN, LOW);
    return LOW;
  } 
}


byte heizLeistung;
void loop() {
  StartTime=millis()+1;
  StopTime=StartTime+MEAS_INT;
  if(StartTime>millis());
  if(StopTime>millis())
  {
    adc=(MEDIAN-analogRead(ACS_ADC));
    sum2+=(uint32_t)adc*adc;
    n++;
  }
  if (n>0)
  {
    avrg=sqrt(sum2/n);
  }
 
  lcd.setCursor(2, 0);
  lcd.print(I);
  lcd.print("A   ");
 
  if (millis()<60000L)
    heizen(10);
  else if (millis()<120000L)
    heizen(20);
  else if (millis()<180000L)
    heizen(50);
  else if (millis()<240000L)
    heizen(70);
  else if (millis()<300000L)
    heizen(90);
  else
    heizen(100);
}

und denn kann ich auch die while-schleifen in if umwandeln ohne das da komische werte rauskommen.Richtig?

Muss da noch ein return I; rein?

Warum geht eigentlich die heizleistung eigentlich nur von 10-90%?
83  International / Deutsch / Re: Mit ACS 712 Wechselstrom messen on: September 27, 2013, 01:01:44 pm
Ich habe kein Energiemessgerät.

Mit dem Nullpunkt hab ich auch rumprobiert, klappt nicht, wird nur schlimmer.

Hab außerdem heute den alten sketch zum messen ohne Kemo ausprobiert, hat ziehmlich präzise geklappt.
Ich kriege bloß nicht die while schleifen ersetzt. Wäre schön wenn du mir noch bei deiner alternative An-Aus.Modulation helfen könntest mit den strom messen.
http://forum.arduino.cc/index.php?topic=180102.45
84  International / Deutsch / Re: SSR relais mit pwm steuern on: September 27, 2013, 11:44:05 am
Ich habe jetzt mal versucht die while schleichfen durch if zu ersetzen und einfach nur den Wert jede sek anzeigen zu lassen.
Wenn nichts an ist klappts ganz gut aber sobalt ich die Heizung(ohne Kemo) einschalte springt der wert wild rum von 1,6A zu 17,9A usw.

Code:
while(StartTime>millis())
  while(StopTime>millis())

Wie kriege ich denn jetzt die blockschleife weg sodass aber immernoch ein richtiger Wert rauskommt.

Und wie kriege ich denn jetzt aus dem Heizung-An-Aus-sketch die prozente raus?
Ich will wenn der Befehl heizen läuft den gesamtstrom der gemessen wird mit den Prozenten vom heiz-sketch verrechen.
Bitte helft mir mit einem sketchbeispiel.
85  International / Deutsch / Re: Mit ACS 712 Wechselstrom messen on: September 27, 2013, 11:17:33 am
Macht euch keine Sorge, das ist 100%ig so gewolt mit der Leistung. Weil die bisherigen Aufzeichnungen (ohne Arduino) auch mit Watt gemessen wurden.

Hab jetzt den sketch ausprobiert von jurs, hab die zu messenden Werte eingetragen (3,5 kW, 237V Netz, 5,14V Arduino).
Die ergebnisse hab ich fotografiert. Sie kommen dem richtigen recht nah. Leider hatte ich heute mein True-RMS messgerät nicht mit, also habe ich es mit dem messwer vom letzten mal verglichen.
Da habe ich auf einer bestimmten stuffe 150V gemessen also 1406W, der sketch gab ungefähr 1220W wieder.
Morgen messe ich nochmal mit dem RMS-gerät.
86  International / Deutsch / Re: Mit ACS 712 Wechselstrom messen on: September 22, 2013, 10:53:42 am
Boah, da hat sich aber echt jemand Mühe gegeben,  danke.

Quote
Deine 3KW Heizung ist wohl auswärts untergebracht.

Ja das ist sie, außerdem muss die Zeit auch mit meinem Elekriker Kolegen übereinstimmen, weswegen es auch Montag nicht geht.

Aber der sketch wird auf jeden Fall getestet, Danke!!!

Kleines problem ist das die ganze Aparatur in einem Firmengebiet liegt und wenn die Betriebe ihre fetten Geräte anschmeißen den sinkt schonmal die Netzspannung um ein paar Volt.

Könntest du mir bitte auch bei deiner Alternative mit der SSR Ein-Aus modulation helfen? Da hat irgendwann keiner mehr geantwortet.
Ich hatte da ja ne Blockschleife, wußte aber nicht wie ich sie wegbekomme ohne das wert schnell rumspringt. Und ich wußte nicht wie ich die Prozente verrechnen sollte da sie nicht global deklariert waren.



87  International / Deutsch / Re: Mit ACS 712 Wechselstrom messen (dringend) on: September 21, 2013, 02:32:00 pm
Danke, den sketch werde ich auf jeden Fall ausprobieren aber frühstens am montag.
88  International / Deutsch / Re: SSR relais mit pwm steuern on: September 21, 2013, 02:28:36 pm
Quote
static int für den messwert und alle x sekunden aktualiesieren mittels der blinkavoiddelay technik millis()

könntest du bitte anhand meines sketches die änderungen vornehmen und mir erklären was sie bewirken?

wird dadurch die blockschleife ersetzt?
89  International / Deutsch / Re: Mit ACS 712 Wechselstrom messen (dringend) on: September 21, 2013, 02:14:10 pm
Danke für die klare Antwort.

Nun will ich es wieder mit dem Vorschlag von jurs mit der SSR Ein-Aus-Modulation versuchen.

Das Thema wurde hier schon besprochen ist aber irgendwann kam keine Antwort mehr.

http://forum.arduino.cc/index.php?topic=180102.45

Das problem war das ich nicht wusste wie man den sketch von Jurs mit dem sketch zum Strom messen kombinieren sollte.

Ich habe im sketch zum strommessen eine blockschleife die bei jeder Messung für mindestens 20 Millisek den ganzen sketch einfriert.

Wenn ich aber aus dem while ein if machte so spang der wert schnell hin und her sodass man nichts erkennen konnte.

Aber dieses Problem will ich denn jetzt weiter auch dem anderen Topic diskutieren.

Gruß

strohhirn
90  International / Deutsch / Re: Mit ACS 712 Wechselstrom messen (dringend) on: September 21, 2013, 01:18:51 pm
Könnte ich bitte eine klare antwort bekommen das der ACS 712(alleine) keinen Strom von Phasenanschnittreglern messen kann.
Pages: 1 ... 4 5 [6] 7 8 ... 18