Digitale Programmierung – Münzprüfer und Mikrocontroller (Arduino Nano)

Wer seinen SR3 digital programmieren will, sollte sich mit der ccTalk-Schnittstelle an der Hinterseite vertraut machen – von oben gesehen ist das der erste, weiße Anschluss mit 4 Pins (siehe Foto – Hinterseite ist dort die Vorderseite, Münzprüfer wurde gewendet).

Mithilfe von vier Female-to-Male-Wires lässt sich die ccTalk-Schnittstelle des Münzprüfers an einen Arduino Nano samt Breadboard anbinden: Pin 1 ist für die Spannung – 12 bis 24 Volt – reserviert, Pin 2 bleibt unverbunden und Pin 3 braucht eine Erdung (GND); der vierte Pin ist reserviert für ccTalk – einem offenen Protokoll für die Datenübertragung bei elektronischen Münzprüfern; im Rahmen vieler Geldtransaktionen – so auch bei Spiel- und Unterhaltungsautomaten – arbeitet ccTalk im Hintergrund.

Die Pins für Senden (TX, hier: D8 am Arduino Nano) und Empfangen (RX, hier: D9 am Arduino Nano) in einem ersten Schritt durch eine Diode miteinander verbinden. Von ihrer Anode gehen zwei weitere Verbindungen aus: Ein 10KOhm-Widerstand mündet im 5 Volt-Anschluss am Arduino, das ebenso von der Anode ausgehende Datenkabel führt über D4 zum ccTalk-Pin des Münzprüfers.

Hallo Welt!

Zwischen beiden Geräten besteht nun eine hierarchisch strukturierte Verbindung: Als „Master“ – dieser Begriff ist aufgrund seiner kolonialrassistischen Konnotationen problematisch und wird aus diesem Grund unter Anführungszeichen gesetzt – kann nur der Arduino aktiv Anfragen an den Münzprüfer stellen. Dafür benötigt man die Arduino-Bibliothek AltSoftSerial. Über den Reiter „Werkzeuge“ und die Auswahl-Option „Bibliotheken verwalten“ kann sie direkt über die Arduino-IDE installiert werden. Mit dem Programm echo.ino lässt sich dann testen, ob die ccTalk-Schnittstelle aktiv ist.

Nach dem Kompilieren und Hochladen des Programms echo.ino auf den via COM-Port mit dem Computer verbundenen Arduino Nano kann man dies über einen Seriellen Monitor überprüfen. In der Arduino-IDE ist er im Reiter „Werkzeuge“ als fünfter Eintrag auffindbar.

Das Programm echo.ino – Quellcode (links), Antwort des Münzprüfers (rechts, Fenster)


Ist sie Verbindung intakt, erscheint ein erstes „Hello World“ am Seriellen Monitor; via Befehlszeile dann auch gleich die Kommunikation aufnehmen: Das Programm cctalktest.ino auf den Arduino laden und ausführen. Mit char simplePoll[] = {2, 0, 1, 254, 255}; fragt es ab, ob der Münzprüfer angesprochen werden kann.

Die Dezimalzahlen zwischen den geschwungen Klammern lassen sich wie folgt aufschlüsseln:

Mit der Ziffernkombination  2 0 1 254 255 stellt man eine einfache Verfügbarkeitsanfrage an den Münzprüfer, auch „ACK“ – eine Abkürzung für „Acknowledgement“. Darauf antwortet der Münzprüfer mit einer stets gleich bleibenden Zahlenfolge: 1 0 2 0 253. Damit hat das ccTalk-Device bestätigt, dass es korrekt arbeitet. 

Hinweis: Der Serielle Monitor in der Arduino-IDE würde an dieser Stelle nur Sonderzeichen anzeigen. Deshalb empfiehlt es sich, die Kommunikation zwischen Arduino und Münzprüfer über das Terminal-Emulationsprogramm RealTerm zu verfolgen. Neben der Darstellung einfacher Dezimalzahlen kann dieses auch ASCII-codierten Text oder hexadezimale Zahlen anzeigen – allerdings ohne Zeilenumbruch.  

RealTerm-Darstellung einer Antwort auf eine Verfügbarkeitsanfrage

Weitere ccTalk-Befehle

Wer weitere Anfragen an den Münzprüfer stellen will, kann dies mit Blick auf die ausgewählten ccTalk-Kommandos tun. Ein solches besteht in der Regel aus sechs dreistelligen Ziffern – nähere Informationen zum Aufbau: 

Einige Befehle werden lediglich mit einer „ACK“-Meldung beantwortet, andere mit Teilen ASCII-codierten Textes. Manche – so auch der, mit dem man die Anzahl der hintereinander einzuwerfenden Münzen festlegt – verlangen nach einer Ziffernangabe vor der Prüfsumme. Nach der 135 für den Befehl „set accept limit“ kann beispielsweise eine 4 erfolgen – dann verweigert der Münzprüfer die Annahme weiterer Münzen mit Erreichen des angegebenen Limits. Anbei eine Liste mit weiteren Befehlen, die funktionieren:


Talk to Arduino

Rein numerische Kommunikation ist auf Dauer unbequem – mit dem Programm ArduinoccTalk.ino kann man zu einem menschenlesbaren Format zurückkehren, dieses muss in Gleichzeitigkeit mit dem Programm cctcom.ino abgerufen werden (siehe Repository am Ende des Artikels). Nach dem Kompilieren und Hochladen auf den Ardunio Nano spuckt der Serielle Monitor erste Informationen zu Status, Hersteller und Typ des angeschlossenen Münzprüfers aus; anschließend zeigt er an, welche Münzen dieser prinzipiell akzeptiert.

Antwort auf die Ausführung des Programms ArduinoccTalk.ino


Jede Münze wird als sechsstelliger Code, bestehend aus jeweils zwei Buchstaben für das Land, einer dreistelligen Zahl für den Wert und dem Buchstaben A oder B dargestellt; EU200A entspricht etwa einer 2-Euro-Münze, zwanzig Cent haben hingegen die Codierung EU020A. Dank des Programms ArduinoccTalk.ino können die Münzen nahezu simultan zum Einwurf am Monitor angezeigt werden.

Ich habe den Münzprüfer zuerst mit zwei Euro, dann mit zehn Pfennigen und anschließend mit 20 Armenischen Dram getestet –  und erhielt in letzteren beiden Fällen korrekterweise eine Fehlermeldung: Münzen dieser Art werden vom SR3 nicht akzeptiert (siehe die letzten 2 Zeilen der Münzprüfer-Antwort im Bild „Antwort auf die Ausführung des Programms ArduinoccTalk.ino“)



Fazit & offene Fragen

Es ist möglich, dass der über den Arduino gesteuerte SR3 nicht auf alle ccTalk-Befehle reagiert – jene, die in meiner Dokumentation angegeben wurden, werden akzeptiert.

Achtung: Die digitale Programmierung des Münzprüfers geht ohne Arduino-Anbindung verloren – alle Komponenten müssen folglich permanent gemacht und verlötet werden.

Duale Netzteile mit je einem 5- und einem 12-Volt-Anschluss eignen sich für die getrennte Spannungsversorgung von Arduino und Münzprüfer, für die Kabelverbindungen kann man Schraubklemmenblöcke mit USB-Anschlüssen verwenden.

Die digitale Programmierung über die ccTalk-Schnittstelle kann sehr aufwändig sein und ist nur dann nötig, wenn die Anzahl der einzuwerfenden Münzen exakt festgelegt werden soll – andernfalls reicht die manuelle Programmierung über den DIP-Schalter aus. Im Fall meines renovierten Automaten werfen künftige Käufer:innen 3 x 2€-Münzen ein – viel Aufwand in der Programmierung, aber ein fairer Preis für ein revolutionäres Kartenspiel!





Hinweise & weiterführende Links

Library AltSoftSerial by Paul Stoffregen

Coin Acceptor-Code >> by ccTalktutorial-Team

Der Quellcode des Programms ArduinoccTalk.ino ist hier

THX to Nikola Brežnjak

ccTalk – Allgemeine Einführung

RealTerm: Serial/TCP Terminal >> Download for Windows