Datenlogger - · PDF fileInhaltsverzeichnis 1. Über das Projekt S.4 2. Aufgabenstellung S.4 3. Spannungsversorgung und Arduino S.4 4. Sensoren und Datenlogger S.5 5. Matlab S.6

Embed Size (px)

Citation preview

  • Praktikumsbericht

    Datenlogger

    von Stefan Hinterleuthner(03621570)

    Dauer der IP: 4 Wochen05.03.2012-30.03.2012

    Betreuer: Johannes Feldmaier

  • 2

  • Inhaltsverzeichnis

    1. ber das Projekt S.42. Aufgabenstellung S.43. Spannungsversorgung und Arduino S.44. Sensoren und Datenlogger S.55. Matlab S.66. Xbee S.77. Gewichtsminimierung beim Platinenaufbau S.78. Anhang S.9

    3

  • ber das ProjektDie ersten vier Wochen meiner Ingenieurpraxis habe ich im Zeitraum vom 05.03.2012 bis zum 29.03.2012 bei dem hands-on-Projekt daedalus der TU-Mnchen am Lehrstuhl fr Datenverarbeitung absolviert. Ziel dieses Projektes ist es einen ca. sechs Meter langen und zwei Meter breiten Zeppelin mit allerlei Elektronik auszustatten, mit deren Hilfe dieser in der Luft stabilisiert werden soll. Um dieses Ziel zu erreichen ist das daedalus Projekt in drei Gruppen - die Bodengruppe, die Kommunikationsgruppe und die Luftgruppe - unterteilt. Aufgabe der Kommunikationsgruppe ist es fr eine sichere Funkverbindung zum Zeppelin zu sorgen, die Bodengruppe ist fr die Steuerung des Zeppelins und fr das Auswerten der bertragenen Daten verantwortlich und die Luftgruppe fr die Bordelektronik.

    AufgabenstellungWhrend meines Praktikums hatte ich es mit allen drei Gruppen zu tun. Meine Aufgabe war es verschiedene Sensordaten auszulesen, mit dem Datenlogger OpenLog des Herstellers Sparkfun1 auf einer micro-SD-Karte zu speichern und diese parallel an die Bodenstation senden - die Markus Hefele whrend seines Praktikums entwickelt hat. Anschlieend entwarf ich eine Matlab GUI mit der die gespeicherten Daten graphisch dargestellt und analysiert werden knnen.

    Spannungsversorgung und ArduinoBegonnen habe ich, vom Arbeitsplan abweichend, mich um die Spannungsversorgung meines Moduls zu kmmern, welches aus diversen Sensoren, einen Mikrocontroller und den Datenlogger besteht. Ich habe mich dafr entschieden, da ich aufgrund fehlender Erfahrung nicht wusste ob das von mir erdachte Konzept (vgl. Abb.1) funktioniert oder noch zustzliche Bauteile bestellt werden mssen. Zur Spannungsversorgung stand mir ein 3.7V Lipo-Akku zu Verfgung. Da ich aber fr den Datenlogger sowohl Bauteile verwendete die mit 5V zu Betreiben sind, als auch welche die nur mit 3.3V versorgt werden drfen, habe ich mit Hilfe eines StepUp-Wandlers die 3.7V auf 5V angehoben und anschlieend fr die 3.3V-Versorgung mit einem Spannungswandler wieder verringert.

    Abb.1: Schaltplan Spannungsversorgung Abb.2: Spannungsversorgung

    Nachdem sich dieses Konzept als praxistauglich erwiesen hat (vgl. Abb.2), begann ich damit mehrere Online-Tutorials durchzuarbeiten um den Umgang mit Mikrocontrollern zu erlernen. Als uerst hilfreich hat sich dabei das Tutorial auf www.ladyada.net/learn/arduino/ erwiesen. Als es mir erfolgreich gelungen ist LEDs und Taster anzusteuern, entschied ich mich - frher als im

    1 http://www.sparkfun.com/products/9530

    4

    Step-UpGND

    V_in

    V_in

    V_out

    V_out

    GND3.7 V

    5 V

    3.3 V10F 10F

  • Arbeitsplan vorgesehen - damit zu beginnen den ersten Sensor an den Arduino2 anzuschlieen.

    Sensoren und DatenloggerMir erschien es sinnvoll mit einem weniger komplexen Sensor zu beginnen. Die Wahl fiel deshalb auf den DHT11, einen Luftfeuchtigkeits- und Temperatursensor. Dieser wird mit einem Analogpin des Arduino verbunden und kann dann ausgelesen werden. ber die serielle Schnittstelle des Mikrocontrollers konnte die Messung ber den "Serial Monitor" am PC mitverfolgt oder mit dem Datenlogger auf einer SD-Karte aufgezeichnet werden.

    Am Ende der ersten Woche nahm ich daher das Hinzufgen der Real Time Clock(RTC) DS13073 in Angriff, da mein Betreuer und ich es als sinnvoll erachteten Uhrzeit und Datum auf der SD-Karte mitzuschreiben. Die RTC wird dazu ber einen I2C Bus angeschlossen. Der Arduino besitzt ebenfalls einen I2C Buscontroller, dies sind die Analogpins A4 und A5. Das anfngliche Problem, die Einstellung von Uhrzeit und Datum schien behoben und ich bereitete alles fr die nchste Woche vor. Am folgenden Montag stellte sich allerdings heraus, dass sich bers Wochenende sowohl Datum als auch Uhrzeit signifikant verstellt hatten. Nach einiger Recherche fand ich heraus, dass dafr ein Kondensator der RTC verantwortlich ist, der sich zu schnell ber das gesamte System entldt. Das hat zur Folge, dass die RTC nach dem Abschalten des Arduinos nicht rechtzeitig in den Batteriemodus wechseln kann und Uhrzeit/Datum stehenbleiben. Durch den Einbau eines Schalters zwischen Spannungsversorgung und der Uhr konnte dieses Problem allerdings behoben werden. Der Schalter trennt die Uhr vom restlichen System, was zur Folge hat, dass sich der Kondensator nur in die Uhr entldt und nicht in den gesamten Schaltkreis und der RTC somit gengend Zeit bleibt um in den Batteriemodus zu wechseln. Dazu muss der Schalter auf off geschalten werden bevor man den Arduino von der Spannungsversorgung trennt und auf on wenn der Mikrocontroller bereits eingeschaltet ist.

    Anschlieend beschftigte ich mich mit einem Luftdruck- und Temperatursensor, dem BMP0854, der ebenfalls ber eine I2C Verbindung am Arduino angeschlossen wird. Nachdem ich auch diesen auslesen konnte, versuchte ich die drei bisher angesprochenen Sensoren gleichzeitig mit den Arduino zu verbinden und auszulesen, indem ich die drei separaten Programmcodes zu einem einzigen zusammenfgte, was auch gelang. Dabei stellte sich heraus, dass bedingt durch die Eigenschaften des I2C Busses - gleichzeitig bis zu 128 verschiedene Sensoren am Arduino angeschlossen werden knnten, solange sie nur unterschiedliche Adressen besitzen. Diesen Programmcode habe ich dann im Laufe des Praktikums nach und nach um die weiteren Sensoren erweitert (siehe Anhang). Bei Testmessungen stellte sich jedoch heraus, dass die Hhenmessung nur auf circa einen Meter genau war und bei lngeren Messungen der gemessene Luftdruckwert nach unten bzw. oben wegdriftet. Um diesen Effekten entgegenzuwirken arbeitete ich mit Christian Lck zusammen der sich ebenfalls mit diesem Sensor auseinandersetzte. Wir nderten den Programmcode, sodass im high resolution mode gemessen wurde und bastelten eine nahezu lichtundurchlssige Kappe um den Sensor vor einfallenden Umgebungslicht zu schtzten, da die dadurch entstehenden Photostrme im Sensor das Messergebnis gravierend verflschen knnen. Mit diesen Manahmen wurde eine leichte Verbesserung erreicht und die Schwankungen lieen sich auf circa 0,8 Meter eingrenzen.

    Da wie oben bereits erwhnt, mit dem Luftdrucksensor BMP085 keine genaueren Messungen mglich waren, gerade aber im bodennahen Bereich genaue Hhenangaben wichtig sind, fgte ich

    2 http://www.arduino.cc/3 http://www.sparkfun.com/products/994 http://www.sparkfun.com/products/9694

    5

  • den Ultraschallsensor MB12405 hinzu. Dabei arbeitete ich mit Klaus Wackerbarth zusammen, der eine Gondel fr den Mini-Zeppelin entwickelte und ebenfalls diesen Sensor verwendete. Beim MB1240, der ber einen analogen Ausgang mit dem Arduino verbunden wird, traten keine greren Schwierigkeiten auf und er lies sich problemlos zusammen mit den anderen Sensoren ansteuern.

    Da ich zu diesem Zeitpunkt dem Arbeitsplan weit voraus war, wurden mir von meinen Betreuern weitere Sensoren zur Verfgung gestellt, darunter auch das 3-Achsengyroskop SD7406 und der 3-Achsenbeschleunigungssensor ADXL3457. Nach einigen erfolglosen Versuchen stie ich auf das Wiki von dfrobot8, indem beide Sensoren gut beschrieben sind. Ich entschied mich den Beschleunigungssensor ber den I2C Bus mit dem Arduino zu verbinden und das Gyroskop mit einer SPI-Verbindung, da am Arduino noch gengend digitale Eingnge zur Verfgung standen.

    Des Weiteren fgte ich noch den Lichtsensor TEMT60009, der die Lichtstrke in Lux misst und den Tiltsensor RPI-103110 hinzu.

    Als letztes schloss ich noch einen Kompass (HMC5883L)11 an den Arduino, dessen Code ich zusammen mit Christian Lck und Martin Schneider entwickelte, da diese ebenfalls mit dem Sensor arbeiteten, um so die momentane Blickrichtung des Luftschiffs bestimmen zu knnen.

    Matlab und GUINach den ersten beiden Wochen begann ich mich in Matlab einzuarbeiten, wobei ich auf mehrere Online-Tutorials zurckgriff. Besonders ntzlich waren dabei das Matlab-Tutorial der Uni Stuttgart12 und die doc/help Funktion von Matlab selbst bzw. die Mathworks-Tutorials13.

    Nachdem ich mich zuerst mit grundlegenden Rechenoperationen beschftigt und auch bereits erste Graphen geplottet hatte, begann ich damit ein Graphical User Interface, kurz GUI, zum Darstellen der Sensordaten zu programmieren. Wie man in Abb. 3 erkennen kann ist die GUI zweigeteilt, wobei die obere und die untere Hlfte die selben Funktionen aufweisen, dadurch kann man z.B. zwei Flge miteinander vergleichen oder sich auch verschiedene Sensordaten untereinander anzeigen lassen.

    Da beide Hlften identisch sind werde ich im Folgenden nur noch die Obere behandeln. Durch bettigen des Select-Buttons kann eine .csv-Datei geladen werden. Diese Datei sollte dabei entsprechend Abb. 4 gegliedert sein, wobei die ersten beiden Zeilen nur zur Veranschaulichung dienen und vorher aus der .csv-Datei gelscht werden mssen. Ist dies der Fall erscheint in der Start-/End-Zeile Datum und Uhrzeit des Flugbeginns/-endes. Mithilfe der drei popup-Mens knnen Linienfarbe, Linienart und der gewnschte Sensor gewhlt werden. Klickt man anschlieend auf Plot werden die Sensordaten geplottet, wobei auf der x-Achse die Anzahl der samples und auf der y-Achse die gemessene Gre angetragen ist. Mit Hold On kann de