Hoy os traigo un sencillísimo monedero electrónico, que dotaremos de un display LCD 1602 con comunicación I2C, para que a través de este, Arduino nos muestre el número de créditos o monedas que vamos insertando a través de la ranura que el monedero electrónico tiene. Tomaremos como moneda de referencia la de 50 céntimos de Euro, aunque podría ser cualquier otra, por lo que si insertamos cualquier moneda diferente, esta será rechazada por el monedero electrónico y por lo tanto no se tendrá en cuenta un nuevo crédito. Además este pequeño sistema está dotado de un pulsador, mediante el cual, seremos capaces de bajar un crédito del contador de créditos que muestra el display LCD 1602, cada vez que lo pulsemos.
Monedero Electrónico |
Una de las grandes ventajas de este monedero electrónico, es que rechaza las monedas falsas, monedas dobladas y arandelas, además de tener gran precisión cuando tiene que diferenciar dos monedas de tamaño muy similar pero de diferente denominación. Requiere de una fuente de alimentación regulada de 12VDC para su funcionamiento, es decir, para que su circuitería interna y el solenoide estén correctamente alimentados (Pines +12VDC y GND). El monedero nos entregará un pulso eléctrico de unos 2-3VDC a través de su pin “COIN”, cada vez que insertemos una moneda correcta en su interior, y será el encargado de habilitar la interrupción INT0 (pin digital 2) en nuestro Arduino. Este monedero también está dotado de un pin de salida denominado “COUNTER” que se encarga de enviar un pulso, que pueda ser leído por un contador electrónico externo, cada vez que insertamos la moneda correcta, aunque en este POST no lo vamos a utilizar. Mediante el interruptor NC/NO podemos seleccionar en qué niveles lógicos va a trabajar el pulso de salida del monedero, es decir, o estado normalmente abierto (NO) o normalmente cerrado (NC). Si seleccionamos NO el monedero cuando está en espera se mantiene todo el tiempo entregando un voltaje en su salida (ALTO). Al momento que recibe una moneda correcta, el monedero corta el voltaje momentáneamente (BAJO) y vuelve a su estado NO en el que entrega voltaje (ALTO). De lo contrario si seleccionamos NC el monedero cuando está en espera, se encuentra en estado cerrado (BAJO) y no entrega ningún voltaje o pulso. Al momento de recibir una moneda correcta, entrega un pulso (ALTO) y luego vuelve a su estado NC, en el que no entrega ningún voltaje (BAJO).
Alimentación, salidas e interruptor de niveles lógicos |
Este monedero puede ser configurado instantáneamente para aceptar prácticamente cualquier denominación de moneda al tiempo que rechaza todas los demás. La configuración para la aceptación de las monedas se establece mediante la inserción de una denominación de la moneda en un espacio llamado “CUNA”, que es donde yo he insertado la moneda de 50 céntimos de Euro.
Cuna del monedero electrónico |
También, mediante otro interruptor, podemos seleccionar la velocidad correcta de aceptación de la moneda, en definitiva, la velocidad del pulso de salida (pin COIN). Esta velocidad de pulso se encuentra entre los 100 milisegundos (SLOW/ velocidad lenta / pulso largo), 50 milisegundos (MEDIUM / velocidad media / pulso medio) y 30 milisegundos (FAST / velocidad rápida / Pulso corto). En lo personal siempre trabajo con 100 milisegundos (SLOW), ya que tras varias pruebas es la velocidad más correcta para trabajar con nuestro Arduino.
Interruptor para las velocidades del pulso |
Con el potenciómetro de la parte superior del monedero, se ajusta la tolerancia de aceptación de monedas, para una aceptación más o menos estricta (STRICT / más estricta o SLACK / menos estricta).
Potenciómetro de aceptación de monedas |
El funcionamiento del programa es muy simple, es decir, vamos a utilizar la interrupción 0 de Arduino (INT 0), que es la que se va a producir a través del pin digital 2 de Arduino, al que le hemos conectado la señal “COIN” del monedero electrónico, por lo tanto, cada vez que se detecte en el monedero una moneda de 50 céntimos de Euro, este manda una señal de nivel alto (HIGH) a Arduino, para que se produzca la interrupción del sistema y se ejecute la Rutina de Servicio a la Interrupción (ISR) que es donde tenemos programado que se incremente en una unidad la cantidad de créditos. Por otro lado si presionamos el pulsador con conexión PULL-DOWN, es decir, cambia de nivel bajo (LOW) a alto (HIGH) cada vez que lo pulsemos (aunque a estas alturas ya hemos trabajado multitud de veces con este recurso) para disminuir en una unidad el número de créditos. Como el programa está refrescando constantemente los valores del display LCD 1602, en todo momento tendremos un valor actualizado de los créditos con los que contamos. Por último cabe decir que el display LCD 1602 le hemos conectado a nuestro Arduino a través de comunicación I2C, soldándole a sus pines el módulo LCM 1602 I2C V1 como ya hemos visto también en POST anteriores.
Lista de Materiales:
· Arduino UNO Rev.3.
· Cable USB tipo A-B.
· Monedero electrónico simple (marca SG).
· Módulo LCM 1602 I2C V1.
· Display 16x2 LCD 1602.
· Pulsador.
· Resistencia de 10KΩ.
· Fuente de alimentación regulada de 12VDC.
· Monedas de EURO de diferente denominación.
· Protoboard.
· Cables de conexión.
Código del programa:
Video:
Hola. me gustaria hacerte una consulta.
ResponderEliminarel monedero si pierde la corriente se borraria?
estoy tratando de hacer algo que guarde la cuenta de monedas incluso si se va la corriente.
gracias
Tienes que utilizar una tarjeta SD o una EEPROM I2C para poder almacenar la información. Saludos
EliminarHola que tal?
ResponderEliminarLo que pasa es que quisiera saber si este monedero acepta mas de un tipo de moneda a la vez?
Hablando de pesos mexicanos, que acepte de un 1 peso,2 pesos, 5 y 10 pesos como ejemplo.
Estoy haciendo un proyecto pero requiero de un monedero y asi como el tuyo conectado a arduino, y asu vez lo voy a conectar con JAVA para poder almacenar los datos como una base de datos MYSQL.
Solo necesito saber si me acepta mas de un tipo de moneda y como saber que tipo de moneda ingresaron, seria de grana ayuda tu aporte. Saludos
Este monedero es el modelo más básico y solo acepta monedas de un tipo a la vez, es decir, solamente acepta la moneda que tengas insertada en la cuna del monedero y no otras. Saludos
EliminarHola BANGO GARCIA
Eliminarsoy de Perú y quisiera contactarme con usted para hacerle algunas consultas x favor. Gracias. Mi correo yeraagresan@gmail.com. Escríbeme x favor. Me urge consultarte algunas cosas
Existen otros tipos de Monederos que son como el que quieres, pero son mas complicados de programar, el que se esta usando ahora solo acepta una moneda
Eliminarbuenas tardes si requiero pagar un producto $5.00 en monedas de $1.00 y quiero que la cuenta vaya decreciendo
ResponderEliminarCrea una variable llamada total con el valor de 5$ y la vas restando una unidad cada vez que el monedero envie un pulso al introducir una moneda de 1$. Saludos
Eliminartengo un proyecto identico en la escuela, la pregunta es se ¿puede dar cambio ???
ResponderEliminarNo puede dar cambio. Este monedero es exclusivamente de entrada de monedas y no dispone de cajetín para salida de monedas. Saludos
EliminarQue tal Mariano, disculpa si no cuento con una LCD me serviría tu código de programación?Espero de tu ayuda excelente trabajo!
ResponderEliminarClaro que si te valdria, pero tendrias que cambiar el codigo de la parte del LCD por enviarlo al monitor serie, es decir, pasar de LCD.print a Serial.print. Saludos
ResponderEliminarExcelente muchas gracias por responder, espero me puedas ayudar a lo siguiente, cuando tenga disponibles "X" créditos guardados, quisiera que al presionar el pulsador este reste el crédito como se muestra, pero a la vez accione un servomotor por tanto tiempo, (el servomotor me ayudara a mover un cigarrillo en una dispensadora) espero me puedas ayudar con la programación te lo agradecería demaciado. Muchas gracias e igualmente Saludos.
Eliminarsr mariano como hago para mete el codigo para poder encender un rele por determinado tiempo soy nuevo en esto y estoy un poco perdido agradezco tu ayuda
EliminarSimplemente en la parte del codigo donde evaluas que has presionado el pulsador que elimina un credito (dentro del if) activas el servo de 360 grados, aplicas un delay del tiempo que necesites y posteriormente paras el servo. Como puedes ver es muy simple. Saludos
ResponderEliminarValla muchas gracias en verdad, me ayudaste demaciado con esto, Saludos y espero poder mostrarte el proyecto ya concluido.
ResponderEliminarHola Mariano...
ResponderEliminarAgregaste algún circuito adicional al diseño?, el arduino no me esta detectando el pulso a la entrada, en mi circuito tengo conectado el cable de pulso coin, al puerto 12 configurado como input y solo quiero que encienda un led una vez que detecte el pulso (moneda).
Si realizas las conexiones y programación tal cual te tiene que funcionar porque no he utilizado ningún circuito ni nada a mayores de lo que se muestra en el POST. Te recomiendo repasar todo desde el principio que la mayoría de las veces son despistes o fallos tontos. SALUDOS
Eliminarhola que tal trate de rpobar tu programa y me marca error en una varia , ademas tengo una duda yo tengo una lcd sin luz eso cambia? o la puedo usar igual ya q llevo varios intentos usando interfas i2c y no funciona
ResponderEliminarEl error al compilar te aparece porque no estás utilizando las librerías correctas. Las tienes en uno de los primeros POST del BLOG (Diciembre 2015). El LCD no importa que tenga o no Backlight. Saludos
EliminarHola que tal amigo, tengo un problema, use tu codigo tal cual mas sin embargo cada que pasa una modena no marca "1" credito marca cientos de veces mas no se un "23434" y a veces hasta numeros negativos, no te paso algo similar?
ResponderEliminarEste comentario ha sido eliminado por el autor.
EliminarMe pasaba lo mismo; alimenta el monedero y el arduino a la misma fuente pero con un regulador de 12V-5V para que todo se alimente de la misma fuente.
EliminarEse error me sucede al cargar el programa y alimentar el arduino desde la pc y el monedero desde una fuente exterior (12V), al parecer necesitan tener la misma masa para que el arduino detecte el pulso.
Por cierto, lo hice funcionar con la SHIELD LCD y de maravilla.
me pasa igual
Eliminarcompa no me compila tu programa
ResponderEliminarInstala el IDE 1.6.4 y mis librerías de los primeros POST de mi BLOG (Diciembre 2015)
EliminarUna pregunta, si tengo un producto de $5 ¿Cómo hago para restarle esos 5 pesos de un pulso?
ResponderEliminaren vez de 1 por 1
EliminarRestando 5 unidades a la variable que almacena el total en vez de 1 unidad
ResponderEliminarSeria algo asi variable -=5?, en netbeans puedo hacer eso, creo que también en el launcher ya que es el mismo lenguaje, no hagas caso al otro comentario
EliminarSi, o variable = variable - 5;
ResponderEliminarQue hay amigo, oye tengo la LCD con el Modulo y ya agregue las librerias pero me sale un error al compilar tu programa, dice: "exit status 1 'POSITIVE' was not declared in this scope." Que crees que pueda ser? espero puedas ayudarme Saludos!
ResponderEliminarSOn las librerias, intenta descargarte la libreria Wire y LiquidCrystal_I2C y en el objeto solo pone lcd (0x27, 16, 2);
ResponderEliminarSon las librerías como bien argumentas. Hay muchas veces que respondo a la gente por email y no sale la solución aquí, el motivo no lo se. Gracias de todas formas. http://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html?m=1
EliminarRecomiendo pasaros por el siguiente enlace. http://miarduinounotieneunblog.blogspot.com.es/2015/12/display-lcd-16x2-con-comunicacion-i2c.html?m=1
ResponderEliminarbuenas tardes excelente tu proyecto, yo estoy haciendo algo similar pero necesito que cuando le engrese una moneda el me active un motor por cierto tiempo como me podrias ayudar con eso??? gracias
ResponderEliminarMuy bien tu post, solo una pregunta intento hacer algo similar solo que al ingresar una moneda. Muestre datos desde sd ejemplo: inserto 1 moneda y me muestre una clave de la memoria
ResponderEliminarSi se puede hacer, pero controlando el manejo del lector/grabador de tarjetas SD.
Eliminartiene un error en la linea 83 de lcd.write hay que poner lcd.print(), y si no te compila tienes que poner despues de atach interrup(0,la funcion , change) ... el cero es para que utilice la primera interrupcion
ResponderEliminarEl programa no tiene errores porque si los tuviera no habría podido subirlo a la placa y hacerlo funcionar como se muestra en el video. Esos "posibles errores" como tu dices que te aparecen es porque no estas utilizando las mismas librerías que yo, que aunque se llamen igual no tienen por que contener las mismas funciones y clases, ni estas utilizando el mismo IDE por lo que la programación puede cambiar levemente como a ti te ha sucedido...
EliminarBUENO PRIMERO GRACIAS POR DEDICAR TIEMPO A ESA LABOR EDUCATIVA Y DE COMPARTIR CONOCIMIENTO,DIOS TE BENDIGA
ResponderEliminarESTOY DESARROLANDO UN TEMPORIZADOR CON MONEDERO ,ESTA EXCELENTE TU PROPUESTA DEL PROGRAMA,SOLO QUE AL UTILIZAR LA FUNCION CON MI MONEDERO ME ARROJA VALORES MUY ALTOS EN CADA INTERRUPCION EN VEZ DE 1 ,ARROJA MILES EN PANTALLA.QUE CREES PUEDA SER LA CAUSA.SALUDOS DESDE GUADALAJARA .MEXICO
BIEN YA PUDE RESOLVER EL PROBLEMA. EL PRIMER PASO ES UNIFICAR LA ALIMENTACION DE 12 VOLTS QUE NECESITA EL MONEDERO Y LOS 5 VOLTS QUE ALIMENTA EL PULSADOR.QUE SEA LA MISMA GND (TIERRA). YA SEA QUE UTILICES UN REGULADOR DE LM7805 DE 12V A 5 V.SALUDOS Y GRACIAS.
EliminarAmigo me pasa lo mismo, tendrás algún diagrama pasa estudirlo
EliminarNo tengo ni idea porque si tu monedero es diferente tendrás que informarte de como funciona y ajustarlo en la programacion...
ResponderEliminarbuen programa, no lo pude cargar al arduino tal como esta. lo modifique en el Void Setup por que no me refrescaba la pantalla. muchas gracias amigo. te pido de favor que me ayudes en este mismo sketch a mover un servo al presionar el botón.
ResponderEliminarSeria problema de que no estabas utilizando la dirección I2C correcta en el LCD. Para aprender a manejar un servo, pasate por el POST correspondiente de mi BLOG.
EliminarGRACIAS
ResponderEliminarHola, espero me puedas ayudar he copiado el Código pero cuando meto una moneda me marca de mas Créditos, meto una moneda y en lugar de que me marque una moneda me marco 2 o hasta 3 monedas como si se saltara. Gracias
ResponderEliminarMe pasa lo mismo, pudiste arreglar el problema??
Eliminara mi me pasó lo mismo y lo que hice fue cambiar de la interrupción 0 a la 1, vale decir del puerto 2 al 3 del arduino.
EliminarHola, tiene como poner un reloj de tiempo, para que se quede encedido un rele? y un Boton Pulsador Arranque? Saludos desde Brazil!!!!
ResponderEliminarAmigo que tal, al ingresar una moneda me marca cientos de créditos y están alimentados por la misma fuente mi arduino y el monedero, solo que estoy usando una fuente para pc.
ResponderEliminarEl cable que da 5volts no puede hacer que se vea el lcd, sin embargo, al conectar al cable de 12 volts si funciona pero queda inhábil el botón que elimina los créditos.
Alguna recomendación?
Puedes alimentar el arduino y el monedero de la misma fuente de 12v, pero al arduino le deben de llegar como máximo 5V muy bien regulados por su pin Vin. Si alimentas desde el jack de 3.5" puedes meter directamente los 12V de la fuente puesto que esa entrada tiene un regulador a 5VDC. Por lo demás te recomiendo que revises las conexiones que vienen dentro de la cabecera del código. Saludos
EliminarHola que tal con el Arduino MEGA tambien puede funcionar..? y otra duda lo hago pero el display no me aparece nada
ResponderEliminarHola!, mi duda es porque cuando inserto una moneda en vez de contarme de 1 en 1, me cuenta de 2 o de 3, a veces de 4, agradecería la ayuda
ResponderEliminarbuenas tardes quiero usar este programa y que por cada peso introducido que habrá una válvula solenoide por determinado tiempo. y una ves concluido cierre de nuevo. y asi cada que se introduzca dinero habrá la válvula.
ResponderEliminarpodrá ayudarme?
hola disculpe como hago para que lea solo moneda sol peruano me ayudas por favor
ResponderEliminarhola, una consulta, en mi monedero la señal de credito marca 12v cuando ingreso un credito siempre y cuando el pin de señal este al aire ya que si lo conecto a la entrada de arduino este se baja a 1v, a que se debe esto?
ResponderEliminarNo tengo ni idea porque no se ni como estas instalando, ni el código que utilizas, ni el modelo de monedero...
ResponderEliminarsaludos,,
ResponderEliminarestyo ayudando en un proyecto de un cajero que imprima certificados, estoy utilizando arduino y rasbery, el costo para cada certificado es de un dolar, pero no puedo codificar el monedero para que de la orden y que imprimar el certificado,,
quisiera que me ayudes con esa consulta..
gracias..
carlosjose5445@hotmail.com
porque esta linea es -1 y no 0 ?
ResponderEliminarvolatile int numero_monedas = -1; // Variable que almacena el número de créditos introducidos
disculpa con cuanta corriente alimentaste al monedero, ya se el voltaje
ResponderEliminarBuenas noches amigo bonito post, necesiito de tu ayuda; deseo hacer un proyecto con un monedero, el cual debe trabajar de la siguiente manera: cuando intruduzco cierta cantidad de monedas estos pulsos llegan al arduino, luego arduino debe sacar la misma cantidad de pulsos por otro pin digital con la salvedad, de que estos pulsos deben ir mas lentos que los pulsos de entrada, de antemano gracias
ResponderEliminarHola necesito de tu ayuda
ResponderEliminarbuenas noches como hago para utilizar 2 monedas de diferente denominación que con 1 moneda me envié un pulso y me active un relé por determinado tiempo y con 2 monedas de otra denominación me envié un pulso y me active el relé por determinado tiempo,y con 2 botones diferentes activar un relé o el otro relé le agradezco su colaboración
ResponderEliminarGracias de antemano...y por tu contribución
ResponderEliminar