2017
HOME

Arduino, Digispark, ESP8266 u.a. als serielles Interface
Arduino in Word & Excel
Ergänzung zum Buch: Messen, Steuern und Regeln mit Word und Excel

Messen, Steuern und Regeln in Word & Excel. Cover des Reprints von 2017/2018
Reprint 2017/2019 der 3. Auflage aus 2001
ZIP-Archiv
Seit November 2017 ist das Buch Messen, Steuern und Regeln mit Word & Excel als Reprint wieder erhältlich. Seit Erscheinen der Originalausgabe hat sich das Thema gewandelt, was in anderen Titeln berücksichtigt wurde (siehe unten).

Aber auch heute kann mit den Mitteln dieses Buches ein preiswertes Messgerät zur Anwendung gebracht werden, um damit direkt in Word und Excel zu messen, zu steuern und zu regeln.

Im Buch wird das damals aktuelle Interface CompuLab benutzt und von der Anwendungsbibliothek RSAPI.DLL auch besonders unterstützt. Die Hardware ist so nicht mehr erhältlich bzw. nicht verfügbar, lässt sich aber mit einem Arduino nachbilden. Um eine direkte Messung in Excel durchzuführen wären also folgende Komponenten erforderlich:

  • Arduino Uno mit Arduino IDE
  • Buch-Anwendungsbibliothek RSAPI.DLL
  • Microsoft Excel

Damit soll es möglich sein, Messdaten direkt vom Arduino zu erhalten und bei Bedarf auszuwerten. Der Ablauf entspricht den Beschreibungen zum YT-Schreiber in Kapitel 3.


Arduino als serielles Interface

Ein Arduino wird per USB mit dem PC verbunden und erscheint dort als serielle Schnittstelle. Darauf greift die RSAPI in gewohnter Weise zu, die mit VBA-Makros in Excel aufgerufen werden kann. Um die fertigen eingebauten Interfaceroutinen zu benutzen, soll sich der Arduino so verhalten als sei an der Schnittstelle ein CompuLab angeschlossen. Ein kurzer Sketch erreicht dieses Ziel:

// CLAB_RSAPI17.INO
// Arduino als Compulab-Interface
// in Word und Excel ansprechen
// 2x Analog Eingang mit 8 Bit 
// 8x Digital Eingang
// 8x Digitalausgang
// Getestet mit RSAPI.DLL V1.7
// Original nur COM1: bis COM8:
// http://www.hjberndt.de/soft/indexcom.html
// http://www.hjberndt.de

#define AIN1 60
#define AIN2 58
#define DIN 211
#define DOUT 81

//DIGITAL OUT PINS 0 - 7 CLAB
byte Douts[] = {10,11,12,13,  16,17,18,19};
//DIGITAL IN  PINS 0 - 7 CLAB
byte Dins[]  = { 2, 3, 4, 5,   6, 7, 8, 9}; 
byte Bits[]  = {1,2,4,8,16,32,64,128};

// EXCEL:
// INITCOMPULAB(4)
// DELAY 2000 //!experimental!// 

void setup()
{Serial.begin(19200); 
 for(int i= 0;i<8;i++)pinMode(Douts[i],OUTPUT);
 for(int i= 0;i<8;i++)
 {pinMode(Dins [i],INPUT);// OPEN IS HIGH
  digitalWrite(Dins[i],HIGH); //WITH PULLUP 
 }
}

void loop()
{int i, inbyte; byte b;
 if (Serial.available()>0)
 {inbyte=Serial.read(); //data
  delay(20);//!experimental!//
  switch(inbyte)
  {case DIN:  for(i=0,b=0;i<8;i++) //PINS to BYTE
               b+= (digitalRead(Dins[i])==HIGH?Bits[i]:0);
              Serial.write(b);break; 
   case AIN1: Serial.write(analogRead(A0)>>2);break;
   case AIN2: Serial.write(analogRead(A1)>>2);break;
   case DOUT: b=Serial.read(); //OUTBYTE
              for(i=0;i<8;i++)
                digitalWrite(Douts[i],b&Bits[i]?HIGH:LOW);
              break;
  }
 }
}

Dieser Sketch benutzt die 2 Analogeingänge A0 und A1 des Arduino. Die 8 digitalen Ein- und Ausgänge können dem Listing entnommen werden. Wird dieser Sketch in den Arduino übertragen, so kann die RSAPI seriell mit dem Arduino als CompuLab kommunizieren, wenn dieser per USB verbunden ist.


Excel ruft Arduino

In einem neuen VBA-Modul sind für einen Test folgende Deklarationen erforderlich:

Declare Function INITCOMPULAB% Lib "rsapi" (ByVal x%)
Declare Function AIN% Lib "rsapi" (ByVal x%) 
Declare Sub DELAY Lib "rsapi" (ByVal x%)

Damit können nun analoge Messungen nach CompuLab-Manier in Excel durchgeführt werden:

Sub test()
 INITCOMPULAB 4 
 DELAY 2000
 For Z = 1 To 10
  Cells(Z, 1) = AIN(1) / 51
  Cells(Z, 2) = AIN(2) / 51
  DELAY 100
 Next Z
End Sub

Die RSAPI öffnet hier mit INITCOMPULAB COM4 mit den CompuLab-Parametern und setzt intern die entsprechende Hardware. Der Aufruf von AIN reagiert nun so, als wäre ein CompuLab angeschlossen. Wie man eine Schnittstelle "umlegen" kann, ist hier beschrieben. Die 2 Sekunden Bedenkzeit nach dem Öffnen sollten eingehalten werden.

Der Aufruf des Tests liefert 10 Zeilen mit den Spannungen an A0 und A1 des Arduino in 0,1-Sekunden-Schritten im aktuellen Tabellenblatt.


Excel 15 und Arduino Messwerte
Mit den wenigen entsprechenden Änderungen, wie oben dargestellt, funktioniert auch der in Kapitel 3 beschriebene TY-Schreiber, wie er auch auf dem Cover dargestellt ist, mit dem Arduino in Excel.

Der obige Sketch liefert die beiden Analogwerte mit AIN (1) und AIN(2) der Arduino Pins A0 und A1. Die Messung erfolgte bei offenem Eingang 1 und mit den 3,3 Volt des Arduino Uno an Eingang 2 (grün).

Um die LED an PIN 13 blinken zu lassen, müsste die sub DOUT aus der DLL deklariert werden, um dann mit DOUT 8 und DOUT 0 die Arduino-LED zu schalten - was ja übrigens auch im Direkt-Fenster funktioniert.

Die Windows-Umgebung besteht aus einem Tablet Dell Venue 8 Pro mit Windows 8.1 und dem mit gelieferten Office mit der Excelversion 15 (2013).


Messen und Auswerten
Mit dem Arduino und den zwei Bauteilen R = 100 k und C = 10 µF kann in Excel direkt gemessen und ausgewertet werden. Die Trendlinie zeigt das Ergebnis mit Formel:

Entladekurve mit Arduino in Excel
Zeit in Spalte A, Schaltspannung in Spalte B und Kondensatorspannung in Spalte C

Der Widerstand an A2, Kondensator (+) und Widerstand an A1, Kondensator (-) an GND und eine Brücke von A2 nach A1 stellt den Aufbau dar. A2 ist als Ausgang konfiguriert und wird über A1 gemessen.

Declare Function INITCOMPULAB Lib "rsapi" (ByVal x%) As Integer
Declare Function AIN Lib "rsapi" (ByVal x%) As Integer
Declare Sub DELAY Lib "rsapi" (ByVal x%)
Declare Sub DOUT Lib "rsapi" (ByVal x%)
Declare Sub TIMEINIT Lib "rsapi" ()
Declare Function TIMEREAD Lib "rsapi" () As Long

Const dt = 500

Sub test()
 Range("A:C").ClearContents
 Range("A1") = "Öffne Schnittstelle": DoEvents
 Range("c1") = "COM" + Str(INITCOMPULAB(3))
 DELAY 2000

 ' Aufladen
 DOUT 255
 TIMEINIT
 For Z = 1 To 10
  t = TIMEREAD
  Cells(Z, 1) = t / 1000
  Cells(Z, 2) = AIN(1) / 51
  Cells(Z, 3) = AIN(2) / 51
  Calculate
  While (t + dt) > TIMEREAD
    DoEvents
  Wend
 Next Z
 DELAY 2000

 ' Entladen
 DOUT 0
 TIMEINIT
 For Z = 1 To 10
  t = TIMEREAD
  Cells(Z, 1) = t / 1000
  Cells(Z, 2) = AIN(1) / 51
  Cells(Z, 3) = AIN(2) / 51
  Calculate
  While (t + dt) > TIMEREAD
    DoEvents
  Wend
 Next Z
End Sub


Tipps zu aktuellen Office-Versionen ab 201X
VBA ist vermutlich aus Sicherheitsüberlegungen von Microsoft versteckt worden. Folgende Schritte stellen den Zustand wieder etwas her: Im Office-Menü Datei/Optionen/Menüband anpassen im rechten Teil den Haken bei Entwicklertools setzen. Im jetzt sichtbaren Menu Entwicklertools die Makro-Sicherheit entsprechend einstellen und die Anwendung neu starten. Exceldateien als *.xlsm speichern, da sonst die Makros fehlen. Falls, auf Grund von Restiktionen, die DLL nicht in das Windowsverzeichnis kopiert werden kann, läßt sich die DLL von beliebiger Stelle aus aufrufen, wenn dieser Pfad in jeder Deklaration richtig angegeben ist, wie z.B.: Declare Sub DELAY Lib "E:\Test\rsapi.dll" (ByVal x%)
Hier also die Schnittmenge der beiden Bücher Messen Steuern Regeln mit Smartphone und Tablet und Messen, Steuern und Regeln mit Word & Excel.
Der neuere Titel beinhaltet auch die Boards ESP8266 und Digispark mit deren Programmierbarkeit und Anwendungen in diesem Kontext - lässt aber die RSAPI außen vor. Es ist durchaus möglich den Sketch für diese Hardware und deren Anschlüsse leicht anzupassen und damit auch diese beiden Hardware-Elemente als CompuLab auf die Bühne von Word & Excel zu heben.

Weitere Bücher
Weitere Software
.
Startseite Bücher Software Digital RTV Musik Kontakt

Für Inhalt und weitere Verzweigung externer Links sind die Betreiber der dortigen Seiten verantwortlich - H.-J. Berndt