Commander un PIR par un bouton

Bonjour le Monde

Je voudrais allumer un détecteur de mouvement à l'aide d'un bouton.
Après le code et les branchements du PIR ne me posent pas de problème.
Actuellement, malgré le bouton le PIR continue d'envoyer des données.
Merci pour votre éventuelle aide

Voici mon code:


> #define PIRPIN		2
#define BUTTONPIN	3
#define LEDPIN		A1

// Declare and initialize the PIR_State variable
int PIR_State = 0;
int BUTTON_State = 0;  // variable for reading the pushbutton status
int iCount;

void setup()
{
	pinMode(LED_BUILTIN, OUTPUT);
	pinMode(BUTTONPIN, INPUT);
	pinMode(LEDPIN, OUTPUT);

	Serial.begin(9600);

  iCount = 0 ;
}

void loop()
{
  char  szTmp[128];
	BUTTON_State = digitalRead(BUTTONPIN);
	if (BUTTON_State == HIGH)
	{
    pinMode(PIRPIN, INPUT);
    iCount = 0;

		digitalWrite(LEDPIN, HIGH);
		PIR_State = digitalRead(PIRPIN);  // Read the PIR_State of the PIR sensor
		if (PIR_State == HIGH)
		{
			// If the PIR sensor detects movement (PIR_State = HIGH)

      iCount++;
      sprintf(szTmp,"Chat en vue (%d)",iCount);
			Serial.println(szTmp);
			digitalWrite(LEDPIN, HIGH);		// Turn the LED on
			delay(1000);					// Pause for 500 milliseconds (half a second)
			digitalWrite(LEDPIN, LOW); 		// Turn the LED off
			delay(1000);					// Wait for one second
		}
		else
		{
			Serial.println("Monitoring...");
			delay(100);
		}
	}
	else
	{
		digitalWrite(LEDPIN, LOW);
	}
}

saisissez ou collez du code ici


Philippe

Bonjour,

Pouvez vous nous en dire plus sur la façon dont le bouton est brancher sur le PIR ?
Quel est son modèle (1RT, 2RT, 3RT) ?
Sur quels fil intervient il (VCC, GND, OUT) ?

Et quel PIR utilisez vous ?

Le traditionnel HC-SR501 ou un autre ?

J'utilise le HC-SR50
Le bouton est un bpetit bouton poussoir (bornes 1 & 3 conectées).
Un fil va de la borne 3 du bouton à la borne 2 de la carte UNO R4

Avez vous pensé a la résistance PULLDOWN / PULLUP ?

non

Il en faut une :

Votre bouton poussoir est connecter sur quoi de l'autre coté ?
La masse (GND) ou le +5V (ou le +3.3V) ?

Pour vérifier que votre bouton poussoir fonctionne correctement, vous pouvez essayer un code comme ceci :

int bouton_poussoir = 2;

void setup(){
    Serial.begin(9600);
    pinMode(bouton_poussoir, INPUT);
}
void loop(){
    Serial.println(digitalRead(bouton_poussoir));
    delay(500);
}

(Non testé)

Le bouton poussoir fonctionne bien. J'ai mis une led derrière pour vérifier

Peut être que le bouton fonctionne bien, mais est ce que l'Arduino lit bien la valeur renvoyé ?

oui
je l'ai vérifié dans le moniteur srie
Le matériel est ok, c'est que le PIR émet même sans appuyer sur le bouton !

Euh oui, ça s'est normal :
Tant que le PIR est alimenté, il renvoie des donnée.

Si vous ne voulez pas que les PIR envoie des donnée, il faut le débrancher.
Si vous ne voulez pas que l'Arduino reçoive des données, il faut couper le fil.

Ces deux solution peuvent êtres obtenue en utilisant un ou plusieurs relai.

Il y a des solutions un peu moins extrêmes.
On peut aussi ignorer le signal dans le code lorsque le bouton a été pressé.

Oui, mais le PIR continuera d'envoyer un signal, et l'Arduino continuera a de le recevoir. Meme si il ne le traite pas...

Au bout de combien de temps la pile 9 Volts se viderait.
Je fait cela pour une absence de deux semaines. J'ai peur qu'il n'y ait plus de jus rapidement.

L'autonomie d'une batterie ce calcule assez facilement, mais il faut impérativement connaitre :

  • La consommation de l'Arduino en Ampère
  • La consommation des différents capteurs et actionneurs en Ampère
  • La capacité de la batterie en Ampère Heure (Ah)

Sans ces élément, impossible de faire le calcul...

Donc vous voulez débrancher le PIR afin qu'il ne consomme pas de courant ?

Et....

Le BISS0001 que l'on trouve sur tous les détecteur PIR ne consomme pratiquement rien, de ce que j'ai trouvé il consommerait 1mA. L'Arduino (lequel d'ailleurs??) va consommer 10x plus.
Dans le code donné au #1, le code tourne en boucle la consommation va être maximum.

Et je ne comprends pas très bien ce que le bouton vient faire là-dedans. Si tu es absent, qui va appuyer sur le bouton???

A la limite, ce serait plus logique si le PIR était toujours sous tension et qu'il alimente l'Arduino temporairement lorsqu'il détecte quelque chose.

Je ne suis pas bête je l'allume en partant.
Un PIR n'a jamais fourni une alimentation, quelque soit son voltage, à une carte Arduino.

Et vous ne pourriez pas brancher la carte Arduino sur le secteur ?
(Via une alimentation adaptée bien sûr)

Oui - Ca va finir par être la solution

S'est le plus simple.
Si vous avez la possibilité, mettez une alimentation CC entre 7V et 12V sur la broche VIN de la carte Arduino, ou sur la prise Jack (le + est au centre).

Ce que je veux dire c'est que c'est une fonction inutile si tu dois l'activer avant de partir autant tout simplement allumer le module lorsque tu pars.

Bien évidemment, mais elle peut l'activer un relais, un transistor qui alimentera l'Arduino le temps nécessaire. De nombreux modules PIR ont une sortie collecteur ouvert qui peut parfaitement alimenter un circuit externe comme une carte Arduino.