Good to Know Database

AVR-NET-IO: Web-Thermograph im Eigenbau


Auf dieser Seite möchte ich beschreiben, wie Sie einen Web-Thermographen mit dem AVR-NET-IO Board aufbauen können. Als Betriebssystem wird Ethersex auf dem Web-Thermographen eingesetzt. Für die Temperaturmessung werden die 1-Wire Sensoren DS18S20 verwendet, welche einen Temperaturbereich von -55°C bis +125°C abdecken. Im Messbereich von -10°C bis +85°C liegt die Messgenauigkeit bei ±0,5°C. Der hier vorgestellte Web-Thermograph frägt alle 5 Minuten die Sensoren ab und speichert die Messwerte auf einer SD-Karte ab. Über die Netzwerkschnittstelle des AVR-NET-IO Boards ist es möglich auf die Logdatei sowie auf das Webinterface von Ethersex zuzugreifen. Das Webinterface bietet die Möglichkeit die aktuellen Messwerte der Sensoren abzufragen.

Web-Thermograph - AussenansichtWeb-Thermograph - Innenansicht

Aufbau des AVR-NET-IO Boards

Falls Sie das AVR-NET-IO Board als Fertigmodul erstanden haben, müssen Sie nur den ATmega32 durch einen ATmega644P austauschen. Falls die beiden Festspannungsregler (IC1 und IC2) zu heiß werden, sollten Sie ihnen Kühlkörper spendieren. Beachten Sie jedoch, dass die beiden Bauteile auf unterschiedlichen Potentialen liegen und nicht durch einen gemeinsamen Kühlkörper eine elektrisch leitende Verbindung erhalten.

Wenn Sie den Bausatz erworben haben, können Sie einige, nicht benötigte Bauteile bereits im Vorfeld entfernen. In der folgenden Liste sind die Bauteile aufgelistet, welche für den Web-Thermographen nicht benötigt werden beziehungsweise durch andere Bauteile ersetzt wurden. Dies bringt einige Vorteile, allerdings auch ein paar Nachteile mit sich welche im Anschluß besprochen werden.

Netzteil:
C2, C3               nicht bestückt
D1, D4               nicht bestückt
D2, D3, D5           ersetzt durch Drahtbrücken
Netz                 ersetzt durch Stiftleiste; LED wurde in das Gehäuse eingebaut
IC1                  nicht bestückt

RS232-Schnittstelle:
C14, C15, C16, C17   nicht bestückt
IC4                  nicht bestückt
J5                   nicht bestückt

A/D-Wandler:
J4                   nicht bestückt
J6, J7, J8, J9, J10  nicht bestückt

Sonstiges:
R3, R6, R7           ersetzt durch 470 Ohm Widerstände
IC5                  ersetzt durch einen ATmega644P
J2                   ersetzt durch Stiftleisten; RJ45-Buchse wurde in das Gehäuse eingebaut
J3                   nicht bestückt

Da der Festspannungsregler (IC1) und die eingangsseitigen Kondensatoren (C2 und C3) entfernt wurden, müssen Sie für die Spannungsversorgung der Schaltung ein (stabilisiertes) 5V Netzteil verwenden. Für meinen Web-Thermographen verwende ich ein 5V Stecker-Schaltnetzteil (KSUFB05000050D1EU) von Pollin.

Durch das Entfernen beziehungsweise Ersetzen der Dioden des Brückengleichrichters (D1, D2, D4, D5), kann die Schaltung nur noch mit einer Gleichspannungsquelle betrieben werden. Des Weiteren wurde dadurch der Verpolungsschutz entfernt. Achten Sie deshalb beim Anklemmen der Versorgungsspannung auf die richtige Polung. Bei meinem Web-Thermographen habe ich das Verpolungsproblem mit einer für das 5V Netzteil passenden Hohlstecker-Buchse (Innendurchmesser 2,1 mm) gelöst.

Die Bauteile für die RS232-Schnittstelle wurden nicht bestückt, da in diesem Anwendungsfall die Serielle Schnittstelle nicht benötigt wird und nur unnötig Strom verbrauchen würde.

Auch die Vorwiderstände (R3, R6 und R7) der LED's wurden vergrößert um den Stromverbrauch weiter zu senken.

Der standardmäßige Mikrocontroller ATmega32 wird gegen einen pinkompatiblen ATmega644P ausgetauscht. Dies ist nötig, damit Ethersex mit den benötigten Funktionen in den Flash-Speicher passt.

Die 3-polige Stiftleiste und die Anreihklemmen, welche für den A/D-Wandler vorgesehen sind, wurden ebenfalls nicht bestückt da der A/D-Wandler nicht genutzt wird.

Die RJ45-Buchse wurde in das Gehäuse eingebaut und mit einem Flachbandkabel mit der Platine verbunden. Der 25-polige D-SUB-Stecker wurde ebenfalls nicht bestückt.

Das folgende Bild zeigt das hier eingesetzte AVR-NET-IO Board mit den beschriebenen Modifikationen.

AVR-NET-IO Board für den Web-Thermographen

Aufbau des SD-Kartenlesers mit DS18S20-Adapter

Den Schaltplan, den Bestückungs- und Verdrahtungsplan für den SD-Kartenleser mit DS18S20-Adapter finden Sie unter www.gtkdb.de/index_18_1045.html.

SD-Kartenleser mit DS18S20-Adapter

Fertigen Sie auch zwei Verbindungskabel an, um den SD-Kartenleser mit dem AVR-NET-IO Board zu verbinden.

Verdrahtung der DS18S20 Sensoren

Für den Anschluss der Temperatursensoren wurden RJ11 Buchsen in das Gehäuse des Web-Thermographen eingebaut. Diese sind mit den entsprechenden Pins auf der Erweiterungsplatine (siehe vorhergehenden Abschnitt) verbunden. Für die Verbindung zwischen den RJ11 Buchsen und den 1-Wire Sensoren wurden Modemkabel verwendet. Dazu habe ich an einem Ende den RJ11 Stecker abgetrennt, einen Temperatursensor angelötet und mit einem Schrumpfschlauch versiegelt.

Temperatursensoren für den Web-Thermographen

Damit Sie die Messwerte einem Sensor zuordnen können, sollten Sie wenn der Web-Thermograph funktioniert die 64-bit langen Seriennummern der einzelnen Sensoren herausfinden und diese entsprechend beschriften.

Vorbereitungen für das Kompilieren und Flashen von Ethersex

Damit Sie Ethersex kompilieren und auf das AVR-NET-IO Board flashen können, benötigen Sie einige zusätzliche Pakete welche Sie unter Ubuntu (hier Ubuntu 10.04) wie folgt installieren können.

georg@ubuntu1004:~$ sudo apt-get install gcc-avr avr-libc avrdude dialog gawk m4 libncurses5-dev

Anschließend laden Sie sich den aktuellen Ethersex Quellcode herunter.

georg@ubuntu1004:~$ wget http://github.com/ethersex/ethersex/tarball/master

Entpacken Sie das heruntergeladene Archiv und wechseln in das extrahierte Verzeichnis.

georg@ubuntu1004:~$ tar xfz ethersex-ethersex-snapshot_compile_ok-0-g09442d7.tar.gz
georg@ubuntu1004:~$ cd ethersex-ethersex-09442d7/

Pinning anpassen

Da bei der hier verwendeten Schaltung (siehe Selbstbau-Anleitung: SD-Kartenleser mit DS18S20-Adapter für das AVR-NET-IO Board) der Chip Select Pin des SD-Slots beziehungsweise der SD-Karte mit dem Pin PB3 des Mikrocontrollers verbunden wurde, müssen Sie dies in der Datei pinning/hardware/netio.m4 für Ethersex bekannt geben.

georg@ubuntu1004:~/ethersex-ethersex-09442d7$ gedit pinning/hardware/netio.m4

Suchen Sie hier den folgenden Abschnitt.

ifdef(`conf_SD_READER', `dnl
  /* port the sd-reader CS is attached to */
  pin(SPI_CS_SD_READER, PB2, OUTPUT)
')dnl

Ändern Sie den Chip Select Pin wie folgt ab.

  pin(SPI_CS_SD_READER, PB3, OUTPUT)

Control6-Skript zur Temperaturprotokollierung erstellen

Falls Sie die 64-bit langen Seriennummern der einzelnen Sensoren noch nicht wissen, sollten Sie diesen Abschnitt überspringen und vorher die Seriennummern der Sensoren wie im Abschnitt Funktionstest beschrieben herausfinden. Wenn Sie die Seriennummern herausgefunden haben, folgen Sie den Anweisungen in diesem Abschnitt, kompilieren Ethersex erneut und flashen den Mikrocontroller mit dem neuen Flash-Image.

Erstellen Sie zuerst eine Sicherungskopie des Beispiel-Skripts welches beim Ethersex-Quellcode dabei ist.

georg@ubuntu1004:~/ethersex-ethersex-09442d7$ cp control6/control6.src control6/control6.src.org

Anschließend öffnen Sie die Datei gedit control6/control6.src mit einem Editor.

georg@ubuntu1004:~/ethersex-ethersex-09442d7$ gedit control6/control6.src

Löschen Sie den Inhalt der Datei und fügen das folgende Control6-Skript ein.

// ###########################################################################
// ##                                                                       ##
// ##             Temperature Logging with the AVR-NET-IO Board             ##
// ##                                                                       ##
// ## Creation:    06.08.2010                                               ##
// ## Last Update: 29.08.2010                                               ##
// ##                                                                       ##
// ## Copyright (c) 2010 by Georg Kainzbauer <http://www.gtkdb.de>          ##
// ##                                                                       ##
// ## This program is free software; you can redistribute it and/or modify  ##
// ## it under the terms of the GNU General Public License as published by  ##
// ## the Free Software Foundation; either version 2 of the License, or     ##
// ## (at your option) any later version.                                   ##
// ##                                                                       ##
// ###########################################################################

CONTROL_START
  THREAD(templog)
    // Define variables
    int16_t temp = 0;
    char temp_str[5];

    // Write timestamp to temp.log
    VFS_LOG("temp.log", "\n%04d-%02d-%02d %02d:%02d", CLOCK_YEAR(), CLOCK_MONTH(), CLOCK_DAY(), CLOCK_HOUR(), CLOCK_MIN());

    // Get value of 1-Wire sensor
    temp = ONEWIRE_GET(10208ee10108003f);
    // Convert value to string
    itoa_fixedpoint(temp, 1, temp_str);
    // Write value to temp.log
    VFS_LOG("temp.log", "|10208ee10108003f:%5s", temp_str);

    WAIT(2);

    // Get value of 1-Wire sensor
    temp = ONEWIRE_GET(104671e101080087);
    // Convert value to string
    itoa_fixedpoint(temp, 1, temp_str);
    // Write value to temp.log
    VFS_LOG("temp.log", "|104671e101080087:%5s", temp_str);

    WAIT(2);

    // Get value of 1-Wire sensor
    temp = ONEWIRE_GET(10c67be1010800d0);
    // Convert value to string
    itoa_fixedpoint(temp, 1, temp_str);
    // Write value to temp.log
    VFS_LOG("temp.log", "|10c67be1010800d0:%5s", temp_str);

    WAIT(2);

    // Get value of 1-Wire sensor
    temp = ONEWIRE_GET(109b79e101080037);
    // Convert value to string
    itoa_fixedpoint(temp, 1, temp_str);
    // Write value to temp.log
    VFS_LOG("temp.log", "|109b79e101080037:%5s", temp_str);

    WAIT(600);
  THREAD_END(templog)

  ON ONCE CLOCK_MIN == 0 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 5 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 10 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 15 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 20 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 25 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 30 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 35 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 40 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 45 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 50 DO THREAD_RESTART(templog); END
  ON ONCE CLOCK_MIN == 55 DO THREAD_RESTART(templog); END
CONTROL_END

Das hier gelistete Control6-Skript frägt alle fünf Minuten die angegebenen Sensoren ab und speichert die Messwerte in die Logdatei temp.log auf der SD-Karte ab. Ersetzen Sie die Seriennummern der einzelnen Sensoren (hier 10208ee10108003f, 104671e101080087, 10c67be1010800d0 und 109b79e101080037) durch die Seriennummern der von Ihnen verwendeten Sensoren. Falls Sie mehr oder weniger Sensoren verwenden wollen, kopieren beziehungsweise löschen Sie die entsprechenden Abschnitte im Skript.

Ethersex konfigurieren

Starten Sie im Quellcodeverzeichnis das grafische Konfigurationsskript.

georg@ubuntu1004:~/ethersex-ethersex-09442d7$ make menuconfig

Unter Load a Default Configuration wählen Sie das Profil Pollin AVR Net-IO aus und bestätigen die Auswahl mit Enter.

Load a Default Configuration  --->
        ( ) Pollin AVR Net-IO

Da der ATmega32 durch einen ATmega644P ausgetauscht wurde, müssen Sie die Option Target MCU unter dem Menü General Setup anpassen.

General Setup  --->
        (ATmega32) Target MCU
                (X) ATmega644p

Über Exit gelangen Sie wieder in das vorhergehende Menü zurück.

Unter dem Menüpunkt VFS (Virtual File System) support sollten Sie die folgenden Optionen aktivieren beziehungsweise deaktivieren.

General Setup  --->
        [*] VFS (Virtual File System) support  --->
                [*] VFS File Inlining  --->
                        [ ] Inline IO
                        [ ] Inline ADC
                        [*] Inline OneWire
                [*] SD/MMC-Card Access  --->

Damit das weiter oben erstellte Control6-Skript ausgeführt werden kann, müssen Sie die Option control6 scripts aktivieren.

General Setup  --->
        [*] control6 scripts (EXPERIMENTAL)

Im Menü Network können Sie den Hostnamen, die MAC-Adresse, die IP-Adresse und die Netzwerkmaske des Web-Thermographen festlegen und die IP-Adresse ihres Routers eintragen.

Network  --->
             Hostname: "Web-Thermograph"
        [*] Ethernet (ENC28J60) support  --->
                     Etherrape MAC address: "00:22:f9:01:6b:a8"
                     Etherrape IP address: "192.168.10.50"
                     Netmask: "255.255.255.0"
             Default gateway: "192.168.10.2"

Für den NTP-Client und den TFTP-Server benötigen Sie den UDP-Support.

Network  --->
        [*] UDP support

Da der A/D-Wandler nicht benötigt wird, können Sie diese Funktion deaktivieren.

I/O  --->
        [ ] ADC input  --->

Überprüfen Sie ob der Onewire Support und die Onewire Device Detection aktiviert sind.

I/O  --->
        [*] Onewire support  --->
                [*] Onewire device detection support

Da für die Protokollierung der Temperaturen eine genaue Systemzeit benötigt wird, aktivieren Sie die Systemuhr sowie den NTP-Support. Ändern Sie die IP-Adresse des NTP-Servers entsprechend ab.

Applications  --->
        [*] System clock support  --->
                [*] Date and Time support
                [*] Synchronize using NTP protocol
                     NTP IP: "192.168.10.1" (NEW)
                (123) NTP Port (NEW)

Um über HTTP auf die SD-Karte zugreifen zu können, muss der HTTP-Server und das SD-Card Directory Listing aktiviert sein.

Applications  --->
        [*] HTTP Server  --->
                [*] SD-Card Directory Listing (EXPERIMENTAL)

Zum Schluß aktivieren Sie noch den TFTP-Server.

Applications  --->
        [*] TFTP support

Beenden Sie das Konfigurationsskript über Exit und speichern die Einstellungen ab.

Konfiguration überprüfen

Indem Sie den folgenden Befehl aufrufen, erhalten Sie eine Übersicht der ausgewählten Module.

georg@ubuntu1004:~/ethersex-ethersex-09442d7$ make show-config
[...]
These modules are currently enabled:
======================================
 * VFS
 * VFS_INLINE
 * ONEWIRE_INLINE
 * VFS_INLINE_INLINESVG
 * VFS_INLINE_INLINESVG
 * VFS_SD
 * SD_READER
 * CONTROL6
 * ENC28J60
 * ETHERNET
 * UIP
 * NET
 * IPV4
 * TCP
 * UDP
 * ICMP
 * PORTIO_SIMPLE
 * ONEWIRE
 * ONEWIRE_DETECT
 * ECMD_PARSER
 * ECMD_TCP
 * CLOCK
 * CLOCK_DATETIME
 * NTP
 * HTTPD
 * HTTP_SD_DIR
 * TFTP
 * IPV4

Ethersex kompilieren

Durch den Befehl make übersetzen Sie den Quellcode.

georg@ubuntu1004:~/ethersex-ethersex-09442d7$ make
[...]
=======The ethersex project========
Compiled for: atmega644p at 16000000Hz
Imagesize: 47010/65536 bytes (71.73%)
  [=====================---------]

Program (.text + .data) : 41472 bytes
Data (.data + .bss) :  3099 bytes

===================================

Ethersex in den Flash-Speicher schreiben

Verbinden Sie den In-System Programmer (hier ein USBtinyISP) mit einem 10 poligen 1:1 Kabel mit dem ISP Connector auf dem AVR-NET-IO Board. Danach verbinden Sie den USBtinyISP mit einem USB-Port Ihres Rechners. Schließen Sie erst jetzt die Spannungsversorgung an das AVR-NET-IO Board an.

Mit dem folgenden Befehl übertragen Sie anschließend das Flash-Image in den Flash-Speicher des ATmega644P Mikrocontrollers.

georg@ubuntu1004:~/ethersex-ethersex-09442d7$ sudo avrdude -c usbtiny -p m644p -U flash:w:ethersex.hex

Fuse-Bits setzen

Mit dem folgenden Befehl setzen Sie zum Schluss noch die Fuse-Bits des neu eingesetzen ATmega644P Mikrocontrollers.

georg@ubuntu1004:~/ethersex-ethersex-09442d7$ sudo avrdude -c usbtiny -p m644p -U efuse:w:0xff:m -U hfuse:w:0xd9:m -U lfuse:w:0xff:m

SD-Karte formatieren

Damit Ethersex die SD-Karte lesen und beschreiben kann, müssen Sie die SD-Karte mit FAT16 formatieren.

georg@ubuntu1004:~$ sudo mkfs.msdos /dev/mmcblk0p1

Funktionstest

Nachdem das Flash-Image erfolgreich in den Flash-Speicher des Mikrocontrollers geschrieben und die Fuse-Bits gesetzt wurden, trennen Sie die Spannungsversorgung und den USBtiny In-System Programmer vom AVR-NET-IO Board. Anschließend verbinden Sie den SD-Kartenleser mit dem AVR-NET-IO Board, klemmen die DS18S20 Temperatursensoren an die vorgesehenen Steckverbindungen an, stecken die SD-Karte in den SD-Slot, verbinden das Board mit Ihrem Netzwerk und schließen die Stromversorgung wieder an.

Für einen ersten Funktionstest bauen Sie eine Telnet-Verbindung zum Port 2701 des AVR-NET-IO Boards auf.

georg@ubuntu1004:~$ telnet 192.168.10.50 2701
Trying 192.168.10.50...
Connected to 192.168.10.50.
Escape character is '^]'.

Mit dem folgenden Befehl überprüfen Sie, ob die Systemuhr über NTP automatisch synchronisiert wird.

date
Sat 27.08.2010 19:25:15

Falls die Systemzeit nicht stimmt, rufen Sie den Befehl nach einer kurzen Wartezeit erneut auf. Der Synchronisationsvorgang benötigt in der Regel einige Sekunden nach dem Verbinden der Spannungsversorgung mit dem AVR-NET-IO Board.

Mit dem Befehl 1w list ermitteln Sie die 64-bit langen Seriennummern aller angeschlossenen und erkannten 1-Wire Sensoren.

1w list
10208ee10108003f
104671e101080087
10c67be1010800d0
109b79e101080037
OK

Zum Identifizieren der einzelnen Sensoren, verbinden Sie immer nur einen Sensor mit dem Web-Thermographen und rufen den Befehl auf. Die ermittelten Seriennummern können Sie anschließend in das Control6-Skript eintragen.

Über den Befehl 1w convert wird eine Temperaturmessung veranlasst und mit 1w get kann danach der Messwert des jeweiligen Sensors in °C ausgegeben werden.

1w convert
OK
1w get 10208ee10108003f
24.4
1w get 104671e101080087
23.9
1w get 10c67be1010800d0
24.1
1w get 109b79e101080037
24.3

Wenn Sie Ethersex bereits mit dem Control6-Skript kompiliert haben, sollten nach maximal fünf Minuten bereits die ersten Messwerte auf die SD-Karte geschrieben worden sein. Ob sich bereits eine Logdatei auf der SD-Karte befindet zeigt Ihnen der folgende Befehl an.

sd dir
                        temp.log  109
OK

Die Logdatei können Sie sich in einem Browser (http://192.168.10.50/temp.log) anzeigen lassen oder über HTTP herunterladen.

georg@ubuntu1004:~$ wget -q http://192.168.10.50/temp.log

Alternativ können Sie die Logdatei auch über TFTP herunterladen.

georg@ubuntu1004:~$ echo "get temp.log" | tftp 192.168.10.50

Falls Sie die Logdatei auf der SD-Karte löschen wollen, können Sie den folgenden Befehl verwenden. Beachten Sie aber, dass falls eine temp.log im aktuellen Verzeichnis existiert diese gelöscht wird.

georg@ubuntu1004:~$ echo -n "" > temp.log && echo "put temp.log" | tftp 192.168.10.50

Nützliche Links:

AVR-NET-IO: Das AVR-NET-IO Board
Selbstbau-Anleitung: USBtiny In-System Programmer
AVR-NET-IO: Ethersex für das AVR-NET-IO Board kompilieren
AVR-NET-IO: Den ATmega32 mit avrdude und dem USBtiny ISP flashen
AVR-NET-IO: Umbau vom ATmega32 zum ATmega644P
Die Fuse-Bits
AVR-NET-IO: Ethersex mit NTP-Support kompilieren
Selbstbau-Anleitung: SD-Kartenleser mit DS18S20-Adapter für das AVR-NET-IO Board
AVR-NET-IO: SD-Kartenleser in Ethersex einbinden
AVR-NET-IO: Temperaturmessung mit den 1-Wire Sensoren DS18S20
Shell Skript: Temperatursensoren des AVR-NET-IO Boards abfragen


Dieser Eintrag wurde am 30.08.2010 erstellt und zuletzt am 24.01.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_18_1052.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer