Prozessor gesteuerte Vakuumpumpe *projekt*

Hi Forum,

mittlerweilen bin ich auch besitzer einer Vakuumpumpe :) . Nun ist es mir immer irgendwie gegen den
Strich gegangen das dieses Ding die ganze Zeit laufen muss. Find ich unökonomisch und dient der Haltbarkeit
der Pumpe wahrscheinlich auch nicht ? Fertige Schaltungen von FESTO beispielsweise kosten zu viel und deshalb
hab ich mich mal selbst drangemacht.

Vorgaben waren:

-ungefährlich (keine 220V)
-Ausgabe an Display
-Regelbares minimal Vakuum im System
-nicht zu teuer

Aktueller Stand ist ein ATmega32 (Arduino Uno) der alles Steuert (günstig und leicht zu programmieren).
Als Drucksensor wird ein freescale MPX5100DP verwendet, hier habe ich nicht wirklich eine günstige
Alternative gefunden. Dieser funktioniert aber einwandfrei. Die Vakuumpumpe wird über eine Handelsübliche
Funksteckdose geschaltet, gibts ja günstig in jedem Baumarkt. Bischen bling bling darf ja auch nicht fehlen,
darum gibts ein RGB negativ display. Hier kann ich dann auch von weiter weg sofort erkennen ob das
Vakuum noch i.O. ist.

Der Funktionsaufbau steht und sieht folgendermassen aus:
Schaltungsaufbau.jpg

Code:
/*
Pumpensteuerung mittels ATmega328

Drucksensor "Freescale MPX5100DP" 
http://www.freescale.com/files/sensors/doc/data_sheet/MPX5100.pdf

Ausgabe RGB 16x2 negativ Display

Funksteuerung mittels 433Mhz Sender und RCSwitch library 
http://code.google.com/p/rc-switch/
*/


//Bibliotheken
#include <RCSwitch.h>
#include <LiquidCrystal.h>


//Variablen

RCSwitch swpump = RCSwitch();           //Name für Vakuumpumpenschalter(Funksteckdose)

LiquidCrystal lcd(12, 11, 10, 9, 8, 7); //Display initialisierung
int rot = 3;                            //PIN´s RGB
int blau = 6;
int gruen = 5;

int drucksensorpin = 4;                 //PIN des Drucksensors
int potipin = 5;                        //PIN des Vorwahl Potentionmeters
int hysterese = 3;                      // +- Zone in mbar


int drucksensor_raw = 0;                //Sensor Rohdaten
float bar = 0;                          //Variable für Druckausgabe
float min_druck = 0;                    //Vatiable für Vakuum Vorwahl
int zeit = 0;

//#####################################################################################


void setup() {
  
  lcd.begin(16, 2);                     //Display Zeilen, Reihen, RGB
  pinMode(rot, OUTPUT);
  pinMode(gruen, OUTPUT);
  pinMode(blau, OUTPUT);
  
  swpump.enableTransmit(2);             //Pin für 433Mhz Sender
 
}


//#####################################################################################

void loop() {
  
  zeit = millis() / 1000 / 60;         //Berechnung Laufzeit in min.
  
  min_druck = analogRead(potipin);     //Poti auslesen und einstellbereich festlegen
  min_druck = map(min_druck, 0, 1023, 0, 100);
 
  if (min_druck < 2) {                 //Ein/Aus Steuerung bei 2 mbar
   swpump.switchOff(1, 1);
 }
 
  druckberechnung();
  steuerung();
  displayausgabe();

}

//#####################################################################################


void druckberechnung() {                            //Berechnung der Sensor RAW Daten zu !!! KPA !!
  drucksensor_raw = analogRead(drucksensorpin);     //die Umrechnung zu BAR erfolgt bei der Displayausgabe
  bar = map(drucksensor_raw, 39, 1023, 0, 100);
}

//#####################################################################################

void steuerung() {                                 //Steurung der Pumpe und Ausgabe der Displaybeleuchtung

  if ((min_druck-hysterese) == bar) {
    swpump.switchOn(1, 1);
    delay (100);
    swpump.switchOn(1, 1);
  }
  else {
  if((min_druck+hysterese) == bar) {
  swpump.switchOff(1, 1);
  delay(100);
  swpump.switchOff(1, 1);
   }
  }
//---------------------Löschen wenn kein RGB diplay verwendet wid---------------------
  if (bar < 10) {
    analogWrite(gruen, 255); analogWrite(rot, 0); analogWrite(blau, 255);
  } else {
    if (bar > (min_druck - hysterese)) {
    analogWrite(gruen, 0); analogWrite(rot, 255); analogWrite(blau, 255);
    } else {
      analogWrite(gruen, 0); analogWrite(rot, 0); analogWrite(blau, 255);
    } 
  }
//------------------------------------------------------------------------------------
}


//#####################################################################################

void displayausgabe() {                          // Anzeige der Daten im Display

 lcd.setCursor(0, 0);
 if(bar >= 0) {
   lcd.print("BAR:-");
   lcd.print((bar/100),2);
 } 
 else { 
   lcd.println("->KEIN  VAKUUM<-");
 }
 lcd.print("   ZEIT");
 lcd.setCursor(0, 1);
 lcd.print("MIN:-");
 lcd.print(min_druck/100);
 lcd.print("   ");
 lcd.print(zeit);
 delay(300);
}

Im Versuchsaufbau funktioniert alles schon sehr ordentlich.
Wo ich mir noch nicht sicher bin ist wie lange der 9V Block halten wird, falls dieser nicht ausreicht
gibts leider doch ein 9V Netzteil.

Nun was haltet Ihr so davon ? Kosten würden sich auf ca. 30,- bis 35,- € belaufen, je nachdem
was und wo mann halt kauft.

Paar Meinungen aus der Praxis von den Profis wäre nicht schlecht, z.B. wie gross der Hysteres Bereich in
mBar sein sollte usw. Hier fehlt mir einfach die Erfahrung. Da die Pumpe, wie schon öfter diskutiert, ein
Manometer "springen" lässt, müsste mann hier entweder mit einem ausreichendem Ausgleichbehälter arbeiten
oder noch eine Schnittmengen messung in den Code einbauen. Das denke ich wird das grösste noch zu lösende Problem
werden. Was denkt Ihr ?

Gruß

Forrest
 
Code geändert

Code geändert

hab den Code doch mal geändert. Es war mir zu riskant genau die Vorgaben des Drucks zu treffen. Ich denke
da wäre in der Praxis doch öfter mal was durchgerutscht ;). Nun verbraucht das ding zwar mehr Saft, da der
Sender öfter sendet allerdings ist so 100% sicher das er es auch tut, hehe.

Code:
/*
Pumpensteuerung mittels ATmega328

Drucksensor "Freescale MPX5100DP" 
http://www.freescale.com/files/sensors/doc/data_sheet/MPX5100.pdf

Ausgabe RGB 16x2 negativ Display

Funksteuerung mittels 433Mhz Sender und RCSwitch library 
http://code.google.com/p/rc-switch/
*/


//Bibliotheken
#include <RCSwitch.h>
#include <LiquidCrystal.h>


//Variablen

RCSwitch swpump = RCSwitch();           //Name für Vakuumpumpenschalter(Funksteckdose)

LiquidCrystal lcd(12, 11, 10, 9, 8, 7); //Display initialisierung
int rot = 3;                            //PIN´s RGB
int blau = 6;
int gruen = 5;

int drucksensorpin = 4;                 //PIN des Drucksensors
int potipin = 5;                        //PIN des Vorwahl Potentionmeters
int hysterese = 3;                      // +- Zone in mbar


int drucksensor_raw = 0;                //Sensor Rohdaten
float bar = 0;                          //Variable für Druckausgabe
float min_druck = 0;                    //Vatiable für Vakuum Vorwahl
int zeit = 0;

//#####################################################################################


void setup() {
  
  lcd.begin(16, 2);                     //Display Zeilen, Reihen, RGB
  pinMode(rot, OUTPUT);
  pinMode(gruen, OUTPUT);
  pinMode(blau, OUTPUT);
  
  swpump.enableTransmit(2);             //Pin für 433Mhz Sender
 
}


//#####################################################################################

void loop() {
  
  zeit = millis() / 1000 / 60;         //Berechnung Laufzeit in min.
  
  min_druck = analogRead(potipin);     //Poti auslesen und einstellbereich festlegen
  min_druck = map(min_druck, 0, 1023, 0, 100);
 
  if (min_druck < 2) {                 //Ein/Aus Steuerung bei 2 mbar
   swpump.switchOff(1, 1);
 }
 
  druckberechnung();
  steuerung();
  displayausgabe();

}

//#####################################################################################


void druckberechnung() {                            //Berechnung der Sensor RAW Daten zu !!! KPA !!
  drucksensor_raw = analogRead(drucksensorpin);     //die Umrechnung zu BAR erfolgt bei der Displayausgabe
  bar = map(drucksensor_raw, 39, 1023, 0, 100);
}

//#####################################################################################

void steuerung() {                                 //Steurung der Pumpe und Ausgabe der Displaybeleuchtung

  if ((min_druck-hysterese) >= bar) {
    swpump.switchOn(1, 1);
  }
  else {
  if((min_druck+hysterese) <= bar) {
  swpump.switchOff(1, 1);
    }
  }
//---------------------Löschen wenn kein RGB diplay verwendet wid---------------------
  if (bar < 10) {
    analogWrite(gruen, 255); analogWrite(rot, 0); analogWrite(blau, 255);
  } else {
    if (bar > (min_druck - hysterese)) {
    analogWrite(gruen, 0); analogWrite(rot, 255); analogWrite(blau, 255);
    } else {
      analogWrite(gruen, 0); analogWrite(rot, 0); analogWrite(blau, 255);
    } 
  }
//------------------------------------------------------------------------------------
}


//#####################################################################################

void displayausgabe() {                          // Anzeige der Daten im Display

 lcd.setCursor(0, 0);
 if(bar >= 0) {
   lcd.print("BAR:-");
   lcd.print((bar/100),2);
 } 
 else { 
   lcd.println("->KEIN  VAKUUM<-");
 }
 lcd.print("   ZEIT");
 lcd.setCursor(0, 1);
 lcd.print("MIN:-");
 lcd.print(min_druck/100);
 lcd.print("   ");
 lcd.print(zeit);
 delay(300);
}
 

O.J.O.

User
Hallo Forrest,

interessantes Projekt, welches du da angehst. Die Pumpen sind für 24/7 Betrieb ausgelegt. Ich muß mir die Sache mal durch den Kopf gehen lassen, was du da machst...

Ausgleichsbehälter sind nett, braucht man in der Regel aber nicht, sofern das System dicht ist und die Pumpe nicht aus dem allerletzten Konzentrator kam...

Meld mich wieder...
Gruß Ole
 
Hallo Forrest,
mit welcher software programmierst du ???
Mach gerade mir Basecom rum soll mal eine KTW Steuerung geben !!!
Aber alles nicht so einfach als Greenhorn :confused:
Kennst du dich mit Bascom ebenfalls aus ??? und könntest du mal mir dabei helfen ??

Gruß
Thomas
 
Ich dachte schon es interresiert nicht so wirklich jemanden :p
Aktueller Stand der Dinge ist, dass ich momentan ein ordentliches Platinenlayout
erstelle. Sobald das durch ist werde ich weiter berichten. Die Software wird
dann auch nochmal etwas angepasst und ein zusätzlicher Butten für eine weitere
Funktion integriert. Aber alles nach und nach :)

@Smith-mini-plane
Ich mach das mit der Arduino Software http://www.arduino.cc
Hier gibts halt Tutorials wie Sand am Meer und es stellt sich für mich einfacher
dar als andere Compiler. Bin selbst kein C++ Profi aber wenn du dich mit Arduino
anfreunden kannst immer her mit den Fragen, helfe gerne soweit ich es kann.

Grüßla

Forrest
 

HFK

User
Bei weitem nicht so elegant und digital gesteuert hatte ich vor ca. 20 Jahren aus folgenden Komponenten ein Unterdrucksystem gebaut (geht noch und funktioniert auch noch):

Vakuum Pumpe aus einem Audi Türschließsystem (12V), Scheinwerferniveauregulierung per Unterdruck, 5k linear Potentiometer zum abgreifen des Unterdruckwertes, dann Operationsverstärker mit fester Hysterese und wählbarem max. Wert, ein kleines Relais diente der Stromzufuhr an die Pumpe.

Vakuum zwischen min. 0,1 und max. 0,5 bar bei 0,1 bar Hysterese. Flächen etwa bei 0,25-0,3bar, Glas oder Kohlelaminierungen bis 0,5bar.

Der einzige Nachteil war die geringe Mengenleistung, es dauerte recht lange bis alles evakuiert war und es musste gut dicht sein. Jetzt habe ich eine 4 Kolben Laborpumpe mit vorhandener Steuerung, die Unterdruckwerte werden wir vor eingestellt. Die zieht in Sekunden wo früher Minuten zu warten waren.
 
Praxiswerte

Praxiswerte

Hallo Forrest,

hast wahrscheinlich recht mit dem: "... Ich dachte schon es interresiert nicht so wirklich jemanden...".
Aber es gibt eine kleine Schaar von Bastlern und Tüftlern die immer erfreut sind über solche Basteleien.
Besonders deine Umsetzung mit der Funksteckdose hat schon was geniales.
Ich habe vor einigen Jahren auch eine mikroprozessogesteuerte Pumpe mit einem Atmel gebaut (damals war Arduino noch nicht so verbreitet).
Ist von der Konzeption her deinem Aufbau sehr ähnlich, läuft allerdings mit 12V-Pumpen und komplett über ein Steckernetzteil.
In der Software habe ich ein Menü für Werteeinstellungen vorgesehen.

Folgende Werte lassen sich einstellen:
- Solldruck -10...-800hPa
- Hysterese 0...50hPa
- Nullpunktkalibrierung

Ständige / zyklische Aktionen:
- Druckanzeige und Drucküberwachung mit geglätteten Druckwerten (über 5 Werte geglättet)
- bei Werteänderungen Abspeicherung der Werte im EEPROM (wegen mögl. Netzausfall)
- Zeitanzeige: Laufzeit der Pumpe
- Zeitanzeige: Stillstandszeit der Pumpe
- alle 10s wird im Display (kurzzeitig) die Gesamtpresszeit angezeigt
- Laufzeitüberwachung der Pumpe -> Nothalt nach definierter Zeit bei Leckage
- Tastenüberwachung (mit Schnellverstellung bei gedrückt gehaltener Taste)

Über die Werte "Laufzeit" und "Stillstandszeit" der Pumpe kannst Du die Dichtigkeit deines Systems beurteilen.
Beim Aufbau habe ich Druckbehälter verwendet weil das Ganze puffernd wirkt und allzu hektisches Ein/Aus bei kleinen Bauteilen und kleiner Hysterese vermindert.
Wird die Hysterese zu groß eingestellt, "atmet" das Bauteil während des Aushärtevorgangs, was nicht so vorteilhaft ist.
Achja, das analoge Druckmessgerät ist eingebaut weil ich zufällig eines hatte und weil ich meiner Elektronik anfangs nicht traute ;).

Viel Spaß bei der weiteren Entwicklung!
Gruß
Dieter

PA110004.JPG
PA110007.JPG
 

overberg

Vereinsmitglied
Vakuumminderer?

Vakuumminderer?

Hallo zusammen,

ich mache mir auch Gedanken über den Aufbau einer solchen Regelung. Was Ihr da erstellt habt, sieht ja schon sehr gut aus!
Ich fände es allerdings noch sinnvoller, einen "mechanischen" Regler zwischen die Puffertanks und das Bauteil zu schalten:
> Der mechanische Regler regelt das Vakuum auf einen einstellbaren Wert (z.B. 0.3 bar)
> Die Pumpe hat z.B. folgende Schaltpunkte: 0.4 bar ein / 0.8 bar aus
Man hätte dann noch weniger Schaltungen der Pumpe und kein Atmen des Bauteils. Ich habe bislang jedoch keinen passenden Druckminderer (Vakuumminderer?) gefunden. Vielleicht ist so viel Aufwand auch nicht nötig.

Dieter, wie oft schaltet Deine Pumpe denn?

Gruß,
Martin
 
Hi,

ob es so etwas wie einen Druckminderer (für Überdruck) auch für Vakuum gibt (also hohes Eingangsvakuum -> niedriges einstellbares Ausgangsvakuum) und das auf mech. Basis, weiß ich nicht.
Wenn ja, wäre es aber wohl sehr teuer und bei weitem nicht so genau wie die elektronische Unterdruckregelung.
Technisch ist es kein Problem mit dieser einfachen elektronischen Lösung auf 0.1mbar Auflösung zu kommen, praktisch macht es für diese Anwendung aber wenig Sinn.

Bei meiner Vakuumpumpe stelle ich in der Regel so 10mbar Hysterese ein, d.h. wenn ich -400mbar Unterdruck möchte, pumpt die Pumpe bis -410mbar und schaltet dann ab. Bei weniger als -400mbar schaltet sie wieder ein. Wenn ich es schaffe, den Sack schön dicht zu kriegen hat die Pumpe üblicherweise eine Stillstandszeit von 10-12 Minuten und eine Laufzeit von weniger als 1 sek.
Wenn man die Puffertanks größer macht, kann man die Hysterese auch kleiner einstellen ohne das die Pumpe häufiger einschaltet.
Die 10mbar sind also die Druckschwankungen welche das Bauteil "atmen" lassen. Umgerechnet bedeutet das, dass z.B. bei einer Tragflächenhälfte von 75cm X 18cm die Presskraft um 13.5kg schwankt. Das hört sich viel an, ist aber relativ wenig wenn bedenkt, dass die absolute Presskraft welche auf der Fläche lastet, ca. 540kg beträgt (bei -400mbar Unterdruck).

Wenn man mal mit so einer - einfach einstellbaren - Vakuumpumpe gearbeitet hat, möchte man sie eigentlich nicht mehr hergeben.
Nur ein Beispiel:
Wenn ich einen Kern in den Unterdrucksack lege, stelle ich erst mal einen kleinen Unterdruck von -20mbar ein. Der Sack wird leicht evakuiert und man kann schön die Falten ausstreichen und event. das Bauteil noch korrigieren. Wenn alles paßt, kann man Gas geben.
Oder doch noch eines ;) :
Ich habe mal ein (hohles!) Balsavierkantrohr außen mit Glasgewebe beschichtet. Wäre der Unterdruck dabei nicht mit den niedrigen Werten einstellbar gewesen, hätte sich wohl das Rohr verformt oder vielleicht sogar zerstört.
Also, hat schon Vorteile so ein Ding und wenn man ein bischen elektrisch/elektronisches Wissen hat kann man mit dem was Forrest vorgelegt hat und den verschiedenen Bauvorschlägen aus dem Internet sich so etwas zusammenbasteln. Die Kosten sind wirklich überschaubar und für's erste reicht auch eine günstige kleine Membranpumpe.

P8300082s.jpg P8300086s.jpg

Gruß
Dieter
 
Hi Dieter,

schöne Pumpe haste dir da gebaut :)

bin noch über der Platine, aber es wird. Ich habe aktuell das Problem, dass meine Pumpe zuviel Saugt. Soll heissen Sie schiesst schnell
über die Einstellung hinaus. Was würde da helfen? Saugseitig den Durchmesser verkleinern? Für was verbaut Ihr die Ausgleichbehälter ?
Helfen die bei einer sauberen Regelung?

Btw. für die Platine habe ich noch ein zweites Poti vorgesehen damit mann den Wunschdruck und die Hysterese bequem verändern kann.
 
Hi,

danke für das Lob.

Ich habe aktuell das Problem, dass meine Pumpe zuviel Saugt. Soll heissen Sie schiesst schnell
über die Einstellung hinaus. Was würde da helfen? Saugseitig den Durchmesser verkleinern? Für was verbaut Ihr die Ausgleichbehälter ?
Helfen die bei einer sauberen Regelung?
Ich geh die Punkte mal der Reihe nach durch:
a) zu schneller Druckabfall / über die Einstellung schießen
Wenn die Förderleistung (l/min) groß ist und das Volumen des Unterdruckbehälters/Vakuumsacks klein ist, wird in kurzer Zeit eine hohe Druckdifferenz erreicht.
Abhilfe: Ausgleichsbehälter
b) Saugseitig den Durchmesser verkleinern
Würde zwar die Förderleistung der Pumpe reduzieren aber beim Absaugen zu Beginn, wenn der Sack noch voller Luft ist, die benötigte Zeit unnötig erhöhen. Also besser nicht.
c) Für was verbaut Ihr die Ausgleichbehälter
Die Funktion eines Ausgleichbehälter/Druckspeichers ist in etwa vergleichbar mit der Funktion eines (großen Glättungs-) Kondensators in der Elektronik. Der Kondensator glättet Spannungsspitzen indem er Energie aufnimmt und bei Bedarf wieder abgibt. Der Ausgleichbehälter/Druckspeicher bildet ein Zusatzvolumen zu deinem Vakuumsack so das beim Einschalten der (leistungsstarken) Pumpe mehr Volumen abgesaugt werden muß um den gleichen Unterdruck zu erreichen als wenn kein Ausgleichbehälter/Druckspeicher vorhanden wäre.
Anders herum, wenn ein Unterdruck ansteht und irgendwo ist ein kleines Leck über das z.B. 1ml/min Fremdluft angesaugt wird kann man folgendes beobachten:
mit Ausgleichbehälter: der Unterdruck fällt zeitlich langsamer ab
ohne Ausgleichbehälter: der Unterdruck fällt zeitlich schneller ab
d) Helfen die bei einer sauberen Regelung?
Jein, d.h. es kommt auf den Einzelfallfall an.
Ich hole nochmal das Beispiel mit dem Kondensator her. Der Kondensator reduziert die Ripple-Spannung, also die überlagerte Welligkeit auf einer Gleichspannung. Der Ausgleichsbehälter glättet die Unterdruckspitzen beim Anlaufen der Pumpe.
In deinem Fall wäre also ein ausreichend großer Ausgleichsbehälter hilfreich, weil beim Anlaufen der Pumpe der Unterdruck zeitlich langsamer steigt (also nicht über die Einstellung schießt) und die Regelung genug Zeit hat, den aktuellen Druckwert zu messen und die Pumpe ggf. abzuschalten.
So, das war jetzt aber ganz schön viel Gelaber ... ;)

Viel Spaß und Erfolg weiterhin bei deinem Projekt!
Gruß
Dieter

PS.: Kleiner Tipp für billigen Ausgleichsbehälter/Unterdruckspeicher:
Schraubnippel, T-Stück, etwas Schlauch -> fertig! Einfach in die Saugleitung einschleifen.
(Keine Angst, bei den von uns verwendeten Unterdrücken besteht keine Implosiongefahr,
trotzdem ist es ratsam, die Flasche einzuhüllen).

IMG_1579s.jpg
 
Für alle Interessierten hier noch der Schaltplan und das Platinenlayout.

Anregungen und Kritik können noch bis Samstag vormittag angenommen werden :D

Schaltplan.jpg
Platine.jpg

Schöne Fotos gibts dann wieder wenn dat dingens läuft

Gruß

Forrest
 

FamZim

User
Hallo Forrest

Die Anschlüsse der Ripple-Kondensatoren haben einen großen Durchlasswiderstand der die Dämpfung einschränkt.
Das ist weg wenn die Behälter 2 Anschlüße bekommen, je einen zur Pumpe und einen zum Vakuumsack ;)
Dann kann kein Ripple an den Behältern vorbei gesaugt werden ;)

Ein gutes Teil was Du da baust .

Gruß Aloys.
 
Ansicht hell / dunkel umschalten
Oben Unten