>Tests sur un sélecteur de pièce de monnaie
Auteur : mo_hand
Zine : Rafale #21
J’ai récupéré un monnayeur de pièce pour voir comment ça fonctionne. C’est assez
simple en fait.
En bref, il y a un connecteur 16 broches, dont certaines renvoies une impulsion
lorsque qu’une pièce est détectée. Par exemple si c’est 1€ c’est la broche 7, si
2€ broche 8...
Ce sont des sorties à collecteurs ouvert il y a donc un petit montage à faire.
Facile en lisant la datasheet.
J'ai fait le montage fait CMS...
Et branché sur une rasp. Le tout accompagné d’un petit programme en Python :
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(20, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_UP)
valeur = 0
print (valeur)
def my_callback(channel):
global valeur
print ("Piece detecte...")
if channel == 13:
print ("\nFront descendant détecté sur le GPIO 13")
print ("****** Bouton ejection *****")
valeur = 0
print ("Reset du compteur")
print ("Total = ",valeur)
elif channel == 12:
print ("\nFront descendant détecté sur le GPIO 12")
print ("****** 1 € *****")
print ("channel : ",channel)
print ("valeur = ",valeur," + 1 € ")
valeur = valeur + 1
print ("Total = ",valeur)
elif channel == 16:
print ("\nFront descendant détecté sur le GPIO 16")
print ("****** ? € *****")
print ("channel : ",channel)
print ("valeur = ",valeur," + 0 € ")
valeur = valeur + 0
print ("Total = ",valeur)
elif channel == 20:
print ("Front descendant détecté sur le GPIO 20")
print ("****** 0.20 € *****")
print ("channel : ",channel)
print ("valeur = ",valeur," + 0.20 € ")
valeur = valeur + 0.20
print ("Total = ",valeur)
elif channel == 21:
print ("Front descendant détecté sur le GPIO 21")
print ("****** 2 € *****")
print ("channel : ",channel)
print ("valeur = ",valeur," + 2 € ")
valeur = valeur + 2
print ("Total = ",valeur)
elif channel == 26:
print ("Front descendant détecté sur le GPIO 26")
print ("****** 0.50 € *****")
print ("channel : ",channel)
print ("valeur = ",valeur," + 0.50 € ")
valeur = valeur + 0.50
print ("Total = ",valeur)
elif channel == 19:
print ("Front descendant détecté sur le GPIO 19")
print ("****** 0.10 € *****")
print ("channel : ",channel)
print ("valeur = ",valeur," + 0.10 € ")
valeur = valeur + 0.10
print ("Total = ",valeur)
print ("TEST HORODATEUR V.1.00 - Mo_hand -")
input("Touche pour commencer...\n>")
GPIO.add_event_detect(13, GPIO.FALLING, callback=my_callback, bouncetime=300)
GPIO.add_event_detect(12, GPIO.FALLING, callback=my_callback, bouncetime=300)
GPIO.add_event_detect(16, GPIO.FALLING, callback=my_callback, bouncetime=300)
GPIO.add_event_detect(20, GPIO.FALLING, callback=my_callback, bouncetime=300)
GPIO.add_event_detect(21, GPIO.FALLING, callback=my_callback, bouncetime=300)
GPIO.add_event_detect(26, GPIO.FALLING, callback=my_callback, bouncetime=300)
GPIO.add_event_detect(19, GPIO.FALLING, callback=my_callback, bouncetime=300)
try:
input ("Appuyer sur une touche pour quitter \n\n")
print ("Bye...")
except KeyboardInterrupt:
GPIO.cleanup() # clean up GPIO on CTRL+C exit
GPIO.cleanup() # clean up GPIO on normal exit
La pièce passe par une boucle, une bobine, dont l'inductance varie en fonction
des caractéristiques métalliques de la pièce.
Et la il y a moyen de tester TRANQUILLEMENT comment le système se comporte face
à des pièces étrangères dans la valeur est moindre que l’euro ou bien face à
tout type de produit se rapprochant d’une piéce...
|