Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes |
materiels:capteurs:distance:distus [2024/05/02 19:31] – [2.3 Transducteur à ultrasons HC-SR04P] phil | materiels:capteurs:distance:distus [2024/06/25 18:30] – [2.3 HC-SR04P (GPIO - I2C - UART)] phil |
---|
===== Capteurs - Distance - Ultrasons ===== | ===== Capteurs - Distance - Ultrasons ===== |
| |
[Mise à jour le 7/7/2022] | [Mise à jour le 3/5/2024] |
| |
* **Lectures connexes** | * **Lectures connexes** |
* <html><a href="http://guide.directindustry.com/fr/bien-choisir-un-capteur-de-proximite/" target="_blank">Bien choisir un capteur de proximité</a></html> | * <html><a href="http://guide.directindustry.com/fr/bien-choisir-un-capteur-de-proximite/" target="_blank">Bien choisir un capteur de proximité</a></html> |
* <html><a href="https://www.eeca.eu/meilleur-capteur-ultrason/" target="_blank">Comment choisir le meilleur capteur ultrason</a></html> | * <html><a href="https://www.eeca.eu/meilleur-capteur-ultrason/" target="_blank">Comment choisir le meilleur capteur à ultrason</a></html> |
* Vidéo - <html><a href="https://www.youtube.com/watch?time_continue=143&v=Ht4lavMyy3E&feature=emb_logo" target="_blank">Exemples d'applications</a></html> | * Vidéo - <html><a href="https://www.youtube.com/watch?time_continue=143&v=Ht4lavMyy3E&feature=emb_logo" target="_blank">Exemples d'applications</a></html> |
| |
Les ultrasons sont utilisés dans l'industrie ainsi que dans le domaine médical. <html><a href="https://fr.wikipedia.org/wiki/Ultrason" target="_blank">Wikipédia</a></html> | Les ultrasons sont utilisés dans l'industrie ainsi que dans le domaine médical. <html><a href="https://fr.wikipedia.org/wiki/Ultrason" target="_blank">Wikipédia</a></html> |
| |
| {{ :materiels:capteurs:wikiversite.jpg?nolink&50|}} |
| * // **Ressources** // |
| * <html><a href="https://fr.wikiversity.org/wiki/Rudiments_d%27acoustique/Quelques_d%C3%A9finitions" target="_blank">Rudiments d'acoustique : Quelques définitions</a></html> |
| |
| <callout type="tip" title="Principe de fonctionnement des capteurs HC-SR0x" icon="true">Voir l'article sur le "Carnet du maker" <html><a href="https://www.carnetdumaker.net/articles/mesurer-une-distance-avec-un-capteur-ultrason-hc-sr04-et-une-carte-arduino-genuino/" target="_blank"><b>ici</b></a></html> </callout> |
==== 2. Capteurs numériques ==== | ==== 2. Capteurs numériques ==== |
| |
=== 2.1 HC-SR04 === | === 2.1 HC-SR04 (GPIO) === |
{{ :materiels:capteurs:hc-sr04.png?nolink&150|HC-SR04}} | {{ :materiels:capteurs:hc-sr04.png?nolink&150|HC-SR04}} |
* //**Source**// : <html><a href="https://www.carnetdumaker.net/articles/mesurer-une-distance-avec-un-capteur-ultrason-hc-sr04-et-une-carte-arduino-genuino/" target="_blank">wiki</a></html> | |
| == 2.1.1 Présentation == |
| * //**Source**// : <html><a href="https://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf" target="_blank">pdf</a></html> |
| |
<callout type="info" icon="true">Ce module permet d’évaluer les distances entre un objet mobile et les obstacles rencontrés. Il suffit d'envoyer une impulsion de 10 µs en entrée et le capteur renvoie une largeur d'impulsion proportionnelle à la distance.</callout> | <callout type="info" icon="true">Ce module permet d’évaluer les distances entre un objet mobile et les obstacles rencontrés. Il suffit d'envoyer une impulsion de 10 µs en entrée et le capteur renvoie une largeur d'impulsion proportionnelle à la distance.</callout> |
} | } |
</code> | </code> |
| |
| |
{{ :arduino:uc:platformioico.png?nolink&50|}} | {{ :arduino:uc:platformioico.png?nolink&50|}} |
---- | ---- |
| |
=== 2.2 HC-SR04P === | |
=== 2.2 Module VMA306 à capteur HC-SR05 === | === 2.2 HC-SR05 (GPIO) === |
{{ :materiels:capteurs:hc-scr05.png?nolink&150|VMA306}} | {{ :materiels:capteurs:hc-scr05.png?nolink&150|VMA306}} |
| |
| == 2.2.1 Présentation == |
* //**Source**// : <html><a href="https://www.velleman.eu/downloads/29/vma306_a4v01.pdf" target="_blank">pdf</a></html> | * //**Source**// : <html><a href="https://www.velleman.eu/downloads/29/vma306_a4v01.pdf" target="_blank">pdf</a></html> |
| |
* //Connexion à un shield// <html><a href="https://webge.fr/doc/wikis/pdf/TinkerkitV2.pdf" target="_blank">Tinkerkit v2</a></html>. {{ :materiels:capteurs:hcsr05.jpg?nolink&600 |}} | * //Connexion à un shield// <html><a href="https://webge.fr/doc/wikis/pdf/TinkerkitV2.pdf" target="_blank">Tinkerkit v2</a></html>. {{ :materiels:capteurs:hcsr05.jpg?nolink&600 |}} |
* // Un premier exemple // {{ :materiels:capteurs:distance:arduinoico.png?nolink&30|}} | * // Un premier exemple // {{ :materiels:capteurs:distance:arduinoico.png?nolink&30|}} |
<file cpp HCSR05.cpp> | <code cpp HCSR05.cpp> |
/////////////////////////////////////////////// | /////////////////////////////////////////////// |
// Programme test pour capteur HC-SR05 // | // Programme test pour capteur HC-SR05 // |
// Go Tronic 2017 // | // Go Tronic 2017 // |
/////////////////////////////////////////////// | /////////////////////////////////////////////// |
#define trigPin 10 // Tinkerkit O1 | #define trigPin 10 // Tinkerkit O1 |
delay(500); // délai entre deux mesures | delay(500); // délai entre deux mesures |
} | } |
</file> | </code> |
| |
| |
---- | ---- |
| |
=== 2.3 Transducteur à ultrasons HC-SR04P === | === 2.3 HC-SR04P (GPIO - I2C - UART) === |
{{ :materiels:capteurs:hc-scr05.png?nolink&150|VMA306}} | {{ :materiels:capteurs:distance:hc-sr04p.png?nolink&150|JOY-IT HC-SR04P}} |
| |
<callout type="info" icon="true">Ce capteur ultrason économique à base de HC-SR04P délivre un signal proportionnel à la distance qui le sépare d'un obstacle.</callout> | == 2.3.1 Présentation == |
| <callout type="info" icon="true">Ce transducteur ultrason à base de HC-SR04P délivre un signal proportionnel à la distance qui le sépare d'un obstacle. Le signal pourra être récupérer directement via des **GPIO**, une interface **UART** ou **I2C**. Ce qui le rend compatible avec la plupart des microcontrôleurs (Arduino® ou compatible, Raspberry Pi, etc...).</callout> |
| |
* //**Distributeur**// : <html><a href="https://www.lextronic.fr/capteur-ultrasons-hc-sr04p-64393.html" target="_blank">Lextronic</a></html> | * //**Distributeur**// : <html><a href="https://www.lextronic.fr/capteur-ultrasons-hc-sr04p-64393.html" target="_blank">Lextronic</a></html> |
| |
* //**Caractéristiques**// | * //**Caractéristiques**// |
* Capteurs: HC-SR04 | * Capteurs: <html><a href="https://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf" target="_blank" title="pdf">HC-SR04</a></html> |
* Tension d'alimentation: 3 Vcc à 5,5 Vcc | * Tension d'alimentation: 3 Vcc à 5,5 Vcc |
* Interface: GPIO / UART / I2C | * Interface: GPIO / UART / I2C (**SLA** = **0x57**) |
* Niveau logique: 3,3 Vcc / 5Vcc | * Niveau logique: 3,3 Vcc / 5Vcc |
* Consommation: 15 mA (< 3mA au repos) | * Consommation: 15 mA (< 3mA au repos) |
* Angle de mesure: <15° | * Angle de mesure: < 15° |
* Portée de détection: 2 à 450 cm | * Portée de détection: 2 à 450 cm |
* Précision: 0,3 cm | * Précision: 0,3 cm |
* Connecteur mâle 4 broches coudé pré-soudé (pas 2,54 mm): Vcc/Trig/Echo/GND | * Connecteur mâle 4 broches coudé pré-soudé (pas 2,54 mm): Vcc/Trig/Echo/GND |
* Dimensions: 45,5 x 20,3 x 15,5 mm | * Dimensions: 45,5 x 20,3 x 15,5 mm |
| |
| * //**Configuration**// de M1 et M2 sur le CI (1 : R=10k à ajouter) \\ **M1 M2** \\ 0 0 : GPIO \\ 1 0 : I2C \\ 1 1 : 1-wire \\ 0 1 : UART \\ |
| |
| {{ :materiels:capteurs:acrobate.gif?nolink&30|}} |
| * //**Documentation**// |
| * A télécharger <html><a href="https://webge.fr/doc/projets/datasheets/SEN-US01.pdf" target="_blank"><b>ici</a></b></html> |
| |
| {{ :materiels:capteurs:environnement:iconechronogrammes.png?nolink&50|}} |
| * //**Chronogrammes**// |
| * Relevé des signaux du bus I2C. A télécharger <html><a href="https://webge.fr/doc/wikis/img/Mesures_HCSR04.zip" target="_blank"><b>ici</b></a></html>. |
| |
| \\ |
| |
| {{ :materiels:capteurs:environnement:code.png?nolink|}} |
| == 2.3.2 Exemples de code == |
| <tabs> |
| * [[#tab-hcsr04pduinogpio_1|Arduino UNO (GPIO)]] |
| * [[#tab-hcsr04pduinoi2c_1|Arduino UNO (I2C)]] |
| * [[#tab-hcsr04pduinouart_1|Arduino UNO (UART)]] |
| * [[#tab-hcsr04pico_1|Rpi Pico (µPython)]] |
| |
| <pane id="tab-hcsr04pduinogpio_1"> |
| * //**Ressources**// |
| * <html><a href="https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/" target="_blank">pinMode()</a></html> | <html><a href="https://www.arduino.cc/reference/en/language/functions/advanced-io/pulsein/" target="_blank">pulseIn()</a></html> | <html><a href="https://www.arduino.cc/reference/en/language/functions/communication/serial/" target="_blank">serial</a></html> |
| * //**Fiche guide**// pour l'étude d'une chaîne d'information comprenant un **HCSR04P** <html><a href="https://webge.fr/doc/projets/tsin/0_Fiches guide TSIN/TSIN_FGA_HCSR04P.zip">[Télécharger]</a></html> |
| |
| * //**Connexion**// à une <html><a href="https://wiki.seeedstudio.com/Base_Shield_V2/" target="_blank">Base Shield V2</a></html> montée sur une Arduino Uno \\ <html><span style="color:red">A venir</span></html> |
| |
| * //**Exemple** utilisant les **GPIO** pour tester le capteur// |
| <code cpp *.cpp> |
| // Arduino MKR sur Arduino MKR Connector |
| // Connexion sur le connecteur D5 D6B |
| const int echo = 6; |
| const int trigger = 5; |
| |
| float distance, duration; |
| |
| void setup() { |
| Serial.begin(9600); |
| pinMode(echo, INPUT); |
| pinMode(trigger, OUTPUT); |
| } |
| |
| void loop() { |
| digitalWrite(trigger, HIGH); // Mesure de la distance en utilisant une impulsion de 10us |
| delayMicroseconds(10); |
| digitalWrite(trigger, LOW); |
| duration = pulseIn(echo, HIGH); |
| distance = duration * 340 / 2 / 10000; |
| Serial.println("distance: " + String(distance) + " cm"); // Affichage dans la console |
| delay(3000); // Attente entre 2 mesures |
| } |
| </code> |
| </pane> |
| |
| <pane id="tab-hcsr04pduinoi2c_1"> |
| * //**Ressources**// |
| * <html><a href="https://www.arduino.cc/reference/en/language/functions/communication/wire/" target="_blank">Wire</a></html> |
| {{ :materiels:capteurs:intensite:doc.gif?nolink|}} |
| |
| * //**Exemple** utilisant l'**I2C** pour tester le capteur// |
| <code cpp *.cpp> |
| // Arduino MKR sur Arduino MKR Connector |
| // Connexion sur le connecteur TWI |
| #include <Wire.h> |
| |
| int address = 0x57; // i2c address of SEN-US01 |
| float distance; |
| long int bytes[3]; |
| |
| void setup(){ |
| Serial.begin(9600); |
| Wire.begin(); |
| } |
| |
| void loop(){ |
| Wire.beginTransmission(0x57); // Start measurement |
| Wire.write(0x01); |
| Wire.endTransmission(); |
| |
| delay(200); // Wait 200 ms |
| |
| Wire.requestFrom(0x57,3); // Read 3 bytes from sensor |
| int i = 0; |
| while(Wire.available()){ |
| bytes[i++] = Wire.read(); |
| } |
| |
| distance = ((bytes[0] << 16) + (bytes[1] << 8) + bytes[2]) / 10000; // Calculate distance based on received bytes |
| |
| if (false){ // Checking whether measured value is within the permissible distance |
| Serial.println("distance is outside of the measuring range"); // If not, an error message is output |
| } |
| else{ |
| Serial.println("distance: " + String(distance) + " cm"); // The calculated distance is output to the console |
| } |
| delay(3000); // Pause between the individual measurements |
| } |
| </code> |
| </pane> |
| |
| <pane id="tab-hcsr04pduinouart_1"> |
| * //**Ressource**// : <html><a href="https://docs.arduino.cc/learn/built-in-libraries/software-serial/" target="_blank">SoftwareSerial Library</a></html> |
| |
| * //**Exemple** utilisant l'**UART** pour tester le capteur// |
| <code cpp *.cpp> |
| // Arduino MKR sur Arduino MKR Connector |
| // Connexion sur le connecteur SERIAL |
| |
| #include <SoftwareSerial.h> |
| |
| SoftwareSerial ser(A4,A5); // initialize a serial connection (software) |
| float distance; |
| long int bytes[3]; |
| |
| void setup(){ |
| Serial.begin(9600); // start serial connection to computer |
| ser.begin(9600); // start serial connection to sensor |
| } |
| |
| void loop(){ |
| ser.flush(); // clear communication |
| ser.write(0xA0); // start measurement |
| delay(200); // Wait 200 ms |
| |
| for (int i = 0; i < 3; i++) bytes[i] = ser.read(); // Read 3 bytes from sensor |
| |
| distance = ((bytes[0] << 16) + (bytes[1] << 8) + bytes[2]) / 10000; // Calculate distance based on received bytes |
| |
| if (false){ // Checking whether measured value is within the permissible distance |
| Serial.println("distance is outside of the measuring range"); // If not, an error message is output |
| } |
| else{ |
| Serial.println("distance: " + String(distance) + " cm"); // The calculated distance is output to the console |
| } |
| delay(3000); // Pause between the individual measurements |
| } |
| </code> |
| </pane> |
| |
| <pane id="tab-hcsr04pico_1"> |
| A venir |
| </pane> |
| </tabs> |