Bonjour,
je travaille sur un projet d’alarme d’évacuation à très basse consommation et d’un prix de revient peu élevé, dans lequel je fais intervenir des transmissions sans fil.
Pour les transmissions radio, je souhaite utiliser le couple " microcontrôleur Attiny85-20PU et le module transducteur NRF24L01+ ".
Description matériel:
l’installation complète comprend plusieurs coffrets disposés chacun au centre d'une zone à protéger.
Chaque coffret est distant l’un de l’autre de 20 à 30 mètres suivant les obstacles pouvant influencer la qualité des transmissions.
Chaque coffret de protection de zone renferme :
- Un déclencheur d’évacuation manuel: intégré ou déporté.
- Une alarme d’évacuation type IV (NFS32-001).
- Un module de transmission par radio à 2,4 GHz toujours en veille, ultra basse consommation.

Fonctionnement:
S’il faut, pour une raison valable, faire évacuer les personnes d’une zone devenue dangereuse:
repérer et actionner le déclencheur manuel le plus proche.
Lorsque celui-ci est actionné, il alimente en tension une broche déterminée de l’attiny85, créant ainsi un changement d’état de celle-ci.
Au réveil du watchdog de l’attiny85 (programmé toutes les 2 secondes), celui-ci détecte le changement d’état de la broche et lance la suite du programme :
a) d’une part envoie un signal "plus" pendant 10 secondes sur la boucle de l’alarme d’évacuation provoquant ainsi sa mise en route;
b) d’autre part, le programme positionne le module en mode émetteur pour qu'il envoie un signal radio pendant 20 secondes aux récepteurs des coffrets environnants, repasse le module et le µC en mode réception puis en mode veille.
Le récepteur de la zone mitoyenne ayant reçu le signal est réveillé à la fin du cycle du watchdog puis il exécute à son tour les mêmes opérations que celles effectuées par le coffret précédent et ainsi de suite jusqu’à ce que tous les coffrets installés soient en action.
Besoin d'aide:
Maintenant que je vous ai décris mon projet, venons-en à ma demande d’aide.
Elle porte principalement sur le programme de transmissions.
Je souhaiterai déjà pouvoir libérer une broche du µC pour exécuter les 2 opérations qui me sont nécessaires:
- détecter le changement d'état de la broche libre de l'attiny;
- envoyer, à partir de la broche libre et pendant 10 secondes du + 3.7v vers l'alarme.
Important! :
Dans ce projet, l'émetteur n'a pas besoin de recevoir la confirmation de la bonne réception du message par le récepteur.
Le récepteur (Attiny85) n'a pas non plus d'autres accessoires à gérer.

============oooooOOOOOOOOOOOOOooooo============

J'ai réalisé un émetteur avec un module NRF24L01+ et un Attiny 85 chargé avec le code décrit ci-dessous.
Ensuite j'ai réalisé un récepteur toujours avec un module NRF24L01+ et un Attiny 85 (8 pins) également chargé avec le code également décrit ci-dessous.
L'ensemble fonctionne parfaitement bien.
J'ai connecté une led de contrôle en parallèle avec la broche recevant le CE du module1 NRF24L01+.
Lorsque j'alimente en 3.7v l'ensenbre récepteur, la led de contrôle s'allume en continu.
Lorsque j'alimente en 3.7v l'ensemble émetteur, la led de contrôle également en parallèle à CE du module2, clignote comme demandé dans le programme (addition des delay).
Quelques secondes après la mise sous tension, la led du récepteur clignote au rhytme demandé dans le programme du récepteur (la transmission du signal a bien fonctionné).
Pour mon application, le processus du récepteur est différent, une broche doit être libre pour exécuter les 2 fonctions décrites ci-dessus dans le paragraphe "Besoin d'aide".
J'ai bien sûr ratissé large sur Google et j'ai trouvé ces 3 sites qui m'ont parus intéressants mais il me semble qu'il ne s'appliquent qu'aux émetteurs, hors dans mon projet, je n'ai pas à toucher à mon émetteur hormis la mise en mode "sleep", mais c'est bien sur le récepteur qu'il me faudrait libérer une pin.
Les 3 sites:
http://nerdralph.blogspot.ca/2014/01/nrf24l01-control-with-3-attiny85-pins.html
http://hackaday.com/2015/06/05/embed...uses-few-pins/
http://nerdralph.blogspot.ca/2015/05/nrf24l01-control-with-2-mcu-pins-using.html

Les codes:
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
/******** EMETTEUR
*
*
*                        ** Hardware configuration **
                ATtiny85 Pin map with CE_PIN 3 and CSN_PIN 4
                                 +-\/-+
                   NC      PB5  1|o   |8  Vcc --- nRF24L01  VCC, pin2 --- LED --- 5V
    nRF24L01  CE, pin3 --- PB3  2|    |7  PB2 --- nRF24L01  SCK, pin5
    nRF24L01 CSN, pin4 --- PB4  3|    |6  PB1 --- nRF24L01 MOSI, pin7
    nRF24L01 GND, pin1 --- GND  4|    |5  PB0 --- nRF24L01 MISO, pin6
                                 +----+
*/
  #include "RF24.h"     
  #define CE_PIN 3
  #define CSN_PIN 4
//**************************** Configuration **********************************
  RF24 radio (CE_PIN , CSN_PIN );  
  const byte rxAddr[6] = "01924";
//*****************************************************************************
 
void setup(void) 
{
  radio.begin();                       
  radio.setChannel(1);                 
  radio.setPALevel(RF24_PA_HIGH);        
  radio.setDataRate(RF24_250KBPS);     
  radio.setRetries(1,15);          
  radio.setCRCLength(RF24_CRC_8);  
  radio.openWritingPipe(rxAddr); 
  radio.stopListening();               
}
 
void loop(void)
{
  delay(300);            
  radio.write("1", 1);  
}
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
/* *********** RECEPTEUR
                      ** Hardware configuration **
               ATtiny85 Pin map with CE_PIN 3 and CSN_PIN 4
                                 +-\/-+
                   NC      PB5  1|o   |8  Vcc --- nRF24L01  VCC, pin2 --- LED --- 5V
    nRF24L01  CE, pin3 --- PB3  2|    |7  PB2 --- nRF24L01  SCK, pin5
    nRF24L01 CSN, pin4 --- PB4  3|    |6  PB1 --- nRF24L01 MOSI, pin7
    nRF24L01 GND, pin1 --- GND  4|    |5  PB0 --- nRF24L01 MISO, pin6
                                 +----+
*/
  #include "RF24.h" 
  #define CE_PIN 3
  #define CSN_PIN 4
  int LED = 3;      // pin pour led utilisée en commun avec CE-PIN    
  byte alarm;
  bool check=0;  
/**************************** Configuration *******************************/
   RF24 radio(CE_PIN, CSN_PIN); 
  const byte rxAddr[6] = "01924";
/**************************************************************************/
 
void setup(void) 
{
  radio.begin();                        
  radio.setChannel(1);                 
  radio.setPALevel(RF24_PA_MIN);      
  radio.setDataRate(RF24_250KBPS);    
  radio.setRetries(1,15);               
  radio.setCRCLength(RF24_CRC_8);      
  radio.openReadingPipe(1,rxAddr);  
  radio.startListening();           
  delay(300);
}
 
void beep()
    {
      digitalWrite(LED, HIGH);
      delay(1000);
      digitalWrite(LED, LOW);
      delay(500);  
    }
 
void loop(void)
{
  if(radio.available() || check) 
  {
    radio.read(&alarm, 1); 
    beep();
    delay(200);
    check = 1;
  } 
  If(!radio.available() || check)
  {
    digitalWrite(LED, LOW);
  } 
}
Si quelqu'un peut me donner son avis ou me proposer un début de solution, je prends.
merci par avance,
michel