Upload
vokhuong
View
214
Download
0
Embed Size (px)
Citation preview
Konstruktion einer Apparatur zur Erstellung von Wärmebildern
ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht
FRIEDRICHSHAFEN
Jugend forscht 2011
Philip Zimmermann
Schule:
Alexander-von-Humboldt-GymnasiumSchottenplatz 278462 Konstanz
Konstruktion einer Apparatur zur Erstellung von Wärmebildern
Eine Arbeit von Philip Zimmermann für Schüler experimentieren.
2
Inhalt
Einleitung ...............................................................................................................................................3
Methode und Vorgehensweise .......................................................................................................3
Aufbau der Apparatur ....................................................................................................................3
Steuerung ..........................................................................................................................................5
Messungen .......................................................................................................................................8
Zusammenfassung .......................................................................................................................... 10
Danksagung ...................................................................................................................................... 11
Anhang ................................................................................................................................................ 11
3
Einleitung Beim letztjährigen Jugend-Forscht Wettbewerb habe ich das Projekt „Thermoprofile von Häusern“ vorgestellt. Bei diesem Projekt habe ich eine Apparatur gebaut, die einen Infrarotsensor zeilenweise über ein Objekt bewegt und dabei einzelne Temperaturwerte aufzeichnet, die von einem Programm zu einem Wärmebild zusammengesetzt werden sollten. Jedoch gab es bei diesem Verfahren einige Nachteile. Die Software zur Steuerung der Apparatur und die Software zur Aufzeichnung der Messwerte waren nicht aufeinander abgestimmt. Daher stimmten die Position des Sensors und die Position der Messwerte nicht überein, was zu erheblichen Verzerrungen im Wärmebild führte. Desweiteren arbeitete die Mechanik der Apparatur nicht genau genug, was ebenfalls zu Verzerrungen im Wärmebild führte. Ziel meines diesjährigen Projektes war es, diese Nachteile zu beseitigen. Zu diesem Zweck habe ich eine neue Apparatur konstruiert und ein Programm geschrieben, welches die Software der Apparatur und die des Sensors aufeinander abstimmt.
Methode und Vorgehensweise Aufbau der Apparatur
Der grundlegende Aufbau der Apparatur ist der gleiche wie im letzten Jahr. Der wesentliche Unterschied besteht darin, dass die Apparatur nun aus exakt gefertigten Metallteilen besteht, die kaum Spiel haben und somit sehr viel genauer arbeitet. Die Apparatur bewegt einen Infrarotsensor um zwei Achsen (horizontal und vertikal). Dadurch wird es ermöglicht, ein Objekt zeilenweise abzutasten. Die Fischertechnik Maschine, die ich letztes Jahr verwendet habe, lief kontinuierlich, während der Infrarotsensor ebenfalls kontinuierlich (alle 100 ms) Messwerte aufzeichnete. Dieser Aufbau ermöglichte es nicht, in jeder Zeile gleich viele Messwerte aufzuzeichnen. Die Laufungenauigkeiten des Fischertechnik Modelles führte zu erheblichen Schwankungen der Anzahlen von Messwerten pro Zeile. Dadurch war es leider unmöglich, aus den an sich sehr guten Messwerten ein brauchbares Wärmebild zusammenzusetzen.
Der grundlegende Unterschied der neuen Maschine besteht darin, dass die einzelnen Positionen gezielt angefahren werden und die Apparatur während der Aufnahme des Messwertes stoppt. Um das zu ermöglichen, musste ich die Software um ein Modul zur Steuerung des Infrarotsensors erweitern. Die Steuerungssoftware der Messapparatur musste mit der Software zur Steuerung des Sensors so verknüpft werden, dass die Messung des Temperaturwertes jeweils dann ausgelöst wird, wenn die Apparatur an einer neuen Position gestoppt hat.
4
Abb. 1: Schematischer Aufbau der Apparatur
Für die Konstruktion der Metallteile waren Spezialmaschinen wie CNC – Fräsen etc. notwendig. Die Firma K-Tech in Konstanz gestattete mir freundlicherweise, die Metallkonstruktion in ihrer Werkstatt zu bauen. Unter der fachlichen Anleitung von Herrn Emonts, dem Fertigungsleiter der Firma K-Tech, habe ich die neue Maschine in 10 Nachmittagen gebaut.
Abb. 2: Die neue Apparatur
5
Abb. 3+4: Detailansichten der horizontalen und vertikalen Drehachsen
Steuerung
Ich habe ein Fischertechnik-Programm geschrieben, dass die Apparatur steuert, sowie ein BASIC-Script, dass das Weiterbewegen der Apparatur, sowie die Aufnahme der Messwerte steuert.
Fischertechnik-Programm
Das Programm startet
Der folgende Ablauf wird 50 mal wiederholt:
Das Unterprogramm „vor“ wird gestartet
Das Unterprogramm „Höhe“ wird gestartet
Das Unterprogramm „Zurück“ wird gestartet
Das Unterprogramm „Höhe“ wird gestartet
6
Das Unterprogramm „vor“ startet
Der folgende Ablauf wird 100 mal wiederholt:
Das Programm wartet, bis Taster 3 gedrückt wird
Motor 1 startet, die Apparatur fährt 1 Messpunkt
weiter
Das Programm wartet, bis Taster 1 gedrückt wird
Motor 1 stoppt
Das Programm wartet 300 ms
Das Unterprogramm „Höhe“ startet
Das Programm wartet, bis Taster 3 gedrückt wird
Motor 2 startet, Die Apparatur bewegt sich um
eine Zeile nach unten.
Das Programm wartet, bis Taster 2gedrückt wird
Motor 2 stoppt
Das Programm wartet 300 ms
7
BASIC-Script
set ws = CreateObject("Wscript.Shell")
wscript.sleep 2000
for i = 0 to 10000
ws.AppActivate"Interface test"
wscript.sleep 300
ws.sendkeys("{RIGHT}")
wscript.sleep 300
ws.sendkeys("{LEFT}")
ws.AppActivate"AK Analytik 32.NET[Neues Projekt]"
wscript.sleep 300
ws.sendkeys("{ENTER}")
Next
Das Unterprogramm „zurück“ startet
Der folgende Ablauf wird 100 mal
wiederholt:
Das Programm wartet, bis Taster 3 gedrückt
wird
Motor 1 startet, die Apparatur fährt 1
Messpunkt weiter
Das Programm wartet, bis Taster 1 gedrückt
wird
Motor 1 stoppt
Das Programm wartet 300 ms
Das Script startet.
Das Script wartet 2 Sekunden.
Der folgende Ablauf wird 10000 mal
wiederholt:
Das Script wartet 300 ms.
Das Script sendet 2 Tastaturbefehle, die das
Weiterfahren der Apparatur auslösen.
Das Script wartet 300 ms.
Das Script sendet einen Tastaturbefehl, der die
Aufnahme eines Messwertes auslöst.
8
Messungen
Um die neue Apparatur zu testen habe ich einen Erlenmeyerkolben mit heißem Wasser auf einer Heizplatte vermessen.
Abb. 5: Wärmebild des Erlenmeyerkolbens
Abb.6: Wärmebild des Erlenmeyerkolbens mit einem Foto überlagert
9
Messungen an Gebäuden
Nach den erfolgreichen Messungen an dem Erlenmeyerkolben habe ich beschlossen, Messungen an Gebäuden durchzuführen.
Zunächst habe ich ein Fenster des Humboldt Gymnasiums vermessen.
Abb. 7: Wärmebild des Fensters mit einem Foto überlagert An diesem Wärmebild kann man sehr gut erkennen, dass das Fenster deutlich mehr Wärme abstrahlt als die Hauswand. Als nächstes führte ich eine Messung an einer kompletten Gebäudefassade durch.
Abb. 8: Wärmebild einer Gebäudefassade
10
-2°C -1°C 0°C 1°C 2.25°C
Abb. 9: Wärmebild einer Gebäudefassade mit einem Foto überlagert.
Auch hier kann man die Unterschiede zwischen Fenster und Hauswand deutlich erkennen. Auf dem Foto erkennt man links unten zwei Blumentöpfe und eine etwas höhere Pflanze, die die Hauswand teilweise abdecken. Auch dieses Detail ist im Wärmebild zu erkennen.
Zusammenfassung Die neue Apparatur eignet sich wesentlich besser zur Aufnahme von Wärmebildern, als die alte Apparatur. Die Zielsetzung der Arbeit konnte mit dieser Apparatur vollständig erreicht werden. Die aufgenommenen Wärmebilder eignen sich um die Wärmedämmung von Gebäuden zu untersuchen. Mit den erreichbaren Auflösungen von ca. 100x100 bis 200x200 Bildpunkten können schlecht isolierte Stellen wie Fenster und Türen dargestellt werden. Die Auflösung reicht allerdings nicht, um feine Details darzustellen. Einer der Nachteile dieses Verfahrens ist der hohe Zeitaufwand, der durch das sequenzielle Aufnehmen der einzelnen Messwerte entsteht. So dauert die Erstellung des Wärmebildes einer Gebäudefassade ca. 2-3h. Wollte man höhere Auflösungen realisieren, würde der Zeitaufwand derart steigen, dass das Verfahren nicht mehr wirtschaftlich wäre. Das bestehende Verfahren könnte durch Miniaturisierung des Aufbaus sicherlich erheblich beschleunigt werden.
11
Danksagung
Ich möchte mich bei meinem Betreuungslehrer Herrn Siegmund für seine Unterstützung und seine Anregungen bedanken. Mein besonderer Dank gilt den Herren Emonts, Jäckle und Moser von der Firma K-Tech, die mir den Bau meiner Apparatur in der Werkstatt der Firma K-Tech ermöglicht haben.
Anhang Delphi-Quelltext Auswertungsprogramm zur Erstellung der Wärmebilder:
unit Unit1Jufo_version2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, FileCtrl, ComCtrls, Spin, Printers, ExtDlgs; type TForm1 = class(TForm) BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; Panel1: TPanel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; BitBtn4: TBitBtn; SpinEdit1: TSpinEdit; Label1: TLabel; Label2: TLabel; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; PrintDialog1: TPrintDialog; SpeedButton3: TSpeedButton; SpinEdit2: TSpinEdit; Edit2: TEdit; Edit3: TEdit; Image1: TImage; ListBox1: TListBox; OpenDialog1: TOpenDialog; Label3: TLabel; Label5: TLabel; Label6: TLabel; PaintBox1: TPaintBox; SavePictureDialog1: TSavePictureDialog; TrackBar1: TTrackBar; PaintBox2: TPaintBox; TempEdit: TEdit;
12
Label4: TLabel; Edit1: TEdit; Label7: TLabel; SpeedButton5: TSpeedButton; Image2: TImage; SpeedButton4: TSpeedButton; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure BitBtn4Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure TrackBar1Change(Sender: TObject); procedure SpinEdit1Change(Sender: TObject); procedure SpeedButton5Click(Sender: TObject); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure SpeedButton4Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} var zoom : Integer; procedure TForm1.BitBtn1Click(Sender: TObject); var wert : String; i,j,k,l,a,abc : LongInt; Farbe : TColor; temp,Daten,Mitte, Summe, Durchschnitt, D_wert : Real; x,ab,ac,ax,Anzahl,ATemp, z,Differenz : Integer; begin a:=0; i:=0; ab:=StrToInt(Edit2.Text); ac:=0; ax:=0; PaintBox1.Canvas.Pen.Color:=RGB(200,200,200); PaintBox1.Canvas.Brush.Color:=RGB(200,200,200); PaintBox1.Canvas.Rectangle(0,0,729,17); PaintBox2.Canvas.Pen.Color:=RGB(200,200,200); PaintBox2.Canvas.Brush.Color:=RGB(200,200,200); PaintBox2.Canvas.Rectangle(0,0,33,393); for abc:=0 to (ListBox1.Items.Count - 1) do begin D_wert:=StrToFloat(ListBox1.Items[abc]); Summe:=Summe+Round(D_wert); end;
13
Durchschnitt:=(Summe/ListBox1.Items.Count); for j:=0 to ab do begin ac:=StrToInt(Edit3.Text); PaintBox1.Canvas.Pen.Color:=RGB(0,250,0); PaintBox1.Canvas.Brush.Color:=RGB(0,250,0); PaintBox1.Canvas.MoveTo(8*j,0); PaintBox1.Canvas.Rectangle(8*j,0,8*j+8,17); if ax=0 then begin for i:=0 to ac do begin Inc(a); wert:=ListBox1.Items[a]; temp:=StrToFloat(wert); x:=Round((temp+SpinEdit2.Value)*SpinEdit1.Value); if x<125 then begin Farbe:=RGB((x*2),0,255-(x*2)); if x<0 then Farbe:=RGB(0,0,100); if x>250 then Farbe:=RGB(25,0,0) end else if x>125 then begin Farbe:=RGB(255,(x-125),0); if x<0 then Farbe:=RGB(0,100,0); if x>250 then Farbe:=RGB(25,0,0) end; for k:=0 to 5 do for l:=0 to 6 do begin Image1.Canvas.Pixels[6*i+k,7*j+l]:=Farbe; end; Sleep(0); end; ax:=1; end else if ax=1 then begin for i:=ac downto 0 do begin Inc(a); wert:=ListBox1.Items[a]; temp:=StrToFloat(wert); x:=Round((temp+SpinEdit2.Value)*SpinEdit1.Value); if x<125 then begin Farbe:=RGB((x*2),0,255-(x*2)); if x<0 then Farbe:=RGB(0,0,100); if x>250 then Farbe:=RGB(25,0,0) end else if x>125 then begin Farbe:=RGB(255,(x-125),0);
14
if x<0 then Farbe:=RGB(0,100,0); if x>250 then Farbe:=RGB(25,0,0) end; for k:=0 to 5 do for l:=0 to 6 do Image1.Canvas.Pixels[6*i+k,7*j+l]:=Farbe; Sleep(0); end; ax:=0; end; end; Anzahl:=ListBox1.Items.Count; ATemp:=StrToInt(TempEdit.Text); Daten:=0; for z:=0 to Anzahl-1 do begin Daten:=(Daten+StrToFloat(ListBox1.Items[i])); end; Mitte:=Daten/Anzahl; Differenz:=Round(Mitte)-ATemp; Edit1.Text:=IntToStr(Differenz); PaintBox2.Canvas.Pen.Color:=RGB(10*Differenz,255-(10*Differenz),0); PaintBox2.Canvas.Brush.Color:=RGB(10*Differenz,255-(10*Differenz),0); PaintBox2.Canvas.Rectangle(0,393,33,393-(15*Differenz)); end; procedure TForm1.BitBtn2Click(Sender: TObject); begin case MessageDlg('Bild vor dem Beenden speichern?',mtWarning,[mbYes,mbNo,mbCancel],0) of mrYes : begin if SavePictureDialog1.Execute=True then begin Image1.Picture.SaveToFile(SavePictureDialog1.FileName); Close; end; end; mrNo : Close; end; end; procedure TForm1.BitBtn3Click(Sender: TObject); var i,j,k,l : integer; Farbe : TColor; begin for i:=1 to 51 do for j :=1 to 51 do begin if CheckBox1.Checked then Farbe:=RGB(i*5,0,255-(i*5)) else if CheckBox2.Checked then Farbe:=RGB(i*5,255-(i*5),0) else if CheckBox3.Checked then Farbe:=RGB(0,i*5,255-(i*5)); for k:=0 to 14 do for l:=0 to 14 do
15
Image1.Canvas.Pixels[15*i+k,15*j+l]:=Farbe; Sleep(0); end; end; procedure TForm1.BitBtn4Click(Sender: TObject); begin if OpenDialog1.Execute=True then ListBox1.Items.LoadFromFile(OpenDialog1.FileName); end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin if SavePictureDialog1.Execute=True then Image1.Picture.SaveToFile(SavePictureDialog1.FileName); end; procedure TForm1.SpeedButton2Click(Sender: TObject); begin if MessageDlg('Bild löschen ? ',mtWarning,[mbYes,mbNo],0) =mrYes then begin Image1.Canvas.Pen.Color:=clWhite; Image1.Canvas.Brush.Color:=clWhite; Image1.Canvas.Rectangle(0,0,729,673); end; end; procedure TForm1.SpeedButton3Click(Sender: TObject); var DruckBreite,Faktor : real; Ziel : TRect; HDPI,VDPI : Integer; begin if Printdialog1.Execute=True then begin HDPI:=GetDeviceCaps(Printer.Handle,LogPixelsX); VDPI:=GetDeviceCaps(Printer.Handle,LogPixelsY); DruckBreite:=10; Faktor:=DruckBreite/2.54*HDPI/Image1.Width; Ziel:=Rect(HDPI, VDPI, Round(HDPI+Image1.Width*Faktor), Round(VDPI+Image1.Height*Faktor)); with Printer do begin BeginDoc; Canvas.StretchDraw(Ziel,Image1.Picture.Graphic); EndDoc; end; end; end; procedure TForm1.TrackBar1Change(Sender: TObject); begin SpinEdit1.Value:=TrackBar1.Position; end; procedure TForm1.SpinEdit1Change(Sender: TObject); begin TrackBar1.Position:=SpinEdit1.Value;
16
end; procedure TForm1.SpeedButton5Click(Sender: TObject); begin zoom:=1; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var i,j,k,l : Integer; begin if zoom=1 then begin for i:=0 to 16 do for j:=0 to 16 do for k:=0 to 8 do for l:=0 to 8 do Image2.Canvas.Pixels[9*i+k,9*j+l]:=Image1.Canvas.Pixels[x+i,y+j] end; end; procedure TForm1.SpeedButton4Click(Sender: TObject); begin zoom:=0; Image2.Canvas.Brush.Color:=RGB(255,255,255); Image2.Canvas.Pen.Color:=RGB(255,255,255); Image2.Canvas.Rectangle(0,0,97,97); end; end.