Table des matières:
- Fournitures
- Étape 1: La poursuite…
- Étape 2: Mise en route - Configuration Arduino-Breadboard
- Étape 3: câbler le LV-MaxSonar-EZ
- Étape 4: câbler le HC-SR04
- Étape 5: câblez le sélecteur d'options 'HC-SR04'
- Étape 6: faire en sorte que tout fonctionne…
- Étape 7: Mise en page du projet
- Étape 8: Introduction du code…
- Étape 9: Logiciel Arduino-Série…
- Étape 10: Coder - Configuration
- Étape 11: Code - Boucle
- Étape 12: Codez - Déclenchez le MaxSonar. Lire la valeur PW
- Étape 13: Code - Lire la valeur de série MaxSonar
- Étape 14: Code - Lire la valeur analogique MaxSonar
- Étape 15: Codez - Déclenchez et lisez le HC-SR04
- Étape 16: Code - Prise en charge du traceur série Arduino IDE
- Étape 17: Code - Débogage…
- Étape 18: Conclusion
- Étape 19: Autre connexion MaxSonar (en utilisant un en-tête 180°)
- Étape 20: Code Arduino
Vidéo: Comparaison des télémètres sonar LV-MaxSonar-EZ et HC-SR04 avec Arduino : 20 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:06
Je trouve que de nombreux projets (en particulier les robots) nécessitent, ou peuvent bénéficier, de mesurer la distance à un objet en temps réel. Les télémètres sonar sont relativement peu coûteux et peuvent être facilement interfacés à un microcontrôleur comme l'Arduino.
Ce Instructable compare deux appareils de télémètre sonar faciles à acquérir, montrant comment les connecter à l'Arduino, quel code est nécessaire pour lire les valeurs à partir d'eux et comment ils se « comparent » les uns aux autres dans différentes situations. À partir de là, j'espère que vous aurez un aperçu des avantages et des inconvénients des deux appareils qui vous aideront à utiliser l'appareil le plus approprié dans votre prochain projet.
Je voulais comparer l'appareil extrêmement populaire HC-SR04 (bug-eye) à l'appareil LV-MaxSonar-EZ moins courant pour voir quand je pourrais vouloir utiliser l'un plutôt que l'autre. Je voulais partager mes découvertes et ma configuration afin que vous puissiez expérimenter les deux et décider lequel utiliser dans votre prochain projet.
Pourquoi ces deux…
Pourquoi le HC-SR04 ? Le 'Bug-Eye' HC-SR04 est extrêmement populaire - pour plusieurs raisons:
- C'est peu coûteux - 2 $ ou moins s'il est acheté en gros
- Il est relativement facile de s'interfacer avec
- Beaucoup, beaucoup de projets l'utilisent - il est donc bien connu et bien compris
Pourquoi le LV-MaxSonar-EZ ?
- Il est très facile de s'interfacer avec
- Il a un facteur de forme bon/facile à intégrer dans un projet
- Il dispose de 5 versions qui répondent à différentes exigences de mesure (voir fiche technique)
- Il est (généralement) beaucoup plus précis et fiable que le HC-SR04
- C'est abordable - 15 $ à 20 $
De plus, j'espère que vous trouverez des morceaux dans le code Arduino que j'ai écrit pour la comparaison utile dans vos projets, même au-delà des applications de télémètre.
Hypothèses:
- Vous connaissez Arduino et l'IDE Arduino
- L'IDE Arduino est installé et fonctionne sur votre machine de développement de préférence (PC/Mac/Linux)
- Vous disposez d'une connexion de l'IDE Arduino à votre Arduino pour télécharger et exécuter des programmes et communiquer
Il existe des Instructables et d'autres ressources pour vous aider avec cela si nécessaire.
Fournitures
- Télémètre 'Bug-Eye' HC-SR04
- LV-MaxSonar-EZ (0, 1, 2, 3, 4 - j'utilise un '1', mais toutes les versions ont la même interface)
- Arduino UNO
- Planche à pain sans soudure
- En-tête de broche - 7 broches à 90° (pour l'appareil MaxSonar, voir * ci-dessous pour l'utilisation de 180°)
- Cavalier de câble plat - 5 fils, mâle-mâle
- Cavalier de câble plat - 2 fils, mâle-mâle
- Cavalier - mâle-mâle
- Fil de raccordement - rouge et noir (pour l'alimentation de l'Arduino à la planche à pain et de la planche à pain aux appareils)
- Ordinateur avec Arduino IDE et câble USB pour se connecter à l'Arduino UNO
* Le MaxSonar n'est pas livré avec un en-tête attaché, vous pouvez donc utiliser un en-tête le plus approprié pour votre projet. Pour ce Instructable, j'ai utilisé un en-tête de 90 ° pour le rendre facile à brancher sur la planche à pain. Dans certains projets, un en-tête à 180° (droit) peut être préférable. J'inclus une photo pour montrer comment brancher cela afin que vous n'ayez pas à les changer. Si vous préférez utiliser un en-tête à 180 °, vous aurez besoin d'un cavalier de câble plat mâle-femelle supplémentaire à 7 fils pour vous connecter comme le montre ma photo.
Référentiel Git Hub: fichiers de projet
Étape 1: La poursuite…
Avant d'entrer dans les détails sur la façon de brancher les choses afin que vous puissiez faire vos propres expériences avec ces deux appareils fantastiques, je voulais décrire quelques choses avec lesquelles j'espère que ce Instructable vous aidera.
Parce que l'appareil MaxSonar est moins utilisé et moins compris par rapport à l'appareil HC-SR04, je voulais montrer:
- Comment connecter l'appareil MaxSonar à un micro-contrôleur (dans ce cas un Arduino)
- Comment prendre des mesures à partir des différentes sorties de l'appareil MaxSonar
- Comparez l'interfaçage de l'appareil MaxSonar avec l'appareil HC-SR04
- Testez la capacité de mesurer la distance d'objets avec différentes surfaces
- Pourquoi vous pourriez choisir un appareil plutôt qu'un autre (ou utiliser les deux en tandem)
J'espère que ce Instructable vous aide dans cette poursuite…
Étape 2: Mise en route - Configuration Arduino-Breadboard
Si vous avez fait du prototypage avec Arduino, vous avez probablement déjà une configuration Arduino-Breadboard avec laquelle vous êtes à l'aise. Si c'est le cas, je suis convaincu que vous pouvez l'utiliser pour ce Instructable. Sinon, voici comment j'ai configuré le mien - n'hésitez pas à le copier pour ce projet et les futurs.
- J'attache l'Arduino UNO et une petite planche à pain sans fil à un morceau de plastique de 3-3/8" x 4-3/4" (8,6 x 12,0 cm) avec des pieds en caoutchouc en bas.
- J'utilise un fil de raccordement rouge et noir 22-AWG pour connecter +5V et GND de l'Arduino à la bande de distribution d'alimentation de la maquette
- J'inclus un condensateur au tantale de 10µF sur la bande de distribution d'alimentation-masse pour aider à réduire le bruit d'alimentation (mais ce projet ne l'exige pas)
Cela fournit une belle plate-forme avec laquelle il est facile de prototyper.
Étape 3: câbler le LV-MaxSonar-EZ
Avec une embase à 90° soudée sur l'appareil MaxSonar, il est facile de le brancher sur la maquette. Le câble plat à 5 broches connecte ensuite le MaxSonar à l'Arduino comme indiqué sur le schéma. En plus du câble plat, j'utilise de courts morceaux de fil de raccordement rouge et noir du rail de distribution d'alimentation pour alimenter l'appareil.
Câblage:
MaxSonar | Arduino | Couleur |
---|---|---|
1 (N. B.) | Puissance-GND | Jaune |
2 (PW) | Numérique-5 | Vert |
3 (AN) | Analogique-0 | Bleu |
4 (réception) | Numérique-3 | Violet |
5 (Émission) | Numérique-2 | Gris |
6 (+5) | +5 BB-PWR Rail | rouge |
7 (GND) | GND BB-PWR Rail | Le noir |
Noter:
Ne laissez pas le nombre de connexions utilisées dans ce Instructable vous empêcher d'envisager le MaxSonar pour votre projet. Ce Instructable utilise toutes les options de l'interface MaxSonar pour illustrer leur fonctionnement et les comparer les unes aux autres et à l'appareil HC-SR04. Pour une utilisation donnée (en utilisant l'une des options d'interface), un projet utilisera généralement une ou deux des broches de l'interface (plus l'alimentation et la masse).
Étape 4: câbler le HC-SR04
Le HC-SR04 est généralement livré avec un en-tête à 90° déjà fixé, il est donc facile de le brancher sur la maquette. Le câble plat à 2 broches connecte ensuite le HC-SR04 à l'Arduino comme indiqué sur le schéma. En plus du câble plat, j'utilise de courts morceaux de fil de raccordement rouge et noir du rail de distribution d'alimentation pour alimenter l'appareil.
HC-SR04 | Arduino | Couleur |
---|---|---|
1 (VCC) | +5 BB-PWR Rail | rouge |
2 (TRIG) | Numérique-6 | Jaune |
3 (ÉCHO) | Numérique-7 | Orange |
4 (GND) | GND BB-PWR Rail | Le noir |
Étape 5: câblez le sélecteur d'options 'HC-SR04'
Lorsque j'ai commencé ce projet, mon intention était simplement de tester les différentes options d'interface de l'appareil MaxSonar. Après l'avoir mis en place et opérationnel, j'ai décidé qu'il serait bien de le comparer à l'appareil omniprésent HC-SR04 (bugeye). Cependant, je voulais pouvoir exécuter/tester sans qu'il soit inclus, j'ai donc ajouté une option/test dans le code.
Le code vérifie une broche d'entrée pour voir si le dispositif HC-SR04 doit être inclus dans la lecture et la sortie de mesure.
Dans le diagramme, cela est montré comme un interrupteur, mais sur la planche à pain, j'utilise simplement un fil de liaison (comme on le voit sur les photos). Si le fil est connecté à GND, le HC-SR04 sera inclus dans les mesures. Le code « tire vers le haut » (rend l'entrée haute/vraie) dans l'Arduino, de sorte que s'il n'est pas tiré bas (connecté à GND), le HC-SR04 ne sera pas mesuré.
Bien que ce Instructable se soit transformé en une comparaison des deux appareils, j'ai décidé de laisser cela en place pour illustrer comment vous pourriez inclure/exclure différents appareils/options dans votre projet.
Planche à pain | Arduino | Couleur |
---|---|---|
GND BB-PWR Rail | Numérique-12 | blanche |
Étape 6: faire en sorte que tout fonctionne…
Maintenant que tout est branché, il est temps de faire fonctionner les choses !
Comme mentionné dans 'Hypothèses' - je ne vais pas expliquer comment fonctionne l'IDE Arduino ou comment programmer un Arduino (en détail).
Les sections suivantes décomposent le code Arduino inclus dans ce projet.
Veuillez décompresser l'archive complète dans un emplacement que vous utilisez pour votre développement Arduino. Chargez le code `MaxSonar-outputs.ino` dans votre IDE Arduino et commençons !
Étape 7: Mise en page du projet
Le projet contient des informations sur l'appareil LV-MaxSonar-EZ, le schéma de circuit, un fichier README et le code Arduino. Le schéma de circuit est au format Fritzing ainsi qu'une image PNG. Le README est au format Markdown.
Étape 8: Introduction du code…
Dans ce Instructable, je ne peux pas passer en revue tous les aspects du code. Je couvre certains des détails de haut niveau. Je vous encourage à lire le commentaire de niveau supérieur dans le code et à creuser dans les méthodes.
Les commentaires fournissent beaucoup d'informations que je ne répéterai pas ici.
Il y a quelques choses que je veux souligner dans le code de « configuration »…
- Les instructions `_DEBUG_OUTPUT` - variable et #define
- Définitions des "broches" Arduino utilisées pour l'interface
- Définitions des facteurs de conversion utilisés dans les calculs
Le débogage est utilisé dans tout le code, et je vais montrer comment il peut être activé/désactivé dynamiquement.
Les "définitions" sont utilisées pour les broches et les conversions Arduino afin de faciliter l'utilisation de ce code dans d'autres projets.
Débogage…
La section « Débogage » définit une variable et des macros qui facilitent l'inclusion d'informations de débogage dans la sortie série à la demande.
La variable booléenne `_DEBUG_OUTPUT` est définie sur false dans le code (peut être définie sur true) et est utilisée comme test dans les macros `DB_PRINT…`. Il peut être modifié dynamiquement dans le code (comme vu dans la méthode `setDebugOutputMode`).
Mondials…
Après les définitions, le code crée et initialise quelques variables globales et objets.
- SoftwareSerial (voir la section suivante)
- _loopCount - Utilisé pour générer un en-tête toutes les 'n' lignes
- _inputBuffer - Utilisé pour collecter l'entrée série/terminal pour traiter les options (débogage activé/désactivé)
Étape 9: Logiciel Arduino-Série…
L'une des options de l'interface MaxSonar est un flux de données série. Cependant, l'Arduino UNO ne fournit qu'une seule connexion de données série, et qui est utilisée/partagée avec le port USB pour communiquer avec l'IDE Arduino (ordinateur hôte).
Heureusement, il existe un composant de bibliothèque inclus avec l'IDE Arduino qui utilise une paire de broches d'E/S numériques Arduino pour implémenter une interface d'E/S série. Étant donné que l'interface série MaxSonar utilise 9600 BAUD, cette interface 'logicielle' est parfaitement capable de gérer la communication.
Pour ceux qui utilisent un Arduino-Mega (ou un autre appareil doté de plusieurs ports série HW), n'hésitez pas à ajuster le code pour utiliser un port série physique et éliminer le besoin du SW-Serial.
La méthode `setup` initialise l'interface `SoftwareSerial` à utiliser avec le périphérique MaxSonar. Seule la réception (RX) est nécessaire. L'interface est « inversée » pour correspondre à la sortie du MaxSonar.
Étape 10: Coder - Configuration
Comme décrit ci-dessus, la méthode `setup` initialise l'interface `SoftwareSerial`, ainsi que l'interface série physique. Il configure les broches d'E/S Arduino et envoie un en-tête.
Étape 11: Code - Boucle
Le code « boucle » parcourt les éléments suivants:
- Sortir un en-tête (utilisé pour le débogage et le traceur)
- Déclenchez le MaxSonar pour prendre une mesure
- Lire la valeur MaxSonar Pulse-Width
- Lire la valeur MaxSonar Serial-Data
- Lire la valeur analogique MaxSonar
-
Cochez l'option 'HC-SR04' et, si elle est activée:
Déclencher et lire le dispositif HC-SR04
- Sortez les données dans un format délimité par des tabulations qui peut être utilisé par le traceur série
- Attendez que suffisamment de temps se soit écoulé pour qu'une autre mesure puisse être prise
Étape 12: Codez - Déclenchez le MaxSonar. Lire la valeur PW
Le MaxSonar a deux modes: « déclenché » et « continu »
Ce Instructable utilise le mode « déclenché », mais de nombreux projets peuvent bénéficier de l'utilisation du mode « continu » (voir la fiche technique).
Lors de l'utilisation du mode "déclenché", la première sortie valide provient de la sortie Pulse-Width (PW). Après cela, le reste des sorties est valide.
Le `tiggerAndReadDistanceFromPulse` émet une impulsion sur la broche de déclenchement sur l'appareil MaxSonar et lit la valeur de distance de largeur d'impulsion résultante
Notez que, contrairement à de nombreux autres appareils de sonar, le MaxSonar gère la conversion aller-retour, de sorte que la distance lue est la distance jusqu'à la cible.
Cette méthode retarde également suffisamment longtemps pour que les autres sorties de l'appareil soient valides (série, analogique).
Étape 13: Code - Lire la valeur de série MaxSonar
Après le déclenchement du MaxSonar (ou en mode 'continu'), si l'option de sortie série est activée (via le contrôle 'BW - Pin-1'), un flux de données série sous la forme "R nnn" est envoyé, suivi par un RETOUR CHARIOT '\r'. Le ' nnn ' est la valeur en pouces de l'objet.
La méthode `readDistanceFromSerial` lit les données série (à partir du port série logiciel) et convertit la valeur ' nnn ' en décimal. Il inclut un délai d'attente de sécurité, juste au cas où une valeur série ne serait pas reçue.
Étape 14: Code - Lire la valeur analogique MaxSonar
Le port analogique MaxSonar fournit en permanence une tension de sortie proportionnelle à la dernière distance mesurée. Cette valeur peut être lue à tout moment après l'initialisation de l'appareil. La valeur est mise à jour dans les 50 mS suivant la dernière lecture de distance (mode déclenché ou continu).
La valeur est (Vcc/512) par pouce. Ainsi, avec un Vcc de l'Arduino de 5 volts, la valeur sera d'environ 9,8 mV/in. La méthode "readDistanceFromAnalog" lit la valeur de l'entrée analogique Arduino et la convertit en une valeur "pouce".
Étape 15: Codez - Déclenchez et lisez le HC-SR04
Bien qu'il existe des bibliothèques pour lire le HC-SR04, j'ai trouvé que certaines d'entre elles n'étaient pas fiables avec divers appareils avec lesquels j'ai testé. J'ai trouvé le code que j'ai inclus dans la méthode `sr04ReadDistance` simple et plus fiable (autant que le périphérique HC-SR04 peu coûteux peut l'être).
Cette méthode définit puis déclenche le dispositif HC-SR04, puis attend pour mesurer la largeur d'impulsion de retour. La mesure de la largeur d'impulsion comprend un délai d'attente pour traiter le problème du HC-SR04 d'une très longue durée d'impulsion lorsqu'il ne peut pas trouver de cible. Une largeur d'impulsion plus longue qu'une distance cible d'environ 10 pieds est supposée n'être aucun objet ou un objet qui ne peut pas être reconnu. Si le délai d'attente est atteint, une valeur '0' est renvoyée comme distance. Cette 'distance' (largeur d'impulsion) peut être ajustée à l'aide des valeurs #define.
La largeur d'impulsion est convertie en une distance aller-retour avant d'être renvoyée en tant que distance à l'objet.
Étape 16: Code - Prise en charge du traceur série Arduino IDE
Maintenant place à la sortie !
La méthode « boucle » déclenche la collecte de la mesure de distance des deux appareils - mais qu'en faisons-nous ?
Eh bien, bien sûr, nous l'enverrons pour qu'il puisse être consulté sur la console - mais nous en voulons plus !
L'IDE Arduino fournit également l'interface Serial Plotter. Nous l'utiliserons pour fournir un graphique en temps réel de la distance à notre objet à partir des sorties de nos deux appareils.
Le Serial Plotter accepte un en-tête qui contient des étiquettes de valeur, puis plusieurs lignes de valeurs délimitées à tracer sous forme de graphique. Si les valeurs sont sorties régulièrement (une fois toutes les « tant de secondes »), le graphique fournit une visualisation de la distance à l'objet au fil du temps.
La méthode « boucle » génère les trois valeurs du MaxSonar et la valeur du HC-SR04 dans un format séparé par des tabulations qui peut être utilisé avec le traceur série. Une fois toutes les 20 lignes, il affiche l'en-tête (juste au cas où le traceur série serait activé en cours de diffusion).
Cela permet ainsi de visualiser la distance à l'obstacle et aussi de voir la différence des valeurs renvoyées par les deux appareils.
Étape 17: Code - Débogage…
Le débogage est une nécessité. Comment pouvez-vous détecter un problème lorsque quelque chose ne fonctionne pas comme prévu ?
Une première ligne de compréhension est souvent des sorties de texte «simples» qui peuvent indiquer ce qui se passe. Ceux-ci peuvent être ajoutés au code quand et où cela est nécessaire pour localiser un problème, puis supprimés une fois le problème résolu. Cependant, l'ajout et la suppression du code prennent du temps et, en soi, peuvent entraîner d'autres problèmes. Parfois, il vaut mieux pouvoir l'activer et le désactiver dynamiquement tout en laissant le code source seul.
Dans ce Instructable, j'ai inclus un mécanisme pour activer et désactiver les instructions d'impression (sortie série) de débogage dynamiquement à partir de l'entrée lue à partir du moniteur série Arduino IDE (dans une prochaine version, le traceur série devrait également fournir cette entrée).
Le booléen `_DEBUG_OUTPUT` est utilisé dans un certain nombre de méthodes d'impression #define qui peuvent être utilisées dans le code. La valeur de la variable _DEBUG_OUTPUT permet d'activer ou non l'impression (envoi de la sortie). La valeur peut être modifiée dynamiquement dans le code, comme le fait la méthode `setDebugOutputMode`.
La méthode `setDebugOutputMode` est appelée à partir de la `boucle` en fonction de l'entrée reçue de l'entrée série. L'entrée est analysée pour voir si elle correspond à "debug on/off | true/false" pour activer/désactiver le mode de débogage.
Étape 18: Conclusion
J'espère que cette configuration matérielle simple et l'exemple de code peuvent vous aider à comprendre les différences entre les appareils HC-SR04 et LV-MaxSonar-EZ. Les deux sont très faciles à utiliser et je pense que chacun a ses avantages. Savoir quand utiliser l'un plutôt que l'autre peut être déterminant pour la réussite d'un projet.
BTW - J'ai fait allusion à un moyen très facile à utiliser pour mesurer avec précision la distance à un objet à l'aide du LV-MaxSonar-EZ… Vous pouvez utiliser la sortie analogique (un fil) et le mode de mesure continue pour lire la distance en cas de besoin en utilisant le simple code dans `readDistanceFromAnalog` directement à partir de l'entrée analogique Arduino. Un fil et (condensé) une ligne de code !
Étape 19: Autre connexion MaxSonar (en utilisant un en-tête 180°)
Comme je l'ai mentionné, le MaxSonar n'est pas livré avec un en-tête connecté. Ainsi, vous pouvez utiliser la connexion la plus appropriée pour votre projet. Dans certains cas, un collecteur à 180° (droit) peut être plus approprié. Si tel est le cas, je voulais montrer rapidement comment vous pouvez l'utiliser avec ce Instructable. Cette illustration montre un MaxSonar avec un en-tête droit connecté à la planche à pain avec un câble plat mâle-femelle, puis connecté à l'Arduino comme décrit dans le reste de l'article.
Étape 20: Code Arduino
Le code Arduino se trouve dans le dossier 'MaxSonar-outputs' du projet dans Sonar Range-Finder Comparison
Conseillé:
E-dés - Arduino Die/dés 1 à 6 dés + D4, D5, D8, D10, D12, D20, D24 et D30 : 6 étapes (avec photos)
E-dice - Arduino Die/dice 1 à 6 Dice + D4, D5, D8, D10, D12, D20, D24 et D30 : Il s'agit d'un projet arduino simple pour faire un dé électronique. Il est possible de choisir entre 1 à 6 dés ou 1 sur 8 dés spéciaux. Le choix se fait par simple rotation d'un encodeur rotatif. Voici les caractéristiques : 1 dé : montrant les gros points 2 à 6 dés : montrant les points
Bricolage d'une sirène de raid aérien avec des résistances, des condensateurs et des transistors : 6 étapes (avec photos)
Bricolage d'une sirène Air Raid avec des résistances, des condensateurs et des transistors: Ce projet de bricolage Air Raid Siren abordable convient à la recherche d'un circuit d'auto-oscillation composé uniquement de résistances, de condensateurs et de transistors qui peuvent enrichir vos connaissances. Et il convient à l'éducation à la défense nationale pour les enfants, en
AWS et IBM : une comparaison des services IoT : 4 étapes
AWS et IBM : une comparaison des services IoT : nous comparons aujourd'hui deux stacks qui permettent de développer des applications IoT sous l'angle de différentes offres de services
Comment démonter un ordinateur avec des étapes et des images faciles : 13 étapes (avec des images)
Comment démonter un ordinateur avec des étapes et des images faciles : Il s'agit d'instructions sur la façon de démonter un PC. La plupart des composants de base sont modulaires et facilement démontables. Cependant, il est important que vous soyez organisé à ce sujet. Cela vous aidera à éviter de perdre des pièces, et aussi à faire le remontage ea
Comparaison entre Micro:bit et Arduino : 6 étapes
Comparaison entre Micro:bit et Arduino : quelle est la carte de développement la plus populaire parmi les fabricants récemment ? Bien sûr, il doit s'agir d'une carte micro:bit. Sous la coopération de sociétés géantes de la technique telles que BBC, Microsoft, Samsung et NXP, la carte micro:bit est dotée d'un halo de classe noble