Arduino Projekte mit der PureBox verbinden
Arduino Projekte drängen mehr und mehr in den professionellen Bereich der Industrie, die PureBox hilf dabei. Kleine Aufgaben mit einer geringeren Redundanz oder Priorität können leicht durch ein Arduino Projekt kostengünstig erledigt werden.
Ein Arduino Projekt muß hohen Anforderungen gerecht werden, um in der Industrie eingesetzt werden zu können. Um die zeitaufwendige Entwicklung zu kompensieren, lohnt es sich, mit einer PureBox zu verbinden. Der Arduino ist hier eher als erweiterter Sensor zu sehen. Zusammen mit dem mächtigen blauen Partner und dem Arduino können Automatisierungskosten enorm gesenkt werden, bei erhöhter Verfügbarkeit und Sicherheit. Speziell für Langzeitanwendungen bis zum Stromausfall oder bis Ameisen über die Welt regieren.
Der Vorteil dieser Symbiose ist enorm. Das Arduino Projekt bekommt eine gewaltige Erweiterung der Schnittstellen. Wie:
- OPC
- Modbus TCP
- Syslog
- TCP- und UDP-Sockets, Client und Server
- FTP (Datalogging)
- REST und MQTT Unterstützung
- AMQP auf Anfrage
- Angepasste Darstellung fürs Smartphone
- HTTP und HTTPS
- SQL Datenspeicher
- E-Mail zur Alarmierung oder als Zustandsmeldung
- SNMP-Abfragen /-Alarm Traps
- Schalten der eigenen Outputs im Alarmfall
- Schalten der Outputs eines anderen Web-IO
- Einbinden in die eigene Software durch:
- Visual Basic.net
- Delphi
- C++
- C#
- Java
Wie z.B. ein solches Projekt, das noch ohne Netzwerk erstellt wurde (siehe hier im Blog). Dieses Projekt wurde auf einen Kundenwunsch hin, mit einem PC und touch Display ausgeliefert. Jedoch könnte man hier nur eine Pure Box nehmen und die Daten gleich auf die interne SQL Datenbank der PureBox abspeichern.
Durch den Kommunikationsaufbau mit einem Arduino, kann die im Netzwerk eingebettete PureBox auf die gesamte Peripherie des Arduinos zugreifen, steuern und/oder kontrollieren. An dem Arduino angeschlossene Sensoren oder Aktoren können durch die PureBox direkt angesteuert werden. Der Vorteil der PureBox hierbei ist, das sie als Netzwerkgerät einen Webserver mitbringt.
Um die Schwächen des Arduino Controller samt Peripherie für eine professionelle Aufgabe nutzen zu können, kann man jetzt sehr gut auf die „Erfahrung“ einer robusten, stabilen Industrieelektronik zurückgreifen.
Die benötigte Hardware
- PureBox seriell hier zu finden der Firma W&T
- Ein 24V Netzteil für die PureBox
- Arduino UNO,NANO,Mega oder ähnliches
- 9V Netzteil für den Arduino UNO, Mega oder 5V für den NANO
- Seriell RS232 TTL Konverter Modul DB9-Anschluss z.B. MAX3232
Die Verkabelung
Die Verkabelung ist sehr einfach. Man benötigt nur drei Kabel für TX,RX und GND. Das Praktische ist, dass auf der Platine des Konverter-Moduls und auf jedem Arduino schon alles beschriftet ist. Jedoch kann die Beschriftung auf dem Konverter-Modul irreführend sein. Denn die Pins RX und TX bedeuten, „ist der Eingang für RX/TX“ und nicht wie bei dem Arduino als „ist Ausgang für RX/TX“.
Optional ist hier im Beispiel noch eine LED am PIN4 des Arduino angeschlossen.
Das bedeutet, Arduino TX geht auf Konverter-Modul TX, Arduino RX geht auf Konverter-Modul RX und Arduino GND geht auf Konverter-Modul GND.
Man braucht am Konverter-Modul einen DB9-Anschluss weiblich, um ihn an der PureBox seriell hier zu finden anschließen zu können.
Der Arduino UNO oder Nano hat nur einen seriellen Port. Dadurch kann die Verbindung zur PureBox erst geschehen, nachdem man das USB Kabel vom Computer getrennt hat. Wenn man ein Projekt gleichzeitig debuggen möchte, während die PureBox angeschlossen ist, sollte man einen Arduino MEGA mit seinen 3 seriellen Ports nehmen.
Der Code
In dem Beispiel wird über die Web-Ansicht der PureBox ein PHP Script aktiviert, das einen String via serieller Schnittstelle an den Arduino sendet. Sollte der String eine „0“ sein wird der PIN4 des Arduino auf HIGH gesetzt. Sollte der String „1“ sein wird der PIN4 des Arduino auf LOW gesetzt.
Sollte ein unbekannter String empfangen werden, reagiert der Arduino mit einem Aufleuchten der internen LED für 1,5sec.
Bei jeder dieser Aktionen sendet der Arduino einen String zurück. Die Pure Box wertet diesen mit der Zeile aus:
while($time_start + $TIMEOUT > time()) { $input .= dio_read( $fd ); //receive value from arduino usleep( 20 ); }
D.h. dass die Pure Box auch Daten empfangen kann. Diese Daten können dann an die oben aufgelisteten Schnittstellen geleitet werden, die die PureBox von Haus aus mitbringt.
1. der Code für den Arduino
int MAX_CMD_LENGTH = 10; char cmd[10]; int cmdIndex; char incomingByte; void setup() { Serial.begin(9600); cmdIndex = 0; pinMode(4,OUTPUT); pinMode(LED_BUILTIN,OUTPUT); digitalWrite(LED_BUILTIN, LOW); Serial.println("Setup OK"); } void loop() { if (incomingByte=Serial.available()>0) { char byteIn = Serial.read(); cmd[cmdIndex] = byteIn; if(byteIn=='\n'){ //command finished cmd[cmdIndex] = '\0'; //Serial.println(cmd); cmdIndex = 0; if(strcmp(cmd, "1") == 0){ digitalWrite(4,HIGH); delay(50); Serial.println("revieved: on4"); }else if (strcmp(cmd, "0") == 0) { digitalWrite(4,LOW); delay(50); Serial.println("revieved: off4"); }else{ Serial.println("value not known!"); digitalWrite(LED_BUILTIN, HIGH); delay(2000); digitalWrite(LED_BUILTIN, LOW); } }else{ if(cmdIndex++ >= MAX_CMD_LENGTH){ cmdIndex = 0; } } } }
2. die Codes für die Pure Box HTML und PHP
Zur Übersicht ist der Code auf zwei Dateien aufgeteilt, damit man die PHP Datei auch in einer AUTO-Script Funktion der Pure Box benutzen kann. So kann man das Arduino Script Zeitgesteuert, Alarm gesteuert oder Event gesteuert aktivieren kann. Auch wieder um alle Vorteile dieser Symbiose über die PureBox ausnutzen zu können.
2.1 der PHP Code für die PureBox
<?php $nachricht = $_POST["nachricht"]; if($nachricht == ''){ //exit program normally with an Error echo "error text"; exit(1); } $TIMEOUT = 1; // the pureBox is opening the serial listener for 1 sec. $fd = dio_open( '/dev/ttyS1', O_RDWR | O_NONBLOCK ); dio_tcsetattr( $fd, array( 'baud' => 9600, 'bits' => 8, 'stop' => 1, 'parity' => 0, 'flow_control' => 0, 'is_canonical' => 0 ) ); //Send value and end with chr(10) new line dio_write( $fd, $nachricht . chr(10) ); //Write value to the arduino $input = ''; $time_start = time(); while($time_start + $TIMEOUT > time()) { $input .= dio_read( $fd ); //receive value from arduino usleep( 20 ); } flush (); //sleep ( 1 ); // can be modified, depends on the value lenght dio_close( $fd ); echo $input; // show received message from arduino on the screen in the browser ?>
2.2 der HTML Code für die PureBox
<form action="parameteruebergabe.php" method="post"> <table align="center"> <tr> <td>Serial value to send:</td> <td> <textarea name="nachricht" cols="40" maxlength="159" style="width:98%;height:50px;"></textarea> </td> </tr> <tr> <td></td> <td> <input type="Submit" value="send" /> </td> </tr> </table> </form>
Abschließend noch eine Verlinkung zum Thema Pure Box: IoT Pure Box Web I/O