Heute möchte ich ein Thema vorstellen, mit dem ich mich kurz im
Rahmen einer Recherche beschäftigt habe. Viele (Techniker) kennen
vielleicht die Software
Matlab
von der Firma Matworks. Das ist ein extrem umfangreiches Softwarepaket,
das bei uns in der Lehre eingesetzt wird, um Studierende in allen
möglichen technischen Bereichen zu unterrichten. Sei es
Signalverarbeitung, Regelungstechnik, Bildverarbeitung, etc. - Matlab
ist das Tool, um all das professionell umzusetzen. Auch wenn es um
Messdatenerfassung geht, muß man nicht unbedingt auf Tools
zurückgreifen, mit denen ein Projekt oder Programm "gezeichnet" wird.
Das ist zwar toll für den Einstieg, kann (und wird) in späterer Folge
aber aufgrund des riesigen Overheads und der benötigten PC Resourcen viel
zu umständlich, wenn man schnell einmal über eine externe Hardware
irgendwelche physikalischen Größen aufzeichnen und verarbeiten will.
In diesem kleinen Projekt'chen möchte ich nun zeigen, wie einfach man mit Hilfe eines
Arduino Uno
Boards zusammen mit Matlab eine Temperaturmessung realisieren kann. Der
Sensor soll hier ein ganz einfacher NTC Widerstand sein. Das bedeutet,
der ohmsche Widerstand des Bauteils ändert sich mit der Temperatur, in
dessen Umgebung sich das Bauteil befindet. Die Änderung passiert hier
folgendermaßen: wenn die Temperatur steigt, so wird der ohmsche
Widerstand kleiner. (Negativer Temperatur Koeffizient) (Coefficient
engl. -> NTC). Einziger kleiner Haken - die Änderung passiert nicht
linear wie zum Beispiel beim PT100. Das bedeutet der Verlauf des
Widerstands bei Änderung der Temperatur ist keine Gerade mit irgendeiner
Steigung, sondern eine e-Funktion. Das wiederum bedeutet, dass, will
man aus den gemessenen Widerstandwerten in eine Temperatur
zurückrechnen, die Funktionsgleichung zum NTC gefunden werden muß.
Glücklicherweise findet man diese aber fix und fertig in den
Herstellerdatenblättern ;) aber dazu später.
Man hat nun einen
temperaturabhängigen Widerstand, ein Arduino Uno - Board und einen PC
auf dem Matlab läuft. Wie geht´s nun weiter? Nehmen wir als Beispiel an,
dass Matlab 2014b installiert ist. Nun gibt es in Matlab unter dem Tab
"Home" eine Rubrik, die sich "Add-Ons" nennt. Klick man auf diese, so
klappt ein Menü auf, in dem man den Eintrag "Get Hardware Support
Packages" findet. Den klickt man an und es öffnet sich ein Fenster
namens "Support Package Installer".
Unter "Install from Internet"
und "Next>" kommt man zu einem Auswahlmenü der verfügbaren Packages.
Hier sucht man sich "Arduino" aus und setzt im rechten Bereich des
Fensters einen Haken - und zwar bei dem Paket "Aquire inputs and send
outputs on Arduino Uno...". Danach wieder auf "Next>" klicken und die
Installation vollenden.
Ist alles erledigt so kann man den
Arduino am USB-Port anstecken. Windows sollte einen Treiber zuordnen.
(Unter Systemsteuerung - Gerätemanger - Anschlüsse > sollte ein
Arduino Uno (COMx) zu finden sein). Ist das der Fall, dann sollte es klappen :)
Jetzt kann in der Matlab Console folgender Befehl eingegeben werden:
arduino()
Folgende Antwort kommt nun zurück:
arduino with properties:
Port: 'COM5'
Board: 'Uno'
AvailableAnalogPins: [0, 1, 2, 3, 4, 5]
AvailableDigitalPins: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
Libraries: {'I2C', 'SPI', 'Servo'}
Der
COM-Port unterscheidet sich natürlich und wird meist auf den nächsten
freien COM gemappt. Hat das aber geklappt, so ist der erste Teil schon
gewonnen. Matlab kommuniziert mit dem Arduinoboard. Es kann aber auch
vorkommen, dass Fehlermeldungen auftauchen. Wie bei mir der Fall:
Cannot detect Arduino hardware. Make sure original Arduino hardware is properly plugged in. If
using unofficial(clone) hardware, specify port and board type. For more information, see the
arduino function reference page.
Das war die erste Meldung nach der Installation: Dafür gibts aber auch Abhilfe. Man gibt folgendes ein:
a = arduino('com5','Uno')
Wenn auch dann eine Fehlermeldung kommt, so wie natürlich bei mir, dann kann man mit folgendem commando auf Fehlersuche gehen:
a = arduino('com5','Uno','TraceOn', true)
Jetzt kam bei mir die Meldung :
Updating server code on Arduino Uno (COM5). Please wait. Und danach gleich ein Errorfenster mit einem
avr-gcc.exe Fehler.
Danach habe ich lange in diversen Foren gesucht, Tracelogs verglichen
und nach den Fehlermeldungen gegoogelt. Hier gab es Tips von: die
make.exe in den Tiefen des SupportPackages Ordner ist nicht kompatibel
mit 64bit Systemen, mit Windows8.1 und Windows10 gibt es
Zugriffsrechteprobleme und und und. Leider war aber nie ein
Lösungsvorschlag dabei der bei mir funktionierte. Also habe ich auf
einem zweiten Rechner eine jungfräuliche Installation von Matlab und dem
Arduino Matlab Package durchgeführt. Und siehe da - es funktionierte.
Aber wie jetzt nach dem Fehler suchen, oder ihn beheben. Also habe ich
auf dem funktionierenden Rechner einen Tracelog durchgeführt, indem ich
beim Aufrufen der Arduinofunction einen Port angegeben habe, auf dem ein
anderes NICHT Arudino Gerät angeschlossen ist. Und siehe da, der
Errortracelog war seeehr lange und ausführlich. Man konnte ansehen was
die Funktion alles aufruft. Und irgendwo ganz unten im log las ich was
von
avrdude... Da kam mir die Idee. Auf meinem PC sind einige
Entwicklungsumgebungen installiert. Unter anderem auch AVR-Studio und
der WinAVR20100110 Compiler. Und genau der war das Problem.
Den WinAVR
gelöscht und schon klappte es.
Also steht dem weiteren Aufbau zur
Realisierung des Projekt'chen nichts mehr im Weg. Aber darüber schreibe
ich beim nächsten mal in Teil 2...