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 :

PWM et Duty Cycle (répulseur de chat avec un ESP32-Arduino)


Sujet :

Arduino

  1. #1
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Par défaut PWM et Duty Cycle (répulseur de chat avec un ESP32-Arduino)
    Bonjour,

    Il m'est venu à l'idée d'essayer d'écrire un répulsif de chat avec mon ESP32 et un de mes Buzzer.
    Cela semble sortir de bonnes fréquences et j'ai essayé jusqu'à 24kHz.
    Pour les chats il faudrait quelque chose comme 19.5KHZ-24.5KHZ et éventuellement adapter le logiciel pour les fouines ou souris.

    Ayant déjà un certain âge, je n'entends plus vraiment les fréquences dépassant 17kHz.
    J'ai dans le jardin deux répulsifs de chats, je peux voir leurs spectres avec mon application Android Spectroid et aussi vérifier la sortie du buzzer.
    Encore une remarque: nos voisins ont 7 chats qui vivent dans le salon de leur villa. Imaginez les odeurs.
    Oui, je connais les soucis possibles pour ne pas gêner d'autres voisins et surtout leurs enfants.
    Je vais sans doute ajouter aussi un capteur de mouvements pour faire "joli" et propre.

    Encore une remarque sur mes deux répulsifs du commerce: un a une fréquence fixe (choisir la bête avec un régulateur) et l'autre bouge autour d'un rang de fréquences (sans doute un bon choix).

    Les instructions Arduino sont typiquement la fréquence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Serial.println("freq: 14000");
    ledcWriteTone(channel, 14000);
    et pour le Duty Cycle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ledcWrite(channel, dutyCycle);
    qui concerne ma question.
    J'ai utilisé la valeur de 127 pour la plupart de mes tests.

    En consultant https://en.wikipedia.org/wiki/Duty_cycle je n'arrive pas à savoir comment l'utiliser et si cela a un impact sur la fréquence.
    On dirait que pour certaines valeurs apparaissent alors d'autres fréquences, des diviseurs! Ou alors c'est une réaction du buzzer.
    Pour moi, le mieux serait d'avoir un signal propre, le plus fort possible et de faire varier la fréquence par logiciel et dans le rang désiré.

    Je ne suis pas encore arrivé à https://www.google.ch/imgres?imgurl=...act=mrc&uact=8

    Merci d'avance aux électroniciens!

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 157
    Billets dans le blog
    47
    Par défaut
    Salut,

    C'est peut-être plus un problème de physique...

    Un son pur est une sinusoïde dans le domaine temporel, et en représentation fréquentielle tu as une harmonique fondamentale (une "raie") à la fréquence de la sinusoïde :
    Nom : sonpur.PNG
Affichages : 1437
Taille : 32,8 Ko

    Si tu analyses un signal carré, voilà le spectre obtenu :
    Nom : spectresignalcarre.PNG
Affichages : 1518
Taille : 18,7 Ko
    Avec un buzzer parfait, il y aurait des harmoniques impaires parasites (fréquences 3f, 5f, 7f, etc.) mais fortement atténuées. Compte-tenu de la réponse du buzzer, le son obtenu ressemble encore à un son pur.

    Maintenant avec un signal rectangulaire et un rapport cyclique petit :
    Nom : spectresignalrectangulaire.PNG
Affichages : 1503
Taille : 32,4 Ko
    On s'éloigne du son pur

    Ce n'est donc pas tellement étonnant d'obtenir un son à peu près pur avec un signal carré (ou PWM avec rapport cyclique=50%)...

  3. #3
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 250
    Par défaut
    Alors là !


  4. #4
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Par défaut
    Oui, ..., la réponse, ..., c'est la classe. Merci.

    Je viens d'essayer avec une fréquence de 500Hz.
    Il y a effectivement plein d'harmoniques et sans doute provenant du buzzer.
    C'est bien visible sur le graphique de mon application Android Spectroid.

    Par contre, le Duty Cycle avec 127 semble me donner plus de "puissance" sur le buzzer, qu'un 255.
    Mais ce n'est pas vrai. Android Noise Meter me donne 2 dB de plus.
    Ce 255 me montre plus d'harmonique sur Spectroid et dans les aigus.

    Je vais sans doute garder le 255, car un buzzer n'est pas très puissant à la base et je varierai la fréquence par logiciel.

    Si on met un Dutty Cycle de 1 ou 3, le son est évidemment trop faible et difficile d'identifier des harmoniques.

    C'est de la physique, c'est clair, mais pas si simple.
    Si Noise Meter me donne 50dB (il fait donc quelques calculs, mais pas pour les chats), cela ne peut servir à rien si le ou un des chats (il y en a un qui s'en fout ou est trop vieux) n'entend pas cette fréquence. Ma femme m'a proposé de mettre un haut-parleur car ces chats détestent MES Pchht!
    Un Pchht avec un buzzer, ou du mp3 sur un buzzer, il faudrait s'accrocher!

  5. #5
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Par défaut
    Bonjour,

    Je ferme la discussion, cela marche bien.
    Ici du code rapidement bricolé ce matin sur un ESP32 où je viens d'y mettre un PIR:

    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
     
    #include <WiFi.h>
    #include <HTTPClient.h>
     
    //13.5KHZ-19.5KHZ : Efficace pour repousser les animaux comme les souris, les rats, les chiens, les renards, les martres (belette) etc.
    //19.5KHZ-24.5KHZ : Efficace pour repousser les animaux tels que les chats, les ratons laveurs, les blaireaux, les mouffettes etc.
     
    int freq = 2000;
    int channel = 0;
    int pinPir = 13;
    int resolution = 8;
     
    const char* ssid = "...";
    const char* pwd  = "...";
     
    void setup() {
      Serial.begin(9600);
     
      Serial.print("Connexion à ");
      Serial.println(ssid);
      WiFi.begin(ssid, pwd);
      while (WiFi.status() != WL_CONNECTED) {
        delay(200);
        Serial.print(".");
      }
      //Montre l'adresse IP
      Serial.println("");
      Serial.println("WiFi connecté!");
      Serial.println("Adresse IP: ");
      Serial.println(WiFi.localIP());
     
      ledcSetup(channel, freq, resolution);
      ledcAttachPin(12, channel);
     
      pinMode(pinPir,INPUT);
    }
     
    void loop() { 
      bool isDetected = digitalRead(pinPir);
     
      if (isDetected){
        Serial.println("Présence detectée");
     
        HTTPClient Post;
        Post.begin("http://192.168.1.143:8001/beep"); 
        Post.addHeader("Chat", "text/plain");  
        Post.POST("");
     
        ledcWriteTone(channel, 14000); //14 kHz
        ledcWrite(channel, 255);
     
        delay(1000);
        ledcWriteTone(channel, 0);
      }
     
      delay(500);
    }
    Je n'entends pas le 14kHz émit par le buzzer (à mon âge) pendant 1 sec, quand je passe devant le PIR, mais je le vois sur mon application Android Spectroid.
    Sur un Raspberry Pi 4, j'ai écrit rapidement un serveur Web en Java (192.168.1.143 fixe dans mon routeur) et lancer au démarrage, pour recevoir le POST beep pour activer un "horrible" son sur le même type de buzzer sur le Pi, lors d'un passage quelconque devant le PIR de l'ESP32.
    Cela marche aussi sur mon PC (sans buzzer, mais un script Python de remplacement qui pourrait aussi bien jouer un fichier mp3): mais le Pi peut rester allumer .... sauf la nuit ... sinon ma femme .....

    Il me reste à mettre la chose dehors, sous abris, un délais entre la détection du PIR et la génération de l'ultrason .... pour me précipiter sans bruit à la fenêtre.
    Ensuite varier les fréquences, vérifier si le Web serveur répond (pour le prochain POST() (ping est difficile)), faire un peu plus pro, etc (mais pas détecter lequel des 7 chats de mon voisin, évidemment, ..., pour l'instant)!
    Je ne sais pas si j'arriverais à intégrer un capteur ultrasonique pour identifier si le chat s'enfuit effectivement!

    Je m'amuse vraiment et cela pourrait donner des idées.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pwm avec duty cycle variable (pendant un temps donné)
    Par charles9131 dans le forum Simulink
    Réponses: 1
    Dernier message: 31/05/2013, 09h43
  2. Réaliser un Chat avec support IP
    Par Sub0 dans le forum Développement
    Réponses: 12
    Dernier message: 14/07/2006, 10h59
  3. [xp] chat avec un logiciel open source ?
    Par sali dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 19/02/2006, 14h45
  4. Comment créer un chat avec VB 6 ?
    Par magic8392 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 21/10/2005, 15h37
  5. Le chat (avec les sockets) sans frames.
    Par azmeuk dans le forum Langage
    Réponses: 1
    Dernier message: 18/10/2005, 19h47

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