INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Brennersteuerung
31.01.2014, 22:58 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2014 23:13 von JoeDorm.)
Beitrag #81
RE: Brennersteuerung
Danke Burgi650,

nachdem ich offensichtlich den MEGA Port 53 geschossen habe, könnte ich ihn ja noch anders verwenden, z.B. mit dem 2. LCD-Keypad Shield. Mal sehn.

Würde das Proggi gerne nochmal auf einem UNO aufsetzen aber mit einem I2C-Display 4x20 oder so.
Da sollte es doch ein Beispiel für geben? Ist ein Chinese QC2004A soweit ich das lesen kann.

Würde mir dazu ein paar Tasten noch anstricken wollen.
Sollte vielleicht, falls Speicher ausreicht, auch mit einem NANO gehen??? Hab da noch 2 in der Tüte.

Suche eine passende Box für den Einbau des UNOs mit dem LCD-Keypad Shield.
Kannst Du da was empfehlen?

Was meinst Du?

Gruß Joe
PS: Leider komme ich mit der Boardsuchfunktion hier nicht zurecht :-(
Suchergebnis immer: Nichts gefunden, egal was ich suche.

@Ricardo, lebst Du noch?


Hallo
Hier das Proggi für eine einfache Lambdasteuerung mit dem UNO und dem LSD-Keypad Shield.
Code:
//Sample using LiquidCrystal library
#include <PString.h>
char buf[20]; //String Buffer für PString Methode

#include <Servo.h>  
Servo myServoLambda;  // create servo object to control a servo
double ServoSoll=1.7;
int analogPortLambda = A1; //welchen Port wegen Display?
int portLambdaServoOut = 3;
double myAngle = 0.90;   // Drehwinkel des Servos ca 0-180 Grad
double servoStep = 0.50;  // In-, Dekriminitätswert
int start = 60;
int center = 0;    // 0 Grad
int ende = 90;
double LbdSoll = 1.80; //Voreinstellung
double LbdAbw  = 0.15; //Additions-,Subtraktionswert für Vergleich Lambda
int inp = 0, oldInp = 0; //analog Variable
double lambda; //umgerechneter Wert von inp

#include <LiquidCrystal.h>
// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// define some values used by the panel and buttons
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0);      // read the value from the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
// For V1.1 us this threshold
/*if (adc_key_in < 50)   return btnRIGHT;  
if (adc_key_in < 250)  return btnUP;
if (adc_key_in < 450)  return btnDOWN;
if (adc_key_in < 650)  return btnLEFT;
if (adc_key_in < 850)  return btnSELECT;  */

// For V1.0 comment the other threshold and use the one below:

if (adc_key_in < 50)   return btnRIGHT;  
if (adc_key_in < 195)  return btnUP;
if (adc_key_in < 380)  return btnDOWN;
if (adc_key_in < 555)  return btnLEFT;
if (adc_key_in < 790)  return btnSELECT;  

return btnNONE;  // when all others fail, return this...
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
String str(double d, int nk) {
  PString(buf, sizeof(buf), d, nk);
  return (buf);
}
void setup() {
  setupLambda();
  lcd.begin(16, 2);              // start the library
  lcd.setCursor(0,0);
  lcd.print("Akt. Lambda =   "); // print a simple message
  lcd.setCursor(0,1);
  lcd.print("Serv S=    o=   "); // print a simple message
}

void loop()
{
//lcd.setCursor(9,1);            // move cursor to second line "1" and 9 spaces over
//lcd.print(millis()/1000);      // display seconds elapsed since power-up


//lcd.setCursor(0,1);            // move to the begining of the second line
lcd_key = read_LCD_buttons();  // read the buttons
//lcd.setCursor(0,0);
//lcd.print(str(lcd_key,1)+" "); // print a simple message
switch (lcd_key) {              // depending on which button was pushed, we perform an action
   case btnRIGHT: {
     //lcd.print("RIGHT ");
     break;
     }
   case btnLEFT: {
     //lcd.print("LEFT   ");
     break;
     }
   case btnUP: {
     //lcd.print("UP    ");
     LbdSoll=LbdSoll+0.1;
     if(LbdSoll>5) LbdSoll=5;
lcd.setCursor(7,1);
lcd.print(str(LbdSoll,1)+" "); // print a simple message
     break;
     }
   case btnDOWN: {
     //lcd.print("DOWN  ");
     LbdSoll=LbdSoll-0.1;
     if(LbdSoll<1.1) LbdSoll=1.1;
lcd.setCursor(7,1);
lcd.print(str(LbdSoll,1)+" "); // print a simple message
     break;
     }
   case btnSELECT: {
     //lcd.print("SELECT");
     break;
     }
     case btnNONE: {
     //lcd.print("NONE  ");
     break;
     }
}
lcd.setCursor(7,1);
lcd.print(str(LbdSoll,1)+" "); // print a simple message
  loop2();
  delay(999);
}

void loop2() {
  doProc_Lambda();
   //for(int p=9; p <= 9; p += 1)
/*  int pos;
  for(pos = 10; pos < 170; pos += 1)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    lcd.setCursor(13,0);
    lcd.print(str(pos,0)+"  "); // print a simple message
    //myservo1.attach(p);  // attaches the servo on pin 9 to the servo object
    myServoLambda.write(pos);              // tell servo to go to position in variable 'pos'
    delay(5);                       // waits 15ms for the servo to reach the position
  }

  //for(int p=0; p <= 53; p += 1)
  for(pos = 170; pos>=10; pos-=1)     // goes from 180 degrees to 0 degrees
  {                                
    //myservo1.attach(p);  // attaches the servo on pin 9 to the servo object
    myServoLambda.write(pos);              // tell servo to go to position in variable 'pos'
    lcd.setCursor(13,1);
    lcd.print(str(pos,0)+"  "); // print a simple message
    delay(5);                       // waits 15ms for the servo to reach the position
  }
*/
}



//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void setServoLuft(int intMyAngle) {
  if (intMyAngle < start) intMyAngle = start;
  if (intMyAngle > ende)  intMyAngle = ende;
  myAngle=intMyAngle;
  myServoLambda.write(intMyAngle);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
int calculateLambda() {
  int a_inp=analogRead(analogPortLambda);
  lambda=0;
  center = 90;//60 + (pKwSoll * 2); //test mit je kw 2 Grad mehr Luft, um näher ans Ziel zu kommen
  int range = 80; // + - 90 Grad von center
  start = center - range;
  ende = center + range;
  if (myAngle == 0) // || center != oldCenter)
    myAngle = center;
  lambda = 5.0 / 1023.0;
  lambda = (lambda * (double)a_inp) + 0;
lcd.setCursor(13,0);
lcd.print(str(lambda,1)+" "); // print a simple message
  if (lambda > LbdSoll + LbdAbw && myAngle > start) {
    myAngle = myAngle - servoStep;
  }
  else if (lambda < LbdSoll - LbdAbw && myAngle < ende) {
    myAngle = myAngle + servoStep;
  }
  if(myAngle<start) myAngle=start;
  if(myAngle>ende) myAngle=ende;
lcd.setCursor(13,1);
lcd.print(str(myAngle,0)+" "); // print a simple message
  return(myAngle);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void doProc_Lambda() {
  int inp=int(calculateLambda());
  if (inp != oldInp)
    setServoLuft(inp);
  oldInp = inp;
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void setupLambda() {
  myServoLambda.attach(portLambdaServoOut);  
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Vielleicht hilft es jemandem.
Wenn es gefällt, könnte man den Thread ja mal bewerten ;-)

Unser Projekt Rolleyes http://global-science-circle.net http://global-science-circle.org http://global-science-circle.info UND http://radio-gsc1.info
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2014, 23:48
Beitrag #82
RE: Brennersteuerung
Moin.

Wenn du so ein Display anschliessen willst, kein Thema, aber dann bitte mit einnem I2C-Adapter.

Da gehen dir nur A4 und A5 flöten und die Programmänderungen sind minimalst. Ansonsten verlierst beim Uno oder Nano sinnlos zu viele Pins. Der grosse Unterschied zwischen Nano und Uno ist die Bauform, programmiertechnisch ists das selbe.
Auch der Speicher und so, alles ungefähr ein Abwasch, geht da nur im kleine Details.


Dein Mega ist immer noch zu gebrauchen, wegschmeissen auf keinen Fall.

Martin Luther King sagte am 28 August 1963 :

I have a Dream !!

Ich bin weiter:

I have a Schaltplan !!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.06.2014, 22:58
Beitrag #83
RE: Brennersteuerung
Hallo mal wieder,
zwischenzeitlich hat sich so viel getan, daher habe ich kaum noch Zeit gehabt hier mal reinzuschauen.

Seit damals läuft die Variante mit dem Uno stabil und diese macht nur die Lambdamessung und die Servosteuerung.
Die meiste Zeit ist diese Steuerung aus, und dann hält solange die Servostellung, bis ich wieder Strom auf den Uno gebe.

Nach einiger Überlegung begründe ich die Einstellung weiterer Maßnahmen an diesem Projekt damit, das ich nicht zuviel an der Heizungsanlage nebst Steuerung ändern darf, ohne die Zulassung zu gefährden(Obwohl mir dies eigentlich Wurscht ist, da ich mit einer eigenverantwortlichen Steuerung ja für permanent gute Abgaswerte sorge).

Ich benutze die Steuerung bei Änderung der Pelletmarke, um den besten Luftwert für den Servo zu setzen(Könnte man ja auch ohne Servo manuell machen), oder bei Zufeuerung von Holz, damit das Abgas stets die Abgasvorgabe einhält.
Danach schalte ich grundsätzlich aus und die letzte Servostellung bleibt erhalten.
Vorteil, man spart schlichtweg Strom, weil die Lambdavorwärmung nebst der Elektronik-, und Rechnerkomponenten mehr als 30Watt permanent ziehen.

Habe schon wieder ein neues Projekt, das vielleicht auch andere interessieren könnte: einen Hochleistungs-Rechteckgeneratur zur Erzeugung von Silberkolloid, bei dem man die Taktfrequenz und die Einschaltdauer vorgeben kann.
EIne Variante, mit PPM-Vorgabe, würde eine PPM-Messung mit beinhalten, über deren Funktionsweise ich mir aber nicht im Klaren bin. Falls da jemand was betragen könnte, das wäre super.

Gruß Joe
PS: Ricardo, habe Dich nicht vergessen.

Unser Projekt Rolleyes http://global-science-circle.net http://global-science-circle.org http://global-science-circle.info UND http://radio-gsc1.info
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste