Projects‎ > ‎Payphone Conversion‎ > ‎

Section 5


Coin Validator and Escrow


Validator
    
    
    

ESCROW:
     


Both
   



NOTES:

Capturing this data took weeks with a logic analyzer, watching responses to every possible coin combo that I could find. I went to the RBC and got a coins from just about every era in Canada and the US. They are a great resource. It was frustrating because when I finally got it talking and had it accepting 5c coins, it would accept 10 x 5c coins, but one would be rejected. I finally figured out that they are all multiple different coins, the year is different, the image is different, and obviously the metal content must be different.

So far, this is what I have learned, its enough to work with the validator so its as far as I am going with it.


The 10 conductor cable is the one that connects the Validator to the arduino.

 

Pin 1, 4, 5, 6, 7 and 8 are all common negative

Pin 9 is +12VDC 

Pin 10 is Reset 9 (low for reset)

Pin 2 is Data Out From Validator

Pin 3 is Data Into Validator

 Commands are given in ASCII format.

 

Commands To Validator:

 

g - Reset and give status response

c - rotate escrow to cash its coins, pause and return to null position

f - rotate escrow to refund its coins, pause and return to null position

e(n) - enable the acceptance of coin number (n) where (n) = 0 to 9 and a to e

 

I have no idea if there are more, but this is what i have found so far:

1 - Canadian 5 cents

2 - Canadian 5 cents

3 - Canadian 10 cents

4 - Canadian 25 cents

5 - Canadian loony

6 - US 5 cents

7 - US 10 cents

8 - US 25 cents

9 - US $1.00 Coin

a - Canadian 5 cents

b - Canadian 10 cents

c - Canadian 25 cents

d - Canadian loony 

e - Canadian loony

 



*********************************
** Command Set information **
*********************************
Testing results:
G = 
Escrow attached AID
Escrow detached ADII
(A = Good)
(ID = Escrow Attached)
(DII) = Escrow detached)
I = Object in cashbox drop (Probably full) of escrow
I = object by path selector of validator
I = object in kickout path of escrow
D = object in main escrow entry (kickout path)
J = Jam in coin slot validtor
0 = invalid coin
** The above is just a guess at the last of the info I could not figure out.

**Bellow, I have been able to confirm these commands:
COIN VALIDATOR SLEEP MODE 's'
COIN VALIDATOR WAKE UP 'g'
CALC COIN VALIDATOR CHECKSUM 'k'
ACCEPT NEXT COIN 'x'
ACCEPT ALL VALID COINS 'a'
REJECT ALL COINS 'z'
COLLECT ESCROW 'c'
REFUND ESCROW 'f'
ESCROW NULL 'n'
LEARN ESCROW 'l'  <- Very important, they wont work together otherwise.
REQUEST COIN STATUS 'r'
DISABLE SPECIFIED COIN 'd'
ENABLE SPECIFIED COIN 'e'
READ COIN VAL ADDR 'q'

RESPONSE
A = Validator / Escrow pair test out AOK (issuing the "g" command will wake the unit and let you know what failed. Have not documented failures yet.
G = Validator Received invalid command.


SOFTWARE EXAMPLE:
//Code based off Arduino Mega 2560
//SoftwareSerial mySerial(2, 3); // RX, TX
//Validator Pinout:
// Pin1 - GND
// Pin2 - Data out from Validator
// Pin3 - Data in to Validator
// Pin9 - +12vDC (draw is 10ma)
// Pin10 - Reset, leave high +5vDC, its not used.
 
void setup() {
  Serial1.begin(600);
  Serial.begin(9600);
  Serial.print('Program Start');
  Initialize();
  delay(50);
  Serial1.print('a');
  
}

void loop() {
byte c;
if (Serial1.available() > 0)
  {
    while(Serial1.available() > 0) {
      c = Serial1.read();
      Serial.write(c);
    }         
  }  
if (Serial.available() > 0)
  {
    while(Serial.available() > 0) {
      c = Serial.read();
      Serial1.write(c);
    }         
  }  
}

void Initialize() {
   Serial1.print('g'); //Wake up Validator (Sleep is 's')
    delay(10);
    Serial1.print('l'); //Pair to escrow, if you dont, 3/4 of all coins will fail
    delay(10);
    Serial1.print('z'); //Reject all coins.
    delay(100);
    //Initialize all known coins.
    for(int i = 0;i < 9;i++) {
      Serial1.print('e');
      Serial1.print(i);
      delay(100);
    }
    Serial1.print('e');
    Serial1.print('9');
    delay(100);
    Serial1.print('e');
    Serial1.print('a');
    delay(100);
    Serial1.print('e');
    Serial1.print('b');
    delay(100);
    Serial1.print('e');
    Serial1.print('c');
    delay(100);
    Serial1.print('e');
    Serial1.print('e');
    delay(100);
    Serial1.print('e');
    Serial1.print('f');
    delay(100);
    Serial1.print('k'); //Verify Checksum, avoids random errors
    delay(100);
    Serial1.print('a'); //Accept all KNOWN coins.
}

Ċ
Jim Akeson,
Jul 30, 2016, 2:23 PM
Ċ
Jim Akeson,
Sep 5, 2016, 4:27 PM
Ċ
Jim Akeson,
Jul 30, 2016, 2:23 PM
Comments