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 :

Détection journal et courrier


Sujet :

Arduino

  1. #1
    Candidat au Club
    Homme Profil pro
    Retraité de l'industrie
    Inscrit en
    Avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité de l'industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2021
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Détection journal et courrier
    Bonjour à tous,

    Comme je l’ai dit dans ma présentation, je suis un ignare en électronique.
    L’âge et la maladie m’handicapent.

    Pour me faciliter la vie quotidienne, et éviter les déplacements inutiles ou dans le froid, je souhaiterais détecter le passage du journal ou du courrier dans la boîte aux lettres.
    Celle-ci est dans un porche abrité où seuls passent le porteur du journal régional et le facteur.
    Pour ce faire, je dispose d’une carte Arduino Atméga 2560 qui recevra un simple détecteur de présence (fourni dans le kit de démarrage Arduino).
    A la détection, une led doit s’allumer (fixe ou clignotante, peu importe).
    Jusque là, on trouve quelques exemples ici ou là, mais je voudrais que cette led reste allumée tant que je ne serai pas intervenu en appuyant sur un bouton qui provoquera l’extinction de la led et le réarmement automatique du système (le facteur peut passer juste après le journal).

    D’après vous, comment procéder aux différents branchements, et quel serait le sketch correspondant ?
    Je pourrai tester avec Tinkercad que je trouve accessible pour le débutant que je suis.

    Je vous remercie d’avance pour l’aide que vous pourrez m’apporter (et mes jambes vous en seront très reconnaissantes).

    Très bonne journée à vous tous.

    electrozero.

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 685
    Points : 5 328
    Points
    5 328
    Par défaut
    Bonjour

    si vous postez un code que vous trouvez fonctionnel pour la détection de présence du courier, on pourra regarder comment le modifier pour rajouter l'appui du bouton pour extinction

    sinon quelques questions:
    - comment comptez vous alimenter l'arduino? (je l'imagine proche de la boîte aux lettres)
    - quelle méthode de détection allez vous utiliser?

    Sinon faire un peu d'exercice, même si c'est difficile, n'est sans doute pas une mauvaise chose... Qu'en dit votre docteur?

  3. #3
    Candidat au Club
    Homme Profil pro
    Retraité de l'industrie
    Inscrit en
    Avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité de l'industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2021
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour et merci pour votre réponse.

    Citation Envoyé par Jay M Voir le message
    Sinon faire un peu d'exercice, même si c'est difficile, n'est sans doute pas une mauvaise chose... Qu'en dit votre docteur?
    Ce sont justement les médecins qui m’imposent ce repos forcé. (généraliste et angiologue)
    Je suis le premier puni.
    Il y a quelques mois encore, j’étais sur la base des 3500 km par an. Ça parait beaucoup et pourtant c’est si peu pour un marcheur: 10 km de moyenne pas jour, avec des jours sans, et des jours forts (maximum: 57 km et 2700 m de dénivelé dans une journée).
    Actuellement, j’ai de grosses difficultés à faire quelques dizaines de mètres. C’est horrible !

    Concernant mon problème:
    la configuration des lieux: la boîte aux lettres est encastrée dans le mur de ma chambre (épaisseur entre 1,20 et 1,30 m), mais il me faut contourner la maison (une ancienne ferme) pour la relever.
    J’ai la possibilité d’utiliser une bouche de ventilation, ainsi, le système peut rester à l’intérieur de la chambre, seul le capteur serait à l’extérieur et les 3 fils (GND, 5V et signal) passeraient au travers du mur et feraient la liaison capteur => Arduino.

    Pour l’alimentation, je pense avoir le choix: une petite alimentation dédiée, ou des piles, ou à la limite, relié au PC. Qu'en pensez-vous ?

    Dans la panoplie qu’on m’a cédé, j’ai récupéré une Arduino UNO, et voilà ce que j’ai tenté de faire, bien sûr, en m’inspirant largement de réalisations trouvées sur le net.

    Nom : Schéma capteur de mouvement PIR.JPG
Affichages : 117
Taille : 100,0 Ko

    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
    // Capteur de mouvement PIR
    // Calibration de 30 secondes
    int calibrationTime = 30;
     
    int ledPin = 13;         // Led sur la pin 13
    int inputPin = 2;        // Signal OUT du capteur sur la pin 2
    int pirState = LOW;      // Détection du statut == bas
    int val = 0;             // Variable pour la lecture de l'état de la broche
     
    void setup() {
      pinMode(ledPin, OUTPUT);   // La led est déclarée en sortie
      pinMode(inputPin, INPUT);  // Le signal du capteur est en entrée
      Serial.begin(9600);
     
      Serial.print("calibrating sensor ");
      for(int i = 0; i < calibrationTime; i++){
        Serial.print(".");
        delay(1000);
      }
    }
     
    void loop(){
      val = digitalRead(inputPin);    // Lire la valeur du signal du capteur
      Serial.println(val);
      if (val == HIGH) {              // Vérifier si l'entrée est haute
        digitalWrite(ledPin, HIGH);   // Allumer la led
        delay(150);                   // Attendre 150 millisecondes
     
        if (pirState == LOW) {
                                      // La led s'allume
          Serial.println("Motion detected!");
                                      // On change seulement le changement de sortie, pas l'état
          pirState = HIGH;            // Le statut = haut
        }
      } else {
        digitalWrite(ledPin, LOW);     // Eteindre la led
        delay(300);
        if (pirState == HIGH){
                                       // On vient juste d'éteindre
          Serial.println("Motion ended!");
                                       // Nous changeons seulement le changement de sortie, pas l'état
          pirState = LOW;              // Le statut = bas
        }
      }
    }
    Je vous remercie de consacrer votre temps pour ce problème.
    Bon après-midi.
    electrozero.

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 685
    Points : 5 328
    Points
    5 328
    Par défaut
    Pas cool d'être coincé quand on est de nature active !! courage...

    Pour votre code, le système utilise un détecteur PIR, c'est un capteur de présence infra-rouge qui détecte la chaleur en mouvement. Je n'ai jamais essayé si ça pouvait détecter des lettres qui tombent par une fente... peut-être sont elles assez chaudes pour effectivement déclencher le capteur.

    Si ça fonctionne alors le code suivant devrait (tapé ici, non testé) vous donner ce que vous voulez:
    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
    const byte pinLED = 4;           // Led sur la pin 4 (pin4 --- 220 Ohms -- anode[LED]cathode---GND)
    const byte pinPIR = 2;            // Signal OUT du capteur sur la pin 2
    const byte pinBouton = 3;         // bouton câblé sur la pin 3 (pin 3 --- bouton --- GND)
    const byte dureeCalibration = 30; // temps minimum de chauffe du PIR (ne pas perturber)
    enum : byte {EN_ATTENTE, ACTIVE} etat = EN_ATTENTE;
     
    void gestionEtat() {
      switch (etat) {
        case EN_ATTENTE:
          if (digitalRead(pinPIR) == HIGH) {
            digitalWrite(pinLED, HIGH);             // Allumer la led
            while (digitalRead(pinBouton) == LOW) ; // on attend que le bouton soit relâché (juste au cas où)
            delay(15);                              // anti-rebond du bouton
            etat = ACTIVE;
          }
          break;
     
        case ACTIVE:
          if (digitalRead(pinBouton) == LOW) {      // appui du bouton
            digitalWrite(pinLED, LOW);              // Eteindre la led
            delay(15);                              // anti-rebond du bouton
            while (digitalRead(pinPIR) == HIGH) ;   // on attend que le PIR soit désactivé (au cas où)
            etat = EN_ATTENTE;
          }
          break;
      }
    }
     
    void setup() {
      pinMode(LED_BUILTIN, OUTPUT);
      pinMode(pinLED, OUTPUT);
      pinMode(pinPIR, INPUT);
      pinMode(pinBouton, INPUT_PULLUP);
      digitalWrite(LED_BUILTIN, HIGH);
      delay(1000ul * dureeCalibration);
      digitalWrite(LED_BUILTIN, LOW);
    }
     
    void loop() {gestionEtat();}
    il faut connecter
    - la sortie signal du PIR en broche 2
    - le bouton momentané en broche 3 (câblage: pin 3 --- bouton --- GND)
    - la LED en broche 4 (câblage pin4 --- 220 Ohms -- anode[LED]cathode---GND)

    il y a 30 secondes d'attente au démarrage de l'arduino qui sont nécessaire pour que le PIR fonctionne bien. pendant ce temps là il ne faut pas activer le PIR. la LED interne de la UNO (LED_BUILTIN) sera allumée pendant ces 30 secondes. Une fois qu'elle est éteinte, le système est prêt

    Une fois en service, le PIR allume la LED externe sur déclenchement et il faut obligatoirement appuyer sur le bouton pour l'éteindre. On ne revient à l'état nominal que si le PIR s'est désactivé après appui du bouton.

    je vous laisse essayer

  5. #5
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 646
    Points : 11 135
    Points
    11 135
    Par défaut
    Bonjour,

    je me permets d'ajouter quelques remarques :
    • le 1er script comporte l'objet Serial. Lorsqu'on utilise cet objet, il faut savoir qu'il est nécessaire d'activer le moniteur série (menu outils -> moniteur série) dans l'IDE pour exécuter le programme. Sans cela, le programme ne fonctionnera pas correctement, il restera bloqué sur l'instruction Serial.print() en attendant de pouvoir émettre. Serial est souvent utilisé pour déboguer les programmes.
    • Toujours avec Serial, avec l'Arduino UNO il ne faut pas utiliser les pin 0 (Rx) et 1 (Tx) car elles sont utilisées pour la communication avec le PC.


    Sinon, je mettrais le capteur PIR sur la paroi opposée à la porte de la boîte aux lettres pour une meilleure détection. L'ensemble va être soumis aux intempéries, à l'humidité, le froid, la chaleur (surtout si la boîte aux lettres est métallique), il faudra très probablement isoler l'ensemble.

    @Jay, le détecteur IR ne détecte pas forcément la chaleur, mais des variations de l'intensité IR.

  6. #6
    Candidat au Club
    Homme Profil pro
    Retraité de l'industrie
    Inscrit en
    Avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité de l'industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2021
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour messieurs et grand merci pour votre aide.

    @ Jay M:
    Le capteur ne détectera pas les lettres, mais les personnes qui viendront à la boîte aux lettres.

    @ Auteur:
    La configuration des lieux me permet de fixer le capteur sous la voûte, juste au-dessus de la boîte.
    Il devrait être discret, et peut-être presque invisible.

    Dès que je le peux, je teste tout ça (encore quelques semaines au lit).

    Merci à vous deux et très bonne journée.

    electrozero.

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 685
    Points : 5 328
    Points
    5 328
    Par défaut
    Citation Envoyé par electrozero Voir le message
    Le capteur ne détectera pas les lettres, mais les personnes qui viendront à la boîte aux lettres.
    D'accord, il faut donc ouvrir la boîte pour y déposer quelque chose, il n'y a pas une fente où l'on peut glisser une lettre? ou alors juste la passage à proximité de la boîte aux lettres? (même si rien n'a été déposé?)


    Citation Envoyé par Auteur Voir le message
    le 1er script comporte l'objet Serial. Lorsqu'on utilise cet objet, il faut savoir qu'il est nécessaire d'activer le moniteur série (menu outils -> moniteur série) dans l'IDE pour exécuter le programme. Sans cela, le programme ne fonctionnera pas correctement, il restera bloqué sur l'instruction Serial.print() en attendant de pouvoir émettre. Serial est souvent utilisé pour déboguer les programmes.
    Non... le port série émet les octets sans se soucier de qui les lit de l'autre côté. (il n'y a pas de canal retour, c'est juste la pin Tx qui s'agite plus ou moins vite en fonction du débit choisi, en envoyant des HIGH et LOW en fonction des 1 et 0 à transmettre).

    Peut-être une confusion avec la ligne de code que l'on voit souvent dans la fonction setup() des exemples: ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (! SerialUSB) ; // sur DUE
    qui met le setup() en attente de l'établissement de la liaison série sur certaines cartes qui ont le support d'un port USB natif (USB CDC). Sur ces cartes, effectivement si vous avez cette ligne de code, vous resterez en attente tant que la liaison série (USB CDC) n'est pas établie. Sur une carte type UNO ou MEGA, Serial est câblé en dur et le test répond toujours true.

    @Jay, le détecteur IR ne détecte pas forcément la chaleur, mais des variations de l'intensité IR.
    effectivement j'ai utilisé "chaleur" abusivement, c'est la variation des radiations IR qui est mesurée (la particularité du rayonnement IR est de réchauffer la peau sans modifier la température de l'air, c'est pour cela que j'avais parlé de chaleur)

  8. #8
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 646
    Points : 11 135
    Points
    11 135
    Par défaut
    Citation Envoyé par Jay M Voir le message
    Non... le port série émet les octets sans se soucier de qui les lit de l'autre côté. (il n'y a pas de canal retour, c'est juste la pin Tx qui s'agite plus ou moins vite en fonction du débit choisi, en envoyant des HIGH et LOW en fonction des 1 et 0 à transmettre).
    Bon visiblement, j'ai été un peu vite en besogne Avec le Uno pas de souci à ce niveau.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/11/2013, 18h46
  2. Détection MySql
    Par gjullien dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/08/2003, 19h15
  3. Supprimer journal de log en SQL
    Par David K. dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 24/07/2003, 09h35
  4. Détections avec WebBrowser
    Par Wazo_Sportive dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2002, 20h32
  5. Détection de 2 touches appuyées
    Par cyrose dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 17h25

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