Show Posts
Pages: 1 ... 6 7 [8] 9 10 ... 18
106  International / Deutsch / Re: Programm blockiert Knöpfe on: September 19, 2013, 12:34:06 pm
Habs hingekriegt.
lag nicht an dem tone sondern an diesem teil:
Code:
else if (900 <=W < 1000 ) {
   mbar = 50;
   if (mb > mbar){
     fade--;
     analogWrite(ledPin, fade);
   }
   if (mb < mbar){
     fade++;
     analogWrite(ledPin, fade);  
   }
   status = 35;
 }

hab da ne status angabe in der if bedingung vergessen.

den alarm sketch wollt ich auch in mein sketch integrieren, aber ich kann folgendes nicht global deklarieren:

Code:
static unsigned long tempZeit;
  unsigned long aktuelleZeit = millis();
  static unsigned long tonBeginn;
  static unsigned long tonDauer;
  static int notenNr;
  Serial.println(aktuelleZeit - tempZeit);

denn kommt kein ton.

Wisst ihr wie ich diesen teil global deklarieren kann?

Übrigens ist mehr aufgefallen das der piezo ja doch sehr leise ist für einen alarm.
Kann man ihn irgendwie lautermachen oder sollte man sich da ein anderes teil holen?
107  International / Deutsch / Re: Programm blockiert Knöpfe on: September 15, 2013, 08:15:30 am
Quote
Ok, habe mir mal das Programm angesehen. Dauert das auslesen der Temperatur-Sensoren nicht ziemliche lange (eventuell mehrere 100ms)? Ich glaube da habe ich was darüber gelesen. Statt das ständig zu wiederholen, reicht es auch das einmal zu machen und dann den abgespeicherten Wert als Vergleich zu nehmen. Anderseits funktioniert das ja anscheinend bei Prog1 und Prog2.

Ich habe keine ahnung wie das mit dem abspeichern geht. Aber ich hatte glaube ich noch keine probleme damit.

Quote
Das mit dem Status lässt sich übrigens schöner mit enums lösen:
enum { PROG1, PROG2, PROG3, AUS } status = PROG1;

Dann kannst du if(status == PROG1) machen und der Variable auch andere Zustände zuweisen die im enum definiert ist. Also "status = PROG2"

Gut mal davon gehört zu haben, danke. Ich brauche aber auch innerhalb der programme die status für den ablauf.

Eigentlich will ich ja einen kleinen alarm mit nem piezo buzzer einbauen, kriegs aber nicht richtig hin.
Es sollen abwelchselde töne vorkommen (wie bei sirene) darf aber kein delay haben.

Kennt da jemand etwas simples?
108  International / Deutsch / Re: Programm blockiert Knöpfe on: September 14, 2013, 02:43:20 pm
eigentlich dürfeten keine delais drinn sein und wenn sollte sie eig. doch nicht laufen.

Die 3 programme bestehen eig nur aus if- bedingungen die von status abhängig sind.

Und da der status standartmäsig auf 10 ist, dürfe ja eig. da nichts laufen. (status 30 und höher bei prog.3)

Was mir aber aufgefallen ist das bei prog.3 ein teil mit piezo buzzer ist:

Code:
else if (sensors.getTempC(Sensor[0]) >= 93 && status == 35) {
   noTone(8); // schalten Ton ab
  tone(8, 4000, 1000); // geben Ton 4000 Hz, Dauer 1000 ms an Pin 9 aus

  noTone(8); // schalten Ton ab
  tone(8, 3000, 1000); // geben Ton 3000 Hz, Dauer 1000 ms an Pin 9 aus
 
   
   status = 36;
 }

...

Code:
void buzz(int targetPin, long frequency, long length)
{
  long delayValue = 1000000/frequency/2;
  long numCycles = frequency * length/ 1000;
 for (long i=0; i < numCycles; i++){
    digitalWrite(targetPin,HIGH);
    delayMicroseconds(delayValue);
    digitalWrite(targetPin,LOW);
    delayMicroseconds(delayValue);
  }
}
109  International / Deutsch / Programm blockiert Knöpfe on: September 14, 2013, 02:27:01 pm
Hallo

ich mir jetzt SSR-Relais geholt(um LCD-Probleme zu beseitigen(klappt wunderbar))
Um sie manuell zu betätigen habe ich noch 4 knöpfe angeschlossen.

ich habe 3 Programmabläufe die ich mit durch Status reguliere( also status 10 = aus, 0=1.programm, 20=2.prog., 30=3.prog.)

die status werden durch andere knöpfe reguliert.

Die programme laufen aber die ganze zeit im loop

Code:
programm1();
  programm2();
  programm3();
  
  
} // endklammer des loops

Nun wollte ich aber das die knöpfe nur regulierbar sind, wenn status 10 ist (status 10 = kein programm).

Mir ist aufgefallen das die knöpfe nicht funktionierten.
Da programm3() das neuste war habe ich es einfach mal aus dem loop rausgenommen und alles klappte wieder wunderbar( prog.1 und 2 blieben weiter im loop)

Nun suche ich nach dem Fehler finde aber keinen.
Warum blockiert programm3 die Relaisknöpfe?

Wenn ich etwas undeutlich formuliert habe(, was warscheinlich so ist) einfach fragen.

Den ganzen sketch habe ich hochgeladen weil er für den post zu groß ist.

Gruß

strohhirn
110  International / Deutsch / Re: SSR relais mit pwm steuern on: August 11, 2013, 10:02:13 am
Ich bin kein "Blockierschleifen-Fetischist" smiley-grin

Mir fehlen nur die fortgeschrittenen kenntnisse mit dem arduino.
Erstmal bin ich mir nichtmal wirklich im klaren was eine Blockierschleife ist geschweige denn wie man sie verhindert.

Meinst du damit das while? Ich möchte nichts blockieren, ich weiß aber keinen anderen weg der das genauso ersetzt.
Wenn ich while durch if ersetze den erkenne ich den wert auf dem lcd garnicht, weil der wert so wild rumspringt.

@guntherb
Code:
switch (Messstatus){
  0:   adc=(MEDIAN-analogRead(ACS_ADC));
        sum2+=(uint32_t)adc*adc;
        n++;
        if (StopTime>millis()) Messstatus = 1;
        break;

  1:   avrg=sqrt(sum2/n);
        n=0;
        I=(float)avrg*5/(K_ACS*1024);
        Messstatus = 0;
        Stoptime = millis()+MEAS_INT
        break;
  }  // end switch

 Regeln();
 Displayrefresh();

} // end loop

void Displayrefresh();{
  static unsigned long displaytimer =0;
  static float last_I = 0;
  if (displaytimer > millis(){
    displaytimer = millis()+333;
    if (abs(I - last_I) > 0.1){
      lcd.setCursor(2, 0);
      lcd.print(I);
      last_I = I;
    }
  }
}// End Displayrefresh

könntest du mir das näher erklären? ich habe den befehl switch noch nie benutzt. nur davon gelesen.
Wie funktioniert das? Kann ich damit diese Blockschleife ersetzen?

Quote
Nur ein Tip zum Display: LCD schreiben kostet Zeit. Schreibe den Text im Display nur einmal (im Setup?) und dann nur noch die Werte.
Wenn man die Displayzugriffe noch mehr minimieren will, dann kann abfragen, ob sich der Anzeigewert überhaupt geändert hat, bevor man in schreibt.
Übrigens danke für den tipp.

Gruß

strohhirn
111  International / Deutsch / Re: SSR relais mit pwm steuern on: August 11, 2013, 08:19:45 am
Och man ich möchte doch einfach nur folgende sketche kombienieren:
Code:
#include <LiquidCrystal.h>

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

LiquidCrystal lcd(39, 41, 43, 45, 47, 49, 51);
int backLight = 53;

void setup() {
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);
  lcd.begin(20, 4);
  lcd.setCursor(0, 0);
  lcd.print("I=");
  analogReference(DEFAULT);
  analogRead(ACS_ADC);
  Serial.begin(9600);
 
}
 
void loop()
{
  Serial.println(analogRead(ACS_ADC));
  uint32_t sum2=0;
  uint16_t n=0;
  uint32_t StartTime, StopTime;
  int16_t adc;
  uint32_t avrg=0xFFFF;
  float I;
 
  StartTime=millis()+1;
  StopTime=StartTime+MEAS_INT;
  while(StartTime>millis());
  while(StopTime>millis())
  {
    adc=(MEDIAN-analogRead(ACS_ADC));
    sum2+=(uint32_t)adc*adc;
    n++;
  }
  if (n>0)
  {
    avrg=sqrt(sum2/n);
  }

  I=(float)avrg*5/(K_ACS*1024);
  lcd.setCursor(2, 0);
  lcd.print(I);
  lcd.print("A   ");
}
und
Code:
// Zum Testen einfach die Board-LED schalten
#define HEIZPIN 13

void setup() {
  Serial.begin(9600);
  pinMode(HEIZPIN, OUTPUT);
}

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;
  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() {
  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);
}

sodass sich beide nicht behindern und zummen funktionieren.

Mit mit dem einen möchte ich jetzt die 3kW heizung regulieren. ich will eine bestimmte leistung halten anstatt einer bestimmten temperatur.
Mit dem anderen sketch möchte ich den Strom der Heizung messen und in watt umrechnen.
Da die heizung jetzt nicht permanent an ist möchte ich während der an-zeit messen und den messwert mit der aktuellen prozentzehl verrechen.

Und das kriege ich nicht hin und bitte um eure hilfe da ihr im programieren mit dem arduino viel erfahrener seit als ich.

Gruß

strohhirn
112  International / Deutsch / Re: SSR relais mit pwm steuern on: August 09, 2013, 09:08:32 am
Quote
Wenn du die whileschleife verwendest, tut der Arduino in dieser Zeit sonst nix, also auch keine Ausgänge schalten.
mit der if konstruktion wird die loop schleife nicht unterbrochen.

Denn springt der wert aber wild hin und her sodass man nichts erkennt. Beeinflusst while denn auch das heizinterval, verzögert es auch da?

Ich will bei der verrechnung eine if bedingung davorsetzen : wenn der heizwert zwischen 10% und 90% soll der wert verrechnet werden.

Nun weiß ich aber nicht wie ich die prozente von  "boolean heizen(byte prozent)" benutze.

Und wie arbeite ich desweiteren mit diesen prozenten? ich möchte den Messwert ja mit der aktuellen prozentzahl verrechen.

Gruß

strohhirn

113  International / Deutsch / Re: SSR relais mit pwm steuern on: August 08, 2013, 12:48:36 pm
Ich habe hier ein sketch für den ACS 712 Stromsensor:
Code:
#include <LiquidCrystal.h>

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

LiquidCrystal lcd(39, 41, 43, 45, 47, 49, 51);
int backLight = 53;

void setup() {
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);
  lcd.begin(20, 4);
  lcd.setCursor(0, 0);
  lcd.print("I=");
  analogReference(DEFAULT);
  analogRead(ACS_ADC);
  Serial.begin(9600);
 
}
 
void loop()
{
  Serial.println(analogRead(ACS_ADC));
  uint32_t sum2=0;
  uint16_t n=0;
  uint32_t StartTime, StopTime;
  int16_t adc;
  uint32_t avrg=0xFFFF;
  float I;
 
  StartTime=millis()+1;
  StopTime=StartTime+MEAS_INT;
  while(StartTime>millis());
  while(StopTime>millis())
  {
    adc=(MEDIAN-analogRead(ACS_ADC));
    sum2+=(uint32_t)adc*adc;
    n++;
  }
  if (n>0)
  {
    avrg=sqrt(sum2/n);
  }

  I=(float)avrg*5/(K_ACS*1024);
  lcd.setCursor(2, 0);
  lcd.print(I);
  lcd.print("A   ");
}

Mit dem kann man Wechselstrom messen der findet den Scheitelpunkt soweit ich verstanden habe jede Sekunde.

Wenn ich vor diese ganze messung, die bedingung das die heizung an ist vorsetzte, findet er denn trotzdem diesen Scheitelpunkt?

114  International / Deutsch / Re: SSR relais mit pwm steuern on: August 07, 2013, 12:03:15 pm
Also wenn ich in der AN-zeit zB. genau 3kW messe muss ich das noch mit der %Zahl verrechen.
33,3% von 3kW = 1kW

Oder wie meinst du das?
 
115  International / Deutsch / Re: SSR relais mit pwm steuern on: August 07, 2013, 11:12:39 am
Achso

Aber wie kann ich denn jetzt in echtzeit die Leistung messen?

Mit meinem ACS 712 dürfte das ja nicht mehr gehen weil es ja nicht permanent an ist.
116  International / Deutsch / Re: SSR relais mit pwm steuern on: August 06, 2013, 01:02:29 pm
Mir ist grad aufgefallen das der sketch doch das gleiche wie PWM ist . das geht doch auch ein und aus

Nun habe ich auf einem anderen Forum gelesen das einer auch eine heizung über PWM steuert, er hat bloß die frequenz von PWM auf 30Hz gesetzt.

Ich habe das gleiche gemacht und es ausprobiert:
Code:
int heizpin = 9;

void setup(){
  int myEraser = 7;             // this is 111 in binary and is used as an eraser
TCCR2B &= ~myEraser;   // this operation (AND plus NOT),  set the three bits in TCCR2B to 0

int myPrescaler = 5;         // this could be a number in [1 , 6]. In this case, 3 corresponds in binary to 011.   
TCCR2B |= myPrescaler;  //this operation (OR), replaces the last three bits in TCCR2B with our new value 011

pinMode(heizpin, OUTPUT);

}

void loop(){
  analogWrite(heizpin, 10);
}

Das ganze habe ich an einer Glühbirne ausprobiert und es klappt, man sieht durch die niedrige frequenz sogar wie sie blinkt, und man sieht auch den leuchtunterschied bei verschiedenen Stufen.

Würde das nicht auch funktionieren?Ist das nicht sogar einfacher? Oder wo könnte da ein Problem auftretten?

Was ich nicht verstehe warum man die frequenz auf 30Hz ändern soll? es klappt auch mit der standart fequenz von 490Hz.

Gruß

strohhirn
117  International / Deutsch / Re: SSR relais mit pwm steuern on: August 05, 2013, 02:08:56 pm
Ich habe den sketch jetzt mal mit einer Glühbirne Ausprobiert.
Mir ist aufgefallen das bei 50% die birne 7sec an und aus ist.
Desweiteren ist mir aufgefallen das man das intervall schlecht varieren kann unter 10sec geht nicht, denn ist sie nur an.

Hab ich das jetzt eigentlich richtig verstanden:
Anstatt die heizung permanent auf 1kW zu halten wird sie im intervall 30% der zeit voll angeschaltet und 70% bleibt sie aus.
Dabei wird die gleiche wärme wie bei permanenten 1kW erzeugt.
Richtig?

Was passiert wenn man das intervall senkt, sodass die heizung schneller an und aus geht? Funktioniert das ganze denn immernoch?

Immerhin kühlt die heizung ja auch ab in der zeit wo sie aus ist.

Gruß

strohhirn
118  International / Deutsch / Re: SSR relais mit pwm steuern on: August 02, 2013, 11:53:28 am
Mit folgendem möchte ich das Heizelement steuern oder halt nur an und ausschaulten.

http://www.ebay.de/itm/290912684178?ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1423.l2649
119  International / Deutsch / Re: SSR relais mit pwm steuern on: August 01, 2013, 02:57:01 pm
Hat er sich ja schon angeschaut. Da hat er zwei noch ein zweites gefunden wo was von Volt steht statt Ampere.

Nun ist er nicht sicher was für eins wir genau brauchen um es per PWM zu steuern.

Quote
Einen PWM-Ausgang nehmen, nen bischen geglättet und als Stromquelle "umgebaut" sollte das zZ laufen.
Allerdings ist hier dann das Tastverhältnis alles andere anls Linear zum Stromfluß.
Aber auch das lässt sich mit einer Übersetzungstabelle o.ä. in den Griff gekommen.

Und meintest du denn jetzt mit PWM signal glätten und so? Ist das wenn man aus dem PWM ein analoges Signal macht?
Wie geht das? Das klingt ziehmlich komplieziert.

Wenn ich das teil bestelle, möchte ich auch wissen das es Funktioniert und wie es funktioniert.

Gruß

strohhirn
120  International / Deutsch / Re: SSR relais mit pwm steuern on: August 01, 2013, 12:01:28 pm
Er kennt sich nur nicht mit diesen SSRs aus und was da sonst noch gibt womit man PWM 3kW Heizelemaente steuern kann.

Und ich kann mir keinen neuen suchen smiley-grin, ich bezahle ihn ja nicht, ist mein Vater.

Gruß

strohhirn
Pages: 1 ... 6 7 [8] 9 10 ... 18