Projet chatière un peu particulier

Bonsoir ou bonjour à tous !

Pour commencer, je suis un vrai noob sur Arduino alors pardonnez moi si je n'ai pas la bonne terminologie et si je pose des question stupides :sweat_smile: .

Alors pourquoi cette chatière est si spéciale. Pour commencer, il faut remettre le chat au milieu du village. C'est un chat très peureux et je le soupçonne en plus d'être un bon gros faignant par dessus le reste.

Il y a de ça quelques temps, j'ai installé sur la porte de mon amie, une chatière à authentification RFID (via sa puce) qui lui a coûtée un bras, mais Mr le chat, n'a jamais souhaiter faire l'effort de s'en servir. Donc aujourd'hui, ma pote lui ouvre la chatière à 12h et l'appelle depuis son perron dès 18h jusqu'à que Mr daigne rentrer. Ca ne la dérange pas de le faire mais elle doit partir dans 3 semaines en vacances et elle culpabilise un max de devoir demander à sa mère de devoir la matonne pour la promenade du chat. Donc je lui ai proposé de me pencher sur la question pour automatiser le truc, pour qu'elle puisse partir tranquille et l'esprit légé en vacance.

Donc voici le projet :
1 - Tous les jours à midi, la trappe de la chatière doit s'ouvrir.
2 - Jusqu'à 18h, elle doit rester ouverte.
3 - A partir de 18h, la trappe doit se fermer si et seulement si Mr le chat est rentré. Car bien entendu, tous les chats du quartier entrent et sortent à leur convenance, mais ne reste jamais à l'intérieur. Ils bouffent et ils repartent direct.

Pour ce qui est de l'authentification, je vais récupérer un contact sec de la fameuse trappe en place. Ca me facilite grandement le travail. je me pencherai sur la fabrication d'un portique RFID plus tard.
Afin de m'assurer qu'il soit bien rentré et qu'il n'ait pas changé d'avis entre la chatière et sa gamelle et donc qu'il ne soit pas ressorti, je vais installer une barrière infrarouge et les deux conditions devront être validées pour que la trappe se referme. Et si il y a un autre chat à l'intérieur, bin le squatteur attendra le lendemain 12h pour sortir. Point barre.

Alors voilà déjà le bout de code que j'ai pondu et qui est fonctionnel intégrant la séquence d'initialisation à midi avec l'ouverture de la trappe et la fermeture de celle-ci avec les conditions nécessaires et respectées pour la fermeture de celle-ci.

#include <Servo.h>
Servo myServo;


const int ledPresence = 2;
const int rfid = 4;
const int ledIr = 6;
const int Ir = 12;
const int ledEtat_mem = 13;

int buttonState;

// variable pour stocker les valeurs de passage du rfid
int rfidv;
 
// creation d'une memoire_2 et forçage a 0 de la variable 
// etat du telerupteur 
int memoire_2=0;
 
// etat precedent du rfid et forçage a 0 de la variable 
int etat_rfidv=0;



void setup() {
   Serial.begin(9600);
   while(!Serial); 
 
  pinMode(rfid,INPUT);
  pinMode(Ir, INPUT);
  pinMode(ledPresence, OUTPUT);
  pinMode(ledEtat_mem, OUTPUT);
  pinMode(ledIr, OUTPUT);
  myServo.attach(9);
  
//initialisation position ouverte
  myServo.write(100);
  delay(20);

//attendre 18h pour activer les conditions de fermeture

  delay(5000);
 
}

void loop() {
 
  rfidv = digitalRead(rfid);
  
// télérupteur rfid
   if (rfidv!=etat_rfidv)
    {
      if (!rfidv)
      {
        //Inversion de la valeur de la variable memoire 
        memoire_2=!memoire_2;
      } 

       //Inversion de la valeur de la variable memoire 
       memoire_2=!memoire_2;
    }
    
      if (memoire_2==1)
        {  
        digitalWrite(ledEtat_mem, 1);
        }
      else {
        digitalWrite(ledEtat_mem, 0);
        }
     
      buttonState = digitalRead(Ir);
      if(buttonState == 0)
       {
        digitalWrite(ledIr, 0);
        }
      else
        {
        digitalWrite(ledIr, 1);
      }
  

  if (memoire_2==1 && buttonState==1){
    myServo.write(0);
    digitalWrite(ledPresence, 1);
    delay(20);
  }
    
// memorisation de l'anciennne valeur de la 
// variable     

  etat_rfidv=rfidv; 
}

//une fois fermée, mettre en hibernation jusqu'au lendemain midi pour relancer l'ensemble du programme.

Mais voilà, comme vous le constatez, la gestion de l'heure n'est pas encore implémentée et c'est là que j'ai besoin de votre aide. Comment on fait ça !!!
Je cherche de mon côté, mais n'est pas encore trouvé la meilleure des manières. Alors je me tourne vers vous pour un petit coup de pouce, qui je suis sûr, me fera gagner de nombreuses heures que je pourrais passer avec ma famille.

En tout cas, merci à tous du temps que vous aurez pris pour lire mon premier roman !!
La bise au chat :sweat_smile:

hello
sujet déplacé dans la bonne rubrique du forum.
merci de lire les bonnes pratiques du forumICI

Bonjour,

Une idée plus proche du hard que du soft.

Lire l'état d'un contact de programateur basique pour connaitre l'heure d'ouverture et de fermeture sous condition avec un truc comme ça cablé sur une "INPUT_PULLUP"

Je donne un exemple du premier que j'ai trouvé, mais il y a beaucoup moins cher en cherchant mieux.

(Je vais me faire souffler dans les bronches par les softeux, au moins je donne du grain à moudre...)

PETIT RAJOUT:
-Utiliser pin 2 ou 3 en mode interupt pin
-Rajouter un anti rebond hard ou soft ou bibliothéque debounce.

Et bien entendu, integrer cela dans ton code actuel.

(L'inter, en INPUT_PULLUP se ferme = il est midi, sortir d'hibernation et ouvrir la porte...
L'inter s'ouvre, il est 18h, attendre que soit réunies les conditions pour fermer la porte et entrer en hibernation)

En général, on ajoute un module RTC (horloge temps réel) au montage. C'est assez bon marché et les exemples d'utilisation sont nombreux...

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.