Go Down

Topic: capteur infrarouge sharp utilisation (Read 11756 times) previous topic - next topic

vike229

Salut tout le monde ,  :) je me présente , je suis nouveau sur le forum et novice en programmation , en 1ere Ssi.
Voila pour notre TPE (travaux pratique encadrés) nous devons faire un système capable de trouver le niveau et le volume d'une cuve enterrée. Le problème est que nous n'arrivons pas a convertir les données du capteur sharp GP2Y0A21YK0F
Pour l'instant notre technique est de recréer la fonction du datasheet sur excel puis de déduire les fonctions (segments de droites)
Seulement les résultats sont faux, est ce la bonne technique ? si non comment faire ?  voila je suis preneur de tous les conseils
Les profs nous aident un peu mais ça ne marche toujours pas !

pour info: nous utilisons un arduino uno

Merci de votre aide !!!!! ;)

chabot380

Salut tout seul !  :D

Généralement on fait ça avec de l'ultrason !
ORDINAUSORE 2Ghz AMD64 QUI S'ALLUME EN 48 SECONDES AVEC UBUNTU 12.04
ARDUINO UNO / Shield Ethernet / RTC DS1307
Programmation Python et j'apprends le C
Technicien Télé Vidéo à la retraite.

Artouste



Voila pour notre TPE (travaux pratique encadrés) nous devons faire un système capable de trouver le niveau et le volume d'une cuve enterrée. Le problème est que nous n'arrivons pas a convertir les données du capteur sharp GP2Y0A21YK0F

bonjour
Quelle distance entre le capteur et une cuve vide et une cuve pleine ?
La cuve est remple de quoi comme liquide ? parce que le capteur travaille en reflectance dans une gamme de 10 à 80 cm.

ce capteur a été choisi comment/par qui pour cette application ?

vike229


Salut tout seul !  :D

Généralement on fait ça avec de l'ultrason !


:P! au début on pensait le faire avec de l'ultrason mais notre prof nous la vivement déconseillé (trop compliqué, pas assez précis...) bon maintenant je sais le contraire (le hc sr04 est bien) mais on a plus le temps




Voila pour notre TPE (travaux pratique encadrés) nous devons faire un système capable de trouver le niveau et le volume d'une cuve enterrée. Le problème est que nous n'arrivons pas a convertir les données du capteur sharp GP2Y0A21YK0F

bonjour
Quelle distance entre le capteur et une cuve vide et une cuve pleine ?
La cuve est remple de quoi comme liquide ? parce que le capteur travaille en reflectance dans une gamme de 10 à 80 cm.

ce capteur a été choisi comment/par qui pour cette application ?


le capteur est un 10-80cm, notre cuve a une hauteur de 25cm (le début de la détection commence a 10cm?)
cuve vide = 35 cm  ;  cuve pleine =10
on utilise de l'eau mais on a mis en place une plaque de PVC expansée blanche pour que le rayon soit bien réfléchi.
Nous avons choisi ce capteur avec les conseils de notre prof  (c'est définitivement un mauvais choix) on l'utilise pour trouver la distance eau / haut de la cuve , puis par un calcul nous trouvons la hauteur d'eau et donc le volume.
Malheureusement on a plus le temps de changé de capteur .  :(

Artouste

#4
Feb 08, 2014, 12:51 pm Last Edit: Feb 08, 2014, 12:54 pm by Artouste Reason: 1


le capteur est un 10-80cm, notre cuve a une hauteur de 25cm (le début de la détection commence a 10cm?)
cuve vide = 35 cm  ;  cuve pleine =10
on utilise de l'eau mais on a mis en place une plaque de PVC expansée blanche pour que le rayon soit bien réfléchi.
Nous avons choisi ce capteur avec les conseils de notre prof  (c'est définitivement un mauvais choix) on l'utilise pour trouver la distance eau / haut de la cuve , puis par un calcul nous trouvons la hauteur d'eau et donc le volume.
Malheureusement on a plus le temps de changé de capteur .  :(

Il s'agit bien de ce capteur là ?
vous avez lu le datasheet ? le prof en premier ?  8) , il y a des courbes
http://www.farnell.com/datasheets/1657845.pdf

avant d'essayer de l'utiliser sur une cuve, vous avez déjà validé le retour de distance ?
l'arduino renvoie des données "coherentes" ? lorsque vous jouez avec une simple feuille de papier devant la capteur ?

et puis un capteur reflectif IR sur de l'eau (absorption spectrale )  ce n 'est peut etre pas la meilleure solution

vike229

Oui c'est celui la ! on l'a lu, notre prof un peu moins  :smiley-sweat:
Le probleme qu'on rencontre avec les courbes c'est la précision, on a calculer a peine quelques points en utilisant l'image, on a donc des erreurs de 3-4cm . Donc les distances sont cohérentes mais fausses

voici notre code
Code: [Select]
#include <LiquidCrystal.h> // librairie

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // initialisation de l'écran lcd
// const int sensorPin = A5;    // pin du capteur
long volume  ;
long largeur = 30 ;
long longueur = 30 ;
long hauteurvid ;
int hauteureau  ;
int voLume  ;
int capteurDist = A5 ; // la borne du capteur de distance
int valDist; // la valeur du capteuur de distance
//int capteurMin = 0 ;
//int capteurMax = 1023 ;
float foncun = -0.29;
//long distance = 0 ;
float foncdeux = -0.13 ;
float fonctrois = -0.05;


void setup() {
  lcd.begin(16, 2); // configurer le lcd
}

void loop() {
valDist= analogRead(capteurDist);//lire capteur

if ((valDist >= 123) && (valDist <= 191))   // convertir donnéés
{
  hauteurvid = foncun * valDist  + 75;
}
else if ((valDist > 191 ) &&  (valDist)<= 268)
{
  hauteurvid = foncdeux * valDist + 45;
}
else ((valDist > 268 ) && (valDist <= 469 ));
{
hauteurvid = fonctrois * valDist + 23;
}
  hauteureau = 40 - hauteurvid ;
  volume = longueur * largeur * hauteureau ; // calculer volume (cm3)
  voLume = volume / 1000 ;//calculer volume (L)
lcd.setCursor(0, 1);  //affichage sur le lcd
  lcd.print( voLume);
  lcd.print("L") ;
}

on trouve environ 10cm au lieu de 7 (désolé notre programme n'est surement pas optimisé)

Artouste


Oui c'est celui la ! on l'a lu, notre prof un peu moins  :smiley-sweat:
Le probleme qu'on rencontre avec les courbes c'est la précision, on a calculer a peine quelques points en utilisant l'image, on a donc des erreurs de 3-4cm . Donc les distances sont cohérentes mais fausses

...
on trouve environ 10cm au lieu de 7 (désolé notre programme n'est surement pas optimisé)

ça ne me surprend pas plus que cela
sauf mauvaise lecture de ma part
VO pour une distance entre 10 et 35 cm a une amplitude d'~ 1.5V
tu fais de l'acquisition standard sur une echelle de 0-1023 basé sur un theorique 5V
compte tenu des caracteristiques dispersifs , l'erreur de lecture n'est pas incoherente.

qq idées pour tenter de rattraper la situation avec ce que tu a :
- peut etre passer par un peu de filtrage numerique (moyennage/lissage)
et/ou
- utiliser une ref externe pour le convertisseur AD




vike229

#7
Feb 08, 2014, 01:38 pm Last Edit: Feb 08, 2014, 01:49 pm by vike229 Reason: 1
Ahh ok je comprend merci beaucoup !!!
Le filtrage numérique se met en place comment dans le code ?
ou alors nous le remplaçons avec un capteur qui possede une plus petite amplitude ? comme le GP2Y0A41SK0F(4-30cm)
En tout cas merci

Artouste


Ahh ok je comprend merci beaucoup !!!
Le filtrage numérique se met en place comment dans le code ?
En tout cas merci

déjà fais des logs d'acquisition avec ta base de travail, pour tracer une pseudo courbe de dispersion

tu enregistre la valeur lue de ton capteur pendant 30 secondes toutes les 0.5 secondes à niveau de remplissage stabilisé
tu part de ta cuve vide 30 secondes de mesures, tu augmente le remplissage "en hauteur" de 1 cm , tu recommence "la sequence de 30 secondes"  jusqu'au "plein"

et tu trace des belles courbes sous "excel" quu tu nous montreras  :smiley-mr-green:


fdufnews


Le filtrage numérique se met en place comment dans le code ?

Tu fais la moyenne sur plusieurs mesures consécutives

vike229

Merci mais malheureusement on doit le finir et le rendre vendredi, il est aussi interdit de travailler, mesurer en dehors de nos séances
Je m'y prend tard désolé pour la courbe ( si on a le droit de récupérer notre projet je vous la donnerai  )  

je pense utiliser ce capteur GP2Y0A41SK0F 4-40cm  la plage de données est sur 2.2V déjà plus précis
je vous présenterais le projet une fois terminer !  :)

Merci a tous pour vos réponses claires précises et rapides !

Artouste


Merci mais malheureusement on doit le finir et le rendre vendredi, il est aussi interdit de travailler, mesurer en dehors de nos séances
Je m'y prend tard désolé pour la courbe ( si on a le droit de récupérer notre projet je vous la donnerai  )  

je pense utiliser ce capteur GP2Y0A41SK0F 4-40cm  la plage de données est sur 2.2V déjà plus précis
je vous présenterais le projet une fois terminer !  :)

Merci a tous pour vos réponses claires précises et rapides !

Alors là je ne comprend pas bien :
dans une demarche pragmatique un changement de techno de capteur peut toujours etre envisagé
mais là tu veux changer un mauvais choix initial , par un autre mauvais choix ?

je suis parti du postulat pout t'aider que tu n'a pas le choix du capteur, parce qu'i il t'est imposé (déjà entre tes mains)
et donc de tenter de "corriger" les mauvais rendus

si tu peux changer avant vendredi de reference, c'est bien aussi que tu peux choisir autre chose ?

pourquoi donc ne pas tirer un trait sur le mauvais choix techno initial , et (re)partir sur des bases plus saines ?


vike229

la seule séance que j'ai c'est vendredi (2h) je pensais juste que le temps nous manquait , donc essayer d'etre le plus précis possible.
c'est vrai c'est pas le meilleur choix
le changement de technologie est impossible car tout notre systeme est fait pour un capteur infrarouge. Pour changer de référence il nous suffirai de déconnecter l'ancien et de reconnecter le nouveau .
Mais en 2 heures on peut toujours essayer, je suis désolé d'avoir oublié de mentionner l'autre capteur

3Sigma

Un exemple de code en bas de cette page:
http://dfrobot.com/wiki/index.php/Sharp_GP2Y0A21_Distance_Sensor_%2810-80cm%29_%28SKU:SEN0014%29

Je ne sais pas s'il existe sur terre un capteur destiné à fonctionner avec un Arduino qui n'a pas un exemple de code qui traine quelque part. C'est ce que tu dois chercher en premier quand tu as un problème de ce type.

Artouste

#14
Feb 08, 2014, 07:50 pm Last Edit: Feb 08, 2014, 08:15 pm by Artouste Reason: 1

la seule séance que j'ai c'est vendredi (2h) je pensais juste que le temps nous manquait , donc essayer d'etre le plus précis possible.
c'est vrai c'est pas le meilleur choix
le changement de technologie est impossible car tout notre systeme est fait pour un capteur infrarouge. Pour changer de référence il nous suffirai de déconnecter l'ancien et de reconnecter le nouveau .
Mais en 2 heures on peut toujours essayer, je suis désolé d'avoir oublié de mentionner l'autre capteur

pas de probleme , si tu en a aussi un de dispo et qu'il semble plus adapté à l'etendue de mesure.

2 heures c'est tres vite passé (et c'est surement 2 heures "theoriques" , mais en pratique ...  :smiley-mr-green:  )

perso , je crois qu'il faut oublier l'utilisation d'une Vref externe
et te concentrer sur du (pseudo) filtrage numerique

à ta place , je pense que je preparerais plusieurs programmes "verifié en compil OK" puisque tu ne dispose pas de la maquette.
en jouant essentiellement sur les parametres de filtrage/lissage.

expose déjà ici un programme faisant une moyenne simple sur X acquisitions (X = ~ 10 )
ça demontrera que tu aura bien compris le principe, et ensuite "on" affinera  :smiley-mr-green:

Go Up