Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

capteur de pression phidget
#1

Bonjour,

je souhaite fabriquer une balance électronique pour peser des ruches de bourdons en continue.

J'ai fais l'acquisition de ce capteur de pression: http://www.phidgets.com/products.php?cat..._id=3133_0
et du pont associé: http://www.phidgets.com/products.php?product_id=1046

Sous windows, un tutoriel est accessible pour calibrer le capteur de pression. ça fonctionne très bien.

Mais sous Raspbian, lorsque je cherche à détecter le capteur, celui-ci est effectivement détecté mais je n'ai aucune prise dessus (ou ne sais pas comment faire), c'est-à-dire que j'ai un affichage continue des micro variation de poids du capteur. Les lignes défilent à grande vitesse, et je ne peux rien calibrer.

j'ai a peu près suivi les indications présentées ici: http://www.phidgets.com/docs/OS_-_Linux

Je ne suis en rien spécialiste ni d'électronique, ni de mécanique et encore moins de programmation. Mais le projet me botte et j'aimerais bien le mener à bout.

Si quelqu'un a une aide à m'apporter, s'il faut plus de précisions, ce sera volontiers.

Cordialement,
#2

Bonjour,

On doit pouvoir t'aider oui Smile

Quel code as tu utiliser pour récupérer les données ?

Serial Organisateur d'aPIro
Bloggeur Bidouilleur
Ydle, domotique DIY basée sur un raspberry pi
#3

Bonjour,

merci de l'accueil!

Je n'ai écrit aucun code, j'ai utilisé les exemples de codes fournit par le vendeur Phidget. Je crois (j'espère) que le code est sensé nous permettre de calibrer le capteur de pression, mais la question de la collecte des données reste entière (je n'en suis même pas encore là). Elle viendra juste après.


le code est ci-dessous, cependant vous pouvez aussi le récupérer sur cette page: http://www.phidgets.com/downloads/examples/Python.zip
C'est celui qui s'appelle : "Bridge-simple"

Pour l'instant j'avance pas à pas, sans bien maîtriser tout ce que je fais.
Code :
#! /usr/bin/python

"""Copyright 2011 Phidgets Inc.
This work is licensed under the Creative Commons Attribution 2.5 Canada License.
To view a copy of this license, visit [url]http://creativecommons.org/licenses/by/2.5/ca/[/url]
"""

__author__="Adam Stelmack"
__version__="2.1.8"
__date__ ="14-Jan-2011 2:29:14 PM"

#Basic imports
import sys
from time import sleep
#Phidget specific imports
from Phidgets.PhidgetException import PhidgetException
from Phidgets.Devices.Bridge import Bridge, BridgeGain

#Create an accelerometer object
try:
    bridge = Bridge()
except RuntimeError as e:
    print("Runtime Exception: %s" % e.details)
    print("Exiting....")
    exit(1)

#Information Display Function
def displayDeviceInfo():
    print("|------------|----------------------------------|--------------|------------|")
    print("|- Attached -|-              Type              -|- Serial No. -|-  Version -|")
    print("|------------|----------------------------------|--------------|------------|")
    print("|- %8s -|- %30s -|- %10d -|- %8d -|" % (bridge.isAttached(), bridge.getDeviceName(), bridge.getSerialNum(), bridge.getDeviceVersion()))
    print("|------------|----------------------------------|--------------|------------|")
    print("Number of bridge inputs: %i" % (bridge.getInputCount()))
    print("Data Rate Max: %d" % (bridge.getDataRateMax()))
    print("Data Rate Min: %d" % (bridge.getDataRateMin()))
    print("Input Value Max: %d" % (bridge.getBridgeMax(0)))
    print("Input Value Min: %d" % (bridge.getBridgeMin(0)))

#Event Handler Callback Functions
def BridgeAttached(e):
    attached = e.device
    print("Bridge %i Attached!" % (attached.getSerialNum()))

def BridgeDetached(e):
    detached = e.device
    print("Bridge %i Detached!" % (detached.getSerialNum()))

def BridgeError(e):
    try:
        source = e.device
        print("Bridge %i: Phidget Error %i: %s" % (source.getSerialNum(), e.eCode, e.description))
    except PhidgetException as e:
        print("Phidget Exception %i: %s" % (e.code, e.details))

def BridgeData(e):
    source = e.device
    print("Bridge %i: Input %i: %f" % (source.getSerialNum(), e.index, e.value))

#Main Program Code
try:
    bridge.setOnAttachHandler(BridgeAttached)
    bridge.setOnDetachHandler(BridgeDetached)
    bridge.setOnErrorhandler(BridgeError)
    bridge.setOnBridgeDataHandler(BridgeData)
except PhidgetException as e:
    print("Phidget Exception %i: %s" % (e.code, e.details))
    print("Exiting....")
    exit(1)

print("Opening phidget object....")

try:
    bridge.openPhidget()
except PhidgetException as e:
    print("Phidget Exception %i: %s" % (e.code, e.details))
    print("Exiting....")
    exit(1)

print("Waiting for attach....")

try:
    bridge.waitForAttach(10000)
except PhidgetException as e:
    print("Phidget Exception %i: %s" % (e.code, e.details))
    try:
        bridge.closePhidget()
    except PhidgetException as e:
        print("Phidget Exception %i: %s" % (e.code, e.details))
        print("Exiting....")
        exit(1)
    print("Exiting....")
    exit(1)
else:
    displayDeviceInfo()

try:
    print("Set data rate to 8ms ...")
    bridge.setDataRate(16)
    sleep(2)

    print("Set Gain to 8...")
    bridge.setGain(0, BridgeGain.PHIDGET_BRIDGE_GAIN_8)
    sleep(2)

    print("Enable the Bridge input for reading data...")
    bridge.setEnabled(0, True)
    sleep(2)

except PhidgetException as e:
    print("Phidget Exception %i: %s" % (e.code, e.details))
    try:
        bridge.closePhidget()
    except PhidgetException as e:
        print("Phidget Exception %i: %s" % (e.code, e.details))
        print("Exiting....")
        exit(1)
    print("Exiting....")
    exit(1)

print("Press Enter to quit....")

chr = sys.stdin.read(1)

print("Closing...")

try:
    print("Disable the Bridge input for reading data...")
    bridge.setEnabled(0, False)
    sleep(2)
except PhidgetException as e:
    print("Phidget Exception %i: %s" % (e.code, e.details))
    try:
        bridge.closePhidget()
    except PhidgetException as e:
        print("Phidget Exception %i: %s" % (e.code, e.details))
        print("Exiting....")
        exit(1)
    print("Exiting....")
    exit(1)

try:
    bridge.closePhidget()
except PhidgetException as e:
    print("Phidget Exception %i: %s" % (e.code, e.details))
    print("Exiting....")
    exit(1)

print("Done.")
exit(0)
#4

Bonjour à toi,

Je m'étais intéressé à cette carte mais le prix était out budget. Je connais rien à Python, mais je peux te donner quelques indications :

Le code que tu présentes ne permet pas de calibrer ton capteur. C'est juste un exemple d'utilisation de la librairie phidget pour ta carte 1046. Ça montre que tu as su compiler la librairie sur le raspberry est que ça fonctionne. Au fait, ça fonctionne?

Toute l'API python est donnée ici http://www.phidgets.com/documentation/web/PythonDoc/Phidgets.Devices.Bridge.html. Mais tu peux réutiliser ton bout de code :
il faut déjà choisir le gain de l'ampli. Tu as le choix entre 1 à 128. Pour ton capteur, alimenté en 5V par la carte il donne une amplitude de mesure de 0mv pour une charge nulle et à 5mV pour une charge de 5kg (sensibilité 1mv/V). C'est le principe d'un pont de wheastone (cf ce topic.
Tu peux prendre le gain maximum 128 (cf l'instruction setGain(0, 128)) . Après ça tu choisis l'intervalle de temps entre deux mesures en ms. Et tu lis tes valeurs en mV.
Pour calibrer ton capteur il te faut faire deux mesures avec des charges connues, voire des masses étalons pour plus de précision. Ça te permet d'obtenir l'équation d'une droite masse=f(mesure en mV). Comme dans le programme pour window que tu as essayé. Ben, vu que tu as déjà l'équation de la droite, tu n'as plus qu'à modifier ton bout de code pour afficher la valeur calculée à partir de e.value (cf les lignes def BridgeData(e) avant #Main Program Code). Et voilà. Ton bout de code affiche un poids.

Après ça, faudra travailler les arrondis et le filtrage de ta mesure. Parce que ta carte propose pratiquement 8 millions de points de mesure. En théorie, tu pourrais mesurer des variations de l'ordre du mg. Je serais assez curieux de voir ça.

Le sujet du topic indique capteur de pression. Ce serait plutôt capteur de charge ou force. Wink

Cool
#5

Ouahou! ça c'est de la réponse!

ça fait du bien après des heures à rien comprendre.

Alors a priori, oui, ça marche et non pas vraiment. En gros, sous windows, j'arrive très bien à calibrer le capteur, mais sous raspbian, j'ai juste des lignes qui s'affichent en continue montrant les micro variations de courant. Mais si je met un poids dessus, on voit bien que ça change en fonction du poids de manière cohérente.

Si je comprends bien ce que tu me dis, je pourrais reprendre l’équation que j'ai obtenu pour la calibration sous windows et la remettre tel quel dans le code ci-dessus (je veux dire sans refaire de calibration sous Raspbian?)? Merci de m'avoir indiqué l'emplacement, mais exactement, je recopie l'équation à la place de "e.value" (pfff. mille excuses avec mes question de noob).

Joli Topic monologué ! Wink, perso j'aurais pas eu le courage de continuer si personne ne m'avait répondu Big Grin. C'est complexe, mais ça m'éclaire un peu quand même. Par contre tu y dis rien piger en codage et là, tu viens de m'expliquer le mien en deux temps trois mouvements... Moi je pige vraiment rien au codage, pour de vrai Smile

Je changerais volontiers le titre du topic, mais entre nous, quelle différence fondamentale fais-tu entre capteur de charge, et capteur de pression et capteur de force?

Merci!
#6

Dizzy84 a écrit :Je changerais volontiers le titre du topic, mais entre nous, quelle différence fondamentale fais-tu entre capteur de charge, et capteur de pression et capteur de force?

Salut Dizzy84,

en général on a tendance a parle de capteur de pression pour la pression atmosphérique ou la pression dans un circuit d'eau ou d'air alors que ton capteur sert à obtenir un poid. Smile
#7

Ah ok, évidemment!

Merci!


Alors je veux bien le changer pour qu'il corresponde mieux au sujet. Est-ce qu'il faut demander aux modérateurs de le faire?
#8

J'ai pas dit que je ne connaissais rien en codage. Je ne connais pas la syntaxe de python, mais je suis capable de décrypter grosso-modo ce que ça fait, hein... Donc pour répondre à ta question, oui il suffit d'utiliser y=Ax+B que tu as déjà obtenu précédemment. Peut-être comme ça
Code :
...
def BridgeData(e):
    source = e.device
    mesure = e.value * A + B
    print("Bridge %i: Input %i: %f" % (source.getSerialNum(), e.index, mesure)"kg")
...
Ceux qui connaissent Python n'auront qu'à corriger.

Cool
#9

Ceci dit, j'ai déjà vu des projets DIY pour peser des ruches d'abeilles (histoire de détecter le départ d'un essaim).

Cool
#10

Ok, merci, je vais essayer (ce soir ou demain).

Grâce au changement de titre, j'ai refais une recherche sur le forum et je suis tombé sur ce topic qui semble aller dans le même objectif mais avec une autre instrumentation si je comprends bien. Je fais le lien entre les deux, des fois que ça pourrait servir...
http://forum.raspfr.org/viewtopic.php?id=260


(à Gambit, c'est sur ton topic monologué que tu dis que tu piges rien au codage, Smile, je suppose que depuis, tu as progressé ! )
#11

J'avais même pas vu ce topic. Finalement, on tourne tous autour des mêmes pots.

Cool
#12

gambit a écrit :J'avais même pas vu ce topic. Finalement, on tourne tous autour des mêmes pots.

de vraies petites abeilles :lol:

Serial Organisateur d'aPIro
Bloggeur Bidouilleur
Ydle, domotique DIY basée sur un raspberry pi
#13

Bonjour,

je cherche encore, pour l'instant la modification proposée sur le code exemple de fonctionne pas.

Je vous tiens au courant des suites, si vous avez d'autres idées n'hésitez pas.

Cordialement
#14

En tout cas, n'hésites pas à nous faire part de tes avancées....
En faisant une recherche, je viens de tomber sur ton projet,
Et j'ai eu un flash.... une idée m'est venue pour une application de pesée alors je suis très très intéressé par ce matériel et par son pilotage via le rasp.

Merci d'avance
#15

Bonjour !

Je suis sur un projet similaire ! J'ai aussi effectivement la même carte Phidgets avec les différents load cells.

J'ai aussi besoin de calibrer mon matériel, et je suis tombé sur ce post, y'a t'il eu des améliorations ? Ou un script python que je pourrais réutiliser pour les calibrer facilement sur ma raspberry Wink ?

Merci bien !
Sujet fermé


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)