Mon ultrason me donne tjrs 0

Bonjour, j'ai programmé mon Arduino Nano pour utiliser un ultrason HC-SR04. J'ai beau mettre divers programmes qui sont toujours bien téléversés, la réponse de mon ultrason reste toujours à zéro. Merci de votre aide.
voici le dernier programme


#define TRIGGER_PIN 9
#define ECHO_PIN 8
#define MAX_DISTANCE 200

// NewPing setup of pins and maximum distance
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); 
 
void setup() {
   Serial.begin(9600);
}
 
void loop() {
   delay(500);
   unsigned int distance = sonar.ping_cm();
   Serial.print(distance);
   Serial.println("cm");
}

pour info ma carte Arduino fonctionne bien avec un LCD utilisé seul. Je ne l'ai pas encore associé à l'ultrason.

lire les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

Merci d'éditer (petit crayon sous le post) votre post pour rajouter les balises de de code :

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l'icône </> dans la barre d'outils pour indiquer que c'est du code

(Assurez vous aussi d'indenter le code correctement dans l'IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

une fois cela fait, postez un dessin de votre circuit et éventuellement une photo de votre montage

@dandri72

  1. Tu mets OBLIGATOIREMENT le code entre balises comme demandé par J-M-L.
    Tel que présenté, personne ne le lira parce que c'est illisible et que nous ne sommes que des bénévoles.
    Donc si veux de l'aide, tu sais ce qu'il te reste à faire.

  2. Ce produit, qui n'est vraiment pas terrible, mais qui a le mérite d'exister, s'utilisait beaucoup plus simplement il y a quelques années.
    Je ne comprends pas le recourt à une bibliothèque pour l'utiliser.
    C'est réellement utiliser une masse d'une tonne pour enfoncer une punaise.

Pour commencer il faut prendre le temps de comprendre son fonctionnement.
Un site qui l'explique bien, mais en anglais :

Avec un navigateur comme Chrome (ou Chromium la version open source) tu peux avoir la traduction automatique en français.
Ce site utilise une bibliothèque Newping : tu oublies le passage où il en parle.
Tu te contentes de bien comprendre le fonctionnement :

  • envoi d'une salve
  • réception de la salve
  • mesure de l'impulsion de sortie.
  • Délai minimum entre deux mesures : dans ce HC-SR04 il y a un petit microcontrôleur, on ne fait pas ce que l'on veut.

Programme :
J'ai retrouvé l'exemple initial.
Tu noteras au passage l'amélioration dans la présentation du code par rapport à ce que tu as publié.
Tu noteras que le programme sans bibliothèque est très simple.
La bibliothèque a été introduite pour gérer de nombreux microcontrôleur autre que les avr Atmel/Microchip.
Comme la nano utilise un micro avr Atmel/Microchip (atmega328p) la fonction pulseIn() est parfaitement fonctionnelle et la compréhension s'en trouve améliorée.

#define trigPin 3 
#define echoPin 2

long distance;
long duration; 

void setup() { 
  Serial.begin(115200); 
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 
  } 
  
  void loop() { 
    distance=readUltrasonicSensor();
    if (distance >= 400 || distance <= 0){ 
      Serial.println("Unknown value"); } 
    else { 
      Serial.print(distance); 
      Serial.println(" cm"); 
      } 
      delay(500);// delay in milliseconds 
 } 

long readUltrasonicSensor(){ 
  // Création d'une impulsion de commande de durée 10 µs   Send 10µs pulse 
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10); 
  digitalWrite(trigPin, LOW); 

  // Mesure de la durée du signla de retours à l'aide de la fonction pulseIn()
  //Read pulse duration 
  duration = pulseIn(echoPin, HIGH); 
  Serial.println(duration);  // ce n'est pas indispensable
 //  => utile pendant la vérification du bon fonctionnement du programme
//Convert and return value 
  return duration/ 58;   // 58 est le résultat d'un calcul basé sur la vitesse de propagation du son
}

Attention :
Il existe des modèles à 4 pins et d'autre à 3 pins.
Dans un modèle à 3 pins, les fonctions trigger et mesure sont partagées par la même pin qu'il faut d'abord mettre en mode Output pour envoyer le trigger puis en mode input pour récupérer le signal.

=> La présentation exacte du matériel avec des liens vers la documentation ou le site marchand nous est indispensable.

Le temps représente un aller et retour, il faut donc le diviser par 2 pour avoir la distance à l'objet.
La vitesse du son est de 350 m par seconde.

Il y a des erreurs dans les performances du site :
Le cône de mesure ne fait pas 15°.

  1. il s'agit du demi-cône, il faut multiplier le chiffre annoncé par 2 pour avoir le véritable angle.
  2. les transducteurs montés sont du bas de gamme et font plutôt 30° ce qui correspond à un cône effectif de 60 °.
  3. distance max 4m : c'est optimiste compte tenu des réflexions parasites.

Note : j'utilise Serial.begin(115200) et non pas 9600 qui peut ralentir le programme.
Le moniteur de l'IDE doit aussi être réglé sur 115200.

Bonsoir, désolé j’ai pas fait attention à la présentation, j’espère que j’ai effectué la bonne. Débutant, merci pour votre indulgence.
Cordialement

Merci beaucoup 68jts, je vais essayer le code que tu me communiques.

Pour t'entrainer,essais ensuite d'allumer une led quand la distance que tu choisis est validé...
Bon courage

Je viens d'essayer ton programme qui se charge bien, mais la réponse est "valeur inconnue", je pense que mon ultrason n'est pas fonctionnel. Pour un premier essai je l'ai acheté chez AliExpress, mais ce n'est pas trop fiable.
Merci pour votre aide, je vais en acheter un autre chez un autre fournisseur sauf si vous avez une idée de ce qui se passe. L'Arduino fonctionne bien avec le LCD donc je présume que c'est bien l'ultrason.
Bien cordialement

C'est aussi fiable que si tu l'achètes 10 fois plus cher, il sortira des mêmes chaines.
T'es-tu posé la question : quelle bêtise j'ai bien pu faire, involontairement bien sûr, mais le maillon faible est le plus souvent entre la chaise et le clavier.
40 ans d'électronique professionnelle et je n'accuse jamais le matériel, je m'accuse moi.

Autre point :

Je n'ai pas vu ta réponse : 3 pins ou 4 pins ?
Tu poses une question : on te répond.
On pose une question et tu ne réponds pas

Mes propos ne sont absolument pas agressifs : c'est le fonctionnement de ce forum.
Si nous n'avons pas les renseignements et les réponses, vu que l'on n'a pas de boule de cristal, on ne peut rien faire.
S'il y a un message d'accueil avec une marche à suivre, c'est qu'il existe de bonnes raisons.

Dernier point : ce n'est pas mon code, c'est le code exemple sur ce produit que j'ai retrouvé sur internet. J'y ai juste ajouté des commentaires.

Mais tu as commencé au berceau ? :sauropod:

J'ai bientôt l'age limite pour lire Tintin :grinning:

Bonjour,
Nous sommes au moins deux

Bonjour, excuse moi de ne pas avoir répondu à ta question, Il s'agit d'un modèle avec 4 pins. Merci de me conforter dans mon achat, je ne mets pas en doute le matériel en premier abord, mais je n'arrive pas à le faire fonctionner correctement alors qu'avec le lcd je n'ai aucun problème. J'essaie de me rendre à l'évidence. Je n'ai pas ton expérience bien que notre âge ne doit pas être très différent. Je ne prends pas ta réponse comme agressive je découvre le fonctionnement du forum et je te remercie de prendre le temps de me repondre

Bien cordialement

Là pour l'instant ce ne sera pas possible de faire des tests avec un appareil de mesure.

Néanmoins, je te conseille d'acheter un analyseur logique.
Un clone de Saleae à moins de 10 € rend de très grands services pour comprendre ce qu'il passe.
image
Un multimètre, en grande surface de bricolage, toujours à moins de 10 €, est lui absolument indispensable.
Le premier réflexe est de mesurer les tensions d'alimentation.
Sans le composant connecté et avec le composant connecté pour détecter des comportements anormaux (généralement dus à une erreur de câblage).

Vu toutes les bêtises de branchement que j'ai fait, je peux dire qu'un composant alimenté à l'envers ne meurt généralement pas, sauf s'il reste alimenté à l'envers pendant des heures, d'où l'importance des vérifications dès la mise sous tension.

Astuce : commander par deux exemplaires ne revient pas obligatoire le double.

Ok, je vais voir pour acheter un analyseur logique, je possède déjà un multimètre un Kaiweets KM601 qui devrait faire l'affaire. Merci encore pour tes conseils.

Un analyseur logique n'est pas un oscillo.
Il montre des signaux idéalisés et une acquisition non répétitive, on parle de mono coup.
On peut, on doit c'est mieux, sélectionner le signal qui va déclencher l'analyse, on parle de trigger.
Cela permet d'être au plus près des signaux à vérifier.

Une astuce que j'utilise est d'utiliser une entrée/sortie pour déclencher ce signal de "trigger".
Simplement :
digitalWrite(trigger, HIGH);
digitalWrite(trigger, LOW);
suffit, les fonction digitalWrite étant suffisamment lente pour créer un signal carré que l'analyseur est capable de détecter.

1 Like

Petite note au passage.
Je prépare un robot sumo en ce moment-même. Newping a des avantages mais des inconvénients. A courte distance (<100mm) Newping déconne royalement. Un bout de code fait maison est au moins aussi efficace.

OK MERCI, j'attends l'analyseur qui j'ai commandé hier chez Aliexpress, ça risque de prendre un peut de temps, je reviendrai vers toi dès que je j'aurai fait le teste.
Merci encore de ton aide
Bien cordialement

Je n'en ai pas encore parlé pour éviter la confusion et la fuite en avant, mais vu que tu es maintenant un débutant déjà bien averti, je pense que tu devrais regarder du côté des capteurs optiques.

Je pense au VL53L0 et surtout au VL53L1 de STMicroelectronic

Avantages :
ils sont bien plus petit
Ils portent jusqu'à 4 m. Information à prendre avec des pincettes, mais pas plus qu'avec un HC-SR04.
Ils ont un cône d'émission plus étroit, ce qui permet de discerner des objets plus petits.
Le temps de vol optique se fait à la vitesse de la lumière, ce qui permet d'avoir un rythme de mesure plus rapide.

Je suis en train de tester un VL53L1.
Dans la doc il y a une procédure de calibration.
J'ai d'abord fait des tests "direct en sortie de l'emballage" jusqu'à 2m c'est tout à fait acceptable sans rien calibrer.

Évidement j'ai appliqué la procédure de calibration, sur un seul exemplaire pour le moment.

  • Offset : correction de 11 mm => autrement dit que dalle.
  • Diaphonie : aucune correction à apporter.

Le VL53L1 permet de déterminer le sens du passage : sa zone de réception peux être séparée en deux. Avec des interruptions il est possible de déterminer la zone qui a été activée en premier.

Je regarde cette possibilité, mais je commence à avoir mal au neurone rescapé, neurone sans s. :rofl:

Sécurité avec laser.

  • Les lasers sont en classe 1. Classe 1 signifie que tu peux fixer le rayon sans danger pour les yeux.
  • Les lasers émettent dans le proche infrarouge (0,9 µm)
  • Ils restent en classe 1 à condition de ne dépasser pas un temps de mesure de 1s
    => le temps minimum pour une mesure est 20 ms, avec un minimum de 5 ms entre deux mesures. Un temps de mesure de 1 s ce doit être pour des distances extrêmes ou des conditions d'éclairage difficiles.

Les bibliothèques.
Je les ai parcourues avant de partir bille en tête avec la première trouvée

La mère des bibliothèques est celle de STMicro : c'est une API.
Elle est la base de toutes les autres, les VL53Lx possèdent un microcontrôleur interne. À mon goût, elle n'est pas trop simple d'utilisation, je vois trop d'usage de pointeurs (qui n'en sont peut-être pas, le neurone a du mal à répondre)

Reste Polulu, Adafruit, Sparkfun.
J'ai jeté mon dévolu sur Sparkfun qui est la plus proche de la structure de l'API STMicro tout en restant simple d'emploi. Le neurone ne se pose plus de question : pas de pointeur.
Cerise sur le gâteau : les nombreux exemples qui traitent différents cas d'utilisation.

Adafruit m'a paru bien compliquée et n'offre qu'un exemple bien trop basique.
Polulu m'a fait dire bof.

image

:+1: super merci, j'ai vu que les commentaires sont plus positifs qu'avec l'ultrason qui est moins rapide.
je vais essayer avec le VL53L0,
Bonne journée
bien cordialement

Je ne conseille pas la fuite en avant.
Le HC-SR04 doit fonctionner, si ce n'est pas le cas avant de passer à autre chose, il faut chercher à comprendre pourquoi, c'est ma façon de travailler.

Ensuite je n'ai pas conseillé le VL53L0 mais le VL53L1
Le VL53L0 permet de mesurer jusqu'à 2 m le VL53L1 jusqu'à 4 m .
Le VL53L1 est vendu équipé d'un capot pour filtrer la lumière visible, le L0 ne l'est pas.
Le L1 est ainsi plus apte à faire des mesures en milieu "lumineux" perturbé.
Note : la correction de diaphonie consiste à compenser les réflexions parasites dues au capot. Le L1 étant directement équipé d'un capot filtre, je pense que la correction se fait en usine et que c'est la raison pour laquelle j'ai trouvé une compensation nulle.

L'API du VL53L0 est différente de celle du VL53L1 .
Dis-toi bien qu'une fois que tu auras digéré une API tu ne voudras pas recommencer avec celle d'un autre modèle.

Ce produit est supérieur au HC-SR04 mais sa programmation sera plus compliquée ⇾ toujours le même dilemme : le beurre ou l'argent du beurre, mais jamais les deux en même temps.

En PJ un document qui n'est pas un fichier compilable, c'est une anti-sèche. je l'ai écrit à partir du fichier cpp Sparkfun en rangeant les méthodes dans un ordre qui correspond à ma façon de fonctionner.
La datasheet peut être téléchargée.
Elle peut être traduite en français en utilisant gogole translator.
Le fichier traduit fait plus de 2 Mega je ne le mets pas sur le site du forum

Lit bien avant d'acheter, et surtout fait comme tu le sens.
68tjs_VL53L1X.pdf (204,1 Ko)