ARDUINO NANO LEYENDO VALIDADORES DE MONEDAS
Comparto este código para leer validadores de monedas, así que aprovecho para crear una nueva entrada en este blog y de ese modo explicar el código compartido. Explicaré de manera básica como podemos leer las señales de un validador de monedas con una placa arduino, en mi caso una arduino nano. Después cada uno puede usarlo como le parezca, yo por ejemplo he empleado este montaje con un LCD 16x2 y un pulsador en cafeteras LB2500. Esta máquina dispone de una entrada de pulsos para activar créditos, de manera que si pongo un precio en el arduino de 0.50, arduino empieza a leer monedas y acumular sus valores como saldo. Cuando activamos el pulsador, la placa envía a la máquina los pulsos resultantes de dividir el saldo entre el precio: pulsos=saldo/precio. En el caso de acumular 1 euro mandará dos pulsos, la máquina entonces nos da 2 servicios y el saldo se actualiza, restando el importe de los 2 servicios.
Echemos un vistazo al conector del validador y aclaramos a que corresponde cada pin:
Los pines 1 y 2 corresponden a la alimentación del validador, pin 1 GND y pin 2 +12v respectivamente. Los pines 7 / 8 / 9 / 10 / 3 / 4 corresponden a los canales CH 1/ CH 2 / CH 3 /CH 4 / CH 5 / CH 6 respectivamente. El pin 6 sirve para inhibir el validador. Si a este pin mandamos una señal de +5v el validador no admite monedas, devolviéndolas por la rampa de devolución. Si por ejemplo tenemos la máquina fuera de servicio, activamos este pin para que no admita monedas.
Una vez aclarado a que corresponde cada pin, decir que en las cafeteras de vending los validadores más usados funcionan como reconocedores paralelo y en algunos casos como binario. El ejemplo corresponde a un RECONOCEDOR PARALELO. Echemos un vistazo a la tabla siguiente:
Las dos primeras columnas se han explicado en el párrafo anterior, correspondiendo al número de pin y canal, las otra paso a explicarlas. La columna BINARIO corresponde a un número binario según el número de canal en el modo paralelo, pero... ¿y la columna ENVÍA? Bueno, llegado a este punto, aclarar que la columna BINARIO corresponde a señales positivas y la columna ENVÍA corresponde a señales negativas. Nos encontramos en electrónica muchos casos donde se trabaja con señales negativas, no pasa nada, es justo lo opuesto a una señal positiva. Si miramos la tabla, podemos observar como donde hay un 1 en BINARIO hay un 0 en ENVÍA y donde hay un 0 en BINARIO hay un 1 en ENVÍA. ¿En qué nos afecta esto? púes que cuando se introduce una moneda en el canal CH 1 en vez de obtener el decimal 1 vamos a comparar con el decimal 62, en el canal CH 2 obtendremos 61, etc.
Esquema básico:
Es importante consultar el manual del validador para la correspondencia canal/valor moneda y adaptar el código a dichos valores. Este ejemplo está hecho con un Comestero RM5 en modo paralelo. En mi caso además de un display LCD 16x2 he usado un módulo bluetooth HC-05 para comunicarlo con dispositivos móviles y adaptado el código para validadores en modo binario. Desde un dispositivo movil con conexión bluetooth puedo cambiar los valores de los canales, configurar el modo de trabajo paralelo/binario y cambiar el precio del servicio.
Código ARDUINO NANO OLD BOOTLOADER / ARDUINO DUEMILANOVE BOOOLOADER, no funciona con otros bootloaders ni se ha probado en otras placas:
/* ARDUINO LEYENDO VALIDADORES DE MONEDAS PROGRAMADO POR JUAN A. GOMEZ PARA FORO ARDUINO POR FAVOR, MANTENER ESTAS LINEAS COMO PREMIO AL ESFUERZO DEL AUTOR ARDUINO READING COINS VALIDATORS CODE BY JUAN A. GOMEZ / ARDUINO FORUM PLEASE KEEP THIS LINES AS APPRECIATION TO THE AUTHOR */ // *** MODO PARALELO - PARALLEL MODE *** // LOS VALORES DE CANALES, DEBEN COINCIDIR CON LOS DE VALIDADOR DE MONEDAS // CHANNELS VALUES MUST MATCH WITH COIN VALIDATOR CHANNELS int canal1=100; // VALOR EN CENTIMOS DEL CANAL 1 - VALUE IN CENTS OF THE CHANNEL 1 int canal2=200; // VALOR EN CENTIMOS DEL CANAL 2 - VALUE IN CENTS OF THE CHANNEL 2 int canal3=5; // VALOR EN CENTIMOS DEL CANAL 3 - VALUE IN CENTS OF THE CHANNEL 3 int canal4=10; // VALOR EN CENTIMOS DEL CANAL 4 - VALUE IN CENTS OF THE CHANNEL 4 int canal5=20; // VALOR EN CENTIMOS DEL CANAL 5 - VALUE IN CENTS OF THE CHANNEL 5 int canal6=50; // VALOR EN CENTIMOS DEL CANAL 6 - VALUE IN CENTS OF THE CHANNEL 6 int lectura=0; // VALOR DE LA LECTURA DE LA MONEDA - COIN PRESENT VALUE int Acumulado=0; // SUMA ACUMULADA DE LAS MONEDAS - COINS ACCUMULATED VALUE void setup() { Serial.begin(9600); Serial.println("Arduino Forum"); Serial.println("Reading coins validators "); Serial.println("By ELIOMATIC SOLUTIONS 2019 v.1.0 Seville - Spain"); Serial.println("");
DDRB = B000000; // Establece el puerto B como entradas PORTB= B111111; // Configura las entradas como Pull-up (se activan con señales negativas)
/* ARDUINO PIN D8 CH1 ARDUINO PIN D9 CH2 ARDUINO PIN D10 CH3 ARDUINO PIN D11 CH4 ARDUINO PIN D12 CH5 ARDUINO PIN D13 CH6 */
} /* https://eliomaticsat.blogspot.com/2019/02/arduino-nano-leyendo-validadores-de.html EN EL TUTURIAL SE EXPLICA COMO TRADUCIR LOS VALORES BINARIOS LEIDOS AL CANAL CORRESPONDIENTE TUTORIAL DOCUMENT EXPLAINS HOW TO CONVERT VALUES READ TO THE COIN VALIDATOR CHANNEL */ void loop() { if(PINB!=63){ lectura=63-PINB; switch (lectura) { case 1: Acumulado=Acumulado+canal1; Serial.println(float(Acumulado)/100); break; case 2: Acumulado=Acumulado+canal2; Serial.println(float(Acumulado)/100); break; case 4: Acumulado=Acumulado+canal3; Serial.println(float(Acumulado)/100); break; case 8: Acumulado=Acumulado+canal4; Serial.println(float(Acumulado)/100); break; case 16: Acumulado=Acumulado+canal5; Serial.println(float(Acumulado)/100); break; case 32: Acumulado=Acumulado+canal6; Serial.println(float(Acumulado)/100); break; } delay(100); } }
Buenas, me interesa mucho este tema ¿Me podrías proporcionar el esquela y el código fuente? Es que no están disponibles en esta página. Un saludo y gracias.
ResponderEliminarHola, perdona no haberte contestado antes. Echa un vistazo en:
Eliminarhttps://forum.arduino.cc/index.php?topic=386176.15
Cualquier duda me mandas un privado. Ando muy liado y tengo el blog un poco desatendido.
Saludos
Hola, Estoy probando varios validadores RM5 pero no tengo claro el voltaje de los pulsos de salida, he probado con un analizador lógico y los pulsos son solo de unos mV. Alimentando el validador con 12V ¿Cuál debería se el voltaje de los pulsos?
ResponderEliminarGracias
Perdona por no haberme dado cuenta antes de tu mensage. En reposo deben de tener dodos los canales 5v con respecto a masa. Cuando introducimos una moneda el canal correspondiente se pone a 0v. En la tabla anterior indico las correspondencias para el modo paralelo. Trabaja con señales negativas.
EliminarSaludos
Hola, si este mismo codigo y esquema lo hacemos con una placa Arduino UNO, deberiamos agregar o cambiar algo?? porque no me funciona. Es un monedero de la marca Comestero RM5 evolution.
ResponderEliminarMuchas gracias
No tengo a mano una placa arduino uno, pero el código debe funcionar. Más bien deber de comprobar en que modo está trabajando el monedero, en nuestro caso lo debemos configurar en modo paralelo. Para ello te remito a esta entrada
Eliminarhttps://eliomaticsat.blogspot.com/2019/02/cable-usb-rs232-ttl.html
Cualquier cosa me comentas