1.2 Programmieren in Arduino IDE
Website: | xplore-dna.net > Die DNA des digitalen Lernens! |
Kurs: | T1-Car Sensors by Lauritz, Max & Torben |
Buch: | 1.2 Programmieren in Arduino IDE |
Gedruckt von: | Gast |
Datum: | Dienstag, 6. Mai 2025, 12:33 |
1. Einbindung der Bibliotheken
Bevor mit der Programmierung des Arduinos begonnen werden kann, muss hierzu die passende Software heruntergeladen werden. Bei der Software handelt es sich um die Arduino IDE v. 1.8.15, welche auf der Webseite von Arduino heruntergeladen werden kann. Ist dies geschehen, müssen Sie die Software noch installieren. In den folgenden Kapiteln wird der Programmcode lediglich über Bilder dargestellt. Der Code an sich befindet sich zum Download in der Projektbeschreibung im Ordner Dateien.
Nachdem die Installation der Software abgeschlossen ist, wird mit dem Einbinden der benötigten Bibliotheken begonnen. Die verwendeten Bibliotheken lauten:
- EtherCard.h
- ModbusIP_ENC28J60.h
- Modbus.h
Diese Bibliotheken lassen sich ebenfalls aus dem Internet (Github) herunterladen. Für die Einbindung der Bibliotheken klicken Sie in der Software auf den Reiter "Sketch" in der oberen Leiste. Es öffnet sich ein Untermenü mit dem Punkt "Bibliothek einbinden". Befindet sich ihre Maus auf diesem Punkt öffnet sich ein weiteres Fenster mit dem Punkt ".ZIP-Bibliothek hinzufügen...", welches Sie anklicken. Nun können Sie die heruntergeladene ZIP-Bibliothek aus Ihrem Ordner heraussuchen und einbinden. Dies tun Sie für alle oben genannten Bibliotheken.
Nachdem alle Bibliotheken eingebunden wurden, können diese über den "include"-Befehl in den Programmcode aufgenommen werden. Dies geschieht ganz oben im Code, außerhalb der "Setup"-Schleife (siehe Abbildung 1).
Abbildung 1 Code für die Bibliotheken, Quelle BBS2 Wolfsburg
2. Programmierung Taster und LED
Als nächsten Schritt beginnen wir mit der Programmierung des Tasters und der LED. Hierfür wird zunächst festgelegt, an welchen Pin der Taster und an welchen die LED angeschlossen ist und wie der Taster-Status ist (wird später noch drauf eingegangen). Für den Pin des Tasters und der LED benötigen wir eine Konstante vom Typ INT, da die angeschlossenen Pins sich nicht ändern. Die Konstanten bekommen als Wert die Nummern der Pins, an welche sie angeschlossen wurden (siehe Kapitel vorher). Für den Taster-Status wird nur ein INT benötigt, da dieser abhängig davon ist, ob der Taster gedrückt oder nicht gedrückt ist. Das ganze geschieht vor der "Setup"-Schleife. In Abbildung 1 ist der Code hierfür zu sehen.
Abbildung 1 Code für die Einrichtung des Tasters und der LED, Quelle BBS2 Wolfsburg
Nach der Einrichtung des Tasters und der LED kann mit diesen Bauteilen gearbeitet werden. Hierfür wird zunächst festgelegt, ob es sich um einen Eingang oder einen Ausgang handelt, da die digitalen Pins des Arduinos sowohl als Eingang als auch als Ausgang benutzt werden können. Dieser Teil der Programmierung findet in der "Setup"-Schleife statt. In Abbildung 2 ist der Code hierfür zu sehen.

Abbildung 2 Code für die Festlegung der digitalen Pins des Tasters und der LED, Quelle BBS2 Wolfsburg
In einem späteren Teil dieses Kurses wird erneut auf die LED (Ansteuerung) und den Taster-Status eingegangen.
3. Auslesen des Sensors
Als nächstes wollen wir uns mit dem Auslesen der Sensoren beschäftigen. Hierzu wird wieder der analoge Eingang aus dem Kapitel zuvor als Konstante vom Typ INT definiert. Da es sich bei den analogen Eingängen um Eingänge mit einer Auflösung von 1024 handelt, wird eine Variable zum Einlesen des Bitwertes definiert. Zusätzlich werden noch weitere Variablen (siehe Abbildung 1) definiert, welche für die Umrechnung von Spannung in Temperatur benötigt werden. Hierbei handelt es sich um einfache Rechnungen mithilfe des Ohm'schen Gesetzes. Die Werte der Referenzwiderstände wurden mit einem Multimeter ermittelt und können daher, vom Wert aus dem Kapitel zuvor, abweichen. Der Teil aus Abbildung 1 befindet sich vor der "Setup"-Schleife.
Abbildung 1 Code der benötigten Variablen für den Sensor, Quelle BBS2 Wolfsburg
Nachdem alle benötigten Variablen definiert wurden, können diese benutzt werden. Hierfür gehen wir in die Loop-Schleife. Zunächst liest man über den Befehl "analogRead" den Bitwert der analogen Eingänge der Sensoren aus. Über eine Umwandlung in die Spannung und mit Rechnungen des ohmschen Gesetzes werden die Widerstände der Sensoren berechnet. Über eine lineare Gleichung werden diese Widerstandswerte in Temperaturen umgewandelt. Bei dieser Gleichung handelt es sich lediglich um eine grobe Umwandlung, welche mit Werten aus Internetrecherchen ermittelt wurde. In Abbildung 2 ist der Code hierfür zu sehen.
Abbildung 2 Code Ermittlung der Temperatur der Sensoren, Quelle BBS2 Wolfsburg
Da es sich bei diesem Projekt um ein Prüfverfahren für Sensoren handelt, müssen beide Sensoren miteinander verglichen werden. Hierfür wird innerhalb der Loop-Schleife eine if-Schleife benutzt, welche erst dann "true" wird, wenn der Prüfsensor innerhalb von +- 0,5° des Referenzsensors liegt. Sollte dies der Fall sein wird eine weitere Variable namens "funktion_Sensor" auf 1 gesetzt, ist dies nicht der Fall, wird diese Variable auf 0 gesetzt. Diese Variable wird wie in Abbildung 1 über der Setup-Schleife als INT-Variable deklariert. Zusätzlich zum Vergleich der Sensoren kommt jetzt auch der Taster und die LED ins Spiel. Der Vergleich der Sensordaten erfolgt nämlich erst, wenn der Taster gedrückt wird. Diese wird ebenfalls durch eine if-Schleife umgesetzt, welche mit der Variable "tasterStatus" gefüttert wird. Diese Variable wird zu Beginn der Loop-Schleife über den Befehl "digitalRead" mit Informationen gefüllt, ob der Taster gedrückt ist oder nicht. Geht der Arduino in diese if-Schleife rein, wird dies über die LED mit dem Befehl "digitalWrite" signalisiert. Zusätzlich zum Vergleich der Sensoren werden in dieser Schleife auch Daten an die SPS gesendet (herzu später mehr). Über ein Delay von 2 Sekunden wird verhindert, dass die Schleife beim längeren Drücken des Tasters (z.B. 1 Sekunde) mehrmals aufgerufen wird. Am Ende der Schleife wird die LED wieder auf "AUS" gesetzt. In Abbildung 3 ist die Abfrage des "tasterStatus" und in Abbildung 4 die if-Schleifen zu sehen.
Abbildung 3 Abfrage des tasterStatus, Quelle BBS2 Wolfsburg
Abbildung 4 if-Schleifen, Quelle BBS2 Wolfsburg
4. Einrichtung Ethernet Shield
Als nächsten Schritt wird sich mit dem Ethernet-Shield befasst. Damit ein Gerät in ein Netzwerk eingebunden werden kann, benötigt es eine MAC-Adresse und eine IP-Adresse. Die MAC-Adresse ist dabei gerätespezifisch und kann beliebig festgelegt werden, solange kein anderes Gerät im Netzwerk die Gleiche MAC-Adresse besitzt. Die IP-Adresse hingegen muss auf das Netzwerk angepasst werden, in welchem das Gerät benutzt wird. Hierzu können Sie über einen Computer im selben Netzwerk mithilfe der Eingabeaufforderung und dem Befehl "ipconfig" die Subnetzmaske und die IP-Adresse ermitteln und nach einer freien IP-Adresse für Ihren Arduino suchen. Haben Sie eine freie IP-Adresse gefunden, geht es mit der Programmierung weiter.
Für diesen Teil der Programmierung gehen Sie in die Setup-Schleife. Für die MAC- und die IP-Adresse wird jeweils ein Array vom Typ byte erstellt und mit Daten gefüttert. Die MAC-Adresse besteht hierbei aus 6 Hexadezimalzahlen und die IP-Adresse aus 4 Zahlen. In Abbildung 1 ist eine mögliche Konfiguration des Ethernet-Shield zu sehen.
Abbildung 1 Code Konfiguration Ethernet-Shield, Quelle BBS2 Wolfsburg
5. Programmierung Modbus Verbindung
Nachdem das Ethernet-Shield eingerichtet wurde kann mit der Modbus-Verbindung zur Datenübertragung an die SPS begonnen werden. Bei diesem Verfahren handelt es sich um ein Master-Slave-Verfahren, bei dem Daten in Register gepackt und dann übertragen werden. Da die SPS lediglich Daten vom Arduino auslesen soll und nicht noch schreiben, wird der Befehl "Ireg" benutzt. Dieser hat die Registernummern 30001 - 39999.
Da die Bibliotheken hierfür schon eingebunden wurden, werden als nächstes die Registernummern für die Datenpunkte deklariert. Hierfür werden Konstanten vom Typ INT erstellt, da jeder Datenpunkt eine feste Registernummer zugeordnet bekommt. In Abbildung 1 ist dies anschaulich für 6 Datenpunkt gemacht worden. Die Registernummern müssen dabei zwischen 0 und 9998 liegen, da der Bereich des "Ireg"-Befehls dieser Größe entspricht. In diesem Beispiel wurden die Nummern 100 - 105 genommen, hierzu im TIA-Portal später mehr. Zusätzlich muss noch ein Objekt vom Typ "ModbusIP" erstellt werden über welches später die Funktionen zur Übertragung aufgerufen werden. Das Ganze wird vor der Setup-Schleife programmiert.
Abbildung 1 Code Festlegung Registernummern, Quelle BBS2 Wolfsburg
Als nächster Schritt wird in der Setup-Schleife das erstellte Objekt mit der MAC- und IP-Adresse des Ethernet-Shield gefüttert. Dies geschieht über den Befehl "config". Außerdem werden die oben deklarierten Datenpunkte mithilfe des Objektes dem Modbus hinzugefügt, sodass in diese Daten reingeschrieben werden können. In Abbildung 2 ist der Code hierfür zu sehen.
Abbildung 2 Code Datenpunkte einbinden, Quelle BBS2 Wolfsburg
Nachdem nun die Registernummern festgelegt und diese eingebunden wurden, fehlt nur noch, dass dort Daten hineingeschrieben werden. Das Einfügen der Daten erfolgt innerhalb der Loop-Schleife. Es gibt hierbei zwei verschiedene Varianten, welche vom Prinzip jedoch gleich aufgebaut sind. Die erste Variante ist, dass die Daten kontinuierlich in das Register geschrieben werden. Hierfür befindet sich der Befehl "Ireg" vor der if-Schleife mit der Abfrage des Taster-Status. In dem Ireg-Befehl werden zwei Variablen benutzt. Die erste Variable entspricht der Registernummer und die zweite ist der Datenpunkt (Wert), welcher übertragen werden soll. Bei der zweiten Variante werden die Daten auf Tasterdruck übermittelt. Hierfür befindet sich der Ireg-Befehl innerhalb der if-Schleife Der Befehl ist jedoch der Gleiche wie bei der ersten Variante. Wichtig zu sagen ist noch, dass über diesen Befehl lediglich Integer übertragen werden können, weshalb die Temperaturwerte in dem Beispiel mit 100 multipliziert werden. Diese Multiplikation kann in der SPS dann wieder rückgängig gemacht werden. In Abbildung 3 ist die erste Variante und in Abbildung 4 die zweite Variante der Datenübertragung zu sehen.
Abbildung 3 Modbus außerhalb der if-Schleife, Quelle BBS2 Wolfsburg
Abbildung 4 Modbus innerhalb der if-Schleife, Quelle BBS2 Wolfsburg
Hiermit ist die Programmierung des Arduinos abgeschlossen. Der Code muss jetzt nur noch auf den Arduino UNO geladen werden (an USB des Computers anschließen und dann oben links der Pfeil, welcher nach rechts zeigt). Wichtig ist noch, dass es sich bei diesem Projekt lediglich um ein mögliches Beispiel handelt, welches beliebig erweitert/abgeändert werden kann.