Progetto Cicalino Nrf24L01

Ciao a tutti. Vorrei presentarvi il mio primo lavoro su Arduino e vorrei avere dei pareri da gente più esperta di me.

Il progetto parte da un idea di mio padre. Un semplice cerca persone per chiamare dalla cucina di un bar una cameriera che dista circa una quindicina di metri.

Funzionamento : Arduino 1(Cucina) → 2 bottoni (chiamata) + 2 led (verifica di arrivo messaggio)

Arduino 2(Impiegato1) → 1 Buzzer + 1 led

Arduino 3(Impiegato3) → 1 Buzzer + 1 led

Hardware = Elegoo Nano v3.0 ATmega328P
Modulo Kuman nRF24L01 + PA + LNA Antenna e ricetrasmettitore Wireless
2 Buzzer, 4 Led, 2 pulsanti, Condensatori 10 uF

Libreria = RF24 → https://github.com/nRF24/RF24

Parte 1

Collegamenti Arduino 1 NANO–NRF24L01

3V3 → V+ }
GND → GND } uF
9 → CE
10 → CSN
11 → MOSI
12 → MISO
13 → SCK
NO → IRQ

Pulsante pin 4, 7

led pin 2, 5

Arduino 2/3 NANO–NRF24L01

3V3 → V+ }
GND → GND } uF
9 → CE
10 → CSN
11 → MOSI
12 → MISO
13 → SCK
NO → IRQ

Buzzer e led pin 3

Parte 2 ( non definitiva)

Ora, ho creato due sketch uno per la trasmittente e uno per il ricevente. Ho preso spunto da internet in quanto non sono molto esperto. Gli sketch non sono definitivi in quanto manca ancora il terzo terminale (Cameriere 2) e nello sketch del trasmettitore manca la verifica dei led se il messaggio viene ricevuto o meno.

Trasmittente

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[][6] = {"00001", "00002"};
const int pinout = 7;
const int pinin = 4; //input from button to arduino

void setup() {

  pinMode(3, OUTPUT); /
  
  Serial.begin(115200);
  radio.begin();
  radio.openWritingPipe(address[1]);
  radio.setPALevel(RF24_PA_HIGH); // (MIN, LOW, HIGH, MAX)
  radio.stopListening();

  pinMode(pinin, INPUT);
  pinMode(pinout, OUTPUT);
}
void loop() {
  digitalWrite(pinout, HIGH);

  int tombol = digitalRead(pinin);

  if (tombol != LOW) {
    txin();
  }
  else {
    Serial.println("Premi pulsante per inviare dati");
    delay(1000);
  }
}
void txin() {
  bool txan;
  const char data[] = "Chiamato";
   
  txan = radio.write(&data, sizeof(data));
    delay(1000);
   if (txan)
        Serial.println("Data Sent");
   else
    Serial.println("Failed");
    
}

Ricevente

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(9, 10); // CE, CSN


const byte address[][6] = {"00001","00002"};
void setup() {

   pinMode(3, OUTPUT); //miki
   
  Serial.begin(115200);
  radio.begin();
  radio.openReadingPipe(0, address[1]);
  radio.setPALevel(RF24_PA_HIGH);
  radio.startListening();
  
}
void loop() {
  if (radio.available()) {

    digitalWrite(3, HIGH); //miki
    delay(1000); //miki
    digitalWrite(3, LOW); //miki
    delay(1000); //miki
    
    char text[90] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
  }
 }

Parte 3 ( in fase di sviluppo)

Andrò a realizzare con una stampante 3d e https://www.tinkercad.com/ i contenitori delle trasmittenti.
Posterò i file una volta realizzati

Commento

Nel progetto dovrà essere integrato un sistema di alimentazione, io pensavo a batterie al litio ricaricabili, per ora per fare test ho utilizzato due powerbank usb, quelle che si utilizzano per i cellulari, e tutto ha funzionato. Accetto consigli per migliorare e terminare il mio progetto. Grazie a chiunque abbia speso cinque minuti per leggermi. Buona vita!

Il progetto con gli nrf24 non mi dispiace, ma fossi in te, se la comunicazione ti serve solo unidirezionale, userei i moduli HC-11 come "digital output" remoti, senza scomodare sketch e enne potenziali rogne (visto che mi pare si parli di un progetto fatto "per lavoro" non per semplice curiosità). Un pulsante chiude un contatto (ingresso) su un modulo e un'uscita dell'altro modulo si alza accendendo led e buzzer. Fine.
Per la batteria non cambia nulla.