17
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-Gymnasium Schottenplatz 2 78462 Konstanz

ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend ... forscht/Friedrichshafen 2011.pdf · um ein Modul zur Steuerung des Infrarotsensors erweitern. Die Steuerungssoftware der

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.