Problem analog pin

j'utilise une broche de mon capteur "MicroEpsilon, OptoNCDT1320" qui delivre un courant de 4mA a 20mA en fonction de la distance. J'ai donc relie cette sortie avec une resistance de 250 ohm pour avoir une tension de 0-5V en sortie pour pouvoir lire cette donnee sur la broche analogique de la carte arduino.
Cependant les valeur que m'affiche le termial ne represente aucunement la distance lu par le capteur et je ne comprends pas pourquoi. Pouvez vous m'aider ?

Voici le code utilise :

/*
 * Programmation du capteur optoNCDT 1320 de Micro Epsilon avec la broche
 * blanche qui delivre un courrant de 4mA a 20mA
 */
const int analogOutPin = A0;

int outputValue = 0;
float VoltValue = 0;
float distance = 0;

unsigned long DELAY_TIME = 10000; // 10 sec
unsigned long delayStart = 0; // the time the delay started
bool delayRunning = false; // true if still waiting for delay to finish

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(A0,OUTPUT);

  // start delay
  delayStart = millis();
  delayRunning = true;
}

void loop() {
  // put your main code here, to run repeatedly:  
  outputValue = analogRead(analogOutPin);
  
  // print the results to the Serial Monitor:
  Serial.print("Value = ");
  Serial.println(outputValue);

  //Convertion data to distance
  VoltValue = ((outputValue*5)/1024);  // Volt  "Umax/10bytes"    tension = map(valeurLue, 0, 1023, 0, 5000);
 // Serial.println(VoltValue);     // tension = tension / 1000;
  distance = ((VoltValue*100)/5);    // Distance en mm
  //Serial.println(distance);
  Serial.println();

  // check if delay has timed out
  if (delayRunning && ((millis() - delayStart) >= DELAY_TIME)) {
    delayRunning = false; // finished delay -- single shot, once only
    //while(1);
  }
}

Bonjour,

Pour une lecture analogique, la broche doit être déclarée en input.

Je vois le petit problème suivant, qui m'intrigue :

déclarations:
const int analogOutPin = A0;

...
dans setup

  • pinMode(A0,OUTPUT);* // cette ligne, au mieux, ne sert à rien....

dans loop:

  • outputValue = analogRead(analogOutPin);*

J'aurais commencé par un soft bcp plus simple, consistant à scruter toutes les 10 secondes A0, et faire une règle de trois par map...

Zlika:
Bonjour,

Pour une lecture analogique, la broche doit être déclarée en input.

Non, INPUT et OUTPUT sont uniquement pour le mode digital.
En mode analogique on active la sous fonction "mesure analogique" de certaines entrées.
Cette activation est faite dans la fonction analogRead() qui se charge de la modification du contenu des registres.
L'entrée sur ces broches est routée du port digital vers le multiplexeur analogique.

const int analogOutPin = A0;

Utiliser un int (sur deux octets) est du gâchis , un seul octet suffit.
const uint8_t analogOutPin = A0
ou
const byte analogOutPin = A0

Autant pour moi.

Merci pour l'info :slight_smile:

Édit : ceci dit, je préfère une entrée en haute impédance à une sortie à 0 ou 5V pour le branchement d'un capteur :confused:
La broche est maintenue sur le circuit auxiliaire ?

Il y a beaucoup de gâchis dans ce code:
une conversion en volts, suivie d'une conversion en mm (et au passage, il multiplie puis divise par 5).
J'aurais fait une règle de 3 avec map
distance= map ( analogRead(A0,0, 1023, 0, MAXRANGE_EN_MM );
Je l'aurais affiché
et j'aurais attendu 10 secondes pour recommencer

La boucle loop aurait été bien plus petite 3-4 lignes) .
Par contre, je vois mal comment ce capteur peut être commandé.
Le peut il?
Est ce à l'arduino de le commander/configurer?

Merci beaucoup pour toutes les informations, j'en prends note :stuck_out_tongue:

Je veux simplement effectuer la lecture du capteur et non le commander.
Je veux par la suite faire deplacer ce capteur sur une distance de 10mm avec une vitesse de 1mm/s et faire la moyenne des valeurs pour me donner la hauteur moyenne du capteur au sol.

Je reviens vers vous si j'ai d'autres problemes. Merci

Avez vous in multimètre?
Parce que (à une règle de trois près), vous pourriez assez vite voir si votre capteur est bien -ou mal -configuré, et si les valeurs de l'arduino collent avec celles du multimètre (donc tester la connection , voire le bout de logiciel) ....