IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Radar de recul automobile


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    Citation Envoyé par Marcus13190 Voir le message
    Comment changer la fréquence des bips en fonction de la distance ?
    si vous avez dans dMin la plus petite distance des différents capteurs et que vous avez 3 bornes D1 D2 D3 pour définir différentes périodes, vous faites un test sur les distances, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    const unsigned long interval = 3000;
    const unsigned int D1= 10, D2=50, D3=100;
    bool pasDeBeep;
     
    ....
     
     pasDeBeep = false;
     if (dMin < D1) beepDemiPeriod =  interval / 3;  // moins de D1 cm, attention !
     else
       if (dMin < D2) beepDemiPeriod =  interval * 2 / 3; // entre D1 et D2
     else
       if (dMin < D3) beepDemiPeriod =  interval ; // entre D2 et D3
     else
       pasDeBeep = true; // trop loin, pas de beep
    sinon vous pouvez faire évoluer linéairement la demie période en fonction de la distance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (dMin < D1) beepContinu = true; // pour faire une beep continu si la distance est sous D1
    else
    if (dMin > D3) pasDeBeep = true; // pour ne pas faire de son si la distance est > D3
    else // on est entre D1 et D3
    beepDemiPeriod = map(dMin, D1, D3, interval / 10, interval); // fonction affine. pour D1 on aura comme période (interval / 10) et pour D3 (interval) et c'est une droite entre les 2.

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    Lorsque j'utilise digitalWrite (BUZZER,1) la tonailé de mon buzzer est en deux tons très rapide et lorsque j'utilise NewTone(BUZZER,1) la tonalité n'a qu'un ton. Peut-être est-ce normal ?
    le plus simple est de faire des tests sans tout votre code

    qu'est-ce que cela fait: CODE #1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <NewTone.h>
    const byte BUZZER = 10;
     
    void setup()
    {
      pinMode(BUZZER, OUTPUT);
      NewTone(BUZZER, 1000);
      delay(2000);
      noNewTone(BUZZER);
    }
     
    void loop()
    et qu'est-ce que cela fait: CODE #2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    const byte BUZZER = 10;
     
    void setup()
    {
      pinMode(BUZZER, OUTPUT);
      digitalWrite (BUZZER,HIGH);
      delay(2000);
      digitalWrite (BUZZER,LOW);
    }
     
    void loop()
    certains buzzers font du bruit dès que le pin d'activation est HIGH (ils vibrent d'eux même), pour d'autres il faut envoyer une pulsation et sa fréquence définit la fréquence de sortie du buzzer.

    (Notez que NewPing utilise Timer2 et NewTone Timer1 donc sur un UNO vous avez les 3 timers occupés, ça impactera l'usage du PWM si vous en avez besoin)

  3. #3
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Merci je regarde ça de plus près.

  4. #4
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Bonjour les deux codes fonctionnent à l'identique pour le buzzer.
    Mais c'est bon j'ai trouvé les codes pour le bon fonctionnement et ça marche nickel. Je me suis inspiré de ce tuto https://tropratik.fr/radar-de-recul-avec-arduino, Il a fallu qussi que je mette le code de calcul des bips dans le void EchoChek car dans le OneSensorCycle ça marchait pas pas bien et je ne sais pas pourquoi.

    voici le code final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    #include <NewTone.h>
    #include <NewPing.h>
     
    #define SONAR_NUM     2 // Nombre de capteurs (4 au final).
    #define MAX_DISTANCE 120 // Distance maximale (en cm) de ping.
    #define PING_INTERVAL 35 // Millisecondes entre les pings du capteur (29 ms est environ la minute pour éviter l'écho croisé du capteur).
    #define FREQUENCE_BIP 1000 // fréquence 1000 hertz
    #define DUREE_BIP 300 // Temps en miliseconde
    #define DISTANCE_BIP_CONTINU 25 // distance ou le bip continu se déclenche (20 cm est le minimume pour les capteurs JSN-SR04T.(étanches)
    unsigned long DELAI = 1000; // temps de pulsation
    unsigned long HeureDernierBip; 
    unsigned long pingTimer[SONAR_NUM]; // Contient les heures auxquelles le prochain ping doit se produire pour chaque capteur.
    unsigned int cm[SONAR_NUM];         // Où les distances de ping sont stockées.
    uint8_t currentSensor = 0;          // Enregistre le capteur actif.
    const int BUZZER = 3; // définition de la borne de l'arduino pour le buzzer
     
    NewPing sonar[SONAR_NUM] =  // Réseau d'objets de capteur.
    {    
    NewPing(9, 8, MAX_DISTANCE), // La broche de déclenchement, la broche d'écho et la distance maximale de chaque capteur pour le ping.
    NewPing(12, 11, MAX_DISTANCE),};
    //NewPing(3, 2, MAX_DISTANCE),
    //NewPing(5, 4, MAX_DISTANCE),
     
    void setup() {
      pinMode(3,OUTPUT); // Définition de la borne du buzer comme une sortie
      digitalWrite(BUZZER,HIGH); // Bip de démarrage du système 1s (1000 millisecondes)
      delay(1000); 
      digitalWrite(BUZZER,LOW);
      HeureDernierBip = 0;
      Serial.begin(115200);
      pingTimer[0] = millis() + 75;           // 75 Le premier ping commence à 75 ms, donne le temps à l'Arduino de se refroidir avant de commencer.
      for (uint8_t i = 1; i < SONAR_NUM; i++) // Réglez l'heure de démarrage de chaque capteur.
        pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL;
    }
     
    void loop() {
      for (uint8_t i = 0; i < SONAR_NUM; i++) { // Parcourir tous les capteurs.
        if (millis() >= pingTimer[i]) {         // Est-il temps pour ce capteur de faire un ping.
          pingTimer[i] += PING_INTERVAL * SONAR_NUM;  // Réglez la prochaine fois que ce capteur recevra un ping.
          if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle(); // Cycle de ping du capteur terminé, faites quelque chose avec les résultats.
          sonar[currentSensor].timer_stop();          // Assurez-vous que la minuterie précédente est annulée avant de commencer un nouveau ping (assurance).
          currentSensor = i;                          // Capteur en cours d'accès.
          cm[currentSensor] = 0;                      // Rendre la distance nulle au cas où il n'y aurait pas d'écho ping pour ce capteur.
          sonar[currentSensor].ping_timer(echoCheck); // Faites le ping (le traitement continue, l'interruption appellera echoCheck pour rechercher un écho).
        }
      }
     
      // Un autre code qui * N'ANALYSE PAS * les résultats de ping peut aller ici.
    }
     
    void echoCheck()  // Si un ping est reçu, définissez la distance du capteur sur la matrice et le son associé.
      {
        if (sonar[currentSensor].check_timer())
      {
        cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM;
      }  
      if (cm[currentSensor] == 0) // lorsque le capteur ne détectre rien il est à 0 donc on bloque le son pour le 0.
     {
     DELAI=5000;
     }
     else if (cm[currentSensor] < DISTANCE_BIP_CONTINU) // Si le capteur détecte un obstacle en dessous de la distance mini (25cm) il sonne en continu
     {
     DELAI=10;
     }
     else // On fait varier la cadance du bip en fonction de la distance comprise entre la distance maxi et la distance mini.
     {
     DELAI = (float)(cm[currentSensor]) * (float)(1000 - DUREE_BIP)/(float)(MAX_DISTANCE - DISTANCE_BIP_CONTINU) + DUREE_BIP;
     }
    if (millis() > HeureDernierBip + DELAI)
     {
      HeureDernierBip = millis();
      NewTone(BUZZER, FREQUENCE_BIP,DUREE_BIP);
     }
     }
    void oneSensorCycle() { 
     
      for (uint8_t i = 0; i < SONAR_NUM; i++)
          {
        Serial.print(i);
        Serial.print("=");
        Serial.print(cm[i]);
        Serial.print("cm ");
           }
        Serial.println();
    }
    Merci encore pour l'aide. Je suis content car il y une semaine je ne savais pas ce qu'était un arduino !!

  5. #5
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    Citation Envoyé par Marcus13190 Voir le message
    Merci encore pour l'aide. Je suis content car il y une semaine je ne savais pas ce qu'était un arduino !!
    bravo un super joli projet en moins d'une semaine!!

    Bonjour les deux codes fonctionnent à l'identique pour le buzzer.
    OK donc vous avez un buzzer qui sonne tout seul.

  6. #6
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    C'est un buzzer de détecteur de recul vendu dans le commerce. Mais le problème est que ces détecteurs avec leur ping à 2.5m on ne peut pas les placer sous les 50cm sinon ça bip sans arrêt.
    Là en faisant les ping à 1.2m du coup je peux descendre et les mettre sous mon pare-choc de ma jaguar.
    En tout cas un grand merci pour votre assistance.
    Marc

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Fabriquer un radar de recul pour un Camping Car
    Par megamario dans le forum Arduino
    Réponses: 4
    Dernier message: 02/12/2019, 08h58
  2. Radar de recul Vert orange et rouge
    Par Boby71C dans le forum Arduino
    Réponses: 1
    Dernier message: 15/03/2018, 17h38
  3. Radar de recul de garage : problème de code ou de logique
    Par bertrand0611001 dans le forum Arduino
    Réponses: 18
    Dernier message: 15/03/2018, 16h25
  4. Cherche contenu pour BDD (ville, automobile..)
    Par Invité dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 29/03/2005, 20h17
  5. Réponses: 2
    Dernier message: 15/03/2005, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo