Bonjour à vous, aujourd’hui j’ai acheté un capteur PIR avec 4leds chez Action. Avec quelques fils, un attiny85 et un émetteur 433 on peut le faire reconnaitre par le rfxcom. Voici la démarche :
Matériel :
1 Attiny + Support DIL8 + un petit morceau de pcb.
Du fil fin (j’utilise du AWG24 ou 30)
1 emetteur 433 chinois à 3 pins (Vcc Gnd data)
De quoi programmer un attiny (Clé USBASP)
Etape 1 : Brancher l’attiny
On positionne l’interrupteur sur OFF, on démonte le capteur. On voit le composant qui gère le pir , c’est un LP0001A qui possède 16pins.
On soude un fil sur la patte 2, sa tension U=3.20V (tension régulée) quand le pir détecte qqchose, sinon U=0. On relie ce fil vers la patte D1 de l’attiny.
On soude un fil sur la borne (+) coté batterie (fil rouge chez moi) que l’on relie vers la borne Vcc de l’attiny.
On soude un dernier fil coté masse au niveau du sélecteur que l’on relie à la masse de l’attiny.
Optionnel, avec un cutter, on peut déconnecter le transistor qui allume les leds (voir figure) Etape 2 : Brancher l’émetteur.
On soude la borne Vcc et la masse du 433 comme précédemment. J’ai soudé la borne Data sur la pin D3 du microcontrôleur.
Etape 3 : Le programme.
Code : Tout sélectionner
#include <Arduino.h>
// +-\/-+
// Ain0 (D 5) PB5 1| |8 Vcc
// TX43 (D 3) PB3 2| |7 PB2 (D 2)
// Ain2 (D 4) PB4 3| |6 PB1 (D 1) >>OUTPIR
// GND 4| |5 PB0 (D 0)
*/
#define PIN_PIR 1
boolean presence;
boolean old_presence = LOW;
#include <avr/sleep.h>
#include <avr/power.h>
#include <RCSwitch.h>
#define PIN_433 3
#define CAPTEUR_ID 'd',4,3 //mettre l'id du capteur 'a' 'b' 'c' ou 'd' , 1 2 3 4 , 1 2 3 4
RCSwitch myswitch = RCSwitch();
void sleep() {
GIMSK |= _BV(PCIE); // Enable Pin Change Interrupts
PCMSK |= _BV(PCINT1); // Use PB1 as interrupt pin
// PCMSK |= _BV(PCINT1); // Use PB1 as interrupt pin
ADCSRA &= ~_BV(ADEN); // ADC off
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // replaces above statement
sleep_enable(); // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
sei(); // Enable interrupts
sleep_cpu(); // sleep
cli(); // Disable interrupts
PCMSK &= ~_BV(PCINT2); // Turn off PB2 as interrupt pin
// PCMSK &= ~_BV(PCINT1); // Turn off PB1 as interrupt pin
sleep_disable(); // Clear SE bit
ADCSRA |= _BV(ADEN); // ADC on
sei(); // Enable interrupts
}
ISR (PCINT0_vect)
{
presence = digitalRead(PIN_PIR);
delay(100); //évite les oscillations de tension
if (presence == HIGH) myswitch.switchOn(CAPTEUR_ID);
if (presence == LOW) myswitch.switchOff(CAPTEUR_ID);
}
void setup()
{
pinMode(PIN_PIR,INPUT);
myswitch.enableTransmit(PIN_433);
myswitch.switchOff(CAPTEUR_ID); //
}
void loop() {
sleep();
} 1- Pour l'instant cela fonctionne mais je n'ai pas encore assez de recul concernant la durée de vie des piles ???? Wait and see.
2- Je n'ai pas fait d'école de design mais la prochaine fois je recouperais le pcb plus petit pour le placer à l’intérieur du capteur etc...
Bonne soirée à vous.
