Ballon-Maschine mit Timer
Bei meinem Ballonfreunde-Hobby brauchen wir zum aufpusten unserer trölfzigtausend Ballons natürlich eine Pustemaschine. Also einen umgedrehten Staubsauger. Man versucht dabei die Ballons möglichst alle gleichgroß aufzupusten, damit die Deko besonders hübsch aussieht. Das ist allerdings schwierig, wenn man zu blöd zum sekundenzählen ist 😃 Damit die Ballons gleichmäßig groß werden, muss man sie also immer mit der gleichen Zeit aufpusten. Dafür gibt es natürlich auch bereits sackteure Lösungen. Abgesehen davon, dass sich solche fertigen Automaten never amortisieren, ist das ja auch langweilig etwas fertiges zu kaufen. Der Plan steht — ich baue selber einen Timer in eine Billo-Ballonpumpe ein 😃
Material
- Autom. Ballonpumpe von Amazon
- Arduino Nano von Amazon
- Mini-Netzteil von Amazon
- Spannungssensor von Amazon
- Drehregler von Amazon
- Relais von Amazon
Vorbereitung
Bei einem Materialeinsatz von ca 50eur kann man sich echt nicht beschweren. Die Grundidee ist, den Auslöser der Pumpe anzuzapfen. Das ist ein Druckschalter in einem der Luftstutzen. Wenn der auslöst, soll der Arduino so lange zählen, wie per Drehregler eingestellt wurde und dann mit dem Relais einfach die Stromversorgung vom Motor trennen. Sounds easy. Und in so einer Ballonpumpe sollte ja auch keine Weltraumtechnik verbaut sein.
Kurzerhand aufgeschraubt bietet sich ein wirres aber trotzdem einfach zu entschlüsselndes Bild:
Überraschend aber rückblickend logisch war, dass die Maschine nur mit 220V Netzspannung läuft. Es gibt keinerlei Trafos oder sonstiges. Ansonsten war die Verkabelung nicht großartig kompliziert, entweder der Strom fließt durch den gedrückten Druckschalter, oder über einen Kippschalter um die Pumpe permanent laufen zu lassen. Darauf lies sich super aufbauen.
Prototypen
Zuerst teste ich einzeln die verschiedenen Bestandteile. Dazu benutze ich ganz gerne meine großen Arduino Uno. Der ist einfacher zu verkabeln durch seine Steckterminals und man kann besser ausprobieren.
Ich hab versucht erstmal das Relais anzusteuern. Kein große Sache, allerdigs muss man wissen, welche Terminals man später verkabelt. Dieses Relais hat welche für Normal Open, Normal Closed, und Common. Das Relais trennt später dann die Stromzufuhr zum Motor und stoppt damit das Aufblasen.
Nachdem das erledigt war, hab ich mir den Drehregler angeschaut. Es ist eine digitale variante und die hatte sogar eine Push-Funktion, mit der man noch weitere Aktionen ansteuern könte. Ich hab mir überlegt, den Push einfach als Reset Funktion zu nutzen, um die eingestellte Pustezeit zurücksetzen zu können, da ich auch später keine Skala verwende.
Zuletzt habe ich den Spannungssensor getestet (davon gibts leider keine Bilder). Interessant daran ist, dass er Spannung misst, indem er das im Kabel erzeugte Magnetfeld bestimmt. Das führt allerdings dazu, dass er u.U. sehr schwankende Werte ausgibt, wenn andere Kabel in der Nähe sind. Dazu muss man den Schwellwert dann noch etwas anpassen. Die Messung lässt sich recht einfach coden und sieht dann kurz und knapp so aus:
float flow = abs(analogRead(SEN)-500);
Serial.println(flow);
Fertigung
Nachdem alle Teile funktionieren kann ich alles zusammenlöten und Verpacken. Ich musste die ganzen Kabel vom Motor anders legen, weil ich alle Controller usw. in das kleine Kabel-Türchen montieren will. Auf dem Motor hab ich noch ein kleines Branding hinterlassen 😃
Dann hab ich alles zusammengelötet und noch das kleine Mini-Netzteil eingesetzt, um von der Netzspannung 5V für den Arduino abzuzwacken.
Zuöetzt habe ich die einzelnen Codeabschnitte zusammengefügt und auf den Nano gespielt. Das nennt man dann Glue-Coding i guess...
#define SEN A0 //current sensor
#define CLK 2 //rotator clock
#define DT 3 //rotator data
#define SW 4 //rotator button
#define REL 5 //relais action
#define LED 13 //arduiono led
int counter = 0;
int currentStateCLK;
int lastStateCLK;
bool buttonPressed = false;
void setup () {
pinMode(REL, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SW, INPUT_PULLUP);
Serial.begin(9600);
lastStateCLK = digitalRead(CLK);
}
void loop() {
//rotating action
currentStateCLK = digitalRead(CLK);
if (currentStateCLK != lastStateCLK) {
if (digitalRead(DT) != currentStateCLK) {
counter++;
} else {
counter--;
}
}
lastStateCLK = currentStateCLK;
//rotator press reset
if (digitalRead(SW) == LOW && !buttonPressed) {
buttonPressed = true;
counter = 0;
}
if (digitalRead(SW) == HIGH && buttonPressed) {
buttonPressed = false;
}
//measure current flow, analog value
float flow = abs(analogRead(SEN)-500);
Serial.println(flow);
// when current flows (pressed) count n sec then fire relais disconnect
if (flow > 200) {
//pressed, now wait
digitalWrite(LED, HIGH);
delay(counter*100);
//wait over, disconnect
digitalWrite(LED, LOW);
digitalWrite(REL, HIGH);
delay(2000);
//reconnect
digitalWrite(REL, LOW);
}
}
Als ich es testen wollte hat es natürlich nicht funktioniert. Ich hatte aber die Hoffnung, dass wie erwähnt die ganzen Kabel einfach nur für Magnetfeld-Einstreuungen am Sensor sorgen. Ich hab dann den Schwellwert zum auslösen nochmal per Try and Error angepasst und alles lief fein. Ich bin sehr gespannt auf die nächsten Ballonbögen 😃