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:
  • 1 Bewertungen - 4 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PID PWM geregelte Lüftersteuerung mit Dallas 18B20
23.08.2014, 13:00 (Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2014 13:01 von Wampo.)
Beitrag #1
PID PWM geregelte Lüftersteuerung mit Dallas 18B20
Hy an alle,

kurze vorstellung meines Mini Projekts.

Ausgangsidee meines Projekts war mein Dolby Digital AV Reciver der in einem Schrank steht, da ich den so gut wie n ganzen tag laufen lasse unter anderem Radio für die Hunde wenn ich mal nicht da bin, hab ich gemerkt das dieser in dem Schrank doch relativ Warm wird. Is ja warscheinlich auch normal. Dennoch will ich niedrigere Temperaturen in dem Teil haben und ein Abtransport der Warmen sich stauenden Luft im inneren kanns ja auch nicht schaden. Da ich aber nicht will das sich der Lüfter immer Vollgas dreht wegen des lauten geräuschs habe ich kurzerhand mir eine PID-PWM Lüftersteuerung zusammengebaut.

Über einen Dallas 18B20 OneWire Temperatursensor wird die Temperatur gelesen und als Input für den PID-Regler genutzt. Der Lüfter fährt mit dieser regelung nicht bei überschreiten der Solltemperatur gleich auf seine MAX Drehzahl sondern er wird Stufenlos langsam über PWM hochgefahren wenn die Temperatur nicht gleich erreicht wird.
Ich nutze einen 12V PC Lüfter mit 4 PIN Molex (Rot: Plus, Schwarz: Masse, Gelb: Tacho und Blau: PWM)
Da diese Lüfter mit PWM gesteuert werden muss in dem Arduino die PWM Frequenz angepasst werden auf 25kHz.

Hier nun der Code, falls jemand Fragen, Wünsche oder Anregungen hat bitte gerne Danke einfach schreiben!!!!

Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#include <PWM.h>
int32_t frequency = 25000; //frequency (in Hz)

#include <OneWire.h>;
#include <DallasTemperature.h>;
#include <PID_v1.h>;

//Definitions
#define FAN 11           // Output pin for fan
#define ONE_WIRE_BUS 8  // Temperature Input is on Pin 2
#define KRITISCH 50.00  //Critical temperature to ignore PID and turn on fans

volatile int tasterLinks = 2;
volatile int tasterRechts = 3;
volatile int irqFlag = 0;

//Setup Temperature Sensor
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//PID SETUP
double Setpoint, Input, Output;                                          //I/O for PID
double aggKp=40, aggKi=2, aggKd=10;                                      //original: aggKp=40, aggKi=2, aggKd=10, Aggressive Turning,50,20,20
double consKp=20, consKi=1, consKd=5;                                    //original consKp=20, consKi=1, consKd=5, Conservative Turning,20,10,10
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, REVERSE);  //Initialize PID


void setup()
{  
  lcd.begin(20,4);

  InitTimersSafe();
  bool success = SetPinFrequencySafe(FAN, frequency);
  
  //Temperature Setup
  sensors.begin();                      
  sensors.requestTemperatures();         // Send the command to get temperatures
  Input = sensors.getTempCByIndex(0);    //Set Input to Current Temperature
  Setpoint = 25.00;                      //Eingestellte Temperatur

  myPID.SetMode(AUTOMATIC);
  
  pinMode(FAN, OUTPUT);       // Output PWM 0-255
  pinMode(2, INPUT); // Pin ist Eingang
  digitalWrite(2,HIGH);
  pinMode(3, INPUT); // Pin ist Eingang
  digitalWrite(3,HIGH);
  attachInterrupt(0, fTasterLinks, FALLING);
  attachInterrupt(1, fTasterRechts, FALLING);
}

void loop()
{
  
   //Temperatur ziehen und als Input für PID nutzen
   sensors.requestTemperatures();
   Input=sensors.getTempCByIndex(0);
  
  //Compute PID value
  double gap = abs(Setpoint-Input); //entfernung zur eingestellten Temperatur
  if(gap < 1)
  {  
    //nah am Setpoint --> KONSERVATIVES REGELN
    myPID.SetTunings(consKp, consKi, consKd);
  }
  else
  {
     //weit weg vom Setpoint --> AGGRESSIVES REGELN
     myPID.SetTunings(aggKp, aggKi, aggKd);
  }
  myPID.Compute();
   pwmWrite(FAN,0);
  //PID Output wenn nicht Kritisch
  if (Input < KRITISCH)
    pwmWrite(FAN, Output);
  else
    pwmWrite(FAN,255);
    
    
switch (irqFlag)
{
case 1:
Setpoint--;
delay(200);
irqFlag=0;
break;

case 2:
Setpoint++;
delay(200);
irqFlag=0;
break;


default:
irqFlag=0; // Reset IRQ flag
}
    
    printing();
}



void printing(){
//LCD Output
  lcd.setCursor(0,0);
  lcd.print("Temp: ");
  lcd.print(Input);
  lcd.print("   ");
  
  lcd.setCursor(0,1);
  lcd.print("Set: ");
  lcd.print(Setpoint);
  lcd.print("   ");
  
  lcd.setCursor(0,3);
  lcd.print("PWM: ");
  lcd.print(Output);
  lcd.print("   ");
}


// Interrupt-Routine Setpoint +
void fTasterLinks()
{
irqFlag = 1;
}

// Interrupt-Routine Setpoint -
void fTasterRechts()
{
irqFlag=2;
}

Greez Wampo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.10.2014, 11:15
Beitrag #2
RE: PID PWM geregelte Lüftersteuerung mit Dallas 18B20
Hallo,
gibt es zu deinem Projekt auch einen Schaltplan ? Ich würde gerne Teile der Steuerung für ein eigenes Projekt verwenden.
Gruß
Jürgen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 16:09
Beitrag #3
RE: PID PWM geregelte Lüftersteuerung mit Dallas 18B20
(23.10.2014 11:15)JuergenH01 schrieb:  Hallo,
gibt es zu deinem Projekt auch einen Schaltplan ? Ich würde gerne Teile der Steuerung für ein eigenes Projekt verwenden.
Gruß
Jürgen

Hab ich doch mein Thread ganz vergessen, ups.

Müsste ich erstellen, ne zeichnung dazu gibts noch nicht. besteht noch interesse???

Greez Wampo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 20:47 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2015 21:23 von Gelegenheitsbastler.)
Beitrag #4
RE: PID PWM geregelte Lüftersteuerung mit Dallas 18B20
Ich bin zwar nicht angesprochen, aber interessiert. Ein paar Fotos vom Displayinhalt wären auch prima.

Mit welcher IDE hast Du das kompiliert? Ich habe die PWM.h und die PID_v1.h herunter geladen und installiert, bekomme aber in der 1.05 und auch in der 1.6.0 Fehler angezeigt. Komischer Weise aber auch dann, wenn ich die Beispiele aus den Libraries aufrufe und versuche, diese zu kompilieren.

Hat jemand eine Idee, wo da der Hase im Pfeffer liegen könnte?

Beispiel PWM_lib_example

Arduino: 1.6.0 (Linux), Platine: "Arduino Nano, ATmega328"

PWM_lib_example.ino:13:17: fatal error: PWM.h: No such file or directory
compilation terminated.
Fehler beim Kompilieren.

anderer Arduino, gleiches Ergebnis:

Arduino: 1.6.0 (Linux), Platine: "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

PWM_lib_example.ino:13:17: fatal error: PWM.h: No such file or directory
compilation terminated.
Fehler beim Kompilieren.


Beispiel PID_basic

Arduino: 1.6.0 (Linux), Platine: "Arduino Uno"

PID_Basic.ino:6:20: fatal error: PID_v1.h: No such file or directory
compilation terminated.
Fehler beim Kompilieren.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 21:33 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2015 21:40 von Wampo.)
Beitrag #5
RE: PID PWM geregelte Lüftersteuerung mit Dallas 18B20
Ich meine mich dunkel dran erinnern zu können das ich den ordner Robot_Controll aus dem Library Ordner rausgezogen hab. Ganz sicher bin ich mir nicht mehr. Kompilliert hab ichs in der 1.0.3 Version!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 21:54
Beitrag #6
RE: PID PWM geregelte Lüftersteuerung mit Dallas 18B20
Ich habe die Robot LIbraries aus dem Ordner raus gezogen. Die Fehler bleiben die selben. Kannst Du Deinen Sketch aktuell fehlerfrei kompilieren? Wenn ja, mit welcher Version aktuell? Falls ja, könntest Du bitte ein ZIP Deiner Librarie Ordner erstellen und hier hochladen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 21:59
Beitrag #7
RE: PID PWM geregelte Lüftersteuerung mit Dallas 18B20
Okay dann war das mit der Robot lib was anderes.

Werde ich machen nur nicht mehr heute, morgen mittag bin ich wieder zuhaus dann stell ichs online Wink

Ja aktuell kann ichs Fehlerfrei kompillieren mit 1.0.3
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 22:10
Beitrag #8
RE: PID PWM geregelte Lüftersteuerung mit Dallas 18B20
Ich habe mir die 1.0.3 raus gesucht. Das Lib Verzeichnis ist das selbe wie bei der 1.0.5. Der Fehler lautet:

PID_Basic:12: error: ‘PID’ does not name a type
PID_Basic.ino: In function ‘void setup()’:
PID_Basic:21: error: ‘myPID’ was not declared in this scope
PID_Basic:21: error: ‘AUTOMATIC’ was not declared in this scope
PID_Basic.ino: In function ‘void loop()’:
PID_Basic:27: error: ‘myPID’ was not declared in this scope

Ich warte dann mal auf Dein ZIP und bin gespannt, ob das klappt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Projektvorstellung Lüftersteuerung für meinen Server DaniDD 0 869 14.06.2016 10:27
Letzter Beitrag: DaniDD
Lightbulb LED Thermometer über WS2812b LED und Dallas DS18B20 Wampo 2 1.724 15.03.2015 17:45
Letzter Beitrag: Wampo
  Lüftersteuerung über Taupunkt daruel 17 10.544 23.08.2014 19:26
Letzter Beitrag: apex

Gehe zu:


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