Heliumtankstelle

Heliumladestation

 

Die Heliumwaage soll das kontrollierte Befüllen der Ballons durch die gleichzeitige Messung des Auftriebs erleichtern.
Dafür wurde die Wägezelle der Küchenwaage Soehnle Siena zur Gewichtsmessung verwendet.
Die Wägezelle hat 4 Anschlüsse:
S+ (Signal +)
S- (Signal -)
E+ (Versorgung +)
E- (Versorgung Ground)
Dabei gibt die Wägezelle ein Ausgangssignal in Abhängigkeit der Versorgungsspannung und der mechanischen Belastung im Millivoltbereich ab.
Das Signal der Wägezelle wird von dem Operationsverstärker TS912IN (in Differenzverstärkerschaltung) verstärkt, von einem ATmega328 eingelesen und
in ein Gewicht umgerechnet.
Die an Pin A0 eingelesene Spannung ist bei Belastungsfreiheit nicht 0. Daher wird bei Einschalten der Waage diese Grundbelastung, die variieren kann,
herausgerechnet. (siehe Code)
Als Stromversorgung dient ein 9V-Batterieblock, wobei die Spannung von dem Spannungsregler 7805 auf 5V reguliert wird.
An der Waage sind 2 Schalter angebaut:

On/Off- Schalter
Taraschalter
Der Taraschalter setzt das momentane Gewicht zurück auf 0, indem das berechnete Gewicht von dem zuletzt berechneten Gewicht ohne Tara abgezogen wird.
Dadurch wird bei eingeschalteter Tarafunktion Zugkraft an der Waage als positiv ausgegeben.

Ein Resetschalter war zwar auf der Platine eingeplant, ist aber aus aus mangelnder Notwendigkeit nicht umgesetzt worden.

Allgemeine Hinweise:

Maximalbelastung der Waage sind 5kg, wobei bis etwa 2kg Messungen mit einer Abweichung von wenigen Gramm möglich sind.
Zur Befüllung der Ballons ist an der Wägezelle eine rohrartige Struktur angebracht, in der der Schlauch verläuft, durch den die Befüllung erfolgt.
Oben ist das Rohr etwas dicker, sodass die Ballons aufgespannt werden können. Dort ist das Rohr mit dem Schlauch mit Sekundenkleber aus Dichtungsgründen
verklebt. Es besteht aus 3 Teilen, die ineinander gesteckt sind und an der Wägezelle festgeschraubt sind.


Pinbelegung ATmega328:
A0 (PC0): Analogeingang
LCD:
Pin 10: RS
Pin 9: Enable
Pin 5 (PD2):D4
Pin 4 (PD3):D5
Pin 3 (PD4):D6
Pin 2 (PD5):D7

Pin 6 (PD6): Taraschalter
Pin 8 (PB0): Taraschalter
(Pin 13(PB5): TestLED)

Platinensockel:
Wägezelle 1: Ground
Wägezelle 2: S+
Wägezelle 3: S-
Wägezelle 4: VCC

Display 1: Abgriff Poti
Display 2: D7
Display 3: D6
Display 4: D5
Display 5+6: Ground
Display 7: D4
Display 8: RS
Display 9: Enable
Display 10: VCC


Bauteile:
Spannungsregler 7805
Keramikkondensatoren: 2x100nF
Operationsverstärker: TS912IN
Widerstände: 2x 330, 2x 1M
µC: ATMega 328
Keramikkondensator: 100nF
Elektrolytkondensator: 10µF
Keramikkondensatoren bei Quarz: 22pF
Taraschalterwiderstände: 2x1M

Code:

float Gewicht = 0;
int masse = 0;
float tara;
int buttonpinoff=8;
int buttonpin=6;
int oldmasse=0;
int bcon=0;
int led = 13;

#include <LiquidCrystal.h>

LiquidCrystal lcd(10, 9, 5, 4, 3, 2);
void setup() {

lcd.begin(16, 2);
delay(1000);

pinMode(buttonpinoff, INPUT);
pinMode(buttonpin, INPUT);
pinMode(led, OUTPUT);

Serial.begin(9600);


for (int i = 0; i < 200; i++) { //Mittelung von tara
tara = tara + analogRead(A0);
delay(2);
}

tara = tara/200;
Serial.println(tara);

}

void loop() {

float ReadEndGewicht = 0;
float sensorValue = 0;

if(digitalRead(buttonpin) == HIGH) {bcon=1;}
if(digitalRead(buttonpinoff) == HIGH) {bcon=0;}


if(bcon==0)

{
for (int i = 0; i < 200; i++) { //Mittelung des Messwertes
sensorValue = sensorValue + analogRead(A0);
delay(2);
}
sensorValue = sensorValue/200;
Gewicht = ((sensorValue-tara)/0.2316);
masse = Gewicht;
oldmasse=masse;

Serial.print(sensorValue);
Serial.print("; ");
Serial.print(masse);
Serial.println(" Gramm ");
lcd.clear();
lcd.print(masse);
lcd.print("Gramm");
delay(1000);}

else{

for (int i = 0; i < 200; i++) {

ReadEndGewicht = ReadEndGewicht + analogRead(A0);
delay(2);
}

ReadEndGewicht = ReadEndGewicht/200;

Gewicht = ((ReadEndGewicht-tara)/0.2316);
Gewicht=oldmasse-Gewicht;
masse = Gewicht;


Serial.print(ReadEndGewicht);
Serial.print("; ");
Serial.print(masse);
Serial.println(" Gramm ");
lcd.clear();
lcd.print(masse);
lcd.print("Gramm tara");
delay(1000);}


}

//tara=AnalogReadWert ohne Gewicht auf Waage
//ReadEndGewicht= AnalogReadWert mit Gegengewicht auf Waage
//oldmasse=Gewicht von Gegengewicht, nachdem tara rausgerechnet wurde
//masse=jeweiliger Massenausgabewert
//buttonpin auf high: Messgewicht von oldmasse abgezogen-> Zugkraft
//buttonpinoff auf high: Messgewicht wird direkt ausgegeben
//bcon= variable, die von buttonpin und buttonpinoff auf 1/0 gesetzt wird

 

 

 

 

openScad-Skript:

Oberer Teil des Rohres:

translate([0,0,60])
difference(){
cylinder(h=10, r=14);
translate([0,0,-1])
cylinder(h=12, r=11.5);}

 

translate([0,0,40])
difference(){
cylinder(h=20, r1=11.5, r2=14);
translate([0,0,-1])
cylinder(h=22, r1=8, r2=11.5);}

 

difference(){
cylinder(h=40, r1=17.5, r2=22);
translate([0,0,-1])
cylinder(h=42, r1=7, r2=8);}
Unterteil des Rohres:

rotate([180,0,0]){
difference(){

translate([0,0,-37])
cube([29,29,40],center=true);

rotate([0,180,0])
translate([0,0,20])
cylinder(h=30, r1=9, r2=5);

 

}

 

difference(){
translate([0,0,-92])
difference(){
cylinder(h=35, r=14);

translate([0,0,-1])
cylinder(h=37, r=11.5);

}

translate([13,0,-83])
cylinder(h=25, r1=7, r2=9);}
translate([13,2,-83])
cylinder(h=25, r=0.5);
translate([12,5,-83])
cylinder(h=25, r=0.5);
translate([12,-5,-83])
cylinder(h=25, r=0.5);
translate([12,-2,-83])
cylinder(h=25, r=0.5);}



Mittelteil des Rohres:

 

difference(){
cylinder(h=66, r=16);
translate([0,0,-0.5])
cylinder(h=68, r=14);}

 

translate([0,0,8])
difference(){
cylinder(h=50,r=14);
translate([0,0,-1])
cylinder(h=65,r=11.5);}

 

translate([13,0,0]) //Hilfsstrukturen für den 3D-Druck
cylinder(h=8, r=0.7);
translate([11,6,0])
cylinder(h=8, r=0.7);
translate([9,9,0])
cylinder(h=8, r=0.7);
translate([6,11,0])
cylinder(h=8, r=0.7);
translate([3,12,0])
cylinder(h=8, r=0.7);
translate([0,12.5,0])
cylinder(h=8, r=0.7);
translate([-3,12.5,0])
cylinder(h=8, r=0.7);
translate([-6,11,0])
cylinder(h=8, r=0.7);
translate([-9,9,0])
cylinder(h=8, r=0.7);
translate([-11.5,5,0])
cylinder(h=8, r=0.7);
translate([-12.5,1,0])
cylinder(h=8, r=0.7);
translate([-12.5,-2,0])
cylinder(h=8, r=0.7);
translate([-11.5,-5,0])
cylinder(h=8, r=0.7);
translate([-10,-8,0])
cylinder(h=8, r=0.7);
translate([-8,-10,0])
cylinder(h=8, r=0.7);
translate([-6,-11,0])
cylinder(h=8, r=0.7);
translate([-4,-12,0])
cylinder(h=8, r=0.7);
translate([-1,-12.5,0])
cylinder(h=8, r=0.7);
translate([2,-12.5,0])
cylinder(h=8, r=0.7);
translate([5,-12,0])
cylinder(h=8, r=0.7);
translate([7,-10.5,0])
cylinder(h=8, r=0.7);
translate([9,-9,0])
cylinder(h=8, r=0.7);
translate([11,-7,0])
cylinder(h=8, r=0.7);
translate([12.5,-4,0])
cylinder(h=8, r=0.7);
translate([13,3,0])
cylinder(h=8, r=0.7);


Struktur, die auf Wägezelle geschraubt wird bzw. an der das Rohr durch eine Schraube befestigt wird:

 

rotate([0,180,0]){
translate([0,0,10])
difference(){

cube([40,40,5], center=true);
cube([13,9,10], center=true);}

difference(){
translate([0,17.5,32])
cube([40,5,40],center=true);

translate([0,0,35])
rotate([0,90,90])
cylinder(h=100, r=2);}

difference(){
translate([0,-17.5,32])
cube([40,5,40],center=true);

translate([0,-50,35])
rotate([0,90,90])
cylinder(h=100, r=2);}

rotate([0,0,90])
translate([0,17.5,32])
cube([40,5,40],center=true);

rotate([0,0,90])
translate([0,-17.5,32])
cube([40,5,40],center=true);

difference(){
cube([15,14,5],center=true);

translate([4,0,0])
cylinder(h=6, r=2.5,center=true);
translate([-4,0,0])
cylinder(h=6, r=2.5,center=true);
}
translate([0,7,2.5])
cube([15,5,10],center=true);

translate([0,-7,2.5])
cube([15,5,10],center=true);

translate([9,0,2.5])
rotate([0,0,90])
cube([19,4,10],center=true);
translate([-8.5,0,2.5])
rotate([0,0,90])
cube([19,4,10],center=true);

translate([0,0,15])
difference(){
cube([30,30,5],center=true);
translate([0,0,5])
cylinder(h=20, r1=0, r2=60,center=true);}

 

 

Schlauchadapter:

difference(){
cylinder(r1=3.8, r2=5, h=20);
cylinder(r1=2.5, r2=4, h=21);}
translate([0,0,39])
rotate([180,0,0])
difference(){
cylinder(r1=3.8, r2=5, h=20);
cylinder(r1=2.5, r2=4, h=21);}


Display/Platinenhalter innerhalb des Gehäuses:

 

rotate([0,90,0]){
cube([23,10,10]);
translate([0,-5,0])
cube([23,5,55]);

difference(){
translate([0,0,50])
cube([23, 20,5]);

translate([10,5,49])
cylinder(h=7, r=3);
}
}

 

Batteriehalterung:

 

difference(){cube([18, 32, 20]);
translate([-0.5,2.5,1])
cube([19,27,20]);


}