Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Dual PWM 1215 - Der Sauguino-Klon
#1
Bevor ich hier loslege erst einmal ein ganz dickes Danke schön an Peaceman.

Als Peaceman seine fantastische Sauguino hier vorstellte, wollte ich auch so einen DIY-Punktsauger haben. Die Handarbeit mit der Knosti war für mich auf Dauer nicht das Gelbe vom Ei und eine "professionelle" Waschmaschine weit ausserhalb meiner finanziellen Möglichkeiten.
Ein Arduino-Klon wurde besorgt und ein wenig Literatur zu dem Thema, um mir etwas gefährliches Programmier-Halbwissen anzueignen, damit ich wenigstens einigermaßen verstehe um was es geht und um die Änderungen durchführen zu können die mir so vorschwebten, damit das Plattenwaschen noch luxuriöser wird.

Den defekten Dual 1215 habe ich geschenkt bekommen.  Nachdem ich feststellen musste, dass die Vakuumpumpe die Friedemann benutzt bei Pollin nicht mehr lieferbar ist, war eine Membranpumpe einigermaßen schnell organisiert
Die Membranpumpe, mit einer Förderleistung von 200l/h, stellte sich leider bei der Inbetriebnahme als etwas zu schwach heraus. Ein Bekannter von mir hat mir dann für lau eine Pumpe besorgt, mit der es dann letztendlich doch noch zu einem gutem Ergebnis kam.
Eine Modellbau-Benzinpumpe für die Reinigungsflüssigkeitsdosierung, die Servos und ein paar Kleinteile sind vom großen C.
Die Spannungsversorgung stammt von einem Netzteil aus einem alten externen CD-Brenner und liefert 5V/2A und 12V/1,5A. Die Dinger bekommt man oft in der Bucht für 1€+Versand.
Ein wenig Material kam vom Baumarkt, annsonsten habe ich viel aus meiner Restekiste und aus dem Schrott verwendet.

Das Gehäuse ist aus MDF gedengelt und mit schwarzer Lasur und Parkettlack nicht schön, aber funktionell angepinselt worden.

Im Gegensatz zum Orginal ist die Kiste  nicht so leicht zu transportieren. Das Ding ist "etwas" größer und wiegt knapp über 26Kg.

Investiert habe ich inklusive Fehlkäufe ca. 170 Taler. Die teuerste Einzelanschaffung war mit 30€ die Loricraft-Bürste.




So sieht die Waschmaschine mit geöffneter Klappe von aussen aus.

[Bild: 01qxjte.jpg]


Das Bedienpanel.

[Bild: 02ntkde.jpg]


Der Ar- bzw. Fun-duino auf Lochraster. Links die untaugliche Membranpumpe.

[Bild: 03gckv4.jpg]


Das Bedienpanel von hinten.

[Bild: 04fekbc.jpg]

 
Blick von oben mit neuer Pumpe. Die kleine Platine links dient zur Drehzahlregulierung der Dosierpumpe. Das hätte man auch mit dem Arduino und einem Transistor lösen können, aber die Platine hatte ich halt noch in der Restekiste.

[Bild: 05vljyc.jpg]


Der entkernte und umgetüddelte Dual 1215. Der Tellermotor wird mit einer Kaltgerätebuchse und die Servos mit einem 9-Poligen Sub-D-Stecker angeschlossen, damit man bei Wartungs- bzw. Reparaturarbeiten keine Kabel abklemmen muss.

[Bild: 06crkyt.jpg]


Die Servos für den Lift und den Armantrieb in Nahaufnahme.

[Bild: 07fpjn8.jpg]


Der Bürstenservo. Bei der "90"° Drehung senkt die Bürste sich um ca. 6mm ab.

[Bild: 085akge.jpg]


[Bild: 09hxjyj.jpg]


230V und 12/5V wurden räumlich getrennt.

[Bild: 10wdk9f.jpg]


Die Bürste mit der "Reinigungsflüssigkeitsdosierleitung".

[Bild: 11b4ket.jpg]


Die Bürste ist schwimmend gelagert und kann zum Reinigen einfach herrausgenommen werden.

[Bild: 12dqj1e.jpg]


Die Saugdüse. Ein Messingröhrchen aus dem Modellbau mit einer Silikontülle. Funzt einwandfrei auch ohne Faden.

[Bild: 13ehkku.jpg]


Und nun die bewegten Bilder mit musikalischer Unterhaltung.




Den geänderten Spaghetti-Code und den Schaltplan kann ich bei Bedarf gerne hier posten. Mit dem Schaltplan kann es allerdings etwas dauern, da ich den erst malen muss.


Gruß, Ralf
veni, vidi, violini - ich kam, ich sah, ich vergeigte es
Zitieren
#2
Ganz großes Kino!
Schluss mit den Tierversuchen, lasst die Sau raus!
[-] 1 Mitglied sagt Danke an setzi für diesen Beitrag:
  • Ralph
Zitieren
#3
Toll gemacht. Bin beeindruckt. Thumbsup  Nur die Musik in Video .... UndWeg
Gruß aus den Weinviertel
Markus
[-] 3 Mitglieder sagen Danke an applecitronaut für diesen Beitrag:
  • Ralph, xs500, Jörgi
Zitieren
#4
Supergerät, Deine PWM (und ich fand auch schon die von Peaceman großartig)!  Thumbsup
Absolut top!  Pray

(Die Musik im Video war ganz interessant, höchstens ein bisschen melodiearm. Welche Band ist denn das?)

Beste Grüße
Nigel
...sozialisiert in den 80ern...
[-] 1 Mitglied sagt Danke an DD 313 für diesen Beitrag:
  • Ralph
Zitieren
#5
(11.03.2017, 02:31)setzi schrieb: Ganz großes Kino!

+1  Thumbsup Thumbsup Thumbsup

Bin beeindruckt.
[-] 1 Mitglied sagt Danke an Tom für diesen Beitrag:
  • Ralph
Zitieren
#6
moin zusamm Drinks ,


habs gesten Nacht erst gesehen und dann gschwind mal gob überflogen, paar Bülderchen angeschaut .. bisschen Einblick verschafft...... um was es hier......  und auch in der Verlinkung  im Beitrag: Sauguino - Die Luxus-PWM  überhaupt ging Lipsrsealed2  kannte ich noch nicht ..... hab ja mit Drechern nichts so am Hut .....was ich aber  in beiden Beiträgen gesehen bzw. gelesen habe ... hee HAMMER!!!  Hi ab... Respeckt!

Die Ideen was da dahinter stecken........ da sieht man creativen Köpfe dahinter Thumbsup klasse....
 Hi Gruß Jürgen
[-] 1 Mitglied sagt Danke an OFF-Chili-Sauce für diesen Beitrag:
  • Ralph
Zitieren
#7
Danke für die positiven Rückmeldungen. Drinks

(11.03.2017, 23:25)DD 313 schrieb: Welche Band ist denn das?

Das war eine Mädchenband mit männlicher Unterstützung aus Mittelhessen, gibt es schon seit über 15 Jahren nicht mehr.

(12.03.2017, 09:26)OFF-Chili-Sauce schrieb: Die Ideen was da dahinter stecken........ da sieht man creativen Köpfe dahinter Thumbsup klasse....

Ich habe nur vom Meister abgeschrieben...
Ich glaube nicht das ich die Programmierung alleine geschafft hätte.

Gruß, Ralf
veni, vidi, violini - ich kam, ich sah, ich vergeigte es
Zitieren
#8
Tach auch,

Nach über einem halben Jahr mit mindestens 200 Plattenwäschen funktioniert die PWM immer noch und ich habe es heute endlich mal geschafft den Schaltplan zu malen.

[Bild: schaltplanpwmneusjlvt.jpg]

Den Code gibt es natürlich auch noch.

Code:
// PlattenWaschMaschine 1215


#include <Servo.h>
Servo Buerstenservo;
Servo Liftservo;
Servo Saugarmservo;

// Eingänge
int IncSwPin = 27;
int DecSwPin = 25;
int StartstopSwPin = 31;
int SettingSwPin = 23;

// Ausgänge
int TellerPin = 42;
int DosPin = 50;
int VakPin = 46;
int Apin = 41;
int Bpin = 53;
int Cpin = 51;
int Dpin = 43;
int DPpin = 35;
int BlankPin = 40;

// Servopins
int BuerstenPin = 2;
int LiftPin = 4;
int ArmPin =6;

byte IncSwState = 1;
byte DecSwState = 1;
byte StartstopSwState = 1;
byte SettingSwState = 1;

// Konfiguration
float homeBuerste = 52;
float posBuerste = 130;  
float homeLift = 100;
float posLift = 118;
float homePos = 140;  
float startPos = 113;  
float endPos = 49;    

float suckSpeed = 1000;
int dosDelay = 2000; // Testen!!!
int tellerTime = 2000;
int servotime = 20;
int actionDelay = 1000;
byte washMinutesDesired = 2;

#define IDLE 1
#define WASH 2
#define SUCK 3
#define FINISH 4
#define WASHINIT 5
#define WASHEND 6
#define STOP 7
#define SETTINGS 8
#define WAITASEC 9
#define INITSETTINGS 10

int pos = 0; // Variable für die Armposition
int Buerstenpos = 0;
byte mode = IDLE;
unsigned long washbegin;
byte washMinutesRemaining; // Verbleibend
byte washMinutesDisplayed;  // Angezeigt
unsigned long washMillisRemaining;
unsigned long settingsPushBegin;
byte oldStartPos;






void setup() {
analogWrite(ArmPin, homePos);
analogWrite(BuerstenPin, homeBuerste);
pinMode(Apin, OUTPUT);
pinMode(Bpin, OUTPUT);
pinMode(Cpin, OUTPUT);
pinMode(Dpin, OUTPUT);
pinMode(DPpin, OUTPUT);
pinMode(TellerPin, OUTPUT);
pinMode(DosPin, OUTPUT);
pinMode(VakPin, OUTPUT);
pinMode(BlankPin, OUTPUT);

Buerstenservo.attach(BuerstenPin);
Liftservo.attach(LiftPin);
Saugarmservo.attach(ArmPin);

pinMode(IncSwPin, INPUT);
digitalWrite(IncSwPin, HIGH);
pinMode(DecSwPin, INPUT);
digitalWrite(DecSwPin, HIGH);
pinMode(StartstopSwPin, INPUT);
digitalWrite(StartstopSwPin, HIGH);
pinMode(SettingSwPin, INPUT);
digitalWrite(SettingSwPin, HIGH);

Saugarmservo.write(homePos);
Buerstenservo.write(homeBuerste);
Liftservo.write(homeLift);
//Serial.begin(9600);
digitalWrite(BlankPin, HIGH);

seg7(washMinutesDesired);





}

void loop() {
// Serial.println(mode);
// delay(2);

 checkButtons();

 switch(mode) {
   case IDLE:
     updateTimer();
     if  (StartstopSwState == LOW) {
       mode = WASHINIT;
       delay(300);
     } else if (SettingSwState == LOW) {
       settingsPushBegin = millis();
       mode = WAITASEC;
       delay(300);
     }
     break;
   case WASHINIT:
     washinit();
     break;
   case WASH:
     wash();
     break;
   case WASHEND:
     washend();
     break;
   case SUCK:
     suck();
     break;
   case WAITASEC:
     waitasec();
     break;
   case INITSETTINGS:
     init_settings();
     break;
   case SETTINGS:
     settings();
     break;
   case STOP:
     stop();
     break;
 }
}

void updateTimer() {
 if  (IncSwState == LOW) {
   washMinutesDesired = min(8, washMinutesDesired)+1;
   washMinutesDisplayed = washMinutesDesired;
   seg7(washMinutesDisplayed);
   delay(300); // Debounce
 }
 if  (DecSwState == LOW) {
   washMinutesDesired = max(3, washMinutesDesired)-1;
   washMinutesDisplayed = washMinutesDesired;
   seg7(washMinutesDisplayed);
   delay(300); // Debounce
 }
}

void washinit() {
 digitalWrite(TellerPin, HIGH);
 delay(tellerTime);
 for(int Buerstenpos = homeBuerste; Buerstenpos < posBuerste; Buerstenpos+=1){
 Buerstenservo.write(Buerstenpos);
 delay(servotime);  
 }
 delay(actionDelay);
 digitalWrite(DosPin, HIGH);
 delay(dosDelay);
 digitalWrite(DosPin, LOW);
 delay(actionDelay);
 washbegin = millis();
 mode = WASH;
 
}

void wash() {
 updateTimer();
 if  (StartstopSwState == LOW) {
   mode = WASHEND;
   delay(300); // debounce
 }
 washMillisRemaining = (((washMinutesDesired*60000)-(millis()-washbegin)));
 washMinutesRemaining = washMillisRemaining / 60000;
 if ((washMillisRemaining / 500) % 2 == 1) {
   digitalWrite(DPpin, LOW); // halbsekündig blinken: Countdown läuft!
 } else {
   digitalWrite(DPpin, HIGH);
 }
 if (washMinutesRemaining+1 < washMinutesDisplayed) {
   seg7(washMinutesRemaining+1);
   washMinutesDisplayed = washMinutesRemaining + 1;
 }
 if (washMillisRemaining/1000 == 0) {
   mode = WASHEND;
 }
 
}
void washend(){
 digitalWrite(DPpin, LOW);
 delay(actionDelay);
 for(int Buerstenpos = posBuerste; Buerstenpos > homeBuerste; Buerstenpos-=1){
 Buerstenservo.write(Buerstenpos);
 delay(servotime);
 }
 mode = SUCK;
}


void suck() {
 seg7(0);
 digitalWrite(DPpin, LOW);
 digitalWrite(TellerPin, HIGH);
 digitalWrite(VakPin, HIGH);
 delay(actionDelay);
 Liftservo.write(posLift);
 delay(actionDelay);
 Saugarmservo.write(endPos);
 delay(actionDelay);
 for(int Liftpos = posLift; Liftpos > homeLift; Liftpos--){
 Liftservo.write(Liftpos);
 delay(servotime);
 }
 delay(actionDelay);
 
 for(pos = endPos; pos<=startPos; pos+=1) {
   Saugarmservo.write(pos);
   // Serial.println(suckSpeed * (1+(endPos - pos) / 60));
   delay(suckSpeed * (pos / 19)); // Saugdauer aussen gegenüber innen ca. 2,3fach
   SettingSwState = digitalRead(SettingSwPin);
   if (SettingSwState == LOW) {
     mode = STOP;
     break;
   }
 }
 mode = STOP;

}  

void stop() {
 Liftservo.write(posLift);
 delay(actionDelay);
 digitalWrite(TellerPin, LOW);
 Saugarmservo.write(homePos);
 delay(actionDelay);
 Liftservo.write(homeLift);
 delay(5*actionDelay);
 digitalWrite(VakPin, LOW);
 delay(actionDelay);

 seg7(washMinutesDesired);
 washMinutesDisplayed = washMinutesDesired;

 mode = IDLE;
}

void checkButtons() {
 IncSwState = digitalRead(IncSwPin);
 DecSwState = digitalRead(DecSwPin);
 StartstopSwState = digitalRead(StartstopSwPin);
 SettingSwState = digitalRead(SettingSwPin);  
}

void waitasec() {
 if (SettingSwState == LOW) {
   if (millis() > (settingsPushBegin + 2000)) {
     mode = INITSETTINGS;
   }
 } else {
   mode = IDLE;
   delay(300);
 }
}

void settings() {
 Serial.println(startPos);
 delay(1);
 Saugarmservo.write(startPos);
 if (IncSwState == LOW) {
   startPos = max(endPos,startPos++);
   delay(100);
 } else if (DecSwState == LOW) {
   startPos = min(homePos,startPos--);
   delay(100);
 } else if (StartstopSwState == LOW) {
   delay(100);
   Saugarmservo.write(endPos);
   delay(200);
   Saugarmservo.write(startPos);
   delay(200);
   stop();
   mode = IDLE;
 } else if (SettingSwState == LOW) {
   delay(100);
   Saugarmservo.write(oldStartPos);
   delay(400);
   startPos = oldStartPos;
   stop();
   mode = IDLE;
 }
}

void init_settings() {
 Liftservo.write(posLift);
 delay(actionDelay);
 Saugarmservo.write(startPos);
 oldStartPos = startPos;
 mode = SETTINGS;
}


void seg7(byte number) {
 digitalWrite(Dpin, ((number >> 3) & 1) ? HIGH : LOW);
 digitalWrite(Cpin, ((number >> 2) & 1) ? HIGH : LOW);
 digitalWrite(Bpin, ((number >> 1) & 1) ? HIGH : LOW);
 digitalWrite(Apin, (number & 1) ? HIGH : LOW);
}

Ein paar kleine Änderungen gab es noch:

- Der Schlauch im Reinigungsflüssigkeitsbehälter wurde gegen eim Edelstahlröhrchen getauscht, da der Aqauriumschlauch im Laufe der Zeit "milchig" wurde.

[Bild: 01_behltervpya6.jpg]



- Die Loricraft-Bürste habe ich gegen eine Tonar Wetgoat getauscht, weil sich der Holzkörper der Loricraft immer mit der Reinigungsflüssigkeit vollgesaugt hatte. Ob die Kunststoffborsten der Loricraft oder die Ziegenhaarborsten der Tonar besser reinigen, kann ich (noch) nicht beurteilen.

[Bild: 02_brste9xa14.jpg]



- Beim Kelleraufräumen habe ich ein paar Rollen gefunden und drunter geschraubt, das erleichtert das Handling der 26Kg schweren Kiste erheblich.

[Bild: 03_rollenvub48.jpg]



- Da ich immer noch keinen passenden Deckel gefunden habe, wurde einer aus einem Umzugskarton mit Pattex und Paketklebeband zusammengebastelt, noch mit DC-Fix-Folie beklebt, fertig ist die vermutlich dauerhafte Interimslösung. Nicht wirklich schön, aber so hat der Staub keine Chance mehr.

[Bild: 04_deckeljzl79.jpg]

[Bild: 05_deckelt4yxd.jpg]


Einen schönen Restsonntag,

Ralf
veni, vidi, violini - ich kam, ich sah, ich vergeigte es
[-] 16 Mitglieder sagen Danke an Ralph für diesen Beitrag:
  • 0300_infanterie, Neper, Rainer F, Tom, vectra800, Helmi, UriahHeep, Mosbach, norman0, xs500, Tarl, MacMax, onkyo, bathtub4ever, Caspar67, linuxschmied
Zitieren
#9
Wow, Respekt.
Gruß Claudius Hi

Bombing for Peace is like fucking for Virginity...
[-] 1 Mitglied sagt Danke an Tarl für diesen Beitrag:
  • Ralph
Zitieren
#10
Mittlerweile gab es noch einen kleinen, aber mMn effektiven Umbau, der die doch recht lange Absaugzeit weiter verkürzt hat. Die Silicontülle am Schnüffelstück wurde gegen den "Klassiker" Teflon-Entlötspitze mit Abstandsfaden ausgetauscht.
Meine Pumpe schafft es allerdings nicht den Faden effektiv einzusaugen, also musste eine andere Lösung her. An der Entlötspitze habe ich vertikal und gegenüberliegend kleine Nuten eingesägt und mit Sekundenkleber auf jede Seite eine Aderendhülse angeklebt, die zusätzlich noch mit einem Stück Schrumpfschlauch gesichert wurden.

[Bild: img_4361hcjmf.jpg]

[Bild: img_4365yij5m.jpg]

Der Faden wurde durch die Löcher der ehemaligen Tonarmkabelverlegung gezogen. An einer Stelle habe ich ihn oberhalb, oder besser gesagt unterhalb des Armes gelegt und ein Gummi drübergezogen, damit der Faden unter Spannung gehalten werden kann. Ich hoffe auf dem Foto kann man erkennen was ich meine.

[Bild: img_4362oikfr.jpg]

[Bild: img_436362jp1.jpg]

Auf dem Headshell habe ich eine Spule zum Aufwickeln des verbrauchten Fadens montiert. Die Achse der Spule wird mittels einer halben Kugelschreiberfeder als Bremse an die Halterung gedrückt, um sie am ungewollten Drehen zu hindern. Der Faden ist so immer gut gespannt an der Düse.

[Bild: img_43668bj4w.jpg]

Die Fadenrolle wurde mit einer langen Schraube an der Grundplatte des Duals befestigt und eine Fadenführung aus Edelstahldraht gebogen, damit der Faden nicht mit der drehenden Platte in Berührung kommt.

[Bild: img_43695yjej.jpg]

Und Action:

[Bild: img_4371fvkg8.jpg]

Gruß, Ralf
veni, vidi, violini - ich kam, ich sah, ich vergeigte es
[-] 3 Mitglieder sagen Danke an Ralph für diesen Beitrag:
  • HaiEnd Verweigerer, Armin777, UriahHeep
Zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Sauguino - Die Luxus-PWM peaceman 102 24.275 31.10.2017, 11:04
Letzter Beitrag: Ralph



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